The source of the setup program included with DOOM, Final DOOM, Strife, etc.

This commit is contained in:
Travis Bradshaw
2012-01-31 15:35:30 -06:00
commit b126e26499
608 changed files with 18133 additions and 0 deletions

1149
CONFIG.BAK Normal file

File diff suppressed because it is too large Load Diff

1149
CONFIG.C Normal file

File diff suppressed because it is too large Load Diff

1149
CONFIG.C~ Normal file

File diff suppressed because it is too large Load Diff

BIN
CONFIG.OBJ Normal file

Binary file not shown.

85
CONTROL.BAK Normal file
View File

@@ -0,0 +1,85 @@
//
// Choose which type of controller to use
//
enum {CON_MOUSE,CON_JOY,CON_KEY,CON_MAX};
item_t controlitems[]=
{
{CON_MOUSE, 26,11,28, -1,-1},
{CON_JOY, 26,12,28, -1,-1},
{CON_KEY, 26,13,28, -1,-1}
};
menu_t controlmenu=
{
&controlitems[0],
CON_MOUSE,
CON_MAX,
0x7f
};
int ChooseController (void)
{
short key;
short field;
int rval = 0;
SaveScreen();
DrawPup(&control);
// DEFAULT FIELD ========================================
if (newc.control == C_MOUSE)
field = CON_MOUSE;
else
if (newc.control == C_JOYSTICK)
field = CON_JOY;
else
field = CON_KEY;
controlmenu.startitem = field;
while(1)
{
SetupMenu(&controlmenu);
field = GetMenuInput();
key = menukey;
switch ( key )
{
case KEY_ESC:
rval = -1;
goto func_exit;
case KEY_ENTER:
case KEY_F10:
switch ( field )
{
case CON_KEY:
newc.control = C_KEY;
usemouse = 0;
usejoystick = 0;
goto func_exit;
case CON_MOUSE:
newc.control = C_MOUSE;
usemouse = 1;
usejoystick = 0;
goto func_exit;
case CON_JOY:
newc.control = C_JOYSTICK;
usemouse = 0;
usejoystick = 1;
goto func_exit;
default:
break;
}
break;
}
}
func_exit:
RestoreScreen();
DrawCurrentConfig();
return ( rval );
}

87
CONTROL.C Normal file
View File

@@ -0,0 +1,87 @@
//
// Choose which type of controller to use
//
#include "main.h"
enum {CON_MOUSE,CON_JOY,CON_KEY,CON_MAX};
item_t controlitems[]=
{
{CON_MOUSE, 26,11,28, -1,-1},
{CON_JOY, 26,12,28, -1,-1},
{CON_KEY, 26,13,28, -1,-1}
};
menu_t controlmenu=
{
&controlitems[0],
CON_MOUSE,
CON_MAX,
0x7f
};
int ChooseController (void)
{
short key;
short field;
int rval = 0;
SaveScreen();
DrawPup(&control);
// DEFAULT FIELD ========================================
if (newc.control == C_MOUSE)
field = CON_MOUSE;
else
if (newc.control == C_JOYSTICK)
field = CON_JOY;
else
field = CON_KEY;
controlmenu.startitem = field;
while(1)
{
SetupMenu(&controlmenu);
field = GetMenuInput();
key = menukey;
switch ( key )
{
case KEY_ESC:
rval = -1;
goto func_exit;
case KEY_ENTER:
case KEY_F10:
switch ( field )
{
case CON_KEY:
newc.control = C_KEY;
usemouse = 0;
usejoystick = 0;
goto func_exit;
case CON_MOUSE:
newc.control = C_MOUSE;
usemouse = 1;
usejoystick = 0;
goto func_exit;
case CON_JOY:
newc.control = C_JOYSTICK;
usemouse = 0;
usejoystick = 1;
goto func_exit;
default:
break;
}
break;
}
}
func_exit:
RestoreScreen();
DrawCurrentConfig();
return ( rval );
}

BIN
CONTROL.OBJ Normal file

Binary file not shown.

57
DEBUG.BAK Normal file
View File

@@ -0,0 +1,57 @@
#include <stdlib.h>
#include <conio.h>
#include "setup.h"
#ifdef DEBUG
pup_t far *puplist[]=
{
&askpres,
&cmodem,
&consel,
&control,
&cserial,
&cwarp,
&gusirqer,
&idcard,
&idjoysel,
&idkeysel,
&idmain2,
&idmousel,
&irqerr,
&macros,
&mcard,
&midiport,
&modemchs,
&modsave,
&mousentr,
&mouspres,
&netplay,
&netplay2,
&netsave,
&netserr,
&netwk2,
&numdig,
&phonelst,
&quitwin,
&sbdma,
&sbirq,
&sbport,
&sersave,
&show,
&sockerr,
&title,
NULL
};
void ShowAllPups(void)
{
int i;
i = 0;
while(puplist[i])
{
DrawPup(puplist[i++]);
getch();
}
}
#endif

57
DEBUG.C Normal file
View File

@@ -0,0 +1,57 @@
#include <stdlib.h>
#include <conio.h>
#include "setup.h"
#ifdef DEBUG
pup_t far *puplist[]=
{
&askpres,
&cmodem,
&consel,
&control,
&cserial,
&cwarp,
&gusirqer,
&idcard,
&idjoysel,
&idkeysel,
&idmain2,
&idmousel,
&irqerr,
&macros,
&mcard,
&midiport,
&modemchs,
&modsave,
&mousentr,
&mouspres,
&netplay,
&netplay2,
&netsave,
&netserr,
&netwk2,
&numdig,
&phonelst,
&quitwin,
&sbdma,
&sbirq,
&sbport,
&sersave,
&show,
&sockerr,
&title,
NULL
};
void ShowAllPups(void)
{
int i;
i = 0;
while(puplist[i])
{
DrawPup(puplist[i++]);
getch();
}
}
#endif

BIN
DEBUG.OBJ Normal file

Binary file not shown.

262
DEFAULT.BAK Normal file
View File

@@ -0,0 +1,262 @@
//
// Save & Load defaults
//
#include <dir.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <bios.h>
#include "default.h"
#include "keys.h"
#include "main.h"
int usemouse;
int usejoystick;
extern net_t netinfo;
extern DMXINFO newc;
extern CONTS curk;
int mouseSensitivity = 4;
int showMessages = 1;
int sfxVolume = 15;
int musicVolume = 15;
int detailLevel = 1;
int screenblocks = 10;
int usegamma = 0;
int comport = 1;
char chatmacros[10][40];
default_t defaults[] =
{
{"mouse_sensitivity",&mouseSensitivity, 5},
{"sfx_volume",&sfxVolume, 8},
{"music_volume",&musicVolume, 8},
{"show_messages",&showMessages, 1},
{"key_right",&curk.right, SC_RIGHT },
{"key_left",&curk.left, SC_LEFT },
{"key_up",&curk.up, SC_UP },
{"key_down",&curk.down, SC_DOWN },
{"key_strafeleft",&curk.key3, SC_COMMA },
{"key_straferight",&curk.key4, SC_PERIOD },
{"key_fire",&curk.fire, SC_CTRL },
{"key_use",&curk.use, SC_SPACE },
{"key_strafe",&curk.key1, SC_ALT },
{"key_speed",&curk.key2, SC_RIGHT_SHIFT },
#ifdef HERETIC
{"key_flydown",&curk.flydown,SC_INSERT},
{"key_flycenter",&curk.flycenter,SC_HOME},
{"key_flyup",&curk.flyup,SC_PAGEUP},
{"key_lookdown",&curk.lookdown,SC_DELETE},
{"key_lookcenter",&curk.lookcenter,SC_END},
{"key_lookup",&curk.lookup,SC_PAGEDN},
{"key_invleft",&curk.invleft,0x1a},
{"key_invright",&curk.invright,0x1b},
#endif
#ifdef STRIFE
{"key_lookdown",&curk.lookdown, SC_PAGEDN},
{"key_lookup",&curk.lookup,SC_PAGEUP},
{"key_invleft",&curk.invleft,SC_INSERT},
{"key_invright",&curk.invright,SC_DELETE},
{"key_useHealth",&curk.healthuse,SC_H},
{"key_invUse",&curk.invuse,SC_ENTER},
{"key_invDrop",&curk.invdrop,SC_BACKSPACE},
{"key_invHome",&curk.invhome,SC_HOME},
{"key_invEnd",&curk.invend,SC_END},
{"key_invPop",&curk.invpop,SC_Z},
{"key_invquery",&curk.invquery,SC_Q},
{"key_jump",&curk.jump,SC_A},
#endif
{"use_mouse",&usemouse, 1 },
{"mouseb_fire",&curk.mouse[ID_FIRE],ID_FIRE },
{"mouseb_strafe",&curk.mouse[ID_STRAFE],ID_STRAFE },
{"mouseb_forward",&curk.mouse[ID_FORWARD],ID_FORWARD },
{"use_joystick",&usejoystick, 0},
{"joyb_fire",&curk.joy[ID_FIRE],ID_FIRE},
{"joyb_strafe",&curk.joy[ID_STRAFE],ID_STRAFE},
{"joyb_use",&curk.joy[ID_USE],ID_USE},
{"joyb_speed",&curk.joy[ID_FORWARD],ID_FORWARD},
{"screenblocks",&screenblocks, 9},
{"detaillevel",&detailLevel, 0},
{"showmessages",&showMessages, 1 },
{"comport",&comport, 1 },
{"snd_channels", (int *)&newc.numdig, 3 },
{"snd_musicdevice", (int *)&newc.m.card, 0 },
{"snd_sfxdevice", (int *)&newc.d.card, 0 },
{"snd_sbport", (int *)&newc.m.port, 0x220 },
{"snd_sbirq", (int *)&newc.d.irq, 5 },
{"snd_sbdma", (int *)&newc.d.dma, 1 },
{"snd_mport", (int *)&newc.m.midiport, 0x330 },
{"usegamma", &usegamma, 0 },
{"chatmacro0",(int *)chatmacros[0],0},
{"chatmacro1",(int *)chatmacros[1],0},
{"chatmacro2",(int *)chatmacros[2],0},
{"chatmacro3",(int *)chatmacros[3],0},
{"chatmacro4",(int *)chatmacros[4],0},
{"chatmacro5",(int *)chatmacros[5],0},
{"chatmacro6",(int *)chatmacros[6],0},
{"chatmacro7",(int *)chatmacros[7],0},
{"chatmacro8",(int *)chatmacros[8],0},
{"chatmacro9",(int *)chatmacros[9],0},
{"",NULL,0},
};
int numdefaults;
char * defaultfile;
/*
==============
=
= M_SaveDefaults
=
==============
*/
void M_SaveDefaults (void)
{
int i;
FILE * f;
if ( newc.m.port == -1 )
{
if ( newc.d.port == -1 )
newc.m.port = 0x220;
else
newc.m.port = newc.d.port;
}
if ( newc.control != C_KEY )
{
if ( newc.control == C_MOUSE )
usemouse = 1;
if ( newc.control == C_JOYSTICK )
usejoystick = 1;
}
numdefaults = sizeof(defaults)/sizeof(default_t);
f = fopen (defaultfile, "w");
if (!f)
return; // can't write the file, but don't complain
for (i=0 ; i<numdefaults ; i++)
if (!strncmp(defaults[i].name,"chatmacro",9))
{
int v = defaults[i].name[9] - '0';
fprintf (f,"%s\t\t\"%s\"\n",defaults[i].name, chatmacros[v]);
}
else
fprintf (f,"%s\t\t%i\n",defaults[i].name, *defaults[i].location);
fclose (f);
}
int CheckParm(char *string)
{
int i;
for (i = 1;i < myargc;i++)
if (!strcmp(myargv[i],string))
return i;
return 0;
}
/*
==============
=
= M_LoadDefaults
=
==============
*/
int M_LoadDefaults (void)
{
int i;
FILE *f;
char def[80];
char strparm[50];
int parm;
char macro[40];
//
// set everything to base values
//
numdefaults = sizeof(defaults)/sizeof(defaults[0]);
for (i=0 ; i<numdefaults ; i++)
if (!strncmp(defaults[i].name,"chatmacro",9))
strcpy((char *)defaults[i].location,"no macro");
else
*defaults[i].location = defaults[i].defaultvalue;
cdrom = 0;
if (CheckParm("-cdrom"))
{
mkdir(DEFAULTPATH);
defaultfile = DEFAULTPATH"\\"DEFAULTNAME;
cdrom = 1;
}
else
defaultfile = DEFAULTNAME; // hard-coded path GONE!
i = CheckParm("-config");
if (i)
defaultfile = myargv[i+1];
//
// read the file in, overriding any set defaults
//
f = fopen (defaultfile, "r");
if (!f)
return(0); // no overrides
while (!feof(f))
{
fscanf ( f, "%79s %[^\n]", def, strparm );
macro[0] = 0;
if (!strncmp(def,"chatmacro",9))
sscanf(strparm+1,"%[^\"]",macro);
else
if (strparm[0] == '0' && strparm[1] == 'x')
sscanf(strparm+2, "%x", &parm);
else
sscanf(strparm, "%i", &parm);
for (i=0 ; i<numdefaults ; i++)
if (!strcmp(def, defaults[i].name) )
{
if (!strncmp(def,"chatmacro",9))
strcpy((char *)defaults[i].location,macro);
else
*defaults[i].location = parm;
break;
}
}
fclose (f);
newc.d.port = newc.m.port;
if ( usemouse )
newc.control = C_MOUSE;
else if ( usejoystick )
newc.control = C_JOYSTICK;
else
newc.control = C_KEY;
return(1);
}

262
DEFAULT.C Normal file
View File

@@ -0,0 +1,262 @@
//
// Save & Load defaults
//
#include <dir.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <bios.h>
#include "default.h"
#include "keys.h"
#include "main.h"
int usemouse;
int usejoystick;
extern net_t netinfo;
extern DMXINFO newc;
extern CONTS curk;
int mouseSensitivity = 4;
int showMessages = 1;
int sfxVolume = 15;
int musicVolume = 15;
int detailLevel = 1;
int screenblocks = 10;
int usegamma = 0;
int comport = 1;
char chatmacros[10][40];
default_t defaults[] =
{
{"mouse_sensitivity",&mouseSensitivity, 5},
{"sfx_volume",&sfxVolume, 8},
{"music_volume",&musicVolume, 8},
{"show_messages",&showMessages, 1},
{"key_right",&curk.right, SC_RIGHT },
{"key_left",&curk.left, SC_LEFT },
{"key_up",&curk.up, SC_UP },
{"key_down",&curk.down, SC_DOWN },
{"key_strafeleft",&curk.key3, SC_COMMA },
{"key_straferight",&curk.key4, SC_PERIOD },
{"key_fire",&curk.fire, SC_CTRL },
{"key_use",&curk.use, SC_SPACE },
{"key_strafe",&curk.key1, SC_ALT },
{"key_speed",&curk.key2, SC_RIGHT_SHIFT },
#ifdef HERETIC
{"key_flydown",&curk.flydown,SC_INSERT},
{"key_flycenter",&curk.flycenter,SC_HOME},
{"key_flyup",&curk.flyup,SC_PAGEUP},
{"key_lookdown",&curk.lookdown,SC_DELETE},
{"key_lookcenter",&curk.lookcenter,SC_END},
{"key_lookup",&curk.lookup,SC_PAGEDN},
{"key_invleft",&curk.invleft,0x1a},
{"key_invright",&curk.invright,0x1b},
#endif
#ifdef STRIFE
{"key_lookdown",&curk.lookdown, SC_PAGEDN},
{"key_lookup",&curk.lookup,SC_PAGEUP},
{"key_invleft",&curk.invleft,SC_INSERT},
{"key_invright",&curk.invright,SC_DELETE},
{"key_useHealth",&curk.healthuse,SC_H},
{"key_invUse",&curk.invuse,SC_ENTER},
{"key_invDrop",&curk.invdrop,SC_BACKSPACE},
{"key_invHome",&curk.invhome,SC_HOME},
{"key_invEnd",&curk.invend,SC_END},
{"key_invPop",&curk.invpop,SC_Z},
{"key_invquery",&curk.invquery,SC_Q},
{"key_jump",&curk.jump,SC_A},
#endif
{"use_mouse",&usemouse, 1 },
{"mouseb_fire",&curk.mouse[ID_FIRE],ID_FIRE },
{"mouseb_strafe",&curk.mouse[ID_STRAFE],ID_STRAFE },
{"mouseb_forward",&curk.mouse[ID_FORWARD],ID_FORWARD },
{"use_joystick",&usejoystick, 0},
{"joyb_fire",&curk.joy[ID_FIRE],ID_FIRE},
{"joyb_strafe",&curk.joy[ID_STRAFE],ID_STRAFE},
{"joyb_use",&curk.joy[ID_USE],ID_USE},
{"joyb_speed",&curk.joy[ID_FORWARD],ID_FORWARD},
{"screenblocks",&screenblocks, 9},
{"detaillevel",&detailLevel, 0},
{"showmessages",&showMessages, 1 },
{"comport",&comport, 1 },
{"snd_channels", (int *)&newc.numdig, 3 },
{"snd_musicdevice", (int *)&newc.m.card, 0 },
{"snd_sfxdevice", (int *)&newc.d.card, 0 },
{"snd_sbport", (int *)&newc.m.port, 0x220 },
{"snd_sbirq", (int *)&newc.d.irq, 5 },
{"snd_sbdma", (int *)&newc.d.dma, 1 },
{"snd_mport", (int *)&newc.m.midiport, 0x330 },
{"usegamma", &usegamma, 0 },
{"chatmacro0",(int *)chatmacros[0],0},
{"chatmacro1",(int *)chatmacros[1],0},
{"chatmacro2",(int *)chatmacros[2],0},
{"chatmacro3",(int *)chatmacros[3],0},
{"chatmacro4",(int *)chatmacros[4],0},
{"chatmacro5",(int *)chatmacros[5],0},
{"chatmacro6",(int *)chatmacros[6],0},
{"chatmacro7",(int *)chatmacros[7],0},
{"chatmacro8",(int *)chatmacros[8],0},
{"chatmacro9",(int *)chatmacros[9],0},
{"",NULL,0},
};
int numdefaults;
char * defaultfile;
/*
==============
=
= M_SaveDefaults
=
==============
*/
void M_SaveDefaults (void)
{
int i;
FILE * f;
if ( newc.m.port == -1 )
{
if ( newc.d.port == -1 )
newc.m.port = 0x220;
else
newc.m.port = newc.d.port;
}
if ( newc.control != C_KEY )
{
if ( newc.control == C_MOUSE )
usemouse = 1;
if ( newc.control == C_JOYSTICK )
usejoystick = 1;
}
numdefaults = sizeof(defaults)/sizeof(default_t);
f = fopen (defaultfile, "w");
if (!f)
return; // can't write the file, but don't complain
for (i=0 ; i<numdefaults ; i++)
if (!strncmp(defaults[i].name,"chatmacro",9))
{
int v = defaults[i].name[9] - '0';
fprintf (f,"%s\t\t\"%s\"\n",defaults[i].name, chatmacros[v]);
}
else
fprintf (f,"%s\t\t%i\n",defaults[i].name, *defaults[i].location);
fclose (f);
}
int CheckParm(char *string)
{
int i;
for (i = 1;i < myargc;i++)
if (!strcmp(myargv[i],string))
return i;
return 0;
}
/*
==============
=
= M_LoadDefaults
=
==============
*/
int M_LoadDefaults (void)
{
int i;
FILE *f;
char def[80];
char strparm[50];
int parm;
char macro[40];
//
// set everything to base values
//
numdefaults = sizeof(defaults)/sizeof(defaults[0]);
for (i=0 ; i<numdefaults ; i++)
if (!strncmp(defaults[i].name,"chatmacro",9))
strcpy((char *)defaults[i].location,"no macro");
else
*defaults[i].location = defaults[i].defaultvalue;
cdrom = 0;
if (CheckParm("-cdrom"))
{
mkdir(DEFAULTPATH);
defaultfile = DEFAULTPATH"\\"DEFAULTNAME;
cdrom = 1;
}
else
defaultfile = DEFAULTNAME; // hard-coded path GONE!
i = CheckParm("-config");
if (i)
defaultfile = myargv[i+1];
//
// read the file in, overriding any set defaults
//
f = fopen (defaultfile, "r");
if (!f)
return(0); // no overrides
while (!feof(f))
{
fscanf ( f, "%79s %[^\n]", def, strparm );
macro[0] = 0;
if (!strncmp(def,"chatmacro",9))
sscanf(strparm+1,"%[^\"]",macro);
else
if (strparm[0] == '0' && strparm[1] == 'x')
sscanf(strparm+2, "%x", &parm);
else
sscanf(strparm, "%i", &parm);
for (i=0 ; i<numdefaults ; i++)
if (!strcmp(def, defaults[i].name) )
{
if (!strncmp(def,"chatmacro",9))
strcpy((char *)defaults[i].location,macro);
else
*defaults[i].location = parm;
break;
}
}
fclose (f);
newc.d.port = newc.m.port;
if ( usemouse )
newc.control = C_MOUSE;
else if ( usejoystick )
newc.control = C_JOYSTICK;
else
newc.control = C_KEY;
return(1);
}

46
DEFAULT.CFG Normal file
View File

@@ -0,0 +1,46 @@
mouse_sensitivity 5
sfx_volume 8
music_volume 8
show_messages 1
key_right 77
key_left 75
key_up 72
key_down 80
key_strafeleft 51
key_straferight 52
key_fire 29
key_use 57
key_strafe 56
key_speed 54
use_mouse 1
mouseb_fire 0
mouseb_strafe 1
mouseb_forward 2
use_joystick 0
joyb_fire 0
joyb_strafe 1
joyb_use 3
joyb_speed 2
screenblocks 9
detaillevel 0
showmessages 1
comport 2
snd_channels 3
snd_musicdevice 7
snd_sfxdevice 3
snd_sbport 544
snd_sbirq 5
snd_sbdma 1
snd_mport 816
usegamma 0
chatmacro0 "no macro"
chatmacro1 "no macro"
chatmacro2 "no macro"
chatmacro3 "no macro"
chatmacro4 "no macro"
chatmacro5 "no macro"
chatmacro6 "no macro"
chatmacro7 "no macro"
chatmacro8 "no macro"
chatmacro9 "no macro"
0

262
DEFAULT.C~ Normal file
View File

@@ -0,0 +1,262 @@
//
// Save & Load defaults
//
#include <dir.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <bios.h>
#include "default.h"
#include "keys.h"
#include "main.h"
int usemouse;
int usejoystick;
extern net_t netinfo;
extern DMXINFO newc;
extern CONTS curk;
int mouseSensitivity = 4;
int showMessages = 1;
int sfxVolume = 15;
int musicVolume = 15;
int detailLevel = 1;
int screenblocks = 10;
int usegamma = 0;
int comport = 1;
char chatmacros[10][40];
default_t defaults[] =
{
{"mouse_sensitivity",&mouseSensitivity, 5},
{"sfx_volume",&sfxVolume, 8},
{"music_volume",&musicVolume, 8},
{"show_messages",&showMessages, 1},
{"key_right",&curk.right, SC_RIGHT },
{"key_left",&curk.left, SC_LEFT },
{"key_up",&curk.up, SC_UP },
{"key_down",&curk.down, SC_DOWN },
{"key_strafeleft",&curk.key3, SC_COMMA },
{"key_straferight",&curk.key4, SC_PERIOD },
{"key_fire",&curk.fire, SC_CTRL },
{"key_use",&curk.use, SC_SPACE },
{"key_strafe",&curk.key1, SC_ALT },
{"key_speed",&curk.key2, SC_RIGHT_SHIFT },
#ifdef HERETIC
{"key_flydown",&curk.flydown,SC_INSERT},
{"key_flycenter",&curk.flycenter,SC_HOME},
{"key_flyup",&curk.flyup,SC_PAGEUP},
{"key_lookdown",&curk.lookdown,SC_DELETE},
{"key_lookcenter",&curk.lookcenter,SC_END},
{"key_lookup",&curk.lookup,SC_PAGEDN},
{"key_invleft",&curk.invleft,0x1a},
{"key_invright",&curk.invright,0x1b},
#endif
#ifdef STRIFE
{"key_lookdown",&curk.lookdown,SC_DELETE},
{"key_lookup",&curk.lookup,SC_PAGEDN},
{"key_invleft",&curk.invleft,0x1a},
{"key_invright",&curk.invright,0x1b},
{"key_useHealth",&curk.healthuse,SC_H},
{"key_invUse",&curk.invuse,SC_ENTER},
{"key_invDrop",&curk.invdrop,SC_HOME},
{"key_invHome",&curk.invhome,SC_HOME},
{"key_invEnd",&curk.invend,SC_END},
{"key_invPop",&curk.invpop,SC_Z},
{"key_invquery",&curk.invquery,SC_Q},
{"key_jump",&curk.jump,SC_A},
#endif
{"use_mouse",&usemouse, 1 },
{"mouseb_fire",&curk.mouse[ID_FIRE],ID_FIRE },
{"mouseb_strafe",&curk.mouse[ID_STRAFE],ID_STRAFE },
{"mouseb_forward",&curk.mouse[ID_FORWARD],ID_FORWARD },
{"use_joystick",&usejoystick, 0},
{"joyb_fire",&curk.joy[ID_FIRE],ID_FIRE},
{"joyb_strafe",&curk.joy[ID_STRAFE],ID_STRAFE},
{"joyb_use",&curk.joy[ID_USE],ID_USE},
{"joyb_speed",&curk.joy[ID_FORWARD],ID_FORWARD},
{"screenblocks",&screenblocks, 9},
{"detaillevel",&detailLevel, 0},
{"showmessages",&showMessages, 1 },
{"comport",&comport, 1 },
{"snd_channels", (int *)&newc.numdig, 3 },
{"snd_musicdevice", (int *)&newc.m.card, 0 },
{"snd_sfxdevice", (int *)&newc.d.card, 0 },
{"snd_sbport", (int *)&newc.m.port, 0x220 },
{"snd_sbirq", (int *)&newc.d.irq, 5 },
{"snd_sbdma", (int *)&newc.d.dma, 1 },
{"snd_mport", (int *)&newc.m.midiport, 0x330 },
{"usegamma", &usegamma, 0 },
{"chatmacro0",(int *)chatmacros[0],0},
{"chatmacro1",(int *)chatmacros[1],0},
{"chatmacro2",(int *)chatmacros[2],0},
{"chatmacro3",(int *)chatmacros[3],0},
{"chatmacro4",(int *)chatmacros[4],0},
{"chatmacro5",(int *)chatmacros[5],0},
{"chatmacro6",(int *)chatmacros[6],0},
{"chatmacro7",(int *)chatmacros[7],0},
{"chatmacro8",(int *)chatmacros[8],0},
{"chatmacro9",(int *)chatmacros[9],0},
{"",NULL,0},
};
int numdefaults;
char * defaultfile;
/*
==============
=
= M_SaveDefaults
=
==============
*/
void M_SaveDefaults (void)
{
int i;
FILE * f;
if ( newc.m.port == -1 )
{
if ( newc.d.port == -1 )
newc.m.port = 0x220;
else
newc.m.port = newc.d.port;
}
if ( newc.control != C_KEY )
{
if ( newc.control == C_MOUSE )
usemouse = 1;
if ( newc.control == C_JOYSTICK )
usejoystick = 1;
}
numdefaults = sizeof(defaults)/sizeof(default_t);
f = fopen (defaultfile, "w");
if (!f)
return; // can't write the file, but don't complain
for (i=0 ; i<numdefaults ; i++)
if (!strncmp(defaults[i].name,"chatmacro",9))
{
int v = defaults[i].name[9] - '0';
fprintf (f,"%s\t\t\"%s\"\n",defaults[i].name, chatmacros[v]);
}
else
fprintf (f,"%s\t\t%i\n",defaults[i].name, *defaults[i].location);
fclose (f);
}
int CheckParm(char *string)
{
int i;
for (i = 1;i < myargc;i++)
if (!strcmp(myargv[i],string))
return i;
return 0;
}
/*
==============
=
= M_LoadDefaults
=
==============
*/
int M_LoadDefaults (void)
{
int i;
FILE *f;
char def[80];
char strparm[50];
int parm;
char macro[40];
//
// set everything to base values
//
numdefaults = sizeof(defaults)/sizeof(defaults[0]);
for (i=0 ; i<numdefaults ; i++)
if (!strncmp(defaults[i].name,"chatmacro",9))
strcpy((char *)defaults[i].location,"no macro");
else
*defaults[i].location = defaults[i].defaultvalue;
cdrom = 0;
if (CheckParm("-cdrom"))
{
mkdir(DEFAULTPATH);
defaultfile = DEFAULTPATH"\\"DEFAULTNAME;
cdrom = 1;
}
else
defaultfile = DEFAULTNAME; // hard-coded path GONE!
i = CheckParm("-config");
if (i)
defaultfile = myargv[i+1];
//
// read the file in, overriding any set defaults
//
f = fopen (defaultfile, "r");
if (!f)
return(0); // no overrides
while (!feof(f))
{
fscanf ( f, "%79s %[^\n]", def, strparm );
macro[0] = 0;
if (!strncmp(def,"chatmacro",9))
sscanf(strparm+1,"%[^\"]",macro);
else
if (strparm[0] == '0' && strparm[1] == 'x')
sscanf(strparm+2, "%x", &parm);
else
sscanf(strparm, "%i", &parm);
for (i=0 ; i<numdefaults ; i++)
if (!strcmp(def, defaults[i].name) )
{
if (!strncmp(def,"chatmacro",9))
strcpy((char *)defaults[i].location,macro);
else
*defaults[i].location = parm;
break;
}
}
fclose (f);
newc.d.port = newc.m.port;
if ( usemouse )
newc.control = C_MOUSE;
else if ( usejoystick )
newc.control = C_JOYSTICK;
else
newc.control = C_KEY;
return(1);
}

