123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- //
- // Enter network savegame info
- //
- #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"
- char savenames[6][24];
- int saveslot;
- enum {NETS_0,NETS_1,NETS_2,NETS_3,NETS_4,NETS_5,
- NETS_DEATHNO,NETS_DEATHYES,
- NETS_SOCKET,NETS_MAX};
- item_t netsaveitems[]=
- {
- {NETS_0, 29,7,24, -1,-1},
- {NETS_1, 29,8,24, -1,-1},
- {NETS_2, 29,9,24, -1,-1},
- {NETS_3, 29,10,24, -1,-1},
- {NETS_4, 29,11,24, -1,-1},
- {NETS_5, 29,12,24, -1,-1},
- {NETS_DEATHNO, 29,14,24, -1,-1},
- {NETS_DEATHYES,29,15,24, -1,-1},
- {NETS_SOCKET, 26,17,16, -1,-1}
- };
- menu_t netsavemenu=
- {
- &netsaveitems[0],
- NETS_0,
- NETS_MAX,
- 0x7f
- };
- // SAVEGAME radio group
- radio_t netslots[]=
- {
- {26,7,0},
- {26,8,1},
- {26,9,2},
- {26,10,3},
- {26,11,4},
- {26,12,5}
- };
- radiogroup_t netslotsg= { &netslots[0],6,&saveslot,15,1 };
- // DEATHMATCH radio group
- radio_t netsdeath[]=
- {
- {26,14,0},
- {26,15,1}
- };
- radiogroup_t netsdeathg= { &netsdeath[0],2,&info.deathMatch,15,1 };
- int RestoreNetwork(void)
- {
- short field;
- short key;
- int rval = 0;
- char *args[MAXARGS];
- char string[MAXARGS*2][16];
- int argcount;
- int i;
- int numplayers[6];
- int handle;
- char name[32];
- char p1,p2,p3,p4;
- char tempstring[10];
- info = netinfo; // save copy of netinfo
- SaveScreen();
- DrawPup(&netsave);
- saveslot = -1;
- memset(savenames,0,6*24);
- //
- // Read in savegame strings
- //
- textbackground(1);
- textcolor(15);
- for (i = 0;i < 6;i++)
- {
- sprintf(name,"DOOMSAV%d.DSG",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(&netsaveitems[i]);
- Pos(&netsaveitems[i]);
- cprintf("%s",savenames[i]);
- }
- //
- // Set defaults
- //
- info.networkSocket = 0;
- Clear(&netsaveitems[NETS_SOCKET]);
- Pos(&netsaveitems[NETS_SOCKET]);
- cprintf("%u",info.networkSocket);
- gotoxy(1,25);
- info.deathMatch = 0;
- DrawRadios(&netsdeathg);
- while(1)
- {
- SetupMenu(&netsavemenu);
- field = GetMenuInput();
- key = menukey;
- switch ( key )
- {
- case KEY_ESC:
- rval = -1;
- goto func_exit;
- exitandsave:
- case KEY_F10:
- if (saveslot < 0)
- {
- ErrorWindow(&netserr);
- break;
- }
- #pragma warn -cln
- if (info.networkSocket > 64000)
- #pragma warn +cln
- {
- sound(100);
- delay(6);
- nosound();
- textbackground(7);
- textcolor(0);
- gotoxy(2,25);
- #ifndef FRENCH
- cprintf("Invalid port socket value! Re-enter it.");
- #endif
- gotoxy(1,25);
- netsavemenu.startitem = NETS_SOCKET;
- break;
- }
- netinfo = info;
-
- M_SaveDefaults();
- RestoreScreen();
-
- argcount = 1;
- args[0] = "ipxsetup.exe ";
- if (cdrom)
- args[argcount++] = "-cdrom";
- args[argcount++] = "-nodes";
- sprintf(string[argcount],"%d",numplayers[saveslot]);
- args[argcount] = string[argcount];
- argcount++;
- if (netinfo.networkSocket)
- {
- args[argcount++] = "-port";
- sprintf(string[argcount],"%u",netinfo.networkSocket);
- args[argcount] = string[argcount];
- argcount++;
- }
- if (netinfo.deathMatch)
- args[argcount++] = "-deathmatch";
- 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("ipxsetup.exe",args);
- //
- // ERROR EXECing!
- //
- printf("Problem EXECing IPXSETUP for netplay. Need to be in same directory!");
- exit(0);
- case KEY_ENTER:
- switch ( field )
- {
- case NETS_0:
- case NETS_1:
- case NETS_2:
- case NETS_3:
- case NETS_4:
- case NETS_5:
- if (!savenames[field][0])
- {
- sound(1000);
- delay(12);
- nosound();
- break;
- }
- saveslot = field;
- break;
- //
- // Deathmatch
- //
- case NETS_DEATHNO: info.deathMatch = 0; break;
- case NETS_DEATHYES: info.deathMatch = 1; break;
- //
- // Network socket #
- //
- case NETS_SOCKET:
- ltoa(info.networkSocket,tempstring,10);
- key = EditLine(&netsaveitems[NETS_SOCKET],tempstring,8);
- if (key == KEY_ENTER)
- info.networkSocket = atoi(tempstring);
- textcolor(15);
- textbackground(1);
- Clear(&netsaveitems[NETS_SOCKET]);
- Pos(&netsaveitems[NETS_SOCKET]);
- cprintf("%u",info.networkSocket);
- gotoxy(1,25);
- break;
-
- default:
- break;
- }
- DrawRadios(&netslotsg);
- DrawRadios(&netsdeathg);
- break;
- }
- }
- func_exit:
- RestoreScreen();
- return ( rval );
- }
- //
- // Choose which type of netplay for SAVEGAME RESTORE
- //
- enum {NETCH_IPX,NETCH_MOD,NETCH_SER, NETCH_MAX};
- item_t netplay2items[]=
- {
- {NETCH_IPX, 27,11,26, -1,-1},
- {NETCH_MOD, 27,12,26, -1,-1},
- {NETCH_SER, 27,13,26, -1,-1}
- };
- menu_t netplay2menu=
- {
- &netplay2items[0],
- NETCH_IPX,
- NETCH_MAX,
- 0x7f
- };
- void ChooseNetrestore(void)
- {
- short key;
- short field;
- SaveScreen();
- DrawPup(&netplay2);
- while(1)
- {
- SetupMenu(&netplay2menu);
- field = GetMenuInput();
- key = menukey;
- switch(key)
- {
- case KEY_ESC:
- RestoreScreen();
- return;
- case KEY_ENTER:
- RestoreScreen();
- switch(field)
- {
- case NETCH_IPX:
- RestoreNetwork();
- break;
- case NETCH_MOD:
- RestoreModem();
- break;
- case NETCH_SER:
- RestoreSerial();
- break;
- }
- return;
- }
- }
- }
|