home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / demos / 66 / cookbook / cookback.c next >
Encoding:
C/C++ Source or Header  |  1986-10-16  |  16.1 KB  |  464 lines

  1.  
  2. #include "cookback.h"
  3.  
  4. #include <stdio.h>
  5. #include <ctype.h>
  6. #include <gemdefs.h>
  7. #include <obdefs.h>
  8. #include <osbind.h>
  9. #define  TRUE   0
  10. #define  FALSE -1
  11. #define  PAL_ADDR  0xFF8240
  12. int  whichone, done, tdone;
  13. int  sndx, indx1, indx2, indx3, indx4;
  14. int  new_count;
  15.  
  16. struct index {
  17.     char    name[25];
  18.     long    offset;
  19.     } index[200];
  20.     
  21. int rec_count;
  22.     
  23. struct recipe {
  24.     char    name[40];
  25.     char    serves[40];
  26.     char    class[4][40];
  27.     struct {
  28.         char    quan[40];
  29.         char    measure[40];
  30.         char    prepare[40];
  31.         char    ingredient[40];
  32.         } item[15];
  33.     char directions[20][40];
  34.     };
  35.     
  36. union {
  37.     struct recipe recipe;
  38.     char strings[100][40];
  39.     } d;
  40.  
  41. char palsave[32];
  42. int swap = 0;
  43.  
  44. main()
  45.      {
  46.      int i;
  47.      OBJECT *cookrec;
  48.      char   *name;
  49.      char   pause, *base, *malloc(), header[128];
  50.      long pbase;
  51.      FILE *in;
  52.      
  53.     appl_init();
  54.     done = FALSE;
  55.     pbase = Logbase();
  56.      graf_mouse(M_OFF, NULL);         
  57.     if (Getrez() != 2) {
  58.            if ((in = fopen("title.dat","br")) != NULL) {
  59.             if ((base = malloc(32512)) != NULL) {
  60.                 base = (char *) (((long) base + 511) & 0xFFFE00);
  61.                 fread(&header[0], 1, 128, in);
  62.                 fread(base, 160, 200, in);
  63.                 for (i=0; i < 32; i++)
  64.                     palsave[i] = header[i+4];
  65.                 swap_pal(palsave);
  66.                 swap = 1;
  67.                 Setscreen(-1L, -1L, 0);
  68.                 Setscreen(-1L, base, -1);
  69.                    }
  70.             fclose(in);
  71.                }
  72.         }
  73.      if (!rsrc_load("cookback.rsc"))  {
  74.           form_alert(1,"[0][Cannot find cookbook.rsc file|Terminating...][OK]");
  75.           exit(1);
  76.           }
  77.      load_index();
  78.      if (swap != 0)
  79.          swap_pal(palsave);
  80.      Setscreen(pbase, pbase, 1);
  81.      graf_mouse(ARROW,NULL);
  82.      graf_mouse(M_ON, NULL);
  83.      do  {     
  84.      rsrc_gaddr(0,MENU1,&cookrec);     /* main menu */
  85.      do_dialog(cookrec);
  86.      switch (whichone)  {
  87.         case AF1  : rsrc_gaddr(0,INDEX1,&cookrec);
  88.                     new_count = rec_count + 1;
  89.                      for(i=1; i < 52 && i < new_count ; i++) {
  90.                         cookrec[i].ob_spec = &index[i-1].name[0];
  91.                         }
  92.                      do_dialog(cookrec);
  93.                      if (whichone > 0 && whichone < 52 && whichone < new_count && whichone != 12)  {
  94.                             read_recipe(whichone - 1);
  95.                         rsrc_gaddr(0,RECIPE,&cookrec);
  96.                         put_recipe(cookrec);
  97.                         do_dialog(cookrec);
  98.                         }
  99.                      break;
  100.         case AF2  :  rsrc_gaddr(0,MENU20,&cookrec);     /* F2 */
  101.                      do_dialog(cookrec);
  102.                      break;            
  103.         case AF3  :  rsrc_gaddr(0,MENU4,&cookrec);      /* (F3) */
  104.                      do_dialog(cookrec);
  105.                      rsrc_gaddr(0,MENU5,&cookrec);
  106.                      cookrec[RI1].ob_spec = "                               ";
  107.                         cookrec[RI2].ob_spec = "                               ";
  108.                      cookrec[RI3].ob_spec = "                               ";
  109.                       cookrec[RI4].ob_spec = "                               ";
  110.                       cookrec[RI5].ob_spec = "                               ";
  111.                       cookrec[RI6].ob_spec = "                               ";
  112.                      switch (whichone) {
  113.                         case CL1 :  cookrec[RI1].ob_spec = "avocado dip";
  114.                                        do_dialog(cookrec);
  115.                                        switch (whichone) {
  116.                                            case RI1 : read_recipe(0);  break;
  117.                                        
  118.                                            }
  119.                                     break;
  120.                         case CL2 :  cookrec[RI1].ob_spec = "beef stew";
  121.                                     cookrec[RI2].ob_spec = "shish kebabs";
  122.                                     cookrec[RI3].ob_spec = "beef rellenos";
  123.                                     do_dialog(cookrec);
  124.                                       switch (whichone)  {
  125.                                           case RI1 : read_recipe(4); break;
  126.                                           case RI2 : read_recipe(6); break;
  127.                                           case RI3 : read_recipe(7); break;
  128.                                        }
  129.                                     break;
  130.                         case CL3 : 
  131.                                     break;
  132.                         case CL4 :  cookrec[RI1].ob_spec = "baked shrimp";
  133.                                     cookrec[RI2].ob_spec = "chicken cacciatore";
  134.                                     cookrec[RI3].ob_spec = "duck a l'orange";
  135.                                     cookrec[RI4].ob_spec = "vienna steaks";
  136.                                     do_dialog(cookrec);
  137.                                     switch (whichone) {
  138.                                         case RI1 : read_recipe(1);  break;
  139.                                         case RI2 : read_recipe(8);  break;
  140.                                         case RI3 : read_recipe(9);  break;
  141.                                         case RI4 : read_recipe(5);  break;
  142.                                         }
  143.                                     break;
  144.                         case CL5 :  cookrec[RI1].ob_spec = "duck a l'orange";
  145.                                     do_dialog(cookrec);
  146.                                     switch (whichone)  {
  147.                                         case RI1 : read_recipe(9);  break;
  148.                                         }
  149.                                     break;
  150.                         case CL6 : 
  151.                                     break;
  152.                         case CL7 :  cookrec[RI1].ob_spec = "chicken cacciatore";
  153.                                     do_dialog(cookrec);
  154.                                     switch (whichone) {
  155.                                         case RI1 : read_recipe(8);  break;
  156.                                             }
  157.                                      break;
  158.                         case CL8 : break;
  159.                         case CL9 :  cookrec[RI1].ob_spec = "beef rellenos";
  160.                                 do_dialog(cookrec);
  161.                                     switch (whichone) {
  162.                                         case RI1 : read_recipe(7);  break;
  163.                                         }
  164.                                     break;
  165.                         case CL10:  cookrec[RI1].ob_spec = "chinese vegetables";
  166.                                     do_dialog(cookrec);
  167.                                     switch (whichone)  {
  168.                                         case RI1 : read_recipe(2);  break;
  169.                                             }
  170.                                     break;
  171.                         case CL11:  cookrec[RI1].ob_spec = "scalloped potatoes";
  172.                                     do_dialog(cookrec);
  173.                                     switch (whichone)  {
  174.                                         case RI1 : read_recipe(3);  break;
  175.                                             }
  176.                                     break;
  177.                         case CL12: 
  178.                                     break;
  179.                         case CL13:  cookrec[RI1].ob_spec = "lemon broccoli";
  180.                                     break;  
  181.                         }
  182.                      if (whichone != CLESC && whichone != RIESC && whichone < new_count) {
  183.                          rsrc_gaddr(0,RECIPE,&cookrec);
  184.                           put_recipe(cookrec);
  185.                          do_dialog(cookrec);
  186.                          }
  187.                      break;
  188.         case AF4  :  rsrc_gaddr(0,MENU21,&cookrec);
  189.                      do_dialog(cookrec);
  190.                      break;
  191.         case AF5  :  rsrc_gaddr(0,MENU22,&cookrec);
  192.                      do_dialog(cookrec);
  193.                      break;   
  194.         case AF6  :  tdone = FALSE;
  195.                      do   {
  196.                      rsrc_gaddr(0,MENU7,&cookrec);      /* (F6) */
  197.                      do_dialog(cookrec);
  198.                      switch (whichone)  {
  199.                         case BF1 :rsrc_gaddr(0,MENU8,&cookrec);
  200.                                   do_dialog(cookrec);
  201.                                   break;
  202.                       
  203.                         case BF2 :rsrc_gaddr(0,MENU9,&cookrec);
  204.                                   do_dialog(cookrec);
  205.                                   break;
  206.                         case BF3 :rsrc_gaddr(0,MENU10,&cookrec); 
  207.                                   do_dialog(cookrec);
  208.                                   break;
  209.                      
  210.                         case BF4 :rsrc_gaddr(0,MENU11,&cookrec);
  211.                                   do_dialog(cookrec);
  212.                                   break;
  213.                         case BESC : tdone = TRUE;  break;
  214.                       }    /* switch (whichone)  */
  215.                      } while (tdone == FALSE);
  216.                      break;
  217.         case AF7  :  rsrc_gaddr(0,MENU23,&cookrec);
  218.                      do_dialog(cookrec);
  219.                      break;
  220.         case  23  :  done = TRUE;
  221.                      break;
  222.         }      /* switch(whichone) */                          
  223.       } while (done == FALSE);
  224.      appl_exit();
  225.      }
  226.  
  227.          
  228.  do_dialog(cookrec)
  229.  OBJECT *cookrec;
  230.      {
  231.      int cx,cy,cw,ch;
  232.      char pause;
  233.      
  234.      Cconws("\033E");                        /* clear screen */
  235.      form_center(cookrec,&cx,&cy,&cw,&ch);
  236.      form_dial(FMD_START,cx,cy,cw,ch,0,0,0,0);
  237.      objc_draw(cookrec,0,10,cx,cy,cw,ch);
  238.      whichone = form_do(cookrec,0);
  239.      form_dial(FMD_FINISH,cx,cy,cw,ch,0,0,0,0);
  240.      cookrec[whichone].ob_state = 0;
  241.      }
  242.   
  243.      
  244. load_index()
  245.     {
  246.     FILE *in;
  247.     int ok, i;
  248.     union {
  249.         char q[4];
  250.         long offset;
  251.         } u;
  252.     
  253.     for (i = 0; i < 100; i++)
  254.           index[i].offset = 0;    
  255.     rec_count = 0;
  256.     if ( (in = fopen("recipe.idx", "br")) == NULL) {
  257.         printf("\ncan't  find recipe.idx\n");
  258.         exit(0);
  259.         }
  260.     do {
  261.         for(i=0; i < 25; i++)
  262.             ok = index[rec_count].name[i] = getc(in);
  263.         for(i=3; i >= 0; i--) {
  264.             ok = getc(in);
  265.             u.q[i] = ok;
  266.             }
  267.         index[rec_count].offset = u.offset;
  268.         if (ok != EOF)
  269.             rec_count++;
  270.         } while(ok != EOF);
  271.     fclose(in);
  272.     }
  273.             
  274. read_recipe(rec_number)
  275. int rec_number;
  276.     {
  277.     FILE *in;
  278.     int i, p, l, b;
  279.     char word[40];
  280.     
  281.     if ( (in = fopen("recipe.dat", "br")) == NULL) {
  282.         printf("\ncan't open recipe.dat\n");
  283.         exit(0);
  284.         }
  285.     fseek(in, index[rec_number].offset, 0);
  286.     for(i=0; i < 100; i++)
  287.         d.strings[i][0] = 0;
  288.     i = -1; p = 0; b = 0;
  289.     while( (l = get_string(in, word)) != EOF && b == 0) {
  290.         if (l == 255) {
  291.             switch(++p) {
  292.                 case 1:
  293.                     i = 29;
  294.                     break;
  295.                 case 2:
  296.                     i = 66;
  297.                     break;
  298.                 case 3:
  299.                     b = 1;
  300.                     break;
  301.                 }
  302.             }
  303.         else {
  304.             strcpy(&d.strings[l+i][0], word);
  305.             }
  306.         }
  307.     fclose(in);
  308.     }
  309.     
  310. get_string(in, word)
  311. FILE *in;
  312. char word[];
  313.     {
  314.     int type, length, c, i, q;
  315.     
  316.     if (  (type = getc(in)) == EOF)
  317.         return(EOF);
  318.     if (type == 255)
  319.         return(255);
  320.     if (type == 254)
  321.         return(EOF);
  322.     if ( (length = getc(in)) == EOF)
  323.         return(EOF);
  324.     i = 0;
  325.     while ( (c = getc(in)) != EOF && i < length)
  326.         word[i++] = c;
  327.     word[i] = 0;
  328.     ungetc(c, in);
  329.     return(type);
  330.     }
  331.     swap_pal(new_pal)
  332.     int new_pal[];
  333.         {
  334.         int i;
  335.         int temp[16], *tt;
  336.         long ssp;
  337.         
  338.         tt = (int *)PAL_ADDR;
  339.         ssp = Super(0L);
  340.         for (i = 0; i <16;)
  341.             temp[i++] = *tt++;
  342.         Super(ssp);
  343.         Setpallete(new_pal);
  344.         Vsync();
  345.         for (i = 0; i < 16; i++)
  346.             new_pal[i] = temp[i];
  347.         }        
  348.     
  349.    put_recipe(cookrec)
  350.    OBJECT *cookrec;
  351.         {
  352.         
  353.         cookrec[RNAME].ob_spec = &d.recipe.name[0];
  354.         cookrec[SERVES].ob_spec = &d.recipe.serves[0];
  355.  
  356.         cookrec[CLASS1].ob_spec = &d.recipe.class[0][0];
  357.         cookrec[CLASS2].ob_spec = &d.recipe.class[1][0];
  358.         cookrec[CLASS3].ob_spec = &d.recipe.class[2][0];
  359.         cookrec[CLASS4].ob_spec = &d.recipe.class[3][0];
  360.  
  361.         cookrec[Q1].ob_spec = &d.recipe.item[0].quan[0];
  362.         cookrec[M1].ob_spec = &d.recipe.item[0].measure[0];
  363.         cookrec[P1].ob_spec = &d.recipe.item[0].prepare[0];
  364.         cookrec[I1].ob_spec = &d.recipe.item[0].ingredient[0];
  365.  
  366.         cookrec[Q2].ob_spec = &d.recipe.item[1].quan[0];
  367.         cookrec[M2].ob_spec = &d.recipe.item[1].measure[0];
  368.         cookrec[P2].ob_spec = &d.recipe.item[1].prepare[0];
  369.         cookrec[I2].ob_spec = &d.recipe.item[1].ingredient[0];
  370.  
  371.         cookrec[Q3].ob_spec = &d.recipe.item[2].quan[0];
  372.         cookrec[M3].ob_spec = &d.recipe.item[2].measure[0];
  373.         cookrec[P3].ob_spec = &d.recipe.item[2].prepare[0];
  374.         cookrec[I3].ob_spec = &d.recipe.item[2].ingredient[0];
  375.  
  376.         cookrec[Q4].ob_spec = &d.recipe.item[3].quan[0];
  377.         cookrec[M4].ob_spec = &d.recipe.item[3].measure[0];
  378.         cookrec[P4].ob_spec = &d.recipe.item[3].prepare[0];
  379.         cookrec[I4].ob_spec = &d.recipe.item[3].ingredient[0];
  380.  
  381.         cookrec[Q5].ob_spec = &d.recipe.item[4].quan[0];
  382.         cookrec[M5].ob_spec = &d.recipe.item[4].measure[0];
  383.         cookrec[P5].ob_spec = &d.recipe.item[4].prepare[0];
  384.         cookrec[I5].ob_spec = &d.recipe.item[4].ingredient[0];
  385.  
  386.         cookrec[Q6].ob_spec = &d.recipe.item[5].quan[0];
  387.         cookrec[M6].ob_spec = &d.recipe.item[5].measure[0];
  388.         cookrec[P6].ob_spec = &d.recipe.item[5].prepare[0];
  389.         cookrec[I6].ob_spec = &d.recipe.item[5].ingredient[0];
  390.  
  391.         cookrec[Q7].ob_spec = &d.recipe.item[6].quan[0];
  392.         cookrec[M7].ob_spec = &d.recipe.item[6].measure[0];
  393.         cookrec[P7].ob_spec = &d.recipe.item[6].prepare[0];
  394.         cookrec[I7].ob_spec = &d.recipe.item[6].ingredient[0];
  395.  
  396.         cookrec[Q8].ob_spec = &d.recipe.item[7].quan[0];
  397.         cookrec[M8].ob_spec = &d.recipe.item[7].measure[0];
  398.         cookrec[P8].ob_spec = &d.recipe.item[7].prepare[0];
  399.         cookrec[I8].ob_spec = &d.recipe.item[7].ingredient[0];
  400.  
  401.          cookrec[Q9].ob_spec = &d.recipe.item[8].quan[0];
  402.         cookrec[M9].ob_spec = &d.recipe.item[8].measure[0];
  403.         cookrec[P9].ob_spec = &d.recipe.item[8].prepare[0];
  404.         cookrec[I9].ob_spec = &d.recipe.item[8].ingredient[0];
  405.  
  406.         cookrec[Q10].ob_spec = &d.recipe.item[9].quan[0];
  407.         cookrec[M10].ob_spec = &d.recipe.item[9].measure[0];
  408.         cookrec[P10].ob_spec = &d.recipe.item[9].prepare[0];
  409.         cookrec[I10].ob_spec = &d.recipe.item[9].ingredient[0];
  410.         
  411.         cookrec[Q11].ob_spec = &d.recipe.item[10].quan[0];
  412.         cookrec[M11].ob_spec = &d.recipe.item[10].measure[0];
  413.         cookrec[P11].ob_spec = &d.recipe.item[10].prepare[0];
  414.         cookrec[I11].ob_spec = &d.recipe.item[10].ingredient[0];
  415.          
  416.         cookrec[Q12].ob_spec = &d.recipe.item[11].quan[0];
  417.         cookrec[M12].ob_spec = &d.recipe.item[11].measure[0];
  418.         cookrec[P12].ob_spec = &d.recipe.item[11].prepare[0];
  419.         cookrec[I12].ob_spec = &d.recipe.item[11].ingredient[0];
  420.          
  421.         cookrec[Q13].ob_spec = &d.recipe.item[12].quan[0];
  422.         cookrec[M13].ob_spec = &d.recipe.item[12].measure[0];
  423.         cookrec[P13].ob_spec = &d.recipe.item[12].prepare[0];
  424.         cookrec[I13].ob_spec = &d.recipe.item[12].ingredient[0];
  425.          
  426.         cookrec[Q14].ob_spec = &d.recipe.item[13].quan[0];
  427.         cookrec[M14].ob_spec = &d.recipe.item[13].measure[0];
  428.         cookrec[P14].ob_spec = &d.recipe.item[13].prepare[0];
  429.         cookrec[I14].ob_spec = &d.recipe.item[13].ingredient[0];
  430.          
  431.         cookrec[Q15].ob_spec = &d.recipe.item[14].quan[0];
  432.         cookrec[M15].ob_spec = &d.recipe.item[14].measure[0];
  433.         cookrec[P15].ob_spec = &d.recipe.item[14].prepare[0];
  434.         cookrec[I15].ob_spec = &d.recipe.item[14].ingredient[0];
  435.         
  436.         
  437.         cookrec[S1].ob_spec = &d.recipe.directions[0][0];
  438.         cookrec[S2].ob_spec = &d.recipe.directions[1][0];
  439.         cookrec[S3].ob_spec = &d.recipe.directions[2][0];
  440.         cookrec[S4].ob_spec = &d.recipe.directions[3][0];
  441.         cookrec[S5].ob_spec = &d.recipe.directions[4][0];
  442.         cookrec[S6].ob_spec = &d.recipe.directions[5][0];
  443.         cookrec[S7].ob_spec = &d.recipe.directions[6][0];
  444.         cookrec[S8].ob_spec = &d.recipe.directions[7][0];
  445.         cookrec[S9].ob_spec = &d.recipe.directions[8][0];
  446.         cookrec[S10].ob_spec = &d.recipe.directions[9][0];
  447.         cookrec[S11].ob_spec = &d.recipe.directions[10][0];
  448.         cookrec[S12].ob_spec = &d.recipe.directions[11][0]; 
  449.         cookrec[S13].ob_spec = &d.recipe.directions[12][0];
  450.         cookrec[S14].ob_spec = &d.recipe.directions[13][0];
  451.         cookrec[S15].ob_spec = &d.recipe.directions[14][0];
  452.         cookrec[S16].ob_spec = &d.recipe.directions[15][0];
  453.         cookrec[S17].ob_spec = &d.recipe.directions[16][0];
  454.         cookrec[S18].ob_spec = &d.recipe.directions[17][0];
  455.         cookrec[S19].ob_spec = &d.recipe.directions[18][0];
  456.         cookrec[S20].ob_spec = &d.recipe.directions[19][0]; 
  457.     return(0);
  458.    } 
  459.   
  460.   
  461.  
  462.                         
  463.                     
  464. 