home *** CD-ROM | disk | FTP | other *** search
- /*
- * vmode.c
- *
- * XCS Chinese System
- *
- */
-
- #pragma inline
- #include <stdio.h>
-
- unsigned char vmode, page;
-
- int TestCHCS()
- {
- static char ChcsMark[8] = "\x0d\x0a\x09\CHCS";
-
- asm {
- push es
- push di
- push si
- mov ax, 3f00h
- int 16h
- mov di, bx
- lea si, ChcsMark
- mov cx, 5
- cld
- repz cmpsb
- pop si
- pop di
- pop es
- jnz NoCHCS
- }
- inCHCS: return 1;
- NoCHCS:
- printf("vmode: CHCS Chinese System not installed !\n");
- exit(0);
- }
-
- void GetCurMode()
- {
- asm {
- mov ah, 0fh
- int 10h
- mov vmode, al
- mov page, bh
- }
- }
-
- void SetMode(unsigned char mode)
- {
- asm {
- mov ah, 0
- mov al, mode
- int 10h
- }
- }
-
- void VModeToCMode()
- {
- if (vmode != 3) return;
- asm {
- mov ax, 3f10h
- mov bh, 0
- mov bl, 1
- int 16h
- }
- }
-
- void VModeToCEMode()
- {
- if (vmode != 3) return;
- asm {
- mov ax, 3f10h
- mov bh, 0
- mov bl, 0
- int 16h
- }
- }
-
- void VModeToEMode()
- {
- if (vmode != 3) return;
- asm {
- mov ax, 3f10h
- mov bh, 0
- mov bl, 2
- int 16h
- }
- }
-
- void GetTabMode()
- {
- asm {
- push si
- mov ax, 3f01h
- int 16h
- pop si
- test bl, 08h
- jz isTabOFF
- }
- isTabON: printf("╫╘╢»▒φ╕±╩╢▒≡┤ª└φ┐¬\n"); exit(0);
- isTabOFF:printf("╫╘╢»▒φ╕±╩╢▒≡┤ª└φ╣╪\n"); exit(0);
- }
-
- void SetTabOn()
- {
- asm {
- mov ax, 3f10h
- mov bh, 4
- mov bl, 1
- int 16h
- }
- }
-
- void SetTabOff()
- {
- asm {
- mov ax, 3f10h
- mov bh, 4
- mov bl, 0
- int 16h
- }
- }
-
- void PrUsage()
- {
- printf("\n\tCHCS ╩╡╙├│╠╨≥ VMODE Version 1.00"
- "\n\tCopyright (c) │┬╜¡─■ 1993,1994.\n"
- "\n\t╙├╖¿: VMODE [VGA─ú╩╜║┼ (hex)]"
- "\n\t VMODE TO <H | R | Y>"
- "\n\t VMODE TAB [ON | OFF]"
- "\n\t╛┘└²: VMODE 3"
- "\n\t VMODE to R"
- "\n\t VMODE tab on"
- );
- exit(0);
- }
-
- int isValidMode(int mode)
- {
- if (mode > 0x13 || (mode > 7 && mode < 0xd)) return 0;
- else return 1;
- }
-
- void main(int argc, char *argv[])
- {
- unsigned char mode;
- register int i;
-
- if (strcmp(argv[1], "/?") == 0) PrUsage();
-
- GetCurMode();
- if (argc == 1) {
- printf("╡▒╟░╧╘╩╛─ú╩╜║┼: %02x hex\n", vmode);
- if (page) printf("╡▒╟░╧╘╩╛╥│├µ: %d\n", page);
- exit(0);
- }
-
- if (strcmp(strupr(argv[1]), "TO") == 0) {
- TestCHCS();
- if (argc < 3 || strlen(argv[2]) > 1) PrUsage();
-
- switch(toupper(argv[2][0])) {
- case 'H': VModeToCMode(); exit(0);
- case 'R': VModeToCEMode(); exit(0);
- case 'Y': VModeToEMode(); exit(0);
- default: PrUsage();
- }
- }
- else
- if (strcmp(strupr(argv[1]), "TAB") == 0) {
- TestCHCS();
- if (argc == 2) GetTabMode();
- else
- if (strcmp(strupr(argv[2]), "ON") == 0) SetTabOn();
- else
- if (strcmp(strupr(argv[2]), "OFF") == 0) SetTabOff();
- }
- else {
- for (i = 0; i < strlen(strupr(argv[1])); i ++) {
- if (! strchr("0123456789ABCDEF", argv[1][i])) exit(0xff);
- }
- sscanf(argv[1], "%x", &mode);
- if (isValidMode(mode)) SetMode(mode);
- }
- }
-