mirror of
https://github.com/GnoConsortium/gno.git
synced 2025-01-22 03:30:12 +00:00
- initial build for GNO (untested)
- changed some path names
This commit is contained in:
parent
1c00c49e7b
commit
8056066083
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
30
lib/libtermcap/libtermcap.rez
Normal file
30
lib/libtermcap/libtermcap.rez
Normal 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
|
||||
};
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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 */
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user