home *** CD-ROM | disk | FTP | other *** search
- #include "plplot.h"
- #include "plamiga.h"
- #include <math.h>
-
- void eventwait()
- {
- for(;;) {
- /* Wait for message */
- Wait(1<<PLWindow->UserPort->mp_SigBit);
- if(procmess())
- return;
- }
- }
-
- PLINT procmess()
- {
- ULONG class;
- USHORT code;
- struct IntuiMessage *message;
-
- while(message = (struct IntuiMessage *)GetMsg(PLWindow->UserPort)) {
- class = message->Class;
- code = message->Code;
- ReplyMsg((struct Message *)message);
- if(eventhandler(class,code))
- return((PLINT)1);
- }
- return((PLINT)0);
- }
-
- PLINT eventhandler(class, code)
- ULONG class;
- USHORT code;
- {
- switch (class) {
- case CLOSEWINDOW:
- return((PLINT)1);
- case MENUPICK:
- menuselect(class,code);
- break;
- case SIZEVERIFY:
- break;
- case NEWSIZE:
- if(!(PLCurPrefs.WinType & PLCUST)) {
- PLCurPrefs.WWidth = PLWindow->Width;
- PLCurPrefs.WHeight = PLWindow->Height;
- }
- else {
- PLCurPrefs.CWidth = PLWindow->Width;
- PLCurPrefs.CHeight = PLWindow->Height;
- }
- setlimits();
- disablegads(0);
- disablemenus();
- remakeplot();
- enablemenus();
- enablegads();
- break;
- default:
- break;
- }
-
- return((PLINT)0);
- }
-
- struct IntuiText IText0ItemScrSubs[] = {
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)"WorkBench", NULL},
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)"Custom", NULL}
- };
-
- struct MenuItem Menu0ItemScrSubs[] = {
- {
- &Menu0ItemScrSubs[1],
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
- 0xFFFE,
- (APTR)&IText0ItemScrSubs[0],
- NULL,
- NULL,
- NULL,
- NULL
- },
- {
- NULL,
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
- 0xFFFD,
- (APTR)&IText0ItemScrSubs[1],
- NULL,
- NULL,
- NULL,
- NULL
- }
- };
-
- struct IntuiText IText0ItemPriSubs[] = {
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)"Bitmap Dump", NULL},
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)"Full Page (Landscape)", NULL},
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)"Full Page (Portrait)", NULL}
- };
-
- struct MenuItem Menu0ItemPriSubs[] = {
- {
- &Menu0ItemPriSubs[1],
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP,
- NULL,
- (APTR)&IText0ItemPriSubs[0],
- NULL,
- NULL,
- NULL,
- NULL
- },
- {
- &Menu0ItemPriSubs[2],
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP,
- NULL,
- (APTR)&IText0ItemPriSubs[1],
- NULL,
- NULL,
- NULL,
- NULL
- },
- {
- NULL,
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP,
- NULL,
- (APTR)&IText0ItemPriSubs[2],
- NULL,
- NULL,
- NULL,
- NULL
- }
- };
-
- struct IntuiText IText0[] = {
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)"Save Configuration",NULL},
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)"Reset",NULL},
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)"Maintain Plot Aspect",NULL},
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)"Redraw Enabled",NULL},
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)"Select Screen Type",NULL},
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)"Print",NULL},
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)"Save Bitmap as IFF file",NULL}
- };
-
- struct MenuItem Menu0Items[] = {
- {
- &Menu0Items[1],
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP,
- 0,
- (APTR)&IText0[0],
- NULL,
- NULL,
- NULL,
- NULL
- },
- {
- &Menu0Items[2],
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP,
- 0,
- (APTR)&IText0[1],
- NULL,
- NULL,
- NULL,
- NULL
- },
- {
- &Menu0Items[3],
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | MENUTOGGLE,
- 0,
- (APTR)&IText0[2],
- NULL,
- NULL,
- NULL,
- NULL
- },
- {
- &Menu0Items[4],
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | MENUTOGGLE,
- 0,
- (APTR)&IText0[3],
- NULL,
- NULL,
- NULL,
- NULL
- },
- {
- &Menu0Items[5],
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP,
- 0,
- (APTR)&IText0[4],
- NULL,
- NULL,
- &Menu0ItemScrSubs[0],
- NULL
- },
- {
- &Menu0Items[6],
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP,
- 0,
- (APTR)&IText0[5],
- NULL,
- NULL,
- &Menu0ItemPriSubs[0],
- NULL
- },
- {
- NULL,
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP,
- 0,
- (APTR)&IText0[6],
- NULL,
- NULL,
- NULL,
- NULL
- }
- };
-
- struct IntuiText IText1Item2Subs[] = {
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)" 2", NULL},
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)" 4", NULL},
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)" 8", NULL},
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)"16", NULL}
- };
-
- struct MenuItem Menu1Item2Subs[] = {
- {
- &Menu1Item2Subs[1],
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
- 0xFFFE,
- (APTR)&IText1Item2Subs[0],
- NULL,
- NULL,
- NULL,
- NULL
- },
- {
- &Menu1Item2Subs[2],
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
- 0xFFFD,
- (APTR)&IText1Item2Subs[1],
- NULL,
- NULL,
- NULL,
- NULL
- },
- {
- &Menu1Item2Subs[3],
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
- 0xFFFB,
- (APTR)&IText1Item2Subs[2],
- NULL,
- NULL,
- NULL,
- NULL
- },
- {
- NULL,
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
- 0xFFF7,
- (APTR)&IText1Item2Subs[3],
- NULL,
- NULL,
- NULL,
- NULL
- }
- };
-
- struct IntuiText IText1[] = {
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)"Interlaced", NULL},
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)"High Resolution",NULL},
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)"Number of Colors",NULL},
- {0, 1, JAM1, 0, 0, NULL, (UBYTE *)"Set Color Palette",NULL}
- };
-
-
- struct MenuItem Menu1Items[] = {
- {
- &Menu1Items[1],
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | MENUTOGGLE,
- 0,
- (APTR)&IText1[0],
- NULL,
- NULL,
- NULL,
- NULL
- },
- {
- &Menu1Items[2],
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | MENUTOGGLE,
- 0,
- (APTR)&IText1[1],
- NULL,
- NULL,
- NULL,
- NULL
- },
- {
- &Menu1Items[3],
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP,
- 0,
- (APTR)&IText1[2],
- NULL,
- NULL,
- &Menu1Item2Subs[0],
- NULL
- },
- {
- NULL,
- 0, 0, 0, 0,
- ITEMTEXT | ITEMENABLED | HIGHCOMP,
- 0,
- (APTR)&IText1[3],
- NULL,
- NULL,
- NULL,
- NULL
- }
- };
-
- struct Menu Menu[] = {
- {
- &Menu[1],
- 0, 0, 0, 0,
- MENUENABLED,
- "PLPlot",
- &Menu0Items[0]
- },
- {
- NULL,
- 0, 0, 0, 0,
- MENUENABLED,
- "Screen Format",
- &Menu1Items[0]
- }
- };
-
- enum menus { PLMCONTROL, PLMSCREEN };
-
- /* Control menu items */
- enum menu0items { PLMSAVECONFIG, PLMRECONFIG, PLMASPECT, PLMBUFF,
- PLMSCREENTYPE, PLMSCRDUMP, PLMSIFF };
- enum menu0itemscrsubs { PLMWBENCH, PLMCUSTOM };
- enum menu0itemprisubs { PLMPRWIN, PLMPRPLAN, PLMPRPPOR };
-
- /* Custom screen menu items */
- enum menu1items { PLMLACE, PLMHIRES, PLMCOLORS, PLMCOLREQ };
- /* Number color subitems */
- enum menu1item2subs {PLMC2, PLMC4, PLMC8, PLMC16 };
-
- void MakePLMenu()
- {
- short mtx, mledge;
- short itx, itxlen, itedge, ichk;
- short stx, stxlen, stedge, schk;
- short fheight;
- char *string;
- struct Menu *menu;
- struct MenuItem *item, *subitem;
- struct IntuiText *itext;
-
- fheight = PLScreen->Font->ta_YSize;
-
- if(PLCurPrefs.WinType & PLCUST)
- Menu[0].NextMenu = &Menu[1];
- else
- Menu[0].NextMenu = NULL;
-
- mledge = 0;
- for(menu=Menu; menu!=NULL; menu=menu->NextMenu) {
- string = (char *)menu->MenuName;
- mtx = (short)TextLength(PLSRPort,string,(long)strlen(string));
- /* Leave two character space between menus */
- mtx += (2*mtx)/strlen(string);
- menu->LeftEdge = mledge;
- menu->Width = mtx;
- mledge += mtx;
-
- /* Find length of longest menuitem in this menu */
- itxlen = 0;
- ichk = 0;
- for(item=menu->FirstItem; item!=NULL; item=item->NextItem) {
- itext = (struct IntuiText *)item->ItemFill;
- string = (char *)itext->IText;
- itx = (short)TextLength(PLSRPort,string,(long)strlen(string));
- itxlen = max(itxlen,itx);
- if(item->Flags & CHECKIT)
- ichk = 1;
- }
- itedge = 0;
- for(item=menu->FirstItem; item!=NULL; item=item->NextItem) {
- item->Width = itxlen;
- item->LeftEdge = 0;
- item->TopEdge = itedge;
- item->Height = fheight;
- if(ichk) {
- item->Width += CHECKWIDTH;
- itext = (struct IntuiTest *)item->ItemFill;
- itext->LeftEdge = CHECKWIDTH;
- }
- itedge += fheight;
- stxlen = 0;
- schk = 0;
- for(subitem=item->SubItem;subitem!=NULL;subitem=subitem->NextItem){
- itext = (struct IntuiText *)subitem->ItemFill;
- string = (char *)itext->IText;
- stx = (short)TextLength(PLSRPort,string,(long)strlen(string));
- stxlen = max(stxlen,stx);
- if(subitem->Flags & CHECKIT)
- schk = 1;
- }
- stedge = 0;
- for(subitem=item->SubItem;subitem!=NULL;subitem=subitem->NextItem){
- subitem->Width = stxlen;
- subitem->LeftEdge = item->Width/2;
- subitem->TopEdge = stedge;
- subitem->Height = fheight;
- if(schk) {
- subitem->Width += CHECKWIDTH;
- itext = (struct IntuiTest *)subitem->ItemFill;
- itext->LeftEdge = CHECKWIDTH;
- }
- stedge += fheight;
- }
- }
- }
-
- if(PLCurPrefs.WinType & PLCUST) {
- Menu0ItemScrSubs[PLMCUSTOM].Flags |= CHECKED;
- Menu0ItemScrSubs[PLMWBENCH].Flags &= ~CHECKED;
- Menu1Items[PLMLACE].Flags |= ITEMENABLED;
- Menu1Items[PLMHIRES].Flags |= ITEMENABLED;
- Menu1Items[PLMCOLORS].Flags |= ITEMENABLED;
- }
- else {
- Menu0ItemScrSubs[PLMCUSTOM].Flags &= ~CHECKED;
- Menu0ItemScrSubs[PLMWBENCH].Flags |= CHECKED;
- }
-
- Menu1Item2Subs[PLMC2].Flags &= ~CHECKED;
- Menu1Item2Subs[PLMC4].Flags &= ~CHECKED;
- Menu1Item2Subs[PLMC8].Flags &= ~CHECKED;
- Menu1Item2Subs[PLMC16].Flags &= ~CHECKED;
- Menu1Item2Subs[PLCurPrefs.Depth-1].Flags |= CHECKED;
-
- if(PLCurPrefs.ScrType & PLLACE)
- Menu1Items[PLMLACE].Flags |= CHECKED;
- else
- Menu1Items[PLMLACE].Flags &= ~CHECKED;
-
- if(PLCurPrefs.ScrType & PLHIRES)
- Menu1Items[PLMHIRES].Flags |= CHECKED;
- else
- Menu1Items[PLMHIRES].Flags &= ~CHECKED;
-
- if(PLCurPrefs.WinType & PLASP)
- Menu0Items[PLMASPECT].Flags |= CHECKED;
- else
- Menu0Items[PLMASPECT].Flags &= ~CHECKED;
-
- if(PLCurPrefs.WinType & PLBUFF)
- Menu0Items[PLMBUFF].Flags |= CHECKED;
- else
- Menu0Items[PLMBUFF].Flags &= ~CHECKED;
-
- SetMenuStrip(PLWindow,Menu);
- }
-
- void disablemenus()
- {
- OffMenu(PLWindow, PLMCONTROL | SHIFTITEM(NOITEM));
- OffMenu(PLWindow, PLMSCREEN | SHIFTITEM(NOITEM));
- }
-
- void enablemenus()
- {
- OnMenu(PLWindow, PLMCONTROL | SHIFTITEM(NOITEM));
- OnMenu(PLWindow, PLMSCREEN | SHIFTITEM(NOITEM));
- }
-
- void menuselect(class, code)
- ULONG class;
- USHORT code;
- {
- PLINT ItemNumber, MenuNumber, SubNumber;
- PLINT remake=0;
- struct MenuItem *Item;
-
- if(class == VANILLAKEY)
- ;
- else if(class == MENUPICK) {
- while(code != MENUNULL) {
- Item = ItemAddress(Menu,code);
- MenuNumber = MENUNUM(code);
- ItemNumber = ITEMNUM(code);
- SubNumber = SUBNUM(code);
- if(MenuNumber == PLMCONTROL) {
- if(ItemNumber == PLMSAVECONFIG) {
- if(!(PLCurPrefs.WinType & PLCUST)) {
- PLCurPrefs.WXPos = PLWindow->LeftEdge;
- PLCurPrefs.WYPos = PLWindow->TopEdge;
- }
- else {
- PLCurPrefs.CXPos = PLWindow->LeftEdge;
- PLCurPrefs.CYPos = PLWindow->TopEdge;
- }
- SetPLDefs();
- }
- else if(ItemNumber == PLMRECONFIG) {
- RestorePrefs();
- remake = 1;
- }
- else if(ItemNumber == PLMASPECT) {
- if(Item->Flags & CHECKED) {
- PLCurPrefs.WinType |= PLASP;
- }
- else {
- PLCurPrefs.WinType &= ~PLASP;
- }
- setlimits();
- disablegads(0);
- disablemenus();
- remakeplot();
- enablemenus();
- enablegads();
- }
- else if(ItemNumber == PLMBUFF) {
- if(Item->Flags & CHECKED) {
- PLCurPrefs.WinType |= PLBUFF;
- }
- else {
- PLCurPrefs.WinType &= ~PLBUFF;
- }
- }
- else if(ItemNumber == PLMSCREENTYPE) {
- if(SubNumber == PLMWBENCH) {
- if(!(PLCurPrefs.WinType & PLCUST)) goto reselect;
- PLCurPrefs.CXPos = PLWindow->LeftEdge;
- PLCurPrefs.CYPos = PLWindow->TopEdge;
- PLCurPrefs.WinType &= ~PLCUST;
- }
- else if(SubNumber == PLMCUSTOM) {
- if(PLCurPrefs.WinType & PLCUST) goto reselect;
- /* Save wbench window position */
- PLCurPrefs.WXPos = PLWindow->LeftEdge;
- PLCurPrefs.WYPos = PLWindow->TopEdge;
- PLCurPrefs.WinType |= PLCUST;
- }
- remake = 1;
- }
- else if(ItemNumber == PLMSCRDUMP) {
- /* Disable system gadgets */
- disablegads(SubNumber);
- disablemenus();
- screendump(SubNumber);
- enablemenus();
- enablegads();
- }
- else if(ItemNumber == PLMSIFF) {
- disablegads(0);
- disablemenus();
- saveiff();
- enablemenus();
- enablegads();
- }
- }
- else if(MenuNumber == PLMSCREEN) {
- if(ItemNumber == PLMLACE) {
- if(Item->Flags & CHECKED)
- PLCurPrefs.ScrType |= PLLACE;
- else
- PLCurPrefs.ScrType &= ~PLLACE;
- PLCurPrefs.CWidth = 0;
- PLCurPrefs.CHeight = 0;
- remake = 1;
- }
- else if(ItemNumber == PLMHIRES) {
- if(Item->Flags & CHECKED)
- PLCurPrefs.ScrType |= PLHIRES;
- else
- PLCurPrefs.ScrType &= ~PLHIRES;
- PLCurPrefs.CWidth = 0;
- PLCurPrefs.CHeight = 0;
- remake = 1;
- }
- else if(ItemNumber == PLMCOLORS) {
- if(SubNumber == PLMC2) {
- if(PLCurPrefs.Depth == 1) goto reselect;
- PLCurPrefs.Depth = 1;
- }
- else if(SubNumber == PLMC4) {
- if(PLCurPrefs.Depth == 2) goto reselect;
- PLCurPrefs.Depth = 2;
- }
- else if(SubNumber == PLMC8) {
- if(PLCurPrefs.Depth == 3) goto reselect;
- PLCurPrefs.Depth = 3;
- }
- else if(SubNumber == PLMC16) {
- if(PLCurPrefs.Depth == 4) goto reselect;
- PLCurPrefs.Depth = 4;
- }
- PLCurPrefs.CXPos = PLWindow->LeftEdge;
- PLCurPrefs.CYPos = PLWindow->TopEdge;
- remake = 1;
- }
- else if(ItemNumber == PLMCOLREQ) {
- disablegads(1);
- disablemenus();
- plcolreq();
- enablemenus();
- enablegads();
- }
- }
- reselect:
- code = Item->NextSelect;
- }
- }
- if(remake) {
- ClosePLWind();
- OpenPLWind();
- setlimits();
- disablegads(0);
- disablemenus();
- remakeplot();
- enablemenus();
- enablegads();
- }
- }
-
-