home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 145.lha / BonsaiConstructionSet / bcs.c < prev    next >
C/C++ Source or Header  |  1986-11-21  |  15KB  |  454 lines

  1. /* bcs.c -- based on the Bonsai programs by R.I.MacDonald
  2. ******* taken from Analog Computing No.42 May 1986 *******
  3. Converted to Amiga Lattice 'C' by Terry W. Gintz*/
  4.  
  5. void IMsg();
  6.  
  7. /* Include the definitions and functions we need */
  8.  
  9. #include "trees3.h"
  10. #include "bonsai7.c"
  11. #include "perspec5.c"
  12. #include "mouse.c"
  13.  
  14. extern int save(),palette();
  15. extern void clear_colors();
  16. extern struct ColorMap *p_Co;
  17. extern SHORT mx,my;
  18.  
  19. struct IntuiText titletext = {
  20.    2,2,JAM1,0,0,NL,(UBYTE *)"Bonsai Construction Set",NL};
  21.  
  22. struct IntuiText Menu0IText [] = {
  23.  
  24.    {
  25.    0,3,JAM2,      /* Front Pen, Back Pen, Draw Mode */
  26.    0,0,            /* Left Edge, Top Edge */
  27.    &TestFont,         /* pointer to Text Font */
  28.    "  new tree  ",   /* text of Menu Item */
  29.    NULL            /* pointer to next IText */
  30.    },
  31.  
  32.    {0,3,JAM2,0,0,&TestFont,"modify color",NULL },
  33.    {0,3,JAM2,0,0,&TestFont," load data  ",NULL },
  34.    {0,3,JAM2,0,0,&TestFont," save data  ",NULL },
  35.    {0,3,JAM2,0,0,&TestFont,"save picture",NULL },
  36.    {0,3,JAM2,0,0,&TestFont," new picture",NULL },
  37.    {0,3,JAM2,0,0,&TestFont,"    quit    ",NULL },
  38. };
  39.  
  40. struct MenuItem Menu0Item[7] = {
  41.    {
  42.    &Menu0Item[1],         /* pointer to next Item */
  43.    0,0,120,9,      /* Left, Top, Width, Height */
  44.    ITEMTEXT | ITEMENABLED | HIGHCOMP,   /* Flags */
  45.    0,            /* no mutual exclude */
  46.    (APTR)&Menu0IText[0],   /* Render info */   
  47.    NULL,NULL,NULL,         /*Alt Image, Command (amiga) char, subitem*/
  48.    MENUNULL      /* next select */
  49.    },
  50.  
  51.    {&Menu0Item[2],0,9,120,9,ITEMTEXT | ITEMENABLED | HIGHCOMP,
  52.    0,(APTR)&Menu0IText[1],NULL,NULL,NULL,MENUNULL},
  53.  
  54.    {&Menu0Item[3],0,18,120,9,ITEMTEXT | ITEMENABLED | HIGHCOMP,
  55.    0,(APTR)&Menu0IText[2],NULL,NULL,NULL,MENUNULL},
  56.  
  57.    {&Menu0Item[4],0,27,120,9,ITEMTEXT | ITEMENABLED | HIGHCOMP,
  58.    0,(APTR)&Menu0IText[3],NULL,NULL,NULL,MENUNULL},
  59.  
  60.    {&Menu0Item[5],0,36,120,9,ITEMTEXT | ITEMENABLED | HIGHCOMP,
  61.    0,(APTR)&Menu0IText[4],NULL,NULL,NULL,MENUNULL},
  62.  
  63.    {&Menu0Item[6],0,45,120,9,ITEMTEXT | ITEMENABLED | HIGHCOMP,
  64.    0,(APTR)&Menu0IText[5],NULL,NULL,NULL,MENUNULL},
  65.  
  66.    {NULL,0,54,120,9,ITEMTEXT | ITEMENABLED | HIGHCOMP,
  67.    0,(APTR)&Menu0IText[6],NULL,NULL,NULL,MENUNULL},
  68. };
  69.  
  70. struct IntuiText Menu1IText [] = {
  71.  
  72.    {
  73.    0,3,JAM2,      /* Front Pen, Back Pen, Draw Mode */
  74.    0,0,            /* Left Edge, Top Edge */
  75.    &TestFont,         /* pointer to Text Font */
  76.    "    Blue   ",   /* text of Menu Item */
  77.    NULL            /* pointer to next IText */
  78.    },
  79.  
  80.    {0,3,JAM2,0,0,&TestFont,"   Purple  ",NULL },
  81.    {0,3,JAM2,0,0,&TestFont,"    Cyan   ",NULL },
  82.    {0,3,JAM2,0,0,&TestFont,"   White   ",NULL },
  83.    {0,3,JAM2,0,0,&TestFont," Dark Brown",NULL },
  84.    {0,3,JAM2,0,0,&TestFont," Red-Orange",NULL },
  85.    {0,3,JAM2,0,0,&TestFont," Lime Green",NULL },
  86.    {0,3,JAM2,0,0,&TestFont,"    Red    ",NULL },
  87.    {0,3,JAM2,0,0,&TestFont," Light Blue",NULL },
  88.    {0,3,JAM2,0,0,&TestFont,"   Violet  ",NULL },
  89.    {0,3,JAM2,0,0,&TestFont," Blue-Green",NULL },
  90.    {0,3,JAM2,0,0,&TestFont,"   Black   ",NULL },
  91. };
  92.  
  93. struct MenuItem Menu1Item[12] = {
  94.    {
  95.    &Menu1Item[1],         /* pointer to next Item */
  96.    0,0,110,9,      /* Left, Top, Width, Height */
  97.    ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,   /* Flags */
  98.    (~(1 << 0)),            /* mutual exclude */
  99.    (APTR)&Menu1IText[0],   /* Render info */
  100.    NULL,NULL,NULL,         /*Alt Image, Command (amiga) char, subitem*/
  101.    MENUNULL      /* next select */
  102.    },
  103.  
  104.    {&Menu1Item[2],0,9,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  105.    (~(1 << 1)),(APTR)&Menu1IText[1],NULL,NULL,NULL,MENUNULL},
  106.  
  107.    {&Menu1Item[3],0,18,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  108.    (~(1 << 2)),(APTR)&Menu1IText[2],NULL,NULL,NULL,MENUNULL},
  109.  
  110.    {&Menu1Item[4],0,27,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  111.    (~(1 << 3)),(APTR)&Menu1IText[3],NULL,NULL,NULL,MENUNULL},
  112.  
  113.    {&Menu1Item[5],0,36,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED,
  114.    (~(1 << 4)),(APTR)&Menu1IText[4],NULL,NULL,NULL,MENUNULL},
  115.  
  116.    {&Menu1Item[6],0,45,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  117.    (~(1 << 5)),(APTR)&Menu1IText[5],NULL,NULL,NULL,MENUNULL},
  118.  
  119.    {&Menu1Item[7],0,54,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  120.    (~(1 << 6)),(APTR)&Menu1IText[6],NULL,NULL,NULL,MENUNULL},
  121.  
  122.    {&Menu1Item[8],0,63,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  123.    (~(1 << 7)),(APTR)&Menu1IText[7],NULL,NULL,NULL,MENUNULL},
  124.  
  125.    {&Menu1Item[9],0,72,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  126.    (~(1 << 8)),(APTR)&Menu1IText[8],NULL,NULL,NULL,MENUNULL},
  127.  
  128.    {&Menu1Item[10],0,81,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  129.    (~(1 << 9)),(APTR)&Menu1IText[9],NULL,NULL,NULL,MENUNULL},
  130.  
  131.    {&Menu1Item[11],0,90,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  132.    (~(1 << 10)),(APTR)&Menu1IText[10],NULL,NULL,NULL,MENUNULL},
  133.  
  134.    {NULL,1,99,110,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  135.    (~(1 << 11)),(APTR)&Menu1IText[11],NULL,NULL,NULL,MENUNULL},
  136. };
  137.  
  138. struct IntuiText Menu2IText [] = {
  139.  
  140.    {
  141.    0,3,JAM2,      /* Front Pen, Back Pen, Draw Mode */
  142.    0,0,            /* Left Edge, Top Edge */
  143.    &TestFont,         /* pointer to Text Font */
  144.    " x0.1",   /* text of Menu Item */
  145.    NULL            /* pointer to next IText */
  146.    },
  147.                               
  148.    {0,3,JAM2,0,0,&TestFont," x0.2",NULL },
  149.    {0,3,JAM2,0,0,&TestFont," x0.3",NULL },
  150.    {0,3,JAM2,0,0,&TestFont," x0.4",NULL },
  151.    {0,3,JAM2,0,0,&TestFont," x0.5",NULL },
  152.    {0,3,JAM2,0,0,&TestFont," x0.6",NULL },
  153.    {0,3,JAM2,0,0,&TestFont," x0.7",NULL },
  154.    {0,3,JAM2,0,0,&TestFont," x0.8",NULL },
  155.    {0,3,JAM2,0,0,&TestFont," x0.9",NULL },
  156.    {0,3,JAM2,0,0,&TestFont," x1.0",NULL },
  157.    {0,3,JAM2,0,0,&TestFont," x1.5",NULL },
  158.    {0,3,JAM2,0,0,&TestFont," x2.0",NULL },
  159. };
  160.  
  161. struct MenuItem Menu2Item[12] = {
  162.    {
  163.    &Menu2Item[1],         /* pointer to next Item */
  164.    0,0,50,9,      /* Left, Top, Width, Height */
  165.    ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,   /* Flags */
  166.    (~(1 << 0)),            /* mutual exclude */
  167.    (APTR)&Menu2IText[0],   /* Render info */
  168.    NULL,NULL,NULL,         /*Alt Image, Command (amiga) char, subitem*/
  169.    MENUNULL      /* next select */
  170.    },
  171.  
  172.    {&Menu2Item[2],0,9,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  173.    (~(1 << 1)),(APTR)&Menu2IText[1],NULL,NULL,NULL,MENUNULL},
  174.  
  175.    {&Menu2Item[3],0,18,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  176.    (~(1 << 2)),(APTR)&Menu2IText[2],NULL,NULL,NULL,MENUNULL},
  177.  
  178.    {&Menu2Item[4],0,27,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  179.    (~(1 << 3)),(APTR)&Menu2IText[3],NULL,NULL,NULL,MENUNULL},
  180.  
  181.    {&Menu2Item[5],0,36,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  182.    (~(1 << 4)),(APTR)&Menu2IText[4],NULL,NULL,NULL,MENUNULL},
  183.  
  184.    {&Menu2Item[6],0,45,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  185.    (~(1 << 5)),(APTR)&Menu2IText[5],NULL,NULL,NULL,MENUNULL},
  186.  
  187.    {&Menu2Item[7],0,54,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  188.    (~(1 << 6)),(APTR)&Menu2IText[6],NULL,NULL,NULL,MENUNULL},
  189.  
  190.    {&Menu2Item[8],0,63,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  191.    (~(1 << 7)),(APTR)&Menu2IText[7],NULL,NULL,NULL,MENUNULL},
  192.  
  193.    {&Menu2Item[9],0,72,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  194.    (~(1 << 8)),(APTR)&Menu2IText[8],NULL,NULL,NULL,MENUNULL},
  195.  
  196.    {&Menu2Item[10],0,81,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED,
  197.    (~(1 << 9)),(APTR)&Menu2IText[9],NULL,NULL,NULL,MENUNULL},
  198.  
  199.    {&Menu2Item[11],0,90,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  200.    (~(1 << 10)),(APTR)&Menu2IText[10],NULL,NULL,NULL,MENUNULL},
  201.  
  202.    {NULL,1,99,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
  203.    (~(1 << 11)),(APTR)&Menu2IText[11],NULL,NULL,NULL,MENUNULL},
  204. };
  205.  
  206. struct Menu BdMenu[3] = {
  207. {
  208.    &BdMenu[1],      /* ptr to next Menu */
  209.    10,0,120,0,   /* left,top,width,height--top and height ignored */
  210.    MENUENABLED,   /* Flags */
  211.    "   Bonsai   ",   /* menu title */
  212.    &Menu0Item[0]   /* First Item in list */
  213. },
  214.    {&BdMenu[2],140,0,110,0,MENUENABLED,"   Color  ",&Menu1Item[0]},
  215.    {NULL,260,0,50,0,MENUENABLED,"Scale",&Menu2Item[0]}
  216. };
  217.  
  218. int lod,sav;
  219. UWORD color18, color19;
  220. int color,pt;
  221. extern double scl;
  222.  
  223. main()
  224. {
  225.    USHORT drawing;
  226.  
  227.    drawing=1;
  228.    initwind();
  229.    init_colors();
  230.    init_scr();
  231.    pt=1;
  232.    color=8;
  233.    scl=1.0;
  234.    strcpy(name,"title");
  235.    color18=GetRGB4(p_Co,18);
  236.    color19=GetRGB4(p_Co,19);
  237.    SetRGB4(vp,18,15,0,0);
  238.    SetRGB4(vp,19,15,15,15);
  239.    SetPointer(wd,&PointImage,14,16,0,0);
  240.    SetAPen(rp,31);
  241.    SetDrMd(wd->RPort,JAM1);
  242.    RectFill(wd->RPort,0,0,319,199);
  243.    mx=159;
  244.    my=180;
  245.    PrintIText(wd->RPort,&titletext,60,175);
  246.    perspec(0);
  247.    ClearPointer(wd);
  248.    pt=0;
  249.    while(drawing)
  250.    {
  251.       IMsg();
  252.    }
  253. }   /* end of main */
  254.  
  255. void IMsg()
  256. {
  257.    struct IntuiMessage *BdMsg;      /* Intuition message structure */
  258.    ULONG Mclass;               /* Message class */
  259.    USHORT Mcode;            /* Message code */
  260.    double dd;
  261.  
  262.    dd=drand48();  /* stir up random generator while idling */
  263.  
  264. while (BdMsg = (struct IntuiMessage *)GetMsg(wd->UserPort))
  265.    {
  266.    Mclass = BdMsg->Class;
  267.    Mcode = BdMsg->Code;
  268.    ReplyMsg(BdMsg);
  269.    switch (Mclass) {
  270.       case CLOSEWINDOW:
  271.          clear_colors();
  272.          Cleanup();
  273.          exit(TRUE);
  274.          break;
  275.  
  276.       case MENUPICK:
  277.          switch (MENUNUM(Mcode)){
  278.             case 0:
  279.                switch (ITEMNUM(Mcode)){
  280.                   case 0:
  281.                      color18=GetRGB4(p_Co,18);
  282.                      color19=GetRGB4(p_Co,19);
  283.                      SetRGB4(vp,18,0,15,0);
  284.                      SetRGB4(vp,19,11,4,0);
  285.                      SetPointer(wd,&TreeImage,14,16,0,0);
  286.                      mouse();
  287.                      ClearPointer(wd);
  288.                      pt=1;
  289.                      color18=GetRGB4(p_Co,18);
  290.                      color19=GetRGB4(p_Co,19);
  291.                      SetRGB4(vp,18,15,0,0);
  292.                      SetRGB4(vp,19,15,15,15);
  293.                      SetPointer(wd,&PointImage,14,16,0,0);
  294.                      perspec(1);
  295.                      ClearPointer(wd);
  296.                      break;
  297.                   case 1:
  298.                      palette(wd);
  299.                      break;
  300.                   case 2:
  301.                      pt=1;
  302.                      lod=save(wd);
  303.                      if (lod==1){
  304.                         color18=GetRGB4(p_Co,18);
  305.                         color19=GetRGB4(p_Co,19);
  306.                         SetRGB4(vp,18,0,15,0);
  307.                         SetRGB4(vp,19,11,4,0);
  308.                         SetPointer(wd,&TreeImage,14,16,0,0);
  309.                         mouse();
  310.                         ClearPointer(wd);
  311.                         color18=GetRGB4(p_Co,18);
  312.                         color19=GetRGB4(p_Co,19);
  313.                         SetRGB4(vp,18,15,0,0);
  314.                         SetRGB4(vp,19,15,15,15);
  315.                         SetPointer(wd,&PointImage,14,16,0,0);
  316.                         perspec(0);
  317.                         ClearPointer(wd);
  318.                      }
  319.                      break;
  320.                   case 3:
  321.                      sav=save(wd);
  322.                      if (sav==1){
  323.                      color18=GetRGB4(p_Co,18);
  324.                      color19=GetRGB4(p_Co,19);
  325.                      SetRGB4(vp,18,15,0,0);
  326.                      SetRGB4(vp,19,15,15,15);
  327.                      SetPointer(wd,&PointImage,14,16,0,0);
  328.                      writefile(0);
  329.                      ClearPointer(wd);
  330.                      }
  331.                      break;
  332.                   case 4:
  333.                      sav=save(wd);
  334.                      if (sav==1){
  335.                      color18=GetRGB4(p_Co,18);
  336.                      color19=GetRGB4(p_Co,19);
  337.                      SetRGB4(vp,18,15,0,0);
  338.                      SetRGB4(vp,19,15,15,15);
  339.                      SetPointer(wd,&PointImage,14,16,0,0);
  340.                      SavePicture();
  341.                      ClearPointer(wd);
  342.                      }
  343.                      break;
  344.                   case 5:
  345.                      SetAPen(rp,31);
  346.                      SetDrMd(wd->RPort,JAM1);
  347.                      RectFill(wd->RPort,0,0,319,199);
  348.                      break;
  349.                   case 6:
  350.                      clear_colors();
  351.                      Cleanup();
  352.                      exit(TRUE);
  353.                      break;
  354.                }
  355.                break;
  356.             case 1:
  357.                switch(ITEMNUM(Mcode)){
  358.                   case 0:
  359.                      color = 4;
  360.                      break;
  361.                   case 1:
  362.                      color = 5;
  363.                      break;
  364.                   case 2:
  365.                      color = 6;
  366.                      break;
  367.                   case 3:
  368.                      color = 7;
  369.                      break;
  370.                   case 4:
  371.                      color = 8;
  372.                      break;
  373.                   case 5:
  374.                      color = 9;
  375.                      break;
  376.                   case 6:
  377.                      color = 10;
  378.                      break;
  379.                   case 7:
  380.                      color = 11;
  381.                      break;
  382.                   case 8:
  383.                      color = 12;
  384.                      break;
  385.                   case 9:
  386.                      color = 13;
  387.                      break;
  388.                   case 10:
  389.                      color = 14;
  390.                      break;
  391.                   case 11:
  392.                      color = 15;
  393.                      break;
  394.                }
  395.                break;
  396.             case 2:
  397.                switch(ITEMNUM(Mcode)){
  398.                   case 0:
  399.                      scl = .1;
  400.                      break;
  401.                   case 1:
  402.                      scl = .2;
  403.                      break;
  404.                   case 2:
  405.                      scl = .3;
  406.                      break;
  407.                   case 3:
  408.                      scl = .4;
  409.                      break;
  410.                   case 4:
  411.                      scl = .5;
  412.                      break;
  413.                   case 5:
  414.                      scl = .6;
  415.                      break;
  416.                   case 6:
  417.                      scl = .7;
  418.                      break;
  419.                   case 7:
  420.                      scl = .8;
  421.                      break;
  422.                   case 8:
  423.                      scl = .9;
  424.                      break;
  425.                   case 9:
  426.                      scl = 1.0;
  427.                      break;
  428.                   case 10:
  429.                      scl = 1.5;
  430.                      break;
  431.                   case 11:
  432.                      scl = 2.0;
  433.                      break;
  434.                }
  435.                break;
  436.          }
  437.    } 
  438.   /* end of Class switch */      
  439.    }/* while */
  440. }
  441.  
  442. init_scr()
  443. {
  444.  
  445. SetMenuStrip(wd,&BdMenu);
  446.  
  447. }   /* end of init_scr */
  448.  
  449. Cleanup()
  450. {
  451.    CloseWindow(wd);
  452.    CloseScreen(screen);
  453. }
  454.