
#include "cookback.h"

#include <stdio.h>
#include <ctype.h>
#include <gemdefs.h>
#include <obdefs.h>
#include <osbind.h>
#define  TRUE   0
#define  FALSE -1
#define  PAL_ADDR  0xFF8240
int  whichone, done, tdone;
int  sndx, indx1, indx2, indx3, indx4;
int  new_count;

struct index {
	char	name[25];
	long	offset;
	} index[200];
	
int rec_count;
	
struct recipe {
	char	name[40];
	char	serves[40];
	char	class[4][40];
	struct {
		char	quan[40];
		char	measure[40];
		char	prepare[40];
		char	ingredient[40];
		} item[15];
	char directions[20][40];
	};
	
union {
	struct recipe recipe;
	char strings[100][40];
	} d;

char palsave[32];
int swap = 0;

main()
     {
     int i;
     OBJECT *cookrec;
     char   *name;
     char   pause, *base, *malloc(), header[128];
     long pbase;
     FILE *in;
     
    appl_init();
	done = FALSE;
    pbase = Logbase();
 	graf_mouse(M_OFF, NULL);         
	if (Getrez() != 2) {
   		if ((in = fopen("title.dat","br")) != NULL) {
			if ((base = malloc(32512)) != NULL) {
				base = (char *) (((long) base + 511) & 0xFFFE00);
				fread(&header[0], 1, 128, in);
				fread(base, 160, 200, in);
				for (i=0; i < 32; i++)
					palsave[i] = header[i+4];
				swap_pal(palsave);
				swap = 1;
				Setscreen(-1L, -1L, 0);
				Setscreen(-1L, base, -1);
           		}
			fclose(in);
           	}
		}
     if (!rsrc_load("cookback.rsc"))  {
          form_alert(1,"[0][Cannot find cookbook.rsc file|Terminating...][OK]");
          exit(1);
          }
     load_index();
     if (swap != 0)
     	swap_pal(palsave);
     Setscreen(pbase, pbase, 1);
     graf_mouse(ARROW,NULL);
     graf_mouse(M_ON, NULL);
     do  {     
     rsrc_gaddr(0,MENU1,&cookrec);     /* main menu */
     do_dialog(cookrec);
     switch (whichone)  {
        case AF1  : rsrc_gaddr(0,INDEX1,&cookrec);
        		    new_count = rec_count + 1;
			     	for(i=1; i < 52 && i < new_count ; i++) {
                        cookrec[i].ob_spec = &index[i-1].name[0];
					    }
                     do_dialog(cookrec);
                     if (whichone > 0 && whichone < 52 && whichone < new_count && whichone != 12)  {
 			           	read_recipe(whichone - 1);
                        rsrc_gaddr(0,RECIPE,&cookrec);
                        put_recipe(cookrec);
                        do_dialog(cookrec);
                        }
                     break;
        case AF2  :  rsrc_gaddr(0,MENU20,&cookrec);     /* F2 */
                     do_dialog(cookrec);
                     break;            
        case AF3  :  rsrc_gaddr(0,MENU4,&cookrec);      /* (F3) */
                     do_dialog(cookrec);
                     rsrc_gaddr(0,MENU5,&cookrec);
                     cookrec[RI1].ob_spec = "                               ";
 				  	 cookrec[RI2].ob_spec = "                               ";
                     cookrec[RI3].ob_spec = "                               ";
 					 cookrec[RI4].ob_spec = "                               ";
 					 cookrec[RI5].ob_spec = "                               ";
 					 cookrec[RI6].ob_spec = "                               ";
                     switch (whichone) {
                        case CL1 :  cookrec[RI1].ob_spec = "avocado dip";
                               		do_dialog(cookrec);
                               		switch (whichone) {
                               			case RI1 : read_recipe(0);  break;
                               		
                               			}
                        			break;
                        case CL2 :  cookrec[RI1].ob_spec = "beef stew";
                        			cookrec[RI2].ob_spec = "shish kebabs";
                        			cookrec[RI3].ob_spec = "beef rellenos";
                        			do_dialog(cookrec);
                        	  		switch (whichone)  {
                        	  			case RI1 : read_recipe(4); break;
                        	  			case RI2 : read_recipe(6); break;
                        	  			case RI3 : read_recipe(7); break;
                        	  		 }
                        			break;
                        case CL3 : 
                                    break;
                        case CL4 :  cookrec[RI1].ob_spec = "baked shrimp";
                        			cookrec[RI2].ob_spec = "chicken cacciatore";
                        			cookrec[RI3].ob_spec = "duck a l'orange";
                        			cookrec[RI4].ob_spec = "vienna steaks";
                        			do_dialog(cookrec);
                        			switch (whichone) {
                        				case RI1 : read_recipe(1);  break;
                        				case RI2 : read_recipe(8);  break;
                        				case RI3 : read_recipe(9);  break;
                        				case RI4 : read_recipe(5);  break;
                        				}
                        			break;
                        case CL5 :  cookrec[RI1].ob_spec = "duck a l'orange";
                        			do_dialog(cookrec);
                        			switch (whichone)  {
                        				case RI1 : read_recipe(9);  break;
                        				}
                        			break;
                        case CL6 : 
                        			break;
                        case CL7 :  cookrec[RI1].ob_spec = "chicken cacciatore";
                        			do_dialog(cookrec);
                        			switch (whichone) {
                        				case RI1 : read_recipe(8);  break;
                        					}
                         			break;
                        case CL8 : break;
                        case CL9 :  cookrec[RI1].ob_spec = "beef rellenos";
                        		do_dialog(cookrec);
                        			switch (whichone) {
                        				case RI1 : read_recipe(7);  break;
                        				}
                        			break;
                        case CL10:  cookrec[RI1].ob_spec = "chinese vegetables";
                        			do_dialog(cookrec);
                        			switch (whichone)  {
                        				case RI1 : read_recipe(2);  break;
                        					}
                        			break;
                        case CL11:  cookrec[RI1].ob_spec = "scalloped potatoes";
                        			do_dialog(cookrec);
                        			switch (whichone)  {
                        				case RI1 : read_recipe(3);  break;
                        					}
                        			break;
                        case CL12: 
                        			break;
                        case CL13:  cookrec[RI1].ob_spec = "lemon broccoli";
                        			break;  
                        }
                     if (whichone != CLESC && whichone != RIESC && whichone < new_count) {
                    	 rsrc_gaddr(0,RECIPE,&cookrec);
                     	 put_recipe(cookrec);
                    	 do_dialog(cookrec);
                    	 }
                     break;
        case AF4  :  rsrc_gaddr(0,MENU21,&cookrec);
        			 do_dialog(cookrec);
        			 break;
        case AF5  :  rsrc_gaddr(0,MENU22,&cookrec);
        			 do_dialog(cookrec);
        			 break;   
        case AF6  :  tdone = FALSE;
                     do   {
                     rsrc_gaddr(0,MENU7,&cookrec);      /* (F6) */
                     do_dialog(cookrec);
                     switch (whichone)  {
                        case BF1 :rsrc_gaddr(0,MENU8,&cookrec);
                                  do_dialog(cookrec);
                                  break;
                      
                        case BF2 :rsrc_gaddr(0,MENU9,&cookrec);
                                  do_dialog(cookrec);
                                  break;
                        case BF3 :rsrc_gaddr(0,MENU10,&cookrec); 
                                  do_dialog(cookrec);
                                  break;
                     
                        case BF4 :rsrc_gaddr(0,MENU11,&cookrec);
                                  do_dialog(cookrec);
                                  break;
                        case BESC : tdone = TRUE;  break;
                      }    /* switch (whichone)  */
                     } while (tdone == FALSE);
                     break;
        case AF7  :  rsrc_gaddr(0,MENU23,&cookrec);
        			 do_dialog(cookrec);
        			 break;
        case  23  :  done = TRUE;
                     break;
        }      /* switch(whichone) */                          
      } while (done == FALSE);
     appl_exit();
     }
 
         
 do_dialog(cookrec)
 OBJECT *cookrec;
     {
     int cx,cy,cw,ch;
     char pause;
     
     Cconws("\033E");						/* clear screen */
     form_center(cookrec,&cx,&cy,&cw,&ch);
     form_dial(FMD_START,cx,cy,cw,ch,0,0,0,0);
     objc_draw(cookrec,0,10,cx,cy,cw,ch);
     whichone = form_do(cookrec,0);
     form_dial(FMD_FINISH,cx,cy,cw,ch,0,0,0,0);
     cookrec[whichone].ob_state = 0;
     }
  
     
