home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-04-04 | 49.1 KB | 2,476 lines |
- #!/bin/sh
- # this is part.04 (part 4 of tinfo)
- # do not concatenate these parts, unpack them in order with /bin/sh
- # file conv.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=4
- 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 conv.c"
- sed 's/^X//' << 'SHAR_EOF' >> conv.c
- X break;
- X case '/':
- X *dp++ = '%'; *dp++ = '/';
- X break;
- X case '=':
- X if (seenr)
- X if (param == 1)
- X onstack = 2;
- X else if (param == 2)
- X onstack = 1;
- X else
- X onstack = param;
- X else
- X onstack = param;
- X break;
- X }
- X s += l;
- X break;
- X }
- X getparm(param, 1);
- X s += cvtchar(s);
- X *dp++ = '%'; *dp++ = '+';
- X break;
- X case '+':
- X getparm(param, 1);
- X s += cvtchar(s);
- X *dp++ = '%'; *dp++ = '+';
- X *dp++ = '%'; *dp++ = 'c';
- X pop();
- X break;
- X case 's':
- X s += cvtchar(s);
- X getparm(param, 1);
- X *dp++ = '%'; *dp++ = '-';
- X break;
- X case '-':
- X s += cvtchar(s);
- X getparm(param, 1);
- X *dp++ = '%'; *dp++ = '-';
- X *dp++ = '%'; *dp++ = 'c';
- X pop();
- X break;
- X case '.':
- X getparm(param, 1);
- X *dp++ = '%'; *dp++ = 'c';
- X pop();
- X break;
- X case '2':
- X getparm(param, 1);
- X *dp++ = '%'; *dp++ = '0';
- X *dp++ = '2'; *dp++ = 'd';
- X pop();
- X break;
- X case '3':
- X getparm(param, 1);
- X *dp++ = '%'; *dp++ = '0';
- X *dp++ = '3'; *dp++ = 'd';
- X pop();
- X break;
- X case 'd':
- X getparm(param, 1);
- X *dp++ = '%'; *dp++ = 'd';
- X pop();
- X break;
- X case 'f':
- X param++;
- X break;
- X case 'b':
- X param--;
- X break;
- X default:
- X warn();
- X *dp++ = '%';
- X s--;
- X fprintf(stderr, "'%s' unknown %% code %%",
- X strcodes[i], *s);
- X if (*s >= 0 && *s < 32)
- X fprintf(stderr, "^%c\n", *s + '@');
- X else if (*s < 0 || *s >= 127)
- X fprintf(stderr, "\\%03o\n", *s & 0377);
- X else
- X fprintf(stderr, "%c\n", *s);
- X break;
- X }
- X break;
- X case '\\':
- X if (!compile) {*dp++ = *s++; *dp++ = *s++; break;}
- X case '\n':
- X if (!compile) {*dp++ = '\\'; *dp++ = 'n'; s++; break;}
- X case '\t':
- X if (!compile) {*dp++ = '\\'; *dp++ = 't'; s++; break;}
- X case '\r':
- X if (!compile) {*dp++ = '\\'; *dp++ = 'r'; s++; break;}
- X case '\200':
- X if (!compile) {*dp++ = '\\'; *dp++ = '0'; s++; break;}
- X case '\f':
- X if (!compile) {*dp++ = '\\'; *dp++ = 'f'; s++; break;}
- X case '\b':
- X if (!compile) {*dp++ = '\\'; *dp++ = 'b'; s++; break;}
- X case ' ':
- X if (!compile) {*dp++ = '\\'; *dp++ = 's'; s++; break;}
- X case '^':
- X if (!compile) {*dp++ = '\\'; *dp++ = '^'; s++; break;}
- X case ':':
- X if (!compile) {*dp++ = '\\'; *dp++ = ':'; s++; break;}
- X case ',':
- X if (!compile) {*dp++ = '\\'; *dp++ = ','; s++; break;}
- X#if 0
- X case '\'':
- X if (!compile) {*dp++ = '\\'; *dp++ = '\''; s++; break;}
- X#endif
- X default:
- X if (compile)
- X *dp++ = *s++;
- X else if (*s > 0 && *s < 32) {
- X *dp++ = '^';
- X *dp++ = *s + '@';
- X s++;
- X } else if (*s <= 0 || *s >= 127) {
- X *dp++ = '\\';
- X *dp++ = ((*s & 0300) >> 6) + '0';
- X *dp++ = ((*s & 0070) >> 3) + '0';
- X *dp++ = (*s & 0007) + '0';
- X s++;
- X } else
- X *dp++ = *s++;
- X break;
- X }
- X }
- X *dp = '\0';
- X return line;
- X}
- X
- X#define LSB(n) ((unsigned) (n) & 0377)
- X#define MSB(n) (((unsigned) (n) >> 8) & 0377)
- X
- Xvoid writebin(fd, name)
- Xint fd;
- Xchar *name; {
- X static char bin[MAX_BUF + 1];
- X register char *s;
- X register char *d;
- X register int i;
- X register char *t;
- X register int n;
- X char *strtbl;
- X int sz_name, n_bools, n_nums, n_offs, sz_strs;
- X extern int _boolorder[], _numorder[], _strorder[];
- X
- X strncpy(bin + 12, name, 127);
- X bin[12 + 128] = '\0';
- X sz_name = strlen(name) + 1;
- X if (sz_name > 128)
- X sz_name = 128;
- X
- X s = bin + 12 + sz_name;
- X for(i = 0; _boolorder[i] != -1; i++) {
- X switch(_term_buf.bools[i]) {
- X case -1: *s++ = 0; break;
- X case 0: *s++ = 0377; break;
- X default: *s++ = 1; break;
- X }
- X }
- X n_bools = i;
- X if ((sz_name + n_bools) & 1)
- X n_bools++;
- X
- X s = bin + 12 + sz_name + n_bools;
- X for(i = 0; _numorder[i] != -1; i++) {
- X n = _term_buf.nums[_numorder[i]];
- X switch(n) {
- X case -2: *s++ = 0377; *s++ = 0377; break;
- X case -1: *s++ = 0376; *s++ = 0377; break;
- X default:
- X *s++ = LSB(n);
- X *s++ = MSB(n);
- X }
- X }
- X n_nums = i;
- X
- X s = bin + 12 + sz_name + n_bools + n_nums * 2;
- X for(i = 0; _strorder[i] != -1; i++) {
- X if (_term_buf.strs[_strorder[i]] == (char *) 0) {
- X *s++ = 0376; *s++ = 0377;
- X } else {
- X *s++ = 0377; *s++ = 0377;
- X }
- X }
- X n_offs = i;
- X
- X s = bin + 12 + sz_name + n_bools + n_nums * 2;
- X strtbl = d = s + n_offs * 2;
- X for(i = 0; _strorder[i] != -1; i++) {
- X t = _term_buf.strs[_strorder[i]];
- X if (t == (char *) -1 || t == (char *) 0)
- X s += 2;
- X else {
- X n = d - strtbl;
- X *s++ = LSB(n);
- X *s++ = MSB(n);
- X t = convstr(t, _strorder[i]);
- X while(*t != '\0') {
- X *d++ = *t++;
- X if (d >= bin + MAX_BUF - 1) {
- X warn();
- X fprintf(stderr,
- X "compiled entry to big\n");
- X *d++ = '\0';
- X goto toobig;
- X }
- X }
- X *d++ = '\0';
- X }
- X }
- X
- Xtoobig:
- X sz_strs = d - strtbl;
- X
- X bin[0] = 032;
- X bin[1] = 01;
- X bin[2] = LSB(sz_name);
- X bin[3] = MSB(sz_name);
- X bin[4] = LSB(n_bools);
- X bin[5] = MSB(n_bools);
- X bin[6] = LSB(n_nums);
- X bin[7] = MSB(n_nums);
- X bin[8] = LSB(n_offs);
- X bin[9] = MSB(n_offs);
- X bin[10] = LSB(sz_strs);
- X bin[11] = MSB(sz_strs);
- X
- X if (write(fd, bin, d - bin) == -1)
- X quit(errno, "can't write binary file");
- X
- X return;
- X}
- X
- Xvoid find_directory() {
- X struct term_path *p;
- X struct stat st;
- X
- X if (directory != NULL)
- X return;
- X
- X p = path;
- X while(p->type != -1 && p->file != NULL) {
- X if (stat(p->file, &st) == 0) {
- X if ((st.st_mode & 0170000) == 0040000) {
- X directory = p->file;
- X return;
- X }
- X }
- X p++;
- X }
- X quit(-1, "can't find a terminfo directory");
- X}
- X
- X/* convert a terminal name to a binary filename */
- Xchar *binfile(name)
- Xchar *name; {
- X static char line[MAX_LINE+1];
- X
- X sprintf(line, "%s/%c/%s", directory, *name, name);
- X return line;
- X}
- X
- Xchar *bindir(name)
- Xchar *name; {
- X static char line[MAX_LINE+1];
- X
- X sprintf(line, "%s/%c", directory, *name);
- X return line;
- X}
- X
- X/* output a terminfo binary */
- Xvoid outputbin(name)
- Xchar *name; {
- X register char *s, *d;
- X char last[MAX_LINE+1];
- X static char line[MAX_LINE+1];
- X int fd;
- X
- X last[0] = '\0';
- X
- X find_directory();
- X
- X s = name;
- X d = line;
- X while(*s != '\0' && d < line + MAX_LINE)
- X *d++ = *s++;
- X *d = '\0';
- X
- X s = d;
- X while(*s != '|' && s >= line)
- X s--;
- X while(s >= line) {
- X *s-- = '\0';
- X while(*s != '|' && s > line)
- X s--;
- X if (*s == '|')
- X s++;
- X if (*s == '\0') {
- X continue;
- X }
- X if (access(bindir(s), 2) == -1) {
- X if (errno != ENOENT)
- X quit(errno, "can't access directory '%s'",
- X bindir(s));
- X if (mkdir(bindir(s), 0777) == -1)
- X quit(errno, "can't make directory '%s'",
- X bindir(s));
- X }
- X if (last[0] == '\0') {
- X fd = open(binfile(s), O_WRONLY | O_CREAT | O_EXCL,
- X 0666);
- X if (fd == -1) {
- X if (errno != EEXIST)
- X quit(errno, "can't open file '%s'",
- X binfile(s));
- X if (unlink(binfile(s)) == -1)
- X quit(errno, "can't unlink file '%s'",
- X binfile(s));
- X fd = open(binfile(s),
- X O_WRONLY | O_CREAT | O_EXCL, 0666);
- X if (fd == -1)
- X quit(errno, "can't create file '%s'",
- X binfile(s));
- X }
- X writebin(fd, name);
- X close(fd);
- X strncpy(last, binfile(s), MAX_LINE);
- X last[MAX_LINE] = '\0';
- X } else {
- X if (access(binfile(s), 0) == -1) {
- X if (errno != ENOENT)
- X quit(errno, "can't access file '%s'",
- X binfile(s));
- X } else {
- X if (unlink(binfile(s)) == -1)
- X quit(errno, "can't unlink file '%s'",
- X binfile(s));
- X }
- X if (link(last, binfile(s)) == -1)
- X quit(errno, "can't link '%s' to '%s'",
- X last, binfile(s));
- X }
- X s--;
- X }
- X return;
- X}
- X
- X/* output an entry in terminfo source format */
- Xvoid outputinfo(name)
- Xchar *name; {
- X int i;
- X char line[MAX_LINE];
- X
- X printf("%s,\n", name);
- X
- X for(i = 0; i < NUM_OF_BOOLS; i++)
- X if (_term_buf.bools[i] == 0) {
- X sprintf(line, "%s@", boolnames[i]);
- X putstr(line);
- X } else if (_term_buf.bools[i] != -1)
- X putstr(boolnames[i]);
- X
- X for(i = 0; i < NUM_OF_NUMS; i++)
- X if (_term_buf.nums[i] == -1) {
- X sprintf(line, "%s@", numnames[i]);
- X putstr(line);
- X } else if (_term_buf.nums[i] != -2) {
- X sprintf(line, "%s#%d", numnames[i], _term_buf.nums[i]);
- X putstr(line);
- X }
- X
- X for(i = 0; i < NUM_OF_STRS; i++)
- X if (_term_buf.strs[i] == NULL) {
- X sprintf(line, "%s@", strnames[i]);
- X putstr(line);
- X } else if (_term_buf.strs[i] != (char *) -1) {
- X sprintf(line, "%s=%s", strnames[i],
- X convstr(_term_buf.strs[i], i));
- X putstr(line);
- X }
- X putstr(NULL);
- X}
- X
- X/* convert a terminfo entry to binary format */
- Xvoid convtinfo() {
- X int i, r;
- X
- X termcap = 0;
- X
- X for(i = 0; i < NUM_OF_BOOLS; i++)
- X _term_buf.bools[i] = -1;
- X for(i = 0; i < NUM_OF_NUMS; i++)
- X _term_buf.nums[i] = -2;
- X for(i = 0; i < NUM_OF_STRS; i++)
- X _term_buf.strs[i] = (char *) -1;
- X
- X _term_buf.name_all = NULL;
- X
- X r = _gettinfo(buf, &_term_buf, path);
- X if (r != 0) {
- X if (lineno == 0)
- X quit(-1, "problem reading entry");
- X else {
- X warn();
- X fprintf(stderr, "problem reading entry\n");
- X }
- X }
- X
- X if (compile)
- X outputbin(_term_buf.name_all);
- X else
- X outputinfo(_term_buf.name_all);
- X return;
- X}
- X
- X/* convert a terminfo binary to terminfo source */
- Xvoid convtbin() {
- X int i, r;
- X
- X termcap = 0;
- X
- X for(i = 0; i < NUM_OF_BOOLS; i++)
- X _term_buf.bools[i] = -1;
- X for(i = 0; i < NUM_OF_NUMS; i++)
- X _term_buf.nums[i] = -2;
- X for(i = 0; i < NUM_OF_STRS; i++)
- X _term_buf.strs[i] = (char *) -1;
- X
- X _term_buf.name_all = NULL;
- X
- X r = _gettbin(buf, &_term_buf);
- X if (r != 0) {
- X if (lineno == 0)
- X quit(-1, "problem reading entry");
- X else {
- X warn();
- X fprintf(stderr, "problem reading entry\n");
- X }
- X }
- X
- X outputinfo(_term_buf.name_all);
- X
- X return;
- X}
- X
- X/* convert a termcap entry to terminfo format */
- Xvoid convtcap() {
- X int i, r;
- X char *name;
- X
- X termcap = 1;
- X
- X for(i = 0; i < NUM_OF_BOOLS; i++)
- X _term_buf.bools[i] = -1;
- X for(i = 0; i < NUM_OF_NUMS; i++)
- X _term_buf.nums[i] = -2;
- X for(i = 0; i < NUM_OF_STRS; i++)
- X _term_buf.strs[i] = (char *) -1;
- X
- X _term_buf.name_all = NULL;
- X
- X r = _gettcap(buf, &_term_buf, path);
- X if (r != 0) {
- X if (lineno == 0)
- X quit(-1, "problem reading entry");
- X else {
- X warn();
- X fprintf(stderr, "problem reading entry\n");
- X }
- X }
- X
- X if (dodefault && !continued)
- X _tcapdefault();
- X
- X _tcapconv();
- X
- X name = _term_buf.name_all;
- X if (name[0] != '\0' && name[1] != '\0' && name[2] == '|')
- X name += 3; /* skip the 2 letter code */
- X
- X if (compile)
- X outputbin(name);
- X else
- X outputinfo(name);
- X}
- X
- Xvoid convbinfile(file)
- Xchar *file; {
- X register FILE *f;
- X int r;
- X
- X f = fopen(file, "r");
- X
- X if (f == NULL)
- X quit(errno, "can't open '%s'", file);
- X
- X r = fread(buf, sizeof(char), MAX_BUF, f);
- X if (r < 12 || buf[0] != 032 || buf[1] != 01)
- X quit(-1, "file '%s' corrupted", file);
- X
- X convtbin();
- X}
- X
- X/* convert a termcap file to terminfo format */
- Xvoid convtcfile(file)
- Xchar *file; {
- X int nocolon;
- X register int c;
- X register char *d;
- X register FILE *f;
- X
- X f = fopen(file, "r");
- X
- X if (f == NULL)
- X quit(errno, "can't open '%s'", file);
- X
- X d = buf;
- X c = getc(f);
- X while(c != EOF) {
- X lineno++;
- X if (c == '#') {
- X if (keepcomments) {
- X do {
- X putchar(c);
- X c = getc(f);
- X } while(c != '\n' && c != EOF);
- X putchar('\n');
- X } else
- X do
- X c = getc(f);
- X while(c != '\n' && c != EOF);
- X if (c != EOF)
- X c = getc(f);
- X continue;
- X }
- X while(isspace(c) && c != '\n')
- X c = getc(f);
- X if (c == '\n' && buf == d) {
- X c = getc(f);
- X continue;
- X }
- X
- X while(c != EOF) {
- X if (c == '\\') {
- X c = getc(f);
- X if (c == EOF)
- X break;
- X if (c == '\n') {
- X c = getc(f);
- X break;
- X }
- X *d++ = '\\';
- X *d++ = c;
- X } else if (c == '\n') {
- X *d = '\0';
- X if (*--d == ':') {
- X nocolon = 0;
- X *d-- = '\0';
- X } else {
- X nocolon = 1;
- X }
- X while(d > buf && *d != ':')
- X d--;
- X if (d[1] == 't' && d[2] == 'c' && d[3] == '=') {
- X continued = 1;
- X d[1] = '\0';
- X } else
- X continued = 0;
- X convtcap();
- X if (nocolon) {
- X warn();
- X fprintf(stderr,
- X "entry doesn't end with :\n");
- X }
- X _term_buf.strbuf = _endstr();
- X _del_strs(&_term_buf);
- X if (continued) {
- X printf("\tuse=%s,\n", d + 4);
- X }
- X d = buf;
- X c = getc(f);
- X break;
- X } else
- X *d++ = c;
- X c = getc(f);
- X }
- X }
- X}
- X
- Xstatic int getln(f, buf, len)
- XFILE *f;
- Xregister char *buf;
- Xint len; {
- X register int c, i = 0;
- X
- X while((c = getc(f)) == '#') {
- X lineno++;
- X if (keepcomments) {
- X putchar('#');
- X while((c = getc(f)) != '\n') {
- X if (c == EOF)
- X return -1;
- X putchar(c);
- X }
- X putchar('\n');
- X } else {
- X while((c = getc(f)) != '\n')
- X if (c == EOF)
- X return -1;
- X }
- X }
- X
- X lineno++;
- X while(c != '\n') {
- X if (c == EOF)
- X return -1;
- X if (i < len) {
- X i++;
- X *buf++ = c;
- X }
- X c = getc(f);
- X }
- X
- X while(isspace(*(buf-1))) {
- X buf--;
- X i--;
- X }
- X
- X *buf = '\0';
- X return i;
- X}
- X
- Xvoid convtifile(file)
- Xchar *file; {
- X static char line[MAX_LINE+1];
- X int l;
- X int n;
- X register FILE *f;
- X
- X f = fopen(file, "r");
- X
- X if (f == NULL)
- X quit(errno, "can't open '%s'", file);
- X
- X lineno = 0;
- X
- X l = getln(f, line, MAX_LINE);
- X while(l != -1) {
- X if (line[l-1] == ':') {
- X strncpy(buf, line, MAX_BUF);
- X convtcap();
- X } else if (line[l-1] == '\\') {
- X n = MAX_BUF;
- X do {
- X buf[--l] = '\0';
- X if (n > 0)
- X strncpy(buf + MAX_BUF - n, line, n);
- X n -= l;
- X l = getln(f, line, MAX_LINE);
- X } while(l != -1 && line[l-1] == '\\');
- X if (n > 0 && l != -1)
- X strncpy(buf + MAX_BUF - n, line, n);
- X convtcap();
- X } else if (line[l-1] == ',') {
- X n = MAX_BUF;
- X do {
- X if (n > 0)
- X strncpy(buf + MAX_BUF - n, line, n);
- X n -= l;
- X l = getln(f, line, MAX_LINE);
- X } while(l != -1 && isspace(line[0]));
- X#if 0
- X printf("buf = '%s'\n", buf);
- X#endif
- X convtinfo();
- X continue;
- X } else if (line[0] != '\0') {
- X warn();
- X fprintf(stderr, "malformed line\n");
- X if (keepcomments) {
- X printf("%?%s\n", line);
- X }
- X }
- X l = getln(f, line, MAX_LINE);
- X }
- X return;
- X}
- X
- X/* dummy routine for quit */
- X/* ARGSUSED */
- Xvoid do_cleanup(e)
- Xint e; {
- X return;
- X}
- X
- X/* print out usage, called by quit */
- X/* ARGSUSED */
- Xvoid usage(e)
- Xint e; {
- X fprintf(stderr,
- X"usage: %s [-b] [-c [-OUGd]] [-i] [-B [-D dir]] [-I] [-k] [-t term] [file]\n",
- X prg_name);
- X return;
- X}
- X
- Xint main(argc, argv)
- Xint argc;
- Xchar **argv; {
- X char *getenv();
- X extern char *optarg;
- X extern int optind;
- X extern int opterr;
- X char *term = NULL;
- X char *file = NULL;
- X int r;
- X char c;
- X
- X prg_name = strrchr(argv[0], '/');
- X if (prg_name == NULL)
- X prg_name = argv[0];
- X else
- X prg_name++;
- X
- X cleanup = usage;
- X
- X opterr = 0;
- X
- X if (strcmp(prg_name, "tic") == 0)
- X compile = 1;
- X
- X while ((c = getopt(argc, argv, "bciBIOGUdkd:t:")) != -1) {
- X switch(c) {
- X case 'O':
- X noOT = 0;
- X break;
- X case 'G':
- X noGNU = 0;
- X break;
- X case 'U':
- X noUW = 0;
- X break;
- X case 'D':
- X if (directory != NULL)
- X quit(-1, "more than one directory specified");
- X directory = optarg;
- X break;
- X case 't':
- X if (term != NULL)
- X quit(-1, "more than one terminal specified");
- X term = optarg;
- X break;
- X case 'd': dodefault = 0; break;
- X case 'k': keepcomments = 1; break;
- X case 'b': from_tbin = 1; break;
- X case 'c': from_tcap = 1; break;
- X case 'i': from_tinfo = 1; break;
- X case 'B': compile = 1; break;
- X case 'I': compile = 0; break;
- X case '?':
- X default:
- X quit(-1, "bad or missing command line argument");
- X }
- X }
- X
- X if (optind == argc - 1)
- X file = argv[optind];
- X else if (optind != argc)
- X quit(-1, "wrong number of arguments");
- X
- X if (from_tbin + from_tcap + from_tinfo > 1)
- X quit(-1, "more than one input file type specified");
- X
- X if (!from_tcap && !from_tinfo && !from_tbin && file != NULL) {
- X if (strcmp(prg_name, "cap2info") == 0
- X || strcmp(prg_name, "captoinfo") == 0)
- X from_tcap = 1;
- X else if (strcmp(prg_name, "tic") == 0)
- X from_tinfo = 1;
- X else
- X quit(-1, "no input file type specified");
- X }
- X
- X if (from_tbin && compile)
- X quit(-1, "can't convert from binary to binary");
- X
- X if (file != NULL) {
- X if (from_tbin) {
- X cleanup = do_cleanup;
- X convbinfile(file);
- X exit(0);
- X }
- X if (!compile)
- X path = _buildpath(file, 0, NULL, -1);
- X else {
- X path = _buildpath(file, 0,
- X "$TERMINFO", 2,
- X "$MYTERMINFO", 2,
- X#ifdef TERMINFODIR
- X TERMINFODIR, 0,
- X#endif
- X NULL, -1);
- X }
- X if (path == NULL)
- X quit(-1, "can't build path");
- X if (term == NULL) {
- X cleanup = do_cleanup;
- X if (from_tcap && !compile)
- X convtcfile(file);
- X else
- X convtifile(file);
- X exit(0);
- X }
- X } else if (from_tcap && !compile)
- X path = _buildpath("$TERMCAP", 1,
- X#ifdef TERMCAPFILE
- X TERMCAPFILE, 0,
- X#endif
- X NULL, -1);
- X else if (from_tinfo || from_tbin)
- X path = _buildpath("$TERMINFO", 2,
- X "$MYTERMINFO", 2,
- X#ifdef TERMINFODIR
- X TERMINFODIR, 0,
- X#endif
- X#ifdef TERMINFOSRC
- X TERMINFOSRC, 0,
- X#endif
- X NULL, -1);
- X else if (from_tcap)
- X path = _buildpath("$TERMCAP", 1,
- X#ifdef TERMCAPFILE
- X TERMCAPFILE, 0,
- X#endif
- X "$TERMINFO", 2,
- X "$MYTERMINFO", 2,
- X#ifdef TERMINFODIR
- X TERMINFODIR, 0,
- X#endif
- X NULL, -1);
- X else
- X path = _buildpath("$TERMINFO", 2,
- X "$MYTERMINFO", 2,
- X "$TERMCAP", 1,
- X#ifdef TERMINFODIR
- X TERMINFODIR, 0,
- X#endif
- X#ifdef TERMINFOSRC
- X TERMINFOSRC, 0,
- X#endif
- X#ifdef TERMCAPFILE
- X TERMCAPFILE, 0,
- X#endif
- X NULL, -1);
- X if (term == NULL) {
- X term = getenv("TERM");
- X if (term == NULL)
- X quit(-1, "no terminal type given");
- X }
- X
- X cleanup = do_cleanup;
- X
- X r = _findterm(term, path, buf);
- X switch(r) {
- X case 1:
- X convtcap();
- X break;
- X case 2:
- X convtinfo();
- X break;
- X case 3:
- X if (compile)
- X quit(-1, "entry is already compiled");
- X convtbin();
- X break;
- X default:
- X quit(-1, "can't find a terminal entry for '%s'", term);
- X }
- X
- X exit(0);
- X return 0;
- X}
- SHAR_EOF
- echo "File conv.c is complete"
- chmod 0644 conv.c || echo "restore of conv.c fails"
- case $TOUCH in
- can)
- touch -am 0402044690 conv.c
- ;;
- esac
- set `wc -c conv.c`;Wc_c=$1
- case "$Wc_c" in
- "25042") ;;
- *) echo original size 25042, current size $Wc_c ;;
- esac
- # ============= bsearch.c ==============
- echo "x - extracting bsearch.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > bsearch.c &&
- X/*
- X * bsearch.c
- X *
- X * This is something I found on watmath. I've made some minor changes for use
- X * in this package.
- X *
- X * 90/03/22 03:43:48
- X */
- X
- X#if 0
- X#ifndef lint
- Xstatic char *RCSid = "$OHeader: /usr/mfcf/src/accounts/libuw/RCS/bsearch.c,v 1.1 88/06/11 20:41:48 root Exp $";
- X#endif
- X#endif
- X
- X#include "defs.h"
- X
- X#ifdef USE_MYBSEARCH
- X#ifdef USE_SCCS_IDS
- Xstatic char SCCSid[] = "@(#) bsearch.c 1.1";
- X#endif
- X/*
- X * bsearch - find an element of a sorted vector
- X *
- X * found = bsearch(key, array, dimension, width, compare)
- X * returns a pointer to the specified element in the array,
- X * or (char*)0 if the element can't be found.
- X * key
- X * pointer to the element to be searched for in the array
- X * array
- X * address of an array of elements
- X * dimension
- X * number of elements in the array
- X * width
- X * sizeof(type) of each element
- X * compare
- X * pointer to a function taking (char *) pointers to two elements
- X * and returning <0, 0, or >0 as the first element comes before,
- X * at, or after the second element. A compare function is provided
- X * for comparing strings.
- X*/
- X#if 0
- X/*
- X * $OLog: bsearch.c,v $
- X * Revision 1.1 88/06/11 20:41:48 root
- X * Initial revision
- X *
- X*/
- X#endif
- X
- X#undef bsearch
- X
- X anyptr
- X_bsearch(key, array, dimension, width, compare)
- X anyptr key;
- X anyptr array;
- X int dimension;
- X size_t width;
- X#ifdef USE_PROTOTYPES
- X int (*compare)(anyptr, anyptr);
- X#else
- X int (*compare)();
- X#endif
- X{
- X register size_t start; /* offset to start of current interval */
- X register size_t end; /* offset to end+1 of current interval */
- X register size_t middle; /* offset to middle of current interval */
- X auto int status;
- X
- X width /= sizeof(char);
- X
- X start = 0;
- X middle = 0;
- X end = dimension;
- X
- X while (start < end) {
- X
- X middle = (start + end) / 2;
- X
- X status = (*compare)(key, ((char *)array + middle*width));
- X
- X if (status < 0)
- X end = middle;
- X
- X else if (status > 0)
- X start = middle + 1;
- X
- X else return (anyptr)(((char *)array) + middle*width);
- X }
- X
- X return 0;
- X}
- X
- X#endif /* USE_MYBSEARCH */
- SHAR_EOF
- chmod 0644 bsearch.c || echo "restore of bsearch.c fails"
- case $TOUCH in
- can)
- touch -am 0402044690 bsearch.c
- ;;
- esac
- set `wc -c bsearch.c`;Wc_c=$1
- case "$Wc_c" in
- "1993") ;;
- *) echo original size 1993, current size $Wc_c ;;
- esac
- # ============= strtok.c ==============
- echo "x - extracting strtok.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > strtok.c &&
- X/*
- X * strtok.c
- X *
- X * By Ross Ridge
- X * Public Domain
- X * 90/03/22 03:43:48
- X *
- X */
- X
- X#ifdef TEST
- X
- X#ifndef LIBTEST
- X#define USE_MYSTRTOK
- X#endif
- X#include <stdio.h>
- X
- X#else
- X
- X#include "defs.h"
- X
- X#endif
- X
- X#ifdef USE_MYSTRTOK
- X
- X#ifdef USE_SCCS_IDS
- Xstatic char SCCSid[] = "@(#) strtok.c 1.1";
- X#endif
- Xstatic char *pos = NULL;
- X
- Xchar *strtok(s1, s2)
- Xchar *s1, *s2; {
- X register char *s, *d;
- X char *start;
- X
- X if (s1 == NULL) {
- X s = pos;
- X if (s == NULL)
- X return NULL;
- X } else {
- X s = s1;
- X while(*s != '\0') {
- X d = s2;
- X while(*d != *s) {
- X if (*d == '\0')
- X goto first; /* Oh, no! A goto! */
- X d++;
- X }
- X s++;
- X }
- X pos = NULL;
- X return NULL;
- X }
- X
- Xfirst:
- X start = s;
- X while(*s != '\0') {
- X d = s2;
- X while(*d != '\0') {
- X if (*s == *d) {
- X *s++ = '\0';
- X while(*s != '\0') {
- X d = s2;
- X while(*s != *d) {
- X if (*d == '\0') {
- X pos = s;
- X return start;
- X }
- X d++;
- X }
- X s++;
- X }
- X pos = NULL;
- X return start;
- X }
- X d++;
- X }
- X s++;
- X }
- X pos = NULL;
- X return start;
- X}
- X
- X#endif
- X
- X#ifdef TEST
- Xint main(argc, argv)
- Xint argc;
- Xchar **argv; {
- X extern char *gets();
- X char *s;
- X char s1[100];
- X char *s2;
- X
- X if (argc > 1)
- X s2 = argv[1];
- X else
- X s2 = " ";
- X
- X while (gets(s1) != NULL) {
- X s = strtok(s1, s2);
- X while(s != NULL) {
- X printf("'%s'\n", s);
- X s = strtok(NULL, s2);
- X }
- X }
- X
- X return 0;
- X}
- X#endif
- SHAR_EOF
- chmod 0644 strtok.c || echo "restore of strtok.c fails"
- case $TOUCH in
- can)
- touch -am 0402044690 strtok.c
- ;;
- esac
- set `wc -c strtok.c`;Wc_c=$1
- case "$Wc_c" in
- "1327") ;;
- *) echo original size 1327, current size $Wc_c ;;
- esac
- # ============= fake_stdio.c ==============
- echo "x - extracting fake_stdio.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > fake_stdio.c &&
- X/*
- X * fake_stdio.c
- X *
- X * By Ross Ridge
- X * Public Domain
- X * 90/03/22 03:43:48
- X *
- X * fake some stdio functions
- X *
- X */
- X
- X#include "defs.h"
- X
- X#include <fcntl.h>
- X
- X#ifdef USE_FAKE_STDIO
- X
- X#ifdef USE_SCCS_IDS
- Xstatic char SCCSid[] = "@(#) fake_stdio.c 1.1";
- X#endif
- X#include "fake_stdio.h"
- X
- XFILE _fake_files[] = {
- X {NULL, NULL, -1, {'\0'}},
- X {NULL, NULL, -1, {'\0'}},
- X {NULL, NULL, -1, {'\0'}},
- X {NULL, NULL, -1, {'\0'}},
- X {NULL, NULL, -1, {'\0'}}
- X};
- X
- Xint _fillbuf(f)
- Xregister FILE *f; {
- X register int r;
- X
- X r = read(f->fd, f->buf, FAKE_BUF_SIZE);
- X if (r == -1 || r == 0) {
- X f->pos = f->end = f->buf;
- X return EOF;
- X }
- X f->pos = f->buf + 1;
- X f->end = f->buf + r;
- X
- X return f->buf[0];
- X}
- X
- Xint fgetc(f)
- Xregister FILE *f; {
- X return getc(f);
- X}
- X
- Xchar *fgets(s, n, f)
- Xchar *s;
- Xint n;
- Xregister FILE *f; {
- X register char *d;
- X register int l;
- X register int c;
- X
- X d = s;
- X l = 1;
- X while(l < n) {
- X if ((c = getc(f)) == EOF) {
- X if (l == 0)
- X return NULL;
- X break;
- X }
- X *d++ = c;
- X if (c == '\n')
- X break;
- X l++;
- X }
- X *d = '\0';
- X return s;
- X}
- X
- Xstatic FILE *_fdopen(fd)
- Xint fd; {
- X register FILE *f;
- X int i, r;
- X
- X for(f = _fake_files, i = 0; i < FILES; i++, f++) {
- X if (f->fd == -1) {
- X f->fd = fd;
- X r = read(fd, f->buf, FAKE_BUF_SIZE);
- X if (r == -1) {
- X f->pos = f->end = f->buf;
- X return NULL;
- X }
- X f->pos = f->buf;
- X f->end = f->buf + r;
- X return f;
- X }
- X }
- X return NULL;
- X}
- X
- XFILE *fopen(name, type)
- Xchar *name;
- Xchar *type; {
- X FILE *f;
- X int fd;
- X
- X if (strcmp(type, "r") != 0)
- X return NULL;
- X fd = open(name, O_RDONLY);
- X if (fd == -1)
- X return NULL;
- X f = _fdopen(fd);
- X if (f == NULL)
- X close(fd);
- X return f;
- X}
- X
- XFILE *fdopen(fd, type)
- Xint fd;
- Xchar *type; {
- X if (strcmp(type, "r") != 0)
- X return NULL;
- X return _fdopen(fd);
- X}
- X
- X#endif /* USE_FAKE_STDIO */
- SHAR_EOF
- chmod 0644 fake_stdio.c || echo "restore of fake_stdio.c fails"
- case $TOUCH in
- can)
- touch -am 0402044690 fake_stdio.c
- ;;
- esac
- set `wc -c fake_stdio.c`;Wc_c=$1
- case "$Wc_c" in
- "1740") ;;
- *) echo original size 1740, current size $Wc_c ;;
- esac
- # ============= sprintf.c ==============
- echo "x - extracting sprintf.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > sprintf.c &&
- X/*
- X * sprintf.c
- X *
- X * By Ross Ridge
- X * Public Domain
- X * 90/03/27 18:29:37
- X *
- X */
- X
- X#include "defs.h"
- X
- X#include <ctype.h>
- X
- X#ifdef USE_SCCS_IDS
- Xstatic char SCCSid[] = "@(#) sprintf.c 1.2";
- X#endif
- X#ifdef TEST
- X#define USE_FAKE_STDIO
- X#undef PRINTF
- X#define sprintf _sprintf
- X#endif
- X
- X#ifdef USE_FAKE_STDIO
- X
- X#ifdef PRINTF
- X#undef putchar
- X#define PUTCHAR(c) (cnt++, putchar(c))
- X#else
- X#define PUTCHAR(c) (*s++ = c)
- X#endif
- X
- X#ifdef PRINTF
- X#ifdef USE_STDARG
- X#ifdef USE_PROTOTYPES
- Xint printf(register char *fmt, ...) {
- X#else
- Xint printf(fmt)
- Xregister char *fmt; {
- X#endif
- X#else
- Xint printf(va_alist)
- Xva_dcl {
- X register char *fmt;
- X#endif
- X register int cnt;
- X#else /* PRINTF */
- X#ifdef lint
- X/* VARARGS1 */
- Xint sprintf(str, fmt)
- Xchar *str;
- Xchar *fmt; {
- X#else /* lint */
- X#ifdef USE_STDARG
- X#ifdef USE_PROTOTYPES
- Xint sprintf(char *str, register char *fmt, ...) {
- X#else /* USE_PROTOTYPES */
- Xint sprintf(str, fmt)
- Xchar *str;
- Xregister char *fmt; {
- X#endif /* else USE_PROTOTYPES */
- X#else /* USE_STDARG */
- Xint sprintf(va_alist)
- Xva_dcl {
- X register char *fmt;
- X char *str;
- X#endif /* else USE_STDARG */
- X#endif /* else lint */
- X register char *s;
- X#endif /* else PRINTF */
- X int minus;
- X int sharp;
- X int space;
- X int plus;
- X int zero;
- X int ell;
- X int prec;
- X int width;
- X int sign;
- X int pad;
- X char buf[100];
- X register long n;
- X register unsigned long u;
- X register char *d;
- X int l;
- X int k;
- X va_list args;
- X
- X#ifdef lint
- X args = (va_list) 0;
- X#else
- X#ifdef USE_STDARG
- X va_start(args, fmt);
- X#else
- X va_start(args);
- X#ifndef PRINTF
- X str = va_arg(args, char *);
- X#endif
- X fmt = va_arg(args, char *);
- X#endif
- X#endif /* else lint */
- X
- X
- X#ifdef PRINTF
- X cnt = 0;
- X#else
- X s = str;
- X#endif
- X
- X while(*fmt != '\0') {
- X if (*fmt == '%') {
- X fmt++;
- X if (*fmt == '%' || *fmt == '\0') {
- X PUTCHAR('%');
- X fmt++;
- X continue;
- X }
- X minus = plus = sharp = space = zero = ell = 0;
- X width = 0;
- X prec = -1;
- X do {
- X switch(*fmt) {
- X case '-': minus = 1; continue;
- X case '+': plus = 1; continue;
- X case ' ': space = 1; continue;
- X case '#': sharp = 1; continue;
- X }
- X break;
- X } while (*++fmt != '\0');
- X if (*fmt == '0') {
- X zero = 1;
- X fmt++;
- X }
- X if (*fmt == '*') {
- X width = va_arg(args, int);
- X fmt++;
- X } else if (isdigit(*fmt)) {
- X width = *fmt++ - '0';
- X while(isdigit(*fmt))
- X width = 10 * width + *fmt++ - '0';
- X }
- X if (*fmt == '.') {
- X prec = 0;
- X fmt++;
- X if (*fmt == '*') {
- X prec = va_arg(args, int);
- X fmt++;
- X } else {
- X while(isdigit(*fmt))
- X prec = 10 * prec + *fmt++ - '0';
- X }
- X }
- X if (*fmt == 'l') {
- X ell = 1;
- X fmt++;
- X }
- X sign = 0;
- X l = 0;
- X d = buf;
- X switch(*fmt) {
- X case 'd':
- X case 'i':
- X if (ell)
- X n = va_arg(args, long);
- X else
- X n = va_arg(args, int);
- X if (n < 0) {
- X sign = -1;
- X n = -n;
- X } else {
- X sign = 1;
- X }
- X while(n != 0) {
- X *d++ = (n % 10) + '0';
- X n /= 10;
- X }
- X break;
- X case 'o':
- X if (ell)
- X u = va_arg(args, unsigned long);
- X else
- X u = va_arg(args, unsigned );
- X while(u != 0) {
- X *d++ = (u & 7) + '0';
- X u >>= 3;
- X }
- X if (sharp)
- X l = 1;
- X break;
- X case 'u':
- X if (ell)
- X u = va_arg(args, unsigned long);
- X else
- X u = va_arg(args, unsigned );
- X while(u != 0) {
- X *d++ = (u % 10) + '0';
- X u /= 10;
- X }
- X break;
- X case 'x':
- X if (ell)
- X u = va_arg(args, unsigned long);
- X else
- X u = va_arg(args, unsigned );
- X while(u != 0) {
- X *d++ = "0123456789abcdef"[u & 15];
- X u >>= 4;
- X }
- X if (sharp)
- X l += 2;
- X break;
- X case 'X':
- X if (ell)
- X u = va_arg(args, unsigned long);
- X else
- X u = va_arg(args, unsigned );
- X while(u != 0) {
- X /* just to be silly... */
- X *d++ = (u & 15)["0123456789ABCDEF"];
- X u >>= 4;
- X }
- X if (sharp)
- X l += 2;
- X break;
- X case 's':
- X d = va_arg(args, char *);
- X l = strlen(d);
- X break;
- X case 'c':
- X buf[0] = va_arg(args, int);
- X l = 1;
- X break;
- X default:
- X PUTCHAR(*fmt++);
- X continue;
- X }
- X if (*fmt == 's' || *fmt == 'c') {
- X if (prec != -1 && l > prec)
- X l = prec;
- X pad = width - l;
- X if (zero)
- X while(pad-- > 0)
- X PUTCHAR('0');
- X else if (!minus)
- X while(pad-- > 0)
- X PUTCHAR(' ');
- X while(l-- > 0)
- X PUTCHAR(*d++);
- X if (minus)
- X while(pad-- > 0)
- X PUTCHAR(' ');
- X } else {
- X if (prec == -1)
- X prec = 1;
- X k = d - buf;
- X if (k < prec)
- X l += prec;
- X else
- X l += k;
- X if (sign == -1)
- X l++;
- X else if (sign == 1 && (space || plus))
- X l++;
- X pad = width - l;
- X if (zero)
- X while(pad-- > 0)
- X PUTCHAR('0');
- X else if (!minus)
- X while(pad-- > 0)
- X PUTCHAR(' ');
- X if (*fmt == 'x' && sharp) {
- X PUTCHAR('0');
- X PUTCHAR('x');
- X } else if (*fmt == 'X' && sharp) {
- X PUTCHAR('0');
- X PUTCHAR('X');
- X } else if (*fmt == 'o' && sharp) {
- X PUTCHAR('0');
- X } else if (sign == -1) {
- X PUTCHAR('-');
- X } else if (sign == 1 && space) {
- X PUTCHAR(' ');
- X } else if (sign == 1 && plus) {
- X PUTCHAR('+');
- X }
- X while(k++ < prec)
- X PUTCHAR('0');
- X while(d > buf)
- X PUTCHAR(*--d);
- X if (!zero && minus)
- X while(pad-- > 0)
- X PUTCHAR(' ');
- X }
- X fmt++;
- X } else {
- X PUTCHAR(*fmt++);
- X }
- X }
- X#ifdef PRINTF
- X return cnt;
- X#else
- X *s = '\0';
- X return s - str;
- X#endif
- X}
- X
- X#endif /* USE_FAKE_STDIO */
- X
- X#ifdef TEST
- X#ifndef PRINTF
- X#undef sprintf
- Xmain(argc, argv)
- Xint argc;
- Xchar *argv; {
- X char buf[256];
- X
- X _sprintf(buf, "%d", 2);
- X printf("'%s'\n", buf);
- X sprintf(buf, "%d", 2);
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%05d", 2);
- X printf("'%s'\n", buf);
- X sprintf(buf, "%05d", 2);
- X printf("'%s'\n", buf);
- X _sprintf(buf, "% 5d", 2);
- X printf("'%s'\n", buf);
- X sprintf(buf, "% 5d", 2);
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%-5d", 2);
- X printf("'%s'\n", buf);
- X sprintf(buf, "%-5d", 2);
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%5.3d", 2);
- X printf("'%s'\n", buf);
- X sprintf(buf, "%5.3d", 2);
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%+d", 2);
- X printf("'%s'\n", buf);
- X sprintf(buf, "%+d", 2);
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%#-1.2d", 2);
- X printf("'%s'\n", buf);
- X sprintf(buf, "%#-1.2d", 2);
- X printf("'%s'\n", buf);
- X _sprintf(buf, "% 5d", -2);
- X printf("'%s'\n", buf);
- X sprintf(buf, "% 5d", -2);
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%-5d", -2);
- X printf("'%s'\n", buf);
- X sprintf(buf, "%-5d", -2);
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%5.3d", -2);
- X printf("'%s'\n", buf);
- X sprintf(buf, "%5.3d", -2);
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%%:%o:%x:%X:%ld:%u:%i", 10, 22, 333, -456L, 50000, 6);
- X printf("'%s'\n", buf);
- X sprintf(buf, "%%:%o:%x:%X:%ld:%u:%i", 10, 22, 333, -456L, 50000, 6);
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%06o:%#6x:%#012.4X:%-5ld:%*u:%*.*i",
- X 10, 22, 333, -456L, 8, 50000, 4, 2, 6);
- X printf("'%s'\n", buf);
- X sprintf(buf, "%06o:%#6x:%#012.4X:%-5ld:%*u:%*.*i",
- X 10, 22, 333, -456L, 8, 50000, 4, 2, 6);
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%s", "abcdefghi");
- X printf("'%s'\n", buf);
- X sprintf(buf, "%s", "abcdefghi");
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%.4s", "abcdefghi");
- X printf("'%s'\n", buf);
- X sprintf(buf, "%.4s", "abcdefghi");
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%4.4s", "abcdefghi");
- X printf("'%s'\n", buf);
- X sprintf(buf, "%4.4s", "abcdefghi");
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%20s", "abcdefghi");
- X printf("'%s'\n", buf);
- X sprintf(buf, "%20s", "abcdefghi");
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%-20s", "abcdefghi");
- X printf("'%s'\n", buf);
- X sprintf(buf, "%-20s", "abcdefghi");
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%-20.20s", "abcdefghi");
- X printf("'%s'\n", buf);
- X sprintf(buf, "%-20.20s", "abcdefghi");
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%#-0.20s", "abcdefghi");
- X printf("'%s'\n", buf);
- X sprintf(buf, "%#-0.20s", "abcdefghi");
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%5s", "abcdefghi");
- X printf("'%s'\n", buf);
- X sprintf(buf, "%5s", "abcdefghi");
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%015s", "abcdefghi");
- X printf("'%s'\n", buf);
- X sprintf(buf, "%015s", "abcdefghi");
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%c", 'C');
- X printf("'%s'\n", buf);
- X sprintf(buf, "%c", 'C');
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%5c", 'C');
- X printf("'%s'\n", buf);
- X sprintf(buf, "%5c", 'C');
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%-5c", 'C');
- X printf("'%s'\n", buf);
- X sprintf(buf, "%-5c", 'C');
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%d", 0);
- X printf("'%s'\n", buf);
- X sprintf(buf, "%d", 0);
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%.d", 0);
- X printf("'%s'\n", buf);
- X sprintf(buf, "%.d", 0);
- X printf("'%s'\n", buf);
- X _sprintf(buf, "%5.0d", 0);
- X printf("'%s'\n", buf);
- X sprintf(buf, "%5.0d", 0);
- X printf("'%s'\n", buf);
- X}
- X#endif /* !PRINTF */
- X#endif /* TEST */
- SHAR_EOF
- chmod 0644 sprintf.c || echo "restore of sprintf.c fails"
- case $TOUCH in
- can)
- touch -am 0402044690 sprintf.c
- ;;
- esac
- set `wc -c sprintf.c`;Wc_c=$1
- case "$Wc_c" in
- "8573") ;;
- *) echo original size 8573, current size $Wc_c ;;
- esac
- # ============= clear.c ==============
- echo "x - extracting clear.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > clear.c &&
- X/*
- X * clear.c
- X *
- X * By Ross Ridge
- X * Public Domain
- X * 90/03/25 05:09:22
- X *
- X * clear
- X *
- X * clears the terminal's screen
- X *
- X */
- X
- Xstatic char SCCSid[] = "@(#) clear.c 1.1";
- X
- X#ifndef USE_TERMINFO
- X
- X#include "defs.h"
- X
- X#ifdef USE_SGTTY
- X#include <sgtty.h>
- X#endif
- X#ifdef USE_TERMIO
- X#include <termio.h>
- X#endif
- X
- Xchar PC;
- Xshort ospeed;
- X
- Xint putch(c)
- Xint c; {
- X return putchar(c);
- X}
- X
- Xmain(argc, argv)
- Xint argc;
- Xchar **argv; {
- X char *getenv();
- X char *tgetstr();
- X char *term;
- X char buf[MAX_BUF];
- X char CL[MAX_LINE];
- X char *s, *pc;
- X
- X#ifdef USE_SGTTY
- X struct sgttyb tty;
- X
- X gtty(1, &tty);
- X ospeed = tty.sg_ospeed;
- X#else
- X#ifdef USE_TERMIO
- X struct termio tty;
- X
- X ioctl(1, TCGETA, &tty);
- X ospeed = tty.c_cflag & CBAUD;
- X#else
- X ospeed = 0;
- X#endif
- X#endif
- X
- X term = getenv("TERM");
- X if (term == NULL)
- X exit(1);
- X
- X if (tgetent(buf, term) != 1)
- X exit(1);
- X
- X s = CL;
- X pc = tgetstr("pc", &s);
- X if (pc != NULL)
- X PC = *pc;
- X
- X s = CL;
- X tgetstr("cl", &s);
- X
- X if (CL != NULL) {
- X tputs(CL, tgetnum("li"), putch);
- X exit(1);
- X }
- X
- X exit(0);
- X}
- X
- X#else /* USE_TERMINFO */
- X
- X#include "defs.h"
- X#include "term.h"
- X
- Xint putch(c)
- Xint c; {
- X return putchar(c);
- X}
- X
- Xmain() {
- X setupterm((char *) 0, 1, (int *) 0);
- X if (clear_screen == (char *) 0)
- X exit(1);
- X tputs(clear_screen, lines > 0 ? lines : 1, putch);
- X exit(0);
- X}
- X
- X#endif /* USE_TERMINFO */
- SHAR_EOF
- chmod 0644 clear.c || echo "restore of clear.c fails"
- case $TOUCH in
- can)
- touch -am 0402044690 clear.c
- ;;
- esac
- set `wc -c clear.c`;Wc_c=$1
- case "$Wc_c" in
- "1295") ;;
- *) echo original size 1295, current size $Wc_c ;;
- esac
- # ============= term.tail ==============
- echo "x - extracting term.tail (Text)"
- sed 's/^X//' << 'SHAR_EOF' > term.tail &&
- X/*
- X * 90/03/27 18:29:43
- X * @(#) term.tail 1.2
- X *
- X */
- X
- X#ifdef USE_TERMIO
- X#ifndef ICANON
- X#include <sys/termio.h>
- X#endif
- X#endif
- X
- X#ifdef USE_SGTTY
- X#ifndef CBREAK
- X#include <sgtty.h>
- X#endif
- X#endif
- X
- Xtypedef struct _terminal {
- X int fd;
- X#ifdef USE_SMALLMEM
- X unsigned short baudrate;
- X unsigned pad:1, xon:1, termcap:1;
- X#else
- X int pad;
- X int xon;
- X int termcap;
- X long baudrate;
- X#endif
- X char padch;
- X short true_lines, true_columns;
- X struct strbuf {
- X struct strbuf *next;
- X#ifdef USE_SMALLMEM
- X short len;
- X#else
- X int len;
- X#endif
- X char buf[MAX_CHUNK];
- X } *strbuf;
- X char *name, *name_long, *name_all;
- X#ifdef USE_SGTTY
- X struct sgtty_str {
- X struct sgttyb v6;
- X#ifdef TIOCGETC
- X struct tchars v7;
- X#endif
- X#ifdef TIOCLGET
- X int bsd;
- X#endif
- X#ifdef TIOCGLTC
- X struct ltchars bsd_new;
- X#endif
- X#ifdef USE_WINSZ
- X#ifdef TIOCGWINSZ
- X struct winsize bsd_winsz;
- X#endif
- X#endif
- X } prog_mode, shell_mode;
- X#else
- X#ifdef USE_TERMIO
- X struct termio prog_mode, shell_mode;
- X#endif
- X#endif
- X char bools[NUM_OF_BOOLS];
- X short nums[NUM_OF_NUMS];
- X char *strs[NUM_OF_STRS];
- X} TERMINAL;
- X
- X#ifndef _CUR_TERM
- X#ifdef SINGLE
- X
- X#define _CUR_TERM _term_buf
- X
- X#else
- X
- X#define _CUR_TERM (*cur_term)
- X
- X#endif
- X#endif
- X
- Xextern TERMINAL *cur_term;
- Xextern TERMINAL _term_buf;
- X
- X#ifdef USE_PROTOTYPES
- Xextern char *tparm(char *, ...);
- Xextern int setupterm(char *, int, int *), set_curterm(TERMINAL *);
- Xextern int del_curterm(TERMINAL *), tputs(char *, int, int (*)());
- Xextern int putp(char *);
- Xextern int tigetflag(char *), tigetnum(char *);
- Xextern char *tigetstr(char *);
- Xextern int def_prog_mode(void), def_shell_mode(void);
- Xextern int reset_prog_mode(void), reset_shell_mode(void);
- X#else
- Xextern char *tparm();
- Xextern int setupterm(), set_curterm();
- Xextern int del_curterm(), tputs();
- Xextern int putp();
- Xextern int tigetflag(), tigetnum();
- Xextern char *tigetstr();
- Xextern int def_prog_mode(), def_shell_mode();
- Xextern int reset_prog_mode(), reset_shell_mode();
- X#endif
- X
- Xextern char *boolnames[], *boolcodes[], *boolfnames[];
- Xextern char *numnames[], *numcodes[], *numfnames[];
- Xextern char *strnames[], *strcodes[], *strfnames[];
- X
- X#ifndef OK
- X#undef ERR
- X#define OK (0)
- X#define ERR (-1)
- X#endif
- X
- X#endif /* _TERM_H_ */
- SHAR_EOF
- chmod 0644 term.tail || echo "restore of term.tail fails"
- case $TOUCH in
- can)
- touch -am 0402044690 term.tail
- ;;
- esac
- set `wc -c term.tail`;Wc_c=$1
- case "$Wc_c" in
- "2146") ;;
- *) echo original size 2146, current size $Wc_c ;;
- esac
- # ============= defs.h ==============
- echo "x - extracting defs.h (Text)"
- sed 's/^X//' << 'SHAR_EOF' > defs.h &&
- X/*
- X * defs.h
- X *
- X * By Ross Ridge
- X * Public Domain
- X * 90/03/27 18:29:27
- X *
- X * @(#) defs.h 1.2
- X */
- X
- X#ifndef _DEFS_H_
- X#define _DEFS_H_
- X
- X#ifdef TEST
- X#undef NOTLIB
- X#define NOTLIB
- X#endif
- X
- X#include "config.h"
- X
- X#ifdef NOTLIB
- X#undef USE_FAKE_STDIO
- X#endif
- X
- X#ifdef USE_STDLIB
- X#include <stdlib.h>
- X#endif
- X
- X#ifdef USE_STDDEF
- X#include <stddef.h>
- X#else
- X#include <sys/types.h>
- X#endif
- X
- X#ifdef USE_STDARG
- X#include <stdarg.h>
- X#else
- X#include <varargs.h>
- X#endif
- X
- X#ifdef USE_FAKE_STDIO
- X#include "fake_stdio.h"
- X#define sprintf _fake_sprintf
- X#ifdef USE_PROTOYPES
- Xint sprintf(char *, char *, ...);
- X#else
- Xint sprintf();
- X#endif
- X#else /* USE_FAKE_STDIO */
- X#if 0
- X#include <stdio.h>
- X#else
- X#undef NULL
- X#include <stdio.h>
- Xint _flsbuf(), _filbuf(), fclose(), ungetc(), ioctl(), puts();
- X#endif
- X#endif /* !USE_FAKE_STDIO */
- X
- X#ifdef USE_STRINGS
- X#include <strings.h>
- X#define strchr(s, c) index(s, c)
- X#define strrchr(s, c) rindex(s, c)
- X#ifndef USE_MYSTRTOK
- X#ifdef USE_PROTYPES
- Xchar *strtok(char *, char *);
- X#else
- Xchar *strtok();
- X#endif
- X#endif
- X#else
- X#include <string.h>
- X#endif
- X
- X#ifdef USE_MEMORY
- X#include <memory.h>
- X#else
- X#define memcpy(b, a, n) bcopy(a, b, n)
- X#endif
- X
- X#ifdef USE_MYBSEARCH
- X#define bsearch _bsearch
- X#ifdef USE_PROTOTYPES
- Xanyptr bsearch(anyptr, anyptr, int, size_t, int (*)(anyptr, anyptr));
- X#else
- Xanyptr bsearch();
- X#endif
- X#else
- X/* anyptr bsearch(); */
- X#endif
- X
- X#ifdef USE_MYSTRTOK
- X#define strtok _strtok
- X#ifdef USE_PROTOTYPES
- Xchar *strtok(char *, char *);
- X#else
- Xchar *strtok();
- X#endif
- X#endif
- X
- X#ifdef USE_MYQSORT
- X#define qsort _qsort
- X#ifdef USE_PROTOTYPES
- Xvoid qsort(anyptr, unsigned, size_t, int (*)(anyptr, anyptr));
- X#else
- Xvoid qsort();
- X#endif
- X#endif
- X
- X#include <errno.h>
- X
- X#define MAX_BUF 4096
- X#define MAX_LINE 640
- X#define MAX_NAME 128
- X
- X#define MAX_CHUNK MAX_LINE
- X
- X#define MAX_DEPTH 32
- X
- X#define MAX_VARNAME 32
- X#define MAX_TINFONAME 5
- X#define MAX_TCAPNAME 2
- X
- Xstruct caplist {
- X char type;
- X char flag;
- X char var[MAX_VARNAME + 1];
- X char tinfo[MAX_TINFONAME + 1];
- X char tcap[MAX_TCAPNAME + 1];
- X};
- X
- Xstruct term_path {
- X char *file;
- X int type; /* 0 = file, 1 = TERMCAP env, 2 = TERMINFO env */
- X};
- X
- Xstruct _terminal;
- X
- X#ifdef USE_PROTOTYPES
- Xint _gettcap(char *, struct _terminal *, struct term_path *);
- Xint _gettinfo(char *, struct _terminal *, struct term_path *);
- Xint _fillterm(char *, struct term_path *, char *);
- Xint _findterm(char *, struct term_path *, char *);
- Xint _init_tty(void), _lit_output(void), _check_tty(void);
- Xvoid _figure_termcap(void);
- Xint _tmatch(char *, char *);
- Xvoid _norm_output(void);
- Xint readcaps(FILE *, struct caplist *, int);
- Xnoreturn void quit(int, char *, ...);
- X#ifdef lint
- Xextern void (*cleanup)();
- X#else
- Xextern void (*cleanup)(int);
- X#endif
- Xint _compar(anyptr, anyptr);
- Xstruct term_path *_buildpath(char *, int, ...);
- Xvoid _delpath(struct term_path *);
- Xchar *_addstr(char *);
- Xstruct strbuf *_endstr(void);
- Xvoid _del_strs(struct _terminal *);
- Xvoid _tcapconv(void);
- Xvoid _tcapdefault(void);
- Xint _getother(char *, struct term_path *, struct _terminal *);
- Xint _gettbin(char *, struct _terminal *);
- X#else
- Xint _gettcap(), _gettinfo(), _fillterm(), _findterm(), _init_tty();
- Xint _lit_output(), _check_tty();
- Xvoid _figure_termcap();
- Xint _tmatch();
- Xvoid _norm_output();
- Xint readcaps();
- Xnoreturn void /* GOTO */ quit(/*FORMAT2*/);
- Xextern void (*cleanup)();
- Xint _compar();
- Xstruct term_path *_buildpath();
- Xvoid _delpath();
- Xchar *_addstr();
- Xstruct strbuf *_endstr();
- Xvoid _del_strs();
- Xvoid _tcapconv();
- Xvoid _tcapdefault();
- Xint _getother();
- Xint _gettbin();
- X#endif
- X
- X#define OVERIDE
- X
- Xextern char _strflags[];
- X
- X/* for quit.c */
- Xextern int sys_nerr;
- Xextern char *sys_errlist[];
- Xextern char *prg_name;
- X
- X#endif /* _DEFS_H_ */
- SHAR_EOF
- chmod 0644 defs.h || echo "restore of defs.h fails"
- case $TOUCH in
- can)
- touch -am 0402044690 defs.h
- ;;
- esac
- set `wc -c defs.h`;Wc_c=$1
- case "$Wc_c" in
- "3602") ;;
- *) echo original size 3602, current size $Wc_c ;;
- esac
- # ============= config.h ==============
- echo "x - extracting config.h (Text)"
- sed 's/^X//' << 'SHAR_EOF' > config.h &&
- X/*
- X * config.h
- X *
- X * By Ross Ridge
- X * Public Domain
- X * 90/03/31 10:07:00
- X *
- X * @(#) config.h 1.3.1.1
- X */
- X
- X/* See the file INSTALL for instructions on editing this file */
- X
- X#ifndef _CONFIG_H_
- X#define _CONFIG_H_
- X
- X#ifdef __STDC__
- X#define USE_ANSIC /* undefine this if your compiler lies */
- X#endif
- X
- X#undef USE_TERMIO /* use termio (SysIII, SysV) */
- X#undef USE_SGTTY /* use sgtty (v7, BSD) */
- X#undef USE_WINSZ /* get window size from the tty driver */
- X#undef USE_STRINGS /* include <strings.h> instead of <string.h> */
- X#undef USE_MYBSEARCH /* your library doesn't have bsearch */
- X#undef USE_MYSTRTOK /* your library doesn't have strtok */
- X#undef USE_MYQSORT /* your library doesn't have qsort */
- X#undef USE_MEMORY /* you have an <memory.h> header */
- X#undef USE_SMALLMEM /* save some memory */
- X#undef USE_FAKE_STDIO /* don't use real stdio */
- X#undef USE_DOPRNT /* no vfprintf, use _doprnt */
- X
- X#undef USE_UPBC_KLUDGE /* do tgoto like real togo */
- X#undef USE_EXTERN_UPBC /* get cuu1 and cub1 from externs UP and BC */
- X/* #undef USE_LITOUT_KLUDGE /* an alternate tgoto kludge */
- X
- X#ifndef USE_ANSIC
- X#undef USE_PROTOTYPES /* use ANSI C prototypes */
- X#undef USE_STDLIB /* you have an <stdlib.h> */
- X#undef USE_STDARG /* you have an <stdarg.h> */
- X#undef USE_STDDEF /* you have an <stddef.h> */
- X
- X#define const
- X#define volatile
- X#define noreturn /* a function that doesn't return */
- X
- Xtypedef char *anyptr; /* a type that any pointer can be assigned to */
- X
- X#else
- X
- X#define USE_PROTOTYPES
- X#define USE_STDLIB
- X#define USE_STDARG
- X#define USE_STDDEF
- Xtypedef void *anyptr;
- X#ifdef __GNUC__
- X#define noreturn volatile
- X#else
- X#define noreturn
- X#endif
- X#endif
- X
- X#define TERMCAPFILE "$TERMCAPFILE $HOME/.termcap /etc/termcap"
- X
- X#define TERMINFOSRC "/usr/lib/terminfo/terminfo.src"
- X
- X#define TERMINFODIR "/usr/lib/terminfo"
- X
- X#endif
- SHAR_EOF
- chmod 0644 config.h || echo "restore of config.h fails"
- case $TOUCH in
- can)
- touch -am 0402044690 config.h
- ;;
- esac
- set `wc -c config.h`;Wc_c=$1
- case "$Wc_c" in
- "1816") ;;
- *) echo original size 1816, current size $Wc_c ;;
- esac
- # ============= cap_list ==============
- echo "x - extracting cap_list (Text)"
- sed 's/^X//' << 'SHAR_EOF' > cap_list &&
- X cap_list
- X
- X By Ross Ridge
- X Public Domain
- X 90/03/22 03:43:55
- X
- X @(#) cap_list 1.1
- X
- Xtypes: ! = boolean, # = number, $ = string, $G = string with parameters,
- X $K = string that never is outputed.
- X
- Xtype variable capname termcap
- X
- XStandard terminfo capabilities:
- X
- X! auto_left_margin bw bw
- X! auto_right_margin am am
- X! ceol_standout_glitch xhp xs
- X! dest_tabs_magic_smso xt xt
- X! eat_newline_glitch xenl xn
- X! erase_overstrike eo eo
- X! generic_type gn gn
- X! hard_copy hc hc
- X! hard_cursor chts HC
- X! has_meta_key km km
- X! has_status_line hs hs
- X! insert_null_glitch in in
- X! memory_above da da
- X! memory_below db db
- X! move_insert_mode mir mi
- X! move_standout_mode msgr ms
- X! needs_xon_xoff nxon nx
- X! no_esc_ctlc xsb xb
- X! no_pad_char npc NP
- X! non_rev_rmcup nrrmc NR
- X! over_strike os os
- X! prtr_silent mc5i 5i
- X! status_line_esc_ok eslok es
- X! tilde_glitch hz hz
- X! transparent_underline ul ul
- X! xon_xoff xon xo
- X# columns cols co
- X# init_tabs it it
- X# label_height lh lh
- X# label_width lw lw
- X# lines lines li
- X# lines_of_memory lm lm
- X# magic_cookie_glitch xmc sg
- X# num_labels nlab Nl
- X# padding_baud_rate pb pb
- X# virtual_terminal vt vt
- X# width_status_line wsl ws
- X$K acs_chars acsc ac
- X$ back_tab cbt bt
- X$ bell bel bl
- X$ carriage_return cr cr
- X$G change_scroll_region csr cs
- X$ char_padding rmp rP
- X$ clear_all_tabs tbc ct
- X$ clear_margins mgc MC
- X$ clear_screen clear cl
- X$ clr_bol el1 cb
- X$ clr_eol el ce
- X$ clr_eos ed cd
- X$G column_address hpa ch
- X$K command_character cmdch CC
- X$G cursor_address cup cm
- X$ cursor_down cud1 do
- X$ cursor_home home ho
- X$ cursor_invisible civis vi
- X$ cursor_left cub1 le
- X$G cursor_mem_address mrcup CM
- X$ cursor_normal cnorm ve
- X$ cursor_right cuf1 nd
- X$ cursor_to_ll ll ll
- X$ cursor_up cuu1 up
- X$ cursor_visible cvvis vs
- X$ delete_character dch1 dc
- X$ delete_line dl1 dl
- X$ dis_status_line dsl ds
- X$ down_half_line hd hd
- X$ ena_acs enacs eA
- X$ enter_alt_charset_mode smacs as
- X$ enter_am_mode smam SA
- X$ enter_blink_mode blink mb
- X$ enter_bold_mode bold md
- X$ enter_ca_mode smcup ti
- X$ enter_delete_mode smdc dm
- X$ enter_dim_mode dim mh
- X$ enter_insert_mode smir im
- X$ enter_protected_mode prot mp
- X$ enter_reverse_mode rev mr
- X$ enter_secure_mode invis mk
- X$ enter_standout_mode smso so
- X$ enter_underline_mode smul us
- X$ enter_xon_mode smxon SX
- X$G erase_chars ech ec
- X$ exit_alt_charset_mode rmacs ae
- X$ exit_am_mode rmam RA
- X$ exit_attribute_mode sgr0 me
- X$ exit_ca_mode rmcup te
- X$ exit_delete_mode rmdc ed
- X$ exit_insert_mode rmir ei
- X$ exit_standout_mode rmso se
- X$ exit_underline_mode rmul ue
- X$ exit_xon_mode rmxon RX
- X$ flash_screen flash vb
- X$ form_feed ff ff
- X$ from_status_line fsl fs
- X$ init_1string is1 i1
- X$ init_2string is2 is
- X$ init_3string is3 i3
- X$K init_file if if
- X$K init_prog iprog iP
- X$ insert_character ich1 ic
- X$ insert_line il1 al
- X$ insert_padding ip ip
- X$K key_a1 ka1 K1
- X$K key_a3 ka3 K3
- X$K key_b2 kb2 K2
- X$K key_backspace kbs kb
- X$K key_beg kbeg @1
- X$K key_btab kcbt kB
- X$K key_c1 kc1 K4
- X$K key_c3 kc3 K5
- X$K key_cancel kcan @2
- X$K key_catab ktbc ka
- X$K key_clear kclr kC
- X$K key_close kclo @3
- X$K key_command kcmd @4
- X$K key_copy kcpy @5
- X$K key_create kcrt @6
- X$K key_ctab kctab kt
- X$K key_dc kdch1 kD
- X$K key_dl kdl1 kL
- X$K key_down kcud1 kd
- X$K key_eic krmir kM
- X$K key_end kend @7
- X$K key_enter kent @8
- X$K key_eol kel kE
- X$K key_eos ked kS
- X$K key_exit kext @9
- X$K key_f0 kf0 k0
- X$K key_f1 kf1 k1
- X$K key_f10 kf10 k;
- X$K key_f11 kf11 F1
- X$K key_f12 kf12 F2
- X$K key_f13 kf13 F3
- X$K key_f14 kf14 F4
- X$K key_f15 kf15 F5
- X$K key_f16 kf16 F6
- X$K key_f17 kf17 F7
- X$K key_f18 kf18 F8
- X$K key_f19 kf19 F9
- X$K key_f2 kf2 k2
- X$K key_f20 kf20 FA
- X$K key_f21 kf21 FB
- X$K key_f22 kf22 FC
- X$K key_f23 kf23 FD
- X$K key_f24 kf24 FE
- X$K key_f25 kf25 FF
- X$K key_f26 kf26 FG
- X$K key_f27 kf27 FH
- X$K key_f28 kf28 FI
- X$K key_f29 kf29 FJ
- X$K key_f3 kf3 k3
- X$K key_f30 kf30 FK
- X$K key_f31 kf31 FL
- X$K key_f32 kf32 FM
- X$K key_f33 kf33 FN
- X$K key_f34 kf34 FO
- X$K key_f35 kf35 FP
- X$K key_f36 kf36 FQ
- X$K key_f37 kf37 FR
- X$K key_f38 kf38 FS
- X$K key_f39 kf39 FT
- X$K key_f4 kf4 k4
- X$K key_f40 kf40 FU
- X$K key_f41 kf41 FV
- X$K key_f42 kf42 FW
- X$K key_f43 kf43 FX
- X$K key_f44 kf44 FY
- X$K key_f45 kf45 FZ
- SHAR_EOF
- echo "End of tinfo part 4"
- echo "File cap_list is continued in part 5"
- echo "5" > s3_seq_.tmp
- exit 0
- --
- Ross Ridge //
- "The Great HTMU" [oo]
- ross@contact.uucp -()-
- ross@watcsc.waterloo.edu //
-
-
-