home *** CD-ROM | disk | FTP | other *** search
/ CICA 1995 May / cica_0595_4.zip / cica_0595_4 / UTIL / MSWSRC35 / TERM.CPP < prev    next >
C/C++ Source or Header  |  1993-08-19  |  4KB  |  235 lines

  1. /*
  2.  *    term.c        terminal cursor control            dvb
  3.  *
  4.  *    Copyright (C) 1989 The Regents of the University of California
  5.  *    This Software may be copied and distributed for educational,
  6.  *    research, and not for profit purposes provided that this
  7.  *    copyright and statement are included in all such copies.
  8.  *
  9.  */
  10.  
  11. #include "logo.h"
  12. #include "globals.h"
  13.  
  14. #ifdef mac
  15. #include <console.h>
  16. #endif
  17. #ifdef unix
  18. #ifdef SYSV
  19. #include <termio.h>
  20. #else
  21. #include <sgtty.h>
  22. #endif
  23. #endif
  24.  
  25. int x_coord, y_coord, x_max, y_max;
  26.  
  27. char PC;
  28. char *BC;
  29. char *UP;
  30. short ospeed;
  31. /*
  32. char bp[1024];
  33. char cl_arr[40];
  34. char cm_arr[40];
  35. char so_arr[40];
  36. char se_arr[40];
  37. */
  38.  
  39. #ifdef unix
  40. #ifdef SYSV
  41. struct termio tty_cooked, tty_cbreak;
  42. #else
  43. struct sgttyb tty_cooked, tty_cbreak;
  44. #endif
  45. #endif
  46.  
  47. int interactive, tty_charmode;
  48.  
  49. extern char **environ, *tgoto(), *tgetstr();
  50.  
  51. char *termcap_ptr;
  52.  
  53. void termcap_putter(char ch)
  54. {
  55. /*
  56.     *termcap_ptr++ = ch;
  57. */
  58. }
  59.  
  60. #ifdef unix
  61. void termcap_getter(char *cap, char *buf)
  62. {
  63.     char temp[40];
  64.     char *temp_ptr = temp;
  65.  
  66.     termcap_ptr = buf;
  67.     tgetstr(cap,&temp_ptr);
  68.     tputs(temp,1,termcap_putter);
  69. }
  70. #endif
  71.  
  72. void term_init()
  73. {
  74. //    int term_sg;
  75.  
  76.     interactive = 1; //isatty(0);
  77.     ift_iff_flag = -1;
  78.     term_init_ibm();
  79. /*
  80. #ifdef mac
  81.     term_init_mac();
  82.     return;
  83. #else
  84. #ifdef ibm
  85.     term_init_ibm();
  86. #else
  87.     if (interactive) {
  88. #ifdef SYSV
  89.     ioctl(0,TCGETA,(char *)(&tty_cooked));
  90.     tty_cbreak = tty_cooked;
  91.     tty_cbreak.c_cc[VMIN] = '\01';
  92.     tty_cbreak.c_cc[VTIME] = '\0';
  93.     tty_cbreak.c_lflag &= ~ECHO;
  94. #else
  95.     ioctl(0,TIOCGETP,(char *)(&tty_cooked));
  96.     tty_cbreak = tty_cooked;
  97.     tty_cbreak.sg_flags |= CBREAK;
  98.     tty_cbreak.sg_flags &= ~ECHO;
  99. #endif
  100.     }
  101.     tty_charmode = 0;
  102.     tgetent(bp, getenv("TERM"));
  103.     x_max = tgetnum("co");
  104.     y_max = tgetnum("li");
  105.     term_sg = tgetnum("sg");
  106.  
  107.     x_coord = y_coord = 0;
  108.     termcap_getter("cm", cm_arr);
  109.     termcap_getter("cl", cl_arr);
  110.  
  111.     if (term_sg <= 0) {
  112.     termcap_getter("so", so_arr);
  113.     termcap_getter("se", se_arr);
  114.     } else    / * don't mess with stupid standout modes * /
  115.     so_arr[0] = se_arr[0] = '\0';
  116. #endif
  117. #endif
  118. */
  119. }
  120.  
  121. void charmode_on() {
  122. #ifdef unix
  123.     if ((readstream == stdin) && interactive && !tty_charmode) {
  124. #ifdef SYSV
  125.     ioctl(0,TCSETA,(char *)(&tty_cbreak));
  126. #else
  127.     ioctl(0,TIOCSETP,(char *)(&tty_cbreak));
  128. #endif
  129.     tty_charmode++;
  130.     }
  131. #endif
  132. }
  133.  
  134. void charmode_off() {
  135. /*
  136. #ifdef unix
  137.     if (tty_charmode) {
  138. #ifdef SYSV
  139.     ioctl(0,TCSETA,(char *)(&tty_cooked));
  140. #else
  141.     ioctl(0,TIOCSETP,(char *)(&tty_cooked));
  142. #endif
  143.     tty_charmode = 0;
  144.     }
  145. #endif
  146. */
  147. }
  148.  
  149. NODE *lcleartext()
  150. {
  151.     ibm_clear_text();
  152. /*
  153. #ifdef mac
  154.     cgotoxy(x_margin + 1, y_margin + 1, stdout);
  155.     ccleos(stdout);
  156. #else
  157. #ifdef ibm
  158.     ibm_clear_text();
  159.     ibm_gotoxy(x_margin, y_margin);
  160. #else
  161.     printf("%s", cl_arr);
  162.     printf("%s", tgoto(cm_arr, x_margin, y_margin));
  163. #endif
  164. #endif
  165.     x_coord = x_margin;
  166.     y_coord = y_margin;
  167. */
  168.     return(UNBOUND);
  169. }
  170.  
  171. NODE *lcursor()
  172. {
  173. /*
  174.     return(cons(make_intnode((FIXNUM)(x_coord-x_margin)),
  175.         cons(make_intnode((FIXNUM)(y_coord-y_margin)), NIL)));
  176. */
  177.     return(cons(make_intnode((FIXNUM)(0)),
  178.         cons(make_intnode((FIXNUM)(0)), NIL)));
  179. }
  180.  
  181. NODE *lsetcursor(NODE *args)
  182. {
  183. /*
  184.     NODE *arg;
  185.  
  186.     arg = pos_int_vector_arg(args);
  187.     if (NOT_THROWING) {
  188.     x_coord = x_margin + getint(car(arg));
  189.     y_coord = y_margin + getint(cadr(arg));
  190. #ifdef mac
  191.     mac_gotoxy(x_coord, y_coord);
  192. #else
  193. #ifdef ibm
  194.     ibm_gotoxy(x_coord, y_coord);
  195. #else
  196.     printf("%s", tgoto(cm_arr, x_coord, y_coord));
  197. #endif
  198. #endif
  199.     fflush(stdout);
  200. #ifdef __ZTC__
  201.     zflush();
  202. #endif
  203.     }
  204. */
  205.     return(UNBOUND);
  206. }
  207.  
  208. NODE *lsetmargins(NODE *args)
  209. {
  210. /*
  211.     NODE *arg;
  212.  
  213.     arg = pos_int_vector_arg(args);
  214.     if (NOT_THROWING) {
  215.     x_margin = getint(car(arg));
  216.     y_margin = getint(cadr(arg));
  217.     lcleartext();
  218.     }
  219. */
  220.     return(UNBOUND);
  221. }
  222.  
  223. NODE *lstandout(NODE *args)
  224. {
  225.     char textbuf[300];
  226.     char fmtbuf[100];
  227.  
  228.     sprintf(fmtbuf,"%%p");
  229.     print_stringptr = textbuf;
  230.     print_stringlen = 300;
  231.     ndprintf((FILE *)NULL,fmtbuf,car(args));
  232.     *print_stringptr = '\0';
  233.     return(make_strnode(textbuf,NULL,(int)strlen(textbuf),STRING,strnzcpy));
  234. }
  235.