123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315 |
- //
- // Enter modem savegame info
- //
- #include <string.h>
- #include <process.h>
- #include <stdio.h>
- #include <dos.h>
- #include <conio.h>
- #include <mem.h>
- #include <stdlib.h>
- #include <fcntl.h>
- #include <io.h>
- #include "main.h"
- #include "default.h"
- enum {MODS_0,MODS_1,MODS_2,MODS_3,MODS_4,MODS_5,
- MODS_DEATHNO,MODS_DEATHYES,
- MODS_COM1,MODS_COM2,MODS_COM3,MODS_COM4,
- MODS_CONN1,MODS_CONN2,MODS_CONN3,
- MODS_MAX};
- item_t modsaveitems[]=
- {
- {MODS_0, 29,4,24, -1,-1},
- {MODS_1, 29,5,24, -1,-1},
- {MODS_2, 29,6,24, -1,-1},
- {MODS_3, 29,7,24, -1,-1},
- {MODS_4, 29,8,24, -1,-1},
- {MODS_5, 29,9,24, -1,-1},
- {MODS_DEATHNO, 29,11,24, -1,-1},
- {MODS_DEATHYES,29,12,24, -1,-1},
- {MODS_COM1, 29,14,4, -1,MODS_COM3},
- {MODS_COM2, 29,15,4, -1,MODS_COM4,0,MODS_CONN1},
- {MODS_COM3, 46,14,4, MODS_COM1,-1,MODS_DEATHYES},
- {MODS_COM4, 46,15,4, MODS_COM2,-1},
- {MODS_CONN1, 29,17,20, -1,-1,MODS_COM2},
- {MODS_CONN2, 29,18,20, -1,-1},
- {MODS_CONN3, 29,19,7, -1,-1}
- };
- menu_t modsavemenu=
- {
- &modsaveitems[0],
- MODS_0,
- MODS_MAX,
- 0x7f
- };
- // SAVEGAME radio group
- radio_t modslots[]=
- {
- {26,4,0},
- {26,5,1},
- {26,6,2},
- {26,7,3},
- {26,8,4},
- {26,9,5}
- };
- radiogroup_t modslotsg= { &modslots[0],6,&saveslot,15,1 };
- // DEATHMATCH radio group
- radio_t modsdeath[]=
- {
- {26,11,0},
- {26,12,1}
- };
- radiogroup_t modsdeathg= { &modsdeath[0],2,&minfo.deathMatch,15,1 };
- // COMPORT radio group
- radio_t modscom[]=
- {
- {26,14,1},
- {26,15,2},
- {43,14,3},
- {43,15,4}
- };
- radiogroup_t modscomg= { &modscom[0],4,&minfo.comport,15,1 };
- // CONNECT TYPE radio group
- radio_t modsconn[]=
- {
- {26,17,0},
- {26,18,1},
- {26,19,2}
- };
- radiogroup_t modsconng= { &modsconn[0],3,&minfo.comtype,15,1 };
- int RestoreModem(void)
- {
- short field;
- short key;
- int rval = 0;
- char *args[MAXARGS];
- int argcount;
- char string[MAXARGS*2][16];
- int i;
- int numplayers[6];
- int handle;
- char name[32];
- char p1,p2,p3,p4;
- item_t phonenum = {2,37,19,13,-1,-1};
- char tempstring[16];
- minfo = modeminfo; // save copy of netinfo
- SaveScreen();
- DrawPup(&modsave);
- 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(&modsaveitems[i]);
- Pos(&modsaveitems[i]);
- cprintf("%s",savenames[i]);
- }
-
- //
- // Set defaults
- //
- minfo.comtype = 1;
- DrawRadios(&modsconng);
- minfo.comport = comport;
- DrawRadios(&modscomg);
-
- minfo.deathMatch = 0;
- DrawRadios(&modsdeathg);
- strcpy(minfo.phonenum,"");
- gotoxy(1,25);
- while(1)
- {
- SetupMenu(&modsavemenu);
- field = GetMenuInput();
- key = menukey;
- switch ( key )
- {
- case KEY_ESC:
- rval = -1;
- goto func_exit;
-
- exitandsave:
- case KEY_F10:
- if (saveslot < 0)
- {
- ErrorWindow(&netserr);
- break;
- }
- modeminfo = minfo;
- 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",modeminfo.comport);
- args[argcount] = string[argcount];
- argcount++;
-
- switch(modeminfo.comtype)
- {
- case 0: // no parameter if already connected!
- break;
- case 1:
- args[argcount++] = "-answer";
- break;
- case 2:
- args[argcount++] = "-dial";
- sprintf(string[argcount],"%s",minfo.phonenum);
- args[argcount] = string[argcount];
- argcount++;
- break;
- }
- 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_F2:
- if (ChooseOpponentInList())
- {
- strcpy(minfo.phonenum,chosenPhoneNum);
- textcolor(15);
- textbackground(0);
- Clear(&phonenum);
- Pos(&phonenum);
- cprintf("%s",minfo.phonenum);
- minfo.comtype = 2;
- DrawRadios(&modsconng);
- gotoxy(1,25);
- }
- break;
- case KEY_ENTER:
- switch ( field )
- {
- case MODS_COM1:
- case MODS_COM2:
- case MODS_COM3:
- case MODS_COM4:
- minfo.comport = field - MODS_COM1 + 1;
- DrawRadios(&modscomg);
- break;
- case MODS_CONN1:
- case MODS_CONN2:
- minfo.comtype = field - MODS_CONN1;
- DrawRadios(&modsconng);
- break;
- case MODS_CONN3:
- minfo.comtype = 2;
- DrawRadios(&modsconng);
- key = EditLine(&phonenum,tempstring,12);
- if (key == KEY_ENTER)
- strcpy(minfo.phonenum,tempstring);
- gotoxy(1,25);
- break;
- case MODS_0:
- case MODS_1:
- case MODS_2:
- case MODS_3:
- case MODS_4:
- case MODS_5:
- if (!savenames[field - MODS_0][0])
- {
- sound(1000);
- delay(12);
- nosound();
- break;
- }
- saveslot = field - MODS_0;
- DrawRadios(&modslotsg);
- break;
- //
- // Deathmatch
- //
- case MODS_DEATHNO:
- case MODS_DEATHYES:
- minfo.deathMatch = field - MODS_DEATHNO;
- DrawRadios(&modsdeathg);
- break;
- default:
- break;
- }
- break;
- }
- }
-
- func_exit:
-
- RestoreScreen();
- return ( rval );
- }
|