/* Intuition Interface for Plot Program */ #include "plot.h" struct TextFont *tf; FILE *fp1; char Editor[50]= "ed"; main() { void OpenAll(), Work(), CloseDown(); OpenAll(); Work(); CloseDown(); return(0); } void OpenAll() /* open libraries, screen, and window */ { void DrawScreen(), FixPlotTypeGadgets(), ReadDef(); DosBase = (struct DosBase *) OpenLibrary("dos.library",0); if( DosBase == NULL ) exit(10); DiskfontBase = (struct DiskfontBase *) OpenLibrary("diskfont.library",0); if( DiskfontBase == NULL ) exit(10); IntuitionBase = (struct IntuitionBase *) OpenLibrary("intuition.library",0); if( IntuitionBase == NULL ) exit(10); GfxBase = (struct GfxBase *) OpenLibrary("graphics.library",0); if( GfxBase == NULL ) exit(10); tf=(struct TextFont *) OpenDiskFont(&gfont); ReadDef(); if( (p_Window = (struct Window *)OpenWindow(&Window))==NULL) exit(10); FixPlotTypeGadgets(); SetMenuStrip(p_Window,&Menu1); r = p_Window->RPort; PrintIText(r,&IText5,0,0); } void Work() { struct IntuiMessage *p_message; /* pointer to message */ void ProcMes(); while (QuitFlag !=QUIT) { Wait(1l<UserPort->mp_SigBit); /* wait for a message */ while (p_message = (struct IntuiMessage *)GetMsg(p_Window->UserPort)) ProcMes(p_message); } } void ProcMes(p_message) struct IntuiMessage *p_message; { ULONG MesClass; /* Fields for storing */ USHORT MesCode; /* intuimessage data */ APTR Pointer; /* */ void HandleEvent(); MesClass = p_message->Class; /* Store values */ MesCode = p_message->Code; Pointer = p_message->IAddress; ReplyMsg(p_message); /* Reply to message */ HandleEvent(MesClass,MesCode,Pointer); } char Command[200]; char String[50]; char def_name[100] = "FileName"; char def_dir[50] = "PLOT:Data/"; void HandleEvent(MesClass,MesCode,Pointer) ULONG MesClass; /* Fields for storing */ USHORT MesCode; /* intuimessage data */ APTR Pointer; /* */ { void FileReq(), GadMXSel(), DrawScreen(), Edit(), ShowAdvert(); void SaveDef(), DefineEditor(), LoadDef(), print_err(); BPTR Monitor; unsigned M0, I0, S0; /* Menu control index */ if ( MesClass == CLOSEWINDOW) QuitFlag=QUIT; if ( MesClass == REFRESHWINDOW) DrawScreen(); if ( MesClass == MENUPICK) { if( MesCode != MENUNULL) { M0 = MENUNUM(MesCode); I0 = ITEMNUM(MesCode); S0 = SUBNUM(MesCode); switch (M0) { case 0 : switch (I0) { case 0 : FileReq(); break; case 1 : LoadDef(); break; case 2 : SaveDef(); break; /* save defaults */ case 3 : ShowAdvert(); break; /* About window */ case 4 : QuitFlag=QUIT; break; default : print_err("Menu selection reached default in Project menu\n"); break; } break; case 1 : switch (I0) { case 0 : DefineEditor(); break; case 1 : Edit(); break; default : print_err("Menu selection reached default in Edit menu\n"); break; } break; case 2 : switch (I0) { case 0 : Form=AEGIS; break; case 1 : Form=INTRO; break; case 2 : Form=MCAD; break; default : print_err("Menu selection reached default in Form menu\n"); break; } break; default : print_err("Menu selection reached default menu\n"); break; } } } if ( MesClass == GADGETDOWN) { if (Pointer == (APTR)&PathButton) FileReq(); if (Pointer == (APTR)&Switch1) { GadMXSel(p_Window,&Switch1,&Switch4,NULL,NULL,NULL,NULL); NET=ON; } if (Pointer == (APTR)&Switch4) { GadMXSel(p_Window,&Switch4,&Switch1,NULL,NULL,NULL,NULL); NET=OFF; } if (Pointer == (APTR)&Switch2) { GadMXSel(p_Window,&Switch2,&Switch5,NULL,NULL,NULL,NULL); AXES=ON; } if (Pointer == (APTR)&Switch5) { GadMXSel(p_Window,&Switch5,&Switch2,NULL,NULL,NULL,NULL); AXES=OFF; } if (Pointer == (APTR)&Switch3) { GadMXSel(p_Window,&Switch3,&Switch6,NULL,NULL,NULL,NULL); TWOSIDES=ON; } if (Pointer == (APTR)&Switch6) { GadMXSel(p_Window,&Switch6,&Switch3,NULL,NULL,NULL,NULL); TWOSIDES=OFF; } if (Pointer == (APTR)&Plot3DButton) { GadMXSel(p_Window,&Plot3DButton,&Plot2DButton,NULL,NULL,NULL,NULL); PlotType=PLOT3D; } if (Pointer == (APTR)&Plot2DButton) { GadMXSel(p_Window,&Plot2DButton,&Plot3DButton,NULL,NULL,NULL,NULL); PlotType=PLOT2D; } if (Pointer == (APTR)&Button0) { GadMXSel(p_Window,&Button0,&Button1,&Button2,&Button3,NULL,NULL); x=1; } if (Pointer == (APTR)&Button1) { GadMXSel(p_Window,&Button1,&Button0,&Button2,&Button3,NULL,NULL); x=2; } if (Pointer == (APTR)&Button2) { GadMXSel(p_Window,&Button2,&Button0,&Button1,&Button3,NULL,NULL); x=3; } if (Pointer == (APTR)&Button3) { GadMXSel(p_Window,&Button3,&Button0,&Button1,&Button2,NULL,NULL); x=0; } if (Pointer == (APTR)&Button4) { GadMXSel(p_Window,&Button4,&Button5,&Button6,&Button7,NULL,NULL); y=1; } if (Pointer == (APTR)&Button5) { GadMXSel(p_Window,&Button5,&Button4,&Button6,&Button7,NULL,NULL); y=2; } if (Pointer == (APTR)&Button6) { GadMXSel(p_Window,&Button6,&Button4,&Button5,&Button7,NULL,NULL); y=3; } if (Pointer == (APTR)&Button7) { GadMXSel(p_Window,&Button7,&Button4,&Button5,&Button6,NULL,NULL); y=0; } if (Pointer == (APTR)&Button8) { GadMXSel(p_Window,&Button8,&Button9,&Button10,&Button11,NULL,NULL); e=1; } if (Pointer == (APTR)&Button9) { GadMXSel(p_Window,&Button9,&Button8,&Button10,&Button11,NULL,NULL); e=2; } if (Pointer == (APTR)&Button10) { GadMXSel(p_Window,&Button10,&Button8,&Button9,&Button11,NULL,NULL); e=3; } if (Pointer == (APTR)&Button11) { GadMXSel(p_Window,&Button11,&Button8,&Button9,&Button10,NULL,NULL); e=0; } if (Pointer == (APTR)&StartButton) { if ((PlotType==PLOT2D)&&(CheckFile()!=NULL)) { sprintf(Command,"copy %s t:plotfile \n Plot:Multiplot -x%dy%de%d t:plotfile \n endcli",FileNameSIBuff,x,y,e); Monitor=Open("CON:0/46/640/120/How To",MODE_NEWFILE); SetPointer(p_Window,WaitSprite,38,16,-4,-4); Execute(Command,Monitor,0); Close(Monitor); DrawScreen(); DeleteFile("t:plotfile"); if (Form==INTRO) sprintf(Command,"Plot:txt_2_icad t:plotfile.txt0 %s.cad",FileNameSIBuff); if (Form==AEGIS) sprintf(Command,"Plot:plot2draw t:plotfile.txt0 %s.draw",FileNameSIBuff); if (Form==MCAD) sprintf(Command,"Plot:plot2mcad t:plotfile.txt0 %s.mcad",FileNameSIBuff); Execute(Command,0,0); DeleteFile("t:plotfile.txt0"); ClearPointer(p_Window); } if ((PlotType==PLOT3D)&&(CheckFile()!=NULL)) { stpcpy(String,""); if (NET==OFF) strcat(String,"-n "); if (AXES==OFF) strcat(String,"-a "); if (TWOSIDES==ON) strcat(String,"-2 "); sprintf(Command,"copy %s t:plotfile \n cd t: \n Plot:dat_2_bin t:plotfile \n Plot:threedplot %st2f.out \n endcli",FileNameSIBuff,String); Monitor=Open("CON:0/46/640/120/ ThreeDPlot... << Calculating Screen Image >> Please Wait .",MODE_NEWFILE); SetPointer(p_Window,WaitSprite,38,16,-4,-4); Execute(Command,Monitor,0); Close(Monitor); DrawScreen(); DeleteFile("t:plotfile"); DeleteFile("t:t2f.out"); sprintf(Command,"Plot:txt_2_icad t:threedplot.txt %s.cad",FileNameSIBuff); Execute(Command,0,0); DeleteFile("t:threedplot.txt"); ClearPointer(p_Window); } } if (Pointer == (APTR)&EditButton) Edit(); } } void Edit() { if ((CheckFile()!=NULL) || AutoRequest(p_Window,&NewFileText1,&NewFileText2,&NewFileText3,NULL,NULL,320,70)) { sprintf(Command,"%s %s",Editor,FileNameSIBuff); Execute(Command,0,0); DrawScreen(); } } void FileReq() { struct Process *OurTask; struct Window *old_pr_WindowPtr; OurTask = (struct Process *)FindTask(0L); old_pr_WindowPtr = OurTask->pr_WindowPtr; OurTask->pr_WindowPtr = p_Window; get_fname(p_Window,p_Screen,"Select Data File",def_name,def_dir); OurTask->pr_WindowPtr = old_pr_WindowPtr; RemoveGadget(p_Window,&FileName); stpcpy(FileNameSIBuff,""); strmfp(FileNameSIBuff,def_dir,def_name); AddGadget(p_Window,&FileName,-1); RefreshGadgets(&FileName,p_Window,NULL); DrawBorder(r,&Border3,198,50); } /** * * This routine selects gad1 and deselects the previously selected one. * Maximum number of gadgets to be mutually excluded is six, obviously. * Extension to more gadgets is obvious, too. This routine assumes that * only one gadget is selected at a time. * **/ void GadMXSel(win,gad1,gad2,gad3,gad4,gad5,gad6) struct Window *win; struct Gadget *gad1,*gad2,*gad3,*gad4,*gad5,*gad6; { void GadMXSD(); static struct Gadget *gadprev; gadprev = NULL; if (gad1 != NULL) if (gad1->Flags & SELECTED) return; if (gad2 != NULL) if (gad2->Flags & SELECTED) gadprev = gad2; if (gad3 != NULL) if (gad3->Flags & SELECTED) gadprev = gad3; if (gad4 != NULL) if (gad4->Flags & SELECTED) gadprev = gad4; if (gad5 != NULL) if (gad5->Flags & SELECTED) gadprev = gad5; if (gad6 != NULL) if (gad6->Flags & SELECTED) gadprev = gad6; GadMXSD(win,gad1,gadprev); return; } /** * * This routine selects gad1 and deselects gad2. * Notice, that this version removes gadgets from the gadget list and adds * them to the end. If you're sensitive to the location of the gadgets * in the gadgetlist, you have to use: gadloc = RemoveGadget... and * AddGadget(...,...,(long) gadloc), where gadloc is a USHORT. Then you * have to refresh all gadgets to make sure the two you changed get * refreshed. * **/ void GadMXSD(win,gad1,gad2) struct Window *win; struct Gadget *gad1,*gad2; { /* * First select gad2 (yes!) and refresh. */ if (gad2 != NULL) { RemoveGadget(win,gad2); gad2->Flags |= SELECTED; AddGadget(win,gad2,-1L); } if (gad2 != NULL) RefreshGadgets(gad2,win,NULL); /* * Now select gad1 and deselect gad2 and refresh. */ if (gad1 != NULL) { RemoveGadget(win,gad1); gad1->Flags |= SELECTED; AddGadget(win,gad1,-1L); } if (gad2 != NULL) { RemoveGadget(win,gad2); gad2->Flags &= ~SELECTED; AddGadget(win,gad2,-1L); } if (gad1 != NULL) RefreshGadgets(gad1,win,NULL); return; } void DrawScreen() { BeginRefresh(p_Window); PrintIText(r,&IText5,0,0); EndRefresh(p_Window,TRUE); } void ShowAdvert() { AutoRequest(p_Window,&AText1,NULL,&AText6,NULL,NULL,328,94); AutoRequest(p_Window,&A2Text1,NULL,&AText6,NULL,NULL,328,94); } void DefineEditor() { USHORT EdQuitFlag, UseFlag; ULONG EdMesClass; /* Fields for storing */ APTR EdPointer; /* */ struct IntuiMessage *p_Edmessage; /* pointer to message */ void print_err(); EdQuitFlag=GO; UseFlag=OFF; stpcpy(EdSIBuff,Editor); if( (p_EdWindow = (struct Window *)OpenWindow(&EdWindow))==NULL) { print_err("Unable to open define editor window"); exit(10); } p = p_EdWindow->RPort; PrintIText(p,&WText3,0,0); while (EdQuitFlag !=QUIT) { Wait(1l<UserPort->mp_SigBit); /* wait for a message */ while (p_Edmessage = (struct IntuiMessage *)GetMsg(p_EdWindow->UserPort)) { EdMesClass = p_Edmessage->Class; /* Store values */ EdPointer = p_Edmessage->IAddress; ReplyMsg(p_Edmessage); /* Reply to message */ if ( EdMesClass == GADGETDOWN) { if (EdPointer == (APTR)&WGadget2) { EdQuitFlag=QUIT; UseFlag=ON; } if (EdPointer == (APTR)&WGadget3) { EdQuitFlag=QUIT; } } } } CloseWindow(p_EdWindow); if (UseFlag==ON) stpcpy(Editor,EdSIBuff); } void FixPlotTypeGadgets() { if (PlotType==PLOT3D) GadMXSel(p_Window,&Plot3DButton,&Plot2DButton,NULL,NULL,NULL,NULL); if (PlotType == PLOT2D) GadMXSel(p_Window,&Plot2DButton,&Plot3DButton,NULL,NULL,NULL,NULL); } void LoadDef() { void ReadDef(); ClearMenuStrip(p_Window); ReadDef(); FixPlotTypeGadgets(); SetMenuStrip(p_Window,&Menu1); } void ReadDef() { int a,b; fp1 = NULL; fp1 = fopen("plot.def","r"); if (fp1==NULL) fp1 = fopen("s:plot.def","r"); if (fp1!=NULL) { fscanf(fp1,"%d %d",&a,&b); fgets(Editor,50,fp1); fclose(fp1); if (a==INTRO) { MenuItem2.Flags= CHECKED+CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP; MenuItem3.Flags= CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP; MenuItem1.Flags= CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP; } else if (a==MCAD) { MenuItem3.Flags= CHECKED+CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP; MenuItem2.Flags= CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP; MenuItem1.Flags= CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP; } else { MenuItem1.Flags= CHECKED+CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP; MenuItem2.Flags= CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP; MenuItem3.Flags= CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP; } Form=a; PlotType=b; } } void SaveDef() { fp1 = fopen("s:plot.def","w"); if (fp1!=NULL) { fprintf(fp1,"%d %d %s",Form,PlotType,Editor); fclose(fp1); } } CheckFile() { BPTR lock; lock=Lock(FileNameSIBuff,ACCESS_READ); if (lock!=NULL) { UnLock(lock); return(1); } AutoRequest(p_Window,&FileCheckText1,&FileCheckText2,&FileCheckText3,NULL,NULL,320,70); return(0); } void print_err(message) char message[]; { SetWindowTitles(p_Window,message,NULL); Delay(200); SetWindowTitles(p_Window,Window.Title,NULL); } void CloseDown() { CloseFont(tf); ClearMenuStrip(p_Window); CloseWindow(p_Window); /* close window */ CloseLibrary(IntuitionBase); CloseLibrary(DosBase); CloseLibrary(DiskfontBase); CloseLibrary(GfxBase); exit(TRUE); /* Good Bye */ }