/* modengine1.h
 * Copyright (C) 1990 Commodore-Amiga, Inc.
 * written by David N. Junod
 *
 * header file for modengine1.c
 * application-specific arrays & definitions
 *
 */

/* Modular Function ID's */
enum
{
    NewID = 1,
    OpenID,
    SaveID,
    SaveAsID,
    AboutID,
    QuitID,
    ChooseID,
    DefineID,
    UndoID,
    HelpID,
    ArrowID,
    ShellID,
    Macro1ID,
    WindowID,
    AbortID,
    LAST_ID
};

/* Modular Function Table */
struct Funcs FTable[] =
{
    {NULL,     NO_FUNCTION},	/* padding, for alignment */
    {"NEW",    NewFunc},
    {"OPEN",   OpenFunc},
    {"SAVE",   SaveFunc},
    {"SAVEAS", SaveAsFunc},
    {"ABOUT",  AboutFunc},
    {"QUIT",   QuitFunc},
    {"CHOOSE", ChooseFunc},
    {"DEFINE", DefineFunc},
    {"UNDO",   UndoFunc},
    {"HELP",   HelpFunc},
    {"ARROW",  ArrowFunc},
    {"SHELL",  ShellFunc},
    {"MACRO1", NO_FUNCTION},	/* calls an ARexx macro */
    {"WINDOW", WindowFunc},
    {"ABORT",  AbortFunc},
    {NULL,     NO_FUNCTION}	/* end of array */
};

/* Text attribute to use for our text */
struct TextAttr Topaz80 = {"topaz.font", 8, NULL, NULL};

/* The menu structures for our 'application' */
struct IntuiText UserT[] =
{
    {2, 1, COMPLEMENT, 2, 1, &Topaz80, "Command Shell",   NULL},
    {2, 1, COMPLEMENT, 2, 1, &Topaz80, "ARexx Macro 1", NULL}
};

/* MenuItem structure using our extended structure */
struct EMenuItem UserI[] =
{
    {NULL,               0, 0, 168, 9,
     ITEMTEXT | COMMSEQ | ITEMENABLED | HIGHCOMP,
     0, (APTR) & UserT[0], NULL, 'E', NULL, MENUNULL, ShellID, NULL},

    {&UserI[0].emi_Item, 0, 9, 168, 9,
     ITEMTEXT | COMMSEQ | ITEMENABLED | HIGHCOMP,
     0, (APTR) & UserT[1], NULL, '1', NULL, MENUNULL, Macro1ID, NULL}
};

/* Text for our Menu Items */
struct IntuiText ProjT[] =
{
    {2, 1, COMPLEMENT, 2, 1, &Topaz80, "New", NULL},
    {2, 1, COMPLEMENT, 2, 1, &Topaz80, "Open...", NULL},
    {2, 1, COMPLEMENT, 2, 1, &Topaz80, "Save", NULL},
    {2, 1, COMPLEMENT, 2, 1, &Topaz80, "Save As...", NULL},
    {2, 1, COMPLEMENT, 2, 1, &Topaz80, "About...", NULL},
    {2, 1, COMPLEMENT, 2, 1, &Topaz80, "Quit", NULL}
};

/* Extended Menu Item structures for our Application */
struct EMenuItem ProjI[] =
{
    {NULL,               0, 51, 148, 9,
     ITEMTEXT | COMMSEQ | ITEMENABLED | HIGHCOMP,
     0, (APTR) & ProjT[5], NULL, 'Q', NULL, MENUNULL, QuitID, NULL},
    {&ProjI[0].emi_Item, 0, 40, 148, 9,
     ITEMTEXT | ITEMENABLED | HIGHCOMP,
     0, (APTR) & ProjT[4], NULL, NULL, NULL, MENUNULL, AboutID, NULL},
    {&ProjI[1].emi_Item, 0, 29, 148, 9,
     ITEMTEXT | ITEMENABLED | HIGHCOMP,
     0, (APTR) & ProjT[3], NULL, NULL, NULL, MENUNULL, SaveAsID, NULL},
    {&ProjI[2].emi_Item, 0, 20, 148, 9,
     ITEMTEXT | COMMSEQ | ITEMENABLED | HIGHCOMP,
     0, (APTR) & ProjT[2], NULL, 'S', NULL, MENUNULL, SaveID, NULL},
    {&ProjI[3].emi_Item, 0, 9, 148, 9,
     ITEMTEXT | COMMSEQ | ITEMENABLED | HIGHCOMP,
     0, (APTR) & ProjT[1], NULL, 'O', NULL, MENUNULL, OpenID, NULL},
    {&ProjI[4].emi_Item, 0, 0, 148, 9,
     ITEMTEXT | ITEMENABLED | HIGHCOMP,
     0, (APTR) & ProjT[0], NULL, NULL, NULL, MENUNULL, NewID, NULL}
};

