Annotation of sbbs/src/conio/vidmodes.c, revision 1.1.1.2

1.1.1.2 ! root        1: /* $Id: vidmodes.c,v 1.14 2009/02/10 09:15:29 deuce Exp $ */
1.1       root        2: 
                      3: #include <stdlib.h>
                      4: 
                      5: #include "vidmodes.h"
                      6: 
1.1.1.2 ! root        7: struct video_params vparams[49] = {
1.1       root        8:        /* BW 40x25 */
                      9:        {BW40, GREYSCALE_PALETTE, 40, 25, 14, 15, 16, 8},
                     10:        /* CO 40x25 */
                     11:        {C40, COLOUR_PALETTE, 40, 25, 14, 15, 16, 8},
                     12:        /* BW 80x25 */
                     13:        {BW80, GREYSCALE_PALETTE, 80, 25, 14, 15, 16, 8},
                     14:        /* CO 80x25 */
                     15:        {C80, COLOUR_PALETTE, 80, 25, 14, 15, 16, 8},
                     16:        /* MONO */
                     17:        {MONO, 0, 80, 25, 14, 15, 16, 8},
                     18:        /* CO 40x14 */
                     19:        {C40X14, COLOUR_PALETTE, 40, 14, 14, 15, 16, 8},
                     20:        /* CO 40x21 */
                     21:        {C40X21, COLOUR_PALETTE, 40, 21, 14, 15, 16, 8},
                     22:        /* CO 40x28 */
                     23:        {C40X28, COLOUR_PALETTE, 40, 28, 12, 13, 14, 8},
                     24:        /* CO 40x43 */
                     25:        {C40X43, COLOUR_PALETTE, 40, 43, 7, 7, 8, 8},
                     26:        /* CO 40x50 */
                     27:        {C40X50, COLOUR_PALETTE, 40, 50, 7, 7, 8, 8},
                     28:        /* CO 40x60 */
                     29:        {C40X60, COLOUR_PALETTE, 40, 60, 7, 7, 8, 8},
                     30:        /* CO 80x14 */
                     31:        {C80X14, COLOUR_PALETTE, 80, 14, 14, 15, 16, 8},
                     32:        /* CO 80x21 */
                     33:        {C80X21, COLOUR_PALETTE, 80, 21, 14, 15, 16, 8},
                     34:        /* CO 80x28 */
                     35:        {C80X28, COLOUR_PALETTE, 80, 28, 12, 13, 14, 8},
                     36:        /* CO 80x43 */
                     37:        {C80X43, COLOUR_PALETTE, 80, 43, 7, 7, 8, 8},
                     38:        /* CO 80x50 */
                     39:        {C80X50, COLOUR_PALETTE, 80, 50, 7, 7, 8, 8},
                     40:        /* CO 80x60 */
                     41:        {C80X60, COLOUR_PALETTE, 80, 60, 7, 7, 8, 8},
                     42:        /* B 40x14 */
                     43:        {BW40X14, GREYSCALE_PALETTE, 40, 14, 14, 15, 16, 8},
                     44:        /* BW 40x21 */
                     45:        {BW40X21, GREYSCALE_PALETTE, 40, 21, 14, 15, 16, 8},
                     46:        /* BW 40x28 */
                     47:        {BW40X28, GREYSCALE_PALETTE, 40, 28, 12, 13, 14, 8},
                     48:        /* BW 40x43 */
                     49:        {BW40X43, GREYSCALE_PALETTE, 40, 43, 7, 7, 8, 8},
                     50:        /* BW 40x50 */
                     51:        {BW40X50, GREYSCALE_PALETTE, 40, 50, 7, 7, 8, 8},
                     52:        /* BW 40x60 */
                     53:        {BW40X60, GREYSCALE_PALETTE, 40, 60, 7, 7, 8, 8},
                     54:        /* BW 80x14 */
                     55:        {BW80X14, GREYSCALE_PALETTE, 80, 14, 14, 15, 16, 8},
                     56:        /* BW 80x21 */
                     57:        {BW80X21, GREYSCALE_PALETTE, 80, 21, 14, 15, 16, 8},
                     58:        /* BW 80x28 */
                     59:        {BW80X28, GREYSCALE_PALETTE, 80, 28, 12, 13, 14, 8},
                     60:        /* BW 80x43 */
                     61:        {BW80X43, GREYSCALE_PALETTE, 80, 43, 7, 7, 8, 8},
                     62:        /* BW 80x50 */
                     63:        {BW80X50, GREYSCALE_PALETTE, 80, 50, 7, 7, 8, 8},
                     64:        /* BW 80x60 */
                     65:        {BW80X60, GREYSCALE_PALETTE, 80, 60, 7, 7, 8, 8},
                     66:        /* MONO 80x14 */
                     67:        {MONO14, MONO_PALETTE, 80, 14, 14, 15, 16, 8},
                     68:        /* MONO 80x21 */
                     69:        {MONO21, MONO_PALETTE, 80, 21, 14, 15, 16, 8},
                     70:        /* MONO 80x28 */
                     71:        {MONO28, MONO_PALETTE, 80, 28, 12, 13, 14, 8},
                     72:        /* MONO 80x43 */
                     73:        {MONO43, MONO_PALETTE, 80, 43, 7, 7, 8, 8},
                     74:        /* MONO 80x50 */
                     75:        {MONO50, MONO_PALETTE, 80, 50, 7, 7, 8, 8},
                     76:        /* MONO 80x60 */
                     77:        {MONO60, MONO_PALETTE, 80, 60, 7, 7, 8, 8},
                     78:        /* Magical C4350 Mode */
                     79:        {C4350, COLOUR_PALETTE, 80, 50, 7, 7, 8, 8},
1.1.1.2 ! root       80:        /* Commodore 64 40x25 mode */
        !            81:        {C64_40X25, C64_PALETTE, 40, 25, 0, 7, 8, 8},
        !            82:        /* Commodore 128 40x25 mode */
        !            83:        {C128_40X25, COLOUR_PALETTE, 40, 25, 0, 7, 8, 8},
        !            84:        /* Commodore 128 80x25 mode */
        !            85:        {C128_80X25, COLOUR_PALETTE, 80, 25, 0, 7, 8, 8},
        !            86:        /* Atari 800 40x24 mode */
        !            87:        {ATARI_40X24, ATARI_PALETTE, 40, 24, 0, 7, 8, 8},
        !            88:        /* Atari 800 XEP80 80x25 mode */
        !            89:        {ATARI_80X25, GREYSCALE_PALETTE, 80, 25, 0, 15, 16, 8},
        !            90:        /* VESA 21x132 mode */
        !            91:        {VESA_132X21, COLOUR_PALETTE, 132, 21, 14, 15, 16, 8},
        !            92:        /* VESA 25x132 mode */
        !            93:        {VESA_132X25, COLOUR_PALETTE, 132, 25, 14, 15, 16, 8},
        !            94:        /* VESA 28x132 mode */
        !            95:        {VESA_132X28, COLOUR_PALETTE, 132, 28, 12, 13, 14, 8},
        !            96:        /* VESA 30x132 mode */
        !            97:        {VESA_132X30, COLOUR_PALETTE, 132, 30, 14, 15, 16, 8},
        !            98:        /* VESA 34x132 mode */
        !            99:        {VESA_132X34, COLOUR_PALETTE, 132, 34, 12, 13, 14, 8},
        !           100:        /* VESA 43x132 mode */
        !           101:        {VESA_132X43, COLOUR_PALETTE, 132, 34, 7, 7, 8, 8},
        !           102:        /* VESA 50x132 mode */
        !           103:        {VESA_132X50, COLOUR_PALETTE, 132, 50, 7, 7, 8, 8},
        !           104:        /* VESA 60x132 mode */
        !           105:        {VESA_132X60, COLOUR_PALETTE, 132, 60, 7, 7, 8, 8},
1.1       root      106: };
                    107: 
