/**********************************************************
 *
 *  intuistr.c
 *
 *  Strukturen für Intuition (Fenster, Gadgets, Requester)
 *  zu funktzeich.c
 *
 *  Peter Gober, 15-May-88
 *               12-Oct-88  völlig überarbeitet
 *
 **********************************************************/


#include <exec/types.h>
#include <graphics/text.h>
#include <intuition/intuition.h>

/*
 *  Fenster für die Grafikdarstellung
 */

struct NewWindow mynewwindow =
{
   0, 0,                               /* LeftEdge, TopEdge */
   640, 256,                           /* Width, Height */
   -1, -1,                             /* DetailPen, BlockPen */
   0,                                  /* IDCMPFlags (werden später gesetzt) */
   WINDOWSIZING | WINDOWDEPTH |
   WINDOWCLOSE | WINDOWDRAG |
   GIMMEZEROZERO | SMART_REFRESH |
   NOCAREREFRESH,                      /* Flags */
   0L,                                 /* FirstGadget */
   0L,                                 /* CheckMark */
   (UBYTE *) "FunktZeich V1.2 (Doppelklick rechts zeigt Requester)",
                                       /* Title */
   0L,                                 /* Screen */
   0L,                                 /* BitMap */
   120, 40,                            /* MinWidth, MinHeight */
   -1, -1,                             /* MaxWidth, MaxHeight */
   WBENCHSCREEN                        /* Type */
};

/*
 *  Undo-Puffer für alle Gadgets
 */

UBYTE undobuf[128];

/*
 *  TextAttr für alle Texte im Requester (wird angegeben, da "Design" des
 *  Requesters durcheianderkommt, wenn Benutzer den 60er Zeichensatz wählt
 *  und hier nichts angegeben wird)
 */

struct TextAttr mytextattr =
{
   (STRPTR) "topaz.font",              /* ta_Name */
   TOPAZ_EIGHTY,                       /* ta_YSize */
   FS_NORMAL,                          /* ta_Style */
   FPF_ROMFONT                         /* ta_Flags */
};

/*
 *  "Strich" für Eingabe der Funktionen (die Höhe ist 10, damit auch der
 *  große Zeichensatz Platz hat)
 */

SHORT funcrendxy[] =
{
   0, 9,
   30 * 8 - 1, 9
};

struct Border funcrend =
{
   0, 0,                               /* LeftEdge, TopEdge */
   1, 0, JAM1,                         /* FrontPen, BackPen, DrawMode */
   2,                                  /* Count */
   funcrendxy,                         /* XY */
   NULL                                /* NextBorder */
};

/*
 *  Text für die Funktionseingabe (y = )
 */

struct IntuiText functext =
{
   1, 0,                               /* FrontPen, BackPen */
   JAM1,                               /* DrawMode */
   - 4 * 8 + 1, 0,                     /* LeftEdge, TopEdge */
   &mytextattr,                        /* ITextFont */
   (UBYTE *) "y = ",                   /* IText */
   NULL                                /* NextText */
};

/*
 *  Farbiger Strich für 1. Funktion (weiß)
 */

SHORT func1linexy[] =
{
   - 10 * 8 + 1, 3,
   -  5 * 8 + 1, 3
};

struct Border func1line =
{
   0, 0,                               /* LeftEdge, TopEdge */
   1, 0, JAM1,                         /* FrontPen, BackPen, DrawMode */
   2,                                  /* Count */
   func1linexy,                        /* XY */
   &funcrend                           /* NextBorder */
};

/*
 *  StringInfo- und Gadgetstruktur für 1. Funktion
 */

UBYTE func1buf[128] = "sin x";

struct StringInfo func1strinfo =
{
   func1buf,                           /* Buffer */
   undobuf,                            /* UndoBuffer */
   0,                                  /* BufPos */
   128,                                /* MaxChars */
   0,                                  /* DispPos */
   0, 0, 0, 0, 0, NULL, 0,             /* ... kommt von Intuition */
   NULL                                /* AltKeyMap */
};

