Annotation of os2sdk/demos/apps/setega/setega.c, revision 1.1.1.1

1.1       root        1:  /*** SETEGA.C OS/2 demo program to switch EGA between 25- and 43- line modes
                      2:   *
                      3:   *   SETEGA accepts one parameter, which must be either "25" or "43".
                      4:   *   Too few or too many parameters, or a parameter other than the two
                      5:   *   specified above, will result in an error message and termination
                      6:   *   with no action taken.
                      7:   *
                      8:   *   This program will work only on machines equipped with a standard EGA.
                      9:   *
                     10:   *   SETEGA functions as follows:
                     11:   *
                     12:   *     1) Check parameters
                     13:   *
                     14:   *     2) Clear the screen, using the VIOSCROLLUP function as described
                     15:   *        in the CLRSCR example elsewhere in these bulletin boards
                     16:   *
                     17:   *     3) Get current mode information using VIOGETMODE
                     18:   *
                     19:   *             extern unsigned far pascal VIOGETMODE (
                     20:   *                    struct ModeData far *,
                     21:   *                    unsigned );
                     22:   *
                     23:   *        This call fills a data structure of type
                     24:   *
                     25:   *             struct ModeData {
                     26:   *                    unsigned length;
                     27:   *                    unsigned char type;
                     28:   *                    unsigned char color;
                     29:   *                    unsigned col;
                     30:   *                    unsigned row;
                     31:   *                    unsigned hres;
                     32:   *                    unsigned vres;
                     33:   *                    };
                     34:   *
                     35:   *        whose address we pass in the first parameter. The second
                     36:   *        parameter is the VIO handle, a reserved word of zeros.
                     37:   *
                     38:   *     4) We leave all these fields as they are except "row", the number
                     39:   *        of alphanumeric rows for this mode. This is changed to the
                     40:   *        value specified in our parameter.
                     41:   *
                     42:   *     5) VIOSETMODE is now used to set the mode.
                     43:   *
                     44:   *             extern unsigned far pascal VIOSETMODE (
                     45:   *                    struct ModeData far *,
                     46:   *                    unsigned );
                     47:   *
                     48:   *        This call has the same parameters as VIOGETMODE.
                     49:   *        We are now set to the desired mode.
                     50:   *
                     51:   *     6) We then set the cursor to an appropriate size and shape. This is
                     52:   *        done by filling in a structure of the type
                     53:   *
                     54:   *             struct CursorData {
                     55:   *                    unsigned cur_start;
                     56:   *                    unsigned cur_end;
                     57:   *                    unsigned cur_width;
                     58:   *                    unsigned cur_attribute;
                     59:   *                    };
                     60:   *
                     61:   *        with appropriate values, then calling VIOSETCURTYPE
                     62:   *
                     63:   *             extern unsigned far pascal VIOSETCURTYPE (
                     64:   *                    struct CursorData far *,
                     65:   *                    unsigned );
                     66:   *
                     67:   *        where the second parameter is again the VIO handle, 0.
                     68:   *
                     69:   *     7) Last, we set the cursor to the upper left hand corner of the
                     70:   *        screen using VIOSETCURPOS.
                     71:   *
                     72:   *
                     73:   *   Compile using the -Lp option; this program may be bound for use under
                     74:   *   real mode.
                     75:   */
                     76: 
                     77: #include <subcalls.h>
                     78: #include <doscalls.h>
                     79: #include <stdio.h>
                     80: 
                     81: void usage();
                     82: 
                     83: void main( argc, argv )
                     84: int  argc;
                     85: char *argv[];
                     86: {
                     87: 
                     88:     struct  ModeData   modedata;
                     89: 
                     90:     struct  CursorData cursordata;
                     91: 
                     92:     static char  buffer[2] = { 0x20, 0x07 };    /* scrolling fill character */
                     93:                                                 /* for clearing the screen  */
                     94:     if( argc != 2 )
                     95:        usage(argv[0]);
                     96: 
                     97:     switch(atoi(argv[1])) {
                     98:        case 43:
                     99:            VIOSCROLLUP( 0, 0, -1, -1, -1, (char far *)buffer, 0 );
                    100:            modedata.length = sizeof( modedata );
                    101:            VIOGETMODE( &modedata, 0 );
                    102:            modedata.row = 43;
                    103:            VIOSETMODE( &modedata, 0 );
                    104:            cursordata.cur_start = 7;
                    105:            cursordata.cur_end = 7;
                    106:            cursordata.cur_width = 1;
                    107:            cursordata.cur_attribute = 0;
                    108:            VIOSETCURTYPE( &cursordata, 0 );
                    109:            VIOSETCURPOS( 0, 0, 0 );
                    110:        break;
                    111:        
                    112:        case 25:
                    113:            VIOSCROLLUP( 0, 0, -1, -1, -1, (char far *)buffer, 0 );
                    114:            modedata.length = sizeof( modedata );
                    115:            VIOGETMODE( &modedata, 0 );
                    116:            modedata.row = 25;
                    117:            VIOSETMODE( &modedata, 0 );
                    118:            cursordata.cur_start = 12;
                    119:            cursordata.cur_end = 13;
                    120:            cursordata.cur_width = 1;
                    121:            cursordata.cur_attribute = 0;
                    122:            VIOSETCURTYPE( &cursordata, 0 );
                    123:            VIOSETCURPOS( 0, 0, 0 );
                    124:        break;
                    125: 
                    126:        default:
                    127:            usage(argv[0]);
                    128:        }
                    129:        exit(0);
                    130: }
                    131: 
                    132: void
                    133: usage(p)
                    134: char *p;
                    135: {
                    136:     printf( "usage: %s 25|43\n", p);
                    137:     exit(1);
                    138: }

unix.superglobalmegacorp.com

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