home *** CD-ROM | disk | FTP | other *** search
- /* This is needed for Lattice bug with 16 bit ints */
- #undef RMBTRAP
- #define RMBTRAP 0x00010000L
-
-
- #define SHOWSINGLEMENU 0
- #define SUBITEMPOINTER 1
- #define ITEMSCENTERED 2
- #define POPUPWITHQUAL 3
- #define POPUPNOQUAL 4
- #define CLICKMENUES 5
- #define OPENWINDOW 6
- #define EXIT 7
-
- #define RESET 0x100
- #define CANCEL 0x200
- #define REMOVE 0x300
- #define USE 0x000
-
- static USHORT
- chip CheckOffData[] = {0x0000,0x0000,0x07f0,0x0000,0x3c1e,0x0000,0x6003,0x0000,
- 0xc001,0x8000,0xc001,0x8000,0xc001,0x8000,0x6003,0x0000,
- 0x3c1e,0x0000,0x07f0,0x0000},
- chip CheckOnData[] = {0x0000,0xf000,0x07f3,0xf800,0x3c1f,0xf000,0x7e3f,0xe000,
- 0xff7f,0x8000,0xdffd,0x8000,0xcff1,0x8000,0x67e3,0x0000,
- 0x3fde,0x0000,0x07f0,0x0000,
- 0x0000,0x0000,0x0000,0xf000,0x0003,0xe000,0x1c0f,0x0000,
- 0x1e3c,0x0000,0x0f70,0x0000,0x07e0,0x0000,0x03c0,0x0000,
- 0x0180,0x0000,0x0000,0x0000},
- chip LogoData[] = {
- 0x0000,0x0000,0x0000,0x0000,0x0700,0x0000,0x0000,0x0000,
- 0x0000,0x07FF,0x7FF0,0x0000,0x6180,0x0780,0x0800,0x0000,
- 0x0000,0x0000,0x0000,0x07FF,0x8C18,0x0000,0xE180,0x08C0,
- 0x1800,0x0000,0x0000,0x0000,0x0000,0x07FF,0x0C18,0x0000,
- 0x6180,0x00E0,0x3800,0x0000,0x0000,0x0000,0x0000,0x07FF,
- 0x0C10,0xF8CC,0x618C,0xC0F0,0x783C,0x2618,0xC000,0x0000,
- 0x0080,0x77FF,0x0FE1,0x0DD6,0x619D,0x60D8,0xD846,0x6B38,
- 0xC000,0x0000,0x0480,0x8FFF,0x0C03,0x0CE6,0x618E,0x60CD,
- 0x98C4,0xF318,0xC004,0x4E58,0x0480,0x17FF,0x0C03,0x0CC6,
- 0x63AC,0x60C7,0x19F8,0x6359,0xD004,0x5224,0x07C0,0x27FF,
- 0x0C03,0x08C4,0x65CC,0x40C2,0x1AC2,0x639A,0xE002,0x9420,
- 0x0084,0x47FF,0x0C01,0xF0F8,0x398F,0x8080,0x1C7C,0x630C,
- 0x4001,0x0F20,0x01C4,0xFFFF,0x1000,0x00C0,0x000C,0x0700,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x07FF,0x0000,0x00C0,
- 0x000C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07FF,
- 0x0000,0x00C0,0x000C,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x07FF,0x0000,0x00C0,0x000C,0x0000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x07FF,0x0000,0x0080,0x0008,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x07FF,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07FF,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x07FF,0x0000,0x0000,0x0000,0x0000,0x0700,0x0000,
- 0x0000,0x0000,0x0000,0x07FF,0x7FF0,0x0000,0x6180,0x0780,
- 0x09C0,0x0000,0x0000,0x0000,0x0000,0x07FF,0x9FFC,0x0000,
- 0xF9E0,0x09E0,0x1A70,0x0000,0x0000,0x0000,0x0000,0x07FF,
- 0x2FFF,0x0000,0x7FF8,0x02F8,0x3E80,0x0000,0x0000,0x0000,
- 0x0000,0x07FF,0x0FD7,0xF8CC,0x7FFC,0xC0FC,0x7FBC,0x2618,
- 0xC000,0x0000,0x0000,0x07FF,0x0FE5,0xBFF7,0x7FFF,0x70FE,
- 0xDFCF,0x6BBE,0xF000,0x0000,0x0000,0x07FF,0x0FFB,0x4FFF,
- 0xFFFF,0xFCFF,0xBFD7,0xFBFF,0xFC00,0x0000,0x0000,0x07FF,
- 0x0FFF,0xDFFF,0xFFFF,0xFEFF,0xFFFD,0x7FFF,0xFC00,0x0000,
- 0x0000,0x07FF,0x0FC3,0xFBFF,0xFFFF,0xFEFF,0xDFFE,0x7FFF,
- 0xFC00,0x0000,0x0000,0x07FF,0x0FC1,0xF2FD,0x7FFF,0xD6BC,
- 0xFFFF,0xFFFF,0xFD00,0x0000,0x0000,0x07FF,0x13C0,0x7CFE,
- 0x4E7F,0xE72C,0x27BF,0x3EFB,0xBE00,0x0000,0x0000,0x07FF,
- 0x04C0,0x1FFF,0x839F,0xF9C8,0x01C7,0xC630,0xC400,0x0000,
- 0x0000,0x07FF,0x0100,0x00FC,0x000F,0xC070,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x07FF,0x0000,0x00FC,0x000F,0xC000,
- 0x0000,0x0000,0x0000,0x0000,0x0000,0x07FF,0x0000,0x00BC,
- 0x000B,0xC000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07FF,
- 0x0000,0x002C,0x0002,0xC000,0x0000,0x0000,0x0000,0x0000,
- 0x0000,0x07FF,0x0000,0x0008,0x0000,0x8000,0x0000,0x0000,
- 0x0000,0x0000,0x0000,0x07FF
- };
-
- /* Normal gadget */
- static struct Image
- CheckOff = { 0, 0, 21, 10, 1, CheckOffData, 1, 0, NULL },
- /* Selected gadget */
- CheckOn = { 0, 0, 21, 10, 2, CheckOnData, 3, 0, NULL },
- /* PopUpMenu Logo */
- Logo = { 0, 0,149, 17, 2, LogoData, 3, 0, NULL };
-
- /* Upper & left border for small gadget */
- static SHORT
- UpperVectors1[] = { 0, 0, 0,13, 1,12, 1, 0, 58, 0 },
- /* Lower & right border for small gadget */
- LowerVectors1[] = { 59,13, 59, 0, 58, 1, 58,13, 1,13 },
- /* Upper & left border for big gadget */
- UpperVectors2[] = { 0, 0, 0,13, 1,12, 1, 0, 148, 0 },
- /* Lower & Right border for big gadget */
- LowerVectors2[] = {149,13, 149, 0, 148, 1, 148,13, 1,13 };
-
- /* Small border */
- static struct Border
- UpBorder1b = {-2,-1, 2,0,JAM1, 5, LowerVectors1, NULL },
- UpBorder1a = {-2,-1, 1,0,JAM1, 5, UpperVectors1, &UpBorder1b },
- /* Big border */
- UpBorder2b = {-2,-1, 2,0,JAM1, 5, LowerVectors2, NULL },
- UpBorder2a = {-2,-1, 1,0,JAM1, 5, UpperVectors2, &UpBorder2b };
-
- static char
- UseText[] = {'U','s','e',0},
- ResetText[] = {'R','e','s','e','t',0},
- CancelText[] = {'C','a','n','c','e','l',0},
-
- RemoveText[] = {'R','e','m','o','v','e',' ','P','o','p','U','p','M','e','n','u',0},
-
- ClickText[] = {'"','C','l','i','c','k','"',' ','m','e','n','u','e','s',0},
- SubText[] = {'S','u','b','-','i','t','e','m',' ','p','o','i','n','t','e','r',0},
- ItemsText[] = {'M','e','n','u','i','t','e','m','s',' ','c','e','n','t','e','r','e','d',0},
- SingleText[] = {'S','h','o','w',' ','s','i','n','g','l','e',' ','m','e','n','u',0},
- PopUpText[] = {'P','o','p','-','u','p',' ','m','e','n','u','e','s',0},
- WithText[] = {'w','i','t','h',0},
- WithoutText[]= {'w','i','t','h','o','u','t',0},
- QualText[] = {'q','u','a','l','i','f','i','e','r','s',0};
-
- static struct TextAttr
- Topaz80 = {"topaz.font", TOPAZ_EIGHTY, 0, 0 };
-
- static struct IntuiText
- WinText13b = {1,0,JAM1, 93, 30, &Topaz80, ClickText, NULL },
- WinText13a = {2,0,JAM1, 95, 31, &Topaz80, ClickText, &WinText13b},
- WinText12b = {1,0,JAM1, 93, 45, &Topaz80, SubText, &WinText13a},
- WinText12a = {2,0,JAM1, 95, 46, &Topaz80, SubText, &WinText12b},
- WinText11b = {1,0,JAM1, 93, 60, &Topaz80, SingleText, &WinText12a},
- WinText11a = {2,0,JAM1, 95, 61, &Topaz80, SingleText, &WinText11b},
- WinText10b = {1,0,JAM1, 93, 75, &Topaz80, ItemsText, &WinText11a},
- WinText10a = {2,0,JAM1, 95, 76, &Topaz80, ItemsText, &WinText10b},
- WinText09b = {1,0,JAM1, 8,100, &Topaz80, PopUpText, &WinText10a},
- WinText09a = {2,0,JAM1, 10,101, &Topaz80, PopUpText, &WinText09b},
- WinText08b = {1,0,JAM1,140, 92, &Topaz80, WithText, &WinText09a},
- WinText08a = {2,0,JAM1,142, 93, &Topaz80, WithText, &WinText08b},
- WinText07b = {1,0,JAM1,140,107, &Topaz80, WithoutText,&WinText08a},
- WinText07a = {2,0,JAM1,142,108, &Topaz80, WithoutText,&WinText07b},
- WinText06b = {1,0,JAM1,204,100, &Topaz80, QualText, &WinText07a},
- WinText06a = {2,0,JAM1,206,101, &Topaz80, QualText, &WinText06b};
- #define FIRSTWINTEXT WinText06a
-
- /****************** Gadget text **********************/
- static struct IntuiText
- UseIText1 = {3,0,JAM1, 17,2, &Topaz80, UseText, NULL },
- UseIText = {2,0,JAM1, 19,3, &Topaz80, UseText, &UseIText1 },
- ResIText1 = {3,0,JAM1, 9,2, &Topaz80, ResetText, NULL },
- ResIText = {2,0,JAM1, 11,3, &Topaz80, ResetText, &ResIText1 },
- CancIText1= {3,0,JAM1, 5,2, &Topaz80, CancelText, NULL },
- CancIText = {2,0,JAM1, 7,3, &Topaz80, CancelText, &CancIText1},
- RemIText1 = {3,0,JAM1, 5,2, &Topaz80, RemoveText, NULL },
- RemIText = {2,0,JAM1, 7,3, &Topaz80, RemoveText, &RemIText1 };
-
- /****************** All gadgets *********************/
- static struct Gadget
- ClickGad = {NULL, 70,28, 135,10, GADGHIMAGE | GADGIMAGE,
- RELVERIFY | TOGGLESELECT,
- BOOLGADGET, (APTR)&CheckOff, (APTR)&CheckOn,
- NULL, 0, NULL, 1<<CLICKMENUES, NULL },
- SubGad = {&ClickGad, 70,43, 151,10, GADGHIMAGE | GADGIMAGE,
- RELVERIFY | TOGGLESELECT,
- BOOLGADGET, (APTR)&CheckOff, (APTR)&CheckOn,
- NULL, 0, NULL, 1<<SUBITEMPOINTER, NULL },
- ShowGad = {&SubGad, 70,58, 151,10, GADGHIMAGE | GADGIMAGE,
- RELVERIFY | TOGGLESELECT,
- BOOLGADGET, (APTR)&CheckOff, (APTR)&CheckOn,
- NULL, NULL, NULL, 1<<SHOWSINGLEMENU, NULL },
- ItemGad = {&ShowGad, 70,73, 167,10, GADGHIMAGE | GADGIMAGE,
- RELVERIFY | TOGGLESELECT,
- BOOLGADGET, (APTR)&CheckOff, (APTR)&CheckOn,
- NULL, NULL, NULL, 1<<ITEMSCENTERED, NULL },
- WithGad = {&ItemGad, 117,90, 55,10, GADGHIMAGE | GADGIMAGE,
- RELVERIFY | TOGGLESELECT,
- BOOLGADGET, (APTR)&CheckOff, (APTR)&CheckOn,
- NULL, NULL, NULL, 1<<POPUPWITHQUAL, NULL },
- WithoutGad= {&WithGad, 117,105, 79,10, GADGHIMAGE | GADGIMAGE,
- RELVERIFY | TOGGLESELECT,
- BOOLGADGET, (APTR)&CheckOff, (APTR)&CheckOn,
- NULL, NULL, NULL, 1<<POPUPNOQUAL, NULL },
- RemoveGad = {&WithoutGad, 75,150, 145,12, GADGHCOMP, RELVERIFY,
- BOOLGADGET, (APTR)&UpBorder2a, NULL,
- &RemIText, NULL, NULL, REMOVE, NULL },
- UseGad = {&RemoveGad,220,130, 56,12, GADGHCOMP, RELVERIFY,
- BOOLGADGET, (APTR)&UpBorder1a, NULL,
- &UseIText, NULL, NULL, USE, NULL },
- ResetGad = {&UseGad, 116,130, 56,12, GADGHCOMP, RELVERIFY,
- BOOLGADGET, (APTR)&UpBorder1a, NULL,
- &ResIText, NULL, NULL, RESET, NULL },
- CancelGad = {&ResetGad, 18,130, 56,12, GADGHCOMP, RELVERIFY,
- BOOLGADGET, (APTR)&UpBorder1a, NULL,
- &CancIText, NULL, NULL, CANCEL, NULL };
- #define FIRSTGADGET CancelGad
-
- static struct NewWindow OptionWindow = {
- 165,55, 300,170, 0,1,
- GADGETUP, RMBTRAP | WINDOWDRAG | WINDOWDEPTH | ACTIVATE | NOCAREREFRESH, &FIRSTGADGET,
- NULL, " PopUpMenu ", NULL, NULL, 0,0,0,0, WBENCHSCREEN};
-
- static SHORT
- WindowBorder[] = { 1,169, 298,169, 298,0, 299,0, 299,169 };
-
-
- static struct Border
- WBorder = { 0,0, 2,0, JAM1, 5, WindowBorder, NULL};
-
-
- USHORT SelectOpt(USHORT CurrOptions);
- STATIC VOID FixGadgets(UBYTE Options);
-
- /*VOID main()*/
- /*{*/
- /* The libraries MUST be opened in this or a similar manner in */
- /* order to use pop-up menus. */
-
- /* IntuitionBase = (struct IntuitionBase *)*/
- /* OpenLibrary("intuition.library", 0L);*/
- /* GfxBase = (struct GfxBase *) OpenLibrary("graphics.library", 0L);*/
- /* printf("%x",SelectOptions(0x0f55));*/
- /* CloseLibrary(IntuitionBase);*/
- /* CloseLibrary(GfxBase);*/
- /*}*/
- USHORT SelectOpt(CurrOptions)
- USHORT CurrOptions;
- {
- UBYTE Options = (CurrOptions>>8) & ~((1<<EXIT) | (1<<OPENWINDOW));
- /* Can't reach global IntuitionBase from C */
- struct Library *IntuitionBase = OpenLibrary("intuition.library",0);
- BOOL Quit = FALSE;
- struct Window *Win;
- char Buf[16];
-
- if (IntuitionBase->lib_Version >= 36) { /* Kickstart 2.0 ? */
- /* Switch BLACK and WHITE */
- WinText13b.FrontPen = WinText12b.FrontPen = WinText11b.FrontPen =
- WinText10b.FrontPen = WinText09b.FrontPen = WinText08b.FrontPen =
- WinText07b.FrontPen = WinText06b.FrontPen = UseIText1.FrontPen =
- ResIText1.FrontPen = CancIText1.FrontPen = RemIText1.FrontPen =
- UpBorder1a.FrontPen = UpBorder2a.FrontPen = OptionWindow.BlockPen = 2;
-
- WinText13a.FrontPen = WinText12a.FrontPen = WinText11a.FrontPen =
- WinText10a.FrontPen = WinText09a.FrontPen = WinText08a.FrontPen =
- WinText07a.FrontPen = WinText06a.FrontPen = UseIText.FrontPen =
- ResIText.FrontPen = CancIText.FrontPen = RemIText.FrontPen =
- UpBorder1b.FrontPen = UpBorder2b.FrontPen = WBorder.FrontPen = 1;
- }
-
- WBenchToFront();
- if (GetScreenData(Buf,16,WBENCHSCREEN,NULL)) { /* Get size of Workbench Screen */
- OptionWindow.LeftEdge = (USHORT)((((struct Screen *)Buf)->Width - 300))/2;
- OptionWindow.TopEdge = (USHORT)((((struct Screen *)Buf)->Height - 170))/2;
-
- FixGadgets(Options);
-
- if (Win = OpenWindow(&OptionWindow)) {
- struct MsgPort *Port = Win->UserPort;
-
- DrawBorder(Win->RPort, &WBorder, 0, 0);
-
- PrintIText(Win->RPort, &FIRSTWINTEXT, 0, 0);
- DrawImage(Win->RPort, &Logo, 74, 11);
-
- do {
- struct IntuiMessage *Message;
-
- WaitPort(Port);
-
- while (Message = (struct IntuiMessage *)GetMsg(Port)) {
- if (Message->Class == GADGETUP) {
- struct Gadget *SelectedGad = (struct Gadget *)Message->IAddress;
-
- if (SelectedGad->GadgetID & 0xff)
- Options ^= SelectedGad->GadgetID;
- else
- switch(SelectedGad->GadgetID) {
- case RESET:
- Options = CurrOptions>>8;
- FixGadgets(Options);
- RefreshGadgets(&WithoutGad,Win,NULL);
- break;
- case USE:
- Quit = TRUE;
- break;
- case CANCEL:
- Options = CurrOptions>>8;
- Quit = TRUE;
- break;
- case REMOVE:
- Options |= 1<<EXIT;
- Quit = TRUE;
- break;
- } /* switch */
- } /* if (Message == GADGETUP) */
- ReplyMsg((struct Message *)Message);
- } /* while */
- } /* do */
- while (!Quit);
-
- CloseWindow(Win);
- } /* if (Win == ... */
- } /* if (GetScreenData ...) */
-
- CloseLibrary(IntuitionBase);
- return (USHORT)((CurrOptions & 0xff) | (Options<<8));
- }
-
- STATIC VOID FixGadgets(Options)
- UBYTE Options;
- {
- struct Gadget *TempGad = &WithoutGad;
-
- do
- if (Options & TempGad->GadgetID)
- TempGad->Flags |= SELECTED;
- else
- TempGad->Flags &= ~SELECTED;
- while (TempGad = TempGad->NextGadget);
- }
-
-