/* plot.c -- based on the 3d graphics programs by M. Waite & C. L. Morgan >>>>>from the book "Graphics Primer for the IBM PC"<<<<< Converted to Amiga Lattice 'C' by Terry W. Gintz*/ void IMsg(); /* Include the definitions and functions we need */ #include "plot.h" #include "plotter.c" #include "palette.c" #include "save.c" #include "formula.c" #include "mouse.c" extern int save(),palette(),formula(); extern struct ColorMap *p_Co; extern SHORT mx,my; double magx,magy; struct IntuiText titletext = { 2,2,JAM1,0,0,NL,(UBYTE *)"COS(x)*COS(y)",NL}; struct IntuiText Menu0IText [] = { { 0,3,JAM2, /* Front Pen, Back Pen, Draw Mode */ 0,0, /* Left Edge, Top Edge */ &TestFont, /* pointer to Text Font */ " new plot ", /* text of Menu Item */ NULL /* pointer to next IText */ }, {0,3,JAM2,0,0,&TestFont,"modify color",NULL }, {0,3,JAM2,0,0,&TestFont,"save picture",NULL }, {0,3,JAM2,0,0,&TestFont,"new formula ",NULL }, {0,3,JAM2,0,0,&TestFont," quit ",NULL }, }; struct MenuItem Menu0Item[5] = { { &Menu0Item[1], /* pointer to next Item */ 0,0,120,9, /* Left, Top, Width, Height */ ITEMTEXT | ITEMENABLED | HIGHCOMP, /* Flags */ 0, /* no mutual exclude */ (APTR)&Menu0IText[0], /* Render info */ NULL,NULL,NULL, /*Alt Image, Command (amiga) char, subitem*/ MENUNULL /* next select */ }, {&Menu0Item[2],0,9,120,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu0IText[1],NULL,NULL,NULL,MENUNULL}, {&Menu0Item[3],0,18,120,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu0IText[2],NULL,NULL,NULL,MENUNULL}, {&Menu0Item[4],0,27,120,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu0IText[3],NULL,NULL,NULL,MENUNULL}, {NULL,0,36,120,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu0IText[4],NULL,NULL,NULL,MENUNULL} }; struct IntuiText Menu1IText [] = { { 0,3,JAM2, /* Front Pen, Back Pen, Draw Mode */ 0,0, /* Left Edge, Top Edge */ &TestFont, /* pointer to Text Font */ " 10°", /* text of Menu Item */ NULL /* pointer to next IText */ }, {0,3,JAM2,0,0,&TestFont," 15°",NULL }, {0,3,JAM2,0,0,&TestFont," 20°",NULL }, {0,3,JAM2,0,0,&TestFont," 25°",NULL }, {0,3,JAM2,0,0,&TestFont," 30°",NULL }, {0,3,JAM2,0,0,&TestFont," 35°",NULL }, {0,3,JAM2,0,0,&TestFont," 40°",NULL }, {0,3,JAM2,0,0,&TestFont," 45°",NULL }, {0,3,JAM2,0,0,&TestFont," 50°",NULL }, {0,3,JAM2,0,0,&TestFont," 55°",NULL }, {0,3,JAM2,0,0,&TestFont," 60°",NULL }, {0,3,JAM2,0,0,&TestFont," 65°",NULL }, {0,3,JAM2,0,0,&TestFont," 70°",NULL }, {0,3,JAM2,0,0,&TestFont," 75°",NULL }, {0,3,JAM2,0,0,&TestFont," 80°",NULL }, }; struct MenuItem Menu1Item[15] = { { &Menu1Item[1], /* pointer to next Item */ 0,0,40,9, /* Left, Top, Width, Height */ ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, /* Flags */ (~(1 << 0)), /* mutual exclude */ (APTR)&Menu1IText[0], /* Render info */ NULL,NULL,NULL, /*Alt Image, Command (amiga) char, subitem*/ MENUNULL /* next select */ }, {&Menu1Item[2],0,9,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 1)),(APTR)&Menu1IText[1],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[3],0,18,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 2)),(APTR)&Menu1IText[2],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[4],0,27,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 3)),(APTR)&Menu1IText[3],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[5],0,36,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 4)),(APTR)&Menu1IText[4],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[6],0,45,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 5)),(APTR)&Menu1IText[5],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[7],0,54,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 6)),(APTR)&Menu1IText[6],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[8],0,63,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED, (~(1 << 7)),(APTR)&Menu1IText[7],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[9],0,72,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 8)),(APTR)&Menu1IText[8],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[10],0,81,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 9)),(APTR)&Menu1IText[9],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[11],0,90,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 10)),(APTR)&Menu1IText[10],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[12],0,99,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 11)),(APTR)&Menu1IText[11],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[13],0,108,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 12)),(APTR)&Menu1IText[12],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[14],0,117,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 13)),(APTR)&Menu1IText[13],NULL,NULL,NULL,MENUNULL}, {NULL,1,126,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 14)),(APTR)&Menu1IText[14],NULL,NULL,NULL,MENUNULL}, }; struct IntuiText Menu2IText [] = { { 0,3,JAM2, /* Front Pen, Back Pen, Draw Mode */ 0,0, /* Left Edge, Top Edge */ &TestFont, /* pointer to Text Font */ " 10°", /* text of Menu Item */ NULL /* pointer to next IText */ }, {0,3,JAM2,0,0,&TestFont," 15°",NULL }, {0,3,JAM2,0,0,&TestFont," 20°",NULL }, {0,3,JAM2,0,0,&TestFont," 25°",NULL }, {0,3,JAM2,0,0,&TestFont," 30°",NULL }, {0,3,JAM2,0,0,&TestFont," 35°",NULL }, {0,3,JAM2,0,0,&TestFont," 40°",NULL }, {0,3,JAM2,0,0,&TestFont," 45°",NULL }, {0,3,JAM2,0,0,&TestFont," 50°",NULL }, {0,3,JAM2,0,0,&TestFont," 55°",NULL }, {0,3,JAM2,0,0,&TestFont," 60°",NULL }, {0,3,JAM2,0,0,&TestFont," 65°",NULL }, {0,3,JAM2,0,0,&TestFont," 70°",NULL }, {0,3,JAM2,0,0,&TestFont," 75°",NULL }, {0,3,JAM2,0,0,&TestFont," 80°",NULL }, }; struct MenuItem Menu2Item[15] = { { &Menu2Item[1], /* pointer to next Item */ 0,0,40,9, /* Left, Top, Width, Height */ ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, /* Flags */ (~(1 << 0)), /* mutual exclude */ (APTR)&Menu2IText[0], /* Render info */ NULL,NULL,NULL, /*Alt Image, Command (amiga) char, subitem*/ MENUNULL /* next select */ }, {&Menu2Item[2],0,9,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 1)),(APTR)&Menu2IText[1],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[3],0,18,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 2)),(APTR)&Menu2IText[2],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[4],0,27,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 3)),(APTR)&Menu2IText[3],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[5],0,36,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED, (~(1 << 4)),(APTR)&Menu2IText[4],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[6],0,45,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 5)),(APTR)&Menu2IText[5],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[7],0,54,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 6)),(APTR)&Menu2IText[6],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[8],0,63,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 7)),(APTR)&Menu2IText[7],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[9],0,72,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 8)),(APTR)&Menu2IText[8],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[10],0,81,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 9)),(APTR)&Menu2IText[9],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[11],0,90,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 10)),(APTR)&Menu2IText[10],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[12],0,99,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 11)),(APTR)&Menu2IText[11],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[13],0,108,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 12)),(APTR)&Menu2IText[12],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[14],0,117,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 13)),(APTR)&Menu2IText[13],NULL,NULL,NULL,MENUNULL}, {NULL,1,126,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 14)),(APTR)&Menu2IText[14],NULL,NULL,NULL,MENUNULL}, }; struct IntuiText Menu3IText [] = { { 0,3,JAM2, /* Front Pen, Back Pen, Draw Mode */ 0,0, /* Left Edge, Top Edge */ &TestFont, /* pointer to Text Font */ " 5", /* text of Menu Item */ NULL /* pointer to next IText */ }, {0,3,JAM2,0,0,&TestFont," 10",NULL }, {0,3,JAM2,0,0,&TestFont," 15",NULL }, {0,3,JAM2,0,0,&TestFont," 20",NULL }, {0,3,JAM2,0,0,&TestFont," 25",NULL }, {0,3,JAM2,0,0,&TestFont," 30",NULL }, {0,3,JAM2,0,0,&TestFont," 35",NULL }, {0,3,JAM2,0,0,&TestFont," 40",NULL }, }; struct MenuItem Menu3Item[8] = { { &Menu3Item[1], /* pointer to next Item */ 0,0,30,9, /* Left, Top, Width, Height */ ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, /* Flags */ (~(1 << 0)), /* mutual exclude */ (APTR)&Menu3IText[0], /* Render info */ NULL,NULL,NULL, /*Alt Image, Command (amiga) char, subitem*/ MENUNULL /* next select */ }, {&Menu3Item[2],0,9,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 1)),(APTR)&Menu3IText[1],NULL,NULL,NULL,MENUNULL}, {&Menu3Item[3],0,18,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 2)),(APTR)&Menu3IText[2],NULL,NULL,NULL,MENUNULL}, {&Menu3Item[4],0,27,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED, (~(1 << 3)),(APTR)&Menu3IText[3],NULL,NULL,NULL,MENUNULL}, {&Menu3Item[5],0,36,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 4)),(APTR)&Menu3IText[4],NULL,NULL,NULL,MENUNULL}, {&Menu3Item[6],0,45,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 5)),(APTR)&Menu3IText[5],NULL,NULL,NULL,MENUNULL}, {&Menu3Item[7],0,54,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 6)),(APTR)&Menu3IText[6],NULL,NULL,NULL,MENUNULL}, {NULL,0,63,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 7)),(APTR)&Menu3IText[7],NULL,NULL,NULL,MENUNULL} }; struct IntuiText Menu4IText [] = { { 0,3,JAM2, /* Front Pen, Back Pen, Draw Mode */ 0,0, /* Left Edge, Top Edge */ &TestFont, /* pointer to Text Font */ " 5", /* text of Menu Item */ NULL /* pointer to next IText */ }, {0,3,JAM2,0,0,&TestFont," 10",NULL }, {0,3,JAM2,0,0,&TestFont," 15",NULL }, {0,3,JAM2,0,0,&TestFont," 20",NULL }, {0,3,JAM2,0,0,&TestFont," 25",NULL }, {0,3,JAM2,0,0,&TestFont," 30",NULL }, {0,3,JAM2,0,0,&TestFont," 35",NULL }, {0,3,JAM2,0,0,&TestFont," 40",NULL }, }; struct MenuItem Menu4Item[8] = { { &Menu4Item[1], /* pointer to next Item */ 0,0,30,9, /* Left, Top, Width, Height */ ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, /* Flags */ (~(1 << 0)), /* mutual exclude */ (APTR)&Menu4IText[0], /* Render info */ NULL,NULL,NULL, /*Alt Image, Command (amiga) char, subitem*/ MENUNULL /* next select */ }, {&Menu4Item[2],0,9,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 1)),(APTR)&Menu4IText[1],NULL,NULL,NULL,MENUNULL}, {&Menu4Item[3],0,18,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 2)),(APTR)&Menu4IText[2],NULL,NULL,NULL,MENUNULL}, {&Menu4Item[4],0,27,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED, (~(1 << 3)),(APTR)&Menu4IText[3],NULL,NULL,NULL,MENUNULL}, {&Menu4Item[5],0,36,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 4)),(APTR)&Menu4IText[4],NULL,NULL,NULL,MENUNULL}, {&Menu4Item[6],0,45,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 5)),(APTR)&Menu4IText[5],NULL,NULL,NULL,MENUNULL}, {&Menu4Item[7],0,54,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 6)),(APTR)&Menu4IText[6],NULL,NULL,NULL,MENUNULL}, {NULL,0,63,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 7)),(APTR)&Menu4IText[7],NULL,NULL,NULL,MENUNULL} }; struct Menu BdMenu[5] = { { &BdMenu[1], /* ptr to next Menu */ 10,0,120,0, /* left,top,width,height--top and height ignored */ MENUENABLED, /* Flags */ " Main ", /* menu title */ &Menu0Item[0] /* First Item in list */ }, {&BdMenu[2],140,0,40,0,MENUENABLED,"Spin",&Menu1Item[0]}, {&BdMenu[3],190,0,40,0,MENUENABLED,"Tip ",&Menu2Item[0]}, {&BdMenu[4],240,0,30,0,MENUENABLED,"M*X",&Menu3Item[0]}, {NULL,280,0,30,0,MENUENABLED,"M*Y",&Menu4Item[0]} }; int sav,foo; UWORD color18, color19; extern char z[30]; extern int spin,tip; main() { USHORT drawing; drawing=1; initwind(); init_colors(); init_scr(); strcpy(z,"COS(x)*COS(y)"); color18=GetRGB4(p_Co,18); color19=GetRGB4(p_Co,19); SetRGB4(vp,18,15,0,0); SetRGB4(vp,19,15,15,15); SetPointer(w,&PointImage,14,16,0,0); magx=20.0; magy=20.0; mx=150; my=90; spin=45; tip=30; plotter(); PrintIText(w->RPort,&titletext,60,175); ClearPointer(w); while(drawing) { IMsg(); } } /* end of main */ void IMsg() { struct IntuiMessage *BdMsg; /* Intuition message structure */ ULONG Mclass; /* Message class */ USHORT Mcode; /* Message code */ while (BdMsg = (struct IntuiMessage *)GetMsg(w->UserPort)) { Mclass = BdMsg->Class; Mcode = BdMsg->Code; ReplyMsg(BdMsg); switch (Mclass) { case CLOSEWINDOW: clear_colors(); Cleanup(); exit(TRUE); break; case MENUPICK: switch (MENUNUM(Mcode)){ case 0: switch (ITEMNUM(Mcode)){ case 0: color18=GetRGB4(p_Co,18); color19=GetRGB4(p_Co,19); SetRGB4(vp,18,0,15,0); SetRGB4(vp,19,11,4,0); SetPointer(w,&CursorImage,14,16,0,0); mouse(); ClearPointer(w); color18=GetRGB4(p_Co,18); color19=GetRGB4(p_Co,19); SetRGB4(vp,18,15,0,0); SetRGB4(vp,19,15,15,15); SetPointer(w,&PointImage,14,16,0,0); plotter(); titletext.IText=(UBYTE *)z; PrintIText(w->RPort,&titletext,60,175); ClearPointer(w); break; case 1: palette(w); break; case 2: sav=save(w); if (sav==1){ color18=GetRGB4(p_Co,18); color19=GetRGB4(p_Co,19); SetRGB4(vp,18,15,0,0); SetRGB4(vp,19,15,15,15); SetPointer(w,&PointImage,14,16,0,0); SavePicture(); ClearPointer(w); } break; case 3: foo=formula(w); if (foo==1){ color18=GetRGB4(p_Co,18); color19=GetRGB4(p_Co,19); SetRGB4(vp,18,0,15,0); SetRGB4(vp,19,11,4,0); SetPointer(w,&CursorImage,14,16,0,0); mouse(); ClearPointer(w); color18=GetRGB4(p_Co,18); color19=GetRGB4(p_Co,19); SetRGB4(vp,18,15,0,0); SetRGB4(vp,19,15,15,15); SetPointer(w,&PointImage,14,16,0,0); plotter(); titletext.IText=(UBYTE *)z; PrintIText(w->RPort,&titletext,60,175); ClearPointer(w); } break; case 4: clear_colors(); Cleanup(); exit(TRUE); break; } break; case 1: switch(ITEMNUM(Mcode)){ case 0: spin=10; break; case 1: spin=15; break; case 2: spin=20; break; case 3: spin=25; break; case 4: spin=30; break; case 5: spin=35; break; case 6: spin=40; break; case 7: spin=45; break; case 8: spin=50; break; case 9: spin=55; break; case 10: spin=60; break; case 11: spin=65; break; case 12: spin=70; break; case 13: spin=75; break; case 14: spin=80; break; } break; case 2: switch(ITEMNUM(Mcode)){ case 0: tip=10; break; case 1: tip=15; break; case 2: tip=20; break; case 3: tip=25; break; case 4: tip=30; break; case 5: tip=35; break; case 6: tip=40; break; case 7: tip=45; break; case 8: tip=50; break; case 9: tip=55; break; case 10: tip=60; break; case 11: tip=65; break; case 12: tip=70; break; case 13: tip=75; break; case 14: tip=80; break; } break; case 3: switch(ITEMNUM(Mcode)){ case 0: magx=5.0; break; case 1: magx=10.0; break; case 2: magx=15.0; break; case 3: magx=20.0; break; case 4: magx=25.0; break; case 5: magx=30.0; break; case 6: magx=35.0; break; case 7: magx=40.0; break; } break; case 4: switch(ITEMNUM(Mcode)){ case 0: magy=5.0; break; case 1: magy=10.0; break; case 2: magy=15.0; break; case 3: magy=20.0; break; case 4: magy=25.0; break; case 5: magy=30.0; break; case 6: magy=35.0; break; case 7: magy=40.0; break; } break; } } /* end of Class switch */ }/* while */ } init_scr() { SetMenuStrip(w,&BdMenu); } /* end of init_scr */ Cleanup() { CloseWindow(w); CloseScreen(screen); }