#include "cookback.h" #include #include #include #include #include #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); }