13
DEFAULT.H Normal file
View File

@@ -0,0 +1,13 @@
//
// DEFAULT.H
//
typedef struct
{
char *name;
int *location;
int defaultvalue;
} default_t;
void M_SaveDefaults (void);
int CheckParm(char *string);
int M_LoadDefaults (void);

BIN
DEFAULT.OBJ Normal file

Binary file not shown.

54
HERETIC.CFG Normal file
View File

@@ -0,0 +1,54 @@
mouse_sensitivity 5
sfx_volume 8
music_volume 8
show_messages 1
key_right 77
key_left 75
key_up 72
key_down 80
key_strafeleft 51
key_straferight 52
key_fire 29
key_use 57
key_strafe 56
key_speed 54
key_flydown 82
key_flycenter 71
key_flyup 73
key_lookdown 83
key_lookcenter 79
key_lookup 81
key_invleft 26
key_invright 27
use_mouse 1
mouseb_fire 0
mouseb_strafe 1
mouseb_forward 2
use_joystick 0
joyb_fire 0
joyb_strafe 1
joyb_use 3
joyb_speed 2
screenblocks 9
detaillevel 0
showmessages 1
comport 2
snd_channels 6
snd_musicdevice 7
snd_sfxdevice 3
snd_sbport 544
snd_sbirq 5
snd_sbdma 1
snd_mport 816
usegamma 0
chatmacro0 "Fuck off, asshole!"
chatmacro1 "no macro"
chatmacro2 "no macro"
chatmacro3 "no macro"
chatmacro4 "no macro"
chatmacro5 "no macro"
chatmacro6 "no macro"
chatmacro7 "no macro"
chatmacro8 "no macro"
chatmacro9 "no macro"
0

102
KEYS.BAK Normal file
View File

@@ -0,0 +1,102 @@
// SCAN CODES
#define SC_NONE 0x0000
#define SC_BAD 0x00ff
#define SC_ESC 0x0001
#define SC_F1 0x003b
#define SC_F2 0x003c
#define SC_F3 0x003d
#define SC_F4 0x003e
#define SC_F5 0x003f
#define SC_F6 0x0040
#define SC_F7 0x0041
#define SC_F8 0x0042
#define SC_F9 0x0043
#define SC_F10 0x0044
#define SC_F11 0x0057
#define SC_F12 0x0058
#define SC_TAB 0x000f
#define SC_SLASH 0x002b
#define SC_CAPS_LOCK 0x003a
#define SC_LEFT_SHIFT 0x002a
#define SC_CTRL 0x001d
#define SC_ALT 0x0038
#define SC_SCROLL_LOCK 0x0046
#define SC_BACKSPACE 0x000e
#define SC_ENTER 0x001c
#define SC_RIGHT_SHIFT 0x0036
#define SC_RIGHT_ALT 0xe038
#define SC_RIGHT_CTRL 0xe010
#define SC_EXT_INSERT 0xe052
#define SC_EXT_DELETE 0xe053
#define SC_EXT_HOME 0xe047
#define SC_EXT_END 0xe04f
#define SC_EXT_PAGEUP 0xe049
#define SC_EXT_PAGEDN 0xe051
#define SC_EXT_UP 0xe048
#define SC_EXT_DN 0xe050
#define SC_EXT_LEFT 0xe04b
#define SC_EXT_RIGHT 0xe04d
#define SC_EXT_ENTER 0xe01c
#define SC_NUMLOCK 0x0045
#define SC_INSERT 0x0052
#define SC_DELETE 0x0053
#define SC_HOME 0x0047
#define SC_END 0x004f
#define SC_PAGEUP 0x0049
#define SC_PAGEDN 0x0051
#ifdef STRIFE
#define SC_ENTER 0x001c
#define SC_BS 0x000e
#endif
#define SC_UP 0x0048
#define SC_DOWN 0x0050
#define SC_LEFT 0x004b
#define SC_RIGHT 0x004d
#define SC_1 0x0002
#define SC_2 0x0003
#define SC_3 0x0004
#define SC_4 0x0005
#define SC_5 0x0006
#define SC_6 0x0007
#define SC_7 0x0008
#define SC_8 0x0009
#define SC_9 0x000a
#define SC_0 0x000b
#define SC_Q 0x0010
#define SC_W 0x0011
#define SC_E 0x0012
#define SC_R 0x0013
#define SC_T 0x0014
#define SC_Y 0x0015
#define SC_U 0x0016
#define SC_I 0x0017
#define SC_O 0x0018
#define SC_P 0x0019
#define SC_A 0x001e
#define SC_S 0x001f
#define SC_D 0x0020
#define SC_F 0x0021
#define SC_G 0x0022
#define SC_H 0x0023
#define SC_J 0x0024
#define SC_K 0x0025
#define SC_L 0x0026
#define SC_Z 0x002c
#define SC_X 0x002d
#define SC_C 0x002e
#define SC_V 0x002f
#define SC_B 0x0030
#define SC_N 0x0031
#define SC_M 0x0032
#define SC_SPACE 0x0039
#define SC_RELEASE 0x0080
#define SC_COMMA 0x0033
#define SC_PERIOD 0x0034
// ASCII KEYCODES
#define KEY_ESC 0x1b
#define KEY_F1 0x3b
#define KEY_F2 0x3c
#define KEY_F10 0x44
#define KEY_ENTER 0x0d


98
KEYS.H Normal file
View File

@@ -0,0 +1,98 @@
// SCAN CODES
#define SC_NONE 0x0000
#define SC_BAD 0x00ff
#define SC_ESC 0x0001
#define SC_F1 0x003b
#define SC_F2 0x003c
#define SC_F3 0x003d
#define SC_F4 0x003e
#define SC_F5 0x003f
#define SC_F6 0x0040
#define SC_F7 0x0041
#define SC_F8 0x0042
#define SC_F9 0x0043
#define SC_F10 0x0044
#define SC_F11 0x0057
#define SC_F12 0x0058
#define SC_TAB 0x000f
#define SC_SLASH 0x002b
#define SC_CAPS_LOCK 0x003a
#define SC_LEFT_SHIFT 0x002a
#define SC_CTRL 0x001d
#define SC_ALT 0x0038
#define SC_SCROLL_LOCK 0x0046
#define SC_BACKSPACE 0x000e
#define SC_ENTER 0x001c
#define SC_RIGHT_SHIFT 0x0036
#define SC_RIGHT_ALT 0xe038
#define SC_RIGHT_CTRL 0xe010
#define SC_EXT_INSERT 0xe052
#define SC_EXT_DELETE 0xe053
#define SC_EXT_HOME 0xe047
#define SC_EXT_END 0xe04f
#define SC_EXT_PAGEUP 0xe049
#define SC_EXT_PAGEDN 0xe051
#define SC_EXT_UP 0xe048
#define SC_EXT_DN 0xe050
#define SC_EXT_LEFT 0xe04b
#define SC_EXT_RIGHT 0xe04d
#define SC_EXT_ENTER 0xe01c
#define SC_NUMLOCK 0x0045
#define SC_INSERT 0x0052
#define SC_DELETE 0x0053
#define SC_HOME 0x0047
#define SC_END 0x004f
#define SC_PAGEUP 0x0049
#define SC_PAGEDN 0x0051
#define SC_UP 0x0048
#define SC_DOWN 0x0050
#define SC_LEFT 0x004b
#define SC_RIGHT 0x004d
#define SC_1 0x0002
#define SC_2 0x0003
#define SC_3 0x0004
#define SC_4 0x0005
#define SC_5 0x0006
#define SC_6 0x0007
#define SC_7 0x0008
#define SC_8 0x0009
#define SC_9 0x000a
#define SC_0 0x000b
#define SC_Q 0x0010
#define SC_W 0x0011
#define SC_E 0x0012
#define SC_R 0x0013
#define SC_T 0x0014
#define SC_Y 0x0015
#define SC_U 0x0016
#define SC_I 0x0017
#define SC_O 0x0018
#define SC_P 0x0019
#define SC_A 0x001e
#define SC_S 0x001f
#define SC_D 0x0020
#define SC_F 0x0021
#define SC_G 0x0022
#define SC_H 0x0023
#define SC_J 0x0024
#define SC_K 0x0025
#define SC_L 0x0026
#define SC_Z 0x002c
#define SC_X 0x002d
#define SC_C 0x002e
#define SC_V 0x002f
#define SC_B 0x0030
#define SC_N 0x0031
#define SC_M 0x0032
#define SC_SPACE 0x0039
#define SC_RELEASE 0x0080
#define SC_COMMA 0x0033
#define SC_PERIOD 0x0034
// ASCII KEYCODES
#define KEY_ESC 0x1b
#define KEY_F1 0x3b
#define KEY_F2 0x3c
#define KEY_F10 0x44
#define KEY_ENTER 0x0d


100
KEYS.H~ Normal file
View File

@@ -0,0 +1,100 @@
// SCAN CODES
#define SC_NONE 0x0000
#define SC_BAD 0x00ff
#define SC_ESC 0x0001
#define SC_F1 0x003b
#define SC_F2 0x003c
#define SC_F3 0x003d
#define SC_F4 0x003e
#define SC_F5 0x003f
#define SC_F6 0x0040
#define SC_F7 0x0041
#define SC_F8 0x0042
#define SC_F9 0x0043
#define SC_F10 0x0044
#define SC_F11 0x0057
#define SC_F12 0x0058
#define SC_TAB 0x000f
#define SC_SLASH 0x002b
#define SC_CAPS_LOCK 0x003a
#define SC_LEFT_SHIFT 0x002a
#define SC_CTRL 0x001d
#define SC_ALT 0x0038
#define SC_SCROLL_LOCK 0x0046
#define SC_BACKSPACE 0x000e
#define SC_ENTER 0x001c
#define SC_RIGHT_SHIFT 0x0036
#define SC_RIGHT_ALT 0xe038
#define SC_RIGHT_CTRL 0xe010
#define SC_EXT_INSERT 0xe052
#define SC_EXT_DELETE 0xe053
#define SC_EXT_HOME 0xe047
#define SC_EXT_END 0xe04f
#define SC_EXT_PAGEUP 0xe049
#define SC_EXT_PAGEDN 0xe051
#define SC_EXT_UP 0xe048
#define SC_EXT_DN 0xe050
#define SC_EXT_LEFT 0xe04b
#define SC_EXT_RIGHT 0xe04d
#define SC_EXT_ENTER 0xe01c
#define SC_NUMLOCK 0x0045
#define SC_INSERT 0x0052
#define SC_DELETE 0x0053
#define SC_HOME 0x0047
#define SC_END 0x004f
#define SC_PAGEUP 0x0049
#define SC_PAGEDN 0x0051
#define SC_ENTER 0x001c
#define SC_BS 0x000e
#define SC_UP 0x0048
#define SC_DOWN 0x0050
#define SC_LEFT 0x004b
#define SC_RIGHT 0x004d
#define SC_1 0x0002
#define SC_2 0x0003
#define SC_3 0x0004
#define SC_4 0x0005
#define SC_5 0x0006
#define SC_6 0x0007
#define SC_7 0x0008
#define SC_8 0x0009
#define SC_9 0x000a
#define SC_0 0x000b
#define SC_Q 0x0010
#define SC_W 0x0011
#define SC_E 0x0012
#define SC_R 0x0013
#define SC_T 0x0014
#define SC_Y 0x0015
#define SC_U 0x0016
#define SC_I 0x0017
#define SC_O 0x0018
#define SC_P 0x0019
#define SC_A 0x001e
#define SC_S 0x001f
#define SC_D 0x0020
#define SC_F 0x0021
#define SC_G 0x0022
#define SC_H 0x0023
#define SC_J 0x0024
#define SC_K 0x0025
#define SC_L 0x0026
#define SC_Z 0x002c
#define SC_X 0x002d
#define SC_C 0x002e
#define SC_V 0x002f
#define SC_B 0x0030
#define SC_N 0x0031
#define SC_M 0x0032
#define SC_SPACE 0x0039
#define SC_RELEASE 0x0080
#define SC_COMMA 0x0033
#define SC_PERIOD 0x0034
// ASCII KEYCODES
#define KEY_ESC 0x1b
#define KEY_F1 0x3b
#define KEY_F2 0x3c
#define KEY_F10 0x44
#define KEY_ENTER 0x0d


146
MACROS.BAK Normal file
View File

@@ -0,0 +1,146 @@
//
// Choose which type of netplay
//
#include <dos.h>
#include <conio.h>
#include <string.h>
#include "main.h"
//
// Line input routine -- totally crude!
//
int EditLine(item_t *item,char *string,int maxlen)
{
char c;
int len;
textbackground(0);
textcolor(15);
Clear(item);
Pos(item);
cprintf("%s",string);
while(1)
{
c = getch();
switch(c)
{
case 8: // BACKSPACE
case 0x4b: // LEFT ARROW
len = strlen(string);
if (!len)
{
sound(2500);
delay(3);
nosound();
continue;
}
string[len-1] = 0;
Clear(item);
Pos(item);
cprintf("%s",string);
case 77: // RIGHT ARROW
case 0x48: // UP
case 0x50: // DOWN
sound(2500);
delay(3);
nosound();
break;
case KEY_ENTER:
case KEY_ESC:
return c;
default:
if (c < 0x20 || c > 0x7a)
{
sound(2500);
delay(3);
nosound();
continue;
}
len = strlen(string);
if (len+1 == maxlen)
{
sound(2500);
delay(3);
nosound();
continue;
}
string[len] = c;
string[len+1] = 0;
Pos(item);
cprintf("%s",string);
break;
}
}
}
enum {MAC_MACRO0,MAC_MACRO1,MAC_MACRO2,MAC_MACRO3,MAC_MACRO4,MAC_MACRO5,
MAC_MACRO6,MAC_MACRO7,MAC_MACRO8,MAC_MACRO9,MAC_MAX};
item_t macrositems[]=
{
{MAC_MACRO0, 22,7,40, -1,-1},
{MAC_MACRO1, 22,8,40, -1,-1},
{MAC_MACRO2, 22,9,40, -1,-1},
{MAC_MACRO3, 22,10,40, -1,-1},
{MAC_MACRO4, 22,11,40, -1,-1},
{MAC_MACRO5, 22,12,40, -1,-1},
{MAC_MACRO6, 22,13,40, -1,-1},
{MAC_MACRO7, 22,14,40, -1,-1},
{MAC_MACRO8, 22,15,40, -1,-1},
{MAC_MACRO9, 22,16,40, -1,-1}
};
menu_t macrosmenu=
{
&macrositems[0],
MAC_MACRO0,
MAC_MAX,
0x7f
};
void MacroConfig(void)
{
short key;
short field;
int i;
char string[40];
SaveScreen();
DrawPup(&macros);
textcolor(15);
textbackground(1);
for (i = 0;i < MAC_MAX; i++)
{
Clear(&macrositems[i]);
Pos(&macrositems[i]);
cprintf("%s",&chatmacros[i][0]);
}
gotoxy(1,25);
while(1)
{
SetupMenu(&macrosmenu);
field = GetMenuInput();
key = menukey;
switch(key)
{
case KEY_ENTER:
strcpy(string,chatmacros[field]);
key = EditLine(&macrositems[field],string,40);
if (key == KEY_ENTER)
strcpy(chatmacros[field],string);
textbackground(1);
textcolor(15);
Clear(&macrositems[field]);
Pos(&macrositems[field]);
cprintf("%s",chatmacros[field]);
gotoxy(1,25);
continue;
case KEY_ESC:
RestoreScreen();
return;
}
}
};

144
MACROS.C Normal file
View File

@@ -0,0 +1,144 @@
//
// Choose which type of netplay
//
#include <dos.h>
#include <conio.h>
#include <string.h>
#include "main.h"
//
// Line input routine -- totally crude!
//
int EditLine(item_t *item,char *string,int maxlen)
{
char c;
int len;
textbackground(0);
textcolor(15);
Clear(item);
Pos(item);
cprintf("%s",string);
while(1)
{
c = getch();
switch(c)
{
case 8: // BACKSPACE
case 0x4b: // LEFT ARROW
len = strlen(string);
if (!len)
{
sound(2500);
delay(3);
nosound();
continue;
}
string[len-1] = 0;
Clear(item);
Pos(item);
cprintf("%s",string);
case 77: // RIGHT ARROW
sound(2500);
delay(3);
nosound();
break;
case KEY_ENTER:
case KEY_ESC:
return c;
default:
if (c < 0x20 || c > 0x7a)
{
sound(2500);
delay(3);
nosound();
continue;
}
len = strlen(string);
if (len+1 == maxlen)
{
sound(2500);
delay(3);
nosound();
continue;
}
string[len] = c;
string[len+1] = 0;
Pos(item);
cprintf("%s",string);
break;
}
}
}
enum {MAC_MACRO0,MAC_MACRO1,MAC_MACRO2,MAC_MACRO3,MAC_MACRO4,MAC_MACRO5,
MAC_MACRO6,MAC_MACRO7,MAC_MACRO8,MAC_MACRO9,MAC_MAX};
item_t macrositems[]=
{
{MAC_MACRO0, 22,7,40, -1,-1},
{MAC_MACRO1, 22,8,40, -1,-1},
{MAC_MACRO2, 22,9,40, -1,-1},
{MAC_MACRO3, 22,10,40, -1,-1},
{MAC_MACRO4, 22,11,40, -1,-1},
{MAC_MACRO5, 22,12,40, -1,-1},
{MAC_MACRO6, 22,13,40, -1,-1},
{MAC_MACRO7, 22,14,40, -1,-1},
{MAC_MACRO8, 22,15,40, -1,-1},
{MAC_MACRO9, 22,16,40, -1,-1}
};
menu_t macrosmenu=
{
&macrositems[0],
MAC_MACRO0,
MAC_MAX,
0x7f
};
void MacroConfig(void)
{
short key;
short field;
int i;
char string[40];
SaveScreen();
DrawPup(&macros);
textcolor(15);
textbackground(1);
for (i = 0;i < MAC_MAX; i++)
{
Clear(&macrositems[i]);
Pos(&macrositems[i]);
cprintf("%s",&chatmacros[i][0]);
}
gotoxy(1,25);
while(1)
{
SetupMenu(&macrosmenu);
field = GetMenuInput();
key = menukey;
switch(key)
{
case KEY_ENTER:
strcpy(string,chatmacros[field]);
key = EditLine(&macrositems[field],string,40);
if (key == KEY_ENTER)
strcpy(chatmacros[field],string);
textbackground(1);
textcolor(15);
Clear(&macrositems[field]);
Pos(&macrositems[field]);
cprintf("%s",chatmacros[field]);
gotoxy(1,25);
continue;
case KEY_ESC:
RestoreScreen();
return;
}
}
};

BIN
MACROS.OBJ Normal file

Binary file not shown.

581
MAIN.BAK Normal file
View File

@@ -0,0 +1,581 @@
//
// MAIN.C - Handles StartUp and the MainMenu
//
#include <process.h>
#include <io.h>
#include <dos.h>
#include <mem.h>
#include <conio.h>
#include <bios.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "main.h"
#include "default.h"
#include "scguess.h"
int cdrom; // cmd-line param flag
char keydesc[256][10];
unsigned char ASCIINames[] = // Unshifted ASCII for scan codes
{
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 ,0 ,'1','2','3','4','5','6','7','8','9','0','-','=',0 ,0 , // 0
'Q','W','E','R','T','Y','U','I','O','P','[',']',0 ,0 ,'A','S', // 1
'D','F','G','H','J','K','L',';',0, '`', 0 ,92 ,'Z','X','C','V', // 2
'B','N','M',',','.','/',0 ,'*',0 , 0, 0 ,0 ,0 ,0 ,0 ,0 , // 3
0 ,0 ,0 ,0 ,0 ,0 ,0 ,'7','8','9','-','4','5','6','+','1', // 4
'2','3','0',0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7
};
char cards[M_LAST][20] = {
S_NONE,
S_PCSP,
"Adlib",
"Sound Blaster",
"Pro Audio Spectrum",
"Gravis Ultra Sound",
"WaveBlaster",
"Roland Sound Canvas",
"General Midi",
"Sound Blaster AWE32"
};
char controls [C_LAST][20] = {
S_CON1,
S_CON2,
S_CON3
};
CONTS curk;
net_t netinfo;
net_t info; // in case ESC is pressed
serial_t modeminfo;
serial_t minfo; // in case ESC is pressed
serial_t serialinfo;
serial_t sinfo; // in case ESC is pressed
DMXINFO lastc;
DMXINFO newc;
void * swindow;
BOOL savemusic = FALSE;
BOOL savefx = FALSE;
#define KEYBOARDINT 0x9
int mousepresent = 0;
enum
{
MAIN_CMUSIC,
MAIN_CSFX,
MAIN_TYPE,
MAIN_CONFIG,
MAIN_SAVE,
MAIN_NET,
MAIN_NETSG,
MAIN_MAX
};
item_t mainitems[]=
{
{MAIN_CMUSIC, 21,12,39, -1,-1},
{MAIN_CSFX, 21,13,39, -1,-1},
{MAIN_TYPE, 21,14,39, -1,-1},
{MAIN_CONFIG, 21,15,39, -1,-1},
{MAIN_SAVE, 21,16,39, -1,-1},
{MAIN_NET, 21,18,39, -1,-1},
{MAIN_NETSG, 21,19,39, -1,-1}
};
menu_t mainmenu =
{
&mainitems[0],
MAIN_CMUSIC,
MAIN_MAX,
0x7f
};
//
// Draw a PUP and get a keypress
//
void ErrorWindow(pup_t far *pup)
{
SaveScreen();
DrawPup(pup);
while (kbhit())
getch();
while (getch() != 0x1b);
RestoreScreen();
while (kbhit())
getch();
sound(3000);
delay(10);
nosound();
}
//
// Make ASCII names/key value lookup
//
void MakeKeyLookup (void)
{
int loop;
memset ( keydesc, 0, sizeof ( keydesc ) );
for ( loop = 0; loop < 128; loop++ )
keydesc [ loop ] [ 0 ] = ASCIINames[ loop ];
strcpy ( keydesc [ SC_CAPS_LOCK ], "CAPSLOCK" );
strcpy ( keydesc [ SC_BACKSPACE ], "BACKSP" );
strcpy ( keydesc [ SC_ENTER ], "ENTER" );
strcpy ( keydesc [ SC_TAB ], "TAB" );
strcpy ( keydesc [ SC_RIGHT_SHIFT ], "RSHIFT" );
strcpy ( keydesc [ SC_SPACE ], "SPACE" );
strcpy ( keydesc [ SC_CTRL ], "CTRL" );
strcpy ( keydesc [ SC_ALT ], "ALT" );
strcpy ( keydesc [ SC_INSERT ], "INS" );
strcpy ( keydesc [ SC_DELETE ], "DEL" );
strcpy ( keydesc [ SC_PAGEUP ], "PGUP" );
strcpy ( keydesc [ SC_PAGEDN ], "PGDN" );
strcpy ( keydesc [ SC_HOME ], "HOME" );
strcpy ( keydesc [ SC_END ], "END" );
strcpy ( keydesc [ SC_UP ], "UP" );
strcpy ( keydesc [ SC_DOWN ], "DOWN" );
strcpy ( keydesc [ SC_LEFT ], "LEFT" );
strcpy ( keydesc [ SC_RIGHT ], "RIGHT" );
}
//
// Set funky blue color
//
void SetColor (void)
{
return; // DON'T DO ANYTHING UNTIL I CAN SET IT BACK!
#if 0
_asm
{
push ax
push dx
mov dx, 0x3C8
mov ax, 1
out dx, al
inc dx
mov ax, 1
out dx, al
mov ax, 5
out dx, al
mov ax, 16
out dx, al
pop dx
pop ax
}
#endif
}
//
// Draw current config info in window
// MAKE SURE NO WINDOWS ARE ON TOP!
//
void DrawCurrentConfig(void)
{
RestoreScreen();
textcolor(8);
textbackground(7);
gotoxy(43,6);
cprintf(" ");
gotoxy(43,6);
cprintf("%s",controls [ newc.control ]);
gotoxy(43,7);
cprintf(" ");
gotoxy(43,7);
cprintf("%s",cards [ newc.m.card ]);
gotoxy(43,8);
cprintf(" ");
gotoxy(43,8);
cprintf("%s",cards [ newc.d.card ]);
gotoxy(1,25);
SaveScreen();
}
//
// Quitting - save changes?
//
enum { SAVEYES, SAVENO, SAVEMAX };
item_t quitwinitems[]=
{
{SAVEYES, 35,11,7, -1,-1},
{SAVENO, 35,12,7, -1,-1}
};
menu_t quitwinmenu=
{
&quitwinitems[0],
SAVEYES,
SAVEMAX,
0x7f
};
int QuitAndSave(void)
{
short key;
short field;
SaveScreen();
DrawPup(&quitwin);
quitwinmenu.startitem = SAVEYES;
while(1)
{
SetupMenu(&quitwinmenu);
field = GetMenuInput();
key = menukey;
switch(key)
{
case KEY_ESC:
RestoreScreen();
return -1;
case KEY_ENTER:
if (field == SAVEYES)
M_SaveDefaults();
RestoreScreen();
return 0;
}
}
}
//
// Start up and initialize SETUP
//
void StartUp(void)
{
int addr;
int irq;
int dma;
int midi;
union REGS r;
r.x.ax = 0;
int86(0x33,&r,&r);
if (r.x.ax == 0xffff)
mousepresent = 1;
else
mousepresent = 0;
r.x.ax = 2;
int86(0x33, &r, &r );
SetColor();
memset ( &newc, 0, sizeof ( DMXINFO ) );
memset ( &lastc, 0, sizeof ( DMXINFO ) );
MakeKeyLookup();
midi = addr = irq = dma = 0; // WILL BE INITED LATER
curk.up = SC_UP;
curk.down = SC_DOWN;
curk.left = SC_LEFT;
curk.right = SC_RIGHT;
curk.fire = SC_CTRL;
curk.use = SC_SPACE;
curk.key1 = SC_ALT;
curk.key2 = SC_RIGHT_SHIFT;
curk.key3 = SC_COMMA;
curk.key4 = SC_PERIOD;
curk.mouse[0] = 0;
curk.mouse[1] = 1;
curk.mouse[2] = 2;
curk.joy[0] = 0;
curk.joy[1] = 1;
curk.joy[2] = 2;
curk.joy[3] = 3;
newc.m.card = M_NONE;
newc.m.port = -1;
newc.m.midiport = -1;
newc.m.irq = -1;
newc.m.dma = -1;
newc.d = newc.m;
newc.numdig = 2;
DrawPup(&title);
DrawPup(&show);
DrawPup(&idmain2);
SaveScreen();
if ( !M_LoadDefaults() )
{
//
// Auto-detect ONLY first time through
//
if ( SmellsLikeGUS ( &addr, &irq, &dma ) )
{
if (newc.m.irq > 7)
ErrorWindow(&gusirqer);
newc.m.card = M_GUS;
newc.m.port = addr;
newc.m.midiport = -1;
newc.m.irq = irq;
newc.m.dma = dma;
newc.d = newc.m;
//fprintf(stderr, "GUS: addr=%x, irq=%d, dma=%d\n", addr, irq, dma);
}
else if ( SmellsLikeSB ( &addr, &irq, &dma, &midi ) )
{
newc.m.card = M_SB;
newc.m.port = addr;
newc.m.midiport = midi;
newc.m.irq = irq;
newc.m.dma = dma;
newc.d = newc.m;
}
ChooseController();
SetupMusic();
SetupFX();
lastc.control = newc.control;
lastc.numdig = newc.numdig;
lastc.m = newc.m;
lastc.d = newc.d;
mainmenu.startitem = MAIN_SAVE;
}
else
{
lastc.control = newc.control;
lastc.numdig = newc.numdig;
lastc.m = newc.m;
lastc.d = newc.d;
if (newc.m.irq > 7)
ErrorWindow(&gusirqer);
mainmenu.startitem = MAIN_CMUSIC;
}
DrawCurrentConfig();
//
// GLOBALS
//
respawn = nomonsters = 0;
MainMenu();
clrscr();
}
//
// Main menu
//
void MainMenu (void)
{
int i;
int field;
short key;
char *args[10];
char string[10][10];
int argcount;
// ASSUME THAT THE MAIN MENU HAS BEEN DRAWN IN STARTUP
while(1)
{
SetupMenu(&mainmenu);
field = GetMenuInput();
key = menukey;
if ( key == KEY_ESC )
{
if (QuitAndSave() < 0)
continue;
break;
}
//
// WARP
//
if (key == KEY_F1)
{
int level;
int i;
level = WarpTime();
if (!level)
continue;
M_SaveDefaults();
RestoreScreen();
argcount = 1;
if (nomonsters)
args[argcount++] = "-nomonsters";
if (respawn)
args[argcount++] = "-respawn";
args[argcount++] = "-warp";
#ifdef DOOM2
sprintf(string[argcount],"%d",level);
args[argcount] = string[argcount];
#else
sprintf(string[argcount],"%d",level>>8);
args[argcount] = string[argcount];
argcount++;
sprintf(string[argcount],"%d",level&0x0f);
args[argcount] = string[argcount];
#endif
argcount++;
if (cdrom)
args[argcount++] = "-cdrom";
for (i = 1;i < myargc; i++)
args[argcount++] = myargv[i];
args[argcount] = NULL;
textbackground(0);
textcolor(7);
clrscr();
if (!access("doom2.exe",0))
{
args[0] = "doom2.exe ";
execv("doom2.exe",args);
}
else
if (!access("heretic.exe",0))
{
args[0] = "heretic.exe ";
execv("heretic.exe",args);
}
else
if (!access("strife.exe",0))
{
args[0] = "strife.exe ";
execv("strife.exe",args);
}
else
{
args[0] = "doom.exe ";
execv("doom.exe",args);
}
printf("Problem EXECing "EXENAME" for netplay. Need to be in same directory!");
//
// ERROR EXECing!
//
exit(0);
}
if ( key != KEY_ENTER && key != KEY_F10 ) continue;
switch ( field )
{
case MAIN_CMUSIC:
SetupMusic();
break;
case MAIN_CSFX:
SetupFX();
break;
case MAIN_TYPE:
ChooseController();
break;
case MAIN_CONFIG:
ConfigControl();
break;
case MAIN_SAVE:
M_SaveDefaults();
textbackground(0);
textcolor(7);
clrscr();
argcount = 1;
for (i = 1;i < myargc; i++)
args[argcount++] = myargv[i];
if (cdrom)
args[argcount++] = "-cdrom";
if (!access("heretic.exe",0))
{
args[0] = "heretic.exe";
args[argcount] = NULL;
execv("heretic.exe",args);
}
else
if (!access("strife.exe",0))
{
args[0] = "strife.exe ";
execv("strife.exe",args);
}
else
if (!access("doom2.exe",0))
{
args[0] = "doom2.exe";
args[argcount] = NULL;
execv("doom2.exe",args);
}
else
{
args[0] = "doom.exe ";
args[argcount] = NULL;
execv("doom.exe",args);
}
printf("Problem EXECing "EXENAME"! Probably not in same directory!\n");
exit(0);
goto func_exit;
case MAIN_NET:
ChooseNetplay();
break;
case MAIN_NETSG:
#ifndef STRIFE
ChooseNetrestore();
#endif
break;
default:
break;
}
}
func_exit:
textbackground(0);
textcolor(7);
clrscr();
return;
}

