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

  1. /*
  2.  * terminfo.c
  3.  *
  4.  * By Ross Ridge
  5.  * Public Domain
  6.  * 92/02/01 07:30:30
  7.  *
  8.  * terminfo compatible libary functions
  9.  *
  10.  */
  11.  
  12. #include "defs.h"
  13. #include "term.h"
  14.  
  15. static const char SCCSid[] = "@(#) mytinfo terminfo.c 3.2 92/02/01 public domain, By Ross Ridge";
  16.  
  17. extern char _mytinfo_version[];
  18. static char *force = _mytinfo_version;
  19.  
  20. #ifdef USE_FAKE_STDIO
  21.  
  22. #ifdef __GNUC__
  23. __inline__
  24. #endif
  25. static int
  26. printerr(msg)
  27. char *msg; {
  28.     return write(2, msg, strlen(msg));
  29. }
  30.  
  31. #define RETERR(e, msg)  { (err == NULL ? (printerr(msg), exit(1), 0) \
  32.                        : (*err = e)); return ERR; }
  33.  
  34. #else
  35.  
  36. #define RETERR(e, msg)  { (err == NULL ? (fprintf(stderr, msg), exit(1), 0) \
  37.                        : (*err = e)); return ERR; }
  38.  
  39. #endif
  40.  
  41. int
  42. setupterm(term, fd, err)
  43. char *term;
  44. int fd;
  45. int *err; {
  46.     struct term_path *path;
  47.     char *s;
  48.     int r = -1;
  49.     char buf[MAX_BUF];
  50.  
  51.  
  52.     if (term == NULL) 
  53.         term = getenv("TERM");
  54.     if (term == NULL)
  55.         RETERR(0, "TERM not set\n")
  56.  
  57.     path = _buildpath("$MYTERMINFO", 2,
  58.               "$TERMINFO", 2,
  59.               "$TERMCAP", 1,
  60. #ifdef TERMINFODIR
  61.               TERMINFODIR, 0,
  62. #endif
  63. #ifdef TERMCAPFILE
  64.               TERMCAPFILE, 0,
  65. #endif
  66. #ifdef TERMINFOSRC
  67.               TERMINFOSRC, 0,
  68. #endif
  69.               NULL, -1);
  70.  
  71.     if (path == NULL)
  72.         RETERR(0, "malloc error\n");
  73.  
  74.     r = _fillterm(term, path, buf);
  75.  
  76.     _delpath(path);
  77.  
  78.     switch(r) {
  79.     case -3:
  80.         RETERR(0, "malloc error\n");
  81.     case -2:
  82.         RETERR(-1, "bad format\n");
  83.     case -1:
  84.         RETERR(-1, "database not found\n");
  85.     case 0:
  86.         RETERR(0, "terminal not found\n");
  87.     case 1:
  88.     case 2:
  89.     case 3:
  90.         cur_term->fd = fd;
  91.         _term_buf.fd = fd;
  92.         if (_init_tty() == ERR)
  93.             RETERR(0, "problem initializing tty\n");
  94.         if ((s = getenv("LINES")) != NULL && atoi(s) > 0) 
  95.             lines = atoi(s);
  96.         if ((s = getenv("COLUMNS")) != NULL && atoi(s) > 0)
  97.             columns = atoi(s);
  98.         if (err != NULL)
  99.             *err = 1;
  100.         return OK;
  101.     default:
  102.         RETERR(0, "oops...\n");
  103.     }
  104. }
  105.  
  106. int
  107. set_curterm(p)
  108. TERMINAL *p; {
  109.     cur_term = p;
  110.     if (_init_tty() == ERR)
  111.         return ERR;
  112.     if (_check_tty() == ERR)
  113.         return ERR;
  114.     return OK;
  115. }
  116.  
  117. int
  118. del_curterm(p)
  119. TERMINAL *p; {
  120.     _del_strs(p);
  121.     free((anyptr) p);
  122.  
  123.     return OK;
  124. }
  125.