home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
D!Zone (Collector's Edition)
/
D_ZONE_CD.ISO
/
programs
/
editors
/
serial28
/
source.exe
/
DOOMNET.C
next >
Wrap
C/C++ Source or Header
|
1994-02-13
|
2KB
|
112 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <process.h>
#include <dos.h>
#include "doomnet.h"
doomcom_t doomcom;
int vectorishooked;
void interrupt (*olddoomvect) (void);
/*
=================
=
= CheckParm
=
= Checks for the given parameter in the program's command line arguments
=
= Returns the argument number (1 to argc-1) or 0 if not present
=
=================
*/
int CheckParm (char *check)
{
int i;
for (i = 1;i<_argc;i++)
if ( !stricmp(check,_argv[i]) )
return i;
return 0;
}
/*
=============
=
= LaunchDOOM
=
These fields in doomcom should be filled in before calling:
short numnodes; // console is allways node 0
short ticdup; // 1 = no duplication, 2-5 = dup for slow nets
short extratics; // 1 = send a backup tic in every packet
short consoleplayer; // 0-3 = player number
short numplayers; // 1-4
short angleoffset; // 1 = left, 0 = center, -1 = right
short drone; // 1 = drone
=============
*/
void LaunchDOOM (void)
{
char *newargs[99];
char adrstring[10];
long flatadr;
int p;
unsigned char far *vector;
// prepare for DOOM
doomcom.id = DOOMCOM_ID;
// hook an interrupt vector
p= CheckParm ("-vector");
if (p)
{
doomcom.intnum = sscanf ("0x%x",_argv[p+1]);
}
else
{
for (doomcom.intnum = 0x60 ; doomcom.intnum <= 0x66 ; doomcom.intnum++)
{
vector = *(char far * far *)(doomcom.intnum*4);
if ( !vector || *vector == 0xcf )
break;
}
if (doomcom.intnum == 0x67)
{
printf ("Warning: no NULL or iret interrupt vectors were found in the 0x60 to 0x66\n"
"range. You can specify a vector with the -vector 0x<num> parameter.\n");
doomcom.intnum = 0x66;
}
}
printf ("Communicating with interupt vector 0x%x\n",doomcom.intnum);
olddoomvect = getvect (doomcom.intnum);
setvect (doomcom.intnum,NetISR);
vectorishooked = 1;
// build the argument list for DOOM, adding a -net &doomcom
memcpy (newargs, _argv, (_argc+1)*2);
newargs[_argc] = "-net";
flatadr = (long)_DS*16 + (unsigned)&doomcom;
sprintf (adrstring,"%lu",flatadr);
newargs[_argc+1] = adrstring;
newargs[_argc+2] = NULL;
// spawnv (P_WAIT, "m:\\newdoom\\doom", newargs);
spawnv (P_WAIT, "doom", newargs);
printf ("Returned from DOOM\n");
}