Mercurial > hg > Members > kono > nitros9-code
view 3rdparty/packages/uucpbb/src/termio.c @ 3295:6b7a7b233925 default tip
makefile: Allow PORTS with level1/2 mix
https://sourceforge.net/p/nitros9/feature-requests/10/
author | Tormod Volden <debian.tormod@gmail.com> |
---|---|
date | Tue, 19 Apr 2022 18:12:17 +0200 |
parents | 5ba8e711a1a3 |
children |
line wrap: on
line source
/* termio.c Terminal I/O support routines Copyright (C) 1993 Boisy G. Pitre This file is part of the OS-9 UUCP package, UUCPbb. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. The author of UUCPbb, Bob Billson, can be contacted at: bob@kc2wz.bubble.org or uunet!kc2wz!bob or by snail mail: 21 Bates Way, Westfield, NJ 07090 */ #include "uucp.h" #ifdef TERMCAP # ifndef BSDISH # ifdef _OSK # include <termcap.h> # else # include "ttydefs.h" # endif # endif #ifdef _OSK #define TCAPSLEN 2048 #else #define TCAPSLEN 400 /* CoCo */ #endif extern char *getenv(); void ErEOLine(); void curxy(); int nrows, ncolumns; static char tcapbuf[TCAPSLEN]; # ifdef _OSK char PC_, /* pad character */ *BC, /* cursor backspace */ *UP; /* cursor up */ short ospeed; # else char PC_; /* rest are defined in termcap library */ #ifdef BSDISH char *UP; #endif # endif static char *CM, *CL, *DL, *CE, *CD, *SO, *SE, *BL, *VE, *VI, *CR; # ifndef _OSK # ifndef BSDISH # include <os9.h> char *crtbynam(); char *crtbypth(); # define LINESIZE 80 char *crtbynam(line, buffer) char *line, *buffer; { char linebuff[LINESIZE], int found = 0; /* indicates tty line was found */ register char *workptr; FILE * ttysfd; /* Open the TTYTYPE file, in either of three directories */ if ((ttysfd = fopen ("/r0/sys/ttytype", "r")) == NULL) if ((ttysfd = fopen ("/r/sys/ttytype", "r")) == NULL) ttysfd = fopen ("/dd/sys/ttytype", "r"); /* Search through the TTYTYPE file for a match on this 'line' */ if (ttysfd != NULL) { #ifdef DEBUG fprintf (stderr, "File 'ttytype' was found and opened ok\n"); #endif while (fgets (linebuff, LINESIZE, ttysfd) != NULL) { if (workptr = index (linebuff, ' ')) { /* Terminate the LINE name */ *workptr++ = '\0'; /* Index forward to the CRT name */ workptr = skipbl (workptr); if (strucmp (line, linebuff) == 0) { found++; #ifdef DEBUG fprintf(stderr,"line %s was found in the file\n",line); #endif strcpy (buffer, workptr); for (workptr = buffer; (!isspace (*workptr)); workptr++) { /* do nothing */; } *workptr = '\0'; #ifdef DEBUG fprintf(stderr,"content of buffer [crtname] is: %s\n",buffer); #endif break; } } } fclose (ttysfd); if (found) return (buffer); else return ((char *)NULL); } else return ((char *)NULL); } /* Don't need this right now on CoCo? --REB */ # ifdef ORIGCODE char *crtbypth (path, buffer) int path; char *buffer; { char line[32]; *line = '/'; getstat (SS_DEVNM, path, &line[1]); strhcpy (line, line); return (crtbynam (line, buffer)); } # endif # endif # endif void term (str) char *str; { fputs (str, stderr); exit(0); } void init_term_cap() { # ifdef _OSK register char *term_type; # else # ifdef BSDISH char *term_type; char tt[32]; # else char term_type[32]; # endif # endif #ifdef _OSK char tcbuf[2048]; #else char tcbuf[1024]; /* CoCo */ #endif char *ptr = tcapbuf; if ((term_type = getenv ("TERM")) == 0) { term ("Environment variable TERM not defined!\n"); } # ifdef BSDISH strcpy (tt, term_type); term_type = tt; # endif if (tgetent (tcbuf, term_type) <= 0) { sprintf (tcbuf, "Unknown terminal type '%s'\n", term_type); term (tcbuf); } if ((CL = tgetstr ("cl", &ptr)) == NULL) term ("'cl' capability not found\n"); if ((CM = tgetstr ("cm", &ptr)) == NULL) term ("'cm' capability not found\n"); if ((CE = tgetstr ("ce", &ptr)) == NULL) term ("'ce' capability not found\n"); if ((CD = tgetstr ("cd", &ptr)) == NULL) term("'cd' capability not found\n"); if ((DL = tgetstr ("dl", &ptr)) == NULL) { if ((CR = tgetstr("cr", &ptr)) == NULL) CR = "\015"; } UP = tgetstr ("up", &ptr); if ((SO = tgetstr ("so", &ptr)) != NULL) SE = tgetstr ("se", &ptr); else if ((SO = tgetstr ("md", &ptr)) != NULL) SE = tgetstr ("me", &ptr); else if ((SO = tgetstr ("us", &ptr)) != NULL) SE = tgetstr ("ue", &ptr); else SE = NULL; VI = tgetstr ("vi", &ptr); VE = tgetstr ("ve", &ptr); BL = tgetstr ("bl", &ptr); if (ptr >= &tcapbuf[TCAPSLEN]) term ("Terminal description too big\n"); nrows = tgetnum ("li"); ncolumns = tgetnum ("co"); if (!nrows || !ncolumns) { nrows = 80; ncolumns = 24; } } #endif #ifdef BSDISH void out_char (c) char c; { write (1, &c, 1); } #define FPUTS(STR,FD) tputs(STR,1,out_char) #else #define FPUTS(STR,FD) fputs(STR,FD) #endif void CurUp() { #ifdef TERMCAP # ifdef BSDISH fflush (stdout); # endif FPUTS (UP, stdout); #else putchar ('\x09'); #endif fflush (stdout); } void DelLine() { #ifdef TERMCAP if (DL == NULL) { # ifdef BSDISH fflush(stdout); # endif FPUTS(CR, stdout); FPUTS(CE, stdout); } else { FPUTS (DL, stdout); } #else FPUTS ("\x1f\x31", stdout); #endif fflush (stdout); } void DelLines (startline, numlines) int startline, numlines; { curxy (0, startline); while (numlines--) { ErEOLine(); putchar ('\n'); } curxy (0, startline); } void ErEOScrn() { #ifdef TERMCAP # ifdef BSDISH fflush(stdout); # endif FPUTS (CD, stdout); #else putchar ('\x0B'); #endif fflush (stdout); } void ErEOLine() { #ifdef TERMCAP # ifdef BSDISH fflush(stdout); # endif FPUTS (CE, stdout); #else putchar ('\x04'); #endif fflush (stdout); } void Bell() { #ifdef TERMCAP if (BL) { # ifdef BSDISH fflush(stdout); # endif FPUTS (BL, stdout); } #else putchar ('\x07'); #endif fflush (stdout); } void ReVOn() { #ifdef TERMCAP if (SO) { # ifdef BSDISH fflush (stdout); # endif FPUTS (SO, stdout); } else fputs ("** ", stdout); #else FPUTS ("\x1f\x20", stdout); #endif fflush (stdout); } void ReVOff() { #ifdef TERMCAP if (SE) { # ifdef BSDISH fflush (stdout); # endif FPUTS (SE, stdout); } else fputs (" **", stdout); #else FPUTS ("\x1f\x21", stdout); #endif fflush (stdout); } void CurOn() { #ifdef TERMCAP if (VE) { # ifdef BSDISH fflush (stdout); # endif FPUTS (VE, stdout); } #else FPUTS ("\x05\x21", stdout); #endif fflush (stdout); } void CurOff() { #ifdef TERMCAP if (VI) { # ifdef BSDISH fflush (stdout); # endif FPUTS (VI, stdout); } #else FPUTS ("\x05\x20", stdout); #endif fflush (stdout); } void cls() { #ifdef TERMCAP if (CL) { # ifdef BSDISH fflush (stdout); # endif FPUTS (CL, stdout); } #else putchar ('\x0c'); #endif fflush(stdout); } void curxy (x, y) int x,y; { #ifdef TERMCAP char *t; t = tgoto (CM, x, y); # ifdef BSDISH fflush (stdout); # endif FPUTS (t, stdout); #else printf ("\x02%c%c", x+32, y+32); #endif fflush (stdout); }