Annotation of quake2/rhapsody/sys_rhap.m, revision 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.