struct Gadget func1gad =
{
   NULL,                               /* NextGadget */
   12 * 8 - 1, 1 * 12 - 1, 30 * 8, 9,  /* LeftEdge, TopEdge, Width, Height */
   GADGHCOMP,                          /* Flags */
   0,                                  /* Activation */
   STRGADGET | REQGADGET,              /* GadgetType */
   (APTR) &func1line,                  /* GadgetRender */
   NULL,                               /* SelectRender */
   &functext,                          /* GadgetText */
   0L,                                 /* MutualExclude */
   (APTR) &func1strinfo,               /* SpecialInfo */
   0,                                  /* GadgetID */
   NULL                                /* UserData */
};

/*
 *  Farbiger Strich für 2. Funktion (schwarz)
 */

SHORT func2linexy[] =
{
   - 10 * 8 + 1, 3,
   -  5 * 8 + 1, 3
};

struct Border func2line =
{
   0, 0,                               /* LeftEdge, TopEdge */
   2, 0, JAM1,                         /* FrontPen, BackPen, DrawMode */
   2,                                  /* Count */
   func2linexy,                        /* XY */
   &funcrend                           /* NextBorder */
};

/*
 *  StringInfo- und Gadgetstruktur für 2. Funktion
 */

UBYTE func2buf[128];

struct StringInfo func2strinfo =
{
   func2buf,                           /* Buffer */
   undobuf,                            /* UndoBuffer */
   0,                                  /* BufPos */
   128,                                /* MaxChars */
   0,                                  /* DispPos */
   0, 0, 0, 0, 0, NULL, 0,             /* ... kommt von Intuition */
   NULL                                /* AltKeyMap */
};

struct Gadget func2gad =
{
   &func1gad,                          /* NextGadget */
   12 * 8 - 1, 2 * 12 - 1, 30 * 8, 9,  /* LeftEdge, TopEdge, Width, Height */
   GADGHCOMP,                          /* Flags */
   0,                                  /* Activation */
   STRGADGET | REQGADGET,              /* GadgetType */
   (APTR) &func2line,                  /* GadgetRender */
   NULL,                               /* SelectRender */
   &functext,                          /* GadgetText */
   0L,                                 /* MutualExclude */
   (APTR) &func2strinfo,               /* SpecialInfo */
   0,                                  /* GadgetID */
   NULL                                /* UserData */
};

/*
 *  Farbiger Strich für 3. Funktion (orange)
 */

SHORT func3linexy[] =
{
   - 10 * 8 + 1, 3,
   -  5 * 8 + 1, 3
};

struct Border func3line =
{
   0, 0,                               /* LeftEdge, TopEdge */
   3, 0, JAM1,                         /* FrontPen, BackPen, DrawMode */
   2,                                  /* Count */
   func3linexy,                        /* XY */
   &funcrend                           /* NextBorder */
};

/*
 *  StringInfo- und Gadgetstruktur für 2. Funktion
 */

UBYTE func3buf[128];

struct StringInfo func3strinfo =
{
   func3buf,                           /* Buffer */
   undobuf,                            /* UndoBuffer */
   0,                                  /* BufPos */
   128,                                /* MaxChars */
   0,                                  /* DispPos */
   0, 0, 0, 0, 0, NULL, 0,             /* ... kommt von Intuition */
   NULL                                /* AltKeyMap */
};

struct Gadget func3gad =
{
   &func2gad,                          /* NextGadget */
   12 * 8 - 1, 3 * 12 - 1, 30 * 8, 9,  /* LeftEdge, TopEdge, Width, Height */
   GADGHCOMP,                          /* Flags */
   0,                                  /* Activation */
   STRGADGET | REQGADGET,              /* GadgetType */
   (APTR) &func3line,                  /* GadgetRender */
   NULL,                               /* SelectRender */
   &functext,                          /* GadgetText */
   0L,                                 /* MutualExclude */
   (APTR) &func3strinfo,               /* SpecialInfo */
   0,                                  /* GadgetID */
   NULL                                /* UserData */
};

/*
 *  "Strich" für alle "Float-Gadgets" (d. h. solche, die float-Zahlen eingeben
 *  lassen)
 */

SHORT floatrendxy[] =
{
   0, 9,
   5 * 8 - 1, 9
};

