home *** CD-ROM | disk | FTP | other *** search
/ Popular Software (Premium Edition) / mycd.iso / DICT / DFKC / ZWH / CHCS / VMODE.C < prev    next >
Encoding:
C/C++ Source or Header  |  1998-01-12  |  3.4 KB  |  187 lines

  1. /*
  2.  * vmode.c
  3.  *
  4.  * XCS Chinese System
  5.  *
  6.  */
  7.  
  8. #pragma  inline
  9. #include <stdio.h>
  10.  
  11.    unsigned char vmode, page;
  12.  
  13. int TestCHCS()
  14. {
  15.    static char   ChcsMark[8] = "\x0d\x0a\x09\CHCS";
  16.  
  17.    asm {
  18.        push es
  19.        push di
  20.        push si
  21.        mov  ax, 3f00h
  22.        int  16h
  23.        mov  di, bx
  24.        lea  si, ChcsMark
  25.        mov  cx, 5
  26.        cld
  27.        repz cmpsb
  28.        pop  si
  29.        pop  di
  30.        pop  es
  31.        jnz  NoCHCS
  32.    }
  33.    inCHCS:  return 1;
  34.    NoCHCS:  
  35.       printf("vmode: CHCS Chinese System not installed !\n");
  36.       exit(0);
  37. }
  38.  
  39. void GetCurMode()
  40. {
  41.    asm {
  42.        mov  ah, 0fh
  43.        int  10h
  44.        mov  vmode, al
  45.        mov  page, bh
  46.    }
  47. }
  48.  
  49. void SetMode(unsigned char mode)
  50. {
  51.    asm {
  52.        mov  ah, 0
  53.        mov  al, mode
  54.        int  10h
  55.    }
  56. }
  57.  
  58. void VModeToCMode()
  59. {
  60.    if (vmode != 3) return;
  61.    asm {
  62.        mov  ax, 3f10h
  63.        mov  bh, 0
  64.        mov  bl, 1
  65.        int  16h
  66.    }
  67. }
  68.  
  69. void VModeToCEMode()
  70. {
  71.    if (vmode != 3) return;
  72.    asm {
  73.        mov  ax, 3f10h
  74.        mov  bh, 0
  75.        mov  bl, 0
  76.        int  16h
  77.    }
  78. }
  79.  
  80. void VModeToEMode()
  81. {
  82.    if (vmode != 3) return;
  83.    asm {
  84.        mov  ax, 3f10h
  85.        mov  bh, 0
  86.        mov  bl, 2
  87.        int  16h
  88.    }
  89. }
  90.  
  91. void GetTabMode()
  92. {
  93.    asm {
  94.        push si
  95.        mov  ax, 3f01h
  96.        int  16h
  97.        pop  si
  98.        test bl, 08h
  99.        jz   isTabOFF
  100.    }
  101.    isTabON: printf("╫╘╢»▒φ╕±╩╢▒≡┤ª└φ┐¬\n");  exit(0);
  102.    isTabOFF:printf("╫╘╢»▒φ╕±╩╢▒≡┤ª└φ╣╪\n");  exit(0);
  103. }
  104.  
  105. void SetTabOn()
  106. {
  107.    asm {
  108.        mov  ax, 3f10h
  109.        mov  bh, 4
  110.        mov  bl, 1
  111.        int  16h
  112.    }
  113. }
  114.  
  115. void SetTabOff()
  116. {
  117.    asm {
  118.        mov  ax, 3f10h
  119.        mov  bh, 4
  120.        mov  bl, 0
  121.        int  16h
  122.    }
  123. }
  124.  
  125. void PrUsage()
  126. {
  127.    printf("\n\tCHCS ╩╡╙├│╠╨≥ VMODE Version 1.00"
  128.           "\n\tCopyright (c) │┬╜¡─■  1993,1994.\n"
  129.           "\n\t╙├╖¿: VMODE [VGA─ú╩╜║┼ (hex)]"
  130.           "\n\t      VMODE TO <H | R | Y>"
  131.           "\n\t      VMODE TAB [ON | OFF]"
  132.           "\n\t╛┘└²: VMODE 3"
  133.           "\n\t      VMODE to R"
  134.           "\n\t      VMODE tab on"
  135.    );
  136.    exit(0);
  137. }
  138.  
  139. int isValidMode(int mode)
  140. {
  141.    if (mode > 0x13 || (mode > 7 && mode < 0xd)) return 0;
  142.    else return 1;
  143. }
  144.  
  145. void main(int argc, char *argv[])
  146. {
  147.    unsigned char mode;
  148.    register int  i;
  149.  
  150.    if (strcmp(argv[1], "/?") == 0) PrUsage();
  151.    
  152.    GetCurMode();
  153.    if (argc == 1) {
  154.       printf("╡▒╟░╧╘╩╛─ú╩╜║┼: %02x hex\n", vmode);
  155.       if (page) printf("╡▒╟░╧╘╩╛╥│├µ: %d\n", page);
  156.       exit(0);
  157.    }
  158.  
  159.    if (strcmp(strupr(argv[1]), "TO") == 0) {
  160.       TestCHCS();
  161.       if (argc < 3 || strlen(argv[2]) > 1) PrUsage();
  162.  
  163.       switch(toupper(argv[2][0])) {
  164.          case 'H':  VModeToCMode();  exit(0);
  165.          case 'R':  VModeToCEMode();  exit(0);
  166.          case 'Y':  VModeToEMode();  exit(0);
  167.          default:   PrUsage();
  168.       }
  169.    }
  170.    else 
  171.    if (strcmp(strupr(argv[1]), "TAB") == 0) {
  172.       TestCHCS();
  173.       if (argc == 2) GetTabMode();
  174.       else
  175.       if (strcmp(strupr(argv[2]), "ON") == 0) SetTabOn();
  176.       else
  177.       if (strcmp(strupr(argv[2]), "OFF") == 0) SetTabOff();
  178.    }
  179.    else {
  180.       for (i = 0; i < strlen(strupr(argv[1])); i ++) {
  181.          if (! strchr("0123456789ABCDEF", argv[1][i])) exit(0xff);
  182.       }
  183.       sscanf(argv[1], "%x", &mode);
  184.       if (isValidMode(mode)) SetMode(mode);
  185.    }
  186. }
  187.