581
MAIN.C Normal file
View File

@@ -0,0 +1,581 @@
//
// MAIN.C - Handles StartUp and the MainMenu
//
#include <process.h>
#include <io.h>
#include <dos.h>
#include <mem.h>
#include <conio.h>
#include <bios.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "main.h"
#include "default.h"
#include "scguess.h"
int cdrom; // cmd-line param flag
char keydesc[256][10];
unsigned char ASCIINames[] = // Unshifted ASCII for scan codes
{
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 ,0 ,'1','2','3','4','5','6','7','8','9','0','-','=',0 ,0 , // 0
'Q','W','E','R','T','Y','U','I','O','P','[',']',0 ,0 ,'A','S', // 1
'D','F','G','H','J','K','L',';',0, '`', 0 ,92 ,'Z','X','C','V', // 2
'B','N','M',',','.','/',0 ,'*',0 , 0, 0 ,0 ,0 ,0 ,0 ,0 , // 3
0 ,0 ,0 ,0 ,0 ,0 ,0 ,'7','8','9','-','4','5','6','+','1', // 4
'2','3','0',0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7
};
char cards[M_LAST][20] = {
S_NONE,
S_PCSP,
"Adlib",
"Sound Blaster",
"Pro Audio Spectrum",
"Gravis Ultra Sound",
"WaveBlaster",
"Roland Sound Canvas",
"General Midi",
"Sound Blaster AWE32"
};
char controls [C_LAST][20] = {
S_CON1,
S_CON2,
S_CON3
};
CONTS curk;
net_t netinfo;
net_t info; // in case ESC is pressed
serial_t modeminfo;
serial_t minfo; // in case ESC is pressed
serial_t serialinfo;
serial_t sinfo; // in case ESC is pressed
DMXINFO lastc;
DMXINFO newc;
void * swindow;
BOOL savemusic = FALSE;
BOOL savefx = FALSE;
#define KEYBOARDINT 0x9
int mousepresent = 0;
enum
{
MAIN_CMUSIC,
MAIN_CSFX,
MAIN_TYPE,
MAIN_CONFIG,
MAIN_SAVE,
MAIN_NET,
MAIN_NETSG,
MAIN_MAX
};
item_t mainitems[]=
{
{MAIN_CMUSIC, 21,12,39, -1,-1},
{MAIN_CSFX, 21,13,39, -1,-1},
{MAIN_TYPE, 21,14,39, -1,-1},
{MAIN_CONFIG, 21,15,39, -1,-1},
{MAIN_SAVE, 21,16,39, -1,-1},
{MAIN_NET, 21,18,39, -1,-1},
{MAIN_NETSG, 21,19,39, -1,-1}
};
menu_t mainmenu =
{
&mainitems[0],
MAIN_CMUSIC,
MAIN_MAX,
0x7f
};
//
// Draw a PUP and get a keypress
//
void ErrorWindow(pup_t far *pup)
{
SaveScreen();
DrawPup(pup);
while (kbhit())
getch();
while (getch() != 0x1b);
RestoreScreen();
while (kbhit())
getch();
sound(3000);
delay(10);
nosound();
}
//
// Make ASCII names/key value lookup
//
void MakeKeyLookup (void)
{
int loop;
memset ( keydesc, 0, sizeof ( keydesc ) );
for ( loop = 0; loop < 128; loop++ )
keydesc [ loop ] [ 0 ] = ASCIINames[ loop ];
strcpy ( keydesc [ SC_CAPS_LOCK ], "CAPSLOCK" );
strcpy ( keydesc [ SC_BACKSPACE ], "BACKSP" );
strcpy ( keydesc [ SC_ENTER ], "ENTER" );
strcpy ( keydesc [ SC_TAB ], "TAB" );
strcpy ( keydesc [ SC_RIGHT_SHIFT ], "RSHIFT" );
strcpy ( keydesc [ SC_SPACE ], "SPACE" );
strcpy ( keydesc [ SC_CTRL ], "CTRL" );
strcpy ( keydesc [ SC_ALT ], "ALT" );
strcpy ( keydesc [ SC_INSERT ], "INS" );
strcpy ( keydesc [ SC_DELETE ], "DEL" );
strcpy ( keydesc [ SC_PAGEUP ], "PGUP" );
strcpy ( keydesc [ SC_PAGEDN ], "PGDN" );
strcpy ( keydesc [ SC_HOME ], "HOME" );
strcpy ( keydesc [ SC_END ], "END" );
strcpy ( keydesc [ SC_UP ], "UP" );
strcpy ( keydesc [ SC_DOWN ], "DOWN" );
strcpy ( keydesc [ SC_LEFT ], "LEFT" );
strcpy ( keydesc [ SC_RIGHT ], "RIGHT" );
}
//
// Set funky blue color
//
void SetColor (void)
{
return; // DON'T DO ANYTHING UNTIL I CAN SET IT BACK!
#if 0
_asm
{
push ax
push dx
mov dx, 0x3C8
mov ax, 1
out dx, al
inc dx
mov ax, 1
out dx, al
mov ax, 5
out dx, al
mov ax, 16
out dx, al
pop dx
pop ax
}
#endif
}
//
// Draw current config info in window
// MAKE SURE NO WINDOWS ARE ON TOP!
//
void DrawCurrentConfig(void)
{
RestoreScreen();
textcolor(8);
textbackground(7);
gotoxy(43,6);
cprintf(" ");
gotoxy(43,6);
cprintf("%s",controls [ newc.control ]);
gotoxy(43,7);
cprintf(" ");
gotoxy(43,7);
cprintf("%s",cards [ newc.m.card ]);
gotoxy(43,8);
cprintf(" ");
gotoxy(43,8);
cprintf("%s",cards [ newc.d.card ]);
gotoxy(1,25);
SaveScreen();
}
//
// Quitting - save changes?
//
enum { SAVEYES, SAVENO, SAVEMAX };
item_t quitwinitems[]=
{
{SAVEYES, 35,11,7, -1,-1},
{SAVENO, 35,12,7, -1,-1}
};
menu_t quitwinmenu=
{
&quitwinitems[0],
SAVEYES,
SAVEMAX,
0x7f
};
int QuitAndSave(void)
{
short key;
short field;
SaveScreen();
DrawPup(&quitwin);
quitwinmenu.startitem = SAVEYES;
while(1)
{
SetupMenu(&quitwinmenu);
field = GetMenuInput();
key = menukey;
switch(key)
{
case KEY_ESC:
RestoreScreen();
return -1;
case KEY_ENTER:
if (field == SAVEYES)
M_SaveDefaults();
RestoreScreen();
return 0;
}
}
}
//
// Start up and initialize SETUP
//
void StartUp(void)
{
int addr;
int irq;
int dma;
int midi;
union REGS r;
r.x.ax = 0;
int86(0x33,&r,&r);
if (r.x.ax == 0xffff)
mousepresent = 1;
else
mousepresent = 0;
r.x.ax = 2;
int86(0x33, &r, &r );
SetColor();
memset ( &newc, 0, sizeof ( DMXINFO ) );
memset ( &lastc, 0, sizeof ( DMXINFO ) );
MakeKeyLookup();
midi = addr = irq = dma = 0; // WILL BE INITED LATER
curk.up = SC_UP;
curk.down = SC_DOWN;
curk.left = SC_LEFT;
curk.right = SC_RIGHT;
curk.fire = SC_CTRL;
curk.use = SC_SPACE;
curk.key1 = SC_ALT;
curk.key2 = SC_RIGHT_SHIFT;
curk.key3 = SC_COMMA;
curk.key4 = SC_PERIOD;
curk.mouse[0] = 0;
curk.mouse[1] = 1;
curk.mouse[2] = 2;
curk.joy[0] = 0;
curk.joy[1] = 1;
curk.joy[2] = 2;
curk.joy[3] = 3;
newc.m.card = M_NONE;
newc.m.port = -1;
newc.m.midiport = -1;
newc.m.irq = -1;
newc.m.dma = -1;
newc.d = newc.m;
newc.numdig = 2;
DrawPup(&title);
DrawPup(&show);
DrawPup(&idmain2);
SaveScreen();
if ( !M_LoadDefaults() )
{
//
// Auto-detect ONLY first time through
//
if ( SmellsLikeGUS ( &addr, &irq, &dma ) )
{
if (newc.m.irq > 7)
ErrorWindow(&gusirqer);
newc.m.card = M_GUS;
newc.m.port = addr;
newc.m.midiport = -1;
newc.m.irq = irq;
newc.m.dma = dma;
newc.d = newc.m;
//fprintf(stderr, "GUS: addr=%x, irq=%d, dma=%d\n", addr, irq, dma);
}
else if ( SmellsLikeSB ( &addr, &irq, &dma, &midi ) )
{
newc.m.card = M_SB;
newc.m.port = addr;
newc.m.midiport = midi;
newc.m.irq = irq;
newc.m.dma = dma;
newc.d = newc.m;
}
ChooseController();
SetupMusic();
SetupFX();
lastc.control = newc.control;
lastc.numdig = newc.numdig;
lastc.m = newc.m;
lastc.d = newc.d;
mainmenu.startitem = MAIN_SAVE;
}
else
{
lastc.control = newc.control;
lastc.numdig = newc.numdig;
lastc.m = newc.m;
lastc.d = newc.d;
if (newc.m.irq > 7)
ErrorWindow(&gusirqer);
mainmenu.startitem = MAIN_CMUSIC;
}
DrawCurrentConfig();
//
// GLOBALS
//
respawn = nomonsters = 0;
MainMenu();
clrscr();
}
//
// Main menu
//
void MainMenu (void)
{
int i;
int field;
short key;
char *args[10];
char string[10][10];
int argcount;
// ASSUME THAT THE MAIN MENU HAS BEEN DRAWN IN STARTUP
while(1)
{
SetupMenu(&mainmenu);
field = GetMenuInput();
key = menukey;
if ( key == KEY_ESC )
{
if (QuitAndSave() < 0)
continue;
break;
}
//
// WARP
//
if (key == KEY_F1)
{
int level;
int i;
level = WarpTime();
if (!level)
continue;
M_SaveDefaults();
RestoreScreen();
argcount = 1;
if (nomonsters)
args[argcount++] = "-nomonsters";
if (respawn)
args[argcount++] = "-respawn";
args[argcount++] = "-warp";
#ifdef DOOM2
sprintf(string[argcount],"%d",level);
args[argcount] = string[argcount];
#else
sprintf(string[argcount],"%d",level>>8);
args[argcount] = string[argcount];
argcount++;
sprintf(string[argcount],"%d",level&0x0f);
args[argcount] = string[argcount];
#endif
argcount++;
if (cdrom)
args[argcount++] = "-cdrom";
for (i = 1;i < myargc; i++)
args[argcount++] = myargv[i];
args[argcount] = NULL;
textbackground(0);
textcolor(7);
clrscr();
if (!access("doom2.exe",0))
{
args[0] = "doom2.exe ";
execv("doom2.exe",args);
}
else
if (!access("heretic.exe",0))
{
args[0] = "heretic.exe ";
execv("heretic.exe",args);
}
else
if (!access("strife.exe",0))
{
args[0] = "strife.exe ";
execv("strife.exe",args);
}
else
{
args[0] = "doom.exe ";
execv("doom.exe",args);
}
printf("Problem EXECing "EXENAME" for netplay. Need to be in same directory!");
//
// ERROR EXECing!
//
exit(0);
}
if ( key != KEY_ENTER && key != KEY_F10 ) continue;
switch ( field )
{
case MAIN_CMUSIC:
SetupMusic();
break;
case MAIN_CSFX:
SetupFX();
break;
case MAIN_TYPE:
ChooseController();
break;
case MAIN_CONFIG:
ConfigControl();
break;
case MAIN_SAVE:
M_SaveDefaults();
textbackground(0);
textcolor(7);
clrscr();
argcount = 1;
for (i = 1;i < myargc; i++)
args[argcount++] = myargv[i];
if (cdrom)
args[argcount++] = "-cdrom";
if (!access("heretic.exe",0))
{
args[0] = "heretic.exe";
args[argcount] = NULL;
execv("heretic.exe",args);
}
else
if (!access("strife.exe",0))
{
args[0] = "strife.exe ";
execv("strife.exe",args);
}
else
if (!access("doom2.exe",0))
{
args[0] = "doom2.exe";
args[argcount] = NULL;
execv("doom2.exe",args);
}
else
{
args[0] = "doom.exe ";
args[argcount] = NULL;
execv("doom.exe",args);
}
printf("Problem EXECing "EXENAME"! Probably not in same directory!\n");
exit(0);
goto func_exit;
case MAIN_NET:
ChooseNetplay();
break;
case MAIN_NETSG:
#ifndef STRIFE
ChooseNetrestore();
#endif
break;
default:
break;
}
}
func_exit:
textbackground(0);
textcolor(7);
clrscr();
return;
}

281
MAIN.H Normal file
View File

@@ -0,0 +1,281 @@
//
// MAIN.H
//
#include "setup.h"
#include "menu.h"
#include "keys.h"
// In the Project Manager, change the DEFINES for the EXE
// for the different versions of SETUP. Valid #defines are:
// DOOM // define if for DOOM
// DOOM2 // define if for DOOM II
// HERETIC // define if for HERETIC
// FRENCH // define if FRENCH VERSION (any game)
#ifdef DOOM2
#define EXENAME "DOOM2.EXE"
#define DEFAULTNAME "DEFAULT.CFG"
#define DEFAULTPATH "C:\\DOOMDATA"
#define SAVENAME "DOOMSAV%d.DSG"
#endif
#ifdef DOOM
#define EXENAME "DOOM.EXE"
#define DEFAULTNAME "DEFAULT.CFG"
#define DEFAULTPATH "C:\\DOOMDATA"
#define SAVENAME "DOOMSAV%d.DSG"
#endif
#ifdef HERETIC
#define EXENAME "HERETIC.EXE"
#define DEFAULTNAME "HERETIC.CFG"
#define DEFAULTPATH "C:\\HERETIC.CD"
#define SAVENAME "HTICSAV%d.HSG"
#endif
#ifdef STRIFE
#define EXENAME "STRIFE.EXE"
#define DEFAULTNAME "STRIFE.CFG"
#define DEFAULTPATH "C:\\STRIFE.CD"
#define SAVENAME "STRFSAV%d.DSG"
#endif
#ifdef FRENCH
#define S_NONE "AUCUNE"
#define S_PCSP "Haut-parleur PC"
#define S_CON1 "Clavier seul"
#define S_CON2 "Clavier + Souris"
#define S_CON3 "Clavier + Joystick"
#else
#define S_NONE "None"
#define S_PCSP "PC Speaker"
#define S_CON1 "Keyboard only"
#define S_CON2 "Keyboard + Mouse"
#define S_CON3 "Keyboard + Joystick"
#endif
#define MAXARGS 12
typedef enum { FALSE, TRUE } BOOL;
typedef enum
{
M_NONE,
M_PC,
M_ADLIB,
M_SB,
M_PAS,
M_GUS,
M_WAVE,
M_CANVAS,
M_GMIDI,
M_SBAWE32,
M_LAST
}SCARD;
typedef enum
{
C_KEY,
C_MOUSE,
C_JOYSTICK,
C_LAST
}CONTROL;
typedef struct
{
SCARD card;
short port;
short midiport;
short irq;
short dma;
} DMXCARD;
typedef struct
{
CONTROL control;
DMXCARD m;
DMXCARD d;
short numdig;
} DMXINFO;
typedef struct
{
int numberOfPlayers;
int skillLevel;
int deathMatch;
unsigned networkSocket;
int episode;
} net_t;
typedef struct
{
int skillLevel;
int deathMatch;
int episode;
int comport;
int comtype; // 0 = connected,1 = answer,2 = call
char phonenum[16];
} serial_t;
typedef struct
{
int up;
int down;
int left;
int right;
int fire;
int use; // ID = USE CYGNUS = USE SPECIAL WEAPON
int key1; // ID = STRAFE ON CYGNUS = CHANGE SPECIAL WEAPON
int key2; // ID = SPEED ON CYGNUS = MEGA BOMB HOT KEY
int key3; // ID = STRAFE LEFT
int key4; // ID = STRAFE RIGHT
#ifdef HERETIC
int lookdown;
int lookcenter;
int lookup;
int flydown;
int flycenter;
int flyup;
int invleft;
int invright;
#endif
#ifdef STRIFE
int lookdown;
int lookup;
int invleft;
int invright;
int invhome;
int invend;
int invuse;
int invdrop;
int invquery;
int invpop;
int healthuse;
int jump;
#endif
int mouse[3];
int joy[4];
} CONTS;
typedef enum
{
ID_FIRE, // def button 1
ID_STRAFE, // def button 3
ID_FORWARD, // def button 2
ID_USE // def button 4 joystick only
}IDCONTS;
extern int usemouse;
extern int usejoystick;
extern int comport;
typedef struct
{
char name[64];
char init[64];
char hangup[64];
char baud[8];
} modem_t;
#define MAXMODEMS 200
typedef struct
{
char name[32];
char number[16];
} phonelist_t;
#define MAXPHNLIST 40
extern char keydesc[256][10];
extern int cdrom;
extern int respawn;
extern int nomonsters;
extern int mousepresent;
extern DMXINFO lastc;
extern DMXINFO newc;
extern BOOL savemusic;
extern BOOL savefx;
extern CONTS curk;
//
// Network macros
//
extern char chatmacros[10][40];
extern net_t netinfo;
extern net_t info; // in case ESC is pressed
extern serial_t modeminfo;
extern serial_t minfo; // in case ESC is pressed
extern serial_t serialinfo;
extern serial_t sinfo; // in case ESC is pressed
void ErrorWindow(pup_t far *pup);
void StartUp(void);
void MainMenu (void);
void DrawCurrentConfig(void);
int QuitAndSave(void);
//
// Functions in other modules
//
// MUSIC.C
int SetupMusic(void);
int ChooseSbPort (DMXCARD * card);
int ChooseMidiPort (DMXCARD * card);
// WARP.C
extern int respawn;
extern int nomonsters;
extern int deathmatch2;
unsigned WarpTime(void);
// SFX.C
int SetupFX(void);
// CONTROL.C
int ChooseController(void);
// CONFIG.C
void ConfigControl (void);
void Pos(item_t *item);
void Clear(item_t *item);
// NETPLAY.C
void ChooseNetplay(void);
void AttriBar(int x,int y,int length, char attr);
// MACROS.C
void MacroConfig(void);
int EditLine(item_t *item,char *string,int maxlen);
// MODEM.C
int ModemConfig(void);
int ChooseOpponentInList(void);
extern char chosenPhoneNum[16];
// SERIAL.C
int SerialConfig(void);
// NET.C
int NetworkConfig(void);
// NETREST.C
extern char savenames[6][24];
extern int saveslot;
int RestoreNetwork(void);
void ChooseNetrestore(void);
// MODREST.C
int RestoreModem(void);
// SERREST.C
int RestoreSerial(void);

BIN
MAIN.OBJ Normal file

Binary file not shown.

173
MENU.BAK Normal file
View File

@@ -0,0 +1,173 @@
#include <stdio.h>
#include <conio.h>
#include <mem.h>
#include <dos.h>
#include "main.h"
item_t *current;
menu_t *currentmenu;
int curitem; // current item #
char inv_attrib; // inversion attribute
char buffer[160]; // save the entire screen line!
short menukey; // globally set after GetMenuInput()
//
// Make a sound!
//
void Sound(int freq, int dly)
{
sound(freq);
delay(dly);
nosound();
}
//
// Draw a dot if "value" is > 0 at item->x - 3
//
void SetMark(item_t *item,int value)
{
char far *screen;
screen = MK_FP(0xb800,item->y*160 + (item->x-3)*2);
*screen = ' ';
if (value)
*screen = 7;
}
//
// Invert the menu item
//
void Invert(item_t *item)
{
char far *screen;
int i;
movedata(0xb800,item->y*160,FP_SEG(&buffer),FP_OFF(&buffer),160);
screen = MK_FP(0xb800,item->y*160 + item->x*2);
for (i = 0; i < item->w; i++)
{
*(screen+1) = inv_attrib;
screen += 2;
}
}
//
// Restore the screen line (uninvert)
//
void UnInvert(item_t *item)
{
movedata(FP_SEG(&buffer),FP_OFF(&buffer),0xb800,item->y*160,160);
}
//
// Set "current" to first menu item
//
void SetupMenu(menu_t *menu)
{
currentmenu = menu;
current = menu->items;
current += menu->startitem;
curitem = menu->startitem;
inv_attrib = menu->invert;
Invert(current);
}
//
// Get menu input for current menu
// Exit: -1 = ESC was pressed, xx = item id
//
int GetMenuInput(void)
{
char c;
while(1)
{
c = getch();
// gotoxy(1,2);
// printf("char:%x ",c);
switch(c)
{
case 0x48: // UP
if (!curitem)
break;
UnInvert(current);
if (curitem->up)
{
curitem = curitem->up;
current = currentmenu->items + curitem;
}
else
{
curitem--;
current--;
}
Invert(current);
Sound(50,10);
break;
case 0x50: // DOWN
if (curitem == currentmenu->maxitems - 1)
break;
UnInvert(current);
if (curitem->down)
{
curitem = curitem->down;
current = currentmenu->items + curitem;
}
else
{
curitem++;
current++;
}
Invert(current);
Sound(50,10);
break;
case 0x4b: // LEFT
if (current->left != -1)
{
UnInvert(current);
curitem = current->left;
current = currentmenu->items+curitem;
Invert(current);
Sound(50,10);
}
break;
case 0x4d: // RIGHT
if (current->right != -1)
{
UnInvert(current);
curitem = current->right;
current = currentmenu->items+curitem;
Invert(current);
Sound(50,10);
}
break;
case 0x44: // F10
case 0x3b: // F1
case 0x3c: // F2
UnInvert(current);
menukey = c;
currentmenu->startitem = curitem;
Sound(50,10);
return current->id;
case 0x0d: // ENTER
UnInvert(current);
menukey = c;
currentmenu->startitem = curitem;
Sound(2000,10);
return current->id;
case 0x1b: // ESC
UnInvert(current);
menukey = c;
Sound(3000,10);
return -1;
}
}
}

173
MENU.C Normal file
View File

