Annotation of quake1/vid_sv~1.c, revision 1.1

1.1     ! root        1: #include <termios.h>
        !             2: #include <sys/ioctl.h>
        !             3: #include <sys/stat.h>
        !             4: #include <sys/vt.h>
        !             5: #include <stdarg.h>
        !             6: #include <stdio.h>
        !             7: #include <signal.h>
        !             8: #include "/usr/local/include/vga.h"
        !             9: #include "/usr/local/include/vgakeyboard.h"
        !            10: #include "/usr/local/include/vgamouse.h"
        !            11: 
        !            12: #include "quakedef.h"
        !            13: #include "vid_256.h"
        !            14: 
        !            15: #define stringify(m) { #m, m }
        !            16: 
        !            17: viddef_t vid;
        !            18: 
        !            19: int num_modes;
        !            20: vga_modeinfo *modes;
        !            21: int current_mode;
        !            22: 
        !            23: int num_shades=32;
        !            24: 
        !            25: struct
        !            26: {
        !            27:        char *name;
        !            28:        int num;
        !            29: } mice[] =
        !            30: {
        !            31:        stringify(MOUSE_MICROSOFT),
        !            32:        stringify(MOUSE_MOUSESYSTEMS),
        !            33:        stringify(MOUSE_MMSERIES),
        !            34:        stringify(MOUSE_LOGITECH),
        !            35:        stringify(MOUSE_BUSMOUSE),
        !            36:        stringify(MOUSE_PS2),
        !            37: };
        !            38: 
        !            39: static unsigned char scantokey[128];
        !            40: 
        !            41: int num_mice = sizeof (mice) / sizeof(mice[0]);
        !            42: 
        !            43: int    d_con_indirect = 0;
        !            44: 
        !            45: int            svgalib_inited=0;
        !            46: int            UseMouse = 1;
        !            47: int            UseDisplay = 1;
        !            48: int            UseKeyboard = 1;
        !            49: 
        !            50: int            mouserate = MOUSE_DEFAULTSAMPLERATE;
        !            51: 
        !            52: char   *framebuffer_ptr;
        !            53: 
        !            54: cvar_t  mouse_button_commands[3] =
        !            55: {
        !            56:     {"mouse1","+attack"},
        !            57:     {"mouse2","+strafe"},
        !            58:     {"mouse3","+forward"},
        !            59: };
        !            60: cvar_t  mouse_sensitivity = {"sensitivity","5"};
        !            61: 
        !            62: int     mouse_buttons;
        !            63: int     mouse_oldbuttonstate;
        !            64: int     mouse_x, mouse_y;
        !            65: 
        !            66: /*
        !            67: =================
        !            68: VID_Gamma_f
        !            69: 
        !            70: Keybinding command
        !            71: =================
        !            72: */
        !            73: void VID_Gamma_f (void)
        !            74: {
        !            75:        float   gamma, f, inf;
        !            76:        unsigned char   palette[768];
        !            77:        int             i;
        !            78: 
        !            79:        if (Cmd_Argc () == 2)
        !            80:        {
        !            81:                gamma = Q_atof (Cmd_Argv(1));
        !            82: 
        !            83:                for (i=0 ; i<768 ; i++)
        !            84:                {
        !            85:                        f = pow ( (host_basepal[i]+1)/256.0 , gamma );
        !            86:                        inf = f*255 + 0.5;
        !            87:                        if (inf < 0)
        !            88:                                inf = 0;
        !            89:                        if (inf > 255)
        !            90:                                inf = 255;
        !            91:                        palette[i] = inf;
        !            92:                }
        !            93: 
        !            94:                VID_SetPalette (palette);
        !            95: 
        !            96:                vid.recalc_refdef = 1;                          // force a surface cache flush
        !            97:        }
        !            98: }
        !            99: 
        !           100: 
        !           101: void VID_InitModes(void)
        !           102: {
        !           103: 
        !           104:        int i;
        !           105: 
        !           106: // get complete information on all modes
        !           107: 
        !           108:        num_modes = vga_lastmodenumber()+1;
        !           109:        I_Printf("num_modes = %d\n", num_modes);
        !           110:        modes = Z_Malloc(num_modes * sizeof(vga_modeinfo));
        !           111:        for (i=0 ; i<num_modes ; i++)
        !           112:        {
        !           113:                if (vga_hasmode(i))
        !           114:                        Q_memcpy(&modes[i], vga_getmodeinfo(i), sizeof (vga_modeinfo));
        !           115:                else
        !           116:                        modes[i].width = 0; // means not available
        !           117:        }
        !           118: 
        !           119: // filter for modes i don't support
        !           120: 
        !           121:        for (i=0 ; i<num_modes ; i++)
        !           122:        {
        !           123:                if (modes[i].bytesperpixel != 1) modes[i].width = 0;
        !           124:        }
        !           125: 
        !           126: }
        !           127: 
        !           128: int get_mode(char *name, int width, int height, int depth)
        !           129: {
        !           130: 
        !           131:        int i;
        !           132:        int ok, match;
        !           133: 
        !           134:        match = (!!width) + (!!height)*2 + (!!depth)*4;
        !           135: 
        !           136:        if (name)
        !           137:        {
        !           138:                i = vga_getmodenumber(name);
        !           139:                if (!modes[i].width)
        !           140:                {
        !           141:                        I_Printf("Mode [%s] not supported\n", name);
        !           142:                        i = G320x200x256;
        !           143:                }
        !           144:        }
        !           145:        else
        !           146:        {
        !           147:                for (i=0 ; i<num_modes ; i++)
        !           148:                        if (modes[i].width)
        !           149:                        {
        !           150:                                ok = (modes[i].width == width)
        !           151:                                        + (modes[i].height == height)*2
        !           152:                                        + (modes[i].bytesperpixel == depth/8)*4;
        !           153:                                if ((ok & match) == ok)
        !           154:                                        break;
        !           155:                        }
        !           156:                if (i==num_modes)
        !           157:                {
        !           158:                        I_Printf("Mode %dx%d (%d bits) not supported\n",
        !           159:                                width, height, depth);
        !           160:                        i = G320x200x256;
        !           161:                }
        !           162:        }
        !           163: 
        !           164:        return i;
        !           165: 
        !           166: }
        !           167: 
        !           168: int matchmouse(int mouse, char *name)
        !           169: {
        !           170:        int i;
        !           171:        for (i=0 ; i<num_mice ; i++)
        !           172:                if (!strcmp(mice[i].name, name))
        !           173:                        return i;
        !           174:        return mouse;
        !           175: }
        !           176: 
        !           177: #if 0
        !           178: 
        !           179: void vtswitch(int newconsole)
        !           180: {
        !           181: 
        !           182:        int fd;
        !           183:        struct vt_stat x;
        !           184: 
        !           185: // switch consoles and wait until reactivated
        !           186:        fd = open("/dev/console", O_RDONLY);
        !           187:        ioctl(fd, VT_GETSTATE, &x);
        !           188:        ioctl(fd, VT_ACTIVATE, newconsole);
        !           189:        ioctl(fd, VT_WAITACTIVE, x.v_active);
        !           190:        close(fd);
        !           191: 
        !           192: }
        !           193: 
        !           194: #endif
        !           195: 
        !           196: void keyhandler(int scancode, int state)
        !           197: {
        !           198:        
        !           199:        int sc;
        !           200: 
        !           201:        sc = scancode & 0x7f;
        !           202: //     Con_Printf("scancode=%x (%d%s)\n", scancode, sc, scancode&0x80?"+128":"");
        !           203:        Key_Event(scantokey[sc], state == KEY_EVENTPRESS);
        !           204: 
        !           205: }
        !           206: 
        !           207: void VID_Shutdown(void)
        !           208: {
        !           209: 
        !           210:        if (!svgalib_inited) return;
        !           211: 
        !           212: //     printf("shutdown graphics called\n");
        !           213:        if (UseKeyboard)
        !           214:                keyboard_close();
        !           215:        if (UseDisplay)
        !           216:                vga_setmode(TEXT);
        !           217: //     printf("shutdown graphics finished\n");
        !           218: 
        !           219:        svgalib_inited = 0;
        !           220: 
        !           221: }
        !           222: 
        !           223: void VID_SetPalette(byte *palette)
        !           224: {
        !           225: 
        !           226:        static int tmppal[256*3];
        !           227:        int *tp;
        !           228:        int i;
        !           229: 
        !           230:        if (!svgalib_inited)
        !           231:                return;
        !           232: 
        !           233:        if (vga_getcolors() == 256)
        !           234:        {
        !           235: 
        !           236:                tp = tmppal;
        !           237:                for (i=256*3 ; i ; i--)
        !           238:                        *(tp++) = *(palette++) >> 2;
        !           239: 
        !           240:                if (UseDisplay)
        !           241:                        vga_setpalvec(0, 256, tmppal);
        !           242: 
        !           243:        }
        !           244: 
        !           245: }
        !           246: 
        !           247: void VID_Init(unsigned char *palette)
        !           248: {
        !           249: 
        !           250:        int i;
        !           251:        int w, h, d;
        !           252: 
        !           253:        if (svgalib_inited)
        !           254:                return;
        !           255: 
        !           256:        Cmd_AddCommand ("gamma", VID_Gamma_f);
        !           257: 
        !           258: /*
        !           259:     signal(SIGHUP, (void (*)(int)) I_Quit);
        !           260:     signal(SIGINT, (void (*)(int)) I_Quit);
        !           261:     signal(SIGKILL, (void (*)(int)) I_Quit);
        !           262:     signal(SIGTERM, (void (*)(int)) I_Quit);
        !           263:     signal(SIGSTOP, (void (*)(int)) I_Quit);
        !           264:     signal(SIGQUIT, (void (*)(int)) I_Quit);
        !           265: */
        !           266: 
        !           267:        if (UseDisplay)
        !           268:        {
        !           269:                vga_init();
        !           270: 
        !           271:                VID_InitModes();
        !           272: 
        !           273:        // interpret command-line params
        !           274: 
        !           275:                w = h = d = 0;
        !           276:                if (getenv("GSVGAMODE"))
        !           277:                        current_mode = get_mode(getenv("GSVGAMODE"), w, h, d);
        !           278:                else if (COM_CheckParm("-mode"))
        !           279:                        current_mode = get_mode(com_argv[COM_CheckParm("-mode")+1], w, h, d);
        !           280:                else if (COM_CheckParm("-w") || COM_CheckParm("-h")
        !           281:                        || COM_CheckParm("-d"))
        !           282:                {
        !           283:                        if (COM_CheckParm("-w"))
        !           284:                                w = Q_atoi(com_argv[COM_CheckParm("-w")+1]);
        !           285:                        if (COM_CheckParm("-h"))
        !           286:                                h = Q_atoi(com_argv[COM_CheckParm("-h")+1]);
        !           287:                        if (COM_CheckParm("-d"))
        !           288:                                d = Q_atoi(com_argv[COM_CheckParm("-d")+1]);
        !           289:                        current_mode = get_mode(0, w, h, d);
        !           290:                }
        !           291:                else
        !           292:                        current_mode = G320x200x256;
        !           293: 
        !           294:        // set vid parameters
        !           295: 
        !           296:                vid.width = modes[current_mode].width;
        !           297:                vid.rowbytes = modes[current_mode].linewidth;
        !           298:                vid.height = modes[current_mode].height;
        !           299:                vid.aspect = 1.0;
        !           300:                vid.colormap = (pixel_t *) colormap256;
        !           301:                vid.fullbright = 256 - LittleLong (*((int *)vid.colormap + 2048));
        !           302:                vid.buffer = (pixel_t *) Hunk_HighAlloc(vid.rowbytes * vid.height);
        !           303: 
        !           304:        // get goin'
        !           305: 
        !           306:                vga_setmode(current_mode);
        !           307:                framebuffer_ptr = (char *) vga_getgraphmem();
        !           308: //             if (vga_setlinearaddressing()>0)
        !           309: //                     framebuffer_ptr = (char *) vga_getgraphmem();
        !           310:                if (!framebuffer_ptr)
        !           311:                        I_Error("This mode isn't hapnin'\n");
        !           312: 
        !           313:                vga_setpage(0);
        !           314: 
        !           315:                svgalib_inited=1;
        !           316: 
        !           317:                VID_SetPalette(palette);
        !           318: 
        !           319:        }
        !           320: 
        !           321:        if (COM_CheckParm("-nokybd")) UseKeyboard = 0;
        !           322: 
        !           323:        if (UseKeyboard)
        !           324:        {
        !           325:                for (i=0 ; i<128 ; i++)
        !           326:                        scantokey[i] = ' ';
        !           327: 
        !           328:                scantokey[42] = K_SHIFT;
        !           329:                scantokey[54] = K_SHIFT;
        !           330:                scantokey[72] = K_UPARROW;
        !           331:                scantokey[103] = K_UPARROW;
        !           332:                scantokey[80] = K_DOWNARROW;
        !           333:                scantokey[108] = K_DOWNARROW;
        !           334:                scantokey[75] = K_LEFTARROW;
        !           335:                scantokey[105] = K_LEFTARROW;
        !           336:                scantokey[77] = K_RIGHTARROW;
        !           337:                scantokey[106] = K_RIGHTARROW;
        !           338:                scantokey[29] = K_CTRL;
        !           339:                scantokey[97] = K_CTRL;
        !           340:                scantokey[56] = K_ALT;
        !           341:                scantokey[100] = K_ALT;
        !           342: //             scantokey[58] = JK_CAPS;
        !           343: //             scantokey[69] = JK_NUM_LOCK;
        !           344: //             scantokey[71] = JK_HOME;
        !           345: //             scantokey[79] = JK_END;
        !           346: //             scantokey[83] = JK_DEL;
        !           347:                scantokey[1 ] = K_ESCAPE;
        !           348:                scantokey[28] = K_ENTER;
        !           349:                scantokey[15] = K_TAB;
        !           350:                scantokey[14] = K_BACKSPACE;
        !           351:                scantokey[119] = K_PAUSE;
        !           352:        scantokey[57] = ' ';
        !           353: 
        !           354:                scantokey[2] = '1';
        !           355:                scantokey[3] = '2';
        !           356:                scantokey[4] = '3';
        !           357:                scantokey[5] = '4';
        !           358:                scantokey[6] = '5';
        !           359:                scantokey[7] = '6';
        !           360:                scantokey[8] = '7';
        !           361:                scantokey[9] = '8';
        !           362:                scantokey[10] = '9';
        !           363:                scantokey[11] = '0';
        !           364:                scantokey[12] = '-';
        !           365:                scantokey[13] = '=';
        !           366:                scantokey[41] = '`';
        !           367:                scantokey[26] = '[';
        !           368:                scantokey[27] = ']';
        !           369:                scantokey[39] = ';';
        !           370:                scantokey[40] = '\'';
        !           371:                scantokey[51] = ',';
        !           372:                scantokey[52] = '.';
        !           373:                scantokey[53] = '/';
        !           374:                scantokey[43] = '\\';
        !           375: 
        !           376:                scantokey[59] = K_F1;
        !           377:                scantokey[60] = K_F2;
        !           378:                scantokey[61] = K_F3;
        !           379:                scantokey[62] = K_F4;
        !           380:                scantokey[63] = K_F5;
        !           381:                scantokey[64] = K_F6;
        !           382:                scantokey[65] = K_F7;
        !           383:                scantokey[66] = K_F8;
        !           384:                scantokey[67] = K_F9;
        !           385:                scantokey[68] = K_F10;
        !           386:                scantokey[87] = K_F11;
        !           387:                scantokey[88] = K_F12;
        !           388:                scantokey[30] = 'a';
        !           389:                scantokey[48] = 'b';
        !           390:                scantokey[46] = 'c';
        !           391:         scantokey[32] = 'd';       
        !           392:         scantokey[18] = 'e';       
        !           393:         scantokey[33] = 'f';       
        !           394:         scantokey[34] = 'g';       
        !           395:         scantokey[35] = 'h';       
        !           396:         scantokey[23] = 'i';       
        !           397:         scantokey[36] = 'j';       
        !           398:         scantokey[37] = 'k';       
        !           399:         scantokey[38] = 'l';       
        !           400:         scantokey[50] = 'm';       
        !           401:         scantokey[49] = 'n';       
        !           402:         scantokey[24] = 'o';       
        !           403:         scantokey[25] = 'p';       
        !           404:         scantokey[16] = 'q';       
        !           405:         scantokey[19] = 'r';       
        !           406:         scantokey[31] = 's';       
        !           407:         scantokey[20] = 't';       
        !           408:         scantokey[22] = 'u';       
        !           409:         scantokey[47] = 'v';       
        !           410:         scantokey[17] = 'w';       
        !           411:         scantokey[45] = 'x';       
        !           412:         scantokey[21] = 'y';       
        !           413:         scantokey[44] = 'z';       
        !           414: 
        !           415:                if (keyboard_init())
        !           416:                        I_Error("keyboard_init() failed");
        !           417:                keyboard_seteventhandler(keyhandler);
        !           418:        }
        !           419: 
        !           420: }
        !           421: 
        !           422: void VID_Update(vrect_t *rects)
        !           423: {
        !           424: 
        !           425:        int ycount;
        !           426:        int offset;
        !           427: 
        !           428:        if (!svgalib_inited)
        !           429:                return;
        !           430: 
        !           431:        while (rects)
        !           432:        {
        !           433:                ycount = rects->height;
        !           434:                offset = rects->y * vid.rowbytes + rects->x;
        !           435:                while (ycount--)
        !           436:                {
        !           437:                        memcpy(framebuffer_ptr + offset, vid.buffer + offset, rects->width);
        !           438:                        offset += vid.rowbytes;
        !           439:                }
        !           440: 
        !           441:                rects = rects->pnext;
        !           442:        }
        !           443: 
        !           444: }
        !           445: 
        !           446: static int dither;
        !           447: 
        !           448: void VID_DitherOn(void)
        !           449: {
        !           450:     if (dither == 0)
        !           451:     {
        !           452:         R_ViewChanged ();
        !           453:         dither = 1;
        !           454:     }
        !           455: }
        !           456: 
        !           457: void VID_DitherOff(void)
        !           458: {
        !           459:     if (dither)
        !           460:     {
        !           461:         R_ViewChanged ();
        !           462:         dither = 0;
        !           463:     }
        !           464: }
        !           465: 
        !           466: int I_OpenWindow(void)
        !           467: {
        !           468:        return 0;
        !           469: }
        !           470: 
        !           471: void I_EraseWindow(int window)
        !           472: {
        !           473: }
        !           474: 
        !           475: void I_DrawCircle(int window, int x, int y, int r)
        !           476: {
        !           477: }
        !           478: 
        !           479: void I_DisplayWindow(int window)
        !           480: {
        !           481: }
        !           482: 
        !           483: void Sys_SendKeyEvents(void)
        !           484: {
        !           485:        if (!svgalib_inited)
        !           486:                return;
        !           487: 
        !           488:        if (UseKeyboard)
        !           489:                while (keyboard_update());
        !           490: }
        !           491: 
        !           492: char *Sys_ConsoleInput (void)
        !           493: {
        !           494:        return 0;
        !           495: }
        !           496: 
        !           497: void mousehandler(int mouse_buttonstate, int dx, int dy)
        !           498: {
        !           499: 
        !           500:        int i;
        !           501: 
        !           502:     for (i=0 ; i<mouse_buttons ; i++)
        !           503:     {
        !           504:         if ( (mouse_buttonstate & (1<<i)) && !(mouse_oldbuttonstate & (1<<i)) )
        !           505:             Cbuf_AddText (mouse_button_commands[i].string);
        !           506: 
        !           507:         if ( !(mouse_buttonstate & (1<<i)) && (mouse_oldbuttonstate & (1<<i)) )
        !           508:         {
        !           509:             if (mouse_button_commands[i].string[0] == '+')
        !           510:             {
        !           511:                 mouse_button_commands[i].string[0] = '-';
        !           512:                 Cbuf_AddText (mouse_button_commands[i].string);
        !           513:                 mouse_button_commands[i].string[0] = '+';
        !           514:             }
        !           515:         }
        !           516:     }
        !           517: 
        !           518:        mouse_oldbuttonstate = mouse_buttonstate;
        !           519: 
        !           520:        mouse_x = dx*3;
        !           521:        mouse_y = dy*3;
        !           522: 
        !           523: }
        !           524: 
        !           525: void IN_Init(void)
        !           526: {
        !           527: 
        !           528:        int mtype;
        !           529:        char *mousedev;
        !           530:        int mouserate;
        !           531: 
        !           532:        if (UseMouse)
        !           533:        {
        !           534: 
        !           535:                Cvar_RegisterVariable (&mouse_button_commands[0]);
        !           536:                Cvar_RegisterVariable (&mouse_button_commands[1]);
        !           537:                Cvar_RegisterVariable (&mouse_button_commands[2]);
        !           538: 
        !           539:                Cvar_RegisterVariable (&mouse_sensitivity);
        !           540: 
        !           541:                mouse_buttons = 3;
        !           542: 
        !           543:                mtype = vga_getmousetype();
        !           544: 
        !           545:                mousedev = "/dev/mouse";
        !           546:                if (getenv("MOUSEDEV")) mousedev = getenv("MOUSEDEV");
        !           547:                if (COM_CheckParm("-mdev"))
        !           548:                        mousedev = com_argv[COM_CheckParm("-mdev")+1];
        !           549: 
        !           550:                mouserate = 1200;
        !           551:                if (getenv("MOUSERATE")) mouserate = atoi(getenv("MOUSERATE"));
        !           552:                if (COM_CheckParm("-mrate"))
        !           553:                        mouserate = atoi(com_argv[COM_CheckParm("-mrate")+1]);
        !           554: 
        !           555:                printf("Mouse: dev=%s,type=%s,speed=%d\n",
        !           556:                        mousedev, mice[mtype].name, mouserate);
        !           557:                if (mouse_init(mousedev, mtype, mouserate))
        !           558:                {
        !           559:                        Con_Printf("No mouse found\n");
        !           560:                        UseMouse = 0;
        !           561:                }
        !           562:                else
        !           563:                        mouse_seteventhandler(mousehandler);
        !           564: 
        !           565:        }
        !           566: 
        !           567: }
        !           568: 
        !           569: void IN_Shutdown(void)
        !           570: {
        !           571:        if (UseMouse)
        !           572:                mouse_close();
        !           573: }
        !           574: 
        !           575: void IN_Commands (void)
        !           576: {
        !           577:        if (UseMouse)
        !           578:                while (mouse_update());
        !           579: }
        !           580: 
        !           581: int CL_KeyState (int *key);
        !           582: extern int in_strafe;
        !           583: void IN_Move (usercmd_t *cmd)
        !           584: {
        !           585: 
        !           586:        if (!UseMouse)
        !           587:                return;
        !           588: 
        !           589: // add mouse X/Y movement to cmd
        !           590:        if (in_strafe)
        !           591:        {
        !           592:                cmd->sidemove += 0.8*mouse_sensitivity.value * mouse_x;
        !           593:                cmd->forwardmove -= 1.0*mouse_sensitivity.value * mouse_y;
        !           594:        }
        !           595:        else
        !           596:        {
        !           597:                cl_viewangles[YAW] -= 4.0/180*mouse_sensitivity.value * mouse_x;
        !           598:                cl_viewangles[PITCH] -= 4.0/180*mouse_sensitivity.value * mouse_y;
        !           599:        }
        !           600: 
        !           601:        if (cl_viewangles[PITCH] > 80)
        !           602:                cl_viewangles[PITCH] = 80;
        !           603:        if (cl_viewangles[PITCH] < -70)
        !           604:                cl_viewangles[PITCH] = -70;
        !           605: 
        !           606:        if (cl_viewangles[ROLL] > 50)
        !           607:                cl_viewangles[ROLL] = 50;
        !           608:        if (cl_viewangles[ROLL] < -50)
        !           609:                cl_viewangles[ROLL] = -50;
        !           610: 
        !           611: /*
        !           612:     if (!UseMouse)
        !           613:         return;
        !           614: 
        !           615: // add mouse X/Y movement to cmd
        !           616:     if (CL_KeyState (&in_strafe))
        !           617:     {
        !           618:         cmd->sidemove += 0.8*mouse_sensitivity.value * mouse_x;
        !           619:         cmd->forwardmove -= 1.0*mouse_sensitivity.value * mouse_y;
        !           620:     }
        !           621:     else
        !           622:     {
        !           623:         cmd->rightturn += 4.0/180*mouse_sensitivity.value * mouse_x;
        !           624:         cmd->upturn -= 4.0/180*mouse_sensitivity.value * mouse_y;
        !           625:     }
        !           626: 
        !           627: */
        !           628: 
        !           629: }
        !           630: 
        !           631: 
        !           632: 
        !           633: /*
        !           634: ================
        !           635: VID_NumModes
        !           636: ================
        !           637: */
        !           638: int VID_NumModes ()
        !           639: {
        !           640:        return (1);
        !           641: }
        !           642: 
        !           643: 
        !           644: /*
        !           645: ================
        !           646: VID_ModeInfo
        !           647: ================
        !           648: */
        !           649: char *VID_ModeInfo (int modenum)
        !           650: {
        !           651:        static char     *badmodestr = "Bad mode number";
        !           652:        static char modestr[40];
        !           653: 
        !           654:        if (modenum == 0)
        !           655:        {
        !           656:                sprintf (modestr, "%d x %d, %d bpp",
        !           657:                                 vid.width, vid.height, modes[current_mode].bytesperpixel*8);
        !           658:                return (modestr);
        !           659:        }
        !           660:        else
        !           661:        {
        !           662:                return (badmodestr);
        !           663:        }
        !           664: }

unix.superglobalmegacorp.com

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