home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Garbo
/
Garbo.cdr
/
pc
/
source
/
termcap.zoo
/
termcap.3
< prev
next >
Wrap
Text File
|
1990-04-04
|
50KB
|
2,401 lines
#!/bin/sh
# this is part.03 (part 3 of tinfo)
# do not concatenate these parts, unpack them in order with /bin/sh
# file gettinfo.c continued
#
touch 2>&1 | fgrep '[-amc]' > /tmp/s3_touch$$
if [ -s /tmp/s3_touch$$ ]
then
TOUCH=can
else
TOUCH=cannot
fi
rm -f /tmp/s3_touch$$
CurArch=3
if test ! -r s3_seq_.tmp
then echo "Please unpack part 1 first!"
exit 1; fi
( read Scheck
case "$Scheck" in
"$CurArch") exit 0 ;;
*)
echo "Please unpack part $Scheck next!"
exit 1 ;;
esac
) < s3_seq_.tmp || exit 1
echo "x - Continuing file gettinfo.c"
sed 's/^X//' << 'SHAR_EOF' >> gettinfo.c
X *dp = '\0';
X if ((ct->name_all = _addstr(entry)) == NULL)
X return 1;
X while(dp > entry && *--dp != '|');
X ct->name_long = ct->name_all + (dp - entry) + 1;
X }
X
X while(*sp != '\0') {
X while(*sp == ',')
X sp++;
X while(isspace(*sp))
X sp++;
X if (*sp == ',')
X continue;
X if (*sp == '\0')
X break;
X dp = name;
X while (*sp != ',' && *sp != '#' && *sp != '=' && !isspace(*sp) && *sp != '\0')
X *dp++ = *sp++;
X *dp = '\0';
X#ifdef DEBUG
X printf(" %s", name);
X#endif
X switch(*sp) {
X case '=':
X#ifdef DEBUG
X putchar('$');
X#endif
X dp = entry;
X sp++;
X match = (char ***) bsearch((anyptr) &p2p2c,
X (anyptr) _sstrnames,
X NUM_OF_STRS, sizeof(p2p2c),
X _compar);
X if (match != NULL) {
X i = *match - strnames;
X flag = _strflags[i];
X } else {
X match = (char ***) bsearch((anyptr) &p2p2c,
X (anyptr) _sstrfnames,
X NUM_OF_STRS,
X sizeof(p2p2c),
X _compar);
X if (match != NULL) {
X i = *match - strfnames;
X flag = _strflags[i];
X } else
X flag = 'K';
X }
X while(*sp != '\0' && *sp != ',') {
X switch(*sp) {
X case '%':
X *dp++ = *sp++;
X if (*sp == '^' && flag == 'G')
X *dp++ = *sp++;
X break;
X case '\\':
X switch(*++sp) {
X case 'e':
X case 'E': *dp++ = '\033'; break;
X case 'l': *dp++ = '\012'; break;
X case 'n': *dp++ = '\n'; break;
X case 'r': *dp++ = '\r'; break;
X case 't': *dp++ = '\t'; break;
X case 'b': *dp++ = '\b'; break;
X case 'f': *dp++ = '\f'; break;
X case 's': *dp++ = ' '; break;
X
X case '^':
X case '\\':
X case ',':
X case ':':
X *dp++ = *sp; break;
X
X case '0':
X if (!isdigit(*(sp + 1))) {
X *dp++ = '\200';
X break;
X }
X /* FALLTHROUGH */
X case '1':
X case '2':
X case '3':
X case '4':
X case '5':
X case '6':
X case '7':
X c = *sp - '0';
X if (isdigit(sp[1]))
X c = c * 8 + (*++sp-'0');
X if (isdigit(sp[1]))
X c = c * 8 + (*++sp-'0');
X switch((char)c) {
X case 0:
X if (flag == 'K')
X *dp++ = '\200';
X else {
X *dp++ = '\\';
X *dp++ = '0';
X *dp++ = '0';
X *dp++ = '0';
X }
X break;
X case '$':
X case '\'':
X case '\\':
X if (flag != 'K')
X *dp++ = '\\';
X /* FALLTHROUGH */
X default:
X if (flag == 'G'
X && c == '%')
X *dp++ = '\\';
X *dp++ = c;
X break;
X }
X break;
X default:
X *dp++ = '\\';
X *dp++ = *sp;
X break;
X }
X sp++;
X break;
X case '^':
X if (*++sp >= 'A' && *sp <= '_') {
X *dp++ = *sp++ - '@';
X } else if (*sp >= 'a' && *sp <= 'z') {
X *dp++ = *sp++ - 'a' + 1;
X } else if (*sp == '@') {
X if (flag == 'K')
X *dp++ = '\200';
X else {
X *dp++ = '\\';
X *dp++ = '0';
X *dp++ = '0';
X *dp++ = '0';
X }
X sp++;
X } else
X *dp++ = '^';
X break;
X default:
X *dp++ = *sp++;
X break;
X }
X }
X *dp++ = '\0';
X if (strcmp(name, "use") == 0) {
X if (_getother(entry, path, ct))
X return 1;
X break;
X }
X if (match == NULL)
X break;
X if (ct->strs[i] != (char *) -1)
X break;
X if ((ct->strs[i] = _addstr(entry)) == NULL)
X return 1;
X break;
X case '#':
X#ifdef DEBUG
X putchar('#');
X#endif
X#if 0
X i = atoi(++sp);
X#else
X sp++;
X if (*sp == '0') {
X sp++;
X if (*sp == 'x' || *sp == 'X') {
X sp++;
X base = 16;
X } else
X base = 8;
X } else
X base = 10;
X i = 0;
X while(1) {
X if (isdigit(*sp))
X i = i * base + *sp - '0';
X else if (base == 16 && isxdigit(*sp))
X i = i * base + tolower(*sp) - 'a' + 10;
X else
X break;
X sp++;
X }
X#endif
X while(*sp != '\0' && *sp++ != ',');
X match = (char ***) bsearch((anyptr) &p2p2c,
X (anyptr) _snumnames,
X NUM_OF_NUMS, sizeof(p2p2c),
X _compar);
X if (match != NULL) {
X if (ct->nums[*match - numnames] != -2)
X break;
X ct->nums[*match - numnames] = i;
X } else {
X match = (char ***) bsearch((anyptr) &p2p2c,
X (anyptr) _snumfnames,
X NUM_OF_NUMS,
X sizeof(p2p2c),
X _compar);
X if (match != NULL) {
X if (ct->nums[*match - numfnames] != -2)
X break;
X ct->nums[*match - numfnames] = i;
X }
X }
X break;
X default:
X while(*sp != '\0' && *sp++ != ',');
X if (*(dp - 1) == '@') {
X#ifdef DEBUG
X putchar('@');
X#endif
X *(dp - 1) = '\0';
X match = (char ***) bsearch((anyptr) &p2p2c,
X (anyptr) _sboolnames,
X NUM_OF_BOOLS,
X sizeof(p2p2c),
X _compar);
X if (match != NULL) {
X#ifdef DEBUG
X putchar('!');
X#endif
X ct->bools[*match - boolnames] = 0;
X break;
X }
X match = (char ***) bsearch((anyptr) &p2p2c,
X (anyptr) _snumnames,
X NUM_OF_NUMS,
X sizeof(p2p2c),
X _compar);
X if (match != NULL) {
X#ifdef DEBUG
X putchar('#');
X#endif
X ct->nums[*match - numnames] = -1;
X break;
X }
X match = (char ***) bsearch((anyptr) &p2p2c,
X (anyptr) _sstrnames,
X NUM_OF_STRS,
X sizeof(p2p2c),
X _compar);
X if (match != NULL) {
X#ifdef DEBUG
X putchar('$');
X#endif
X ct->strs[*match - strnames] = NULL;
X break;
X }
X match = (char ***) bsearch((anyptr) &p2p2c,
X (anyptr)_sboolfnames,
X NUM_OF_BOOLS,
X sizeof(p2p2c),
X _compar);
X if (match != NULL) {
X#ifdef DEBUG
X putchar('!');
X#endif
X ct->bools[*match - boolfnames] = 0;
X break;
X }
X match = (char ***) bsearch((anyptr) &p2p2c,
X (anyptr) _snumfnames,
X NUM_OF_NUMS,
X sizeof(p2p2c),
X _compar);
X if (match != NULL) {
X#ifdef DEBUG
X putchar('#');
X#endif
X ct->nums[*match - numfnames] = -1;
X break;
X }
X match = (char ***) bsearch((anyptr) &p2p2c,
X (anyptr) _sstrfnames,
X NUM_OF_STRS,
X sizeof(p2p2c),
X _compar);
X if (match != NULL) {
X#ifdef DEBUG
X putchar('$');
X#endif
X ct->strs[*match - strfnames] = NULL;
X break;
X }
X break;
X }
X#ifdef DEBUG
X putchar('!');
X#endif
X match = (char ***) bsearch((anyptr) &p2p2c,
X (anyptr) _sboolnames,
X NUM_OF_BOOLS, sizeof(p2p2c),
X _compar);
X if (match != NULL)
X i = *match - boolnames;
X else {
X match = (char ***) bsearch((anyptr) &p2p2c,
X (anyptr)_sboolfnames,
X NUM_OF_BOOLS,
X sizeof(p2p2c),
X _compar);
X if (match == NULL)
X break;
X i = *match - boolfnames;
X }
X if (ct->bools[i] != -1)
X break;
X ct->bools[i] = 1;
X break;
X }
X }
X return 0;
X}
SHAR_EOF
echo "File gettinfo.c is complete"
chmod 0644 gettinfo.c || echo "restore of gettinfo.c fails"
case $TOUCH in
can)
touch -am 0402044690 gettinfo.c
;;
esac
set `wc -c gettinfo.c`;Wc_c=$1
case "$Wc_c" in
"7453") ;;
*) echo original size 7453, current size $Wc_c ;;
esac
# ============= getother.c ==============
echo "x - extracting getother.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > getother.c &&
X/*
X * getother.c
X *
X * By Ross Ridge
X * Public Domain
X * 90/03/22 03:43:40
X *
X */
X
X#include "defs.h"
X#include "term.h"
X
X#ifdef USE_SCCS_IDS
Xstatic char SCCSid[] = "@(#) getother.c 1.1";
X#endif
Xint _getother(name, path, ct)
Xchar *name;
Xstruct term_path *path;
XTERMINAL *ct; {
X static int depth = 0;
X int r;
X char buf[MAX_BUF];
X
X if (depth >= MAX_DEPTH)
X return 1; /* infinite loop */
X
X#ifdef DEBUG
X printf("\ngetother: %s\n", name);
X#endif
X
X switch(_findterm(name, path, buf)) {
X case -3:
X return 1;
X case 1:
X depth++;
X r = _gettcap(buf, ct, path);
X break;
X case 2:
X depth++;
X r = _gettinfo(buf, ct, path);
X break;
X default:
X return 0;
X }
X depth--;
X return r;
X}
SHAR_EOF
chmod 0644 getother.c || echo "restore of getother.c fails"
case $TOUCH in
can)
touch -am 0402044690 getother.c
;;
esac
set `wc -c getother.c`;Wc_c=$1
case "$Wc_c" in
"671") ;;
*) echo original size 671, current size $Wc_c ;;
esac
# ============= addstr.c ==============
echo "x - extracting addstr.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > addstr.c &&
X/*
X * addstr.c
X *
X * By Ross Ridge
X * Public Domain
X * 90/03/22 03:43:41
X *
X */
X
X#include "defs.h"
X#include "term.h"
X
X#include <ctype.h>
X
X#ifdef USE_SCCS_IDS
Xstatic char SCCSid[] = "@(#) addstr.c 1.1";
X#endif
X/*
X * I think this routine could be improved, as it is now it searches a
X * linked list of strbufs for one that has enough room left for the
X * string. The only thing else I can think of doing would be to
X * expand a buffer by realloc and then fix the string pointers if it
X * moves.
X */
X
Xstatic struct strbuf *strbuf = NULL;
X
Xstruct strbuf *_endstr() {
X register struct strbuf *p;
X p = strbuf;
X strbuf = NULL;
X return p;
X}
X
Xchar *_addstr(s)
Xregister char *s; {
X register struct strbuf *p;
X register int l;
X
X if (s == NULL) {
X strbuf = NULL;
X return NULL;
X }
X
X if (strbuf == NULL) {
X strbuf = (struct strbuf *) malloc(sizeof(struct strbuf));
X if (strbuf == NULL)
X return NULL;
X strbuf->len = 0;
X strbuf->next = NULL;
X }
X l = strlen(s) + 1;
X if (l > MAX_CHUNK)
X return NULL;
X p = strbuf;
X while (l + p->len > MAX_CHUNK) {
X if (p->next == NULL) {
X p->next = (struct strbuf *)
X malloc(sizeof(struct strbuf));
X p = p->next;
X if (p == NULL)
X return NULL;
X p->len = 0;
X p->next = NULL;
X break;
X }
X p = p->next;
X }
X s = strcpy(p->buf + p->len, s);
X p->len += l;
X return s;
X}
X
Xvoid _del_strs(p)
XTERMINAL *p; {
X struct strbuf *q;
X /* I don't care how stupid it looks */
X
X q = p->strbuf;
X while(q != NULL) {
X p->strbuf = q->next;
X free((anyptr) q);
X q = p->strbuf;
X }
X}
SHAR_EOF
chmod 0644 addstr.c || echo "restore of addstr.c fails"
case $TOUCH in
can)
touch -am 0402044690 addstr.c
;;
esac
set `wc -c addstr.c`;Wc_c=$1
case "$Wc_c" in
"1508") ;;
*) echo original size 1508, current size $Wc_c ;;
esac
# ============= mktermhead.c ==============
echo "x - extracting mktermhead.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > mktermhead.c &&
X/*
X * mktermhead.c
X *
X * By Ross Ridge
X * Public Domain
X * 90/03/22 03:43:41
X *
X * mktermhead [-n caps] file
X *
X * generates term.head
X *
X */
X
X#define NOTLIB
X#include "defs.h"
X
Xstatic char SCCSid[] = "@(#) mktermhead.c 1.1";
X
X#define DEFAULT_CAPS 1000
X
Xstruct caplist *list;
Xchar *prg_name;
X
Xint main(argc, argv)
Xint argc;
Xchar **argv; {
X FILE *f;
X int caps = DEFAULT_CAPS;
X int n;
X register int i;
X int nb, ns, nn;
X
X prg_name = prg_name;
X
X if (argc > 2 && argv[1][0] == '-' && argv[1][1] == 'n') {
X caps = atoi(argv[2]);
X argv += 2;
X argc -= 2;
X }
X
X if (argc == 1) {
X f = stdin;
X } else if (argc == 2) {
X f = fopen(argv[1], "r");
X if (f == NULL) {
X fprintf(stderr, "%s: can't open '%s'\n", prg_name,
X argv[1]);
X return 1;
X }
X } else {
X fprintf(stderr, "%s: too many arguments\n", prg_name);
X fprintf(stderr, "usage: %s [-n caps] [file]\n", prg_name);
X return 1;
X }
X
X list = (struct caplist *) malloc(caps * sizeof(struct caplist));
X if (list == NULL) {
X fprintf(stderr, "%s: malloc failed.\n", prg_name);
X return 1;
X }
X
X n = readcaps(f, list, caps);
X if (n > caps) {
X fprintf(stderr, "%s: too many caps, use -n.\n", prg_name);
X return 1;
X }
X if (n == 0) {
X fprintf(stderr, "%s: no caps in file.\n", prg_name);
X return 1;
X }
X if (n == -1) {
X fprintf(stderr, "%s: bad caps line.\n", prg_name);
X return 1;
X }
X if (n == -2) {
X fprintf(stderr, "%s: unexpected EOF.\n", prg_name);
X return 1;
X }
X
X puts("/*");
X puts(" * term.h ");
X puts(" *");
X puts(" * This file was generated automatically.");
X puts(" *");
X puts(" */");
X putchar('\n');
X puts("#ifndef _TERM_H_");
X puts("#define _TERM_H_");
X putchar('\n');
X nb = 0;
X for (i = 0; i < n; i++) {
X if (list[i].type == '!') {
X printf("#define %-*s (_CUR_TERM.bools[%d])\n",
X MAX_VARNAME, list[i].var, nb);
X nb++;
X }
X }
X
X nn = 0;
X for (i = 0; i < n; i++) {
X if (list[i].type == '#') {
X printf("#define %-*s (_CUR_TERM.nums[%d])\n",
X MAX_VARNAME, list[i].var, nn);
X nn++;
X }
X }
X
X ns = 0;
X for (i = 0; i < n; i++) {
X if (list[i].type == '$') {
X printf("#define %-*s (_CUR_TERM.strs[%d])\n",
X MAX_VARNAME, list[i].var, ns);
X ns++;
X }
X }
X
X putchar('\n');
X
X printf ("#define NUM_OF_BOOLS\t%d\n", nb);
X printf ("#define NUM_OF_NUMS\t%d\n", nn);
X printf ("#define NUM_OF_STRS\t%d\n", ns);
X
X putchar('\n');
X puts("#ifndef OVERIDE");
X puts("#undef USE_SGTTY");
X#ifdef USE_SGTTY
X puts("#define USE_SGTTY");
X#endif
X puts("#undef USE_TERMIO");
X#ifdef USE_TERMIO
X puts("#define USE_TERMIO");
X#endif
X puts("#undef USE_SMALLMEM");
X#ifdef USE_SMALLMEM
X puts("#define USE_SMALLMEM");
X#endif
X#if 0
X puts("#undef USE_PROTOTYPES");
X#ifdef USE_PROTOTYPES
X puts("#define USE_PROTOTYPES");
X#endif
X#endif
X puts("#undef USE_WINSZ");
X#ifdef USE_WINSZ
X puts("#define USE_WINSZ");
X#endif
X puts("#undef MAX_CHUNK");
X printf("#define MAX_CHUNK %d\n", MAX_CHUNK);
X puts("#endif /* OVERRIDE */");
X putchar('\n');
X
X return 0;
X}
SHAR_EOF
chmod 0644 mktermhead.c || echo "restore of mktermhead.c fails"
case $TOUCH in
can)
touch -am 0402044690 mktermhead.c
;;
esac
set `wc -c mktermhead.c`;Wc_c=$1
case "$Wc_c" in
"2908") ;;
*) echo original size 2908, current size $Wc_c ;;
esac
# ============= mkcaplist.c ==============
echo "x - extracting mkcaplist.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > mkcaplist.c &&
X/*
X * mkcaplist.c
X *
X * By Ross Ridge
X * Public Domain
X * 90/03/22 03:43:42
X *
X * mkcaplist [-n caps] [file]
X *
X * makes caplist.c from the cap_list file
X *
X */
X
X#define NOTLIB
X#include "defs.h"
X
Xstatic char SCCSid[] = "@(#) mkcaplist.c 1.1";
X
X#define DEFAULT_CAPS 1000
X
Xstruct caplist *list;
X
Xint main(argc, argv)
Xint argc;
Xchar **argv; {
X FILE *f;
X int caps = DEFAULT_CAPS;
X int n;
X register int i;
X
X if (argc > 2 && argv[1][0] == '-' && argv[1][1] == 'n') {
X caps = atoi(argv[2]);
X argv += 2;
X argc -= 2;
X }
X
X if (argc == 1) {
X f = stdin;
X } else if (argc == 2) {
X f = fopen(argv[1], "r");
X if (f == NULL) {
X fprintf(stderr, "%s: can't open '%s'\n", argv[0],
X argv[1]);
X return 1;
X }
X } else {
X fprintf(stderr, "%s: too many arguments\n", argv[0]);
X fprintf(stderr, "usage: %s [-n caps] [file]\n", argv[0]);
X return 1;
X }
X
X list = (struct caplist *) malloc(caps * sizeof(struct caplist));
X if (list == NULL) {
X fprintf(stderr, "%s: malloc failed.\n", argv[0]);
X return 1;
X }
X
X n = readcaps(f, list, caps);
X if (n > caps) {
X fprintf(stderr, "%s: too many caps, use -n.\n", argv[0]);
X return 1;
X }
X if (n == 0) {
X fprintf(stderr, "%s: no caps in file.\n", argv[0]);
X return 1;
X }
X if (n == -1) {
X fprintf(stderr, "%s: bad caps line.\n", argv[0]);
X return 1;
X }
X if (n == -2) {
X fprintf(stderr, "%s: unexpected EOF.\n", argv[0]);
X return 1;
X }
X
X puts("/*");
X puts(" * caplist.c ");
X puts(" *");
X puts(" * This file was generated automatically.");
X puts(" *");
X puts(" */");
X putchar('\n');
X
X puts("char *boolnames[] = {");
X for (i = 0; i < n; i++)
X if (list[i].type == '!')
X printf("\t\"%s\",\n", list[i].tinfo);
X puts("\t(char *)0");
X puts("};");
X putchar('\n');
X
X puts("char *boolcodes[] = {");
X for (i = 0; i < n; i++)
X if (list[i].type == '!')
X printf("\t\"%s\",\n", list[i].tcap);
X puts("\t(char *)0");
X puts("};");
X putchar('\n');
X
X puts("char *boolfnames[] = {");
X for (i = 0; i < n; i++)
X if (list[i].type == '!')
X printf("\t\"%s\",\n", list[i].var);
X puts("\t(char *)0");
X puts("};");
X putchar('\n');
X
X puts("char *numnames[] = {");
X for (i = 0; i < n; i++)
X if (list[i].type == '#')
X printf("\t\"%s\",\n", list[i].tinfo);
X puts("\t(char *)0");
X puts("};");
X putchar('\n');
X
X puts("char *numcodes[] = {");
X for (i = 0; i < n; i++)
X if (list[i].type == '#')
X printf("\t\"%s\",\n", list[i].tcap);
X puts("\t(char *)0");
X puts("};");
X putchar('\n');
X
X puts("char *numfnames[] = {");
X for (i = 0; i < n; i++)
X if (list[i].type == '#')
X printf("\t\"%s\",\n", list[i].var);
X puts("\t(char *)0");
X puts("};");
X putchar('\n');
X
X puts("char *strnames[] = {");
X for (i = 0; i < n; i++)
X if (list[i].type == '$')
X printf("\t\"%s\",\n", list[i].tinfo);
X puts("\t(char *)0");
X puts("};");
X putchar('\n');
X
X puts("char *strcodes[] = {");
X for (i = 0; i < n; i++)
X if (list[i].type == '$')
X printf("\t\"%s\",\n", list[i].tcap);
X puts("\t(char *)0");
X puts("};");
X putchar('\n');
X
X puts("char *strfnames[] = {");
X for (i = 0; i < n; i++)
X if (list[i].type == '$')
X printf("\t\"%s\",\n", list[i].var);
X puts("\t(char *)0");
X puts("};");
X putchar('\n');
X
X puts("char _strflags[] = {");
X for (i = 0; i < n; i++)
X if (list[i].type == '$')
X printf("\t'%c',\n", list[i].flag);
X puts("\t'\\0'");
X puts("};");
X putchar('\n');
X
X return 0;
X}
SHAR_EOF
chmod 0644 mkcaplist.c || echo "restore of mkcaplist.c fails"
case $TOUCH in
can)
touch -am 0402044690 mkcaplist.c
;;
esac
set `wc -c mkcaplist.c`;Wc_c=$1
case "$Wc_c" in
"3281") ;;
*) echo original size 3281, current size $Wc_c ;;
esac
# ============= mkcapsort.c ==============
echo "x - extracting mkcapsort.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > mkcapsort.c &&
X/*
X * mkcapsort.c
X *
X * By Ross Ridge
X * Public Domain
X * 90/03/22 03:43:42
X *
X * mkcapsort
X *
X * make the sorted lists of pointers to strins
X *
X */
X
X#define NOTLIB
X#include "defs.h"
X#include "term.h"
X
Xstatic char SCCSid[] = "@(#) mkcapsort.c 1.1";
X
Xchar **sboolnames[NUM_OF_BOOLS], **sboolcodes[NUM_OF_BOOLS], **sboolfnames[NUM_OF_BOOLS];
Xchar **snumnames[NUM_OF_NUMS], **snumcodes[NUM_OF_NUMS], **snumfnames[NUM_OF_NUMS];
Xchar **sstrnames[NUM_OF_STRS], **sstrcodes[NUM_OF_STRS], **sstrfnames[NUM_OF_STRS];
X
X#ifndef USE_STDLIB
Xvoid qsort();
X#endif
X
Xint main() {
X register int i;
X
X i = NUM_OF_BOOLS;
X while(i) {
X i--;
X sboolnames[i] = &boolnames[i];
X sboolcodes[i] = &boolcodes[i];
X sboolfnames[i] = &boolfnames[i];
X }
X
X i = NUM_OF_NUMS;
X while(i) {
X i--;
X snumnames[i] = &numnames[i];
X snumcodes[i] = &numcodes[i];
X snumfnames[i] = &numfnames[i];
X }
X
X i = NUM_OF_STRS;
X while(i) {
X i--;
X sstrnames[i] = &strnames[i];
X sstrcodes[i] = &strcodes[i];
X sstrfnames[i] = &strfnames[i];
X }
X
X qsort((anyptr) sboolnames, NUM_OF_BOOLS, sizeof(*sboolnames), _compar);
X qsort((anyptr) sboolcodes, NUM_OF_BOOLS, sizeof(*sboolcodes), _compar);
X qsort((anyptr) sboolfnames, NUM_OF_BOOLS, sizeof(*sboolfnames),_compar);
X qsort((anyptr) snumnames, NUM_OF_NUMS, sizeof(*snumnames), _compar);
X qsort((anyptr) snumcodes, NUM_OF_NUMS, sizeof(*snumcodes), _compar);
X qsort((anyptr) snumfnames, NUM_OF_NUMS, sizeof(*snumfnames), _compar);
X qsort((anyptr) sstrnames, NUM_OF_STRS, sizeof(*sstrnames), _compar);
X qsort((anyptr) sstrcodes, NUM_OF_STRS, sizeof(*sstrcodes), _compar);
X qsort((anyptr) sstrfnames, NUM_OF_STRS, sizeof(*sstrfnames), _compar);
X
X printf("/*\n");
X printf(" * capsort.c\n");
X printf(" *\n");
X printf(" * This file was generated automatically.\n");
X printf(" *\n");
X printf(" */\n\n");
X
X puts("extern char *boolnames[], *boolcodes[], *boolfnames[];");
X puts("extern char *numnames[], *numcodes[], *numfnames[];");
X puts("extern char *strnames[], *strcodes[], *strfnames[];");
X putchar('\n');
X
X printf("char **_sboolnames[] = {\n");
X for(i = 0; i < NUM_OF_BOOLS; i++)
X printf("\tboolnames + %d,\n", sboolnames[i] - boolnames);
X printf(" (char **) 0\n");
X printf("};\n\n");
X
X printf("char **_sboolcodes[] = {\n");
X for(i = 0; i < NUM_OF_BOOLS; i++)
X printf("\tboolcodes + %d,\n", sboolcodes[i] - boolcodes);
X printf(" (char **) 0\n");
X printf("};\n\n");
X
X printf("char **_sboolfnames[] = {\n");
X for(i = 0; i < NUM_OF_BOOLS; i++)
X printf("\tboolfnames + %d,\n", sboolfnames[i] - boolfnames);
X printf(" (char **) 0\n");
X printf("};\n\n");
X
X printf("char **_snumnames[] = {\n");
X for(i = 0; i < NUM_OF_NUMS; i++)
X printf("\tnumnames + %d,\n", snumnames[i] - numnames);
X printf(" (char **) 0\n");
X printf("};\n\n");
X
X printf("char **_snumcodes[] = {\n");
X for(i = 0; i < NUM_OF_NUMS; i++)
X printf("\tnumcodes + %d,\n", snumcodes[i] - numcodes);
X printf(" (char **) 0\n");
X printf("};\n\n");
X
X printf("char **_snumfnames[] = {\n");
X for(i = 0; i < NUM_OF_NUMS; i++)
X printf("\tnumfnames + %d,\n", snumfnames[i] - numfnames);
X printf(" (char **) 0\n");
X printf("};\n\n");
X
X printf("char **_sstrnames[] = {\n");
X for(i = 0; i < NUM_OF_STRS; i++)
X printf("\tstrnames + %d,\n", sstrnames[i] - strnames);
X printf(" (char **) 0\n");
X printf("};\n\n");
X
X printf("char **_sstrcodes[] = {\n");
X for(i = 0; i < NUM_OF_STRS; i++)
X printf("\tstrcodes + %d,\n", sstrcodes[i] - strcodes);
X printf(" (char **) 0\n");
X printf("};\n\n");
X
X printf("char **_sstrfnames[] = {\n");
X for(i = 0; i < NUM_OF_STRS; i++)
X printf("\tstrfnames + %d,\n", sstrfnames[i] - strfnames);
X printf(" (char **) 0\n");
X printf("};\n\n");
X
X return 0;
X}
SHAR_EOF
chmod 0644 mkcapsort.c || echo "restore of mkcapsort.c fails"
case $TOUCH in
can)
touch -am 0402044690 mkcapsort.c
;;
esac
set `wc -c mkcapsort.c`;Wc_c=$1
case "$Wc_c" in
"3629") ;;
*) echo original size 3629, current size $Wc_c ;;
esac
# ============= readcaps.c ==============
echo "x - extracting readcaps.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > readcaps.c &&
X/*
X * readcaps.c
X *
X * By Ross Ridge
X * Public Domain
X * 90/03/22 03:43:43
X *
X * Read in the cap_list file
X *
X */
X
X#define NOTLIB
X#include "defs.h"
X
X#include <ctype.h>
X
X#ifdef USE_SCCS_IDS
Xstatic char SCCSid[] = "@(#) readcaps.c 1.1";
X#endif
X#ifdef __GNUC__
X__inline__
X#endif
Xstatic int skipline(f)
Xregister FILE *f; {
X register int c;
X
X do {
X c = getc(f);
X if (c == EOF)
X return EOF;
X#ifdef TEST
X putchar(c);
X#endif
X } while (c != '\n');
X
X return 0;
X}
X
X#ifdef __GNUC__
X__inline__
X#endif
Xstatic int getfield(f, s, len)
Xregister FILE *f;
Xregister char *s;
Xint len; {
X register int c;
X int i;
X#ifdef TEST
X char *start = s;
X#endif
X
X do {
X c = getc(f);
X if (c == EOF)
X return EOF;
X } while (c != '\n' && isspace(c));
X if (c == '\n')
X return 0;
X
X i = 0;
X while(!isspace(c)) {
X if (i++ < len)
X *s++ = c;
X c = getc(f);
X if (c == EOF)
X return EOF;
X
X }
X *s = '\0';
X#ifdef TEST
X printf(" %s", start);
X#endif
X return c;
X}
X
Xint readcaps(f, buf, max)
XFILE *f;
Xregister struct caplist *buf;
Xint max; {
X int type;
X register int count;
X int c;
X static char dummy;
X
X count = 0;
X type = getc(f);
X while(type != EOF) {
X if (type == '$' || type == '!' || type == '#') {
X if (count >= max)
X return count + 1;
X#ifdef TEST
X putchar(type);
X#endif
X buf[count].type = type;
X
X if (type == '$') {
X c = getc(f);
X if (c == EOF)
X break;
X if (c == 'G')
X buf[count].flag = 'G';
X else if (c == 'K')
X buf[count].flag = 'K';
X else
X buf[count].flag = ' ';
X }
X
X c = getfield(f, buf[count].var, MAX_VARNAME);
X if (c == EOF || c == '\n' || c == 0)
X return -1;
X c = getfield(f, buf[count].tinfo, MAX_TINFONAME);
X if (c == EOF || c == '\n' || c == 0)
X return -1;
X c = getfield(f, buf[count].tcap, MAX_TCAPNAME);
X if (c == EOF || c == 0)
X return -1;
X if (c != '\n')
X if (getfield(f, &dummy, 1) != 0)
X return -1;
X count++;
X#ifdef TEST
X putchar('\n');
X#endif
X } else {
X#ifdef TEST
X putchar(type);
X#endif
X if (type != '\n' && skipline(f) == EOF)
X return -1;
X }
X type = getc(f);
X }
X return count;
X}
X
X#ifdef TEST
Xstruct caplist list[1000];
X
Xint main() {
X int ret;
X
X ret = readcaps(stdin, list, 1000);
X printf("ret = %d\n", ret);
X return 0;
X}
X#endif
SHAR_EOF
chmod 0644 readcaps.c || echo "restore of readcaps.c fails"
case $TOUCH in
can)
touch -am 0402044690 readcaps.c
;;
esac
set `wc -c readcaps.c`;Wc_c=$1
case "$Wc_c" in
"2211") ;;
*) echo original size 2211, current size $Wc_c ;;
esac
# ============= tcapvars.c ==============
echo "x - extracting tcapvars.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > tcapvars.c &&
X/*
X * tcapvars.c
X *
X * By Ross Ridge
X * Public Domain
X * 90/03/22 03:43:43
X *
X */
X
X#include "defs.h"
X#include "term.h"
X
X#ifdef USE_SCCS_IDS
Xstatic char SCCSid[] = "@(#) tcapvars.c 1.1";
X#endif
X
Xchar PC;
Xint ospeed;
Xchar *UP, *BC;
X
Xvoid _figure_termcap() {
X#if defined(USE_SGTTY) || defined(USE_TERMIO)
X#ifdef USE_SMALLMEM
X extern unsigned short _baud_tbl[];
X#else
X extern long _baud_tbl[];
X#endif
X cur_term->padch = PC;
X cur_term->baudrate = _baud_tbl[ospeed];
X#endif
X}
SHAR_EOF
chmod 0644 tcapvars.c || echo "restore of tcapvars.c fails"
case $TOUCH in
can)
touch -am 0402044690 tcapvars.c
;;
esac
set `wc -c tcapvars.c`;Wc_c=$1
case "$Wc_c" in
"470") ;;
*) echo original size 470, current size $Wc_c ;;
esac
# ============= mkbinorder.c ==============
echo "x - extracting mkbinorder.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > mkbinorder.c &&
X/*
X * mkbinorder.c
X *
X * By Ross Ridge
X * Public Domain
X * 90/03/22 03:43:43
X *
X */
X
X#define NOTLIB
X#include "defs.h"
X#include "term.h"
X
Xstatic char SCCSid[] = "@(#) mkbinorder.c 1.1";
X
Xextern *_sboolnames[], **_snumnames[], **_sstrnames[];
X
Xchar cap[MAX_TINFONAME + 1];
Xchar *p2c = cap;
Xchar **p2p2c = &p2c;
X
Xmain(argc, argv)
Xint argc;
Xchar **argv; {
X int r;
X char ***match;
X FILE *f;
X
X if (argc == 1)
X f = stdin;
X else if (argc == 2) {
X f = fopen(argv[1], "r");
X if (f == NULL) {
X fprintf(stderr, "can't open %s\n", argv[1]);
X exit(1);
X }
X } else {
X fprintf(stderr, "argument count\n");
X exit(1);
X }
X
X do {
X r = fscanf(f, "%s", cap);
X } while(r == 1 && strcmp(cap, "!") != 0);
X if (r != 1) {
X fprintf(stderr, "expected '!'\n");
X exit(1);
X }
X
X puts("/*");
X puts(" * binorder.c");
X puts(" *");
X puts(" * This file was generated automatically");
X puts(" *");
X puts(" */\n");
X
X puts("int _boolorder[] = {");
X
X while(1) {
X r = fscanf(f, "%s", cap);
X if (r != 1) {
X fprintf(stderr, "unexpected EOF\n");
X exit(1);
X }
X if (strcmp(cap, "#") == 0)
X break;
X match = bsearch((anyptr)&p2p2c, (anyptr)_sboolnames,
X NUM_OF_BOOLS, sizeof(p2p2c), _compar);
X if (match == NULL) {
X fprintf(stderr, "unknown bool name '%s'\n", cap);
X continue;
X }
X printf("\t%d,\n", *match - boolnames);
X }
X puts("\t-1");
X puts("};\n");
X
X puts("int _numorder[] = {");
X
X while(1) {
X r = fscanf(f, "%s", cap);
X if (r != 1) {
X fprintf(stderr, "unexpected EOF\n");
X exit(1);
X }
X if (strcmp(cap, "$") == 0)
X break;
X match = bsearch((anyptr)&p2p2c, (anyptr)_snumnames,
X NUM_OF_NUMS, sizeof(p2p2c), _compar);
X if (match == NULL) {
X fprintf(stderr, "unknown num name '%s'\n", cap);
X continue;
X }
X printf("\t%d,\n", *match - numnames);
X }
X puts("\t-1");
X puts("};\n");
X
X puts("int _strorder[] = {");
X
X while(1) {
X r = fscanf(f, "%s", cap);
X if (r != 1)
X break;
X match = bsearch((anyptr)&p2p2c, (anyptr)_sstrnames,
X NUM_OF_STRS, sizeof(p2p2c), _compar);
X if (match == NULL) {
X fprintf(stderr, "unknown str name '%s'\n", cap);
X continue;
X }
X printf("\t%d,\n", *match - strnames);
X }
X puts("\t-1");
X puts("};\n");
X
X return 0;
X}
SHAR_EOF
chmod 0644 mkbinorder.c || echo "restore of mkbinorder.c fails"
case $TOUCH in
can)
touch -am 0402044690 mkbinorder.c
;;
esac
set `wc -c mkbinorder.c`;Wc_c=$1
case "$Wc_c" in
"2151") ;;
*) echo original size 2151, current size $Wc_c ;;
esac
# ============= gettbin.c ==============
echo "x - extracting gettbin.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > gettbin.c &&
X/*
X * gettbin.c
X *
X * By Ross Ridge
X * Public Domain
X * 90/03/23 03:50:54
X *
X * Get a terminfo binary entry
X *
X */
X
X#include "defs.h"
X#include "term.h"
X
X#ifdef USE_SCCS_IDS
Xstatic char SCCSid[] = "@(#) gettbin.c 1.2";
X#endif
Xextern int _boolorder[], _numorder[], _strorder[];
X
X#ifdef TRUE_BYTE_ORDERING
X/* 8 bit char, 16 bit short, lsb first, twos complement */
X#define convshort(s) (*(short *)(s))
X#else
X#ifdef TWOS_COPLEMENT
X/* 8 bit char, 16 bit short, lsb last, twos complement */
X#define convshort(s) ((short)(((s[0] & 0377) << 8) | (s[1] & 0377)))
X#else
X/* anything else... */
Xstatic short convshort(s)
Xchar *s; {
X register int a,b;
X
X a = (int) s[0] & 0377;
X b = (int) s[1] & 0377;
X
X if (a == 0377 && b == 0377)
X return -1;
X if (a == 0376 && b == 0377)
X return -2;
X
X return a + b * 256;
X}
X#endif
X#endif
X
Xint _gettbin(buf, cur)
Xchar *buf;
XTERMINAL *cur; {
X register char *s;
X int i;
X int sz_names, sz_bools, sz_nums, sz_offs, sz_strs;
X int n_bools, n_nums, n_strs;
X char *strtbl;
X
X buf[MAX_BUF] = '\0';
X s = buf;
X
X if (convshort(s) != 0432)
X return 1;
X sz_names = convshort(s + 2);
X sz_bools = convshort(s + 4);
X n_nums = convshort(s + 6);
X n_strs = convshort(s + 8);
X sz_strs = convshort(s + 10);
X
X n_bools = sz_bools;
X sz_nums = n_nums * 2;
X sz_offs = n_strs * 2;
X
X if ((sz_names + sz_bools) & 1)
X sz_bools++;
X
X if (12 + sz_names + sz_bools + sz_nums + sz_offs + sz_strs > MAX_BUF)
X return 1;
X
X s += 12;
X if ((cur->name_all = _addstr(s)) == NULL)
X return 1;
X s += sz_names;
X while(--s >= buf + 12) {
X if (*s == '|') {
X if ((cur->name_long = _addstr(s + 1)) == NULL)
X return 1;
X break;
X }
X }
X
X s = buf + 12 + sz_names;
X for(i = 0; i < n_bools && _boolorder[i] != -1; i++, s++) {
X if (cur->bools[_boolorder[i]] == -1 && *s == 1)
X cur->bools[_boolorder[i]] = 1;
X }
X
X s = buf + 12 + sz_names + sz_bools;
X for(i = 0; i < n_nums && _numorder[i] != -1; i++, s += 2) {
X if (convshort(s) == -2)
X cur->nums[_numorder[i]] = -1;
X else if (cur->nums[_numorder[i]] == -2 && convshort(s) != -1)
X cur->nums[_numorder[i]] = convshort(s);
X }
X
X s = buf + 12 + sz_names + sz_bools + sz_nums;
X strtbl = s + sz_offs;
X for(i = 0; i < n_strs && _strorder[i] != -1; i++, s += 2) {
X if (convshort(s) == -2)
X cur->strs[_strorder[i]] = NULL;
X else if (cur->strs[_strorder[i]] == (char *) -1
X && convshort(s) != -1) {
X#ifdef DEBUG
X printf("$%s ", strnames[_strorder[i]]);
X#endif
X if ((cur->strs[_strorder[i]]
X = _addstr(strtbl + convshort(s))) == NULL)
X return 1;
X }
X }
X
X return 0;
X}
SHAR_EOF
chmod 0644 gettbin.c || echo "restore of gettbin.c fails"
case $TOUCH in
can)
touch -am 0402044690 gettbin.c
;;
esac
set `wc -c gettbin.c`;Wc_c=$1
case "$Wc_c" in
"2512") ;;
*) echo original size 2512, current size $Wc_c ;;
esac
# ============= quit.c ==============
echo "x - extracting quit.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > quit.c &&
X/*
X * quit.c
X *
X * By Ross Ridge
X * Public Domain
X * 90/03/31 10:16:29
X *
X * quit with a diagnostic message printed on stderr
X *
X */
X
X#define NOTLIB
X#include "defs.h"
X
X#ifdef USE_SCCS_IDS
Xstatic char SCCSid[] = "@(#) quit.c 1.3";
X#endif
Xchar *prg_name;
X
X#if defined(USE_PROTOTYPES) && !defined(lint)
Xvoid (*cleanup)(int);
X#else
Xvoid (*cleanup)();
X#endif
X
X#ifdef USE_STDARG
X#ifdef USE_PROTOTYPES
Xvoid quit(int e, char *fmt, ...)
X#else
Xvoid quit(e, fmt)
Xint e;
Xchar *fmt;
X#endif
X#else
Xvoid quit(va_alist)
Xva_dcl
X#endif
X{
X#ifndef USE_STDARG
X int e;
X char *fmt;
X#endif
X va_list ap;
X
X#ifdef USE_STDARG
X ap = va_start(ap, fmt);
X#else
X ap = va_start(ap);
X e = va_arg(ap, int);
X fmt = va_arg(ap, char *);
X#endif
X
X (*cleanup)(e);
X
X if (e != 0)
X fprintf(stderr, "%s: ", prg_name);
X#ifdef USE_DOPRNT
X _doprnt(fmt, ap, stderr);
X#else
X vfprintf(stderr, fmt, ap);
X#endif
X putc('\n', stderr);
X if (e > 0 && e < sys_nerr) {
X fprintf(stderr, "%d - %s\n", e, sys_errlist[e]);
X }
X fflush(stderr);
X exit(e);
X}
SHAR_EOF
chmod 0644 quit.c || echo "restore of quit.c fails"
case $TOUCH in
can)
touch -am 0402044690 quit.c
;;
esac
set `wc -c quit.c`;Wc_c=$1
case "$Wc_c" in
"992") ;;
*) echo original size 992, current size $Wc_c ;;
esac
# ============= ttest.c ==============
echo "x - extracting ttest.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ttest.c &&
X/*
X * ttest.c
X *
X * By Ross Ridge
X * Public Domain
X * 90/03/22 03:43:45
X *
X */
X
X#define NOTLIB
X#include "defs.h"
X#include "term.h"
X
Xstatic char SCCSid[] = "@(#) ttest.c 1.1";
X
Xint cup(x,y)
Xint x, y; {
X if (columns < 2 || lines < 2)
X return -1;
X if (cursor_address != NULL)
X putp(tparm(cursor_address, y, x));
X else if (cursor_home != NULL && cursor_down != NULL
X && cursor_right != NULL) {
X putp(cursor_home);
X if (parm_down_cursor != NULL)
X putp(tparm(parm_down_cursor, y));
X else
X for(; y > 0; y--)
X putp(cursor_down);
X if (parm_right_cursor != NULL)
X putp(tparm(parm_right_cursor, y));
X else
X for(; y > 0; y--)
X putp(cursor_right);
X } else if (cursor_to_ll != NULL && cursor_up != NULL
X && cursor_right != NULL) {
X putp(cursor_to_ll);
X if (parm_up_cursor != NULL)
X putp(tparm(parm_up_cursor, y));
X else
X for(y++; y < columns ; y++)
X putp(cursor_up);
X if (parm_right_cursor != NULL)
X putp(tparm(parm_right_cursor, y));
X else
X for(; y > 0; y--)
X putp(cursor_right);
X } else
X return 1;
X return 0;
X}
X
Xint clear() {
X int r;
X if (clear_screen != NULL)
X putp(clear_screen);
X else if (clr_eos != NULL) {
X r = cup(0,0);
X if (r != 0)
X return r;
X putp(clr_eos);
X } else
X return -2;
X return 0;
X}
X
Xvoid nl() {
X if (newline != NULL)
X putp(newline);
X else if (carriage_return != NULL && cursor_down != NULL) {
X putp(cursor_down);
X putp(carriage_return);
X } else
X quit(-1, "can't do a newline");
X return;
X}
X
Xvoid putln(s)
Xchar *s; {
X int i;
X
X if (columns < 2 || auto_right_margin)
X fputs(s, stdout);
X else {
X i = 0;
X while(*s) {
X putchar(*s);
X s++;
X if (++i == columns) {
X nl();
X i = 0;
X }
X }
X }
X nl();
X}
X
Xvoid anykey() {
X fputs("-- press any key --", stdout);
X fflush(stdout);
X getchar();
X nl();
X}
X
Xvoid do_cleanup(e)
Xint e; {
X fflush(stdout);
X fflush(stderr);
X reset_shell_mode();
X fprintf(stderr, "\n");
X}
X
X#ifdef USE_SGTTY
Xstruct sgttyb new_tty;
X#else
Xstruct termio new_tty;
X#endif
X
Xmain(argc, argv)
Xint argc;
Xchar **argv; {
X int r;
X register int i;
X
X prg_name = argv[0];
X cleanup = do_cleanup;
X
X if (argc == 1)
X setupterm(NULL, 1, (int *) 0);
X else if (argc == 2)
X setupterm(argv[1], 1, (int *) 0);
X else {
X fprintf(stderr, "usage: %s [terminal]\n", argv[0]);
X return 1;
X }
X fflush(stderr);
X fflush(stdout);
X#ifdef USE_SGTTY
X ioctl(1, TIOCGETP, &new_tty);
X new_tty.sg_flags &= ~(CRMOD | ECHO | XTABS);
X#ifdef CBREAK
X new_tty.sg_flags |= CBREAK;
X#else
X new_tty.sg_flags |= RAW;
X#endif
X ioctl(1, TIOCSETP, &new_tty);
X#endif
X#ifdef USE_TERMIO
X ioctl(1, TCGETA, &new_tty);
X new_tty.c_lflag &= ~(ICANON | ECHO);
X new_tty.c_oflag &= ~(OPOST);
X new_tty.c_cc[VMIN] = 1;
X new_tty.c_cc[VTIME] = 1;
X ioctl(1, TCSETA, &new_tty);
X#endif
X def_prog_mode();
X
X clear();
X printf("columns = %d", columns);
X nl();
X printf("lines = %d", lines);
X if (columns < 2)
X quit(-1, "columns must be > 1");
X nl();
X anykey();
X nl();
X if (auto_right_margin) {
X putln("auto_right_margin = TRUE");
X nl();
X for(i = 0; i < columns; i++)
X putchar('1');
X for(i = 0; i < columns / 2; i++)
X putchar('2');
X nl();
X } else {
X putln("auto_right_margin = FALSE");
X nl();
X for(i = 0; i < columns + columns / 2; i++)
X putchar('1');
X nl();
X for(i = 0; i < columns / 2; i++)
X putchar('2');
X nl();
X }
X nl();
X putln("***a line of 1's followed by a line of 2's");
X nl();
X anykey();
X nl();
X
X if (over_strike) {
X putln("over_strike = TRUE");
X if (cursor_left != NULL) {
X for(i = 0; i < columns / 4 + 1; i++) {
X putchar('/');
X putp(cursor_left);
X putchar('\\');
X }
X } else if (carriage_return != NULL) {
X for(i = 0; i < columns / 4 + 1; i++)
X putchar('/');
X putp(carriage_return);
X for(i = 0; i < columns / 4 + 1; i++)
X putchar('\\');
X }
X nl();
X nl();
X putln("*** X's made from \\'s overstriking /'s");
X nl();
X anykey();
X nl();
X }
X
X if (cup(0,0) == 0) {
X clear();
X putln("cup test");
X for(i = 1; i < columns; i++)
X putp(tparm(cursor_address, 0, i));
X for(i = 0; i < lines; i++)
X putp(tparm(cursor_address, i, columns - 1));
X for(i = columns; i--;)
X putp(tparm(cursor_address, lines - 1, i));
X for(i = lines; i--;)
X putp(tparm(cursor_address, i, 0));
X nl();
X anykey();
X }
X clear();
X reset_shell_mode();
X
X return (1);
X}
SHAR_EOF
chmod 0644 ttest.c || echo "restore of ttest.c fails"
case $TOUCH in
can)
touch -am 0402044690 ttest.c
;;
esac
set `wc -c ttest.c`;Wc_c=$1
case "$Wc_c" in
"4213") ;;
*) echo original size 4213, current size $Wc_c ;;
esac
# ============= caps.c ==============
echo "x - extracting caps.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > caps.c &&
X/*
X * caps.c
X *
X * By Ross Ridge
X * Public Domain
X * 90/03/22 03:43:45
X *
X * caps [-c | -t] [term]
X *
X * -c use termcap names instead of terminfo variable names
X * -t use terminfo capnames instead of variables names
X * term name of terminal to use
X *
X * prints out all the capabilities given the specified terminal. If no
X * terminal is given, it is taken from the environment variable TERM.
X *
X */
X
X#define NOTLIB
X#include "defs.h"
X#include "term.h"
X
Xstatic char SCCSid[] = "@(#) caps.c 1.1";
X
X/* output a string in a human readable format */
Xvoid putstr(s)
Xchar *s; {
X while(*s != '\0') {
X switch(*s) {
X case '\n': printf("\\n"); break;
X case '\b': printf("\\b"); break;
X case '\t': printf("\\t"); break;
X case '\r': printf("\\r"); break;
X case '\f': printf("\\f"); break;
X case ' ': printf("\\s"); break;
X case '\177': printf("^?"); break;
X case '\200': printf("\\0"); break;
X default:
X if (*s > 0 && *s < 32)
X printf("^%c", *s + 64);
X else if (*s < 0 || *s > 127)
X printf("\\%03o", *s & 0xff);
X else
X putchar(*s);
X break;
X }
X s++;
X }
X}
X
Xvoid do_cleanup(e)
Xint e; {
X fprintf(stderr, "usage: %s [-c | -t ] [terminal]\n", prg_name);
X return;
X}
X
Xint main(argc, argv)
Xint argc;
Xchar **argv; {
X int names = 0;
X register int i;
X int flag, num;
X char *str;
X
X prg_name = argv[0];
X cleanup = do_cleanup;
X
X if (argc > 3)
X quit(-1, "argument count");
X
X if (argc == 1)
X setupterm(NULL, 2, (int *) 0);
X else if (argc == 2)
X setupterm(argv[1], 2, (int *) 0);
X else {
X if (argv[1][0] != '-')
X quit(-1, "bad switch");
X if (argv[1][1] == 'c')
X names = 2;
X else if (argv[1][1] == 't')
X names = 1;
X else
X quit(-1, "unknown switch '%c'", argv[1][1]);
X setupterm(argv[2], 2, (int *) 0);
X
X }
X
X fflush(stderr);
X fflush(stdout);
X printf("\n");
X#ifdef _CUR_TERM
X printf("%s: %s\n", cur_term->name, cur_term->name_all);
X printf("pad: %d xon: %d termcap: %d\n",
X cur_term->pad, cur_term->xon, cur_term->termcap);
X printf("true_columns: %d true_lines: %d baudrate: %d\n",
X cur_term->true_columns, cur_term->true_lines,
X cur_term->baudrate);
X printf("\n");
X#endif
X
X printf("Booleans:\n");
X for(i = 0; boolnames[i] != NULL; i++) {
X#ifdef _CUR_TERM
X flag = cur_term->bools[i];
X#else
X flag = tigetflag(boolnames[i]);
X#endif
X if (flag != -1 && flag != 0) {
X switch(names) {
X case 0:
X printf(" %s\n", boolfnames[i]);
X break;
X case 1:
X printf(" %s\n", boolnames[i]);
X break;
X case 2:
X printf(" %s\n", boolcodes[i]);
X break;
X }
X }
X }
X
X printf("\nNumerics:\n");
X for(i = 0; numnames[i] != NULL; i++) {
X num = tigetnum(numnames[i]);
X if (num != -2 && num != -1) {
X switch(names) {
X case 0:
X printf(" %-32s: %d\n", numfnames[i], num);
X break;
X case 1:
X printf(" %-5s: %d\n", numnames[i], num);
X break;
X case 2:
X printf(" %-2s: %d\n", numcodes[i], num);
X break;
X }
X }
X }
X printf("\nStrings:\n");
X for(i = 0; strnames[i] != NULL; i++) {
X str = tigetstr(strnames[i]);
X if (str != (char *) -1 && str != (char *) 0) {
X switch(names) {
X case 0:
X printf(" %-32s: ", strfnames[i]);
X break;
X case 1:
X printf(" %-5s: ", strnames[i]);
X break;
X case 2:
X printf(" %-2s: ", strcodes[i]);
X break;
X }
X putstr(str);
X putchar('\n');
X }
X }
X return 0;
X}
SHAR_EOF
chmod 0644 caps.c || echo "restore of caps.c fails"
case $TOUCH in
can)
touch -am 0402044690 caps.c
;;
esac
set `wc -c caps.c`;Wc_c=$1
case "$Wc_c" in
"3264") ;;
*) echo original size 3264, current size $Wc_c ;;
esac
# ============= conv.c ==============
echo "x - extracting conv.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > conv.c &&
X/*
X * conv.c
X *
X * Ross Ridge
X * Public Domain
X * 90/03/31 08:48:56
X *
X * conv [-b] [-c [-OUGd]] [-i] [-B [-D dir]] [-I] [-k] [-t term] [file]
X *
X * -c convert from termcap
X * -i convert from terminfo source
X * -b convert from terminfo binary
X * -B convert to terminfo binary
X * -I convert to terminfo source
X *
X * The following switches are available when converting from termcap:
X * -d don't supply any defaults for missing capabilities
X * -O include obsolete termcap capabilities
X * -G include GNU capabilities
X * -U include UW capabilities
X *
X * -k keep comments
X * -D dir directory to put terminfo binaries in
X *
X * -t term name of terminal to translate
X * file filename of termcap/terminfo database to use
X *
X * If a file is specifed and no terminal is given the entire file we be
X * translated.
X * If no terminal and no file is specified then the terminal name will be
X * taken from the environment varible TERM.
X * Unless compiling to a terminfo binary, output is to stdout.
X *
X */
X
X#define NOTLIB
X#include "defs.h"
X#define SINGLE
X#include "term.h"
X
X#include <ctype.h>
X#include <fcntl.h>
X#include <sys/stat.h>
X
X#ifndef lint
Xstatic char SCCSid[] = "@(#) conv.c 1.4";
X#endif
X
Xextern int errno;
X
X/* the right margin of the output */
X#define LINELEN 76
X
Xstruct term_path *path; /* returned from _buildpath */
X
XTERMINAL _term_buf;
Xchar buf[MAX_BUF+1]; /* buffer for the termcap entry */
X
Xint noOT = 1; /* -O */
Xint noGNU = 1; /* -G */
Xint noUW = 1; /* -W */
Xint dodefault = 1; /* -d */
Xint keepcomments = 0; /* -k */
Xint compile = 0; /* -B */
Xint from_tcap = 0; /* -c */
Xint from_tinfo = 0; /* -i */
Xint from_tbin = 0; /* -b */
Xchar *directory = NULL; /* -D */
X
Xint continued = 0;
Xint termcap = 1;
X
Xint lineno = 0; /* current line number */
X
X/* print the first part of a warning message */
Xvoid warn() {
X if (lineno == 0)
X fprintf(stderr, "warning: ");
X else
X fprintf(stderr, "(%s)%d: warning: ",
X _term_buf.name_long, lineno);
X}
X
X/* output a string indenting at the beginning of a line, and wraping
X * at the right margin.
X */
Xvoid putstr(s)
Xchar *s; {
X static pos = 0;
X int l;
X
X if (s == NULL) {
X if (pos != 0) {
X pos = 0;
X putchar('\n');
X }
X return;
X }
X
X if (termcap && noOT && *s == 'O')
X return;
X if (termcap && noGNU && *s == 'G')
X return;
X if (termcap && noUW && *s == 'U')
X return;
X
X l = strlen(s) + 2;
X
X if (l + pos > LINELEN && pos != 0) {
X putchar('\n');
X pos = 0;
X }
X
X if (pos == 0) {
X putchar('\t');
X pos = 8;
X } else
X putchar(' ');
X
X printf("%s,", s);
X
X pos += l;
X}
X
X#ifndef MAX_PUSHED
X/* maximum # of parameter that can be pushed onto the stack */
X#define MAX_PUSHED 16
X#endif
X
Xint stack[MAX_PUSHED]; /* the stack */
Xint stackptr; /* the next empty place on the stack */
Xint onstack; /* the top of stack */
Xint seenm; /* seen a %m */
Xint seenn; /* seen a %n */
Xint seenr; /* seen a %r */
Xint param; /* current parameter */
Xchar *dp; /* pointer to the end of the converted string */
X
X/* push onstack on to the stack */
Xvoid push() {
X if (stackptr > MAX_PUSHED) {
X warn();
X fprintf(stderr, "string to complex to covert\n");
X } else
X stack[stackptr++] = onstack;
X}
X
X/* pop the top of the stack into onstack */
Xvoid pop() {
X if (stackptr == 0)
X if (onstack == 0) {
X warn();
X fprintf(stderr, "I'm confused\n");
X } else
X onstack = 0;
X else
X onstack = stack[--stackptr];
X param++;
X}
X
X/* convert a character to a terminfo push */
Xstatic int cvtchar(sp)
Xregister char *sp; {
X char c;
X int l;
X
X switch(*sp) {
X case '\\':
X switch(*++sp) {
X case '\'':
X case '$':
X case '\\':
X case '%':
X c = *sp;
X l = 2;
X break;
X case '\0':
X c = '\\';
X l = 1;
X break;
X case '0':
X if (sp[1] == '0' && sp[2] == '0') {
X c = '\0';
X l = 4;
X } else {
X c = '\200'; /* '\0' ???? */
X l = 2;
X }
X break;
X default:
X c = *sp;
X l = 2;
X break;
X }
X break;
X default:
X c = *sp;
X l = 1;
X }
X c &= 0177;
X if (isgraph(c) && c != ',' && c != '\'' && c != '\\' && c != ':') {
X *dp++ = '%'; *dp++ = '\''; *dp++ = c; *dp++ = '\'';
X } else {
X *dp++ = '%'; *dp++ = '{';
X if (c > 99)
X *dp++ = c / 100 + '0';
X if (c > 9)
X *dp++ = (c / 10) % 10 + '0';
X *dp++ = c % 10 + '0';
X *dp++ = '}';
X }
X return l;
X}
X
X/* push n copies of param on the terminfo stack if not already there */
Xvoid getparm(parm, n)
Xint parm;
Xint n; {
X if (seenr) {
X if (parm == 1)
X parm = 2;
X else if (parm == 2)
X parm = 1;
X }
X if (onstack == parm) {
X if (n > 1) {
X warn();
X fprintf(stderr, "string may not be optimal");
X *dp++ = '%'; *dp++ = 'P'; *dp++ = 'a';
X while(n--) {
X *dp++ = '%'; *dp++ = 'g'; *dp++ = 'a';
X }
X }
X return;
X }
X if (onstack != 0)
X push();
X
X onstack = parm;
X
X while(n--) { /* %p0 */
X *dp++ = '%'; *dp++ = 'p'; *dp++ = '0' + parm;
X }
X
X if (seenn && parm < 3) { /* %{96}%^ */
X *dp++ = '%'; *dp++ = '{'; *dp++ = '9'; *dp++ = '6'; *dp++ = '}';
X *dp++ = '%'; *dp++ = '^';
X }
X
X if (seenm && parm < 3) { /* %{127}%^ */
X *dp++ = '%'; *dp++ = '{'; *dp++ = '1'; *dp++ = '2'; *dp++ = '7';
X *dp++ = '}'; *dp++ = '%'; *dp++ = '^';
X }
X}
X
X/* convert a string to terminfo format */
Xchar *convstr(s, i)
Xregister char *s;
Xint i; {
X static char line[MAX_LINE];
X register char *cap;
X int nocode = 0;
X
X stackptr = 0;
X onstack = 0;
X seenm = 0;
X seenn = 0;
X seenr = 0;
X param = 1;
X
X dp = line;
X cap = strnames[i];
X#if 0
X if (cap[0] == 'k'
X || ((cap[0] == 'i' || cap[0] == 'r') && cap[1] == 's'
X && (cap[2] == '1' || cap[2] == '2' || cap[2] == '3')))
X /* if (k.* || [ir]s[123]) */
X nocode = 1;
X#else
X if (_strflags[i] != 'G')
X nocode = 1;
X#endif
X if (!nocode) {
X char *d = s;
X while(*s != '\0') {
X if (s[0] == '\\' && s[1] != '\0')
X s++;
X else if (s[0] == '%' && s[1] != '\0') {
X if (s[1] == 'p') {
X if (termcap) {
X warn();
X fprintf(stderr,
X"string '%s' already in terminfo format\n", strcodes[i]);
X nocode = 1;
X break;
X } else
X nocode = 1;
X }
X s++;
X }
X s++;
X }
X if (!nocode && !termcap) {
X warn();
X fprintf(stderr,
X"string '%s' not in terminfo format, converting...\n", cap);
X }
X s = d;
X }
X while(*s != '\0') {
X switch(*s) {
X case '%':
X s++;
X if (nocode) {
X *dp++ = '%';
X break;
X }
X switch(*s++) {
X case '%': *dp++ = '%'; break;
X case 'r':
X if (seenr++ == 1) {
X warn();
X fprintf(stderr, "seen %%r twice\n");
X }
X break;
X case 'm':
X if (seenm++ == 1) {
X warn();
X fprintf(stderr, "seen %%m twice\n");
X }
X break;
X case 'n':
X if (seenn++ == 1) {
X warn();
X fprintf(stderr, "seen %%n twice\n");
X }
X break;
X case 'i': *dp++ = '%'; *dp++ = 'i'; break;
X case '6':
X case 'B':
X getparm(param, 2);
X /* %{6}%*%+ */
X *dp++ = '%'; *dp++ = '{'; *dp++ = '6';
X *dp++ = '}'; *dp++ = '%'; *dp++ = '*';
X *dp++ = '%'; *dp++ = '+';
X break;
X case '8':
X case 'D':
X getparm(param, 2);
X /* %{2}%*%- */
X *dp++ = '%'; *dp++ = '{'; *dp++ = '2';
X *dp++ = '}'; *dp++ = '%'; *dp++ = '*';
X *dp++ = '%'; *dp++ = '-';
X break;
X case '>':
X getparm(param, 2);
X /* %?%{x}%>%t%{y}%+%; */
X *dp++ = '%'; *dp++ = '?';
X s += cvtchar(s);
X *dp++ = '%'; *dp++ = '>';
X *dp++ = '%'; *dp++ = 't';
X s += cvtchar(s);
X *dp++ = '%'; *dp++ = '+';
X *dp++ = '%'; *dp++ = ';';
X break;
X case 'a':
X if ((*s == '=' || *s == '+' || *s == '-'
X || *s == '*' || *s == '/')
X && (s[1] == 'p' || s[1] == 'c')
X && s[2] != '\0') {
X int l;
X l = 2;
X if (*s != '=')
X getparm(param, 1);
X if (s[1] == 'p') {
X getparm(param + s[2] - '@', 1);
X if (param != onstack) {
X pop();
X param--;
X }
X l++;
X } else
X l += cvtchar(s + 2);
X switch(*s) {
X case '+':
X *dp++ = '%'; *dp++ = '+';
X break;
X case '-':
X *dp++ = '%'; *dp++ = '-';
X break;
X case '*':
X *dp++ = '%'; *dp++ = '*';
SHAR_EOF
echo "End of tinfo part 3"
echo "File conv.c is continued in part 4"
echo "4" > s3_seq_.tmp
exit 0
--
Ross Ridge //
"The Great HTMU" [oo]
ross@contact.uucp -()-
ross@watcsc.waterloo.edu //