struct Border floatrend =
{
   0, 0,                               /* LeftEdge, TopEdge */
   1, 0, JAM1,                         /* FrontPen, BackPen, DrawMode */
   2,                                  /* Count */
   floatrendxy,                        /* XY */
   NULL                                /* NextBorder */
};

/*
 *  Gadgets für Eingabe des Zeichenbereiches
 */

struct IntuiText rangxtext =
{
   1, 0,                               /* FrontPen, BackPen */
   JAM1,                               /* DrawMode */
   6 * 8 - 1, 0,                       /* LeftEdge, TopEdge */
   &mytextattr,                        /* ITextFont */
   (UBYTE *) "<= x <=",                /* IText */
   NULL                                /* NextText */
};

UBYTE minxbuf[10] = "-10";

struct StringInfo minxstrinfo =
{
   minxbuf,                            /* Buffer */
   undobuf,                            /* UndoBuffer */
   0,                                  /* BufPos */
   10,                                 /* MaxChars */
   0,                                  /* DispPos */
   0, 0, 0, 0, 0, NULL, 0,             /* ... kommt von Intuition */
   NULL                                /* AltKeyMap */
};

struct Gadget minxgad =
{
   &func3gad,                          /* NextGadget */
   2 * 8 - 1, 6 * 12 - 1, 5 * 8, 9,    /* LeftEdge, TopEdge, Width, Height */
   GADGHCOMP,                          /* Flags */
   0,                                  /* Activation */
   STRGADGET | REQGADGET,              /* GadgetType */
   (APTR) &floatrend,                  /* GadgetRender */
   NULL,                               /* SelectRender */
   &rangxtext,                         /* GadgetText */
   0L,                                 /* MutualExclude */
   (APTR) &minxstrinfo,                /* SpecialInfo */
   0,                                  /* GadgetID */
   NULL                                /* UserData */
};

UBYTE maxxbuf[10] = "+10";

struct StringInfo maxxstrinfo =
{
   maxxbuf,                            /* Buffer */
   undobuf,                            /* UndoBuffer */
   0,                                  /* BufPos */
   10,                                 /* MaxChars */
   0,                                  /* DispPos */
   0, 0, 0, 0, 0, NULL, 0,             /* ... kommt von Intuition */
   NULL                                /* AltKeyMap */
};

struct Gadget maxxgad =
{
   &minxgad,                           /* NextGadget */
   16 * 8 - 1, 6 * 12 - 1, 5 * 8, 9,   /* LeftEdge, TopEdge, Width, Height */
   GADGHCOMP,                          /* Flags */
   0,                                  /* Activation */
   STRGADGET | REQGADGET,              /* GadgetType */
   (APTR) &floatrend,                  /* GadgetRender */
   NULL,                               /* SelectRender */
   NULL,                               /* GadgetText */
   0L,                                 /* MutualExclude */
   (APTR) &maxxstrinfo,                /* SpecialInfo */
   0,                                  /* GadgetID */
   NULL                                /* UserData */
};

struct IntuiText rangytext =
{
   1, 0,                               /* FrontPen, BackPen */
   JAM1,                               /* DrawMode */
   6 * 8 - 1, 0,                       /* LeftEdge, TopEdge */
   &mytextattr,                        /* ITextFont */
   (UBYTE *) "<= y <=",                /* IText */
   NULL                                /* NextText */
};

UBYTE minybuf[10] = "-1";

struct StringInfo minystrinfo =
{
   minybuf,                            /* Buffer */
   undobuf,                            /* UndoBuffer */
   0,                                  /* BufPos */
   10,                                 /* MaxChars */
   0,                                  /* DispPos */
   0, 0, 0, 0, 0, NULL, 0,             /* ... kommt von Intuition */
   NULL                                /* AltKeyMap */
};

struct Gadget minygad =
{
   &maxxgad,                           /* NextGadget */
   2 * 8 - 1, 7 * 12 - 1, 5 * 8, 9,    /* LeftEdge, TopEdge, Width, Height */
   GADGHCOMP,                          /* Flags */
   0,                                  /* Activation */
   STRGADGET | REQGADGET,              /* GadgetType */
   (APTR) &floatrend,                  /* GadgetRender */
   NULL,                               /* SelectRender */
   &rangytext,                         /* GadgetText */
   0L,                                 /* MutualExclude */
   (APTR) &minystrinfo,                /* SpecialInfo */
   0,                                  /* GadgetID */
   NULL                                /* UserData */
};