@@ -0,0 +1,173 @@
#include <stdio.h>
#include <conio.h>
#include <mem.h>
#include <dos.h>
#include "main.h"
item_t *current;
menu_t *currentmenu;
int curitem; // current item #
char inv_attrib; // inversion attribute
char buffer[160]; // save the entire screen line!
short menukey; // globally set after GetMenuInput()
//
// Make a sound!
//
void Sound(int freq, int dly)
{
sound(freq);
delay(dly);
nosound();
}
//
// Draw a dot if "value" is > 0 at item->x - 3
//
void SetMark(item_t *item,int value)
{
char far *screen;
screen = MK_FP(0xb800,item->y*160 + (item->x-3)*2);
*screen = ' ';
if (value)
*screen = 7;
}
//
// Invert the menu item
//
void Invert(item_t *item)
{
char far *screen;
int i;
movedata(0xb800,item->y*160,FP_SEG(&buffer),FP_OFF(&buffer),160);
screen = MK_FP(0xb800,item->y*160 + item->x*2);
for (i = 0; i < item->w; i++)
{
*(screen+1) = inv_attrib;
screen += 2;
}
}
//
// Restore the screen line (uninvert)
//
void UnInvert(item_t *item)
{
movedata(FP_SEG(&buffer),FP_OFF(&buffer),0xb800,item->y*160,160);
}
//
// Set "current" to first menu item
//
void SetupMenu(menu_t *menu)
{
currentmenu = menu;
current = menu->items;
current += menu->startitem;
curitem = menu->startitem;
inv_attrib = menu->invert;
Invert(current);
}
//
// Get menu input for current menu
// Exit: -1 = ESC was pressed, xx = item id
//
int GetMenuInput(void)
{
char c;
while(1)
{
c = getch();
// gotoxy(1,2);
// printf("char:%x ",c);
switch(c)
{
case 0x48: // UP
if (!curitem)
break;
UnInvert(current);
if (current->up)
{
curitem = current->up;
current = currentmenu->items + curitem;
}
else
{
curitem--;
current--;
}
Invert(current);
Sound(50,10);
break;
case 0x50: // DOWN
if (curitem == currentmenu->maxitems - 1)
break;
UnInvert(current);
if (current->down)
{
curitem = current->down;
current = currentmenu->items + curitem;
}
else
{
curitem++;
current++;
}
Invert(current);
Sound(50,10);
break;
case 0x4b: // LEFT
if (current->left != -1)
{
UnInvert(current);
curitem = current->left;
current = currentmenu->items+curitem;
Invert(current);
Sound(50,10);
}
break;
case 0x4d: // RIGHT
if (current->right != -1)
{
UnInvert(current);
curitem = current->right;
current = currentmenu->items+curitem;
Invert(current);
Sound(50,10);
}
break;
case 0x44: // F10
case 0x3b: // F1
case 0x3c: // F2
UnInvert(current);
menukey = c;
currentmenu->startitem = curitem;
Sound(50,10);
return current->id;
case 0x0d: // ENTER
UnInvert(current);
menukey = c;
currentmenu->startitem = curitem;
Sound(2000,10);
return current->id;
case 0x1b: // ESC
UnInvert(current);
menukey = c;
Sound(3000,10);
return -1;
}
}
}

33
MENU.H Normal file
View File

@@ -0,0 +1,33 @@
//
// MENU.H
//
//
// Structures for menu
//
typedef struct item_s
{
int id; // enum value for id (i.e., MODSKILL1)
int x; // x-coord of item
int y;
int w; // width of item (for inverse bar)
int left; // item # if LEFT ARROW pressed (-1 = none)
int right; // item # if RIGHT ARROW pressed (-1 = none)
int up; // item # if UP ARROW pressed (0 = none)
int down; // item # if DOWN ARROW pressed (0 = none)
} item_t;
typedef struct
{
item_t *items; // * to items
int startitem; // item to start on
int maxitems; // # of items in menu
char invert; // attribute for inversion
} menu_t;
void SetupMenu(menu_t *menu);
int GetMenuInput(void);
void SetMark(item_t *item,int value);
void Sound(int freq, int dly);
extern short menukey;

BIN
MENU.OBJ Normal file

Binary file not shown.

837
MODEM.BAK Normal file
View File

@@ -0,0 +1,837 @@
//
// Enter modem config info
//
#include <process.h>
#include <dos.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <bios.h>
#include "main.h"
#include "default.h"
//
// Choose who to call for modem play
//
phonelist_t phonelist[MAXPHNLIST];
int numInList;
char chosenPhoneNum[16];
//
// Parse the MODOOM.NUM file
//
int ParseMODOOMList(void)
{
int i;
int ok;
FILE *fp;
int rv;
int found;
fp = fopen("MODEM.NUM","rt");
if (fp == NULL)
{
gotoxy(2,25);
printf("There's no MODEM.NUM file! Press a key. ");
sound(2500);
delay(3);
nosound();
getch();
return 0;
}
i = 0;
ok = 1;
do
{
rv = fscanf(fp,"%[^\n]",&phonelist[i].name);
if (!rv || rv == EOF)
ok = 0;
rv = fscanf(fp,"\n");
if (rv == EOF)
ok = 0;
rv = fscanf(fp,"%[^\n]",&phonelist[i].number);
if (!rv || rv == EOF)
ok = 0;
rv = fscanf(fp,"\n\n");
if (rv == EOF)
ok = 0;
i++;
} while(ok);
numInList = i;
fclose(fp);
//
// Quick little shell sort
//
do
{
int j;
found = 0;
for (i = 0; i < numInList-1; i++)
for (j = i+1; j < numInList; j++)
if (strcmp(phonelist[j].name,phonelist[i].name)<0)
{
phonelist_t temp;
temp = phonelist[j];
phonelist[j] = phonelist[i];
phonelist[i] = temp;
found = 1;
}
} while(found);
return 1;
}
//
// Blit the phone numbers to the screen
//
void BlitPhoneNumbers(int start)
{
int i;
int max;
int y;
int j;
int len;
max = start + 10;
if (max > numInList)
max = numInList;
y = 8;
for (i = start; i < max; i++)
{
gotoxy(17,y);
cprintf("%s",phonelist[i].name);
len = 32 - strlen(phonelist[i].name);
for (j = 0; j < len; j++)
cprintf(" ");
gotoxy(49,y++);
cprintf("%s",phonelist[i].number);
len = 16 - strlen(phonelist[i].number);
for (j = 0; j < len; j++)
cprintf(" ");
}
gotoxy(1,25);
}
//
// Choose who to call
//
enum {ADDNAME,ADDNUMBER,MAXADD};
item_t additems[]= {
{ADDNAME, 17,12,28,-1,ADDNUMBER},
{ADDNUMBER, 46,12,18,ADDNAME,-1}};
menu_t addmenu = {&additems[0],ADDNAME,MAXADD,0x7f};
int ChooseOpponentInList(void)
{
int i;
int xit;
int blitY;
int hliteY;
int lastHliteY;
int index;
chosenPhoneNum[0] = 0;
if (!ParseMODOOMList())
return 0;
SaveScreen();
DrawPup(&phonelst);
textcolor(11);
textbackground(1);
gotoxy(1,25);
xit = 0;
blitY = 0;
lastHliteY = hliteY = 0;
do
{
int key;
textcolor(11);
textbackground(1);
BlitPhoneNumbers(blitY);
AttriBar(16,lastHliteY+7,48,0x1b);
lastHliteY = hliteY;
AttriBar(16,hliteY+7,48,0x7f);
key = _bios_keybrd(_NKEYBRD_READ)>>8;
switch(key)
{
#ifndef FRENCH
case KEY_F1: // ADD NUMBER TO LIST!
SaveScreen();
DrawPup(&entrnmbr);
{
int field;
int key;
int which;
int exit;
char tempstring[32];
which = numInList;
exit = 0;
while(!exit)
{
SetupMenu(&addmenu);
field = GetMenuInput();
switch(menukey)
{
case KEY_F10: // DONE!
if (phonelist[which].name[0] ||
phonelist[which].number[0])
{
FILE *fp;
numInList++;
fp = fopen("MODEM.NUM","w+");
if (fp == NULL)
{
gotoxy(2,25);
printf("Error creating MODEM.NUM file! Press a key. ");
sound(2500);
delay(3);
nosound();
getch();
return 0;
}
for (i = 0;i < numInList; i++)
fprintf(fp,"%s\n%s\n\n",
phonelist[i].name,phonelist[i].number);
fclose(fp);
}
case KEY_ESC: // ABORT!
exit = 1;
break;
case KEY_ENTER: // EDIT NUMBER/NAME
switch(field)
{
case ADDNAME:
strcpy(tempstring,phonelist[which].name);
key = EditLine(&additems[ADDNAME],tempstring,28);
if (key == KEY_ENTER)
strcpy(phonelist[which].name,tempstring);
textcolor(15);
textbackground(1);
Clear(&additems[ADDNAME]);
Pos(&additems[ADDNAME]);
cprintf("%s",phonelist[which].name);
gotoxy(1,25);
break;
case ADDNUMBER:
strcpy(tempstring,phonelist[which].number);
key = EditLine(&additems[ADDNUMBER],tempstring,18);
if (key == KEY_ENTER)
strcpy(phonelist[which].number,tempstring);
textcolor(15);
textbackground(1);
Clear(&additems[ADDNUMBER]);
Pos(&additems[ADDNUMBER]);
cprintf("%s",phonelist[which].number);
gotoxy(1,25);
break;
}
break;
}
}
}
RestoreScreen();
break;
#endif
case 0x1c: // ENTER
index = blitY + hliteY;
for (i=0;i<strlen(phonelist[index].number);i++)
if ((phonelist[index].number[i] >= '0' &&
phonelist[index].number[i] <= '9') ||
phonelist[index].number[i] == '#' ||
phonelist[index].number[i] == '*' ||
phonelist[index].number[i] == ',')
{
char num[2];
num[0] = phonelist[index].number[i];
num[1] = 0;
strcat(chosenPhoneNum,num);
}
xit = 1;
break;
case SC_ESC: // ESC
xit = 1;
break;
case 0x48: // UP
if (hliteY > 5 ||
(!blitY && hliteY))
hliteY--;
else
if (blitY)
blitY--;
break;
case 0x50: // DOWN
if (hliteY > 4 && blitY+10<numInList)
blitY++;
else
if (hliteY < 9 &&
((blitY+10 == numInList) ||
(hliteY < numInList - 1)))
hliteY++;
break;
case 0x49: // PGUP
blitY -= 9;
if (blitY < 0)
hliteY = blitY = 0;
break;
case 0x51: // PGDN
blitY += 9;
if (blitY+10 > numInList)
{
blitY = numInList - 10;
hliteY = 9;
}
if (numInList < 10)
{
blitY = 0;
hliteY = numInList - 1;
}
break;
}
} while(!xit);
RestoreScreen();
return chosenPhoneNum[0];
}
#ifndef DOOM2
//
// Epsiode radio buttons
//
radio_t mepi[]=
{
{28,3,1},
{28,4,2},
{28,5,3}
};
radiogroup_t mepig=
{ &mepi[0],3,&minfo.episode,15,1 };
//
// Skill level radio buttons
//
radio_t mskill[]=
{
{28,7,2},
{28,8,3},
{28,9,4},
{28,10,5}
};
radiogroup_t mskillg=
{ &mskill[0],4,&minfo.skillLevel,15,1 };
//
// Mode radio buttons
//
radio_t mdeath[]=
{
{28,12,0},
{28,13,1}
};
radiogroup_t mdeathg=
{ &mdeath[0],2,&minfo.deathMatch,15,1 };
//
// Com port radio buttons
//
radio_t mcomport[]=
{
{28,15,1},
{28,16,2},
{42,15,3},
{42,16,4}
};
radiogroup_t mcomportg=
{ &mcomport[0],4,&minfo.comport,15,1 };
//
// Connection-type radio buttons
//
radio_t mcomtype[]=
{
{28,18,0},
{28,19,1},
{28,20,2}
};
radiogroup_t mcomtypeg=
{ &mcomtype[0],3,&minfo.comtype,15,1 };
#else
//
// Skill level radio buttons
//
radio_t mskill[]=
{
{28,5,2},
{28,6,3},
{28,7,4},
{28,8,5},
};
radiogroup_t mskillg=
{ &mskill[0],4,&minfo.skillLevel,15,1 };
//
// Mode radio buttons
//
radio_t mdeath[]=
{
{28,10,0},
{28,11,1}
};
radiogroup_t mdeathg=
{ &mdeath[0],2,&minfo.deathMatch,15,1 };
//
// Com port radio buttons
//
radio_t mcomport[]=
{
{28,13,1},
{28,14,2},
{42,13,3},
{42,14,4}
};
radiogroup_t mcomportg=
{ &mcomport[0],4,&minfo.comport,15,1 };
//
// Connection-type radio buttons
//
radio_t mcomtype[]=
{
{28,16,0},
{28,17,1},
{28,18,2}
};
radiogroup_t mcomtypeg=
{ &mcomtype[0],3,&minfo.comtype,15,1 };
#endif
//
// Menu info
//
enum
{
#ifndef DOOM2
MOD_EPISODE0, MOD_EPISODE1, MOD_EPISODE2,
#endif
MOD_SKILL1, MOD_SKILL2, MOD_SKILL3, MOD_SKILL4,
MOD_DEATHNO, MOD_DEATHYES,
MOD_COM1, MOD_COM2, MOD_COM3, MOD_COM4,
MOD_CONN0, MOD_CONN1, MOD_CONN2,
MOD_MAX
};
item_t cmodemitems[]=
{
#ifndef DOOM2
{MOD_EPISODE0, 31,3,21, -1,-1},
{MOD_EPISODE1, 31,4,21, -1,-1},
{MOD_EPISODE2, 31,5,21, -1,-1},
{MOD_SKILL1, 31,7,20, -1,-1},
{MOD_SKILL2, 31,8,20, -1,-1},
{MOD_SKILL3, 31,9,20, -1,-1},
{MOD_SKILL4, 31,10,20, -1,-1},
{MOD_DEATHNO, 31,12,20,-1,-1},
{MOD_DEATHYES, 31,13,20,-1,-1},
{MOD_COM1, 31,15,4, -1, MOD_COM3},
{MOD_COM2, 31,16,4, -1, MOD_COM4,0,MOD_CONN0},
{MOD_COM3, 45,15,4,MOD_COM1, -1,MOD_DEATHYES},
{MOD_COM4, 45,16,4,MOD_COM2, -1},
{MOD_CONN0, 31,18,20, -1,-1,MOD_COM2},
{MOD_CONN1, 31,19,20, -1,-1},
{MOD_CONN2, 31,20,7, -1,-1}
#else
{MOD_SKILL1, 31,5,20, -1,-1},
{MOD_SKILL2, 31,6,20, -1,-1},
{MOD_SKILL3, 31,7,20, -1,-1},
{MOD_SKILL4, 31,8,20, -1,-1},
{MOD_DEATHNO, 31,10,20,-1,-1},
{MOD_DEATHYES, 31,11,20,-1,-1},
{MOD_COM1, 31,13,4, -1, MOD_COM3},
{MOD_COM2, 31,14,4, -1, MOD_COM4,0,MOD_CONN0},
{MOD_COM3, 45,13,4,MOD_COM1, -1,MOD_DEATHYES},
{MOD_COM4, 45,14,4,MOD_COM2, -1},
{MOD_CONN0, 31,16,20, -1,-1,MOD_COM2},
{MOD_CONN1, 31,17,20, -1,-1},
{MOD_CONN2, 31,18,7, -1,-1}
#endif
};
menu_t cmodemmenu=
{
&cmodemitems[0],
#ifndef DOOM2
MOD_EPISODE0,
#else
MOD_SKILL1,
#endif
MOD_MAX,
0x7f
};
int ModemConfig(void)
{
short field;
short key;
int rval = 0;
char *args[MAXARGS];
int argcount;
char string[MAXARGS*2][12];
int i;
int level;
#ifndef DOOM2
item_t phonenum = {2,39,20,13,-1,-1};
#else
item_t phonenum = {2,39,18,13,-1,-1};
#endif
char tempstring[16];
minfo = modeminfo; // save copy of modeminfo
SaveScreen();
DrawPup(&cmodem);
//
// Set defaults
//
minfo.skillLevel = 3;
DrawRadios(&mskillg);
minfo.episode = 1;
#ifndef DOOM2
DrawRadios(&mepig);
#endif
minfo.deathMatch = 1;
DrawRadios(&mdeathg);
minfo.comport = comport;
DrawRadios(&mcomportg);
minfo.comtype = 1;
DrawRadios(&mcomtypeg);
strcpy(minfo.phonenum,"");
while(1)
{
SetupMenu(&cmodemmenu);
field = GetMenuInput();
key = menukey;
switch ( key )
{
case KEY_ESC:
rval = -1;
goto func_exit;
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(&mcomtypeg);
gotoxy(1,25);
}
break;
//
// WARP
//
case KEY_F1:
{
level = WarpTime();
if (!level)
continue;
modeminfo = minfo;
M_SaveDefaults();
RestoreScreen();
argcount = 1;
args[0] = "sersetup.exe ";
if (cdrom)
args[argcount++] = "-cdrom";
args[argcount++] = "-skill";
sprintf(string[argcount],"%d",modeminfo.skillLevel);
args[argcount] = string[argcount];
argcount++;
if (!level)
{
#ifndef DOOM2
args[argcount++] = "-episode";
sprintf(string[argcount],"%d",modeminfo.episode);
args[argcount] = string[argcount];
argcount++;
#endif
}
else
{
args[argcount++] = "-warp";
#ifdef DOOM2
sprintf(string[argcount],"%d",level);
args[argcount] = string[argcount];
argcount++;
#else
sprintf(string[argcount],"%d",level>>8);
args[argcount] = string[argcount];
argcount++;
sprintf(string[argcount],"%d",level&0x0f);
args[argcount] = string[argcount];
argcount++;
#endif
}
if (modeminfo.deathMatch)
args[argcount++] = "-deathmatch";
if (nomonsters)
args[argcount++] = "-nomonsters";
if (respawn)
args[argcount++] = "-respawn";
if (deathmatch2 && modeminfo.deathMatch)
args[argcount++] = "-altdeath";
sprintf(string[argcount],"-com%d",modeminfo.comport);
args[argcount] = string[argcount];
argcount++;
//
// IF # IS ENTERED, CALL #
//
if (minfo.phonenum[0])
modeminfo.comtype = 2;
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;
}
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(1);
}
break;
exitandsave:
case KEY_F10:
modeminfo = minfo;
M_SaveDefaults();
RestoreScreen();
argcount = 1;
args[0] = "sersetup.exe ";
if (cdrom)
args[argcount++] = "-cdrom";
args[argcount++] = "-skill";
sprintf(string[argcount],"%d",modeminfo.skillLevel);
args[argcount] = string[argcount];
argcount++;
if (modeminfo.deathMatch)
args[argcount++] = "-deathmatch";
#ifndef DOOM2
args[argcount++] = "-episode";
sprintf(string[argcount],"%d",modeminfo.episode);
args[argcount] = string[argcount];
argcount++;
#endif
sprintf(string[argcount],"-com%d",modeminfo.comport);
args[argcount] = string[argcount];
argcount++;
//
// IF # IS ENTERED, CALL #
//
if (minfo.phonenum[0])
modeminfo.comtype = 2;
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;
}
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(1);
case KEY_ENTER:
switch ( field )
{
#ifndef DOOM2
//
// Episode
//
case MOD_EPISODE0:
case MOD_EPISODE1:
case MOD_EPISODE2:
minfo.episode = field - MOD_EPISODE0 + 1;
break;
#endif
//
// Skill level
//
case MOD_SKILL1:
case MOD_SKILL2:
case MOD_SKILL3:
case MOD_SKILL4:
minfo.skillLevel = field - MOD_SKILL1 + 2;
break;
//
// Deathmatch
//
case MOD_DEATHNO:
case MOD_DEATHYES:
minfo.deathMatch = field - MOD_DEATHNO;
break;
//
// COM port
//
case MOD_COM1:
case MOD_COM2:
case MOD_COM3:
case MOD_COM4:
comport = minfo.comport = field - MOD_COM1 + 1;
break;
//
// Connection type
//
case MOD_CONN0:
case MOD_CONN1:
minfo.comtype = field - MOD_CONN0;
break;
case MOD_CONN2:
minfo.comtype = 2;
key = EditLine(&phonenum,tempstring,12);
if (key == KEY_ENTER)
strcpy(minfo.phonenum,tempstring);
gotoxy(1,25);
break;
default:
break;
}
#ifndef DOOM2
DrawRadios(&mepig);
#endif
DrawRadios(&mskillg);
DrawRadios(&mdeathg);
DrawRadios(&mcomportg);
DrawRadios(&mcomtypeg);
break;
}
}
func_exit:
RestoreScreen();
return ( rval );
}

837
MODEM.C Normal file
View File

