/* bcs.c -- based on the Bonsai programs by R.I.MacDonald ******* taken from Analog Computing No.42 May 1986 ******* Converted to Amiga Lattice 'C' by Terry W. Gintz*/ void IMsg(); /* Include the definitions and functions we need */ #include "trees3.h" #include "bonsai7.c" #include "perspec5.c" #include "mouse.c" extern int save(),palette(); extern void clear_colors(); extern struct ColorMap *p_Co; extern SHORT mx,my; struct IntuiText titletext = { 2,2,JAM1,0,0,NL,(UBYTE *)"Bonsai Construction Set",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 tree ", /* text of Menu Item */ NULL /* pointer to next IText */ }, {0,3,JAM2,0,0,&TestFont,"modify color",NULL }, {0,3,JAM2,0,0,&TestFont," load data ",NULL }, {0,3,JAM2,0,0,&TestFont," save data ",NULL }, {0,3,JAM2,0,0,&TestFont,"save picture",NULL }, {0,3,JAM2,0,0,&TestFont," new picture",NULL }, {0,3,JAM2,0,0,&TestFont," quit ",NULL }, }; struct MenuItem Menu0Item[7] = { { &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}, {&Menu0Item[5],0,36,120,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu0IText[4],NULL,NULL,NULL,MENUNULL}, {&Menu0Item[6],0,45,120,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu0IText[5],NULL,NULL,NULL,MENUNULL}, {NULL,0,54,120,9,ITEMTEXT | ITEMENABLED | HIGHCOMP, 0,(APTR)&Menu0IText[6],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 */ " Blue ", /* text of Menu Item */ NULL /* pointer to next IText */ }, {0,3,JAM2,0,0,&TestFont," Purple ",NULL }, {0,3,JAM2,0,0,&TestFont," Cyan ",NULL }, {0,3,JAM2,0,0,&TestFont," White ",NULL }, {0,3,JAM2,0,0,&TestFont," Dark Brown",NULL }, {0,3,JAM2,0,0,&TestFont," Red-Orange",NULL }, {0,3,JAM2,0,0,&TestFont," Lime Green",NULL }, {0,3,JAM2,0,0,&TestFont," Red ",NULL }, {0,3,JAM2,0,0,&TestFont," Light Blue",NULL }, {0,3,JAM2,0,0,&TestFont," Violet ",NULL }, {0,3,JAM2,0,0,&TestFont," Blue-Green",NULL }, {0,3,JAM2,0,0,&TestFont," Black ",NULL }, }; struct MenuItem Menu1Item[12] = { { &Menu1Item[1], /* pointer to next Item */ 0,0,110,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,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 1)),(APTR)&Menu1IText[1],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[3],0,18,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 2)),(APTR)&Menu1IText[2],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[4],0,27,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 3)),(APTR)&Menu1IText[3],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[5],0,36,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED, (~(1 << 4)),(APTR)&Menu1IText[4],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[6],0,45,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 5)),(APTR)&Menu1IText[5],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[7],0,54,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 6)),(APTR)&Menu1IText[6],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[8],0,63,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 7)),(APTR)&Menu1IText[7],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[9],0,72,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 8)),(APTR)&Menu1IText[8],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[10],0,81,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 9)),(APTR)&Menu1IText[9],NULL,NULL,NULL,MENUNULL}, {&Menu1Item[11],0,90,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 10)),(APTR)&Menu1IText[10],NULL,NULL,NULL,MENUNULL}, {NULL,1,99,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 11)),(APTR)&Menu1IText[11],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 */ " x0.1", /* text of Menu Item */ NULL /* pointer to next IText */ }, {0,3,JAM2,0,0,&TestFont," x0.2",NULL }, {0,3,JAM2,0,0,&TestFont," x0.3",NULL }, {0,3,JAM2,0,0,&TestFont," x0.4",NULL }, {0,3,JAM2,0,0,&TestFont," x0.5",NULL }, {0,3,JAM2,0,0,&TestFont," x0.6",NULL }, {0,3,JAM2,0,0,&TestFont," x0.7",NULL }, {0,3,JAM2,0,0,&TestFont," x0.8",NULL }, {0,3,JAM2,0,0,&TestFont," x0.9",NULL }, {0,3,JAM2,0,0,&TestFont," x1.0",NULL }, {0,3,JAM2,0,0,&TestFont," x1.5",NULL }, {0,3,JAM2,0,0,&TestFont," x2.0",NULL }, }; struct MenuItem Menu2Item[12] = { { &Menu2Item[1], /* pointer to next Item */ 0,0,50,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,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 1)),(APTR)&Menu2IText[1],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[3],0,18,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 2)),(APTR)&Menu2IText[2],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[4],0,27,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 3)),(APTR)&Menu2IText[3],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[5],0,36,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 4)),(APTR)&Menu2IText[4],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[6],0,45,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 5)),(APTR)&Menu2IText[5],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[7],0,54,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 6)),(APTR)&Menu2IText[6],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[8],0,63,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 7)),(APTR)&Menu2IText[7],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[9],0,72,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 8)),(APTR)&Menu2IText[8],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[10],0,81,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED, (~(1 << 9)),(APTR)&Menu2IText[9],NULL,NULL,NULL,MENUNULL}, {&Menu2Item[11],0,90,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 10)),(APTR)&Menu2IText[10],NULL,NULL,NULL,MENUNULL}, {NULL,1,99,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT, (~(1 << 11)),(APTR)&Menu2IText[11],NULL,NULL,NULL,MENUNULL}, }; struct Menu BdMenu[3] = { { &BdMenu[1], /* ptr to next Menu */ 10,0,120,0, /* left,top,width,height--top and height ignored */ MENUENABLED, /* Flags */ " Bonsai ", /* menu title */ &Menu0Item[0] /* First Item in list */ }, {&BdMenu[2],140,0,110,0,MENUENABLED," Color ",&Menu1Item[0]}, {NULL,260,0,50,0,MENUENABLED,"Scale",&Menu2Item[0]} }; int lod,sav; UWORD color18, color19; int color,pt; extern double scl; main() { USHORT drawing; drawing=1; initwind(); init_colors(); init_scr(); pt=1; color=8; scl=1.0; strcpy(name,"title"); color18=GetRGB4(p_Co,18); color19=GetRGB4(p_Co,19); SetRGB4(vp,18,15,0,0); SetRGB4(vp,19,15,15,15); SetPointer(wd,&PointImage,14,16,0,0); SetAPen(rp,31); SetDrMd(wd->RPort,JAM1); RectFill(wd->RPort,0,0,319,199); mx=159; my=180; PrintIText(wd->RPort,&titletext,60,175); perspec(0); ClearPointer(wd); pt=0; while(drawing) { IMsg(); } } /* end of main */ void IMsg() { struct IntuiMessage *BdMsg; /* Intuition message structure */ ULONG Mclass; /* Message class */ USHORT Mcode; /* Message code */ double dd; dd=drand48(); /* stir up random generator while idling */ while (BdMsg = (struct IntuiMessage *)GetMsg(wd->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(wd,&TreeImage,14,16,0,0); mouse(); ClearPointer(wd); pt=1; color18=GetRGB4(p_Co,18); color19=GetRGB4(p_Co,19); SetRGB4(vp,18,15,0,0); SetRGB4(vp,19,15,15,15); SetPointer(wd,&PointImage,14,16,0,0); perspec(1); ClearPointer(wd); break; case 1: palette(wd); break; case 2: pt=1; lod=save(wd); if (lod==1){ color18=GetRGB4(p_Co,18); color19=GetRGB4(p_Co,19); SetRGB4(vp,18,0,15,0); SetRGB4(vp,19,11,4,0); SetPointer(wd,&TreeImage,14,16,0,0); mouse(); ClearPointer(wd); color18=GetRGB4(p_Co,18); color19=GetRGB4(p_Co,19); SetRGB4(vp,18,15,0,0); SetRGB4(vp,19,15,15,15); SetPointer(wd,&PointImage,14,16,0,0); perspec(0); ClearPointer(wd); } break; case 3: sav=save(wd); 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(wd,&PointImage,14,16,0,0); writefile(0); ClearPointer(wd); } break; case 4: sav=save(wd); 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(wd,&PointImage,14,16,0,0); SavePicture(); ClearPointer(wd); } break; case 5: SetAPen(rp,31); SetDrMd(wd->RPort,JAM1); RectFill(wd->RPort,0,0,319,199); break; case 6: clear_colors(); Cleanup(); exit(TRUE); break; } break; case 1: switch(ITEMNUM(Mcode)){ case 0: color = 4; break; case 1: color = 5; break; case 2: color = 6; break; case 3: color = 7; break; case 4: color = 8; break; case 5: color = 9; break; case 6: color = 10; break; case 7: color = 11; break; case 8: color = 12; break; case 9: color = 13; break; case 10: color = 14; break; case 11: color = 15; break; } break; case 2: switch(ITEMNUM(Mcode)){ case 0: scl = .1; break; case 1: scl = .2; break; case 2: scl = .3; break; case 3: scl = .4; break; case 4: scl = .5; break; case 5: scl = .6; break; case 6: scl = .7; break; case 7: scl = .8; break; case 8: scl = .9; break; case 9: scl = 1.0; break; case 10: scl = 1.5; break; case 11: scl = 2.0; break; } break; } } /* end of Class switch */ }/* while */ } init_scr() { SetMenuStrip(wd,&BdMenu); } /* end of init_scr */ Cleanup() { CloseWindow(wd); CloseScreen(screen); }