UBYTE maxybuf[10] = "+1";

struct StringInfo maxystrinfo =
{
   maxybuf,                            /* Buffer */
   undobuf,                            /* UndoBuffer */
   0,                                  /* BufPos */
   10,                                 /* MaxChars */
   0,                                  /* DispPos */
   0, 0, 0, 0, 0, NULL, 0,             /* ... kommt von Intuition */
   NULL                                /* AltKeyMap */
};

struct Gadget maxygad =
{
   &minygad,                           /* NextGadget */
   16 * 8 - 1, 7 * 12 - 1, 5 * 8, 9,   /* LeftEdge, TopEdge, Width, Height */
   GADGHCOMP,                          /* Flags */
   0,                                  /* Activation */
   STRGADGET | REQGADGET,              /* GadgetType */
   (APTR) &floatrend,                  /* GadgetRender */
   NULL,                               /* SelectRender */
   NULL,                               /* GadgetText */
   0L,                                 /* MutualExclude */
   (APTR) &maxystrinfo,                /* SpecialInfo */
   0,                                  /* GadgetID */
   NULL                                /* UserData */
};

/*
 *  Gadgets für die Eingabe der Achsenmarkierungsabstände
 */

struct IntuiText dxtext =
{
   1, 0,                               /* FrontPen, BackPen */
   JAM1,                               /* DrawMode */
   - 10 * 8 + 1, 0,                    /* LeftEdge, TopEdge */
   &mytextattr,                        /* ITextFont */
   (UBYTE *) "Delta x = ",             /* IText */
   NULL                                /* NextText */
};

UBYTE dxbuf[10] = "1";

struct StringInfo dxstrinfo =
{
   dxbuf,                              /* Buffer */
   undobuf,                            /* UndoBuffer */
   0,                                  /* BufPos */
   10,                                 /* MaxChars */
   0,                                  /* DispPos */
   0, 0, 0, 0, 0, NULL, 0,             /* ... kommt von Intuition */
   NULL                                /* AltKeyMap */
};

struct Gadget dxgad =
{
   &maxygad,                           /* NextGadget */
   12 * 8 - 1, 10 * 12 - 1, 5 * 8, 8,  /* LeftEdge, TopEdge, Width, Height */
   GADGHCOMP,                          /* Flags */
   0,                                  /* Activation */
   STRGADGET | REQGADGET,              /* GadgetType */
   (APTR) &floatrend,                  /* GadgetRender */
   NULL,                               /* SelectRender */
   &dxtext,                            /* GadgetText */
   0L,                                 /* MutualExclude */
   (APTR) &dxstrinfo,                  /* SpecialInfo */
   0,                                  /* GadgetID */
   NULL                                /* UserData */
};

struct IntuiText dytext =
{
   1, 0,                               /* FrontPen, BackPen */
   JAM1,                               /* DrawMode */
   - 10 * 8 + 1, 0,                    /* LeftEdge, TopEdge */
   &mytextattr,                        /* ITextFont */
   (UBYTE *) "Delta y = ",             /* IText */
   NULL                                /* NextText */
};

UBYTE dybuf[10] = "0.1";

struct StringInfo dystrinfo =
{
   dybuf,                              /* Buffer */
   undobuf,                            /* UndoBuffer */
   0,                                  /* BufPos */
   10,                                 /* MaxChars */
   0,                                  /* DispPos */
   0, 0, 0, 0, 0, NULL, 0,             /* ... kommt von Intuition */
   NULL                                /* AltKeyMap */
};

struct Gadget dygad =
{
   &dxgad,                             /* NextGadget */
   12 * 8 - 1, 11 * 12 - 1, 5 * 8, 8,  /* LeftEdge, TopEdge, Width, Height */
   GADGHCOMP,                          /* Flags */
   0,                                  /* Activation */
   STRGADGET | REQGADGET,              /* GadgetType */
   (APTR) &floatrend,                  /* GadgetRender */
   NULL,                               /* SelectRender */
   &dytext,                            /* GadgetText */
   0L,                                 /* MutualExclude */
   (APTR) &dystrinfo,                  /* SpecialInfo */
   0,                                  /* GadgetID */
   NULL                                /* UserData */
};