@@ -0,0 +1,837 @@
//
// Enter modem config info
//
#include <process.h>
#include <dos.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <bios.h>
#include "main.h"
#include "default.h"
//
// Choose who to call for modem play
//
phonelist_t phonelist[MAXPHNLIST];
int numInList;
char chosenPhoneNum[16];
//
// Parse the MODOOM.NUM file
//
int ParseMODOOMList(void)
{
int i;
int ok;
FILE *fp;
int rv;
int found;
fp = fopen("MODEM.NUM","rt");
if (fp == NULL)
{
gotoxy(2,25);
printf("There's no MODEM.NUM file! Press a key. ");
sound(2500);
delay(3);
nosound();
getch();
return 0;
}
i = 0;
ok = 1;
do
{
rv = fscanf(fp,"%[^\n]",&phonelist[i].name);
if (!rv || rv == EOF)
ok = 0;
rv = fscanf(fp,"\n");
if (rv == EOF)
ok = 0;
rv = fscanf(fp,"%[^\n]",&phonelist[i].number);
if (!rv || rv == EOF)
ok = 0;
rv = fscanf(fp,"\n\n");
if (rv == EOF)
ok = 0;
i++;
} while(ok);
numInList = i;
fclose(fp);
//
// Quick little shell sort
//
do
{
int j;
found = 0;
for (i = 0; i < numInList-1; i++)
for (j = i+1; j < numInList; j++)
if (strcmp(phonelist[j].name,phonelist[i].name)<0)
{
phonelist_t temp;
temp = phonelist[j];
phonelist[j] = phonelist[i];
phonelist[i] = temp;
found = 1;
}
} while(found);
return 1;
}
//
// Blit the phone numbers to the screen
//
void BlitPhoneNumbers(int start)
{
int i;
int max;
int y;
int j;
int len;
max = start + 10;
if (max > numInList)
max = numInList;
y = 8;
for (i = start; i < max; i++)
{
gotoxy(17,y);
cprintf("%s",phonelist[i].name);
len = 32 - strlen(phonelist[i].name);
for (j = 0; j < len; j++)
cprintf(" ");
gotoxy(49,y++);
cprintf("%s",phonelist[i].number);
len = 16 - strlen(phonelist[i].number);
for (j = 0; j < len; j++)
cprintf(" ");
}
gotoxy(1,25);
}
//
// Choose who to call
//
enum {ADDNAME,ADDNUMBER,MAXADD};
item_t additems[]= {
{ADDNAME, 17,12,28,-1,ADDNUMBER},
{ADDNUMBER, 46,12,18,ADDNAME,-1}};
menu_t addmenu = {&additems[0],ADDNAME,MAXADD,0x7f};
int ChooseOpponentInList(void)
{
int i;
int xit;
int blitY;
int hliteY;
int lastHliteY;
int index;
chosenPhoneNum[0] = 0;
if (!ParseMODOOMList())
return 0;
SaveScreen();
DrawPup(&phonelst);
textcolor(11);
textbackground(1);
gotoxy(1,25);
xit = 0;
blitY = 0;
lastHliteY = hliteY = 0;
do
{
int key;
textcolor(11);
textbackground(1);
BlitPhoneNumbers(blitY);
AttriBar(16,lastHliteY+7,48,0x1b);
lastHliteY = hliteY;
AttriBar(16,hliteY+7,48,0x7f);
key = _bios_keybrd(_NKEYBRD_READ)>>8;
switch(key)
{
#ifndef FRENCH
case KEY_F1: // ADD NUMBER TO LIST!
SaveScreen();
DrawPup(&entrnmbr);
{
int field;
int key;
int which;
int exit;
char tempstring[32];
which = numInList;
exit = 0;
while(!exit)
{
SetupMenu(&addmenu);
field = GetMenuInput();
switch(menukey)
{
case KEY_F10: // DONE!
if (phonelist[which].name[0] ||
phonelist[which].number[0])
{
FILE *fp;
numInList++;
fp = fopen("MODEM.NUM","w+");
if (fp == NULL)
{
gotoxy(2,25);
printf("Error creating MODEM.NUM file! Press a key. ");
sound(2500);
delay(3);
nosound();
getch();
return 0;
}
for (i = 0;i < numInList; i++)
fprintf(fp,"%s\n%s\n\n",
phonelist[i].name,phonelist[i].number);
fclose(fp);
}
case KEY_ESC: // ABORT!
exit = 1;
break;
case KEY_ENTER: // EDIT NUMBER/NAME
switch(field)
{
case ADDNAME:
strcpy(tempstring,phonelist[which].name);
key = EditLine(&additems[ADDNAME],tempstring,28);
if (key == KEY_ENTER)
strcpy(phonelist[which].name,tempstring);
textcolor(15);
textbackground(1);
Clear(&additems[ADDNAME]);
Pos(&additems[ADDNAME]);
cprintf("%s",phonelist[which].name);
gotoxy(1,25);
break;
case ADDNUMBER:
strcpy(tempstring,phonelist[which].number);
key = EditLine(&additems[ADDNUMBER],tempstring,18);
if (key == KEY_ENTER)
strcpy(phonelist[which].number,tempstring);
textcolor(15);
textbackground(1);
Clear(&additems[ADDNUMBER]);
Pos(&additems[ADDNUMBER]);
cprintf("%s",phonelist[which].number);
gotoxy(1,25);
break;
}
break;
}
}
}
RestoreScreen();
break;
#endif
case 0x1c: // ENTER
index = blitY + hliteY;
for (i=0;i<strlen(phonelist[index].number);i++)
if ((phonelist[index].number[i] >= '0' &&
phonelist[index].number[i] <= '9') ||
phonelist[index].number[i] == '#' ||
phonelist[index].number[i] == '*' ||
phonelist[index].number[i] == ',')
{
char num[2];
num[0] = phonelist[index].number[i];
num[1] = 0;
strcat(chosenPhoneNum,num);
}
xit = 1;
break;
case SC_ESC: // ESC
xit = 1;
break;
case 0x48: // UP
if (hliteY > 5 ||
(!blitY && hliteY))
hliteY--;
else
if (blitY)
blitY--;
break;
case 0x50: // DOWN
if (hliteY > 4 && blitY+10<numInList)
blitY++;
else
if (hliteY < 9 &&
((blitY+10 == numInList) ||
(hliteY < numInList - 1)))
hliteY++;
break;
case 0x49: // PGUP
blitY -= 9;
if (blitY < 0)
hliteY = blitY = 0;
break;
case 0x51: // PGDN
blitY += 9;
if (blitY+10 > numInList)
{
blitY = numInList - 10;
hliteY = 9;
}
if (numInList < 10)
{
blitY = 0;
hliteY = numInList - 1;
}
break;
}
} while(!xit);
RestoreScreen();
return chosenPhoneNum[0];
}
#ifndef DOOM2
//
// Epsiode radio buttons
//
radio_t mepi[]=
{
{28,3,1},
{28,4,2},
{28,5,3}
};
radiogroup_t mepig=
{ &mepi[0],3,&minfo.episode,15,1 };
//
// Skill level radio buttons
//
radio_t mskill[]=
{
{28,7,2},
{28,8,3},
{28,9,4},
{28,10,5}
};
radiogroup_t mskillg=
{ &mskill[0],4,&minfo.skillLevel,15,1 };
//
// Mode radio buttons
//
radio_t mdeath[]=
{
{28,12,0},
{28,13,1}
};
radiogroup_t mdeathg=
{ &mdeath[0],2,&minfo.deathMatch,15,1 };
//
// Com port radio buttons
//
radio_t mcomport[]=
{
{28,15,1},
{28,16,2},
{42,15,3},
{42,16,4}
};
radiogroup_t mcomportg=
{ &mcomport[0],4,&minfo.comport,15,1 };
//
// Connection-type radio buttons
//
radio_t mcomtype[]=
{
{28,18,0},
{28,19,1},
{28,20,2}
};
radiogroup_t mcomtypeg=
{ &mcomtype[0],3,&minfo.comtype,15,1 };
#else
//
// Skill level radio buttons
//
radio_t mskill[]=
{
{28,5,2},
{28,6,3},
{28,7,4},
{28,8,5},
};
radiogroup_t mskillg=
{ &mskill[0],4,&minfo.skillLevel,15,1 };
//
// Mode radio buttons
//
radio_t mdeath[]=
{
{28,10,0},
{28,11,1}
};
radiogroup_t mdeathg=
{ &mdeath[0],2,&minfo.deathMatch,15,1 };
//
// Com port radio buttons
//
radio_t mcomport[]=
{
{28,13,1},
{28,14,2},
{42,13,3},
{42,14,4}
};
radiogroup_t mcomportg=
{ &mcomport[0],4,&minfo.comport,15,1 };
//
// Connection-type radio buttons
//
radio_t mcomtype[]=
{
{28,16,0},
{28,17,1},
{28,18,2}
};
radiogroup_t mcomtypeg=
{ &mcomtype[0],3,&minfo.comtype,15,1 };
#endif
//
// Menu info
//
enum
{
#ifndef DOOM2
MOD_EPISODE0, MOD_EPISODE1, MOD_EPISODE2,
#endif
MOD_SKILL1, MOD_SKILL2, MOD_SKILL3, MOD_SKILL4,
MOD_DEATHNO, MOD_DEATHYES,
MOD_COM1, MOD_COM2, MOD_COM3, MOD_COM4,
MOD_CONN0, MOD_CONN1, MOD_CONN2,
MOD_MAX
};
item_t cmodemitems[]=
{
#ifndef DOOM2
{MOD_EPISODE0, 31,3,21, -1,-1},
{MOD_EPISODE1, 31,4,21, -1,-1},
{MOD_EPISODE2, 31,5,21, -1,-1},
{MOD_SKILL1, 31,7,21, -1,-1},
{MOD_SKILL2, 31,8,21, -1,-1},
{MOD_SKILL3, 31,9,21, -1,-1},
{MOD_SKILL4, 31,10,21, -1,-1},
{MOD_DEATHNO, 31,12,20,-1,-1},
{MOD_DEATHYES, 31,13,20,-1,-1},
{MOD_COM1, 31,15,4, -1, MOD_COM3},
{MOD_COM2, 31,16,4, -1, MOD_COM4,0,MOD_CONN0},
{MOD_COM3, 45,15,4,MOD_COM1, -1,MOD_DEATHYES},
{MOD_COM4, 45,16,4,MOD_COM2, -1},
{MOD_CONN0, 31,18,20, -1,-1,MOD_COM2},
{MOD_CONN1, 31,19,20, -1,-1},
{MOD_CONN2, 31,20,7, -1,-1}
#else
{MOD_SKILL1, 31,5,20, -1,-1},
{MOD_SKILL2, 31,6,20, -1,-1},
{MOD_SKILL3, 31,7,20, -1,-1},
{MOD_SKILL4, 31,8,20, -1,-1},
{MOD_DEATHNO, 31,10,20,-1,-1},
{MOD_DEATHYES, 31,11,20,-1,-1},
{MOD_COM1, 31,13,4, -1, MOD_COM3},
{MOD_COM2, 31,14,4, -1, MOD_COM4,0,MOD_CONN0},
{MOD_COM3, 45,13,4,MOD_COM1, -1,MOD_DEATHYES},
{MOD_COM4, 45,14,4,MOD_COM2, -1},
{MOD_CONN0, 31,16,20, -1,-1,MOD_COM2},
{MOD_CONN1, 31,17,20, -1,-1},
{MOD_CONN2, 31,18,7, -1,-1}
#endif
};
menu_t cmodemmenu=
{
&cmodemitems[0],
#ifndef DOOM2
MOD_EPISODE0,
#else
MOD_SKILL1,
#endif
MOD_MAX,
0x7f
};
int ModemConfig(void)
{
short field;
short key;
int rval = 0;
char *args[MAXARGS];
int argcount;
char string[MAXARGS*2][12];
int i;
int level;
#ifndef DOOM2
item_t phonenum = {2,39,20,13,-1,-1};
#else
item_t phonenum = {2,39,18,13,-1,-1};
#endif
char tempstring[16];
minfo = modeminfo; // save copy of modeminfo
SaveScreen();
DrawPup(&cmodem);
//
// Set defaults
//
minfo.skillLevel = 3;
DrawRadios(&mskillg);
minfo.episode = 1;
#ifndef DOOM2
DrawRadios(&mepig);
#endif
minfo.deathMatch = 1;
DrawRadios(&mdeathg);
minfo.comport = comport;
DrawRadios(&mcomportg);
minfo.comtype = 1;
DrawRadios(&mcomtypeg);
strcpy(minfo.phonenum,"");
while(1)
{
SetupMenu(&cmodemmenu);
field = GetMenuInput();
key = menukey;
switch ( key )
{
case KEY_ESC:
rval = -1;
goto func_exit;
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(&mcomtypeg);
gotoxy(1,25);
}
break;
//
// WARP
//
case KEY_F1:
{
level = WarpTime();
if (!level)
continue;
modeminfo = minfo;
M_SaveDefaults();
RestoreScreen();
argcount = 1;
args[0] = "sersetup.exe ";
if (cdrom)
args[argcount++] = "-cdrom";
args[argcount++] = "-skill";
sprintf(string[argcount],"%d",modeminfo.skillLevel);
args[argcount] = string[argcount];
argcount++;
if (!level)
{
#ifndef DOOM2
args[argcount++] = "-episode";
sprintf(string[argcount],"%d",modeminfo.episode);
args[argcount] = string[argcount];
argcount++;
#endif
}
else
{
args[argcount++] = "-warp";
#ifdef DOOM2
sprintf(string[argcount],"%d",level);
args[argcount] = string[argcount];
argcount++;
#else
sprintf(string[argcount],"%d",level>>8);
args[argcount] = string[argcount];
argcount++;
sprintf(string[argcount],"%d",level&0x0f);
args[argcount] = string[argcount];
argcount++;
#endif
}
if (modeminfo.deathMatch)
args[argcount++] = "-deathmatch";
if (nomonsters)
args[argcount++] = "-nomonsters";
if (respawn)
args[argcount++] = "-respawn";
if (deathmatch2 && modeminfo.deathMatch)
args[argcount++] = "-altdeath";
sprintf(string[argcount],"-com%d",modeminfo.comport);
args[argcount] = string[argcount];
argcount++;
//
// IF # IS ENTERED, CALL #
//
if (minfo.phonenum[0])
modeminfo.comtype = 2;
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;
}
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(1);
}
break;
exitandsave:
case KEY_F10:
modeminfo = minfo;
M_SaveDefaults();
RestoreScreen();
argcount = 1;
args[0] = "sersetup.exe ";
if (cdrom)
args[argcount++] = "-cdrom";
args[argcount++] = "-skill";
sprintf(string[argcount],"%d",modeminfo.skillLevel);
args[argcount] = string[argcount];
argcount++;
if (modeminfo.deathMatch)
args[argcount++] = "-deathmatch";
#ifndef DOOM2
args[argcount++] = "-episode";
sprintf(string[argcount],"%d",modeminfo.episode);
args[argcount] = string[argcount];
argcount++;
#endif
sprintf(string[argcount],"-com%d",modeminfo.comport);
args[argcount] = string[argcount];
argcount++;
//
// IF # IS ENTERED, CALL #
//
if (minfo.phonenum[0])
modeminfo.comtype = 2;
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;
}
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(1);
case KEY_ENTER:
switch ( field )
{
#ifndef DOOM2
//
// Episode
//
case MOD_EPISODE0:
case MOD_EPISODE1:
case MOD_EPISODE2:
minfo.episode = field - MOD_EPISODE0 + 1;
break;
#endif
//
// Skill level
//
case MOD_SKILL1:
case MOD_SKILL2:
case MOD_SKILL3:
case MOD_SKILL4:
minfo.skillLevel = field - MOD_SKILL1 + 2;
break;
//
// Deathmatch
//
case MOD_DEATHNO:
case MOD_DEATHYES:
minfo.deathMatch = field - MOD_DEATHNO;
break;
//
// COM port
//
case MOD_COM1:
case MOD_COM2:
case MOD_COM3:
case MOD_COM4:
comport = minfo.comport = field - MOD_COM1 + 1;
break;
//
// Connection type
//
case MOD_CONN0:
case MOD_CONN1:
minfo.comtype = field - MOD_CONN0;
break;
case MOD_CONN2:
minfo.comtype = 2;
key = EditLine(&phonenum,tempstring,12);
if (key == KEY_ENTER)
strcpy(minfo.phonenum,tempstring);
gotoxy(1,25);
break;
default:
break;
}
#ifndef DOOM2
DrawRadios(&mepig);
#endif
DrawRadios(&mskillg);
DrawRadios(&mdeathg);
DrawRadios(&mcomportg);
DrawRadios(&mcomtypeg);
break;
}
}
func_exit:
RestoreScreen();
return ( rval );
}

5
MODEM.CFG Normal file
View File

@@ -0,0 +1,5 @@
AT&F&Q0N0S37=9
AT Z H0
9600
Cardinal 14.4 v32

9
MODEM.NUM Normal file
View File

@@ -0,0 +1,9 @@
Shawn's House
475-1729
Software Creations BBS
1-508-368-4137
Chicago
1-708-530-1197

BIN
MODEM.OBJ Normal file

Binary file not shown.

250
MODEM.STR Normal file
View File

@@ -0,0 +1,250 @@
Boca 14.4 v32 fax
AT \N0 \G0 &K0 %C0 N0 S37=9
AT Z H0
9600
USRobotics 14.4 v32 fax
AT &F &M0 &I0 &K0 B0 &N6
AT Z H0
9600
Intel 14.4 ext
AT\N0/Q0
AT Z H0
9600
Telebit Worldblazer 14.4
AT S51=4 S180=0 S183=8 S190=0 L1
ATH
14400
SupraFax 14.4 v32-
AT S37=9 &F S46=136 M1 Q0 D2
AT Z H0
9600
Gateway Telepath 550
ATZS27=32S15=16S13=64&B0&H2&I1&N6&K0&M0
AT Z H0
9600
GVC 14.4 MNP2-5 v42
AT %C0 \N0 B8
AT Z H0
9600
ZOOM 14.4 v32 v42 fax
AT &F S37=9 N0 &D2 &C1 &Q6 &K0 S0=1
AT Z H0
9600
Intel 14.4 fax
AT &F S37=9 N0 &D2 &C1 &Q6 &K0 S0=1
AT Z H0
9600
Boca 14.4 fax
AT Z S46=0 S37=9 N0 &Q0 &D2 &K0
AT Z H0
9600
GVC 14.4 fax
AT Z S46=0 S37=9 N0 &Q0 &D2 &K0
AT Z H0
9600
ZOOM VFX v32
AT &K0 &Q0 &D2 E1 V1 X4 N0 &Q0 S37=9
AT Z H0
9600
GENERIC 14.4
AT &Q6&R1&K0N0 S37=9 \J1 %E1
AT Z H0
9600
MegaHertz C596FM
AT &F \N1 \J0 &Q0 %C0
AT Z H0
9600
Smart One 1442F
AT Z %C0 &Q0 &K0 &D2 S37=9 S95=44 S46=0
AT Z H0
9600
Viva 14.4i fax
AT\N0\Q0\J1\VI
AT Z H0
9600
SupraFax 14.4 v32
AT &F0 S46=136 %C0
AT Z H0
9600
Infotel 14.4
AT &Q6 %C0 S37=9 N0 &K0
AT Z H0
9600
Zoomfax VFP v32
AT &Q0 S48=128 S36=1 S37=9 N0 S46=136 &D2
AT Z H0
9600
ZyXEL U-1496 14.4
AT Z S46=0 &D2 &K0
AT Z H0
9600
Identity Internal
AT &F0 B8 %C0 \Q0 \N1
AT Z H0
9600
GENERIC 9600
AT &F1 &K0 &M0 &Q0 &D2 S46=0
AT Z H0
9600
SupraFax 14.4
AT &Q6 &K %C0 \N1 S37=6 S0=1
AT Z H0
9600
VivaFax 14.4
AT\Q0 &M0 %C0 B8 \N1
AT Z H0
9600
VivaFax 14.4
AT &F &C1 &D2 N0 \N1 %C0 &K0 S37=9
AT Z H0
9600
Intel 14.4
AT &F \N0 \Q0 \J1 \V0
AT Z H0
9600
GENERIC
AT &B0 &K0 &Q0 &D0 &C0
AT Z H0
9600
USRobotics 14.4 fax
AT S0=1 S7=60 E1 Q0 V1 &C1 &D2 &K0 &N6 &A3
AT Z H0
9600
ZOOM VFP 14.4
AT &K0&Q0&D2E1V1X4S37=9N0
AT Z H0
9600
Telepath 550
AT Z &N6 &M0 &K0 S0=1
AT Z H0
9600
Intel 14.4i
AT B8 %C0 "H0 \N0 \Q0
AT Z H0
9600
ZOOM 14.4
AT S37=9 N0 S46=136 %C0 &Q0 \G0
AT Z H0
9600
Intel 14.4i fax
AT&F\N0\Q0
AT Z H0
9600
Practical Perip 14.4FX v32
AT Z S46=0 &Q0 &D2
AT Z H0
9600
Hayes Optima 14.4
AT &F S37=9 S46=0 N0 &Q0 &K0
AT Z H0
9600
Cardinal 9600fax
ATZ&Q6&K0%C0\N0N0S37=9
AT Z H0
9600
USRobotics Sportster 14.4
AT Z &K0 &M0 &D2 E1 V1 X4
AT Z H0
9600
Hayes Optima 14.4
AT Z\N0
AT Z H0
9600
Viva 14.4
AT Z\N0
AT Z H0
9600
ZyXel 14.4
AT Z\N0
AT Z H0
9600
Hayes Ultra 14.4
AT &F &C1 &D2 &Q &K
AT Z H0
9600
Cardinal 14.4 v32
AT&F&Q0N0S37=9
AT Z H0
9600
Acubit 14.4 fax v32
AT Z S37=9 %C0 \N1
AT Z H0
9600
No Name (Rockwell) 14.4
AT S37=9 N0 S46=0 &Q0 &K0 %C0
AT Z H0
9600
ZOOM VXP 14.4 v42
AT&F&K0&M0&Q0&D0&C0\G0%C0
AT Z H0
9600
AT&T Data Port 14.4 FaxM.
ATZ S41=3 %B9600 \N0 %C0
AT Z H0
9600
Redicard v.32 bis 14.4
AT %C & \N
AT Z H0
9600
Digicom Scout Plus 14.4 Fax
AT Z *m0 *e0
AT Z H0
9600
Gateway Telepath 14.4 fax
ATB0N0\N0 %C0 &K0 S37=9
AT Z H0
9600
USR Sportster 14.4 v32 fax
AT &F &M0 &I0 &K0 B0 &N6
AT Z H0
9600

313
MODREST.BAK Normal file
View File

@@ -0,0 +1,313 @@
//
// 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,"");
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 );
}

314
MODREST.C Normal file
View File

@@ -0,0 +1,314 @@
//
// 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 );
}

BIN
MODREST.OBJ Normal file

Binary file not shown.

554
MUSIC.BAK Normal file
View File

@@ -0,0 +1,554 @@
#include "main.h"
#include "menu.h"
#include "default.h"
#include "keys.h"
//
// Choose MIDI port
//
enum
{
MIDI_220,
MIDI_230,
MIDI_240,
MIDI_250,
MIDI_300,
MIDI_320,
MIDI_330,
MIDI_332,
MIDI_334,
MIDI_336,
MIDI_340,
MIDI_360,
MIDI_MAX
};
item_t midiportitems[]=
{
{MIDI_220, 32,6,13, -1,-1},
{MIDI_230, 32,7,13, -1,-1},
{MIDI_240, 32,8,13, -1,-1},
{MIDI_250, 32,9,13, -1,-1},
{MIDI_300, 32,10,13, -1,-1},
{MIDI_320, 32,11,13, -1,-1},
{MIDI_330, 32,12,13, -1,-1},
{MIDI_332, 32,13,13, -1,-1},
{MIDI_334, 32,14,13, -1,-1},
{MIDI_336, 32,15,13, -1,-1},
{MIDI_340, 32,16,13, -1,-1},
{MIDI_360, 32,17,13, -1,-1}
};
menu_t midiportmenu=
{
&midiportitems[0],
MIDI_330,
MIDI_MAX,
0x7f
};
int ChooseMidiPort (DMXCARD * card)
{
short field;
short key;
int rval = 0;
SaveScreen();
DrawPup(&midiport);
// DEFAULT FIELD ========================================
switch ( card->midiport )
{
default:
case 0x220:
field = MIDI_220;
break;
case 0x230:
field = MIDI_230;
break;
case 0x240:
field = MIDI_240;
break;
case 0x250:
field = MIDI_250;
break;
case 0x300:
field = MIDI_300;
break;
case 0x320:
field = MIDI_320;
break;
case 0x330:
field = MIDI_330;
break;
case 0x332:
field = MIDI_332;
break;
case 0x334:
field = MIDI_334;
break;
case 0x336:
field = MIDI_336;
break;
case 0x340:
field = MIDI_340;
break;
case 0x360:
field = MIDI_360;
break;
}
while(1)
{
SetupMenu(&midiportmenu);
field = GetMenuInput();
key = menukey;
switch ( key )
{
case KEY_ESC:
rval = -1;
goto func_exit;
case KEY_ENTER:
case KEY_F10:
switch ( field )
{
case MIDI_220:
card->midiport = 0x220;
goto func_exit;
case MIDI_230:
card->midiport = 0x230;
goto func_exit;
case MIDI_240:
card->midiport = 0x240;
goto func_exit;
case MIDI_250:
card->midiport = 0x250;
goto func_exit;
case MIDI_300:
card->midiport = 0x300;
goto func_exit;
case MIDI_320:
card->midiport = 0x320;
goto func_exit;
case MIDI_330:
card->midiport = 0x330;
goto func_exit;
case MIDI_332:
card->midiport = 0x332;
goto func_exit;
case MIDI_334:
card->midiport = 0x334;
goto func_exit;
case MIDI_336:
card->midiport = 0x336;
goto func_exit;
case MIDI_340:
card->midiport = 0x340;
goto func_exit;
case MIDI_360:
card->midiport = 0x360;
goto func_exit;
default:
break;
}
break;
}
}
func_exit:
RestoreScreen();
return ( rval );
}
//
// Choose which SoundBlaster port to use (or any port!)
//
enum
{
SB_PORT_210,
SB_PORT_220,
SB_PORT_230,
SB_PORT_240,
SB_PORT_250,
SB_PORT_260,
SB_PORT_280,
SB_PORT_MAX
};
item_t sbportitems[]=
{
{SB_PORT_210, 32,9,13, -1,-1},
{SB_PORT_220, 32,10,13, -1,-1},
{SB_PORT_230, 32,11,13, -1,-1},
{SB_PORT_240, 32,12,13, -1,-1},
{SB_PORT_250, 32,13,13, -1,-1},
{SB_PORT_260, 32,14,13, -1,-1},
{SB_PORT_280, 32,15,13, -1,-1}
};
menu_t sbportmenu =
{
&sbportitems[0],
SB_PORT_220,
SB_PORT_MAX,
0x7f
};
int ChooseSbPort (DMXCARD * card) // RETURN: 0 = OK, -1 == ABORT
{
short field;
short key;
int rval = 0;
SaveScreen();
DrawPup(&sbport);
// DEFAULT FIELD ========================================
switch ( card->port )
{
default:
field = SB_PORT_220;
break;
case 0x210:
field = SB_PORT_210;
break;
case 0x220:
field = SB_PORT_220;
break;
case 0x230:
field = SB_PORT_230;
break;
case 0x240:
field = SB_PORT_240;
break;
case 0x250:
field = SB_PORT_250;
break;
case 0x260:
field = SB_PORT_260;
break;
case 0x280:
field = SB_PORT_280;
break;
}
sbportmenu.startitem = field;
while(1)
{
SetupMenu(&sbportmenu);
field = GetMenuInput();
key = menukey;
switch ( key )
{
case KEY_ESC:
rval = -1;
goto func_exit;
case KEY_ENTER:
case KEY_F10:
switch ( field )
{
case SB_PORT_210:
card->port = 0x210;
goto func_exit;
case SB_PORT_220:
card->port = 0x220;
goto func_exit;
case SB_PORT_230:
card->port = 0x230;
goto func_exit;
case SB_PORT_240:
card->port = 0x240;
goto func_exit;
case SB_PORT_250:
card->port = 0x250;
goto func_exit;
case SB_PORT_260:
card->port = 0x260;
goto func_exit;
case SB_PORT_280:
card->port = 0x280;
goto func_exit;
default:
break;
}
break;
}
}
func_exit:
RestoreScreen();
return ( rval );
}
//
// Menu for choosing Music Card
//
enum
{
MCARD_GMIDI,
MCARD_SBAWE32,
MCARD_CANVAS,
MCARD_WAVE,
MCARD_GUS,
MCARD_PAS,
MCARD_SB,
MCARD_ADLIB,
MCARD_NONE,
MCARD_MAX
};
item_t mcarditems[]=
{
{MCARD_GMIDI, 26,8,28, -1,-1},
{MCARD_SBAWE32,26,9,28, -1,-1},
{MCARD_CANVAS, 26,10,28, -1,-1},
{MCARD_WAVE, 26,11,28, -1,-1},
{MCARD_GUS, 26,12,28, -1,-1},
{MCARD_PAS, 26,13,28, -1,-1},
{MCARD_SB, 26,14,28, -1,-1},
{MCARD_ADLIB, 26,15,28, -1,-1},
{MCARD_NONE, 26,16,28, -1,-1}
};
menu_t mcardmenu =
{
&mcarditems[0],
MCARD_NONE,
MCARD_MAX,
0x7f
};
int ChooseMusicCard (void) // RETURN: 0 = OK, -1 == ABORT
{
short key;
short field;
int rval = 0;
switch ( newc.m.card )
{
default:
case M_NONE:
field = MCARD_NONE;
break;
case M_ADLIB:
field = MCARD_ADLIB;
break;
case M_PAS:
field = MCARD_PAS;
break;
case M_GUS:
field = MCARD_GUS;
break;
case M_SB:
field = MCARD_SB;
break;
case M_WAVE:
field = MCARD_WAVE;
break;
case M_CANVAS:
field = MCARD_CANVAS;
break;
case M_SBAWE32:
field = MCARD_SBAWE32;
break;
case M_GMIDI:
field = MCARD_GMIDI;
break;
}
mcardmenu.startitem = field;
SaveScreen();
DrawPup(&mcard);
while(1)
{
SetupMenu(&mcardmenu);
field = GetMenuInput();
key = menukey;
switch ( key )
{
case KEY_ESC:
rval = -1;
goto func_exit;
case KEY_ENTER:
case KEY_F10:
switch ( field )
{
case MCARD_SBAWE32:
newc.m.card = M_SBAWE32;
newc.m.port = -1;
newc.m.irq = -1;
newc.m.dma = -1;
goto func_exit;
case MCARD_GMIDI:
newc.m.card = M_GMIDI;
newc.m.port = -1;
newc.m.irq = -1;
newc.m.dma = -1;
goto func_exit;
case MCARD_CANVAS:
newc.m.card = M_CANVAS;
newc.m.port = -1;
newc.m.irq = -1;
newc.m.dma = -1;
goto func_exit;
case MCARD_WAVE:
newc.m.card = M_WAVE;
newc.m.port = -1;
newc.m.irq = -1;
newc.m.dma = -1;
goto func_exit;
case MCARD_SB:
newc.m.card = M_SB;
goto func_exit;
case MCARD_PAS:
newc.m.card = M_PAS;
newc.m.midiport = -1;
goto func_exit;
case MCARD_GUS:
newc.m.card = M_GUS;
newc.m.midiport = -1;
goto func_exit;
case MCARD_ADLIB:
newc.m.card = M_ADLIB;
newc.m.port = -1;
newc.m.midiport = -1;
newc.m.irq = -1;
newc.m.dma = -1;
goto func_exit;
case MCARD_NONE:
newc.m.card = M_NONE;
newc.m.port = -1;
newc.m.midiport = -1;
newc.m.irq = -1;
newc.m.dma = -1;
goto func_exit;
default:
break;
}
break;
}
}
func_exit:
RestoreScreen();
return ( rval );
}
//
// Choose Music Card menu
//
int SetupMusic (void)
{
if ( ChooseMusicCard() == -1 ) return ( -1 );
DrawCurrentConfig();
switch ( newc.m.card )
{
default:
savemusic = FALSE;
break;
case M_NONE:
savemusic = TRUE;
break;
case M_ADLIB:
savemusic = TRUE;
break;
case M_PAS:
case M_GUS:
savemusic = TRUE;
break;
case M_SB:
if ( ChooseSbPort( &newc.m ) == -1 ) return ( -1 );
savemusic = TRUE;
break;
case M_WAVE:
if ( ChooseMidiPort( &newc.m ) == -1 ) return ( -1 );
savemusic = TRUE;
break;
case M_SBAWE32:
case M_CANVAS:
newc.m.midiport = 0x330;
if ( ChooseMidiPort( &newc.m ) == -1 ) return ( -1 );
savemusic = TRUE;
break;
case M_GMIDI:
if ( ChooseMidiPort( &newc.m ) == -1 ) return ( -1 );
savemusic = TRUE;
break;
}
return 0;
}

553
MUSIC.C Normal file
View File

