Annotation of quake2/win32/q_shwin.c, revision 1.1.1.1

1.1       root        1: 
                      2: #include "../qcommon/qcommon.h"
                      3: #include "winquake.h"
                      4: #include <errno.h>
                      5: #include <fcntl.h>
                      6: #include <stdio.h>
                      7: #include <direct.h>
                      8: #include <io.h>
                      9: #include <conio.h>
                     10: 
                     11: //===============================================================================
                     12: 
                     13: int            hunkcount;
                     14: 
                     15: 
                     16: byte   *membase;
                     17: int            hunkmaxsize;
                     18: int            cursize;
                     19: 
                     20: #define        VIRTUAL_ALLOC
                     21: 
                     22: void *Hunk_Begin (int maxsize)
                     23: {
                     24:        // reserve a huge chunk of memory, but don't commit any yet
                     25:        cursize = 0;
                     26:        hunkmaxsize = maxsize;
                     27: #ifdef VIRTUAL_ALLOC
                     28:        membase = VirtualAlloc (NULL, maxsize, MEM_RESERVE, PAGE_NOACCESS);
                     29: #else
                     30:        membase = malloc (maxsize);
                     31:        memset (membase, 0, maxsize);
                     32: #endif
                     33:        if (!membase)
                     34:                Sys_Error ("VirtualAlloc reserve failed");
                     35:        return (void *)membase;
                     36: }
                     37: 
                     38: void *Hunk_Alloc (int size)
                     39: {
                     40:        void    *buf;
                     41: 
                     42:        // round to cacheline
                     43:        size = (size+31)&~31;
                     44: 
                     45: #ifdef VIRTUAL_ALLOC
                     46:        // commit pages as needed
                     47: //     buf = VirtualAlloc (membase+cursize, size, MEM_COMMIT, PAGE_READWRITE);
                     48:        buf = VirtualAlloc (membase, cursize+size, MEM_COMMIT, PAGE_READWRITE);
                     49:        if (!buf)
                     50:        {
                     51:                FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &buf, 0, NULL);
                     52:                Sys_Error ("VirtualAlloc commit failed.\n%s", buf);
                     53:        }
                     54: #endif
                     55:        cursize += size;
                     56:        if (cursize > hunkmaxsize)
                     57:                Sys_Error ("Hunk_Alloc overflow");
                     58: 
                     59:        return (void *)(membase+cursize-size);
                     60: }
                     61: 
                     62: int Hunk_End (void)
                     63: {
                     64: 
                     65:        // free the remaining unused virtual memory
                     66: #if 0
                     67:        void    *buf;
                     68: 
                     69:        // write protect it
                     70:        buf = VirtualAlloc (membase, cursize, MEM_COMMIT, PAGE_READONLY);
                     71:        if (!buf)
                     72:                Sys_Error ("VirtualAlloc commit failed");
                     73: #endif
                     74: 
                     75:        hunkcount++;
                     76: //Com_Printf ("hunkcount: %i\n", hunkcount);
                     77:        return cursize;
                     78: }
                     79: 
                     80: void Hunk_Free (void *base)
                     81: {
                     82:        if ( base )
                     83: #ifdef VIRTUAL_ALLOC
                     84:                VirtualFree (base, 0, MEM_RELEASE);
                     85: #else
                     86:                free (base);
                     87: #endif
                     88: 
                     89:        hunkcount--;
                     90: }
                     91: 
                     92: //===============================================================================
                     93: 
                     94: 
                     95: /*
                     96: ================
                     97: Sys_Milliseconds
                     98: ================
                     99: */
                    100: int    curtime;
                    101: int Sys_Milliseconds (void)
                    102: {
                    103:        static int              base;
                    104:        static qboolean initialized = false;
                    105: 
                    106:        if (!initialized)
                    107:        {       // let base retain 16 bits of effectively random data
                    108:                base = timeGetTime() & 0xffff0000;
                    109:                initialized = true;
                    110:        }
                    111:        curtime = timeGetTime() - base;
                    112: 
                    113:        return curtime;
                    114: }
                    115: 
                    116: void Sys_Mkdir (char *path)
                    117: {
                    118:        _mkdir (path);
                    119: }
                    120: 
                    121: //============================================
                    122: 
                    123: char   findbase[MAX_OSPATH];
                    124: char   findpath[MAX_OSPATH];
                    125: int            findhandle;
                    126: 
                    127: static qboolean CompareAttributes( unsigned found, unsigned musthave, unsigned canthave )
                    128: {
                    129:        if ( ( found & _A_RDONLY ) && ( canthave & SFF_RDONLY ) )
                    130:                return false;
                    131:        if ( ( found & _A_HIDDEN ) && ( canthave & SFF_HIDDEN ) )
                    132:                return false;
                    133:        if ( ( found & _A_SYSTEM ) && ( canthave & SFF_SYSTEM ) )
                    134:                return false;
                    135:        if ( ( found & _A_SUBDIR ) && ( canthave & SFF_SUBDIR ) )
                    136:                return false;
                    137:        if ( ( found & _A_ARCH ) && ( canthave & SFF_ARCH ) )
                    138:                return false;
                    139: 
                    140:        if ( ( musthave & SFF_RDONLY ) && !( found & _A_RDONLY ) )
                    141:                return false;
                    142:        if ( ( musthave & SFF_HIDDEN ) && !( found & _A_HIDDEN ) )
                    143:                return false;
                    144:        if ( ( musthave & SFF_SYSTEM ) && !( found & _A_SYSTEM ) )
                    145:                return false;
                    146:        if ( ( musthave & SFF_SUBDIR ) && !( found & _A_SUBDIR ) )
                    147:                return false;
                    148:        if ( ( musthave & SFF_ARCH ) && !( found & _A_ARCH ) )
                    149:                return false;
                    150: 
                    151:        return true;
                    152: }
                    153: 
                    154: char *Sys_FindFirst (char *path, unsigned musthave, unsigned canthave )
                    155: {
                    156:        struct _finddata_t findinfo;
                    157: 
                    158:        if (findhandle)
                    159:                Sys_Error ("Sys_BeginFind without close");
                    160:        findhandle = 0;
                    161: 
                    162:        COM_FilePath (path, findbase);
                    163:        findhandle = _findfirst (path, &findinfo);
                    164:        if (findhandle == -1)
                    165:                return NULL;
                    166:        if ( !CompareAttributes( findinfo.attrib, musthave, canthave ) )
                    167:                return NULL;
                    168:        Com_sprintf (findpath, sizeof(findpath), "%s/%s", findbase, findinfo.name);
                    169:        return findpath;
                    170: }
                    171: 
                    172: char *Sys_FindNext ( unsigned musthave, unsigned canthave )
                    173: {
                    174:        struct _finddata_t findinfo;
                    175: 
                    176:        if (findhandle == -1)
                    177:                return NULL;
                    178:        if (_findnext (findhandle, &findinfo) == -1)
                    179:                return NULL;
                    180:        if ( !CompareAttributes( findinfo.attrib, musthave, canthave ) )
                    181:                return NULL;
                    182: 
                    183:        Com_sprintf (findpath, sizeof(findpath), "%s/%s", findbase, findinfo.name);
                    184:        return findpath;
                    185: }
                    186: 
                    187: void Sys_FindClose (void)
                    188: {
                    189:        if (findhandle != -1)
                    190:                _findclose (findhandle);
                    191:        findhandle = 0;
                    192: }
                    193: 
                    194: 
                    195: //============================================
                    196: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.