load_index()
	{
	FILE *in;
	int ok, i;
	union {
		char q[4];
		long offset;
		} u;
	
	for (i = 0; i < 100; i++)
	  	index[i].offset = 0;	
	rec_count = 0;
	if ( (in = fopen("recipe.idx", "br")) == NULL) {
		printf("\ncan't  find recipe.idx\n");
		exit(0);
		}
	do {
		for(i=0; i < 25; i++)
			ok = index[rec_count].name[i] = getc(in);
		for(i=3; i >= 0; i--) {
			ok = getc(in);
			u.q[i] = ok;
			}
		index[rec_count].offset = u.offset;
		if (ok != EOF)
			rec_count++;
		} while(ok != EOF);
	fclose(in);
	}
			
read_recipe(rec_number)
int rec_number;
	{
	FILE *in;
	int i, p, l, b;
	char word[40];
	
	if ( (in = fopen("recipe.dat", "br")) == NULL) {
		printf("\ncan't open recipe.dat\n");
		exit(0);
		}
	fseek(in, index[rec_number].offset, 0);
	for(i=0; i < 100; i++)
		d.strings[i][0] = 0;
	i = -1; p = 0; b = 0;
	while( (l = get_string(in, word)) != EOF && b == 0) {
		if (l == 255) {
			switch(++p) {
				case 1:
					i = 29;
					break;
				case 2:
					i = 66;
					break;
				case 3:
					b = 1;
					break;
				}
			}
		else {
			strcpy(&d.strings[l+i][0], word);
			}
		}
	fclose(in);
	}
	
