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