|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.