Annotation of quake2/rhapsody/sys_rhap.m, revision 1.1.1.1

1.1       root        1: #include <libc.h>
                      2: #import <AppKit/AppKit.h>
                      3: #include "../qcommon/qcommon.h"
                      4: 
                      5: int            curtime;
                      6: int            sys_frame_time;
                      7: 
                      8: void   Sys_UnloadGame (void)
                      9: {
                     10: }
                     11: 
                     12: void *GetGameAPI (void *import);
                     13: 
                     14: void   *Sys_GetGameAPI (void *parms)
                     15: {
                     16:        // we are hard-linked in, so no need to load anything
                     17:     return GetGameAPI (parms);
                     18: }
                     19: 
                     20: void Sys_CopyProtect (void)
                     21: {
                     22: }
                     23: 
                     24: char *Sys_GetClipboardData( void )
                     25: {
                     26:     return NULL;
                     27: }
                     28: 
                     29: 
                     30: //===========================================================================
                     31: 
                     32: int            hunkcount;
                     33: 
                     34: byte   *membase;
                     35: int            hunkmaxsize;
                     36: int            cursize;
                     37: 
                     38: //#define      VIRTUAL_ALLOC
                     39: 
                     40: void *Hunk_Begin (int maxsize)
                     41: {
                     42:     // reserve a huge chunk of memory, but don't commit any yet
                     43:     cursize = 0;
                     44:     hunkmaxsize = maxsize;
                     45: #ifdef VIRTUAL_ALLOC
                     46:     membase = VirtualAlloc (NULL, maxsize, MEM_RESERVE, PAGE_NOACCESS);
                     47: #else
                     48:     membase = malloc (maxsize);
                     49:     memset (membase, 0, maxsize);
                     50: #endif
                     51:     if (!membase)
                     52:         Sys_Error ("VirtualAlloc reserve failed");
                     53:     return (void *)membase;
                     54: }
                     55: 
                     56: void *Hunk_Alloc (int size)
                     57: {
                     58:     void       *buf;
                     59: 
                     60:     // round to cacheline
                     61:     size = (size+31)&~31;
                     62: 
                     63: #ifdef VIRTUAL_ALLOC
                     64:     // commit pages as needed
                     65: //     buf = VirtualAlloc (membase+cursize, size, MEM_COMMIT, PAGE_READWRITE);
                     66:     buf = VirtualAlloc (membase, cursize+size, MEM_COMMIT, PAGE_READWRITE);
                     67:     if (!buf)
                     68:     {
                     69:         FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &buf, 0, NULL);
                     70:         Sys_Error ("VirtualAlloc commit failed.\n%s", buf);
                     71:     }
                     72: #endif
                     73:     cursize += size;
                     74:     if (cursize > hunkmaxsize)
                     75:         Sys_Error ("Hunk_Alloc overflow");
                     76: 
                     77:     return (void *)(membase+cursize-size);
                     78: }
                     79: 
                     80: int Hunk_End (void)
                     81: {
                     82: 
                     83:     // free the remaining unused virtual memory
                     84: #if 0
                     85:     void       *buf;
                     86: 
                     87:     // write protect it
                     88:     buf = VirtualAlloc (membase, cursize, MEM_COMMIT, PAGE_READONLY);
                     89:     if (!buf)
                     90:         Sys_Error ("VirtualAlloc commit failed");
                     91: #endif
                     92: 
                     93:     hunkcount++;
                     94: //Com_Printf ("hunkcount: %i\n", hunkcount);
                     95:     return cursize;
                     96: }
                     97: 
                     98: void Hunk_Free (void *base)
                     99: {
                    100:     if ( base )
                    101: #ifdef VIRTUAL_ALLOC
                    102:         VirtualFree (base, 0, MEM_RELEASE);
                    103: #else
                    104:         free (base);
                    105: #endif
                    106: 
                    107:     hunkcount--;
                    108: }
                    109: 
                    110: 
                    111: //===========================================================================
                    112: 
                    113: 
                    114: void Sys_Mkdir (char *path)
                    115: {
                    116:        if (mkdir (path, 0777) != -1)
                    117:                return;
                    118:        if (errno != EEXIST)
                    119:                Com_Error (ERR_FATAL, "mkdir %s: %s",path, strerror(errno)); 
                    120: }
                    121: 
                    122: char   *Sys_FindFirst (char *path, unsigned musthave, unsigned canthave)
                    123: {
                    124:     return NULL;
                    125: }
                    126: 
                    127: char   *Sys_FindNext (unsigned musthave, unsigned canthave)
                    128: {
                    129:     return NULL;
                    130: }
                    131: 
                    132: void   Sys_FindClose (void)
                    133: {
                    134: }
                    135: 
                    136: /*
                    137: ================
                    138: Sys_Milliseconds
                    139: ================
                    140: */
                    141: int Sys_Milliseconds (void)
                    142: {
                    143:        struct timeval tp;
                    144:        struct timezone tzp;
                    145:        static int              secbase;
                    146: 
                    147:        gettimeofday(&tp, &tzp);
                    148:        
                    149:        if (!secbase)
                    150:        {
                    151:                secbase = tp.tv_sec;
                    152:                return tp.tv_usec/1000;
                    153:        }
                    154:        
                    155:     curtime = (tp.tv_sec - secbase)*1000 + tp.tv_usec/1000;
                    156: 
                    157:     return curtime;
                    158: }
                    159: 
                    160: /*
                    161: ================
                    162: Sys_Error
                    163: ================
                    164: */
                    165: void Sys_Error (char *error, ...)
                    166: {
                    167:        va_list         argptr;
                    168:        char            string[1024];
                    169:        
                    170: // change stdin to non blocking
                    171:        fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) & ~FNDELAY);
                    172: 
                    173:        va_start (argptr,error);
                    174:        vsprintf (string,error,argptr);
                    175:        va_end (argptr);
                    176:        printf ("Fatal error: %s\n",string);
                    177:        
                    178:        if (!NSApp)
                    179:        {       // appkit isn't running, so don't try to pop up a panel
                    180:                exit (1);
                    181:        }
                    182:         NSRunAlertPanel (@"Fatal error",[NSString stringWithCString: string]
                    183:                          ,@"exit",NULL,NULL);
                    184:        [NSApp terminate: NULL];
                    185:         exit(1);
                    186: }
                    187: 
                    188: /*
                    189: ================
                    190: Sys_Printf
                    191: ================
                    192: */
                    193: void   Sys_ConsoleOutput (char *text)
                    194: {
                    195:        char            *t_p;
                    196:        int                     l, r;
                    197:        
                    198:        l = strlen(text);
                    199:        t_p = text;
                    200:        
                    201: // make sure everything goes through, even though we are non-blocking
                    202:        while (l)
                    203:        {
                    204:                r = write (1, text, l);
                    205:                if (r != l)
                    206:                        sleep (0);
                    207:                if (r > 0)
                    208:                {
                    209:                        t_p += r;
                    210:                        l -= r;
                    211:                }
                    212:        }
                    213: }
                    214: 
                    215: /*
                    216: ================
                    217: Sys_Quit
                    218: ================
                    219: */
                    220: void Sys_Quit (void)
                    221: {
                    222: // change stdin to blocking
                    223:        fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) & ~FNDELAY);
                    224: 
                    225:        if (!NSApp)
                    226:                exit (0);               // appkit isn't running
                    227: 
                    228:         [NSApp terminate:nil];
                    229: }
                    230: 
                    231: 
                    232: /*
                    233: ================
                    234: Sys_Init
                    235: ================
                    236: */
                    237: void Sys_Init(void)
                    238: {
                    239:     moncontrol(0);     // turn off profiling except during real Quake work
                    240: 
                    241: // change stdin to non blocking
                    242:      fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) | FNDELAY);      
                    243: }
                    244: 
                    245: 
                    246: extern NSWindow        *vid_window_i;
                    247: 
                    248: void Sys_AppActivate (void)
                    249: {
                    250:     [vid_window_i makeKeyAndOrderFront: nil];
                    251: }
                    252: 
                    253: 
                    254: /*
                    255: ================
                    256: Sys_SendKeyEvents
                    257: 
                    258: service any pending appkit events
                    259: ================
                    260: */
                    261: void Sys_SendKeyEvents (void)
                    262: {
                    263:        NSEvent *event;
                    264:        NSDate  *date;
                    265: 
                    266:        date = [NSDate date];
                    267:        do
                    268:        {
                    269:                event = [NSApp
                    270:             nextEventMatchingMask:     0xffffffff
                    271:             untilDate:         date
                    272:             inMode:                    @"NSDefaultRunLoopMode"
                    273:             dequeue:           YES];
                    274:                if (event)
                    275:                        [NSApp  sendEvent: event];
                    276:        } while (event);
                    277: 
                    278:     // grab frame time 
                    279:     sys_frame_time = Sys_Milliseconds();
                    280: }
                    281: 
                    282: 
                    283: /*
                    284: ================
                    285: Sys_ConsoleInput
                    286: 
                    287: Checks for a complete line of text typed in at the console, then forwards
                    288: it to the host command processor
                    289: ================
                    290: */
                    291: char *Sys_ConsoleInput (void)
                    292: {
                    293:        static char     text[256];
                    294:        int             len;
                    295: 
                    296:        len = read (0, text, sizeof(text));
                    297:        if (len < 1)
                    298:                return NULL;
                    299:        text[len-1] = 0;        // rip off the /n and terminate
                    300:        
                    301:        return text;
                    302: }
                    303: 
                    304: 
                    305: /*
                    306: =============
                    307: main
                    308: =============
                    309: */
                    310: void main (int argc, char **argv)
                    311: {
                    312:     int                frame;
                    313:     NSAutoreleasePool *pool;
                    314:        int             oldtime, t;
                    315:         
                    316:     pool = [[NSAutoreleasePool alloc] init];
                    317:         
                    318:     Qcommon_Init (argc, argv);
                    319: 
                    320:     [pool release];
                    321: 
                    322:     oldtime = Sys_Milliseconds ();
                    323:     while (1)
                    324:     {
                    325:         pool =[[NSAutoreleasePool alloc] init];
                    326: 
                    327:         if (++frame > 10)
                    328:             moncontrol(1);// profile only while we do each Quake frame
                    329: 
                    330:                t = Sys_Milliseconds ();
                    331:         Qcommon_Frame (t - oldtime);
                    332:                oldtime = t;
                    333:         moncontrol(0);
                    334: 
                    335:         [pool release];
                    336:     }
                    337: }
                    338: 

unix.superglobalmegacorp.com

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