@@ -0,0 +1,553 @@
#include "main.h"
#include "default.h"
#include "keys.h"
//
// Choose MIDI port
//
enum
{
MIDI_220,
MIDI_230,
MIDI_240,
MIDI_250,
MIDI_300,
MIDI_320,
MIDI_330,
MIDI_332,
MIDI_334,
MIDI_336,
MIDI_340,
MIDI_360,
MIDI_MAX
};
item_t midiportitems[]=
{
{MIDI_220, 32,6,13, -1,-1},
{MIDI_230, 32,7,13, -1,-1},
{MIDI_240, 32,8,13, -1,-1},
{MIDI_250, 32,9,13, -1,-1},
{MIDI_300, 32,10,13, -1,-1},
{MIDI_320, 32,11,13, -1,-1},
{MIDI_330, 32,12,13, -1,-1},
{MIDI_332, 32,13,13, -1,-1},
{MIDI_334, 32,14,13, -1,-1},
{MIDI_336, 32,15,13, -1,-1},
{MIDI_340, 32,16,13, -1,-1},
{MIDI_360, 32,17,13, -1,-1}
};
menu_t midiportmenu=
{
&midiportitems[0],
MIDI_330,
MIDI_MAX,
0x7f
};
int ChooseMidiPort (DMXCARD * card)
{
short field;
short key;
int rval = 0;
SaveScreen();
DrawPup(&midiport);
// DEFAULT FIELD ========================================
switch ( card->midiport )
{
default:
case 0x220:
field = MIDI_220;
break;
case 0x230:
field = MIDI_230;
break;
case 0x240:
field = MIDI_240;
break;
case 0x250:
field = MIDI_250;
break;
case 0x300:
field = MIDI_300;
break;
case 0x320:
field = MIDI_320;
break;
case 0x330:
field = MIDI_330;
break;
case 0x332:
field = MIDI_332;
break;
case 0x334:
field = MIDI_334;
break;
case 0x336:
field = MIDI_336;
break;
case 0x340:
field = MIDI_340;
break;
case 0x360:
field = MIDI_360;
break;
}
while(1)
{
SetupMenu(&midiportmenu);
field = GetMenuInput();
key = menukey;
switch ( key )
{
case KEY_ESC:
rval = -1;
goto func_exit;
case KEY_ENTER:
case KEY_F10:
switch ( field )
{
case MIDI_220:
card->midiport = 0x220;
goto func_exit;
case MIDI_230:
card->midiport = 0x230;
goto func_exit;
case MIDI_240:
card->midiport = 0x240;
goto func_exit;
case MIDI_250:
card->midiport = 0x250;
goto func_exit;
case MIDI_300:
card->midiport = 0x300;
goto func_exit;
case MIDI_320:
card->midiport = 0x320;
goto func_exit;
case MIDI_330:
card->midiport = 0x330;
goto func_exit;
case MIDI_332:
card->midiport = 0x332;
goto func_exit;
case MIDI_334:
card->midiport = 0x334;
goto func_exit;
case MIDI_336:
card->midiport = 0x336;
goto func_exit;
case MIDI_340:
card->midiport = 0x340;
goto func_exit;
case MIDI_360:
card->midiport = 0x360;
goto func_exit;
default:
break;
}
break;
}
}
func_exit:
RestoreScreen();
return ( rval );
}
//
// Choose which SoundBlaster port to use (or any port!)
//
enum
{
SB_PORT_210,
SB_PORT_220,
SB_PORT_230,
SB_PORT_240,
SB_PORT_250,
SB_PORT_260,
SB_PORT_280,
SB_PORT_MAX
};
item_t sbportitems[]=
{
{SB_PORT_210, 32,9,13, -1,-1},
{SB_PORT_220, 32,10,13, -1,-1},
{SB_PORT_230, 32,11,13, -1,-1},
{SB_PORT_240, 32,12,13, -1,-1},
{SB_PORT_250, 32,13,13, -1,-1},
{SB_PORT_260, 32,14,13, -1,-1},
{SB_PORT_280, 32,15,13, -1,-1}
};
menu_t sbportmenu =
{
&sbportitems[0],
SB_PORT_220,
SB_PORT_MAX,
0x7f
};
int ChooseSbPort (DMXCARD * card) // RETURN: 0 = OK, -1 == ABORT
{
short field;
short key;
int rval = 0;
SaveScreen();
DrawPup(&sbport);
// DEFAULT FIELD ========================================
switch ( card->port )
{
default:
field = SB_PORT_220;
break;
case 0x210:
field = SB_PORT_210;
break;
case 0x220:
field = SB_PORT_220;
break;
case 0x230:
field = SB_PORT_230;
break;
case 0x240:
field = SB_PORT_240;
break;
case 0x250:
field = SB_PORT_250;
break;
case 0x260:
field = SB_PORT_260;
break;
case 0x280:
field = SB_PORT_280;
break;
}
sbportmenu.startitem = field;
while(1)
{
SetupMenu(&sbportmenu);
field = GetMenuInput();
key = menukey;
switch ( key )
{
case KEY_ESC:
rval = -1;
goto func_exit;
case KEY_ENTER:
case KEY_F10:
switch ( field )
{
case SB_PORT_210:
card->port = 0x210;
goto func_exit;
case SB_PORT_220:
card->port = 0x220;
goto func_exit;
case SB_PORT_230:
card->port = 0x230;
goto func_exit;
case SB_PORT_240:
card->port = 0x240;
goto func_exit;
case SB_PORT_250:
card->port = 0x250;
goto func_exit;
case SB_PORT_260:
card->port = 0x260;
goto func_exit;
case SB_PORT_280:
card->port = 0x280;
goto func_exit;
default:
break;
}
break;
}
}
func_exit:
RestoreScreen();
return ( rval );
}
//
// Menu for choosing Music Card
//
enum
{
MCARD_GMIDI,
MCARD_SBAWE32,
MCARD_CANVAS,
MCARD_WAVE,
MCARD_GUS,
MCARD_PAS,
MCARD_SB,
MCARD_ADLIB,
MCARD_NONE,
MCARD_MAX
};
item_t mcarditems[]=
{
{MCARD_GMIDI, 26,8,28, -1,-1},
{MCARD_SBAWE32,26,9,28, -1,-1},
{MCARD_CANVAS, 26,10,28, -1,-1},
{MCARD_WAVE, 26,11,28, -1,-1},
{MCARD_GUS, 26,12,28, -1,-1},
{MCARD_PAS, 26,13,28, -1,-1},
{MCARD_SB, 26,14,28, -1,-1},
{MCARD_ADLIB, 26,15,28, -1,-1},
{MCARD_NONE, 26,16,28, -1,-1}
};
menu_t mcardmenu =
{
&mcarditems[0],
MCARD_NONE,
MCARD_MAX,
0x7f
};
int ChooseMusicCard (void) // RETURN: 0 = OK, -1 == ABORT
{
short key;
short field;
int rval = 0;
switch ( newc.m.card )
{
default:
case M_NONE:
field = MCARD_NONE;
break;
case M_ADLIB:
field = MCARD_ADLIB;
break;
case M_PAS:
field = MCARD_PAS;
break;
case M_GUS:
field = MCARD_GUS;
break;
case M_SB:
field = MCARD_SB;
break;
case M_WAVE:
field = MCARD_WAVE;
break;
case M_CANVAS:
field = MCARD_CANVAS;
break;
case M_SBAWE32:
field = MCARD_SBAWE32;
break;
case M_GMIDI:
field = MCARD_GMIDI;
break;
}
mcardmenu.startitem = field;
SaveScreen();
DrawPup(&mcard);
while(1)
{
SetupMenu(&mcardmenu);
field = GetMenuInput();
key = menukey;
switch ( key )
{
case KEY_ESC:
rval = -1;
goto func_exit;
case KEY_ENTER:
case KEY_F10:
switch ( field )
{
case MCARD_SBAWE32:
newc.m.card = M_SBAWE32;
newc.m.port = -1;
newc.m.irq = -1;
newc.m.dma = -1;
goto func_exit;
case MCARD_GMIDI:
newc.m.card = M_GMIDI;
newc.m.port = -1;
newc.m.irq = -1;
newc.m.dma = -1;
goto func_exit;
case MCARD_CANVAS:
newc.m.card = M_CANVAS;
newc.m.port = -1;
newc.m.irq = -1;
newc.m.dma = -1;
goto func_exit;
case MCARD_WAVE:
newc.m.card = M_WAVE;
newc.m.port = -1;
newc.m.irq = -1;
newc.m.dma = -1;
goto func_exit;
case MCARD_SB:
newc.m.card = M_SB;
goto func_exit;
case MCARD_PAS:
newc.m.card = M_PAS;
newc.m.midiport = -1;
goto func_exit;
case MCARD_GUS:
newc.m.card = M_GUS;
newc.m.midiport = -1;
goto func_exit;
case MCARD_ADLIB:
newc.m.card = M_ADLIB;
newc.m.port = -1;
newc.m.midiport = -1;
newc.m.irq = -1;
newc.m.dma = -1;
goto func_exit;
case MCARD_NONE:
newc.m.card = M_NONE;
newc.m.port = -1;
newc.m.midiport = -1;
newc.m.irq = -1;
newc.m.dma = -1;
goto func_exit;
default:
break;
}
break;
}
}
func_exit:
RestoreScreen();
return ( rval );
}
//
// Choose Music Card menu
//
int SetupMusic (void)
{
if ( ChooseMusicCard() == -1 ) return ( -1 );
DrawCurrentConfig();
switch ( newc.m.card )
{
default:
savemusic = FALSE;
break;
case M_NONE:
savemusic = TRUE;
break;
case M_ADLIB:
savemusic = TRUE;
break;
case M_PAS:
case M_GUS:
savemusic = TRUE;
break;
case M_SB:
if ( ChooseSbPort( &newc.m ) == -1 ) return ( -1 );
savemusic = TRUE;
break;
case M_WAVE:
if ( ChooseMidiPort( &newc.m ) == -1 ) return ( -1 );
savemusic = TRUE;
break;
case M_SBAWE32:
case M_CANVAS:
newc.m.midiport = 0x330;
if ( ChooseMidiPort( &newc.m ) == -1 ) return ( -1 );
savemusic = TRUE;
break;
case M_GMIDI:
if ( ChooseMidiPort( &newc.m ) == -1 ) return ( -1 );
savemusic = TRUE;
break;
}
return 0;
}

BIN
MUSIC.OBJ Normal file

Binary file not shown.

430
NET.BAK Normal file
View File

@@ -0,0 +1,430 @@
//
// Enter network config info
//
#include <process.h>
#include <dos.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <bios.h>
#include "main.h"
#include "default.h"
#ifndef DOOM2
#define NET_EPY 3 // Y-coord for Episode group
#define NET_NPY 7 // Number of players
#define NET_SKY 11 // Skill level
#define NET_DMY 17 // Deathmatch
#define NET_STY 20 // Socket value
#else
#define NET_NPY 5
#define NET_SKY 9
#define NET_DMY 15
#define NET_STY 18
#endif
#ifndef DOOM2
// # of players radio group
radio_t netepi[]=
{
{28,NET_EPY,1},
{28,NET_EPY+1,2},
{28,NET_EPY+2,3}
};
radiogroup_t netepig={&netepi[0],3,&info.episode,15,1};
#endif
// # of players radio group
radio_t netp[]=
{
{28,NET_NPY,2},
{28,NET_NPY+1,3},
{28,NET_NPY+2,4}
};
radiogroup_t netpg={&netp[0],3,&info.numberOfPlayers,15,1};
// SKILL radio group
radio_t netskill[]=
{
{28,NET_SKY,1},
{28,NET_SKY+1,2},
{28,NET_SKY+2,3},
{28,NET_SKY+3,4},
{28,NET_SKY+4,5}
};
radiogroup_t netskillg={&netskill[0],5,&info.skillLevel,15,1};
// DEATHMATCH radio group
radio_t netdeath[]=
{
{28,NET_DMY,0},
{28,NET_DMY+1,1}
};
radiogroup_t netdeathg={&netdeath[0],2,&info.deathMatch,15,1};
enum
{
#ifndef DOOM2
NET_EPISODE0, NET_EPISODE1, NET_EPISODE2,
#endif
NET_P2, NET_P3, NET_P4,
NET_SKILL1, NET_SKILL2, NET_SKILL3, NET_SKILL4, NET_SKILL5,
NET_DEATHNO, NET_DEATHYES,
NET_SOCKET,
NET_MAX
};
item_t netwkitems[]=
{
#ifndef DOOM2
{NET_EPISODE0, 31,NET_EPY,21, -1,-1},
{NET_EPISODE1, 31,NET_EPY+1,21, -1,-1},
{NET_EPISODE2, 31,NET_EPY+2,21, -1,-1},
#endif
{NET_P2, 31,NET_NPY,20, -1,-1},
{NET_P3, 31,NET_NPY+1,20, -1,-1},
{NET_P4, 31,NET_NPY+2,20, -1,-1},
{NET_SKILL1, 31,NET_SKY,20, -1,-1},
{NET_SKILL2, 31,NET_SKY+1,20, -1,-1},
{NET_SKILL3, 31,NET_SKY+2,20, -1,-1},
{NET_SKILL4, 31,NET_SKY+3,20, -1,-1},
{NET_SKILL5, 31,NET_SKY+4,20, -1,-1},
{NET_DEATHNO, 31,NET_DMY,20, -1,-1},
{NET_DEATHYES, 31,NET_DMY+1,20, -1,-1},
{NET_SOCKET, 28,NET_STY,12, -1,-1},
};
menu_t netwkmenu=
{
&netwkitems[0],
#ifndef DOOM2
NET_EPISODE0,
#else
NET_P2,
#endif
NET_MAX,
0x7f
};
int NetworkConfig(void)
{
short key;
short field;
int rval = 0;
char *args[MAXARGS];
int argcount;
char string[MAXARGS*2][12];
int i;
int level;
char tempstring[10];
info = netinfo; // save copy of netinfo
SaveScreen();
DrawPup(&netwk2);
//
// Set defaults
//
info.networkSocket = 0;
textbackground(1);
textcolor(15);
Clear(&netwkitems[NET_SOCKET]);
Pos(&netwkitems[NET_SOCKET]);
cprintf("%u",info.networkSocket);
gotoxy(1,25);
info.numberOfPlayers = 2;
DrawRadios(&netpg);
info.skillLevel = 3;
DrawRadios(&netskillg);
info.episode = 1;
#ifndef DOOM2
DrawRadios(&netepig);
#endif
info.deathMatch = 0;
DrawRadios(&netdeathg);
while(1)
{
SetupMenu(&netwkmenu);
field = GetMenuInput();
key = menukey;
switch ( key )
{
case KEY_ESC:
rval = -1;
goto func_exit;
//
// WARP
//
case KEY_F1:
{
level = WarpTime();
if (!level)
continue;
#pragma warn -cln
if (info.networkSocket > 64000)
#pragma warn +cln
{
sound(100);
delay(3);
nosound();
textcolor(0);
textbackground(7);
gotoxy(2,25);
cprintf("Invalid port socket value! Re-enter it.");
netwkmenu.startitem = NET_SOCKET;
gotoxy(1,25);
goto func_exit;
}
netinfo = info;
M_SaveDefaults();
RestoreScreen();
argcount = 1;
args[0] = "ipxsetup.exe";
if (cdrom)
args[argcount++] = "-cdrom";
args[argcount++] = "-nodes";
sprintf(string[argcount],"%d",netinfo.numberOfPlayers);
args[argcount] = string[argcount];
argcount++;
args[argcount++] = "-skill";
sprintf(string[argcount],"%d",netinfo.skillLevel);
args[argcount] = string[argcount];
argcount++;
if (!level)
{
#ifndef DOOM2
args[argcount++] = "-episode";
sprintf(string[argcount],"%d",netinfo.episode);
args[argcount] = string[argcount];
argcount++;
#endif
}
else
{
args[argcount++] = "-warp";
#ifdef DOOM2
sprintf(string[argcount],"%d",level);
args[argcount] = string[argcount];
#else
sprintf(string[argcount],"%d",level>>8);
args[argcount] = string[argcount];
argcount++;
sprintf(string[argcount],"%d",level&0x0f);
args[argcount] = string[argcount];
#endif
argcount++;
}
if (netinfo.networkSocket)
{
args[argcount++] = "-port";
sprintf(string[argcount],"%u",netinfo.networkSocket);
args[argcount] = string[argcount];
argcount++;
}
if (netinfo.deathMatch)
args[argcount++] = "-deathmatch";
if (nomonsters)
args[argcount++] = "-nomonsters";
if (respawn)
args[argcount++] = "-respawn";
if (deathmatch2)
args[argcount++] = "-altdeath";
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);
}
break;
exitandsave:
case KEY_F10:
#pragma warn -cln
if (info.networkSocket > 64000)
#pragma warn +cln
{
sound(100);
delay(3);
nosound();
textcolor(0);
textbackground(7);
gotoxy(2,25);
cprintf("Invalid port socket value! Re-enter it.");
gotoxy(1,25);
netwkmenu.startitem = NET_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",netinfo.numberOfPlayers);
args[argcount] = string[argcount];
argcount++;
args[argcount++] = "-skill";
sprintf(string[argcount],"%d",netinfo.skillLevel);
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";
#ifndef DOOM2
args[argcount++] = "-episode";
sprintf(string[argcount],"%d",netinfo.episode);
args[argcount] = string[argcount];
argcount++;
#endif
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 )
{
#ifndef DOOM2
//
// Episode
//
case NET_EPISODE0:
case NET_EPISODE1:
case NET_EPISODE2:
info.episode = field - NET_EPISODE0 + 1;
break;
#endif
//
// Number of players
//
case NET_P2:
case NET_P3:
case NET_P4:
info.numberOfPlayers = field - NET_P2 + 2;
break;
//
// Skill level
//
case NET_SKILL1:
case NET_SKILL2:
case NET_SKILL3:
case NET_SKILL4:
case NET_SKILL5:
info.skillLevel = field - NET_SKILL1 + 1; break;
//
// Deathmatch
//
case NET_DEATHNO:
case NET_DEATHYES:
info.deathMatch = field - NET_DEATHNO; break;
//
// Network socket #
//
case NET_SOCKET:
ltoa(info.networkSocket,tempstring,10);
key = EditLine(&netwkitems[NET_SOCKET],tempstring,8);
if (key == KEY_ENTER)
info.networkSocket = atoi(tempstring);
textcolor(15);
textbackground(1);
Clear(&netwkitems[NET_SOCKET]);
Pos(&netwkitems[NET_SOCKET]);
cprintf("%u",info.networkSocket);
gotoxy(1,25);
break;
default:
break;
}
#ifndef DOOM2
DrawRadios(&netepig);
#endif
DrawRadios(&netpg);
DrawRadios(&netskillg);
DrawRadios(&netdeathg);
break;
}
}
func_exit:
RestoreScreen();
return ( rval );
}

430
NET.C Normal file
View File

@@ -0,0 +1,430 @@
//
// Enter network config info
//
#include <process.h>
#include <dos.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <bios.h>
#include "main.h"
#include "default.h"
#ifndef DOOM2
#define NET_EPY 3 // Y-coord for Episode group
#define NET_NPY 7 // Number of players
#define NET_SKY 11 // Skill level
#define NET_DMY 17 // Deathmatch
#define NET_STY 20 // Socket value
#else
#define NET_NPY 5
#define NET_SKY 9
#define NET_DMY 15
#define NET_STY 18
#endif
#ifndef DOOM2
// # of players radio group
radio_t netepi[]=
{
{28,NET_EPY,1},
{28,NET_EPY+1,2},
{28,NET_EPY+2,3}
};
radiogroup_t netepig={&netepi[0],3,&info.episode,15,1};
#endif
// # of players radio group
radio_t netp[]=
{
{28,NET_NPY,2},
{28,NET_NPY+1,3},
{28,NET_NPY+2,4}
};
radiogroup_t netpg={&netp[0],3,&info.numberOfPlayers,15,1};
// SKILL radio group
radio_t netskill[]=
{
{28,NET_SKY,1},
{28,NET_SKY+1,2},
{28,NET_SKY+2,3},
{28,NET_SKY+3,4},
{28,NET_SKY+4,5}
};
radiogroup_t netskillg={&netskill[0],5,&info.skillLevel,15,1};
// DEATHMATCH radio group
radio_t netdeath[]=
{
{28,NET_DMY,0},
{28,NET_DMY+1,1}
};
radiogroup_t netdeathg={&netdeath[0],2,&info.deathMatch,15,1};
enum
{
#ifndef DOOM2
NET_EPISODE0, NET_EPISODE1, NET_EPISODE2,
#endif
NET_P2, NET_P3, NET_P4,
NET_SKILL1, NET_SKILL2, NET_SKILL3, NET_SKILL4, NET_SKILL5,
NET_DEATHNO, NET_DEATHYES,
NET_SOCKET,
NET_MAX
};
item_t netwkitems[]=
{
#ifndef DOOM2
{NET_EPISODE0, 31,NET_EPY,21, -1,-1},
{NET_EPISODE1, 31,NET_EPY+1,21, -1,-1},
{NET_EPISODE2, 31,NET_EPY+2,21, -1,-1},
#endif
{NET_P2, 31,NET_NPY,21, -1,-1},
{NET_P3, 31,NET_NPY+1,21, -1,-1},
{NET_P4, 31,NET_NPY+2,21, -1,-1},
{NET_SKILL1, 31,NET_SKY,21, -1,-1},
{NET_SKILL2, 31,NET_SKY+1,21, -1,-1},
{NET_SKILL3, 31,NET_SKY+2,21, -1,-1},
{NET_SKILL4, 31,NET_SKY+3,21, -1,-1},
{NET_SKILL5, 31,NET_SKY+4,21, -1,-1},
{NET_DEATHNO, 31,NET_DMY,20, -1,-1},
{NET_DEATHYES, 31,NET_DMY+1,20, -1,-1},
{NET_SOCKET, 28,NET_STY,12, -1,-1},
};
menu_t netwkmenu=
{
&netwkitems[0],
#ifndef DOOM2
NET_EPISODE0,
#else
NET_P2,
#endif
NET_MAX,
0x7f
};
int NetworkConfig(void)
{
short key;
short field;
int rval = 0;
char *args[MAXARGS];
int argcount;
char string[MAXARGS*2][12];
int i;
int level;
char tempstring[10];
info = netinfo; // save copy of netinfo
SaveScreen();
DrawPup(&netwk2);
//
// Set defaults
//
info.networkSocket = 0;
textbackground(1);
textcolor(15);
Clear(&netwkitems[NET_SOCKET]);
Pos(&netwkitems[NET_SOCKET]);
cprintf("%u",info.networkSocket);
gotoxy(1,25);
info.numberOfPlayers = 2;
DrawRadios(&netpg);
info.skillLevel = 3;
DrawRadios(&netskillg);
info.episode = 1;
#ifndef DOOM2
DrawRadios(&netepig);
#endif
info.deathMatch = 0;
DrawRadios(&netdeathg);
while(1)
{
SetupMenu(&netwkmenu);
field = GetMenuInput();
key = menukey;
switch ( key )
{
case KEY_ESC:
rval = -1;
goto func_exit;
//
// WARP
//
case KEY_F1:
{
level = WarpTime();
if (!level)
continue;
#pragma warn -cln
if (info.networkSocket > 64000)
#pragma warn +cln
{
sound(100);
delay(3);
nosound();
textcolor(0);
textbackground(7);
gotoxy(2,25);
cprintf("Invalid port socket value! Re-enter it.");
netwkmenu.startitem = NET_SOCKET;
gotoxy(1,25);
goto func_exit;
}
netinfo = info;
M_SaveDefaults();
RestoreScreen();
argcount = 1;
args[0] = "ipxsetup.exe";
if (cdrom)
args[argcount++] = "-cdrom";
args[argcount++] = "-nodes";
sprintf(string[argcount],"%d",netinfo.numberOfPlayers);
args[argcount] = string[argcount];
argcount++;
args[argcount++] = "-skill";
sprintf(string[argcount],"%d",netinfo.skillLevel);
args[argcount] = string[argcount];
argcount++;
if (!level)
{
#ifndef DOOM2
args[argcount++] = "-episode";
sprintf(string[argcount],"%d",netinfo.episode);
args[argcount] = string[argcount];
argcount++;
#endif
}
else
{
args[argcount++] = "-warp";
#ifdef DOOM2
sprintf(string[argcount],"%d",level);
args[argcount] = string[argcount];
#else
sprintf(string[argcount],"%d",level>>8);
args[argcount] = string[argcount];
argcount++;
sprintf(string[argcount],"%d",level&0x0f);
args[argcount] = string[argcount];
#endif
argcount++;
}
if (netinfo.networkSocket)
{
args[argcount++] = "-port";
sprintf(string[argcount],"%u",netinfo.networkSocket);
args[argcount] = string[argcount];
argcount++;
}
if (netinfo.deathMatch)
args[argcount++] = "-deathmatch";
if (nomonsters)
args[argcount++] = "-nomonsters";
if (respawn)
args[argcount++] = "-respawn";
if (deathmatch2)
args[argcount++] = "-altdeath";
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);
}
break;
exitandsave:
case KEY_F10:
#pragma warn -cln
if (info.networkSocket > 64000)
#pragma warn +cln
{
sound(100);
delay(3);
nosound();
textcolor(0);
textbackground(7);
gotoxy(2,25);
cprintf("Invalid port socket value! Re-enter it.");
gotoxy(1,25);
netwkmenu.startitem = NET_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",netinfo.numberOfPlayers);
args[argcount] = string[argcount];
argcount++;
args[argcount++] = "-skill";
sprintf(string[argcount],"%d",netinfo.skillLevel);
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";
#ifndef DOOM2
args[argcount++] = "-episode";
sprintf(string[argcount],"%d",netinfo.episode);
args[argcount] = string[argcount];
argcount++;
#endif
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 )
{
#ifndef DOOM2
//
// Episode
//
case NET_EPISODE0:
case NET_EPISODE1:
case NET_EPISODE2:
info.episode = field - NET_EPISODE0 + 1;
break;
#endif
//
// Number of players
//
case NET_P2:
case NET_P3:
case NET_P4:
info.numberOfPlayers = field - NET_P2 + 2;
break;
//
// Skill level
//
case NET_SKILL1:
case NET_SKILL2:
case NET_SKILL3:
case NET_SKILL4:
case NET_SKILL5:
info.skillLevel = field - NET_SKILL1 + 1; break;
//
// Deathmatch
//
case NET_DEATHNO:
case NET_DEATHYES:
info.deathMatch = field - NET_DEATHNO; break;
//
// Network socket #
//
case NET_SOCKET:
ltoa(info.networkSocket,tempstring,10);
key = EditLine(&netwkitems[NET_SOCKET],tempstring,8);
if (key == KEY_ENTER)
info.networkSocket = atoi(tempstring);
textcolor(15);
textbackground(1);
Clear(&netwkitems[NET_SOCKET]);
Pos(&netwkitems[NET_SOCKET]);
cprintf("%u",info.networkSocket);
gotoxy(1,25);
break;
default:
break;
}
#ifndef DOOM2
DrawRadios(&netepig);
#endif
DrawRadios(&netpg);
DrawRadios(&netskillg);
DrawRadios(&netdeathg);
break;
}
}
func_exit:
RestoreScreen();
return ( rval );
}

BIN
NET.OBJ Normal file

Binary file not shown.

350
NETPLAY.BAK Normal file
View File

