greed/CODE/D_MISC.C
2014-12-12 00:00:00 +00:00

157 lines
5.7 KiB
C

/***************************************************************************/
/* */
/* */
/* Raven 3D Engine */
/* Copyright (C) 1996 by Softdisk Publishing */
/* */
/* Original Design: */
/* John Carmack of id Software */
/* */
/* Enhancements by: */
/* Robert Morgan of Channel 7............................Main Engine Code */
/* Todd Lewis of Softdisk Publishing......Tools,Utilities,Special Effects */
/* John Bianca of Softdisk Publishing..............Low-level Optimization */
/* Carlos Hasan..........................................Music/Sound Code */
/* */
/* */
/***************************************************************************/
#include <PROCESS.H>
#include <STRING.H>
#include <CTYPE.H>
#include <STDARG.H>
#include <STDIO.H>
#include <CONIO.H>
#include <DOS.H>
#include "d_global.h"
#include "d_ints.h"
#include "d_video.h"
#include "d_misc.h"
#include "protos.h"
/**** CONSTANTS ****/
#define DPMIINT 0x31
#define DPMILOCKMEM 0x600
#define DPMIUNLOCKMEM 0x601
#define DOSGETMEM 0x100
#define DOSFREEMEM 0x101
/**** VARIABLES ****/
int my_argc;
char ** my_argv;
int rndofs;
byte rndtable[512] =
{
0, 8, 109, 220, 222, 241, 149, 107, 75, 248, 254, 140, 16, 66,
74, 21, 211, 47, 80, 242, 154, 27, 205, 128, 161, 89, 77, 36,
95, 110, 85, 48, 212, 140, 211, 249, 22, 79, 200, 50, 28, 188,
52, 140, 202, 120, 68, 145, 62, 70, 184, 190, 91, 197, 152, 224,
149, 104, 25, 178, 252, 182, 202, 182, 141, 197, 4, 81, 181, 242,
145, 42, 39, 227, 156, 198, 225, 193, 219, 93, 122, 175, 249, 0,
175, 143, 70, 239, 46, 246, 163, 53, 163, 109, 168, 135, 2, 235,
25, 92, 20, 145, 138, 77, 69, 166, 78, 176, 173, 212, 166, 113,
94, 161, 41, 50, 239, 49, 111, 164, 70, 60, 2, 37, 171, 75,
136, 156, 11, 56, 42, 146, 138, 229, 73, 146, 77, 61, 98, 196,
135, 106, 63, 197, 195, 86, 96, 203, 113, 101, 170, 247, 181, 113,
80, 250, 108, 7, 255, 237, 129, 226, 79, 107, 112, 166, 103, 241,
24, 223, 239, 120, 198, 58, 60, 82, 128, 3, 184, 66, 143, 224,
145, 224, 81, 206, 163, 45, 63, 90, 168, 114, 59, 33, 159, 95,
28, 139, 123, 98, 125, 196, 15, 70, 194, 253, 54, 14, 109, 226,
71, 17, 161, 93, 186, 87, 244, 138, 20, 52, 123, 251, 26, 36,
17, 46, 52, 231, 232, 76, 31, 221, 84, 37, 216, 165, 212, 106,
197, 242, 98, 43, 39, 175, 254, 145, 190, 84, 118, 222, 187, 136,
120, 163, 236, 249,
74, 21, 211, 47, 80, 242, 154, 27, 205, 128, 161, 89, 77, 36,
149, 104, 25, 178, 252, 182, 202, 182, 141, 197, 4, 81, 181, 242,
135, 106, 63, 197, 195, 86, 96, 203, 113, 101, 170, 247, 181, 113,
71, 17, 161, 93, 186, 87, 244, 138, 20, 52, 123, 251, 26, 36,
197, 242, 98, 43, 39, 175, 254, 145, 190, 84, 118, 222, 187, 136,
25, 92, 20, 145, 138, 77, 69, 166, 78, 176, 173, 212, 166, 113,
94, 161, 41, 50, 239, 49, 111, 164, 70, 60, 2, 37, 171, 75,
175, 143, 70, 239, 46, 246, 163, 53, 163, 109, 168, 135, 2, 235,
52, 140, 202, 120, 68, 145, 62, 70, 184, 190, 91, 197, 152, 224,
145, 224, 81, 206, 163, 45, 63, 90, 168, 114, 59, 33, 159, 95,
17, 46, 52, 231, 232, 76, 31, 221, 84, 37, 216, 165, 212, 106,
80, 250, 108, 7, 255, 237, 129, 226, 79, 107, 112, 166, 103, 241,
145, 42, 39, 227, 156, 198, 225, 193, 219, 93, 122, 175, 249, 0,
95, 110, 85, 48, 212, 140, 211, 249, 22, 79, 200, 50, 28, 188,
0, 8, 109, 220, 222, 241, 149, 107, 75, 248, 254, 140, 16, 66,
136, 156, 11, 56, 42, 146, 138, 229, 73, 146, 77, 61, 98, 196,
24, 223, 239, 120, 198, 58, 60, 82, 128, 3, 184, 66, 143, 224,
28, 139, 123, 98, 125, 196, 15, 70, 194, 253, 54, 14, 109, 226,
120, 163, 236, 249
};
/**** FUNCTIONS ****/
int MS_CheckParm(char *check)
/* checks for a parameter on the command line
returns argument number if found */
{
int i;
char *parm;
for (i=1;i<my_argc;i++)
{
parm=my_argv[i];
while (!isalpha(*parm)) // skip - / \ etc.. in front of parm
if (!*parm++) break; // hit end of string without an alphanum
if (!stricmp(check,parm)) return i;
}
return 0;
}
void MS_Error(char *error,...)
/* exit with an error message
shuts everything down */
{
va_list argptr;
byte *vidmode;
INT_Shutdown();
vidmode=(byte*)(0x40*16 + 0x49);
if (*vidmode!=3) VI_SetTextMode();
va_start(argptr,error);
vprintf(error,argptr);
va_end(argptr);
while (kbhit()) getch();
exit(1);
}
void MS_ExitClean(void)
/* exits without error message */
{
INT_Shutdown();
VI_SetTextMode();
exit(0);
}
void MS_FreeDOSMem(int sel)
{
union REGS r;
r.w.ax=DOSFREEMEM;
r.w.dx=sel;
int386(DPMIINT,&r,&r);
}
void MS_GetDOSMem(int size,int *seg,int *sel)
{
union REGS r;
r.w.ax=DOSGETMEM;
r.w.bx=(size/16) + 1; // number of paragraphs
int386(DPMIINT,&r,&r);
if (r.w.cflag)
MS_Error("GEN_GetDOSMem: Error Getting DOS Memory");
*seg=r.w.ax;
*sel=r.w.dx;
}