home *** CD-ROM | disk | FTP | other *** search
/ WADS of WADS / WadsOfWads.1994.zip / OTHER / DOOMBSP / CMDLIB.C < prev    next >
Text File  |  1994-04-06  |  8KB  |  60 lines

  1. // cmdlib.c
  2.  
  3. #include "cmdlib.h"
  4. #ifndef __NeXT__
  5. #define PATHSEPERATOR   '\\'#endif#ifdef __NeXT__#define O_BINARY        0#define PATHSEPERATOR   '/'
  6. /*
  7. ================
  8. =
  9. = filelength
  10. =
  11. ================
  12. */
  13. int filelength (int handle){    struct stat    fileinfo;
  14.     
  15.     if (fstat (handle,&fileinfo) == -1)
  16.     {
  17.         fprintf (stderr,"Error fstating");
  18.         exit (1);
  19.     }
  20.     return fileinfo.st_size;
  21. }
  22. int tell (int handle)
  23. {
  24.     return lseek (handle, 0, L_INCR);
  25. }
  26. char *strupr (char *start)
  27. {
  28.     char    *in;
  29.     in = start;
  30.     while (*in)
  31.     {
  32.         *in = toupper(*in);
  33.         in++;
  34.     }
  35.     return start;
  36. }
  37. char *getcwd (char *path, int length)
  38. {
  39.     return getwd(path);
  40. }
  41. #endif/* globals for command line args */#ifdef __NeXT__extern int NXArgc;extern char **NXArgv;#define myargc    NXArgc#define myargv    NXArgv#endif#ifdef __WATCOMC__extern int _argc;extern char **_argv;#define myargc    _argc#define myargv    _argv#endif/*=============================================================================                        MISC FUNCTIONS=============================================================================*//*=================== Error== For abnormal program terminations==================*/void Error (char *error, ...){    va_list argptr;#ifndef __NeXT__    if ( *(byte *)0x449 == 0x13)        TextMode ();#endif    va_start (argptr,error);    vprintf (error,argptr);    va_end (argptr);    printf ("\n");    exit (1);}/*=================== CheckParm== Checks for the given parameter in the program's command line arguments== Returns the argument number (1 to argc-1) or 0 if not present==================*/int CheckParm (char *check){    int             i;    char    *parm;    for (i = 1;i<myargc;i++)    {        parm = myargv[i];        if ( !isalpha(*parm) )  // skip - / \ etc.. in front of parm            if (!*++parm)                continue;               // parm was only one char        if ( !stricmp(check,parm) )            return i;    }    return 0;}int SafeOpenWrite (char *filename){    int     handle;    handle = open(filename,O_RDWR | O_BINARY | O_CREAT | O_TRUNC    , 0666);    if (handle == -1)        Error ("Error opening %s: %s",filename,strerror(errno));    return handle;}int SafeOpenRead (char *filename){    int     handle;    handle = open(filename,O_RDONLY | O_BINARY);    if (handle == -1)        Error ("Error opening %s: %s",filename,strerror(errno));    return handle;}void SafeRead (int handle, void *buffer, long count){    unsigned        iocount;    while (count)    {        iocount = count > 0x8000 ? 0x8000 : count;        if (read (handle,buffer,iocount) != iocount)            Error ("File read failure");        buffer = (void *)( (byte *)buffer + iocount );        count -= iocount;    }}void SafeWrite (int handle, void *buffer, long count){    unsigned        iocount;    while (count)    {        iocount = count > 0x8000 ? 0x8000 : count;        if (write (handle,buffer,iocount) != iocount)            Error ("File write failure");        buffer = (void *)( (byte *)buffer + iocount );        count -= iocount;    }}void *SafeMalloc (long size){    void *ptr;    ptr = malloc (size);    if (!ptr)        Error ("Malloc failure for %lu bytes",size);    return ptr;}/*================ LoadFile===============*/long    LoadFile (char *filename, void **bufferptr){    int             handle;    long    length;    void    *buffer;    handle = SafeOpenRead (filename);    length = filelength (handle);    buffer = SafeMalloc (length);    SafeRead (handle, buffer, length);    close (handle);    *bufferptr = buffer;    return length;}/*================ SaveFile===============*/void    SaveFile (char *filename, void *buffer, long count){    int             handle;    handle = SafeOpenWrite (filename);    SafeWrite (handle, buffer, count);    close (handle);}void DefaultExtension (char *path, char *extension){    char    *src;//// if path doesn't have a .EXT, append extension// (extension should include the .)//    src = path + strlen(path) - 1;    while (*src != PATHSEPERATOR && src != path)    {        if (*src == '.')            return;                 // it has an extension        src--;    }    strcat (path, extension);}void DefaultPath (char *path, char *basepath){    char    temp[128];    if (path[0] == PATHSEPERATOR)        return;                                                 // absolute path location    strcpy (temp,path);    strcpy (path,basepath);    strcat (path,temp);}void    StripFilename (char *path){    int             length;    length = strlen(path)-1;    while (length > 0 && path[length] != PATHSEPERATOR)        length--;    path[length] = 0;}void    StripExtension (char *path){    int             length;    length = strlen(path)-1;    while (length > 0 && path[length] != '.')        length--;
  42.     if (length)
  43.         path[length] = 0;}void ExtractFileBase (char *path, char *dest){    char    *src;    int             length;    src = path + strlen(path) - 1;//// back up until a \ or the start//    while (src != path && *(src-1) != PATHSEPERATOR)        src--;//// copy up to eight characters//    memset (dest,0,8);    length = 0;    while (*src && *src != '.')    {        if (++length == 9)            Error ("Filename base of %s >8 chars",path);        *dest++ = toupper(*src++);    }}/*================ ParseNum / ParseHex===============*/long ParseHex (char *hex){    char    *str;    long    num;    num = 0;    str = hex;    while (*str)    {        num <<= 4;        if (*str >= '0' && *str <= '9')            num += *str-'0';        else if (*str >= 'a' && *str <= 'f')            num += 10 + *str-'a';        else if (*str >= 'A' && *str <= 'F')            num += 10 + *str-'A';        else            Error ("Bad hex number: %s",hex);        str++;    }    return num;}long ParseNum (char *str){    if (str[0] == '$')        return ParseHex (str+1);    if (str[0] == '0' && str[1] == 'x')        return ParseHex (str+2);    return atol (str);}
  44. int GetKey (void)
  45. {
  46. #ifdef __NeXT__
  47.     return getchar ();
  48. #else
  49.     return _bios_keybrd (_KEYBRD_READ)&0xff;#endif
  50. }
  51. /*============================================================================                    BYTE ORDER FUNCTIONS============================================================================*/#ifdef __BIG_ENDIAN__
  52. short   LittleShort (short l){    byte    b1,b2;    b1 = l&255;    b2 = (l>>8)&255;    return (b1<<8) + b2;}short   BigShort (short l){    return l;}long    LittleLong (long l){    byte    b1,b2,b3,b4;    b1 = l&255;    b2 = (l>>8)&255;    b3 = (l>>16)&255;    b4 = (l>>24)&255;    return ((long)b1<<24) + ((long)b2<<16) + ((long)b3<<8) + b4;}long    BigLong (long l){    return l;}#else
  53.  
  54. short   BigShort (short l){    byte    b1,b2;    b1 = l&255;    b2 = (l>>8)&255;    return (b1<<8) + b2;}short   LittleShort (short l){    return l;}long    BigLong (long l){    byte    b1,b2,b3,b4;    b1 = l&255;    b2 = (l>>8)&255;    b3 = (l>>16)&255;    b4 = (l>>24)&255;    return ((long)b1<<24) + ((long)b2<<16) + ((long)b3<<8) + b4;}long    LittleLong (long l){    return l;}#endif
  55. /*============================================================================                        BASIC GRAPHICS============================================================================*/byte    *screen;
  56. #define PEL_WRITE_ADR   0x3c8#define PEL_READ_ADR    0x3c7#define PEL_DATA                0x3c9#define PEL_MASK                0x3c6/*================ GetPalette== Return an 8 bit / color palette===============*/void GetPalette (byte *pal){#ifndef __NeXT__    int     i;    outp (PEL_READ_ADR,0);    for (i=0 ; i<768 ; i++)        pal[i] = inp (PEL_DATA)<<2;#endif}/*================ SetPalette== Sets an 8 bit / color palette===============*/void SetPalette (byte *pal){#ifndef __NeXT__    int     i;    outp (PEL_WRITE_ADR,0);    for (i=0 ; i<768 ; i++)        outp (PEL_DATA, pal[i]>>2);#endif}void VGAMode (void){#ifndef __NeXT__union REGS      regs;        // scratch for int calls    regs.w.ax = 0x13;    int386 (0x10,(const union REGS *)®s,®s);    screen = (byte *)0xa0000;
  57. #else
  58.     screen = malloc (0x10000);
  59. #endif
  60. }void TextMode (void){#ifndef __NeXT__union REGS      regs;        // scratch for int calls    regs.w.ax = 0x3;    int386 (0x10,(const union REGS *)®s,®s);#endif}