home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / COLOR.ZIP / COLOR.C < prev    next >
Text File  |  1989-03-14  |  3KB  |  160 lines

  1. /*
  2.  *    COLOR uses the OS/2 ANSI driver to set screen foreground and
  3.  *    background colors in protected mode.  Syntax is:
  4.  *
  5.  *        COLOR fb
  6.  *
  7.  *    where f = foreground color (X,x,B,b,G,g,C,c,R,r,M,m,Y,y,W,w), and
  8.  *          b = background color (x,b,g,c,r,m,y,w)
  9.  *
  10.  *    Compile and link with:  cl -Lp -G2 color.c
  11.  *
  12.  *    Copyright (c) 1989 Ziff Communications Co.
  13.  *    Written March 1989 for PC Magazine by Jeff Prosise
  14.  */
  15.  
  16. #include <stdio.h>
  17. #include <string.h>
  18.  
  19. #define API unsigned extern far pascal
  20.  
  21. API DosExit(int, int);
  22. API VioSetAnsi(int, int);
  23. API VioWrtTTY(char far *, int, int);
  24.  
  25. unsigned char ForeNum, BackNum;
  26. unsigned short EscLength = 4;
  27. char EscSeq[13] = "\033[0;";
  28.  
  29. char *ForeColor[8] = { "30;", "34;", "32;",
  30.                "36;", "31;", "35;",
  31.                "33;", "37;" };
  32.  
  33. char *BackColor[8] = { "40m", "44m", "42m",
  34.                "46m", "41m", "45m",
  35.                "43m", "47m" };
  36.  
  37. char *ErrTxt1 = "Usage: COLOR fb";
  38. char *ErrTxt2 = "Invalid color ID";
  39.  
  40. main(int argc, char *argv[])
  41. {
  42.     if (argc < 2) {
  43.         printf("%s\n", ErrTxt1);
  44.         DosExit(1, 1);
  45.     }
  46.  
  47.     if (strlen(argv[1]) < 2) {
  48.         printf("%s\n", ErrTxt1);
  49.         DosExit(1, 1);
  50.     }
  51.  
  52.     switch(argv[1][0]) {
  53.  
  54.         case 'X' :
  55.             EscLength += 2;
  56.         case 'x' :
  57.             ForeNum = 0;
  58.             break;
  59.  
  60.         case 'B' :
  61.             EscLength += 2;
  62.         case 'b' :
  63.             ForeNum = 1;
  64.             break;
  65.  
  66.         case 'G' :
  67.             EscLength += 2;
  68.         case 'g' :
  69.             ForeNum = 2;
  70.             break;
  71.  
  72.         case 'C' :
  73.             EscLength += 2;
  74.         case 'c' :
  75.             ForeNum = 3;
  76.             break;
  77.  
  78.         case 'R' :
  79.             EscLength += 2;
  80.         case 'r' :
  81.             ForeNum = 4;
  82.             break;
  83.  
  84.         case 'M' :
  85.             EscLength += 2;
  86.         case 'm' :
  87.             ForeNum = 5;
  88.             break;
  89.  
  90.         case 'Y' :
  91.             EscLength += 2;
  92.         case 'y' :
  93.             ForeNum = 6;
  94.             break;
  95.  
  96.         case 'W' :
  97.             EscLength += 2;
  98.         case 'w' :
  99.             ForeNum = 7;
  100.             break;
  101.  
  102.         default :
  103.             printf("%s\n", ErrTxt2);
  104.             DosExit(1, 1);
  105.     }
  106.     
  107.     if (EscLength == 6)
  108.         strcat(EscSeq, "1;");
  109.     strcat(EscSeq, ForeColor[ForeNum]);
  110.     EscLength += 3;
  111.  
  112.     switch (argv[1][1]) {
  113.  
  114.         case 'x' :
  115.             BackNum = 0;
  116.             break;
  117.  
  118.         case 'b' :
  119.             BackNum = 1;
  120.             break;
  121.  
  122.         case 'g' :
  123.             BackNum = 2;
  124.             break;
  125.  
  126.         case 'c' :
  127.             BackNum = 3;
  128.             break;
  129.  
  130.         case 'r' :
  131.             BackNum = 4;
  132.             break;
  133.  
  134.         case 'm' :
  135.             BackNum = 5;
  136.             break;
  137.  
  138.         case 'y' :
  139.             BackNum = 6;
  140.             break;
  141.  
  142.         case 'w' :
  143.             BackNum = 7;
  144.             break;
  145.  
  146.         default :
  147.             printf("%s\n", ErrTxt2);
  148.             DosExit(1, 1);
  149.     }
  150.  
  151.     strcat(EscSeq, BackColor[BackNum]);
  152.     EscLength += 3;
  153.  
  154.     VioSetAnsi(1, 0);
  155.  
  156.     VioWrtTTY(EscSeq, EscLength, 0);
  157.  
  158.     DosExit(1, 0);
  159. }
  160.