/* based on the articles on cycloids in Creative Computing May-June 1984 and the article in February 1984 BYTE "Five Original Graphics" */ struct CopList { int dummy; }; struct UCopList { int dummy; }; struct cprlist { int dummy; }; struct Region { int dummy; }; struct VSprite { int dummy; }; struct collTable { int dummy; }; struct KeyMap { int dummy; }; struct Device { int dummy; }; struct Unit { int dummy; }; struct GfxBase { int dummy; }; void IMsg(); short int stopcheck(); /* Include the definitions and functions we need */ #include "hypocycloid.h" #include "hypo.c" struct IntuiText Menu0IText [] = { { 0,3,JAM2, /* Front Pen, Back Pen, Draw Mode */ 0,0, /* Left Edge, Top Edge */ &TestFont, /* pointer to Text Font */ " new", /* text of Menu Item */ NULL /* pointer to next IText */ }, {0,3,JAM2,0,0,&TestFont," go ",NULL }, {0,3,JAM2,0,0,&TestFont,"stop",NULL }, {0,3,JAM2,0,0,&TestFont,"save",NULL }, {0,3,JAM2,0,0,&TestFont,"quit",NULL }, }; struct MenuItem Menu0Item[5] = { { &Menu0Item[1], /* pointer to next Item */ 0,0,45,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,45,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu0IText[1],NULL,NULL,NULL,MENUNULL}, {&Menu0Item[3],0,18,45,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu0IText[2],NULL,NULL,NULL,MENUNULL}, {&Menu0Item[4],0,27,45,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu0IText[3],NULL,NULL,NULL,MENUNULL}, {NULL,0,36,45,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 */ " 0 ", /* text of Menu Item */ NULL /* pointer to next IText */ }, {0,3,JAM2,0,0,&TestFont," .25 ",NULL }, {0,3,JAM2,0,0,&TestFont," .50 ",NULL }, {0,3,JAM2,0,0,&TestFont," .75 ",NULL }, {0,3,JAM2,0,0,&TestFont," 1.0 ",NULL }, {0,3,JAM2,0,0,&TestFont," 1.25 ",NULL }, {0,3,JAM2,0,0,&TestFont," 1.50 ",NULL }, {0,3,JAM2,0,0,&TestFont," 1.75 ",NULL }, {0,3,JAM2,0,0,&TestFont," 2.0 ",NULL }, {0,3,JAM2,0,0,&TestFont," 2.5 ",NULL }, }; struct MenuItem Menu1Item[10] = { { &Menu1Item[1], /* pointer to next Item */ 0,0,65,9, /* Left, Top, Width, Height */ ITEMTEXT | ITEMENABLED | HIGHCOMP, /* Flags */ 0, /* no mutual exclude */ (APTR)&Menu1IText[0], /* Render info */ NULL,NULL,NULL, /*Alt Image, Command (amiga) char, subitem*/ MENUNULL /* next select */ }, {&Menu1Item[2],0,9,65,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu1IText[1],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[3],0,18,65,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu1IText[2],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[4],0,27,65,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu1IText[3],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[5],0,36,65,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu1IText[4],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[6],0,45,65,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu1IText[5],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[7],0,54,65,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu1IText[6],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[8],0,63,65,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu1IText[7],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[9],0,72,65,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu1IText[8],NULL,NULL,NULL,MENUNULL}, {NULL,0,81,65,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu1IText[9],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 */ " 0 ", /* text of Menu Item */ NULL /* pointer to next IText */ }, {0,3,JAM2,0,0,&TestFont," 10% ",NULL }, {0,3,JAM2,0,0,&TestFont," 20% ",NULL }, {0,3,JAM2,0,0,&TestFont," 30% ",NULL }, }; struct MenuItem Menu2Item[4] = { { &Menu2Item[1], /* pointer to next Item */ 0,0,55,9, /* Left, Top, Width, Height */ ITEMTEXT | ITEMENABLED | HIGHCOMP, /* Flags */ 0, /* no mutual exclude */ (APTR)&Menu2IText[0], /* Render info */ NULL,NULL,NULL, /*Alt Image, Command (amiga) char, subitem*/ MENUNULL /* next select */ }, {&Menu2Item[2],0,9,55,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu2IText[1],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[3],0,18,55,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu2IText[2],NULL,NULL,NULL,MENUNULL}, {NULL,0,27,55,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu2IText[3],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 */ "10%", /* text of Menu Item */ NULL /* pointer to next IText */ }, {0,3,JAM2,0,0,&TestFont,"20%",NULL }, {0,3,JAM2,0,0,&TestFont,"30%",NULL }, {0,3,JAM2,0,0,&TestFont,"40%",NULL }, {0,3,JAM2,0,0,&TestFont,"50%",NULL }, {0,3,JAM2,0,0,&TestFont,"60%",NULL }, {0,3,JAM2,0,0,&TestFont,"70%",NULL }, {0,3,JAM2,0,0,&TestFont,"80%",NULL }, }; struct MenuItem Menu3Item[8] = { { &Menu3Item[1], /* pointer to next Item */ 0,0,35,9, /* Left, Top, Width, Height */ ITEMTEXT | ITEMENABLED | HIGHCOMP, /* Flags */ 0, /* no mutual exclude */ (APTR)&Menu3IText[0], /* Render info */ NULL,NULL,NULL, /*Alt Image, Command (amiga) char, subitem*/ MENUNULL /* next select */ }, {&Menu3Item[2],0,9,35,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu3IText[1],NULL,NULL,NULL,MENUNULL}, {&Menu3Item[3],0,18,35,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu3IText[2],NULL,NULL,NULL,MENUNULL}, {&Menu3Item[4],0,27,35,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu3IText[3],NULL,NULL,NULL,MENUNULL}, {&Menu3Item[5],0,36,35,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu3IText[4],NULL,NULL,NULL,MENUNULL}, {&Menu3Item[6],0,45,35,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu3IText[5],NULL,NULL,NULL,MENUNULL}, {&Menu3Item[7],0,54,35,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu3IText[6],NULL,NULL,NULL,MENUNULL}, {NULL,0,63,35,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(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 */ " 0 ", /* text of Menu Item */ NULL /* pointer to next IText */ }, {0,3,JAM2,0,0,&TestFont," 3 ",NULL }, {0,3,JAM2,0,0,&TestFont," 6 ",NULL }, {0,3,JAM2,0,0,&TestFont," 9 ",NULL }, {0,3,JAM2,0,0,&TestFont," 12 ",NULL }, {0,3,JAM2,0,0,&TestFont," 15 ",NULL }, {0,3,JAM2,0,0,&TestFont," 18 ",NULL }, {0,3,JAM2,0,0,&TestFont," 21 ",NULL }, {0,3,JAM2,0,0,&TestFont," 24 ",NULL }, {0,3,JAM2,0,0,&TestFont," 30 ",NULL }, }; struct MenuItem Menu4Item[10] = { { &Menu4Item[1], /* pointer to next Item */ 0,0,55,9, /* Left, Top, Width, Height */ ITEMTEXT | ITEMENABLED | HIGHCOMP, /* Flags */ 0, /* no mutual exclude */ (APTR)&Menu4IText[0], /* Render info */ NULL,NULL,NULL, /*Alt Image, Command (amiga) char, subitem*/ MENUNULL /* next select */ }, {&Menu4Item[2],0,9,55,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu4IText[1],NULL,NULL,NULL,MENUNULL}, {&Menu4Item[3],0,18,55,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu4IText[2],NULL,NULL,NULL,MENUNULL}, {&Menu4Item[4],0,27,55,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu4IText[3],NULL,NULL,NULL,MENUNULL}, {&Menu4Item[5],0,36,55,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu4IText[4],NULL,NULL,NULL,MENUNULL}, {&Menu4Item[6],0,45,55,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu4IText[5],NULL,NULL,NULL,MENUNULL}, {&Menu4Item[7],0,54,55,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu4IText[6],NULL,NULL,NULL,MENUNULL}, {&Menu4Item[8],0,63,55,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu4IText[7],NULL,NULL,NULL,MENUNULL}, {&Menu4Item[9],0,72,55,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu4IText[8],NULL,NULL,NULL,MENUNULL}, {NULL,0,81,55,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu4IText[9],NULL,NULL,NULL,MENUNULL} }; struct Menu BdMenu[5] = { { &BdMenu[1], /* ptr to next Menu */ 10,0,45,0, /* left,top,width,height--top and height ignored */ MENUENABLED, /* Flags */ "Main", /* menu title */ &Menu0Item[0] /* First Item in list */ }, {&BdMenu[2],65,0,65,0,MENUENABLED,"Reduce",&Menu1Item[0]}, {&BdMenu[3],140,0,55,0,MENUENABLED,"Begin",&Menu2Item[0]}, {&BdMenu[4],205,0,35,0,MENUENABLED,"End",&Menu3Item[0]}, {NULL,250,0,55,0,MENUENABLED,"Angle",&Menu4Item[0]} }; short int an,bd,cc,ex,nf,rr; double bf,bl,cf,dd,l,z; extern short int aa,bb; main() { USHORT drawing; drawing=1; nf=0; ex=0; cc=0; an=0; rr=1; bd=1; dd=360.0; bf=0; cf=.1; l=0; bl=1.0; z=1; getradii(); initwind(); init_scr(); fillscreen(); precalculate(); while(drawing){ IMsg(); } } /* end of main */ getradii() { aa=0; bb=1; while (aaUserPort)) { Mclass = BdMsg->Class; Mcode = BdMsg->Code; ReplyMsg(BdMsg); switch (Mclass) { case CLOSEWINDOW: Cleanup(); exit(TRUE); break; case MENUPICK: switch (MENUNUM(Mcode)){ case 0: switch (ITEMNUM(Mcode)){ case 0: Cleanup(); getradii(); initwind(); init_scr(); fillscreen(); precalculate(); break; case 1: fillscreen(); precalculate(); epic(); doepic(); break; case 2: break; case 3: SavePicture(); initwind(); init_scr(); fillscreen(); precalculate(); break; case 4: Cleanup(); exit(TRUE); break; } break; case 1: switch (ITEMNUM(Mcode)){ case 0: cc=0; break; case 1: cc=.25; break; case 2: cc=.5; break; case 3: cc=.75; break; case 4: cc=1.0; break; case 5: cc=1.25; break; case 6: cc=1.5; break; case 7: cc=1.75; break; case 8: cc=2.0; break; case 9: cc=2.5; break; } break; case 2: switch (ITEMNUM(Mcode)){ case 0: bf=0; break; case 1: bf=.1; break; case 2: bf=.2; break; case 3: bf=.3; break; } break; case 3: switch (ITEMNUM(Mcode)){ case 0: cf=.1; break; case 1: cf=.2; break; case 2: cf=.3; break; case 3: cf=.4; break; case 4: cf=.5; break; case 5: cf=.6; break; case 6: cf=.7; break; case 7: cf=.8; break; } break; case 4: switch (ITEMNUM(Mcode)){ case 0: an=0; break; case 1: an=3; break; case 2: an=6; break; case 3: an=9; break; case 4: an=12; break; case 5: an=15; break; case 6: an=18; break; case 7: an=21; break; case 8: an=24; break; case 9: an=30; break; } break; } } /* end of Class switch */ }/* while */ } init_scr() { SetMenuStrip(w,&BdMenu); } /* end of init_scr */ Cleanup() { CloseWindow(w); CloseScreen(screen); } short int stopcheck() { struct IntuiMessage *BdMsg; /* Intuition message structure */ ULONG Mclass; /* Message class */ USHORT Mcode,ItemNum; ex = 0; nf = 0; while (BdMsg = (struct IntuiMessage *)GetMsg(w->UserPort)) { Mclass = BdMsg->Class; Mcode = BdMsg->Code; ReplyMsg(BdMsg); switch (Mclass) { case CLOSEWINDOW: Cleanup(); exit(TRUE); break; case MENUPICK: switch (MENUNUM(Mcode)){ case 0: ItemNum = ITEMNUM(Mcode); switch (ItemNum){ case 0: ex = 1; nf = 1; break; case 1: break; case 2: ex = 1; break; case 3: break; case 4: Cleanup(); exit(TRUE); } break; } } }/* while */ return(ex); }