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