home *** CD-ROM | disk | FTP | other *** search
- /*
- * snapshot - make a snapshot of the terminal screen into a file
- *
- * Usage: snapshot [-s startline] [-e endline] destfile
- * snapshot -l
- *
- * Options:
- * -s specify alternate line # for start of snapshot
- * -e specify alternate line # for end of snapshot
- * -l list known terminal ($TERM) types and quit
- *
- * David MacKenzie
- * Latest revision: 07/29/88
- */
-
- #define ALLOCATE /* Allocate memory for the global variables. */
- #include <stdio.h>
- #include "snapshot.h"
-
- extern int
- wy50_savepos(), wy50_restorepos(), wy50_transline();
- extern int
- h29_savepos(), h29_restorepos(), h29_transline();
-
- /* Number of entries in tdtab. */
- #define NTD 2
-
- struct termdef tdtab[NTD] = {
- {
- {"h29", "z29", "h19", "z19", NULL, NULL},
- h29_savepos,
- h29_restorepos,
- h29_transline,
- 0,
- 24
- },
- {
- {"wy50", "wyse50", "wy50-t", "wyse50-t", NULL, NULL},
- wy50_savepos,
- wy50_restorepos,
- wy50_transline,
- 1,
- 24
- }
- };
-
- main(argc, argv)
- int argc;
- char **argv;
- {
- char *getenv();
- struct termdef *getdef();
- extern char *optarg;
- extern int optind;
- char *term; /* Value of $TERM. */
- int start = -1; /* First line (row) to snap. */
- int end = -1; /* Last line (row) to snap. */
- register int c; /* Option character. */
-
- while ((c = getopt(argc, argv, "s:e:l")) != EOF)
- switch (c) {
- case 's':
- start = atoi(optarg);
- break;
- case 'e':
- end = atoi(optarg);
- break;
- case 'l':
- listknown();
- exit(0);
- default:
- usage(argv[0]);
- }
- if (optind != argc - 1)
- usage(argv[0]);
-
- term = getenv("TERM");
- tp = getdef(term);
- if (!tp) {
- fprintf(stderr, "%s: Unknown terminal type\n", term);
- exit(1);
- }
- if (start == -1)
- start = minline;
- if (end == -1)
- end = maxline;
-
- if (snapshot(argv[optind], start, end))
- exit(1);
-
- exit(0);
- }
-
- /*
- * If term has a legal value for a known termdef, return a pointer
- * to that termdef, else return NULL.
- */
- struct termdef *
- getdef(term)
- register char *term;
- {
- register int tdi;
- register int termi;
-
- for (tdi = 0; tdi < NTD; ++tdi)
- for (termi = 0; termi < NTERMS && tdtab[tdi].td_terms[termi]; ++termi)
- if (!strcmp(term, tdtab[tdi].td_terms[termi]))
- return &tdtab[tdi];
- return NULL;
- }
-
- /*
- * List the $TERM values that are legal.
- */
- listknown()
- {
- register int tdi;
- register int termi;
-
- printf("Known terminal types:\n");
- for (tdi = 0; tdi < NTD; ++tdi) {
- for (termi = 0; termi < NTERMS && tdtab[tdi].td_terms[termi]; ++termi)
- printf("%s ", tdtab[tdi].td_terms[termi]);
- printf("\n");
- }
- }
-
- usage(file)
- char *file;
- {
- fprintf(stderr, "Usage: %s [-s startline] [-e endline] destfile\n", file);
- fprintf(stderr, " %s -l\n", file);
- exit(1);
- }
-