- initial build for GNO (untested)

- changed some path names
This commit is contained in:
gdr 1997-10-03 04:53:06 +00:00
parent 1c00c49e7b
commit 8056066083
11 changed files with 209 additions and 129 deletions

View File

@ -1,27 +1,36 @@
# @(#)Makefile 8.1 (Berkeley) 6/4/93
#
# This is the top-level makefile for libtermcap, GNO v2.0.6
#
# $Id: Makefile,v 1.2 1997/10/03 04:52:59 gdr Exp $
#
LIB= termcap
SHLIB_MAJOR= 2
SHLIB_MINOR= 1
CFLAGS+=-DCM_N -DCM_GT -DCM_B -DCM_D -I${.CURDIR}
SRCS= termcap.c tgoto.c tputs.c tparm.c tospeed.c
.INCLUDE: ../../paths.mk
.INCLUDE: ../const.mk
MAN3= termcap.3
MLINKS= termcap.3 tgetent.3 termcap.3 tgetflag.3 termcap.3 tgetnum.3 \
termcap.3 tgetstr.3 termcap.3 tgoto.3 termcap.3 tputs.3 \
termcap.3 tparm.3
LINKS= ${LIBDIR}/libtermcap.a ${LIBDIR}/libtermlib.a
.if !defined(NOPIC)
LINKS+= ${SHLIBDIR}/libtermcap.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
${SHLIBDIR}/libtermlib.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
.endif
.if !defined(NOPROFILE)
LINKS+= ${LIBDIR}/libtermcap_p.a ${LIBDIR}/libtermlib_p.a
.endif
LIB = libtermcap
OBJS = termcap.o tgoto.o tputs.o tparm.o tospeed.o
LIBDIR = /usr/lib
MANDIR = /usr/man/man3
CFLAGS += -O78 -Slibtermcap -G25 -v -w
CFLAGS += -DCM_N -DCM_GT -DCM_B -DCM_D -I.
build: $(LIB)
$(LIB): $(OBJS) $(LIB).r
$(RM) -f $@
$(MAKELIB) $(MAKELIBFLAGS) -l $@ $(OBJS)
$(CATREZ) -d $@ $(LIB).r
install: beforeinstall $(LIB)
$(INSTALL) -d $(LIBDIR) $(MANDIR)
$(INSTALL) $(LIB) $(LIBDIR)
$(INSTALL) termcap.3 $(MANDIR)
release: beforeinstall $(LIB)
$(INSTALL) -d $(RELEASE_DIR)$(LIBDIR) $(RELEASE_DIR)$(MANDIR)
$(INSTALL) $(LIB) $(RELEASE_DIR)$(LIBDIR)
$(INSTALL) termcap.3 $(RELEASE_DIR)$(MANDIR)
beforeinstall:
-cd ${.CURDIR}; cmp -s termcap.h ${DESTDIR}/usr/include/termcap.h || \
${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 444 termcap.h \
${DESTDIR}/usr/include
.include <bsd.lib.mk>
cmp ../../include/termcap.h termcap.h

View File

@ -46,11 +46,13 @@ static char sccsid[] = "@(#)tc1.c 8.1 (Berkeley) 6/4/93";
* dummy program to test termlib.
* gets entry, counts it, and prints it.
*/
#include <termcap.h>
#include <stdio.h>
#include <stdlib.h>
char buf[1024];
char *getenv();
main(argc, argv) char **argv; {
int
main(int argc, char **argv) {
char *p;
int rc;

View File

@ -0,0 +1,30 @@
/*
* Resources for version and comment
*
* $Id: libtermcap.rez,v 1.1 1997/10/03 04:52:59 gdr Exp $
*/
#define LIB "libtermcap for GNO"
#define PORTED "Ported from 4.4BSD by Devin Reade."
#include "Types.rez"
/*
* Version
*/
resource rVersion (1, purgeable3) {
{ 2, 0, 6, /* Version 2.0.6 */
alpha, /* development|alpha|beta|final|release */
1 }, /* non-final release number */
verUS, /* Country */
LIB,
PORTED
};
/*
* Comment
*/
resource rComment (1, purgeable3) {
LIB "\n"
PORTED
};

View File

@ -31,6 +31,12 @@
* SUCH DAMAGE.
*
* @(#)pathnames.h 8.1 (Berkeley) 6/4/93
*
* $Id: pathnames.h,v 1.2 1997/10/03 04:52:59 gdr Exp $
*/
#ifdef __GNO__
#define _PATH_DEF "termcap /etc/termcap"
#else
#define _PATH_DEF ".termcap /usr/share/misc/termcap"
#endif

View File

@ -31,6 +31,8 @@
.\"
.\" @(#)termcap.3 8.2 (Berkeley) 12/11/93
.\"
.\" $Id: termcap.3,v 1.2 1997/10/03 04:52:59 gdr Exp $
.\"
.TH TERMCAP 3 "September 1997" GNO "Library Routines"
.SH NAME
.BR tgetent ,
@ -73,7 +75,8 @@ void \fB_set_ospeed\fR (long \fIspeed\fR);
.SH DESCRIPTION
These functions extract and use capabilities from a terminal capability data
base, usually
.BR /usr/share/misc/termcap ,
.\" /usr/share/misc/termcap ,
.BR /etc/termcap ,
the format of which is described in
.BR termcap (5).
These are low level routines;
@ -131,7 +134,8 @@ is different from
searches the files
.BR $HOME/.termcap
and
.BR /usr/share/misc/termcap ,
.\" /usr/share/misc/termcap ,
.BR /etc/termcap ,
in that order, unless the environment variable
.BR TERMPATH
exists,
@ -145,7 +149,8 @@ This can speed up entry into programs that call
.BR tgetent ,
as well as help debug new terminal descriptions
or make one for your terminal if you can't write the file
.BR /usr/share/misc/termcap .
.\" /usr/share/misc/termcap .
.BR /etc/termcap .
.LP
The
.BR tgetnum
@ -272,14 +277,17 @@ returns
.BR OOPS .
.SH FILES
.RS
.IP \fB/usr/lib/libtermcap.a\fR
.\" \fB/usr/lib/libtermcap.a\fR
.IP \fB/usr/lib/libtermcap\fR
The
.BR ltermcap
library (also known as
.BR ltermlib ).
.IP \fB/usr/share/misc/termcap\fR
.\" \fB/usr/share/misc/termcap\fR
.IP \fB/etc/termcap\fR
standard terminal capability data base
.IP \fB$HOME/.termcap\fR
.\" \fB$HOME/.termcap\fR
.IP \fB$HOME/termcap\fR
user's terminal capability data base
.RE
.SH SEE ALSO

View File

@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
#ifndef lint
#if !defined(lint) && !defined(__GNO__)
static char sccsid[] = "@(#)termcap.c 8.1 (Berkeley) 6/4/93";
#endif /* not lint */

View File

@ -24,12 +24,14 @@
* SUCH DAMAGE.
*/
/* $Id: termcap.h,v 1.1 1997/09/30 06:23:55 gdr Exp $ */
/* Don't include a cvs ident string; it interferes with the builds */
#ifndef _TERMCAP_H_
#define _TERMCAP_H_
#ifndef _SYS_CDEFS_H_
#include <sys/cdefs.h>
#endif
__BEGIN_DECLS

View File

@ -31,10 +31,11 @@
* SUCH DAMAGE.
*/
#ifndef lint
#if !defined(lint) && !defined(__GNO__)
static char sccsid[] = "@(#)tgoto.c 8.1 (Berkeley) 6/4/93";
#endif /* not lint */
#include <string.h>
#include "termcap.h"
#define CTRL(c) ((c) & 037)

View File

@ -31,7 +31,17 @@ static struct stable {
speed_t speed;
short code;
} table[] = {
#ifndef __GNO__
/* It may actually be possible to compile this speed for GNO.
* There are, however, some concerns:
* 1. Will any hardware support it?
* 2. Do we overflow any state variables when we go past
* B57600?
* 3. Do we need any changes to the kernel?
* These issues are as yet unresolved.
*/
{B115200,17},
#endif
{B57600, 16},
{B38400, 15},
{B19200, 14},
@ -69,4 +79,3 @@ void __set_ospeed(speed_t speed)
}
ospeed = 1; /* 50, min and not hangup */
}

View File

@ -52,8 +52,8 @@ static int argcnt;
static va_list tparm_args;
static int
pusharg(arg)
int arg; {
pusharg(int arg)
{
if (pos == MAX_PUSHED)
return 1;
S[pos].type = ARG;
@ -62,8 +62,8 @@ int arg; {
}
static int
pushnum(num)
int num; {
pushnum(int num)
{
if (pos == MAX_PUSHED)
return 1;
S[pos].type = NUM;
@ -73,9 +73,8 @@ int num; {
/* VARARGS2 */
static int
getarg(argnum, type, p)
int argnum, type;
anyptr p; {
getarg(int argnum, int type, anyptr p)
{
while (argcnt < argnum) {
arg_list[argcnt].type = INTEGER;
arg_list[argcnt++].integer = (int) va_arg(tparm_args, int);
@ -100,8 +99,8 @@ anyptr p; {
static int
popstring(str)
char **str; {
popstring(char **str)
{
if (pos-- == 0)
return 1;
if (S[pos].type != ARG)
@ -110,8 +109,8 @@ char **str; {
}
static int
popnum(num)
int *num; {
popnum(int *num)
{
if (pos-- == 0)
return 1;
switch (S[pos].type) {
@ -125,8 +124,8 @@ int *num; {
}
static int
cvtchar(sp, c)
register char *sp, *c; {
cvtchar(register char *sp, register char *c)
{
switch(*sp) {
case '\\':
switch(*++sp) {
@ -237,6 +236,14 @@ static int termcap;
*/
#ifdef __ORCAC__
#pragma debug 0
#pragma optimize 78
#define STATIC static
#else
#define STATIC
#endif
char *tparm(const char *str, ...) {
static char OOPS[] = "OOPS";
static char buf[MAX_LINE];
@ -248,8 +255,8 @@ char *tparm(const char *str, ...) {
int scan_depth = 0, if_depth;
static int i, j;
static char *s, c;
char fmt_buf[MAX_LINE];
char sbuf[MAX_LINE];
STATIC char fmt_buf[MAX_LINE];
STATIC char sbuf[MAX_LINE];
va_start(tparm_args, str);
@ -283,7 +290,7 @@ char *tparm(const char *str, ...) {
if_depth++;
else if (*sp == ';') {
if (if_depth == 0)
return OOPS;
goto ret_OOPS;
else
if_depth--;
}
@ -298,10 +305,10 @@ char *tparm(const char *str, ...) {
case '+':
if (!termcap) {
if (popnum(&j) || popnum(&i))
return OOPS;
goto ret_OOPS;
i += j;
if (pushnum(i))
return OOPS;
goto ret_OOPS;
sp++;
break;
}
@ -309,7 +316,7 @@ char *tparm(const char *str, ...) {
case 'C':
if (*sp == 'C') {
if (getarg(termcap - 1, INTEGER, &i))
return OOPS;
goto ret_OOPS;
if (i >= 96) {
i /= 96;
if (i == '$')
@ -321,11 +328,11 @@ char *tparm(const char *str, ...) {
/* FALLTHROUGH */
case 'a':
if (!termcap)
return OOPS;
goto ret_OOPS;
if (getarg(termcap - 1, INTEGER, (anyptr) &i))
return OOPS;
goto ret_OOPS;
if (*++sp == '\0')
return OOPS;
goto ret_OOPS;
if ((sp[1] == 'p' || sp[1] == 'c')
&& sp[2] != '\0' && fmt == NULL) {
/* GNU aritmitic parameter, what they
@ -334,7 +341,7 @@ char *tparm(const char *str, ...) {
if (sp[1] == 'p'
&& getarg(termcap - 1 + sp[2] - '@',
INTEGER, (anyptr) &val))
return OOPS;
goto ret_OOPS;
if (sp[1] == 'c') {
lc = cvtchar(sp + 2, &c) + 2;
/* Mask out 8th bit so \200 can be
@ -376,10 +383,10 @@ char *tparm(const char *str, ...) {
case '-':
if (!termcap) {
if (popnum(&j) || popnum(&i))
return OOPS;
goto ret_OOPS;
i -= j;
if (pushnum(i))
return OOPS;
goto ret_OOPS;
sp++;
break;
}
@ -388,9 +395,9 @@ char *tparm(const char *str, ...) {
case 's':
if (termcap && (fmt == NULL || *sp == '-')) {
if (getarg(termcap - 1, INTEGER, &i))
return OOPS;
goto ret_OOPS;
if (*++sp == '\0')
return OOPS;
goto ret_OOPS;
sp += cvtchar(sp, &c);
arg_list[termcap - 1].integer = c - i;
if (fmt == NULL)
@ -398,7 +405,7 @@ char *tparm(const char *str, ...) {
sp--;
}
if (!termcap)
return OOPS;
goto ret_OOPS;
;/* FALLTHROUGH */
case '.':
if (termcap && fmt == NULL)
@ -422,14 +429,14 @@ char *tparm(const char *str, ...) {
case '6': case '7': case '8': case '9':
if (fmt == NULL) {
if (termcap)
return OOPS;
goto ret_OOPS;
if (*sp == ':')
sp++;
fmt = fmt_buf;
*fmt++ = '%';
while(*sp != 's' && *sp != 'x' && *sp != 'X' && *sp != 'd' && *sp != 'o' && *sp != 'c' && *sp != 'u') {
if (*sp == '\0')
return OOPS;
goto ret_OOPS;
*fmt++ = *sp++;
}
*fmt++ = *sp;
@ -439,16 +446,16 @@ char *tparm(const char *str, ...) {
conv_char = fmt[strlen(fmt) - 1];
if (conv_char == 's') {
if (popstring(&s))
return OOPS;
goto ret_OOPS;
sprintf(sbuf, fmt, s);
} else {
if (termcap) {
if (getarg(termcap++ - 1,
INTEGER, &i))
return OOPS;
goto ret_OOPS;
} else
if (popnum(&i))
return OOPS;
goto ret_OOPS;
if (i == 0 && conv_char == 'c')
strcpy(sbuf, "\000");
else
@ -464,7 +471,7 @@ char *tparm(const char *str, ...) {
break;
case 'r':
if (!termcap || getarg(1, INTEGER, &i))
return OOPS;
goto ret_OOPS;
arg_list[1].integer = arg_list[0].integer;
arg_list[0].integer = i;
sp++;
@ -472,14 +479,14 @@ char *tparm(const char *str, ...) {
case 'i':
if (getarg(1, INTEGER, &i)
|| arg_list[0].type != INTEGER)
return OOPS;
goto ret_OOPS;
arg_list[1].integer++;
arg_list[0].integer++;
sp++;
break;
case 'n':
if (!termcap || getarg(1, INTEGER, &i))
return OOPS;
goto ret_OOPS;
arg_list[0].integer ^= 0140;
arg_list[1].integer ^= 0140;
sp++;
@ -487,15 +494,15 @@ char *tparm(const char *str, ...) {
case '>':
if (!termcap) {
if (popnum(&j) || popnum(&i))
return OOPS;
goto ret_OOPS;
i = (i > j);
if (pushnum(i))
return OOPS;
goto ret_OOPS;
sp++;
break;
}
if (getarg(termcap-1, INTEGER, &i))
return OOPS;
goto ret_OOPS;
sp += cvtchar(sp, &c);
if (i > c) {
sp += cvtchar(sp, &c);
@ -506,40 +513,40 @@ char *tparm(const char *str, ...) {
break;
case 'B':
if (!termcap || getarg(termcap-1, INTEGER, &i))
return OOPS;
goto ret_OOPS;
arg_list[termcap-1].integer = 16*(i/10)+i%10;
sp++;
break;
case 'D':
if (!termcap || getarg(termcap-1, INTEGER, &i))
return OOPS;
goto ret_OOPS;
arg_list[termcap-1].integer = i - 2 * (i % 16);
sp++;
break;
case 'p':
if (termcap > 1)
return OOPS;
goto ret_OOPS;
if (*++sp == '\0')
return OOPS;
goto ret_OOPS;
if (*sp == '0')
i = 9;
else
i = *sp - '1';
if (i < 0 || i > 9)
return OOPS;
goto ret_OOPS;
if (pusharg(i))
return OOPS;
goto ret_OOPS;
termcap = 0;
sp++;
break;
case 'P':
if (termcap || *++sp == '\0')
return OOPS;
goto ret_OOPS;
i = *sp++ - 'a';
if (i < 0 || i > 25)
return OOPS;
goto ret_OOPS;
if (pos-- == 0)
return OOPS;
goto ret_OOPS;
switch(vars[i].type = S[pos].type) {
case ARG:
vars[i].argnum = S[pos].argnum;
@ -551,164 +558,164 @@ char *tparm(const char *str, ...) {
break;
case 'g':
if (termcap || *++sp == '\0')
return OOPS;
goto ret_OOPS;
i = *sp++ - 'a';
if (i < 0 || i > 25)
return OOPS;
goto ret_OOPS;
switch(vars[i].type) {
case ARG:
if (pusharg(vars[i].argnum))
return OOPS;
goto ret_OOPS;
break;
case NUM:
if (pushnum(vars[i].value))
return OOPS;
goto ret_OOPS;
break;
}
break;
case '\'':
if (termcap > 1)
return OOPS;
goto ret_OOPS;
if (*++sp == '\0')
return OOPS;
goto ret_OOPS;
sp += cvtchar(sp, &c);
if (pushnum(c) || *sp++ != '\'')
return OOPS;
goto ret_OOPS;
termcap = 0;
break;
case '{':
if (termcap > 1)
return OOPS;
goto ret_OOPS;
i = 0;
sp++;
while(isdigit(*sp))
i = 10 * i + *sp++ - '0';
if (*sp++ != '}' || pushnum(i))
return OOPS;
goto ret_OOPS;
termcap = 0;
break;
case 'l':
if (termcap || popstring(&s))
return OOPS;
goto ret_OOPS;
i = strlen(s);
if (pushnum(i))
return OOPS;
goto ret_OOPS;
sp++;
break;
case '*':
if (termcap || popnum(&j) || popnum(&i))
return OOPS;
goto ret_OOPS;
i *= j;
if (pushnum(i))
return OOPS;
goto ret_OOPS;
sp++;
break;
case '/':
if (termcap || popnum(&j) || popnum(&i))
return OOPS;
goto ret_OOPS;
i /= j;
if (pushnum(i))
return OOPS;
goto ret_OOPS;
sp++;
break;
case 'm':
if (termcap) {
if (getarg(1, INTEGER, &i))
return OOPS;
goto ret_OOPS;
arg_list[0].integer ^= 0177;
arg_list[1].integer ^= 0177;
sp++;
break;
}
if (popnum(&j) || popnum(&i))
return OOPS;
goto ret_OOPS;
i %= j;
if (pushnum(i))
return OOPS;
goto ret_OOPS;
sp++;
break;
case '&':
if (popnum(&j) || popnum(&i))
return OOPS;
goto ret_OOPS;
i &= j;
if (pushnum(i))
return OOPS;
goto ret_OOPS;
sp++;
break;
case '|':
if (popnum(&j) || popnum(&i))
return OOPS;
goto ret_OOPS;
i |= j;
if (pushnum(i))
return OOPS;
goto ret_OOPS;
sp++;
break;
case '^':
if (popnum(&j) || popnum(&i))
return OOPS;
goto ret_OOPS;
i ^= j;
if (pushnum(i))
return OOPS;
goto ret_OOPS;
sp++;
break;
case '=':
if (popnum(&j) || popnum(&i))
return OOPS;
goto ret_OOPS;
i = (i == j);
if (pushnum(i))
return OOPS;
goto ret_OOPS;
sp++;
break;
case '<':
if (popnum(&j) || popnum(&i))
return OOPS;
goto ret_OOPS;
i = (i < j);
if (pushnum(i))
return OOPS;
goto ret_OOPS;
sp++;
break;
case 'A':
if (popnum(&j) || popnum(&i))
return OOPS;
goto ret_OOPS;
i = (i && j);
if (pushnum(i))
return OOPS;
goto ret_OOPS;
sp++;
break;
case 'O':
if (popnum(&j) || popnum(&i))
return OOPS;
goto ret_OOPS;
i = (i || j);
if (pushnum(i))
return OOPS;
goto ret_OOPS;
sp++;
break;
case '!':
if (popnum(&i))
return OOPS;
goto ret_OOPS;
i = !i;
if (pushnum(i))
return OOPS;
goto ret_OOPS;
sp++;
break;
case '~':
if (popnum(&i))
return OOPS;
goto ret_OOPS;
i = ~i;
if (pushnum(i))
return OOPS;
goto ret_OOPS;
sp++;
break;
case '?':
if (termcap > 1)
return OOPS;
goto ret_OOPS;
termcap = 0;
if_depth++;
sp++;
break;
case 't':
if (popnum(&i) || if_depth == 0)
return OOPS;
goto ret_OOPS;
if (!i) {
scan_for = 'e';
scan_depth = if_depth;
@ -717,24 +724,24 @@ char *tparm(const char *str, ...) {
break;
case 'e':
if (if_depth == 0)
return OOPS;
goto ret_OOPS;
scan_for = ';';
scan_depth = if_depth;
sp++;
break;
case ';':
if (if_depth-- == 0)
return OOPS;
goto ret_OOPS;
sp++;
break;
case 'b':
if (--termcap < 1)
return OOPS;
goto ret_OOPS;
sp++;
break;
case 'f':
if (!termcap++)
return OOPS;
goto ret_OOPS;
sp++;
break;
}
@ -750,4 +757,8 @@ char *tparm(const char *str, ...) {
va_end(tparm_args);
*dp = '\0';
return buf;
ret_OOPS:
va_end(tparm_args);
return OOPS;
}

View File

@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
#ifndef lint
#if !defined(lint) || !defined(__GNO__)
static char sccsid[] = "@(#)tputs.c 8.1 (Berkeley) 6/4/93";
#endif /* not lint */
@ -57,13 +57,14 @@ char PC;
* The number of affected lines is affcnt, and the routine
* used to output one character is outc.
*/
int
tputs(const char *cp, int affcnt, int (*outc)(int))
{
register int i = 0;
register int mspc10;
if (cp == 0)
return;
return 0;
/*
* Convert the number representing the delay.
@ -103,9 +104,9 @@ tputs(const char *cp, int affcnt, int (*outc)(int))
* not comprehensible, then don't try to delay.
*/
if (i == 0)
return;
return 0;
if (ospeed <= 0 || ospeed >= (sizeof tmspc10 / sizeof tmspc10[0]))
return;
return 0;
/*
* Round up by a half a character frame,
@ -118,4 +119,5 @@ tputs(const char *cp, int affcnt, int (*outc)(int))
i += mspc10 / 2;
for (i /= mspc10; i > 0; i--)
(*outc)(PC);
return 0;
}