home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdarg.h>
- #include <string.h>
- #include <share.h>
-
- #include "termcap.h"
- #include "os2defs.h"
-
- char termname[40];
- char terminal[1024];
- char capabilities[1024];
- char *ptr = capabilities;
-
- int _line = -1, _col = -1;
- int _lines, _columns;
-
- char *_clearscreen, *_moveto, *_setinverse, *_clearinverse,
- *_cleartoeoln, *_initscreen, *_exitscreen;
-
- BYTE cell[2] = {0, 7};
-
- char outbuffer[1024];
- int outsize;
-
- void tflush(void)
- {
- write(1, outbuffer, outsize);
- outsize = 0;
- }
-
- void outchar(int c)
- {
- outbuffer[outsize++] = (char) c;
-
- if ( outsize == sizeof(outbuffer) )
- tflush();
- }
-
- void screxit(void)
- {
- tputs(_exitscreen, 1, outchar);
- tflush();
- }
-
- void scrinit(void)
- {
- VIOMODEINFO vmi;
-
- if (getenv("TERM") == NULL)
- strcpy(termname, "ansi");
- else
- strcpy(termname, getenv("TERM"));
-
- if ( tgetent(terminal, termname) != 1 )
- {
- printf("Termcap initialization error. Check TERM and TERMCAP.\n");
- exit(1);
- }
-
- vmi.cb = sizeof(vmi);
- VioGetMode(&vmi, 0);
- _lines = vmi.row;
- _columns = vmi.col;
-
- _line = 0; /* where are we right now?? */
- _col = 0; /* assume zero, zero... */
-
- _initscreen = tgetstr("ti", &ptr);
- _exitscreen = tgetstr("te", &ptr);
- _clearscreen = tgetstr("cl", &ptr);
- _moveto = tgetstr("cm", &ptr);
- _setinverse = tgetstr("so", &ptr);
- _clearinverse = tgetstr("se", &ptr);
- _cleartoeoln = tgetstr("ce", &ptr);
-
- tputs(_initscreen, 1, outchar);
- tflush();
- }
-
- void gotoxy(int col, int row)
- {
- char *stuff;
-
- _line = row - 1;
- _col = col - 1;
- stuff = tgoto(_moveto, _col, _line);
- tputs(stuff, 1, outchar);
- }
-
- void clreol(void)
- {
- tputs(_cleartoeoln, 1, outchar);
- }
-
- void clreos(void)
- {
- int i;
-
- puts("\033[s\033[K");
-
- for ( i = _line + 1; i < _lines - 1; i++ )
- printf("\033[%d;1H\033[K", i + 1);
-
- puts("\033[u");
-
- tflush();
- }
-
- void clrscr(void)
- {
- tputs(_clearscreen, 1, outchar);
- }
-
- void textcolor(int color)
- {
- if ( color )
- tputs(_clearinverse, 1, outchar);
- else
- tputs(_setinverse, 1, outchar);
- }
-
- void textbackground(int color)
- {
- }
-
- void delline(void)
- {
- USHORT nLen = 2;
- tflush();
- VioReadCellStr(cell, &nLen, 5, 0, 0);
- cell[0] = ' ';
- VioScrollUp(_line, 0, _lines - 2, _columns, 1, cell, 0);
- }
-
- void insline(void)
- {
- USHORT nLen = 2;
- tflush();
- VioReadCellStr(cell, &nLen, 5, 0, 0);
- cell[0] = ' ';
- VioScrollDn(_line, 0, _lines - 2, _columns, 1, cell, 0);
- }
-
- int puts(const char *string)
- {
- if ( string )
- while ( *string )
- outchar(*string++);
- }
-
- int printf(const char *format, ...)
- {
- va_list vap;
- char string[1024];
-
- va_start(vap, format);
- vsprintf(string, format, vap);
- va_end(vap);
- puts(string);
- }
-
- int fprintf(FILE *fp, const char *format, ...)
- {
- va_list vap;
- char string[256];
-
- tflush();
- va_start(vap, format);
- vfprintf(fp, format, vap);
- va_end(vap);
- }
-
- char *gets(char *buffer)
- {
- int len = 0, ch;
-
- tflush();
-
- while ( (ch = getch()) != '\r' )
- if ( ch == 27 ) /* ESCape */
- {
- buffer[0] = 0;
- return NULL;
- }
- else if ( ch == '\b' )
- {
- if ( len > 0 )
- {
- len--;
- outchar('\b');
- outchar(' ');
- outchar('\b');
- }
- }
- else if ( len < 78 )
- {
- buffer[len++] = (char) ch;
- outchar(ch);
- }
-
- buffer[len] = 0;
-
- return buffer;
- }
-
- void ignore_signals(void)
- {
- PFNSIGHANDLER pfns;
- USHORT pa;
-
- DosSetSigHandler(NULL, &pfns, &pa, SIGA_IGNORE, SIG_CTRLC);
- DosSetSigHandler(NULL, &pfns, &pa, SIGA_IGNORE, SIG_CTRLBREAK);
- }
-
- #define msg(x) \
- sprintf(buf, "*** waiting for lock on '%s' ***", x), message(x), tflush()
-
- #include "lock.c"
-