home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume4 / snapshot / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-02-03  |  2.7 KB  |  135 lines

  1. /*
  2.  * snapshot - make a snapshot of the terminal screen into a file
  3.  *
  4.  * Usage: snapshot [-s startline] [-e endline] destfile
  5.  *        snapshot -l
  6.  *
  7.  * Options:
  8.  * -s   specify alternate line # for start of snapshot
  9.  * -e   specify alternate line # for end of snapshot
  10.  * -l   list known terminal ($TERM) types and quit
  11.  *
  12.  * David MacKenzie
  13.  * Latest revision: 07/29/88
  14.  */
  15.  
  16. #define ALLOCATE        /* Allocate memory for the global variables. */
  17. #include <stdio.h>
  18. #include "snapshot.h"
  19.  
  20. extern int
  21. wy50_savepos(), wy50_restorepos(), wy50_transline();
  22. extern int
  23. h29_savepos(), h29_restorepos(), h29_transline();
  24.  
  25. /* Number of entries in tdtab. */
  26. #define NTD 2
  27.  
  28. struct termdef tdtab[NTD] = {
  29.     {
  30.     {"h29", "z29", "h19", "z19", NULL, NULL},
  31.     h29_savepos,
  32.     h29_restorepos,
  33.     h29_transline,
  34.     0,
  35.     24
  36.     },
  37.     {
  38.     {"wy50", "wyse50", "wy50-t", "wyse50-t", NULL, NULL},
  39.     wy50_savepos,
  40.     wy50_restorepos,
  41.     wy50_transline,
  42.     1,
  43.     24
  44.     }
  45. };
  46.  
  47. main(argc, argv)
  48.     int     argc;
  49.     char  **argv;
  50. {
  51.     char   *getenv();
  52.     struct termdef *getdef();
  53.     extern char *optarg;
  54.     extern int optind;
  55.     char   *term;        /* Value of $TERM. */
  56.     int     start = -1;        /* First line (row) to snap. */
  57.     int     end = -1;        /* Last line (row) to snap. */
  58.     register int c;        /* Option character. */
  59.  
  60.     while ((c = getopt(argc, argv, "s:e:l")) != EOF)
  61.     switch (c) {
  62.     case 's':
  63.         start = atoi(optarg);
  64.         break;
  65.     case 'e':
  66.         end = atoi(optarg);
  67.         break;
  68.     case 'l':
  69.         listknown();
  70.         exit(0);
  71.     default:
  72.         usage(argv[0]);
  73.     }
  74.     if (optind != argc - 1)
  75.     usage(argv[0]);
  76.  
  77.     term = getenv("TERM");
  78.     tp = getdef(term);
  79.     if (!tp) {
  80.     fprintf(stderr, "%s: Unknown terminal type\n", term);
  81.     exit(1);
  82.     }
  83.     if (start == -1)
  84.     start = minline;
  85.     if (end == -1)
  86.     end = maxline;
  87.  
  88.     if (snapshot(argv[optind], start, end))
  89.     exit(1);
  90.  
  91.     exit(0);
  92. }
  93.  
  94. /*
  95.  * If term has a legal value for a known termdef, return a pointer
  96.  * to that termdef, else return NULL.
  97.  */
  98. struct termdef *
  99. getdef(term)
  100.     register char *term;
  101. {
  102.     register int tdi;
  103.     register int termi;
  104.  
  105.     for (tdi = 0; tdi < NTD; ++tdi)
  106.     for (termi = 0; termi < NTERMS && tdtab[tdi].td_terms[termi]; ++termi)
  107.         if (!strcmp(term, tdtab[tdi].td_terms[termi]))
  108.         return &tdtab[tdi];
  109.     return NULL;
  110. }
  111.  
  112. /*
  113.  * List the $TERM values that are legal.
  114.  */
  115. listknown()
  116. {
  117.     register int tdi;
  118.     register int termi;
  119.  
  120.     printf("Known terminal types:\n");
  121.     for (tdi = 0; tdi < NTD; ++tdi) {
  122.     for (termi = 0; termi < NTERMS && tdtab[tdi].td_terms[termi]; ++termi)
  123.         printf("%s ", tdtab[tdi].td_terms[termi]);
  124.     printf("\n");
  125.     }
  126. }
  127.  
  128. usage(file)
  129.     char   *file;
  130. {
  131.     fprintf(stderr, "Usage: %s [-s startline] [-e endline] destfile\n", file);
  132.     fprintf(stderr, "       %s -l\n", file);
  133.     exit(1);
  134. }
  135.