1.1.1.2 ! root      108: unsigned char palettes[5][16] = {
1.1       root      109:        /* Mono */
                    110:        { 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
                    111:          0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07
                    112:        },
                    113:        /* Black and White */
                    114:        { 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
                    115:          0x08, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f
                    116:        },
                    117:        /* Colour */
                    118:        { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 
                    119:          0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
1.1.1.2 ! root      120:        },
        !           121:        /* C64 */
        !           122:        { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 
        !           123:          0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
        !           124:        },
        !           125:        /* Atari */
        !           126:        { 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
        !           127:          0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21
        !           128:        },
1.1       root      129: };
                    130: 
1.1.1.2 ! root      131: struct dac_colors dac_default[TOTAL_DAC_SIZE] = {
1.1       root      132:        {0, 0, 0},    {0, 0, 168},   {0, 168, 0},   {0, 168, 168},
                    133:        {168, 0, 0},   {168, 0, 168},  {168, 84, 0},  {168, 168, 168},
                    134:        {84, 84, 84}, {84, 84, 255}, {84, 255, 84}, {84, 255, 255},
1.1.1.2 ! root      135:        {255, 84, 84}, {255, 84, 255}, {255, 255, 84}, {255, 255, 255},
        !           136:        /* C64 colours */
        !           137:        /* Black, White, Red, Cyan, Purple, Green, Blue, Yellow */
        !           138:        /* Orange, Brown, Lt Red, Dk Grey, Grey, Lt Green, Lt Blue, Lt Grey */
        !           139:        {0x00, 0x00, 0x00}, {0xff, 0xff, 0xff}, {0x68, 0x37, 0x2b}, 
        !           140:        {0x70, 0xa4, 0xb2}, {0x6f, 0x3d, 0x86}, {0x58, 0x8d, 0x43},
        !           141:        {0x35, 0x29, 0x79}, {0xb8, 0xc7, 0x6f}, {0x6f, 0x4f, 0x25},
        !           142:        {0x43, 0x39, 0x00}, {0x9a, 0x67, 0x59}, {0x44, 0x44, 0x44},
        !           143:        {0x6c, 0x6c, 0x6c}, {0x9a, 0xd2, 0x84}, {0x6c, 0x5e, 0xb5},
        !           144:        {0x95, 0x95, 0x95},
        !           145:        /* Atari Colours */
        !           146:        /* BG, FG */
        !           147:        {0, 81, 129}, {96, 183, 231},
1.1       root      148: };
                    149: 
                    150: int find_vmode(int mode)
                    151: {
                    152:     unsigned i;
                    153: 
                    154:        for (i = 0; i < NUMMODES; i++)
                    155:                if (vparams[i].mode == mode)
                    156:                        return i;
                    157: 
                    158:        return -1;
                    159: }
                    160: 
                    161: int load_vmode(struct video_stats *vs, int mode)
                    162: {
                    163:        int i;
                    164:        unsigned short *newvmem;
                    165: 
                    166:        i=find_vmode(mode);
                    167:        if(i==-1)
                    168:                return(-1);
                    169:        newvmem=(unsigned short *)realloc(vs->vmem, vparams[i].cols*vparams[i].rows*sizeof(unsigned short));
                    170:        if(newvmem==NULL)
                    171:                return(-1);
                    172:        vs->vmem=newvmem;
                    173:        vs->rows=vparams[i].rows;
                    174:        vs->cols=vparams[i].cols;
                    175:        vs->curs_start=vparams[i].curs_start;
                    176:        vs->curs_end=vparams[i].curs_end;
                    177:        vs->default_curs_start=vparams[i].curs_start;
                    178:        vs->default_curs_end=vparams[i].curs_end;
1.1.1.2 ! root      179:        vs->curs_blink=1;
        !           180:        vs->curs_visible=1;
        !           181:        vs->bright_background=0;
        !           182:        vs->no_bright=0;
        !           183:        vs->bright_altcharset=0;
1.1       root      184:        if(vs->curs_row < 0)
                    185:                vs->curs_row=0;
                    186:        if(vs->curs_row >= vparams[i].rows)
                    187:                vs->curs_row=vparams[i].rows-1;
                    188:        if(vs->curs_col < 0)
                    189:                vs->curs_col=0;
                    190:        if(vs->curs_col >= vparams[i].cols)
                    191:                vs->curs_col=vparams[i].cols-1;
1.1.1.2 ! root      192:        memcpy(vs->palette, palettes[vparams[i].palette], sizeof(vs->palette));
        !           193:        memcpy(vs->dac_colors, dac_default, sizeof(dac_default));
1.1       root      194:        vs->charheight=vparams[i].charheight;
                    195:        vs->charwidth=vparams[i].charwidth;
                    196:        vs->mode=mode;
                    197:        return(0);
                    198: }

unix.superglobalmegacorp.com

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