CARVIEW |
Select Language
HTTP/2 302
server: nginx
date: Thu, 17 Jul 2025 16:04:48 GMT
content-type: text/plain; charset=utf-8
content-length: 0
x-archive-redirect-reason: found capture at 20090210084648
location: https://web.archive.org/web/20090210084648/https://examples.oreilly.com/upt2/split/tcap.shar
server-timing: captures_list;dur=0.693931, exclusion.robots;dur=0.026440, exclusion.robots.policy;dur=0.016229, esindex;dur=0.011994, cdx.remote;dur=54.749483, LoadShardBlock;dur=1420.884767, PetaboxLoader3.datanode;dur=193.878229, PetaboxLoader3.resolve;dur=1150.605001
x-app-server: wwwb-app201
x-ts: 302
x-tr: 1501
server-timing: TR;dur=0,Tw;dur=0,Tc;dur=1
set-cookie: SERVER=wwwb-app201; path=/
x-location: All
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
HTTP/2 200
server: nginx
date: Thu, 17 Jul 2025 16:04:49 GMT
content-type: application/x-shar
content-length: 9630
x-archive-orig-date: Tue, 10 Feb 2009 08:46:48 GMT
x-archive-orig-server: Apache
x-archive-orig-last-modified: Mon, 31 Mar 2008 18:10:12 GMT
x-archive-orig-etag: "12457cc-259e-90194900"
x-archive-orig-accept-ranges: bytes
x-archive-orig-content-length: 9630
x-archive-orig-connection: close
cache-control: max-age=1800
x-archive-guessed-content-type: application/x-shar
x-archive-guessed-charset: utf-8
memento-datetime: Tue, 10 Feb 2009 08:46:48 GMT
link: ; rel="original", ; rel="timemap"; type="application/link-format", ; rel="timegate", ; rel="first memento"; datetime="Fri, 26 Apr 2002 16:06:14 GMT", ; rel="prev memento"; datetime="Wed, 18 Oct 2006 00:11:27 GMT", ; rel="memento"; datetime="Tue, 10 Feb 2009 08:46:48 GMT", ; rel="next memento"; datetime="Wed, 30 Sep 2015 13:24:10 GMT", ; rel="last memento"; datetime="Fri, 25 Mar 2016 03:29:23 GMT"
content-security-policy: default-src 'self' 'unsafe-eval' 'unsafe-inline' data: blob: archive.org web.archive.org web-static.archive.org wayback-api.archive.org athena.archive.org analytics.archive.org pragma.archivelab.org wwwb-events.archive.org
x-archive-src: 52_8_20090210075601_crawl103-c/52_8_20090210084506_crawl100.arc.gz
server-timing: captures_list;dur=0.505156, exclusion.robots;dur=0.025391, exclusion.robots.policy;dur=0.015812, esindex;dur=0.010816, cdx.remote;dur=64.557871, LoadShardBlock;dur=458.291077, PetaboxLoader3.datanode;dur=175.674403, PetaboxLoader3.resolve;dur=466.428779, load_resource;dur=226.782539
x-app-server: wwwb-app201
x-ts: 200
x-tr: 778
server-timing: TR;dur=0,Tw;dur=0,Tc;dur=1
x-location: All
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
accept-ranges: bytes
# This is a shell archive. Remove anything before this line,
# then unpack it by saving it in a file and typing "sh file".
#
# Wrapped by jerry on Thu Jun 12 19:34:24 MDT 1997
# Contents: tcap.c
echo extracting - tcap.c
sed 's/^X//' > "tcap.c" <<'X//E*O*F tcap.c//'
Xstatic char *rcsid = "$Header: /pub/ora/tc/RCS/tcap.c,v 1.4 1986/01/04 16:15:24 jerryp Exp $";
X/*
X ** tcap - termcaps for shell scripts.
X ** Usage: tcap [-a] cap
X */
X#include
X#include
X
Xextern char *tgetdefstr(), *tgetstr(), *tgoto();
Xextern int tgetdefnum(), tgetnum();
X
Xtypedef struct tbl
X{ char *str;
X short val;
X} lookuptbl;
X
X#define STRING 1
X#define STR1ARG 2
X#define STR2ARG 3
X#define NUMBER 4
X#define FLAG 5
X
Xlookuptbl tcaps[] = {
X "AL", STR1ARG,
X "Bj", STRING,
X "Bl", STRING,
X "Br", STRING,
X "CC", STRING,
X "Cj", STRING,
X "CM", STR2ARG,
X "DC", STR1ARG,
X "DL", STR1ARG,
X "DO", STR1ARG,
X "EP", FLAG,
X "Ge", STRING,
X "Gs", STRING,
X "HD", FLAG,
X "Hl", STRING,
X "IC", STR1ARG,
X "K1", STRING,
X "K2", STRING,
X "K3", STRING,
X "K4", STRING,
X "K5", STRING,
X "LC", FLAG,
X "LE", STR1ARG,
X "Lj", STRING,
X "NL", FLAG,
X "OP", FLAG,
X "RI", STR1ARG,
X "Rj", STRING,
X "SF", STR1ARG,
X "SR", STR1ARG,
X "Tj", STRING,
X "Tl", STRING,
X "Tr", STRING,
X "UC", FLAG,
X "UP", STR1ARG,
X "Vl", STRING,
X "Xc", STRING,
X "ae", STRING,
X "al", STRING,
X "am", FLAG,
X "as", STRING,
X "bc", STRING,
X "bl", STRING,
X "bs", FLAG,
X "bt", STRING,
X "bw", FLAG,
X "cd", STRING,
X "ce", STRING,
X "ch", STR1ARG,
X "cl", STRING,
X "cm", STR2ARG,
X "co", NUMBER,
X "cr", STRING,
X "cs", STR2ARG,
X "ct", STRING,
X "cv", STR1ARG,
X "dB", NUMBER,
X "dC", NUMBER,
X "dF", NUMBER,
X "dN", NUMBER,
X "dT", NUMBER,
X "dV", NUMBER,
X "da", FLAG,
X "db", FLAG,
X "dc", STRING,
X "dl", STRING,
X "dm", STRING,
X "do", STRING,
X "ds", STRING,
X "ec", STR1ARG,
X "ed", STRING,
X "ei", STRING,
X "eo", FLAG,
X "es", FLAG,
X "ff", STRING,
X "fs", STRING,
X "gn", FLAG,
X "hc", FLAG,
X "hd", STRING,
X "ho", STRING,
X "hs", FLAG,
X "hu", STRING,
X "hz", FLAG,
X "ic", STRING,
X "if", STRING,
X "im", STRING,
X "in", FLAG,
X "ip", STRING,
X "is", STRING,
X "it", NUMBER,
X "k0", STRING,
X "k1", STRING,
X "k2", STRING,
X "k3", STRING,
X "k4", STRING,
X "k5", STRING,
X "k6", STRING,
X "k7", STRING,
X "k8", STRING,
X "k9", STRING,
X "kA", STRING,
X "kC", STRING,
X "kD", STRING,
X "kE", STRING,
X "kF", STRING,
X "kH", STRING,
X "kI", STRING,
X "kL", STRING,
X "kM", STRING,
X "kN", STRING,
X "kP", STRING,
X "kR", STRING,
X "kS", STRING,
X "kT", STRING,
X "ka", STRING,
X "kb", STRING,
X "kd", STRING,
X "ke", STRING,
X "kh", STRING,
X "kl", STRING,
X "km", FLAG,
X "kn", NUMBER,
X "ko", STRING,
X "kr", STRING,
X "ks", STRING,
X "kt", STRING,
X "ku", STRING,
X "l0", STRING,
X "l1", STRING,
X "l2", STRING,
X "l3", STRING,
X "l4", STRING,
X "l5", STRING,
X "l6", STRING,
X "l7", STRING,
X "l8", STRING,
X "l9", STRING,
X "le", STRING,
X "li", NUMBER,
X "ll", STRING,
X "lm", NUMBER,
X "ma", STRING,
X "mb", STRING,
X "md", STRING,
X "me", STRING,
X "mh", STRING,
X "mi", FLAG,
X "mk", STRING,
X "ml", STRING,
X "mm", STRING,
X "mo", STRING,
X "mp", STRING,
X "mr", STRING,
X "ms", FLAG,
X "mu", STRING,
X "nc", FLAG,
X "nd", STRING,
X "nl", STRING,
X "ns", FLAG,
X "nw", STRING,
X "os", FLAG,
X "pO", STR1ARG,
X "pb", NUMBER,
X "pc", STRING,
X "pf", STRING,
X "po", STRING,
X "ps", STRING,
X "pt", FLAG,
X "rP", STRING,
X "rc", STRING,
X "rf", STRING,
X "rp", STR2ARG,
X "rs", STRING,
X "sa", STR2ARG,
X "sc", STRING,
X "se", STRING,
X "sf", STRING,
X "sg", NUMBER,
X "so", STRING,
X "sr", STRING,
X "st", STRING,
X "ta", STRING,
X "tc", STRING,
X "te", STRING,
X "ti", STRING,
X "ts", STR1ARG,
X "uc", STRING,
X "ue", STRING,
X "ug", NUMBER,
X "ul", FLAG,
X "up", STRING,
X "us", STRING,
X "vb", STRING,
X "ve", STRING,
X "vi", STRING,
X "vs", STRING,
X "vt", NUMBER,
X "wi", STRING,
X "ws", NUMBER,
X "xb", FLAG,
X "xn", FLAG,
X "xo", FLAG,
X "xr", FLAG,
X "xs", FLAG,
X "xt", FLAG,
X "xv", FLAG,
X "xx", FLAG,
X};
X
Xputx(c) { putchar (c); }
X
Xmain (argc, argv)
X int argc;
X char **argv;
X{
X char tcbuf[1024];
X char *cp, *arg;
X int i, tgetnum(), tgetflag();
X static int aflag = 0;
X
X if (tgetent(tcbuf, getenv ("TERM")) <= 0) {
X (void) fprintf (stderr, "tcap: cannot find termcap for %s.\n", getenv ("TERM"));
X exit (1);
X }
X cp = (char *) malloc (256);
X argv++;
X while (*argv) {
X arg = *argv++;
X if (strcmp (arg, "-a") == 0) {
X aflag = 1;
X continue;
X }
X i = lookup (arg, tcaps);
X if (i < 0) {
X (void) fprintf (stderr, "tcap: no such termcap: %s\n", arg);
X exit (2);
X }
X switch (tcaps[i].val & 017) {
X case STRING:
X if (aflag)
X show (tgetdefstr (arg, &cp));
X else
X tputs (tgetdefstr (arg, &cp), 1, putx);
X break;
X case STR1ARG:
X if (aflag)
X show (tgetstr (arg, &cp));
X else
X if (argv != NULL && isdigit (**argv))
X tputs (tgoto (tgetstr (arg, &cp),
X atoi (*argv++), 0), 1, putx);
X else {
X (void) fprintf (stderr, "tcap: error in arguments to %s\n", arg);
X exit(3);
X }
X break;
X case STR2ARG:
X if (aflag)
X show (tgetstr (arg, &cp));
X else
X if (argv != NULL && argv[1] != NULL &&
X isdigit (**argv) && isdigit (*(argv[1])))
X tputs (tgoto (tgetstr (arg, &cp),
X atoi (*argv++), atoi (*argv++)), 1, putx);
X else {
X (void) fprintf (stderr, "tcap: error in arguments to %s\n", arg);
X exit(3);
X }
X break;
X case NUMBER:
X if (aflag)
X (void) printf ("%d\n", tgetdefnum (arg));
X break;
X case FLAG:
X if (aflag)
X (void) printf (tgetflag (arg) ? "true\n" : "false\n");
X break;
X }
X }
X exit (0);
X}
X
X
X
X#define MAXLUPN 3 /* longer than longest possible name */
X/* Lookup name in table. Will take nonambiguous abbreviations. If you
X want to insist that a certain table entry must be spelled out, enter
X it twice in the table. Table entries must be sorted by name, and a
X name which is a substring of a longer name comes earlier in the table.
X Accepts upper or lower case if table entry is lower case.
X Returns:
X > 0 table entry index
X -1 not found
X -2 ambiguous
X*/
Xint lookup (name, table)
X char *name;
X lookuptbl *table;
X{
X register char *namptr,
X *tblptr;
X int ind;
X int value = 0;
X short length;
X short longest = 0;
X int ambig = 0;
X char lname[MAXLUPN];
X
X if (name == NULL)
X return -1;
X namptr = name;
X tblptr = lname;
X for (;;) {
X if ((*tblptr++ = isupper (*namptr)? tolower (*namptr++): *namptr++)
X == '\0')
X break;
X if (tblptr >= &lname[MAXLUPN])
X return -1;
X }
X
X for (ind = 0; (tblptr = table->str) != 0; table++, ind++) {
X namptr = lname;
X for (; *tblptr == *namptr; tblptr++, namptr++) {
X if (*tblptr == '\0')
X break;
X }
X if (*namptr == '\0') { /* end of name or exact match */
X length = namptr - lname;
X if (longest < length) {
X longest = length;
X ambig = 0;
X value = ind;
X if (*tblptr == '\0')
X break; /* exact match */
X }
X else /* longest == length */
X ambig = 1;
X }
X else if ( *namptr < *tblptr )
X break;
X }
X if (ambig)
X return -2;
X if (longest)
X return value;
X return -1;
X}
X
X
Xshow (str)
X char *str;
X{
X char c;
X
X if (str == (char *)0) {
X (void) printf ("NULL\n");
X return;
X }
X while (c = *str++ & 127)
X if (c < ' ') {
X if (c == 27)
X (void) printf ("\n");
X (void) printf ("^%c", c + '@');
X } else if (c == 127)
X (void) printf ("^?");
X else
X (void) printf ("%c", c);
X (void) printf ("\n");
X return;
X}
X
Xchar *
Xtgetdefstr (cap, ptr)
X char *cap, *ptr;
X{
X char *x;
X static char *bs = "\b",
X *ht = "\t",
X *nl = "\n",
X *cr = "\r",
X *ff = "\f",
X *nu = "\0",
X *bl = "\007",
X *nlcr = "\n\r";
X
X if ((x = tgetstr (cap, ptr)) != (char *) 0)
X return (x);
X if (strcmp (cap, "pc") == 0)
X return (nu);
X if (strcmp (cap, "bc") == 0)
X return (bs);
X if (strcmp (cap, "ta") == 0)
X return (ht);
X if (strcmp (cap, "nl") == 0)
X return (nl);
X if (strcmp (cap, "cr") == 0)
X return (cr);
X if (strcmp (cap, "ff") == 0)
X return (ff);
X if (strcmp (cap, "nw") == 0)
X return (nlcr);
X if (strcmp (cap, "bl") == 0)
X return (bl);
X if (strcmp (cap, "ho") == 0)
X return (tgoto (tgetstr ("cm", ptr), 0, 0));
X if (strcmp (cap, "ll") == 0)
X return (tgoto (tgetstr ("cm", ptr), tgetnum ("li") - 1, 0));
X if (strcmp (cap, "rs") == 0)
X return (tgetstr ("is", ptr));
X if (strcmp (cap, "is") == 0)
X return (tgetstr ("rs", ptr));
X if (strcmp (cap, "rf") == 0)
X return (tgetstr ("if", ptr));
X if (strcmp (cap, "if") == 0)
X return (tgetstr ("rf", ptr));
X
X return ((char *) 0);
X}
X
X
Xtgetdefnum (cap)
X char *cap;
X{
X int x;
X
X if ((x = tgetnum (cap)) != -1)
X return (x);
X if (strcmp (cap, "ws") == 0)
X return (tgetnum ("co"));
X return (0);
X}
X//E*O*F tcap.c//
chmod u=r,g=r,o=r tcap.c
echo Inspecting for damage in transit...
temp=/tmp/shar$$; dtemp=/tmp/.shar$$
trap "rm -f $temp $dtemp; exit" 0 1 2 3 15
cat > $temp <<\!!!
454 1244 8523 tcap.c
!!!
wc tcap.c | sed 's/^X//' | diff -b $temp - >$dtemp
if [ -s $dtemp ]
then echo "Ouch [diff of wc output]:" ; cat $dtemp
else echo "No problems found."
fi
exit 0