home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-04-04 | 49.0 KB | 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 //
-
-
-