/*
 *  Ok-Gadget (beendet den Requester)
 */

SHORT okgadrendxy[] =
{
   -1, -1,
   6 * 8 + 0, -1,
   6 * 8 + 0, 12 + 0,
   -1, 12 + 0,
   -1, -1,
};

struct Border okgadrend =
{
   0, 0,                               /* LeftEdge, TopEdge */
   1, 0, JAM1,                         /* FrontPen, BackPen, DrawMode */
   5,                                  /* Count */
   okgadrendxy,                        /* XY */
   NULL                                /* NextBorder */
};

struct IntuiText okgadtext =
{
   1, 0,                               /* FrontPen, BackPen */
   JAM1,                               /* DrawMode */
   2 * 8 - 1, 2,                       /* LeftEdge, TopEdge */
   &mytextattr,                        /* ITextFont */
   (UBYTE *) "Ok",                     /* IText */
   NULL                                /* NextText */
};

struct Gadget okgad =
{
   &dygad,                             /* NextGadget */
   19 * 8 - 1, 13 * 12 - 1, 6 * 8, 12, /* LeftEdge, TopEdge, Width, Height */
   GADGHCOMP,                          /* Flags */
   ENDGADGET | RELVERIFY,              /* Activation */
   BOOLGADGET | REQGADGET,             /* GadgetType */
   (APTR) &okgadrend,                  /* GadgetRender */
   NULL,                               /* SelectRender */
   &okgadtext,                         /* GadgetText */
   0L,                                 /* MutualExclude */
   NULL,                               /* SpecialInfo */
   0,                                  /* GadgetID */
   NULL                                /* UserData */
};

/*
 *  allgemeiner Text in dem Requester, der nicht zu nur einem Gadget gehört
 */

struct IntuiText reqtext1 =
{
   1, 0,                               /* FrontPen, BackPen */
   JAM1,                               /* DrawMode */
   2 * 8 - 1, 5 * 12 - 1,              /* LeftEdge, TopEdge */
   &mytextattr,                        /* ITextFont */
   (UBYTE *) "Skalierung:",            /* IText */
   NULL                                /* NextText */
};

struct IntuiText reqtext2 =
{
   1, 0,                               /* FrontPen, BackPen */
   JAM1,                               /* DrawMode */
   2 * 8 - 1, 9 * 12 - 1,              /* LeftEdge, TopEdge */
   &mytextattr,                        /* ITextFont */
   (UBYTE *) "Beschriftungsabstand:",  /* IText */
   &reqtext1                           /* NextText */
};

/*
 *  Die Requesterumrahmung
 */

SHORT reqrendxy[] =
{
   0, 0,
   44 * 8 - 1, 0,
   44 * 8 - 1, 15 * 12 - 1,
   0, 15 * 12 - 1,
   0, 0
};

struct Border reqrend =
{
   0, 0,                               /* LeftEdge, TopEdge */
   1, 0, JAM1,                         /* FrontPen, BackPen, DrawMode */
   5,                                  /* Count */
   reqrendxy,                          /* XY */
   NULL                                /* NextBorder */
};

/*
 *  Der langersehnte Requester
 */

struct Requester myrequester =
{
   NULL,                               /* OlderRequest */
   0, 0,                               /* LeftEdge, TopEdge */
   44 * 8, 15 * 12,                    /* Width, Height */
   0, 0,                               /* RelLeft, RelTop */
   &okgad,                             /* ReqGadget */
   &reqrend,                           /* ReqBorder */
   &reqtext2,                          /* ReqText */
   0,                                  /* Flags */
   0,                                  /* BackFill */
   NULL,                               /* ReqLayer */
   { NULL },                           /* ReqPad1 */
   NULL,                               /* ImageBMap */
   NULL,                               /* RWindow */
   { NULL },                           /* ReqPad2 */
};