@@ -0,0 +1,350 @@
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <string.h>
#include <bios.h>
#include "main.h"
//
// Choose which type of modem to use
//
modem_t modems[MAXMODEMS];
int numModems;
//
// Draw a bar of attributes
//
void AttriBar(int x,int y,int length, char attr)
{
int i;
char far *screen;
screen = MK_FP(0xb800, y*160 + x*2 + 1);
for (i = 0;i < length;i++)
{
*screen = attr;
screen += 2;
}
}
//
// Parse the MODOOM.STR file
//
int ParseMODOOM(void)
{
int i;
int ok;
FILE *fp;
int rv;
int found;
fp = fopen("MODEM.STR","rt");
if (fp == NULL)
{
gotoxy(2,25);
cprintf("There's no MODEM.STR file! Press a key. ");
gotoxy(1,25);
sound(2500);
delay(3);
nosound();
getch();
return 0;
}
i = 0;
ok = 1;
do
{
rv = fscanf(fp,"%[^\n]",&modems[i].name);
if (!rv || rv == EOF)
ok = 0;
rv = fscanf(fp,"\n");
if (rv == EOF)
ok = 0;
rv = fscanf(fp,"%[^\n]",&modems[i].init);
if (!rv || rv == EOF)
ok = 0;
rv = fscanf(fp,"\n");
if (rv == EOF)
ok = 0;
rv = fscanf(fp,"%[^\n]",&modems[i].hangup);
if (!rv || rv == EOF)
ok = 0;
rv = fscanf(fp,"\n");
if (rv == EOF)
ok = 0;
rv = fscanf(fp,"%[^\n]",&modems[i].baud);
if (!rv || rv == EOF)
ok = 0;
rv = fscanf(fp,"\n\n");
if (rv == EOF)
ok = 0;
i++;
} while(ok);
numModems = i;
fclose(fp);
//
// Quick little shell sort
//
do
{
int j;
found = 0;
for (i = 0; i < numModems-1; i++)
for (j = i+1; j < numModems; j++)
if (strcmp(modems[j].name,modems[i].name)<0)
{
modem_t temp;
temp = modems[j];
modems[j] = modems[i];
modems[i] = temp;
found = 1;
}
} while(found);
return 1;
}
//
// Blit the modem names to the screen
//
void BlitModemNames(int start)
{
int i;
int max;
int y;
int j;
int len;
max = start + 10;
if (max > numModems)
max = numModems;
y = 8;
textbackground(1);
textcolor(11);
for (i = start; i < max; i++)
{
gotoxy(27,y++);
cprintf("%s",modems[i].name);
len = 27 - strlen(modems[i].name);
for (j = 0; j < len; j++)
cprintf(" ");
}
gotoxy(1,25);
}
void ChooseModem(void)
{
int xit;
int blitY;
int hliteY;
int lastHliteY;
FILE *fp;
if (!ParseMODOOM())
return;
SaveScreen();
DrawPup(&modemchs);
textbackground(7);
textcolor(0);
#ifndef FRENCH
gotoxy(2,25);
cprintf("Choose the type of modem you are going to use.");
gotoxy(1,25);
#endif
xit = 0;
blitY = 0;
lastHliteY = hliteY = 0;
do
{
int key;
BlitModemNames(blitY);
textbackground(7);
textcolor(0);
gotoxy(70,25);
cprintf("%s ",modems[hliteY + blitY].baud);
gotoxy(1,25);
AttriBar(26,lastHliteY+7,27,0x1b);
lastHliteY = hliteY;
AttriBar(26,hliteY+7,27,0x7f);
key = _bios_keybrd(_NKEYBRD_READ)>>8;
switch(key)
{
case 0x1c: // ENTER
gotoxy(2,25);
cprintf("Writing %s to MODEM.CFG...",modems[blitY + hliteY].name);
gotoxy(1,25);
fp = fopen("MODEM.CFG","w+t");
if (fp == NULL)
{
gotoxy(2,25);
cprintf("Error writing to MODEM.CFG. Press a key.");
gotoxy(1,25);
getch();
break;
}
fprintf(fp,"%s\n%s\n%s\n%s\n\n",
modems[blitY + hliteY].init,
modems[blitY + hliteY].hangup,
modems[blitY + hliteY].baud,
modems[blitY + hliteY].name);
fclose(fp);
xit = 1;
break;
case SC_ESC: // ESC
xit = 1;
break;
case 0x48: // UP
if (hliteY > 5)
hliteY--;
else
if (hliteY > 0 && blitY > 0)
blitY--;
else
if (!blitY && hliteY)
hliteY--;
else
if (!hliteY && blitY)
blitY--;
break;
case 0x50: // DOWN
if (hliteY > 4 && blitY+10<numModems)
blitY++;
else
if (hliteY < 9 &&
((blitY+10 == numModems) ||
(hliteY < numModems - 1)))
hliteY++;
break;
case 0x49: // PGUP
blitY -= 9;
if (blitY < 0)
hliteY = blitY = 0;
break;
case 0x51: // PGDN
blitY += 9;
if (blitY+10 > numModems)
{
blitY = numModems - 10;
hliteY = 9;
}
if (numModems < 10)
{
blitY = 0;
hliteY = numModems - 1;
}
break;
}
} while(!xit);
RestoreScreen();
}
//
// Choose which type of netplay
//
enum {GT_IPX,GT_MODEM,GT_SERIAL,GT_CHOOSE,GT_MACROS,GT_MAX};
item_t netplayitems[]=
{
{GT_IPX, 26,9,27, -1,-1},
{GT_MODEM, 26,10,27, -1,-1},
{GT_SERIAL, 26,11,27, -1,-1},
{GT_CHOOSE, 26,13,27, -1,-1},
{GT_MACROS, 26,14,27, -1,-1}
};
menu_t netplaymenu=
{
&netplayitems[0],
GT_IPX,
GT_MAX,
0x7f
};
void ChooseNetplay(void)
{
short key;
short field;
SaveScreen();
DrawPup(&netplay);
while(1)
{
SetupMenu(&netplaymenu);
field = GetMenuInput();
key = menukey;
switch(key)
{
case KEY_ESC:
RestoreScreen();
return;
case KEY_ENTER:
if (field == GT_CHOOSE)
{
ChooseModem();
continue;
}
switch(field)
{
case GT_IPX:
// NetworkConfig();
break;
case GT_MODEM:
ModemConfig();
break;
case GT_SERIAL:
SerialConfig();
break;
case GT_MACROS:
MacroConfig();
break;
}
RestoreScreen();
return;
}
}
}

350
NETPLAY.C Normal file
View File

@@ -0,0 +1,350 @@
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <string.h>
#include <bios.h>
#include "main.h"
//
// Choose which type of modem to use
//
modem_t modems[MAXMODEMS];
int numModems;
//
// Draw a bar of attributes
//
void AttriBar(int x,int y,int length, char attr)
{
int i;
char far *screen;
screen = MK_FP(0xb800, y*160 + x*2 + 1);
for (i = 0;i < length;i++)
{
*screen = attr;
screen += 2;
}
}
//
// Parse the MODOOM.STR file
//
int ParseMODOOM(void)
{
int i;
int ok;
FILE *fp;
int rv;
int found;
fp = fopen("MODEM.STR","rt");
if (fp == NULL)
{
gotoxy(2,25);
cprintf("There's no MODEM.STR file! Press a key. ");
gotoxy(1,25);
sound(2500);
delay(3);
nosound();
getch();
return 0;
}
i = 0;
ok = 1;
do
{
rv = fscanf(fp,"%[^\n]",&modems[i].name);
if (!rv || rv == EOF)
ok = 0;
rv = fscanf(fp,"\n");
if (rv == EOF)
ok = 0;
rv = fscanf(fp,"%[^\n]",&modems[i].init);
if (!rv || rv == EOF)
ok = 0;
rv = fscanf(fp,"\n");
if (rv == EOF)
ok = 0;
rv = fscanf(fp,"%[^\n]",&modems[i].hangup);
if (!rv || rv == EOF)
ok = 0;
rv = fscanf(fp,"\n");
if (rv == EOF)
ok = 0;
rv = fscanf(fp,"%[^\n]",&modems[i].baud);
if (!rv || rv == EOF)
ok = 0;
rv = fscanf(fp,"\n\n");
if (rv == EOF)
ok = 0;
i++;
} while(ok);
numModems = i;
fclose(fp);
//
// Quick little shell sort
//
do
{
int j;
found = 0;
for (i = 0; i < numModems-1; i++)
for (j = i+1; j < numModems; j++)
if (strcmp(modems[j].name,modems[i].name)<0)
{
modem_t temp;
temp = modems[j];
modems[j] = modems[i];
modems[i] = temp;
found = 1;
}
} while(found);
return 1;
}
//
// Blit the modem names to the screen
//
void BlitModemNames(int start)
{
int i;
int max;
int y;
int j;
int len;
max = start + 10;
if (max > numModems)
max = numModems;
y = 8;
textbackground(1);
textcolor(11);
for (i = start; i < max; i++)
{
gotoxy(27,y++);
cprintf("%s",modems[i].name);
len = 27 - strlen(modems[i].name);
for (j = 0; j < len; j++)
cprintf(" ");
}
gotoxy(1,25);
}
void ChooseModem(void)
{
int xit;
int blitY;
int hliteY;
int lastHliteY;
FILE *fp;
if (!ParseMODOOM())
return;
SaveScreen();
DrawPup(&modemchs);
textbackground(7);
textcolor(0);
#ifndef FRENCH
gotoxy(2,25);
cprintf("Choose the type of modem you are going to use.");
gotoxy(1,25);
#endif
xit = 0;
blitY = 0;
lastHliteY = hliteY = 0;
do
{
int key;
BlitModemNames(blitY);
textbackground(7);
textcolor(0);
gotoxy(70,25);
cprintf("%s ",modems[hliteY + blitY].baud);
gotoxy(1,25);
AttriBar(26,lastHliteY+7,27,0x1b);
lastHliteY = hliteY;
AttriBar(26,hliteY+7,27,0x7f);
key = _bios_keybrd(_NKEYBRD_READ)>>8;
switch(key)
{
case 0x1c: // ENTER
gotoxy(2,25);
cprintf("Writing %s to MODEM.CFG...",modems[blitY + hliteY].name);
gotoxy(1,25);
fp = fopen("MODEM.CFG","w+t");
if (fp == NULL)
{
gotoxy(2,25);
cprintf("Error writing to MODEM.CFG. Press a key.");
gotoxy(1,25);
getch();
break;
}
fprintf(fp,"%s\n%s\n%s\n%s\n\n",
modems[blitY + hliteY].init,
modems[blitY + hliteY].hangup,
modems[blitY + hliteY].baud,
modems[blitY + hliteY].name);
fclose(fp);
xit = 1;
break;
case SC_ESC: // ESC
xit = 1;
break;
case 0x48: // UP
if (hliteY > 5)
hliteY--;
else
if (hliteY > 0 && blitY > 0)
blitY--;
else
if (!blitY && hliteY)
hliteY--;
else
if (!hliteY && blitY)
blitY--;
break;
case 0x50: // DOWN
if (hliteY > 4 && blitY+10<numModems)
blitY++;
else
if (hliteY < 9 &&
((blitY+10 == numModems) ||
(hliteY < numModems - 1)))
hliteY++;
break;
case 0x49: // PGUP
blitY -= 9;
if (blitY < 0)
hliteY = blitY = 0;
break;
case 0x51: // PGDN
blitY += 9;
if (blitY+10 > numModems)
{
blitY = numModems - 10;
hliteY = 9;
}
if (numModems < 10)
{
blitY = 0;
hliteY = numModems - 1;
}
break;
}
} while(!xit);
RestoreScreen();
}
//
// Choose which type of netplay
//
enum {GT_IPX,GT_MODEM,GT_SERIAL,GT_CHOOSE,GT_MACROS,GT_MAX};
item_t netplayitems[]=
{
{GT_IPX, 26,9,27, -1,-1},
{GT_MODEM, 26,10,27, -1,-1},
{GT_SERIAL, 26,11,27, -1,-1},
{GT_CHOOSE, 26,13,27, -1,-1},
{GT_MACROS, 26,14,27, -1,-1}
};
menu_t netplaymenu=
{
&netplayitems[0],
GT_IPX,
GT_MAX,
0x7f
};
void ChooseNetplay(void)
{
short key;
short field;
SaveScreen();
DrawPup(&netplay);
while(1)
{
SetupMenu(&netplaymenu);
field = GetMenuInput();
key = menukey;
switch(key)
{
case KEY_ESC:
RestoreScreen();
return;
case KEY_ENTER:
if (field == GT_CHOOSE)
{
ChooseModem();
continue;
}
switch(field)
{
case GT_IPX:
NetworkConfig();
break;
case GT_MODEM:
ModemConfig();
break;
case GT_SERIAL:
SerialConfig();
break;
case GT_MACROS:
MacroConfig();
break;
}
RestoreScreen();
return;
}
}
}

BIN
NETPLAY.OBJ Normal file

Binary file not shown.

325
NETREST.BAK Normal file
View File

@@ -0,0 +1,325 @@
//
// 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;
}
}
}

325
NETREST.C Normal file
View File

@@ -0,0 +1,325 @@
//
// 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,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(&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;
}
}
}

BIN
NETREST.OBJ Normal file

Binary file not shown.

655
OLDSETUP.BAK Normal file
View File

