Annotation of quake1/sys_osf.c, revision 1.1

1.1     ! root        1: #include <unistd.h>
        !             2: #include <signal.h>
        !             3: #include <stdlib.h>
        !             4: #include <limits.h>
        !             5: #include <sys/time.h>
        !             6: #include <sys/types.h>
        !             7: #include <unistd.h>
        !             8: #include <fcntl.h>
        !             9: #include <stdarg.h>
        !            10: #include <stdio.h>
        !            11: #include <sys/ipc.h>
        !            12: #include <sys/shm.h>
        !            13: #include <sys/stat.h>
        !            14: #include <string.h>
        !            15: #include <ctype.h>
        !            16: #include <sys/wait.h>
        !            17: #include <errno.h>
        !            18: 
        !            19: #include "quakedef.h"
        !            20: 
        !            21: #define TICRATE (1.0/30)
        !            22: 
        !            23: FILE *debugfile=0;
        !            24: 
        !            25: // =======================================================================
        !            26: // General routines
        !            27: // =======================================================================
        !            28: 
        !            29: void I_DebugNumber(int y, int val)
        !            30: {
        !            31: }
        !            32: 
        !            33: /*
        !            34: void I_Printf (char *fmt, ...)
        !            35: {
        !            36:        va_list         argptr;
        !            37:        char            text[1024];
        !            38:        
        !            39:        va_start (argptr,fmt);
        !            40:        vsprintf (text,fmt,argptr);
        !            41:        va_end (argptr);
        !            42:        fprintf(stderr, "%s", text);
        !            43:        
        !            44:        Con_Print (text);
        !            45: }
        !            46: */
        !            47: 
        !            48: void I_Printf (char *fmt, ...)
        !            49: {
        !            50:        va_list         argptr;
        !            51:        char            text[1024], *t_p;
        !            52:        int                     l, r;
        !            53:        
        !            54:        va_start (argptr,fmt);
        !            55:        vsprintf (text,fmt,argptr);
        !            56:        va_end (argptr);
        !            57:        
        !            58:        l = strlen(text);
        !            59:        t_p = text;
        !            60:        
        !            61: // make sure everything goes through, even though we are non-blocking
        !            62:        while (l)
        !            63:        {
        !            64:                r = write (1, text, l);
        !            65:                if (r == -1)
        !            66:                {
        !            67:                        usleep (10);
        !            68:                        continue;
        !            69:                }
        !            70:                t_p += r;
        !            71:                l -= r;
        !            72:        }
        !            73: }
        !            74: 
        !            75: void I_Quit (void)
        !            76: {
        !            77:     fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) & ~FNDELAY);
        !            78:        S_Shutdown();
        !            79:        exit(0);
        !            80: }
        !            81: 
        !            82: void I_Error (char *error, ...)
        !            83: { 
        !            84:     va_list     argptr;
        !            85:     char        string[1024];
        !            86:     
        !            87:     fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) & ~FNDELAY);
        !            88:     va_start (argptr,error);
        !            89:     vsprintf (string,error,argptr);
        !            90:     va_end (argptr);
        !            91:        fprintf(stderr, "Error: %s\n", string);
        !            92:        S_Shutdown();
        !            93:        exit(-1);
        !            94: } 
        !            95: 
        !            96: void I_Warn (char *warning, ...)
        !            97: { 
        !            98:     va_list     argptr;
        !            99:     char        string[1024];
        !           100:     
        !           101:     va_start (argptr,warning);
        !           102:     vsprintf (string,warning,argptr);
        !           103:     va_end (argptr);
        !           104:        fprintf(stderr, "Warning: %s", string);
        !           105: } 
        !           106: 
        !           107: int I_FileOpenRead (char *path, int *handle)
        !           108: {
        !           109:        int     h;
        !           110:        struct stat     fileinfo;
        !           111:     
        !           112:        
        !           113:        h = open (path, O_RDONLY, 0666);
        !           114:        *handle = h;
        !           115:        if (h == -1)
        !           116:                return -1;
        !           117:        
        !           118:        if (fstat (h,&fileinfo) == -1)
        !           119:                I_Error ("Error fstating %s", path);
        !           120: 
        !           121:        return fileinfo.st_size;
        !           122: }
        !           123: 
        !           124: int I_FileOpenWrite (char *path)
        !           125: {
        !           126:        int     handle;
        !           127: 
        !           128:        umask (0);
        !           129:        
        !           130:        handle = open(path,O_RDWR | O_CREAT | O_TRUNC
        !           131:        , 0666);
        !           132: 
        !           133:        if (handle == -1)
        !           134:                I_Error ("Error opening %s: %s", path,strerror(errno));
        !           135: 
        !           136:        return handle;
        !           137: }
        !           138: 
        !           139: int I_FileWrite (int handle, void *src, int count)
        !           140: {
        !           141:        return write (handle, src, count);
        !           142: }
        !           143: 
        !           144: void I_FileClose (int handle)
        !           145: {
        !           146:        close (handle);
        !           147: }
        !           148: 
        !           149: void I_FileSeek (int handle, int position)
        !           150: {
        !           151:        lseek (handle, position, SEEK_SET);
        !           152: }
        !           153: 
        !           154: int I_FileRead (int handle, void *dest, int count)
        !           155: {
        !           156:        return read (handle, dest, count);
        !           157: }
        !           158: 
        !           159: void I_DebugLog(char *file, char *fmt, ...)
        !           160: {
        !           161:     va_list argptr; 
        !           162:     static char data[1024];
        !           163:     int fd;
        !           164:     
        !           165:     va_start(argptr, fmt);
        !           166:     vsprintf(data, fmt, argptr);
        !           167:     va_end(argptr);
        !           168: //    fd = open(file, O_WRONLY | O_BINARY | O_CREAT | O_APPEND, 0666);
        !           169:     fd = open(file, O_WRONLY | O_CREAT | O_APPEND, 0666);
        !           170:     write(fd, data, strlen(data));
        !           171:     close(fd);
        !           172: }
        !           173: 
        !           174: /*=============
        !           175: StartMSRInterval
        !           176: =============   
        !           177: */
        !           178: void StartMSRInterval(int msreg)
        !           179: { 
        !           180: }
        !           181: 
        !           182: /*
        !           183: =============
        !           184: EndMSRInterval
        !           185: =============
        !           186: */ 
        !           187: unsigned long EndMSRInterval()
        !           188: { 
        !           189:     return 0;
        !           190: }
        !           191: 
        !           192: /*
        !           193: ============
        !           194: FileTime
        !           195: 
        !           196: returns -1 if not present
        !           197: ============
        !           198: */
        !           199: int    FileTime (char *path)
        !           200: {
        !           201:        struct  stat    buf;
        !           202:        
        !           203:        if (stat (path,&buf) == -1)
        !           204:                return -1;
        !           205:        
        !           206:        return buf.st_mtime;
        !           207: }
        !           208: 
        !           209: cvar_t sys_showfiles = {"showfiles","1"};
        !           210: 
        !           211: 
        !           212: void Sys_EditFile(char *filename)
        !           213: {
        !           214: 
        !           215:        char cmd[256];
        !           216:        char *term;
        !           217:        char *editor;
        !           218: 
        !           219:        term = getenv("TERM");
        !           220:        if (term && !strcmp(term, "xterm"))
        !           221:        {
        !           222:                editor = getenv("VISUAL");
        !           223:                if (!editor)
        !           224:                        editor = getenv("EDITOR");
        !           225:                if (!editor)
        !           226:                        editor = getenv("EDIT");
        !           227:                if (!editor)
        !           228:                        editor = "vi";
        !           229:                sprintf(cmd, "xterm -e %s %s", editor, filename);
        !           230:                system(cmd);
        !           231:        }
        !           232: 
        !           233: }
        !           234: 
        !           235: double I_FloatTime (void)
        !           236: {
        !           237:     struct timeval tp;
        !           238:     struct timezone tzp; 
        !           239:     static int      secbase; 
        !           240:     
        !           241:     gettimeofday(&tp, &tzp);  
        !           242: 
        !           243:     if (!secbase)
        !           244:     {
        !           245:         secbase = tp.tv_sec;
        !           246:         return tp.tv_usec/1000000.0;
        !           247:     }
        !           248: 
        !           249:     return (tp.tv_sec - secbase) + tp.tv_usec/1000000.0;
        !           250: }
        !           251: 
        !           252: // =======================================================================
        !           253: // Sleeps for microseconds
        !           254: // =======================================================================
        !           255: 
        !           256: static volatile int oktogo;
        !           257: 
        !           258: void alarm_handler(int x)
        !           259: {
        !           260:        oktogo=1;
        !           261: }
        !           262: 
        !           263: void I_Sleep(int usecs)
        !           264: {
        !           265: 
        !           266:        struct itimerval it;
        !           267: 
        !           268:        it.it_interval.tv_sec = 0;
        !           269:        it.it_interval.tv_usec = 0;
        !           270:        it.it_value.tv_sec = usecs / 1000000;
        !           271:        it.it_value.tv_usec = usecs % 1000000;
        !           272: 
        !           273:        signal(SIGALRM, alarm_handler);
        !           274: 
        !           275:        oktogo=0;
        !           276:        setitimer(ITIMER_REAL, &it, 0);
        !           277:        while (!oktogo) sleep(0);
        !           278: 
        !           279: }
        !           280: 
        !           281: byte *I_ZoneBase (int *size)
        !           282: {
        !           283: 
        !           284:        char *QUAKEOPT = getenv("QUAKEOPT");
        !           285: 
        !           286:        *size = 0xc00000;
        !           287:        if (QUAKEOPT)
        !           288:        {
        !           289:                while (*QUAKEOPT)
        !           290:                        if (tolower(*QUAKEOPT++) == 'm')
        !           291:                        {
        !           292:                                *size = atof(QUAKEOPT) * 1024*1024;
        !           293:                                break;
        !           294:                        }
        !           295:        }
        !           296:        return malloc (*size);
        !           297: 
        !           298: }
        !           299: 
        !           300: 
        !           301: void Sys_Sleep(void)
        !           302: {
        !           303:        sleep(0);
        !           304: }
        !           305: 
        !           306: void I_GetMemory(quakeparms_t *parms)
        !           307: {
        !           308:     FILE *f;
        !           309:     char buffer[256];
        !           310:        char *procparse;
        !           311:     int freemem, buffermem, totalmem;
        !           312:     int rc, suggestion;
        !           313: 
        !           314:        parms->memsize = 8*1024*1024;
        !           315: 
        !           316:     f = fopen("/proc/meminfo", "r");
        !           317:     if (f)
        !           318:        {
        !           319:                fgets(buffer, sizeof buffer, f);
        !           320:                procparse = "%s %d %d %d %d %d";
        !           321:                rc = fscanf(f, procparse, buffer, &totalmem, buffer, &freemem,
        !           322:                  buffer, &buffermem);
        !           323: 
        !           324:                suggestion = (9*buffermem)/10 + freemem;
        !           325:                if (suggestion > totalmem)
        !           326:                        I_Printf("[%s] did not properly parse /proc/meminfo\n", procparse);
        !           327:                if (suggestion > parms->memsize && suggestion < totalmem)
        !           328:                        parms->memsize = suggestion;
        !           329: 
        !           330:                fclose(f);
        !           331:        }
        !           332:        else
        !           333:                I_Printf("Did you know /proc breaks up painful gas bubbles?\n");
        !           334: 
        !           335:        parms->membase = malloc (parms->memsize);
        !           336: 
        !           337: }
        !           338: 
        !           339: 
        !           340: void floating_point_exception_handler(int whatever)
        !           341: {
        !           342:        I_Warn("floating point exception\n");
        !           343:        signal(SIGFPE, floating_point_exception_handler);
        !           344: }
        !           345: 
        !           346: int main (int c, char **v)
        !           347: {
        !           348: 
        !           349:        extern qboolean pr_debugerrors;
        !           350:        double          time, oldtime, newtime;
        !           351:        quakeparms_t parms;
        !           352: 
        !           353:        pr_debugerrors = false;
        !           354: 
        !           355:        signal(SIGFPE, floating_point_exception_handler);
        !           356: 
        !           357:        fcntl(0, F_SETFL, fcntl (0, F_GETFL, 0) | FNDELAY);
        !           358: 
        !           359:        parms.memsize = 0x1000000;
        !           360:        parms.membase = malloc (parms.memsize);
        !           361:        parms.basedir = "/usr/tmp/lquake/";
        !           362: 
        !           363:        COM_InitArgv (c, v);
        !           364: 
        !           365:        parms.argc = com_argc;
        !           366:        parms.argv = com_argv;
        !           367: 
        !           368:     Quake_Init(&parms);
        !           369:                
        !           370:        if (COM_CheckParm ("-debugfile"))
        !           371:        {
        !           372:                char    hostname[80];
        !           373:                char    filename[80];
        !           374:                
        !           375:                gethostname(hostname, sizeof(hostname));
        !           376:                sprintf (filename, "%s.dbg",hostname);
        !           377:                debugfile = fopen (filename,"w");
        !           378: 
        !           379:                net_debug = true;
        !           380:        }
        !           381: 
        !           382:     oldtime = I_FloatTime ();
        !           383:     while (1)
        !           384:     {
        !           385: // find time spent rendering last frame
        !           386:         newtime = I_FloatTime ();
        !           387:         time = newtime - oldtime;
        !           388: 
        !           389: //        if ( !cl_connected && time < TICRATE)
        !           390:         if ( host_dedicated && time < TICRATE)
        !           391:         {
        !           392:             I_Sleep (1);
        !           393:             continue;       // not time to run a server only tic yet
        !           394:         }
        !           395: 
        !           396:         Host_Frame(time);
        !           397: //        CL_Frame(time);
        !           398: 
        !           399:         oldtime = newtime;
        !           400:     }
        !           401: 
        !           402:     Quake_Shutdown();
        !           403: 
        !           404: }
        !           405: 

unix.superglobalmegacorp.com

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