get_string(in, word)
FILE *in;
char word[];
	{
	int type, length, c, i, q;
	
	if (  (type = getc(in)) == EOF)
		return(EOF);
	if (type == 255)
		return(255);
	if (type == 254)
		return(EOF);
	if ( (length = getc(in)) == EOF)
		return(EOF);
	i = 0;
	while ( (c = getc(in)) != EOF && i < length)
		word[i++] = c;
	word[i] = 0;
	ungetc(c, in);
	return(type);
	}
	swap_pal(new_pal)
	int new_pal[];
		{
		int i;
		int temp[16], *tt;
		long ssp;
		
		tt = (int *)PAL_ADDR;
		ssp = Super(0L);
		for (i = 0; i <16;)
			temp[i++] = *tt++;
		Super(ssp);
		Setpallete(new_pal);
		Vsync();
		for (i = 0; i < 16; i++)
			new_pal[i] = temp[i];
		}		
	
   put_recipe(cookrec)
   OBJECT *cookrec;
    	{
    	
        cookrec[RNAME].ob_spec = &d.recipe.name[0];
		cookrec[SERVES].ob_spec = &d.recipe.serves[0];

		cookrec[CLASS1].ob_spec = &d.recipe.class[0][0];
		cookrec[CLASS2].ob_spec = &d.recipe.class[1][0];
		cookrec[CLASS3].ob_spec = &d.recipe.class[2][0];
		cookrec[CLASS4].ob_spec = &d.recipe.class[3][0];

        cookrec[Q1].ob_spec = &d.recipe.item[0].quan[0];
        cookrec[M1].ob_spec = &d.recipe.item[0].measure[0];
        cookrec[P1].ob_spec = &d.recipe.item[0].prepare[0];
        cookrec[I1].ob_spec = &d.recipe.item[0].ingredient[0];

        cookrec[Q2].ob_spec = &d.recipe.item[1].quan[0];
        cookrec[M2].ob_spec = &d.recipe.item[1].measure[0];
        cookrec[P2].ob_spec = &d.recipe.item[1].prepare[0];
        cookrec[I2].ob_spec = &d.recipe.item[1].ingredient[0];

        cookrec[Q3].ob_spec = &d.recipe.item[2].quan[0];
        cookrec[M3].ob_spec = &d.recipe.item[2].measure[0];
        cookrec[P3].ob_spec = &d.recipe.item[2].prepare[0];
        cookrec[I3].ob_spec = &d.recipe.item[2].ingredient[0];
 
        cookrec[Q4].ob_spec = &d.recipe.item[3].quan[0];
        cookrec[M4].ob_spec = &d.recipe.item[3].measure[0];
        cookrec[P4].ob_spec = &d.recipe.item[3].prepare[0];
        cookrec[I4].ob_spec = &d.recipe.item[3].ingredient[0];

        cookrec[Q5].ob_spec = &d.recipe.item[4].quan[0];
        cookrec[M5].ob_spec = &d.recipe.item[4].measure[0];
        cookrec[P5].ob_spec = &d.recipe.item[4].prepare[0];
        cookrec[I5].ob_spec = &d.recipe.item[4].ingredient[0];
 
        cookrec[Q6].ob_spec = &d.recipe.item[5].quan[0];
        cookrec[M6].ob_spec = &d.recipe.item[5].measure[0];
        cookrec[P6].ob_spec = &d.recipe.item[5].prepare[0];
        cookrec[I6].ob_spec = &d.recipe.item[5].ingredient[0];

        cookrec[Q7].ob_spec = &d.recipe.item[6].quan[0];
        cookrec[M7].ob_spec = &d.recipe.item[6].measure[0];
        cookrec[P7].ob_spec = &d.recipe.item[6].prepare[0];
        cookrec[I7].ob_spec = &d.recipe.item[6].ingredient[0];

        cookrec[Q8].ob_spec = &d.recipe.item[7].quan[0];
        cookrec[M8].ob_spec = &d.recipe.item[7].measure[0];
        cookrec[P8].ob_spec = &d.recipe.item[7].prepare[0];
        cookrec[I8].ob_spec = &d.recipe.item[7].ingredient[0];

 		cookrec[Q9].ob_spec = &d.recipe.item[8].quan[0];
        cookrec[M9].ob_spec = &d.recipe.item[8].measure[0];
        cookrec[P9].ob_spec = &d.recipe.item[8].prepare[0];
        cookrec[I9].ob_spec = &d.recipe.item[8].ingredient[0];

        cookrec[Q10].ob_spec = &d.recipe.item[9].quan[0];
        cookrec[M10].ob_spec = &d.recipe.item[9].measure[0];
        cookrec[P10].ob_spec = &d.recipe.item[9].prepare[0];
        cookrec[I10].ob_spec = &d.recipe.item[9].ingredient[0];
		
		cookrec[Q11].ob_spec = &d.recipe.item[10].quan[0];
        cookrec[M11].ob_spec = &d.recipe.item[10].measure[0];
        cookrec[P11].ob_spec = &d.recipe.item[10].prepare[0];
        cookrec[I11].ob_spec = &d.recipe.item[10].ingredient[0];
         
		cookrec[Q12].ob_spec = &d.recipe.item[11].quan[0];
        cookrec[M12].ob_spec = &d.recipe.item[11].measure[0];
        cookrec[P12].ob_spec = &d.recipe.item[11].prepare[0];
        cookrec[I12].ob_spec = &d.recipe.item[11].ingredient[0];
         
		cookrec[Q13].ob_spec = &d.recipe.item[12].quan[0];
        cookrec[M13].ob_spec = &d.recipe.item[12].measure[0];
        cookrec[P13].ob_spec = &d.recipe.item[12].prepare[0];
        cookrec[I13].ob_spec = &d.recipe.item[12].ingredient[0];
         
		cookrec[Q14].ob_spec = &d.recipe.item[13].quan[0];
        cookrec[M14].ob_spec = &d.recipe.item[13].measure[0];
        cookrec[P14].ob_spec = &d.recipe.item[13].prepare[0];
        cookrec[I14].ob_spec = &d.recipe.item[13].ingredient[0];
         
		cookrec[Q15].ob_spec = &d.recipe.item[14].quan[0];
        cookrec[M15].ob_spec = &d.recipe.item[14].measure[0];
        cookrec[P15].ob_spec = &d.recipe.item[14].prepare[0];
        cookrec[I15].ob_spec = &d.recipe.item[14].ingredient[0];
		
		
        cookrec[S1].ob_spec = &d.recipe.directions[0][0];
        cookrec[S2].ob_spec = &d.recipe.directions[1][0];
        cookrec[S3].ob_spec = &d.recipe.directions[2][0];
        cookrec[S4].ob_spec = &d.recipe.directions[3][0];
		cookrec[S5].ob_spec = &d.recipe.directions[4][0];
        cookrec[S6].ob_spec = &d.recipe.directions[5][0];
        cookrec[S7].ob_spec = &d.recipe.directions[6][0];
        cookrec[S8].ob_spec = &d.recipe.directions[7][0];
        cookrec[S9].ob_spec = &d.recipe.directions[8][0];
        cookrec[S10].ob_spec = &d.recipe.directions[9][0];
        cookrec[S11].ob_spec = &d.recipe.directions[10][0];
        cookrec[S12].ob_spec = &d.recipe.directions[11][0]; 
        cookrec[S13].ob_spec = &d.recipe.directions[12][0];
        cookrec[S14].ob_spec = &d.recipe.directions[13][0];
        cookrec[S15].ob_spec = &d.recipe.directions[14][0];
        cookrec[S16].ob_spec = &d.recipe.directions[15][0];
        cookrec[S17].ob_spec = &d.recipe.directions[16][0];
        cookrec[S18].ob_spec = &d.recipe.directions[17][0];
        cookrec[S19].ob_spec = &d.recipe.directions[18][0];
        cookrec[S20].ob_spec = &d.recipe.directions[19][0]; 
    return(0);
   } 
  
  

                        
            		