@@ -0,0 +1,655 @@
//===================================================
//
// Enter modem savegame info
//
//===================================================
int RestoreModem(void)
{
char * wstr = "MODSAVE";
short *window;
short field;
int rval = 0;
char *args[MAXARGS];
int argcount;
char string[MAXARGS*2][16];
union REGS r;
int i;
int numplayers[6];
int saveslot;
int handle;
char name[32];
char p1,p2,p3,p4;
minfo = modeminfo; // save copy of netinfo
field = MS_SAVEGAME0; // FIRST FIELD TO LIGHT BAR
if ( ( window = IWD_OpenWindow( NULL, wstr ) ) == NULL )
{
IWD_CloseWRF ( NULL );
printf( "\nError opening %s window.\n", wstr );
exit(1);
}
saveslot = -1;
memset(savenames,0,6*24);
//
// Read in savegame strings
//
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);
IWD_PutFieldData(window,MS_SAVEGAME0+i,savenames[i]);
}
//
// Set defaults
//
IWD_SetFieldMark(window,MS_CONTYPE0M,0);
IWD_SetFieldMark(window,MS_CONTYPE1M,1);
IWD_SetFieldMark(window,MS_CONTYPE2M,0);
minfo.comtype = 1;
IWD_SetFieldMark(window,MS_COM1M,1);
IWD_SetFieldMark(window,MS_COM2M,0);
IWD_SetFieldMark(window,MS_COM3M,0);
IWD_SetFieldMark(window,MS_COM4M,0);
minfo.comport = 1;
IWD_SetFieldMark(window,MS_DEATHNOM2,1);
IWD_SetFieldMark(window,MS_DEATHYESM2,0);
minfo.deathMatch = 0;
strcpy(minfo.phonenum,"");
IWD_PutFieldDataType(window,MS_PHONENUM, FTYPE_STRING,&minfo.phonenum);
IWD_ShowWindow ( window );
for (;;)
{
switch ( IWD_Dialog ( window, &field, DialogControl, hot_keys ) )
{
case KEY_ESC:
rval = -1;
goto func_exit;
exitandsave:
case KEY_F10:
if (saveslot < 0)
{
short *window;
if ( ( window = IWD_OpenWindow( NULL, "NETSERR" ) ) == NULL )
exit(1);
IWD_ShowWindow ( window );
while(kbhit());
getch();
IWD_CloseWindow( window );
break;
}
IWD_GetFieldDataType(window,MS_PHONENUM,FTYPE_STRING,&minfo.phonenum);
modeminfo = minfo;
M_SaveDefaults();
IWD_CloseWRF( NULL );
IWD_Shutdown();
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;
r.x.ax = 3;
int86(0x10,&r,&r);
execv("sersetup.exe",args);
//
// ERROR EXECing!
//
printf("Problem EXECing SERSETUP for netplay. Need to be in same directory!");
exit(0);
case KEY_CR:
case 32:
switch ( field )
{
case MS_COM1:
IWD_SetFieldMark(window,MS_COM1M,1);
IWD_SetFieldMark(window,MS_COM2M,0);
IWD_SetFieldMark(window,MS_COM3M,0);
IWD_SetFieldMark(window,MS_COM4M,0);
minfo.comport = 1;
break;
case MS_COM2:
IWD_SetFieldMark(window,MS_COM1M,0);
IWD_SetFieldMark(window,MS_COM2M,1);
IWD_SetFieldMark(window,MS_COM3M,0);
IWD_SetFieldMark(window,MS_COM4M,0);
minfo.comport = 2;
break;
case MS_COM3:
IWD_SetFieldMark(window,MS_COM1M,0);
IWD_SetFieldMark(window,MS_COM2M,0);
IWD_SetFieldMark(window,MS_COM3M,1);
IWD_SetFieldMark(window,MS_COM4M,0);
minfo.comport = 3;
break;
case MS_COM4:
IWD_SetFieldMark(window,MS_COM1M,0);
IWD_SetFieldMark(window,MS_COM2M,0);
IWD_SetFieldMark(window,MS_COM3M,0);
IWD_SetFieldMark(window,MS_COM4M,1);
minfo.comport = 4;
break;
case MS_CONTYPE0:
IWD_SetFieldMark(window,MS_CONTYPE0M,1);
IWD_SetFieldMark(window,MS_CONTYPE1M,0);
IWD_SetFieldMark(window,MS_CONTYPE2M,0);
minfo.comtype = 0;
break;
case MS_CONTYPE1:
IWD_SetFieldMark(window,MS_CONTYPE0M,0);
IWD_SetFieldMark(window,MS_CONTYPE1M,1);
IWD_SetFieldMark(window,MS_CONTYPE2M,0);
minfo.comtype = 1;
break;
case MS_CONTYPE2:
IWD_SetFieldMark(window,MS_CONTYPE0M,0);
IWD_SetFieldMark(window,MS_CONTYPE1M,0);
IWD_SetFieldMark(window,MS_CONTYPE2M,1);
minfo.comtype = 2;
field = MS_PHONENUM;
break;
case MS_SAVEGAME0:
if (!savenames[0][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 0;
IWD_SetFieldMark(window,MS_SAVEGAME0M,1);
IWD_SetFieldMark(window,MS_SAVEGAME1M,0);
IWD_SetFieldMark(window,MS_SAVEGAME2M,0);
IWD_SetFieldMark(window,MS_SAVEGAME3M,0);
IWD_SetFieldMark(window,MS_SAVEGAME4M,0);
IWD_SetFieldMark(window,MS_SAVEGAME5M,0);
break;
case MS_SAVEGAME1:
if (!savenames[1][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 1;
IWD_SetFieldMark(window,MS_SAVEGAME0M,0);
IWD_SetFieldMark(window,MS_SAVEGAME1M,1);
IWD_SetFieldMark(window,MS_SAVEGAME2M,0);
IWD_SetFieldMark(window,MS_SAVEGAME3M,0);
IWD_SetFieldMark(window,MS_SAVEGAME4M,0);
IWD_SetFieldMark(window,MS_SAVEGAME5M,0);
break;
case MS_SAVEGAME2:
if (!savenames[2][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 2;
IWD_SetFieldMark(window,MS_SAVEGAME0M,0);
IWD_SetFieldMark(window,MS_SAVEGAME1M,0);
IWD_SetFieldMark(window,MS_SAVEGAME2M,1);
IWD_SetFieldMark(window,MS_SAVEGAME3M,0);
IWD_SetFieldMark(window,MS_SAVEGAME4M,0);
IWD_SetFieldMark(window,MS_SAVEGAME5M,0);
break;
case MS_SAVEGAME3:
if (!savenames[3][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 3;
IWD_SetFieldMark(window,MS_SAVEGAME0M,0);
IWD_SetFieldMark(window,MS_SAVEGAME1M,0);
IWD_SetFieldMark(window,MS_SAVEGAME2M,0);
IWD_SetFieldMark(window,MS_SAVEGAME3M,1);
IWD_SetFieldMark(window,MS_SAVEGAME4M,0);
IWD_SetFieldMark(window,MS_SAVEGAME5M,0);
break;
case MS_SAVEGAME4:
if (!savenames[4][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 4;
IWD_SetFieldMark(window,MS_SAVEGAME0M,0);
IWD_SetFieldMark(window,MS_SAVEGAME1M,0);
IWD_SetFieldMark(window,MS_SAVEGAME2M,0);
IWD_SetFieldMark(window,MS_SAVEGAME3M,0);
IWD_SetFieldMark(window,MS_SAVEGAME4M,1);
IWD_SetFieldMark(window,MS_SAVEGAME5M,0);
break;
case MS_SAVEGAME5:
if (!savenames[5][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 5;
IWD_SetFieldMark(window,MS_SAVEGAME0M,0);
IWD_SetFieldMark(window,MS_SAVEGAME1M,0);
IWD_SetFieldMark(window,MS_SAVEGAME2M,0);
IWD_SetFieldMark(window,MS_SAVEGAME3M,0);
IWD_SetFieldMark(window,MS_SAVEGAME4M,0);
IWD_SetFieldMark(window,MS_SAVEGAME5M,1);
break;
//
// Deathmatch
//
case MS_DEATHNO2:
minfo.deathMatch = 0;
IWD_SetFieldMark(window,MS_DEATHNOM2,1);
IWD_SetFieldMark(window,MS_DEATHYESM2,0);
break;
case MS_DEATHYES2:
minfo.deathMatch = 1;
IWD_SetFieldMark(window,MS_DEATHNOM2,0);
IWD_SetFieldMark(window,MS_DEATHYESM2,1);
break;
default:
break;
}
break;
}
}
func_exit:
IWD_CloseWindow(window);
return ( rval );
}
//===================================================
//
// Enter serial-link savegame info
//
//===================================================
int RestoreSerial(void)
{
char * wstr = "SERSAVE";
short *window;
short field;
int rval = 0;
char *args[MAXARGS];
int argcount;
char string[MAXARGS*2][16];
union REGS r;
int i;
int numplayers[6];
int saveslot;
int handle;
char name[32];
char p1,p2,p3,p4;
sinfo = serialinfo; // save copy of netinfo
field = SS_SAVEGAME0; // FIRST FIELD TO LIGHT BAR
if ( ( window = IWD_OpenWindow( NULL, wstr ) ) == NULL )
{
IWD_CloseWRF ( NULL );
printf( "\nError opening %s window.\n", wstr );
exit(1);
}
saveslot = -1;
memset(savenames,0,6*24);
//
// Read in savegame strings
//
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);
IWD_PutFieldData(window,SS_SAVEGAME0+i,savenames[i]);
}
//
// Set defaults
//
IWD_SetFieldMark(window,SS_COM1M,1);
IWD_SetFieldMark(window,SS_COM2M,0);
IWD_SetFieldMark(window,SS_COM3M,0);
IWD_SetFieldMark(window,SS_COM4M,0);
sinfo.comport = 1;
IWD_SetFieldMark(window,SS_DEATHNOM2,1);
IWD_SetFieldMark(window,SS_DEATHYESM2,0);
sinfo.deathMatch = 0;
IWD_ShowWindow ( window );
for (;;)
{
switch ( IWD_Dialog ( window, &field, DialogControl, hot_keys ) )
{
case KEY_ESC:
rval = -1;
goto func_exit;
exitandsave:
case KEY_F10:
if (saveslot < 0)
{
short *window;
if ( ( window = IWD_OpenWindow( NULL, "NETSERR" ) ) == NULL )
exit(1);
IWD_ShowWindow ( window );
while(kbhit());
getch();
IWD_CloseWindow( window );
break;
}
serialinfo = sinfo;
M_SaveDefaults();
IWD_CloseWRF( NULL );
IWD_Shutdown();
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;
r.x.ax = 3;
int86(0x10,&r,&r);
execv("sersetup.exe",args);
//
// ERROR EXECing!
//
printf("Problem EXECing SERSETUP for netplay. Need to be in same directory!");
exit(0);
case KEY_CR:
case 32:
switch ( field )
{
case SS_COM1:
IWD_SetFieldMark(window,SS_COM1M,1);
IWD_SetFieldMark(window,SS_COM2M,0);
IWD_SetFieldMark(window,SS_COM3M,0);
IWD_SetFieldMark(window,SS_COM4M,0);
sinfo.comport = 1;
break;
case SS_COM2:
IWD_SetFieldMark(window,SS_COM1M,0);
IWD_SetFieldMark(window,SS_COM2M,1);
IWD_SetFieldMark(window,SS_COM3M,0);
IWD_SetFieldMark(window,SS_COM4M,0);
sinfo.comport = 2;
break;
case SS_COM3:
IWD_SetFieldMark(window,SS_COM1M,0);
IWD_SetFieldMark(window,SS_COM2M,0);
IWD_SetFieldMark(window,SS_COM3M,1);
IWD_SetFieldMark(window,SS_COM4M,0);
sinfo.comport = 3;
break;
case SS_COM4:
IWD_SetFieldMark(window,SS_COM1M,0);
IWD_SetFieldMark(window,SS_COM2M,0);
IWD_SetFieldMark(window,SS_COM3M,0);
IWD_SetFieldMark(window,SS_COM4M,1);
sinfo.comport = 4;
break;
case SS_SAVEGAME0:
if (!savenames[0][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 0;
IWD_SetFieldMark(window,SS_SAVEGAME0M,1);
IWD_SetFieldMark(window,SS_SAVEGAME1M,0);
IWD_SetFieldMark(window,SS_SAVEGAME2M,0);
IWD_SetFieldMark(window,SS_SAVEGAME3M,0);
IWD_SetFieldMark(window,SS_SAVEGAME4M,0);
IWD_SetFieldMark(window,SS_SAVEGAME5M,0);
break;
case SS_SAVEGAME1:
if (!savenames[1][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 1;
IWD_SetFieldMark(window,SS_SAVEGAME0M,0);
IWD_SetFieldMark(window,SS_SAVEGAME1M,1);
IWD_SetFieldMark(window,SS_SAVEGAME2M,0);
IWD_SetFieldMark(window,SS_SAVEGAME3M,0);
IWD_SetFieldMark(window,SS_SAVEGAME4M,0);
IWD_SetFieldMark(window,SS_SAVEGAME5M,0);
break;
case SS_SAVEGAME2:
if (!savenames[2][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 2;
IWD_SetFieldMark(window,SS_SAVEGAME0M,0);
IWD_SetFieldMark(window,SS_SAVEGAME1M,0);
IWD_SetFieldMark(window,SS_SAVEGAME2M,1);
IWD_SetFieldMark(window,SS_SAVEGAME3M,0);
IWD_SetFieldMark(window,SS_SAVEGAME4M,0);
IWD_SetFieldMark(window,SS_SAVEGAME5M,0);
break;
case SS_SAVEGAME3:
if (!savenames[3][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 3;
IWD_SetFieldMark(window,SS_SAVEGAME0M,0);
IWD_SetFieldMark(window,SS_SAVEGAME1M,0);
IWD_SetFieldMark(window,SS_SAVEGAME2M,0);
IWD_SetFieldMark(window,SS_SAVEGAME3M,1);
IWD_SetFieldMark(window,SS_SAVEGAME4M,0);
IWD_SetFieldMark(window,SS_SAVEGAME5M,0);
break;
case SS_SAVEGAME4:
if (!savenames[4][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 4;
IWD_SetFieldMark(window,SS_SAVEGAME0M,0);
IWD_SetFieldMark(window,SS_SAVEGAME1M,0);
IWD_SetFieldMark(window,SS_SAVEGAME2M,0);
IWD_SetFieldMark(window,SS_SAVEGAME3M,0);
IWD_SetFieldMark(window,SS_SAVEGAME4M,1);
IWD_SetFieldMark(window,SS_SAVEGAME5M,0);
break;
case SS_SAVEGAME5:
if (!savenames[5][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 5;
IWD_SetFieldMark(window,SS_SAVEGAME0M,0);
IWD_SetFieldMark(window,SS_SAVEGAME1M,0);
IWD_SetFieldMark(window,SS_SAVEGAME2M,0);
IWD_SetFieldMark(window,SS_SAVEGAME3M,0);
IWD_SetFieldMark(window,SS_SAVEGAME4M,0);
IWD_SetFieldMark(window,SS_SAVEGAME5M,1);
break;
//
// Deathmatch
//
case SS_DEATHNO2:
sinfo.deathMatch = 0;
IWD_SetFieldMark(window,SS_DEATHNOM2,1);
IWD_SetFieldMark(window,SS_DEATHYESM2,0);
break;
case SS_DEATHYES2:
sinfo.deathMatch = 1;
IWD_SetFieldMark(window,SS_DEATHNOM2,0);
IWD_SetFieldMark(window,SS_DEATHYESM2,1);
break;
default:
break;
}
break;
}
}
func_exit:
IWD_CloseWindow(window);
return ( rval );
}


655
OLDSETUP.C Normal file
View File

@@ -0,0 +1,655 @@
//===================================================
//
// Enter modem savegame info
//
//===================================================
int RestoreModem(void)
{
char * wstr = "MODSAVE";
short *window;
short field;
int rval = 0;
char *args[MAXARGS];
int argcount;
char string[MAXARGS*2][16];
union REGS r;
int i;
int numplayers[6];
int saveslot;
int handle;
char name[32];
char p1,p2,p3,p4;
minfo = modeminfo; // save copy of netinfo
field = MS_SAVEGAME0; // FIRST FIELD TO LIGHT BAR
if ( ( window = IWD_OpenWindow( NULL, wstr ) ) == NULL )
{
IWD_CloseWRF ( NULL );
printf( "\nError opening %s window.\n", wstr );
exit(1);
}
saveslot = -1;
memset(savenames,0,6*24);
//
// Read in savegame strings
//
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);
IWD_PutFieldData(window,MS_SAVEGAME0+i,savenames[i]);
}
//
// Set defaults
//
IWD_SetFieldMark(window,MS_CONTYPE0M,0);
IWD_SetFieldMark(window,MS_CONTYPE1M,1);
IWD_SetFieldMark(window,MS_CONTYPE2M,0);
minfo.comtype = 1;
IWD_SetFieldMark(window,MS_COM1M,1);
IWD_SetFieldMark(window,MS_COM2M,0);
IWD_SetFieldMark(window,MS_COM3M,0);
IWD_SetFieldMark(window,MS_COM4M,0);
minfo.comport = 1;
IWD_SetFieldMark(window,MS_DEATHNOM2,1);
IWD_SetFieldMark(window,MS_DEATHYESM2,0);
minfo.deathMatch = 0;
strcpy(minfo.phonenum,"");
IWD_PutFieldDataType(window,MS_PHONENUM, FTYPE_STRING,&minfo.phonenum);
IWD_ShowWindow ( window );
for (;;)
{
switch ( IWD_Dialog ( window, &field, DialogControl, hot_keys ) )
{
case KEY_ESC:
rval = -1;
goto func_exit;
exitandsave:
case KEY_F10:
if (saveslot < 0)
{
short *window;
if ( ( window = IWD_OpenWindow( NULL, "NETSERR" ) ) == NULL )
exit(1);
IWD_ShowWindow ( window );
while(kbhit());
getch();
IWD_CloseWindow( window );
break;
}
IWD_GetFieldDataType(window,MS_PHONENUM,FTYPE_STRING,&minfo.phonenum);
modeminfo = minfo;
M_SaveDefaults();
IWD_CloseWRF( NULL );
IWD_Shutdown();
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;
r.x.ax = 3;
int86(0x10,&r,&r);
execv("sersetup.exe",args);
//
// ERROR EXECing!
//
printf("Problem EXECing SERSETUP for netplay. Need to be in same directory!");
exit(0);
case KEY_CR:
case 32:
switch ( field )
{
case MS_COM1:
IWD_SetFieldMark(window,MS_COM1M,1);
IWD_SetFieldMark(window,MS_COM2M,0);
IWD_SetFieldMark(window,MS_COM3M,0);
IWD_SetFieldMark(window,MS_COM4M,0);
minfo.comport = 1;
break;
case MS_COM2:
IWD_SetFieldMark(window,MS_COM1M,0);
IWD_SetFieldMark(window,MS_COM2M,1);
IWD_SetFieldMark(window,MS_COM3M,0);
IWD_SetFieldMark(window,MS_COM4M,0);
minfo.comport = 2;
break;
case MS_COM3:
IWD_SetFieldMark(window,MS_COM1M,0);
IWD_SetFieldMark(window,MS_COM2M,0);
IWD_SetFieldMark(window,MS_COM3M,1);
IWD_SetFieldMark(window,MS_COM4M,0);
minfo.comport = 3;
break;
case MS_COM4:
IWD_SetFieldMark(window,MS_COM1M,0);
IWD_SetFieldMark(window,MS_COM2M,0);
IWD_SetFieldMark(window,MS_COM3M,0);
IWD_SetFieldMark(window,MS_COM4M,1);
minfo.comport = 4;
break;
case MS_CONTYPE0:
IWD_SetFieldMark(window,MS_CONTYPE0M,1);
IWD_SetFieldMark(window,MS_CONTYPE1M,0);
IWD_SetFieldMark(window,MS_CONTYPE2M,0);
minfo.comtype = 0;
break;
case MS_CONTYPE1:
IWD_SetFieldMark(window,MS_CONTYPE0M,0);
IWD_SetFieldMark(window,MS_CONTYPE1M,1);
IWD_SetFieldMark(window,MS_CONTYPE2M,0);
minfo.comtype = 1;
break;
case MS_CONTYPE2:
IWD_SetFieldMark(window,MS_CONTYPE0M,0);
IWD_SetFieldMark(window,MS_CONTYPE1M,0);
IWD_SetFieldMark(window,MS_CONTYPE2M,1);
minfo.comtype = 2;
field = MS_PHONENUM;
break;
case MS_SAVEGAME0:
if (!savenames[0][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 0;
IWD_SetFieldMark(window,MS_SAVEGAME0M,1);
IWD_SetFieldMark(window,MS_SAVEGAME1M,0);
IWD_SetFieldMark(window,MS_SAVEGAME2M,0);
IWD_SetFieldMark(window,MS_SAVEGAME3M,0);
IWD_SetFieldMark(window,MS_SAVEGAME4M,0);
IWD_SetFieldMark(window,MS_SAVEGAME5M,0);
break;
case MS_SAVEGAME1:
if (!savenames[1][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 1;
IWD_SetFieldMark(window,MS_SAVEGAME0M,0);
IWD_SetFieldMark(window,MS_SAVEGAME1M,1);
IWD_SetFieldMark(window,MS_SAVEGAME2M,0);
IWD_SetFieldMark(window,MS_SAVEGAME3M,0);
IWD_SetFieldMark(window,MS_SAVEGAME4M,0);
IWD_SetFieldMark(window,MS_SAVEGAME5M,0);
break;
case MS_SAVEGAME2:
if (!savenames[2][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 2;
IWD_SetFieldMark(window,MS_SAVEGAME0M,0);
IWD_SetFieldMark(window,MS_SAVEGAME1M,0);
IWD_SetFieldMark(window,MS_SAVEGAME2M,1);
IWD_SetFieldMark(window,MS_SAVEGAME3M,0);
IWD_SetFieldMark(window,MS_SAVEGAME4M,0);
IWD_SetFieldMark(window,MS_SAVEGAME5M,0);
break;
case MS_SAVEGAME3:
if (!savenames[3][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 3;
IWD_SetFieldMark(window,MS_SAVEGAME0M,0);
IWD_SetFieldMark(window,MS_SAVEGAME1M,0);
IWD_SetFieldMark(window,MS_SAVEGAME2M,0);
IWD_SetFieldMark(window,MS_SAVEGAME3M,1);
IWD_SetFieldMark(window,MS_SAVEGAME4M,0);
IWD_SetFieldMark(window,MS_SAVEGAME5M,0);
break;
case MS_SAVEGAME4:
if (!savenames[4][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 4;
IWD_SetFieldMark(window,MS_SAVEGAME0M,0);
IWD_SetFieldMark(window,MS_SAVEGAME1M,0);
IWD_SetFieldMark(window,MS_SAVEGAME2M,0);
IWD_SetFieldMark(window,MS_SAVEGAME3M,0);
IWD_SetFieldMark(window,MS_SAVEGAME4M,1);
IWD_SetFieldMark(window,MS_SAVEGAME5M,0);
break;
case MS_SAVEGAME5:
if (!savenames[5][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 5;
IWD_SetFieldMark(window,MS_SAVEGAME0M,0);
IWD_SetFieldMark(window,MS_SAVEGAME1M,0);
IWD_SetFieldMark(window,MS_SAVEGAME2M,0);
IWD_SetFieldMark(window,MS_SAVEGAME3M,0);
IWD_SetFieldMark(window,MS_SAVEGAME4M,0);
IWD_SetFieldMark(window,MS_SAVEGAME5M,1);
break;
//
// Deathmatch
//
case MS_DEATHNO2:
minfo.deathMatch = 0;
IWD_SetFieldMark(window,MS_DEATHNOM2,1);
IWD_SetFieldMark(window,MS_DEATHYESM2,0);
break;
case MS_DEATHYES2:
minfo.deathMatch = 1;
IWD_SetFieldMark(window,MS_DEATHNOM2,0);
IWD_SetFieldMark(window,MS_DEATHYESM2,1);
break;
default:
break;
}
break;
}
}
func_exit:
IWD_CloseWindow(window);
return ( rval );
}
//===================================================
//
// Enter serial-link savegame info
//
//===================================================
int RestoreSerial(void)
{
char * wstr = "SERSAVE";
short *window;
short field;
int rval = 0;
char *args[MAXARGS];
int argcount;
char string[MAXARGS*2][16];
union REGS r;
int i;
int numplayers[6];
int saveslot;
int handle;
char name[32];
char p1,p2,p3,p4;
sinfo = serialinfo; // save copy of netinfo
field = SS_SAVEGAME0; // FIRST FIELD TO LIGHT BAR
if ( ( window = IWD_OpenWindow( NULL, wstr ) ) == NULL )
{
IWD_CloseWRF ( NULL );
printf( "\nError opening %s window.\n", wstr );
exit(1);
}
saveslot = -1;
memset(savenames,0,6*24);
//
// Read in savegame strings
//
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);
IWD_PutFieldData(window,SS_SAVEGAME0+i,savenames[i]);
}
//
// Set defaults
//
IWD_SetFieldMark(window,SS_COM1M,1);
IWD_SetFieldMark(window,SS_COM2M,0);
IWD_SetFieldMark(window,SS_COM3M,0);
IWD_SetFieldMark(window,SS_COM4M,0);
sinfo.comport = 1;
IWD_SetFieldMark(window,SS_DEATHNOM2,1);
IWD_SetFieldMark(window,SS_DEATHYESM2,0);
sinfo.deathMatch = 0;
IWD_ShowWindow ( window );
for (;;)
{
switch ( IWD_Dialog ( window, &field, DialogControl, hot_keys ) )
{
case KEY_ESC:
rval = -1;
goto func_exit;
exitandsave:
case KEY_F10:
if (saveslot < 0)
{
short *window;
if ( ( window = IWD_OpenWindow( NULL, "NETSERR" ) ) == NULL )
exit(1);
IWD_ShowWindow ( window );
while(kbhit());
getch();
IWD_CloseWindow( window );
break;
}
serialinfo = sinfo;
M_SaveDefaults();
IWD_CloseWRF( NULL );
IWD_Shutdown();
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;
r.x.ax = 3;
int86(0x10,&r,&r);
execv("sersetup.exe",args);
//
// ERROR EXECing!
//
printf("Problem EXECing SERSETUP for netplay. Need to be in same directory!");
exit(0);
case KEY_CR:
case 32:
switch ( field )
{
case SS_COM1:
IWD_SetFieldMark(window,SS_COM1M,1);
IWD_SetFieldMark(window,SS_COM2M,0);
IWD_SetFieldMark(window,SS_COM3M,0);
IWD_SetFieldMark(window,SS_COM4M,0);
sinfo.comport = 1;
break;
case SS_COM2:
IWD_SetFieldMark(window,SS_COM1M,0);
IWD_SetFieldMark(window,SS_COM2M,1);
IWD_SetFieldMark(window,SS_COM3M,0);
IWD_SetFieldMark(window,SS_COM4M,0);
sinfo.comport = 2;
break;
case SS_COM3:
IWD_SetFieldMark(window,SS_COM1M,0);
IWD_SetFieldMark(window,SS_COM2M,0);
IWD_SetFieldMark(window,SS_COM3M,1);
IWD_SetFieldMark(window,SS_COM4M,0);
sinfo.comport = 3;
break;
case SS_COM4:
IWD_SetFieldMark(window,SS_COM1M,0);
IWD_SetFieldMark(window,SS_COM2M,0);
IWD_SetFieldMark(window,SS_COM3M,0);
IWD_SetFieldMark(window,SS_COM4M,1);
sinfo.comport = 4;
break;
case SS_SAVEGAME0:
if (!savenames[0][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 0;
IWD_SetFieldMark(window,SS_SAVEGAME0M,1);
IWD_SetFieldMark(window,SS_SAVEGAME1M,0);
IWD_SetFieldMark(window,SS_SAVEGAME2M,0);
IWD_SetFieldMark(window,SS_SAVEGAME3M,0);
IWD_SetFieldMark(window,SS_SAVEGAME4M,0);
IWD_SetFieldMark(window,SS_SAVEGAME5M,0);
break;
case SS_SAVEGAME1:
if (!savenames[1][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 1;
IWD_SetFieldMark(window,SS_SAVEGAME0M,0);
IWD_SetFieldMark(window,SS_SAVEGAME1M,1);
IWD_SetFieldMark(window,SS_SAVEGAME2M,0);
IWD_SetFieldMark(window,SS_SAVEGAME3M,0);
IWD_SetFieldMark(window,SS_SAVEGAME4M,0);
IWD_SetFieldMark(window,SS_SAVEGAME5M,0);
break;
case SS_SAVEGAME2:
if (!savenames[2][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 2;
IWD_SetFieldMark(window,SS_SAVEGAME0M,0);
IWD_SetFieldMark(window,SS_SAVEGAME1M,0);
IWD_SetFieldMark(window,SS_SAVEGAME2M,1);
IWD_SetFieldMark(window,SS_SAVEGAME3M,0);
IWD_SetFieldMark(window,SS_SAVEGAME4M,0);
IWD_SetFieldMark(window,SS_SAVEGAME5M,0);
break;
case SS_SAVEGAME3:
if (!savenames[3][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 3;
IWD_SetFieldMark(window,SS_SAVEGAME0M,0);
IWD_SetFieldMark(window,SS_SAVEGAME1M,0);
IWD_SetFieldMark(window,SS_SAVEGAME2M,0);
IWD_SetFieldMark(window,SS_SAVEGAME3M,1);
IWD_SetFieldMark(window,SS_SAVEGAME4M,0);
IWD_SetFieldMark(window,SS_SAVEGAME5M,0);
break;
case SS_SAVEGAME4:
if (!savenames[4][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 4;
IWD_SetFieldMark(window,SS_SAVEGAME0M,0);
IWD_SetFieldMark(window,SS_SAVEGAME1M,0);
IWD_SetFieldMark(window,SS_SAVEGAME2M,0);
IWD_SetFieldMark(window,SS_SAVEGAME3M,0);
IWD_SetFieldMark(window,SS_SAVEGAME4M,1);
IWD_SetFieldMark(window,SS_SAVEGAME5M,0);
break;
case SS_SAVEGAME5:
if (!savenames[5][0])
{
IWD_Sound(1000,6);
break;
}
saveslot = 5;
IWD_SetFieldMark(window,SS_SAVEGAME0M,0);
IWD_SetFieldMark(window,SS_SAVEGAME1M,0);
IWD_SetFieldMark(window,SS_SAVEGAME2M,0);
IWD_SetFieldMark(window,SS_SAVEGAME3M,0);
IWD_SetFieldMark(window,SS_SAVEGAME4M,0);
IWD_SetFieldMark(window,SS_SAVEGAME5M,1);
break;
//
// Deathmatch
//
case SS_DEATHNO2:
sinfo.deathMatch = 0;
IWD_SetFieldMark(window,SS_DEATHNOM2,1);
IWD_SetFieldMark(window,SS_DEATHYESM2,0);
break;
case SS_DEATHYES2:
sinfo.deathMatch = 1;
IWD_SetFieldMark(window,SS_DEATHNOM2,0);
IWD_SetFieldMark(window,SS_DEATHYESM2,1);
break;
default:
break;
}
break;
}
}
func_exit:
IWD_CloseWindow(window);
return ( rval );
}


204
OLDSETUP.H Normal file
View File

@@ -0,0 +1,204 @@
#define FRENCH // define if FRENCH VERSION
#ifdef FRENCH
#include "french2\idcard.i" //
//#include "french2\gusdma.i" //
//#include "french2\gusirq.i" //
//#include "french2\gusport.i" //
#include "french2\mcard.i" //
//#include "french2\midiirq.i"
#include "french2\midiport.i" //
#include "french2\numdig.i"
#include "french2\sbdma.i" //
#include "french2\sbirq.i" //
#include "french2\sbport.i" //
#include "french2\control.i" //
#include "french2\show.i"
#include "french2\consel.i"
#include "french2\quitwin.i"
#include "french2\netsave.i"
#include "french2\netplay.i"
#include "french2\macros.i"
#include "french2\modsave.i"
#include "french2\sersave.i"
#include "french2\netplay2.i"
#define S_NONE "AUCUNE"
#define S_PCSP "Haut-parleur PC"
#define S_CON1 "Clavier seul"
#define S_CON2 "Clavier + Souris"
#define S_CON3 "Clavier + Joystick"
#else
#include "idcard.i" //
#include "gusdma.i" //
#include "gusirq.i" //
#include "gusport.i" //
#include "mcard.i" //
#include "midiirq.i"
#include "midiport.i" //
#include "numdig.i"
#include "sbdma.i" //
#include "sbirq.i" //
#include "sbport.i" //
#include "control.i" //
#include "show.i"
#include "consel.i"
#include "quitwin.i"
#include "netsave.i"
#include "gusirq.i"
#include "netplay.i"
#include "macros.i"
#include "modsave.i"
#include "sersave.i"
#include "netplay2.i"
#define S_NONE "None"
#define S_PCSP "PC Speaker"
#define S_CON1 "Keyboard only"
#define S_CON2 "Keyboard + Mouse"
#define S_CON3 "Keyboard + Joystick"
#endif
#ifdef DOOM2
#ifdef FRENCH
#include "french2\idmain2.i"
#include "french2\cmodem.i"
#include "french2\cserial.i"
#include "french2\cwarp.i"
#include "french2\netwk2.i"
#else
#include "idmain2.i"
#include "cmodem.i"
#include "cserial.i"
#include "cwarp.i"
#include "netwk2.i"
#endif
#else
#include "idmain.i"
#include "warp.i"
#include "modem.i"
#include "serial.i"
#include "network.i"
#endif
#include "keys.h"
typedef enum { FALSE, TRUE } BOOL;
typedef enum
{
M_NONE,
M_PC,
M_ADLIB,
M_SB,
M_PAS,
M_GUS,
M_WAVE,
M_CANVAS,
M_GMIDI,
M_SBAWE32,
M_LAST
}SCARD;
typedef enum
{
C_KEY,
C_MOUSE,
C_JOYSTICK,
C_LAST
}CONTROL;
typedef struct
{
SCARD card;
short port;
short midiport;
short irq;
short dma;
} DMXCARD;
typedef struct
{
CONTROL control;
DMXCARD m;
DMXCARD d;
short numdig;
} DMXINFO;
typedef struct
{
int numberOfPlayers;
int skillLevel;
int deathMatch;
unsigned networkSocket;
int episode;
} net_t;
typedef struct
{
int skillLevel;
int deathMatch;
int episode;
int comport;
int comtype; // 0 = connected,1 = answer,2 = call
char phonenum[16];
} serial_t;
typedef struct
{
int up;
int down;
int left;
int right;
int fire;
int use; // ID = USE CYGNUS = USE SPECIAL WEAPON
int key1; // ID = STRAFE ON CYGNUS = CHANGE SPECIAL WEAPON
int key2; // ID = SPEED ON CYGNUS = MEGA BOMB HOT KEY
int key3; // ID = STRAFE LEFT
int key4; // ID = STRAFE RIGHT
int mouse[3];
int joy[4];
} CONTS;
typedef enum
{
ID_FIRE, // def button 1
ID_STRAFE, // def button 3
ID_FORWARD, // def button 2
ID_USE // def button 4 joystick only
}IDCONTS;
extern int usemouse;
extern int usejoystick;
typedef struct
{
char name[64];
char init[64];
char hangup[64];
char baud[8];
} modem_t;
#define MAXMODEMS 200
typedef struct
{
char name[32];
char number[16];
} phonelist_t;
#define MAXPHNLIST 40
extern int cdrom;
extern char **myargv;
extern int myargc;


5
README Normal file
View File

@@ -0,0 +1,5 @@
This is the source for the setup program included with DOOM, final DOOM, strife, etc. Unzip with directories.
John Romero wrote idsetup, so don't ask me questions about it...
John Carmack

65
SCGUESS.BAK Normal file
View File

@@ -0,0 +1,65 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "scguess.h"
int getSBParam(char *string, char field)
{
char *p;
int rc;
p = strchr(string, field);
if (!p) return -1;
else p++;
if (field == 'A' || field == 'P') sscanf(p, "%x", &rc); // hex field
else sscanf(p, "%d", &rc); // decimal field
return rc;
}
/*
* Returns 1 if it senses the BLASTER environment variable, 0 if it
* doesn't. If it does return 1, it will also fill in as many fields
* as it can extract from the environment variable. Any fields *not*
* filled in will be set to -1. Of course, if the midi field is filled,
* that means only that it's an SB16 and does not confirm whether the
* WaveBlaster is present.
*/
int SmellsLikeSB(int *addr, int *irq, int *dma, int *midi)
{
char *var = getenv("BLASTER");
char *parm;
if (!var) return 0;
*addr = getSBParam(var, 'A');
*irq = getSBParam(var, 'I');
*dma = getSBParam(var, 'D');
*midi = getSBParam(var, 'P');
return 1;
}
/*
* Returns 1 if it senses the ULTRASND environment variable, 0 if it
* doesn't. If it does return 1, it will also fill in as many fields
* as it can extract from the environment variable. Any fields *not*
* filled in will be set to -1.
*/
int SmellsLikeGUS(int *addr, int *irq, int *dma)
{
char *var = getenv("ULTRASND");
int dummy;
if (!var) return 0;
else
{
sscanf(var, "%x,%d,%d,%d,%d", addr, dma, &dummy, irq, &dummy);
return 1;
}
}

64
SCGUESS.C Normal file
View File

@@ -0,0 +1,64 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "scguess.h"
int getSBParam(char *string, char field)
{
char *p;
int rc;
p = strchr(string, field);
if (!p) return -1;
else p++;
if (field == 'A' || field == 'P') sscanf(p, "%x", &rc); // hex field
else sscanf(p, "%d", &rc); // decimal field
return rc;
}
/*
* Returns 1 if it senses the BLASTER environment variable, 0 if it
* doesn't. If it does return 1, it will also fill in as many fields
* as it can extract from the environment variable. Any fields *not*
* filled in will be set to -1. Of course, if the midi field is filled,
* that means only that it's an SB16 and does not confirm whether the
* WaveBlaster is present.
*/
int SmellsLikeSB(int *addr, int *irq, int *dma, int *midi)
{
char *var = getenv("BLASTER");
if (!var) return 0;
*addr = getSBParam(var, 'A');
*irq = getSBParam(var, 'I');
*dma = getSBParam(var, 'D');
*midi = getSBParam(var, 'P');
return 1;
}
/*
* Returns 1 if it senses the ULTRASND environment variable, 0 if it
* doesn't. If it does return 1, it will also fill in as many fields
* as it can extract from the environment variable. Any fields *not*
* filled in will be set to -1.
*/
int SmellsLikeGUS(int *addr, int *irq, int *dma)
{
char *var = getenv("ULTRASND");
int dummy;
if (!var) return 0;
else
{
sscanf(var, "%x,%d,%d,%d,%d", addr, dma, &dummy, irq, &dummy);
return 1;
}
}

34
SCGUESS.H Normal file
View File

@@ -0,0 +1,34 @@
#ifndef __SCGUESS_H__
#define __SCGUESS_H__
/*
* This stuff just checks for environment variables. If they're there,
* then it kinda figures hopefully that the card is there and it fills
* in the values as defaults to choose from in Scott's & Paul's cool
* install program.
*/
/*
* Returns 1 if it senses the BLASTER environment variable, 0 if it
* doesn't. If it does return 1, it will also fill in as many fields
* as it can extract from the environment variable. Any fields *not*
* filled in will be set to -1. Of course, if the midi field is filled,
* that means only that it's an SB16 and does not confirm whether the
* WaveBlaster is present.
*/
int SmellsLikeSB(int *addr, int *irq, int *dma, int *midi);
/*
* Returns 1 if it senses the ULTRASND environment variable, 0 if it
* doesn't. If it does return 1, it will also fill in as many fields
* as it can extract from the environment variable. Any fields *not*
* filled in will be set to -1. Do we need the address, irq, and dma?
* Paul's GF1_Detect code doesn't seem terribly interested in this
* information. Who cares- it's bonus stuff if you're curious, and
* militant GUSaholes can eat cake.
*/
int SmellsLikeGUS(int *addr, int *irq, int *dma);
#endif

BIN
SCGUESS.OBJ Normal file

Binary file not shown.

BIN
SCREENS/DOOM/ASKPRES.DOG Normal file

Binary file not shown.

BIN
SCREENS/DOOM/ASKPRES.OBJ Normal file

Binary file not shown.

BIN
SCREENS/DOOM/ASKPRES.PUP Normal file

Binary file not shown.

BIN
SCREENS/DOOM/CMODEM.DOG Normal file

Binary file not shown.

BIN
SCREENS/DOOM/CMODEM.OBJ Normal file

Binary file not shown.

BIN
SCREENS/DOOM/CMODEM.PUP Normal file

Binary file not shown.

BIN
SCREENS/DOOM/CONSEL.DOG Normal file

Binary file not shown.

BIN
SCREENS/DOOM/CONSEL.OBJ Normal file

Binary file not shown.

BIN
SCREENS/DOOM/CONSEL.PUP Normal file

Binary file not shown.

BIN
SCREENS/DOOM/CONTROL.DOG Normal file

Binary file not shown.

BIN
SCREENS/DOOM/CONTROL.OBJ Normal file

Binary file not shown.

BIN
SCREENS/DOOM/CONTROL.PUP Normal file

Binary file not shown.

BIN
SCREENS/DOOM/CSERIAL.DOG Normal file

Binary file not shown.

BIN
SCREENS/DOOM/CSERIAL.OBJ Normal file

Binary file not shown.

BIN
SCREENS/DOOM/CSERIAL.PUP Normal file

Binary file not shown.

BIN
SCREENS/DOOM/CWARP.DOG Normal file

Binary file not shown.

BIN
SCREENS/DOOM/CWARP.OBJ Normal file

Binary file not shown.

BIN
SCREENS/DOOM/CWARP.PUP Normal file

Binary file not shown.

BIN
SCREENS/DOOM/ENTRNMBR.DOG Normal file

Binary file not shown.

BIN
SCREENS/DOOM/ENTRNMBR.OBJ Normal file

Binary file not shown.

BIN
SCREENS/DOOM/ENTRNMBR.PUP Normal file

Binary file not shown.

36
SCREENS/DOOM/FILES Normal file
View File

@@ -0,0 +1,36 @@
askpres.pup
cmodem.pup
consel.pup
control.pup
cserial.pup
cwarp.pup
entrnmbr.pup
gusirqer.pup
idcard.pup
idjoysel.pup
idkeysel.pup
idmain2.pup
idmousel.pup
irqerr.pup
macros.pup
mcard.pup
midiport.pup
modemchs.pup
modsave.pup
mousentr.pup
mouspres.pup
netplay.pup
netplay2.pup
netsave.pup
netserr.pup
netwk2.pup
numdig.pup
phonelst.pup
quitwin.pup
sbdma.pup
sbirq.pup
sbport.pup
sersave.pup
show.pup
sockerr.pup
title.pup

BIN
SCREENS/DOOM/FORALL.EXE Normal file

Binary file not shown.

BIN
SCREENS/DOOM/GUSIRQER.DOG Normal file

Binary file not shown.

BIN
SCREENS/DOOM/GUSIRQER.OBJ Normal file

Binary file not shown.

BIN
SCREENS/DOOM/GUSIRQER.PUP Normal file

Binary file not shown.

BIN
SCREENS/DOOM/IDCARD.DOG Normal file

Binary file not shown.

BIN
SCREENS/DOOM/IDCARD.OBJ Normal file

Binary file not shown.

BIN
SCREENS/DOOM/IDCARD.PUP Normal file

Binary file not shown.

BIN
SCREENS/DOOM/IDJOYSEL.DOG Normal file

Binary file not shown.

BIN
SCREENS/DOOM/IDJOYSEL.OBJ Normal file

Binary file not shown.

BIN
SCREENS/DOOM/IDJOYSEL.PUP Normal file

Binary file not shown.

BIN
SCREENS/DOOM/IDKEYSEL.DOG Normal file

Binary file not shown.

BIN
SCREENS/DOOM/IDKEYSEL.OBJ Normal file

Binary file not shown.

BIN
SCREENS/DOOM/IDKEYSEL.PUP Normal file

Binary file not shown.

BIN
SCREENS/DOOM/IDMAIN2.DOG Normal file

Binary file not shown.

BIN
SCREENS/DOOM/IDMAIN2.OBJ Normal file

Binary file not shown.

BIN
SCREENS/DOOM/IDMAIN2.PUP Normal file

Binary file not shown.

BIN
SCREENS/DOOM/IDMOUSEL.DOG Normal file

Binary file not shown.

BIN
SCREENS/DOOM/IDMOUSEL.OBJ Normal file

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More