home *** CD-ROM | disk | FTP | other *** search
/ Mega Top 1 / os2_top1.zip / os2_top1 / APPS / UTILS / H-O / LESS177 / SCR.C < prev    next >
C/C++ Source or Header  |  1993-01-10  |  1KB  |  55 lines

  1. #include <stdio.h>
  2. #define INCL_NOPMAPI
  3. #define INCL_VIO
  4. #include <os2.h>
  5.  
  6. extern void clear_eol(), lower_left();
  7. extern int sc_height,sc_width;
  8.  
  9. unsigned char scrcell[2];
  10.  
  11. void savescr () {
  12.   VIOMODEINFO vmi;
  13.   USHORT scr_n;
  14.   scr_n=2;
  15.   VioGetMode(&vmi,0);  /* need screen h,w now */
  16. /* get color/attribute of last cell on screen */
  17.   VioReadCellStr(scrcell, &scr_n, vmi.row-1, vmi.col-1, 0);
  18.   sc_height=vmi.row;  /* in case we never reach part where screen */
  19.   sc_width=vmi.col;   /* width and height are read */
  20. }
  21.  
  22. void restorescr () {
  23.   unsigned char fore,back,k;
  24.   int bri=0,bli=0;
  25.   char endstr[6];
  26.   char colors[] = {0, 4, 2, 6, 1, 5, 3, 7};
  27.   k=scrcell[1];
  28.   fore=(k & 0x0f);
  29.   back=k >> 4;
  30.   if ( back > 7 ) {
  31.     back = (back & 0x07);
  32.     bli = 5;
  33.   }
  34.   if (fore > 7 ) {
  35.     fore = (fore & 0x07);
  36.     bri = 1;
  37.   }
  38.   if (bli != 0) {
  39.     if (bri != 0) {
  40.       strcpy(endstr, ";1;5m");
  41.     } else {
  42.       strcpy(endstr, ";5m");
  43.     }
  44.   } else {
  45.     if (bri != 0) {
  46.       strcpy(endstr, ";1m");
  47.     } else {
  48.       strcpy(endstr, "m");
  49.     }
  50.   }
  51.   lower_left(); flush();
  52.   fprintf(stderr,"\033[0;%d;%d%s\033[K\033[=7h",
  53.        colors[fore]+30, colors[back]+40, endstr);
  54. }
  55.