/* Menu structure */
struct Menu Menu2 =
{NULL,  70, 0, 87, 0, MENUENABLED, "User",    &UserI[1].emi_Item};
struct Menu Menu1 =
{&Menu2, 0, 0, 63, 0, MENUENABLED, "Project", &ProjI[5].emi_Item};

/* Text for our Gadgets */
struct IntuiText GadgT[] =
{
    {2, 1, JAM2, 2, 1, &Topaz80, "   DownPress  ", NULL},
    {2, 1, JAM2, 2, 1, &Topaz80, "  Hold (Drag) ", NULL},
    {2, 1, JAM2, 2, 1, &Topaz80, "    Release   ", NULL},
    {2, 1, JAM2, 2, 1, &Topaz80, " Double-Click ", NULL},
    {2, 1, JAM2, 2, 1, &Topaz80, " ARexx Macro  ", NULL}
};

/* extended Gadgets structures for our application */
struct EGadget Gadg[] =
{
    {NULL,               67, 15, 115, 10, NULL, GADGIMMEDIATE | RELVERIFY,
     BOOLGADGET, NULL, NULL, &GadgT[0], NULL, NULL, NULL, NULL,
     ChooseID, NO_FUNCTION, NO_FUNCTION, NO_FUNCTION, NO_FUNCTION},

    {&Gadg[0].eg_Gadget, 67, 29, 115, 10, NULL, GADGIMMEDIATE | RELVERIFY,
     BOOLGADGET, NULL, NULL, &GadgT[1], NULL, NULL, NULL, NULL,
     ArrowID, ArrowID, NO_FUNCTION, NO_FUNCTION, AbortID},

    {&Gadg[1].eg_Gadget, 67, 43, 115, 10, NULL, GADGIMMEDIATE | RELVERIFY,
     BOOLGADGET, NULL, NULL, &GadgT[2], NULL, NULL, NULL, NULL,
     NO_FUNCTION, NO_FUNCTION, UndoID, NO_FUNCTION, NO_FUNCTION},

    {&Gadg[2].eg_Gadget, 67, 58, 115, 10, NULL, GADGIMMEDIATE | RELVERIFY,
     BOOLGADGET, NULL, NULL, &GadgT[3], NULL, NULL, NULL, NULL,
     ChooseID, NO_FUNCTION, NO_FUNCTION, DefineID, NO_FUNCTION},

    {&Gadg[3].eg_Gadget, 67, 73, 115, 10, NULL, GADGIMMEDIATE | RELVERIFY,
     BOOLGADGET, NULL, NULL, &GadgT[4], NULL, NULL, NULL, NULL,
     NO_FUNCTION, NO_FUNCTION, Macro1ID, NO_FUNCTION, NO_FUNCTION}
};

/* Set up the keyboard function map. If you are a word processor,
 * then you could set up all the text-related keys to the same
 * function. */
struct KeyboardCMD KeyArray[] =
{
    {'u',  UndoID},		/* u will call the Undo function */
    {ESC,  QuitID},		/* ESC to quit */
    {HELP, HelpID},		/* HELP to call the help function */
    {UP,   ArrowID},		/* Up arrow */
    {DOWN, ArrowID},		/* Down arrow */
    {FUNC1,Macro1ID},		/* Call an ARexx macro */
    {NULL, NO_FUNCTION}		/* end of array */
};

/* NewWindow structure */
struct NewWindow NewWindow =
{
    0, 10, 250, 90, 2, 1,
    NULL,
    WINDOWDRAG | WINDOWDEPTH | WINDOWCLOSE | ACTIVATE | NOCAREREFRESH
    | REPORTMOUSE,
    &Gadg[4].eg_Gadget, NULL, APPNAME, NULL, NULL,
    60, 30, 1024, 1024, WBENCHSCREEN,
};
