home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / snews-20.zip / OS2UTIL.C < prev    next >
C/C++ Source or Header  |  1992-08-02  |  4KB  |  220 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdarg.h>
  4. #include <string.h>
  5. #include <share.h>
  6.  
  7. #include "termcap.h"
  8. #include "os2defs.h"
  9.  
  10. char termname[40];
  11. char terminal[1024];
  12. char capabilities[1024];
  13. char *ptr = capabilities;
  14.  
  15. int _line = -1, _col = -1;
  16. int _lines, _columns;
  17.  
  18. char *_clearscreen, *_moveto, *_setinverse, *_clearinverse,
  19.      *_cleartoeoln, *_initscreen, *_exitscreen;
  20.  
  21. BYTE cell[2] = {0, 7};
  22.  
  23. char outbuffer[1024];
  24. int outsize;
  25.  
  26. void tflush(void)
  27. {
  28.   write(1, outbuffer, outsize);
  29.   outsize = 0;
  30. }
  31.  
  32. void outchar(int c)
  33. {
  34.   outbuffer[outsize++] = (char) c;
  35.  
  36.   if ( outsize == sizeof(outbuffer) )
  37.     tflush();
  38. }
  39.  
  40. void screxit(void)
  41. {
  42.   tputs(_exitscreen, 1, outchar);
  43.   tflush();
  44. }
  45.  
  46. void scrinit(void)
  47. {
  48.   VIOMODEINFO vmi;
  49.  
  50.   if (getenv("TERM") == NULL)
  51.     strcpy(termname, "ansi");
  52.   else
  53.     strcpy(termname, getenv("TERM"));
  54.  
  55.   if ( tgetent(terminal, termname) != 1 )
  56.   {
  57.     printf("Termcap initialization error. Check TERM and TERMCAP.\n");
  58.     exit(1);
  59.   }
  60.  
  61.   vmi.cb = sizeof(vmi);
  62.   VioGetMode(&vmi, 0);
  63.   _lines   = vmi.row;
  64.   _columns = vmi.col;
  65.  
  66.   _line  =  0;        /* where are we right now?? */
  67.   _col   =  0;        /* assume zero, zero...     */
  68.  
  69.   _initscreen        = tgetstr("ti", &ptr);
  70.   _exitscreen        = tgetstr("te", &ptr);
  71.   _clearscreen       = tgetstr("cl", &ptr);
  72.   _moveto            = tgetstr("cm", &ptr);
  73.   _setinverse        = tgetstr("so", &ptr);
  74.   _clearinverse      = tgetstr("se", &ptr);
  75.   _cleartoeoln       = tgetstr("ce", &ptr);
  76.  
  77.   tputs(_initscreen, 1, outchar);
  78.   tflush();
  79. }
  80.  
  81. void gotoxy(int col, int row)
  82. {
  83.   char *stuff;
  84.  
  85.   _line = row - 1;
  86.   _col  = col - 1;
  87.   stuff = tgoto(_moveto, _col, _line);
  88.   tputs(stuff, 1, outchar);
  89. }
  90.  
  91. void clreol(void)
  92. {
  93.   tputs(_cleartoeoln, 1, outchar);
  94. }
  95.  
  96. void clreos(void)
  97. {
  98.   int i;
  99.  
  100.   puts("\033[s\033[K");
  101.  
  102.   for ( i = _line + 1; i < _lines - 1; i++ )
  103.     printf("\033[%d;1H\033[K", i + 1);
  104.  
  105.   puts("\033[u");
  106.  
  107.   tflush();
  108. }
  109.  
  110. void clrscr(void)
  111. {
  112.   tputs(_clearscreen, 1, outchar);
  113. }
  114.  
  115. void textcolor(int color)
  116. {
  117.   if ( color )
  118.     tputs(_clearinverse, 1, outchar);
  119.   else
  120.     tputs(_setinverse, 1, outchar);
  121. }
  122.  
  123. void textbackground(int color)
  124. {
  125. }
  126.  
  127. void delline(void)
  128. {
  129.   USHORT nLen = 2;
  130.   tflush();
  131.   VioReadCellStr(cell, &nLen, 5, 0, 0);
  132.   cell[0] = ' ';
  133.   VioScrollUp(_line, 0, _lines - 2, _columns, 1, cell, 0);
  134. }
  135.  
  136. void insline(void)
  137. {
  138.   USHORT nLen = 2;
  139.   tflush();
  140.   VioReadCellStr(cell, &nLen, 5, 0, 0);
  141.   cell[0] = ' ';
  142.   VioScrollDn(_line, 0, _lines - 2, _columns, 1, cell, 0);
  143. }
  144.  
  145. int puts(const char *string)
  146. {
  147.   if ( string )
  148.     while ( *string )
  149.       outchar(*string++);
  150. }
  151.  
  152. int printf(const char *format, ...)
  153. {
  154.   va_list vap;
  155.   char string[1024];
  156.  
  157.   va_start(vap, format);
  158.   vsprintf(string, format, vap);
  159.   va_end(vap);
  160.   puts(string);
  161. }
  162.  
  163. int fprintf(FILE *fp, const char *format, ...)
  164. {
  165.   va_list vap;
  166.   char string[256];
  167.  
  168.   tflush();
  169.   va_start(vap, format);
  170.   vfprintf(fp, format, vap);
  171.   va_end(vap);
  172. }
  173.  
  174. char *gets(char *buffer)
  175. {
  176.   int len = 0, ch;
  177.  
  178.   tflush();
  179.  
  180.   while ( (ch = getch()) != '\r' )
  181.     if ( ch == 27 ) /* ESCape */
  182.     {
  183.     buffer[0] = 0;
  184.     return NULL;
  185.     }
  186.     else if ( ch == '\b' )
  187.     {
  188.       if ( len > 0 )
  189.       {
  190.         len--;
  191.         outchar('\b');
  192.         outchar(' ');
  193.         outchar('\b');
  194.       }
  195.     }
  196.     else if ( len < 78 )
  197.     {
  198.       buffer[len++] = (char) ch;
  199.       outchar(ch);
  200.     }
  201.  
  202.   buffer[len] = 0;
  203.  
  204.   return buffer;
  205. }
  206.  
  207. void ignore_signals(void)
  208. {
  209.   PFNSIGHANDLER pfns;
  210.   USHORT pa;
  211.   
  212.   DosSetSigHandler(NULL, &pfns, &pa, SIGA_IGNORE, SIG_CTRLC);
  213.   DosSetSigHandler(NULL, &pfns, &pa, SIGA_IGNORE, SIG_CTRLBREAK);
  214. }
  215.  
  216. #define msg(x) \
  217.   sprintf(buf, "*** waiting for lock on '%s' ***", x), message(x), tflush()
  218.   
  219. #include "lock.c"
  220.