// // Enter serial-link savegame info // #include #include #include #include #include #include #include #include #include #include "main.h" #include "default.h" enum {SERS_0,SERS_1,SERS_2,SERS_3,SERS_4,SERS_5, SERS_DEATHNO,SERS_DEATHYES, SERS_COM1,SERS_COM2,SERS_COM3,SERS_COM4, SERS_MAX}; item_t sersaveitems[]= { {SERS_0, 29,6,24, -1,-1}, {SERS_1, 29,7,24, -1,-1}, {SERS_2, 29,8,24, -1,-1}, {SERS_3, 29,9,24, -1,-1}, {SERS_4, 29,10,24, -1,-1}, {SERS_5, 29,11,24, -1,-1}, {SERS_DEATHNO, 29,13,24, -1,-1}, {SERS_DEATHYES,29,14,24, -1,-1}, {SERS_COM1, 29,16,4, -1,SERS_COM3}, {SERS_COM2, 29,17,4, -1,SERS_COM4}, {SERS_COM3, 46,16,4, SERS_COM1,-1,SERS_DEATHYES}, {SERS_COM4, 46,17,4, SERS_COM2,-1} }; menu_t sersavemenu= { &sersaveitems[0], SERS_0, SERS_MAX, 0x7f }; // SAVEGAME radio group radio_t serslots[]= { {26,6,0}, {26,7,1}, {26,8,2}, {26,9,3}, {26,10,4}, {26,11,5} }; radiogroup_t serslotsg= { &serslots[0],6,&saveslot,15,1 }; // DEATHMATCH radio group radio_t sersdeath[]= { {26,13,0}, {26,14,1} }; radiogroup_t sersdeathg= { &sersdeath[0],2,&sinfo.deathMatch,15,1 }; // COMPORT radio group radio_t serscom[]= { {26,16,1}, {26,17,2}, {43,16,3}, {43,17,4} }; radiogroup_t serscomg= { &serscom[0],4,&sinfo.comport,15,1 }; int RestoreSerial(void) { short field; short key; int rval = 0; char *args[MAXARGS]; int argcount; char string[MAXARGS*2][16]; int i; int numplayers[6]; int saveslot; int handle; char name[32]; char p1,p2,p3,p4; sinfo = serialinfo; // save copy of netinfo SaveScreen(); DrawPup(&sersave); saveslot = -1; memset(savenames,0,6*24); // // Read in savegame strings // textbackground(1); textcolor(15); for (i = 0;i < 6;i++) { sprintf(name,SAVENAME,i); handle = open (name, O_BINARY | O_RDONLY); if (handle == -1) continue; read(handle,savenames[i],24); lseek(handle,27+16,SEEK_SET); read(handle,&p1,1); read(handle,&p2,1); read(handle,&p3,1); read(handle,&p4,1); numplayers[i] = p1+p2+p3+p4; close(handle); Clear(&sersaveitems[i]); Pos(&sersaveitems[i]); cprintf("%s",savenames[i]); } // // Set defaults // sinfo.comport = comport; DrawRadios(&serscomg); sinfo.deathMatch = 0; DrawRadios(&sersdeathg); while(1) { SetupMenu(&sersavemenu); field = GetMenuInput(); key = menukey; switch ( key ) { case KEY_ESC: rval = -1; goto func_exit; exitandsave: case KEY_F10: if (saveslot < 0) { ErrorWindow(&netserr); break; } serialinfo = sinfo; M_SaveDefaults(); RestoreScreen(); argcount = 1; args[0] = "sersetup.exe "; if (cdrom) args[argcount++] = "-cdrom"; args[argcount++] = "-nodes"; sprintf(string[argcount],"%d",numplayers[saveslot]); args[argcount] = string[argcount]; argcount++; if (modeminfo.deathMatch) args[argcount++] = "-deathmatch"; sprintf(string[argcount],"-com%d",serialinfo.comport); args[argcount] = string[argcount]; argcount++; args[argcount++] = "-loadgame"; sprintf(string[argcount],"%d",saveslot); args[argcount] = string[argcount]; argcount++; for (i = 1;i < myargc; i++) args[argcount++] = myargv[i]; args[argcount] = NULL; textbackground(0); textcolor(7); clrscr(); execv("sersetup.exe",args); // // ERROR EXECing! // printf("Problem EXECing SERSETUP for netplay. Need to be in same directory!"); exit(0); case KEY_ENTER: switch ( field ) { case SERS_COM1: case SERS_COM2: case SERS_COM3: case SERS_COM4: sinfo.comport = field - SERS_COM1 + 1; DrawRadios(&serscomg); break; case SERS_0: case SERS_1: case SERS_2: case SERS_3: case SERS_4: case SERS_5: if (!savenames[field - SERS_0][0]) { Sound(1000,12); break; } saveslot = field - SERS_0; DrawRadios(&serslotsg); break; // // Deathmatch // case SERS_DEATHNO: case SERS_DEATHYES: sinfo.deathMatch = field - SERS_DEATHNO; DrawRadios(&sersdeathg); default: break; } break; } } func_exit: RestoreScreen(); return ( rval ); }