home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / mytinfo / part01 / tput.c < prev    next >
C/C++ Source or Header  |  1992-12-26  |  3KB  |  197 lines

  1. /*
  2.  * tput.c
  3.  * 
  4.  * By Ross Ridge
  5.  * Public Domain
  6.  * 92/02/01 07:30:39
  7.  *
  8.  */
  9.  
  10. #define NOTLIB
  11.  
  12. #include "defs.h"
  13.  
  14. static const char SCCSid[] = "@(#) mytinfo tput.c 3.2 92/02/01 public domain, By Ross Ridge";
  15.  
  16. #define SINGLE
  17. #include "term.h"
  18.  
  19. #include <ctype.h>
  20.  
  21. #define PUTS(s)        putp(s)
  22. #define PUTCHAR(c)    putchar(c)
  23. #define FLUSH        fflush(stdout)
  24.  
  25. extern void (*cleanup)();
  26.  
  27. static void
  28. clean(e)
  29. int e; {
  30.     return;
  31. }
  32.  
  33. static void
  34. usage(e)
  35. int e; {
  36.     fprintf(stderr, "usage: %s [-T term] capname\n", prg_name);
  37.     return;
  38. }
  39.  
  40. int
  41. main(argc, argv)
  42. int argc;
  43. char **argv; {
  44.     char *s;
  45.     int i, j, c;
  46.     int reset;
  47.     FILE *f;
  48.     char *term;
  49.  
  50.     prg_name = argv[0];
  51.     s = strrchr(prg_name, '/');
  52.     if (s != NULL && *++s != '\0') {
  53.         prg_name = s;
  54.     }
  55.  
  56.     term = getenv("TERM");
  57.  
  58.     cleanup = usage;
  59.  
  60.     if (argc > 2 && argv[1][0] == '-' && argv[1][1] == 'T') {
  61.         if (argv[1][2] == '\0' && argc > 3) {
  62.             term = argv[2];
  63.             argc--;
  64.             argv++;
  65.         } else {
  66.             term = argv[1] + 2;
  67.         }
  68.         argc--;
  69.         argv++;
  70.     }
  71.  
  72.     if (argc != 2) {
  73.         quit(-1, "arg count");
  74.     }
  75.  
  76.     cleanup = clean;
  77.  
  78.     setupterm(term, 1, (int *)0);
  79.  
  80.     reset = 0;
  81.     if (strcmp(argv[1], "reset") == 0) {
  82.         reset = 1;
  83.     }
  84.     if (reset || strcmp(argv[1], "init") == 0) {
  85.  
  86.         if (init_prog != NULL) {
  87.             system(init_prog);
  88.         }
  89.         FLUSH;
  90.  
  91.         if (reset && reset_1string != NULL) {
  92.             PUTS(reset_1string);
  93.         } else if (init_1string != NULL) {
  94.             PUTS(init_1string);
  95.         }
  96.         FLUSH;
  97.  
  98.         if (reset && reset_2string != NULL) {
  99.             PUTS(reset_2string);
  100.         } else if (init_2string != NULL) {
  101.             PUTS(init_2string);
  102.         }
  103.         FLUSH;
  104.  
  105.         if (set_lr_margin != NULL) {
  106.             PUTS(tparm(set_lr_margin, 0, columns - 1));
  107.         } else if (set_left_margin_parm != NULL
  108.                && set_right_margin_parm != NULL) {
  109.             PUTS(tparm(set_left_margin_parm, 0));
  110.             PUTS(tparm(set_right_margin_parm, columns - 1));
  111.         } else if (clear_margins != NULL && set_left_margin != NULL
  112.                && set_right_margin != NULL) {
  113.             PUTS(clear_margins);
  114.             if (carriage_return != NULL) {
  115.                 PUTS(carriage_return);
  116.             } else {
  117.                 PUTCHAR('\r');
  118.             }
  119.             PUTS(set_left_margin);
  120.             if (parm_right_cursor) {
  121.                 PUTS(tparm(parm_right_cursor, columns - 1));
  122.             } else {
  123.                 for(i = 0; i < columns - 1; i++) {
  124.                     PUTCHAR(' ');
  125.                 }
  126.             }
  127.             PUTS(set_right_margin);
  128.             if (carriage_return != NULL) {
  129.                 PUTS(carriage_return);
  130.             } else {
  131.                 PUTCHAR('\r');
  132.             }
  133.         }
  134.         FLUSH;
  135.  
  136.         if (init_tabs != 8) {
  137.             if (clear_all_tabs != NULL && set_tab != NULL) {
  138.                 for(i = 0; i < columns - 1; i += 8) {
  139.                     if (parm_right_cursor) {
  140.                         PUTS(tparm(parm_right_cursor,
  141.                              8));
  142.                     } else {
  143.                         for(j = 0; j < 8; j++) {
  144.                             PUTCHAR(' ');
  145.                         }
  146.                     }
  147.                     PUTS(set_tab);
  148.                 }
  149.                 FLUSH;
  150.             }
  151.         }
  152.  
  153.         if (reset && reset_file != NULL) {
  154.             f = fopen(reset_file, "r");
  155.             if (f == NULL) {
  156.                 quit(errno, "Can't open reset_file: '%s'",
  157.                      reset_file);
  158.             }
  159.             while((c = fgetc(f)) != EOF) {
  160.                 PUTCHAR(c);
  161.             }
  162.             fclose(f);
  163.         } else if (init_file != NULL) {
  164.             f = fopen(init_file, "r");
  165.             if (f == NULL) {
  166.                 quit(errno, "Can't open init_file: '%s'",
  167.                      init_file);
  168.             }
  169.             while((c = fgetc(f)) != EOF) {
  170.                 PUTCHAR(c);
  171.             }
  172.             fclose(f);
  173.         }
  174.         FLUSH;
  175.  
  176.         if (reset && reset_3string != NULL) {
  177.             PUTS(reset_3string);
  178.         } else if (init_2string != NULL) {
  179.             PUTS(init_3string);
  180.         }
  181.         FLUSH;
  182.         return 0;
  183.     }
  184.  
  185.     s = tigetstr(argv[1]);
  186.  
  187.     if (s == (char *) -1) {
  188.         quit(-1, "unknown capname '%s'", argv[1]);
  189.     } else if (s == NULL) {
  190.         return 0;
  191.     }
  192.  
  193.     putp(s);
  194.  
  195.     return 0;
  196. }
  197.