home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume23 / trn / part11 / term.h < prev    next >
C/C++ Source or Header  |  1991-08-22  |  8KB  |  261 lines

  1. /* $Header: term.h,v 4.3.3.2 91/01/16 03:38:39 davison Trn $
  2.  *
  3.  * $Log:    term.h,v $
  4.  * Revision 4.3.3.2  91/01/16  03:38:39  davison
  5.  * Integrated rn patches 48-54.  Added optional prototyping.
  6.  * 
  7.  * Revision 4.3.3.1  90/06/20  22:40:34  davison
  8.  * Initial Trn Release
  9.  * 
  10.  * Revision 4.3.2.6  90/12/10  01:32:08  sob
  11.  * Hopefully, the rn -e -L problem is now fixed.
  12.  * 
  13.  * Revision 4.3.2.5  90/11/22  13:48:09  sob
  14.  * Backed out change in Patch 48.
  15.  * 
  16.  * Revision 4.3.2.4  90/11/05  23:54:49  sob
  17.  * changed maybe_eol to test when erase_screen is FALSE intstead of TRUE.
  18.  * 
  19.  * Revision 4.3.2.3  90/10/01  01:49:39  sob
  20.  * Changed ospeed from short to long.
  21.  * 
  22.  * Revision 4.3.2.2  90/04/06  20:35:34  sob
  23.  * Added fixes for SCO Xenix sent by ronald@robobar.co.uk.
  24.  * 
  25.  * Revision 4.3.2.1  89/11/28  01:54:03  sob
  26.  * Added better support for SIGWINCH.
  27.  * 
  28.  * Revision 4.3.1.2  85/05/13  15:52:05  lwall
  29.  * Declared devtty on TERMIO system.
  30.  * 
  31.  * Revision 4.3.1.1  85/05/10  11:41:24  lwall
  32.  * Branch for patches.
  33.  * 
  34.  * Revision 4.3  85/05/01  11:51:36  lwall
  35.  * Baseline for release with 4.3bsd.
  36.  * 
  37.  */
  38.  
  39. #ifdef PUSHBACK
  40. EXT char circlebuf[PUSHSIZE];
  41. EXT int nextin INIT(0);
  42. EXT int nextout INIT(0);
  43. #ifdef PENDING
  44. #ifdef FIONREAD
  45. EXT long iocount INIT(0);
  46. #ifndef lint
  47. #define input_pending() (nextin!=nextout || (ioctl(0, FIONREAD, &iocount),(int)iocount))
  48. #else
  49. #define input_pending() bizarre
  50. #endif /* lint */
  51. #else /* FIONREAD */
  52. #ifdef RDCHK
  53. #define input_pending() (rdchk(0) > 0)        /* boolean only */
  54. #else /*  RDCHK */
  55. int circfill();
  56. EXT int devtty INIT(0);
  57. #ifndef lint
  58. #define input_pending() (nextin!=nextout || circfill())
  59. #else
  60. #define input_pending() bizarre
  61. #endif /* lint */
  62. #endif /* RDCHK */
  63. #endif /* FIONREAD */
  64. #else /* PENDING */
  65. #ifndef lint
  66. #define input_pending() (nextin!=nextout)
  67. #else
  68. #define input_pending() bizarre
  69. #endif /* lint */
  70. #endif /* PENDING */
  71. #else /* PUSHBACK */
  72. #ifdef PENDING
  73. #ifdef FIONREAD    /* must have FIONREAD or O_NDELAY for input_pending() */
  74. #define read_tty(addr,size) read(0,addr,size)
  75. #ifndef lint
  76. #define input_pending() (ioctl(0, FIONREAD, &iocount),(int)iocount)
  77. #else
  78. #define input_pending() bizarre
  79. #endif /* lint */
  80. EXT long iocount INIT(0);
  81.  
  82. #else /* FIONREAD */
  83.  
  84. #ifdef RDCHK
  85. #define input_pending() (rdchk(0) > 0)        /* boolean only */
  86. #else /*  RDCHK */
  87.  
  88. EXT int devtty INIT(0);
  89. EXT bool is_input INIT(FALSE);
  90. EXT char pending_ch INIT(0);
  91. #ifndef lint
  92. #define input_pending() (is_input || (is_input=read(devtty,&pending_ch,1)))
  93. #else
  94. #define input_pending() bizarre
  95. #endif /* lint */
  96. #endif /*  RDCHK */
  97. #endif /* FIONREAD */
  98. #else /* PENDING */
  99. #define read_tty(addr,size) read(0,addr,size)
  100. #define input_pending() (FALSE)
  101. #endif /* PENDING */
  102. #endif /* PUSHBACK */
  103.  
  104. /* stuff wanted by terminal mode diddling routines */
  105.  
  106. #ifdef TERMIO
  107. EXT struct termio _tty, _oldtty;
  108. #else
  109. EXT struct sgttyb _tty;
  110. EXT int _res_flg INIT(0);
  111. #endif
  112.  
  113. EXT int _tty_ch INIT(2);
  114. EXT bool bizarre INIT(FALSE);            /* do we need to restore terminal? */
  115.  
  116. /* terminal mode diddling routines */
  117.  
  118. #ifdef TERMIO
  119.  
  120. #define crmode() ((bizarre=1),_tty.c_lflag &=~ICANON,_tty.c_cc[VMIN] = 1,ioctl(_tty_ch,TCSETAF,&_tty))
  121. #define nocrmode() ((bizarre=1),_tty.c_lflag |= ICANON,_tty.c_cc[VEOF] = CEOF,stty(_tty_ch,&_tty))
  122. #define echo()     ((bizarre=1),_tty.c_lflag |= ECHO, ioctl(_tty_ch, TCSETA, &_tty))
  123. #define noecho() ((bizarre=1),_tty.c_lflag &=~ECHO, ioctl(_tty_ch, TCSETA, &_tty))
  124. #define nl()     ((bizarre=1),_tty.c_iflag |= ICRNL,_tty.c_oflag |= ONLCR,ioctl(_tty_ch, TCSETAW, &_tty))
  125. #define nonl()     ((bizarre=1),_tty.c_iflag &=~ICRNL,_tty.c_oflag &=~ONLCR,ioctl(_tty_ch, TCSETAW, &_tty))
  126. #define    savetty() (ioctl(_tty_ch, TCGETA, &_oldtty),ioctl(_tty_ch, TCGETA, &_tty))
  127. #define    resetty() ((bizarre=0),ioctl(_tty_ch, TCSETAF, &_oldtty))
  128. #define unflush_output()
  129.  
  130. #else
  131.  
  132. #define raw()     ((bizarre=1),_tty.sg_flags|=RAW, stty(_tty_ch,&_tty))
  133. #define noraw()     ((bizarre=1),_tty.sg_flags&=~RAW,stty(_tty_ch,&_tty))
  134. #define crmode() ((bizarre=1),_tty.sg_flags |= CBREAK, stty(_tty_ch,&_tty))
  135. #define nocrmode() ((bizarre=1),_tty.sg_flags &= ~CBREAK,stty(_tty_ch,&_tty))
  136. #define echo()     ((bizarre=1),_tty.sg_flags |= ECHO, stty(_tty_ch, &_tty))
  137. #define noecho() ((bizarre=1),_tty.sg_flags &= ~ECHO, stty(_tty_ch, &_tty))
  138. #define nl()     ((bizarre=1),_tty.sg_flags |= CRMOD,stty(_tty_ch, &_tty))
  139. #define nonl()     ((bizarre=1),_tty.sg_flags &= ~CRMOD, stty(_tty_ch, &_tty))
  140. #define    savetty() (gtty(_tty_ch, &_tty), _res_flg = _tty.sg_flags)
  141. #define    resetty() ((bizarre=0),_tty.sg_flags = _res_flg, stty(_tty_ch, &_tty))
  142. #ifdef LFLUSHO
  143. #ifndef lint
  144. EXT int lflusho INIT(LFLUSHO);
  145. #else
  146. EXT long lflusho INIT(LFLUSHO);
  147. #endif /* lint */
  148. #define unflush_output() (ioctl(_tty_ch,TIOCLBIC,&lflusho))
  149. #else
  150. #define unflush_output()
  151. #endif /* LFLUSHO */
  152. #endif /* TERMIO */
  153.  
  154. #ifdef TIOCSTI
  155. #ifdef lint
  156. #define forceme(c) ioctl(_tty_ch,TIOCSTI,Null(long*))    /* ghad! */
  157. #else
  158. #define forceme(c) ioctl(_tty_ch,TIOCSTI,c) /* pass character in " " */
  159. #endif /* lint */
  160. #else
  161. #define forceme(c)
  162. #endif
  163.  
  164. /* termcap stuff */
  165.  
  166. /*
  167.  * NOTE: if you don't have termlib you'll either have to define these strings
  168.  *    and the tputs routine, or you'll have to redefine the macros below
  169.  */
  170.  
  171. #ifdef HAVETERMLIB
  172. EXT char *BC INIT(Nullch);        /* backspace character */
  173. EXT char *UP INIT(Nullch);        /* move cursor up one line */
  174. EXT char *CR INIT(Nullch);        /* get to left margin, somehow */
  175. EXT char *VB INIT(Nullch);        /* visible bell */
  176. EXT char *CL INIT(Nullch);        /* home and clear screen */
  177. EXT char *CE INIT(Nullch);        /* clear to end of line */
  178. #if defined(CLEAREOL) || defined(USETHREADS)
  179. EXT char *CM INIT(Nullch);        /* cursor motion */
  180. EXT char *HO INIT(Nullch);        /* home cursor */
  181. #endif
  182. #ifdef CLEAREOL
  183. EXT char *CD INIT(Nullch);        /* clear to end of display */
  184. #endif /* CLEAREOL */
  185. EXT char *SO INIT(Nullch);        /* begin standout mode */
  186. EXT char *SE INIT(Nullch);        /* end standout mode */
  187. EXT int SG INIT(0);        /* blanks left by SO and SE */
  188. EXT char *US INIT(Nullch);        /* start underline mode */
  189. EXT char *UE INIT(Nullch);        /* end underline mode */
  190. EXT char *UC INIT(Nullch);        /* underline a character, if that's how it's done */
  191. EXT int UG INIT(0);        /* blanks left by US and UE */
  192. EXT bool AM INIT(FALSE);        /* does terminal have automatic margins? */
  193. EXT bool XN INIT(FALSE);        /* does it eat 1st newline after automatic wrap? */
  194. EXT char PC INIT(0);        /* pad character for use by tputs() */
  195. EXT long ospeed INIT(0);    /* terminal output speed, for use by tputs() */
  196. EXT int LINES INIT(0), COLS INIT(0);    /* size of screen */
  197. EXT int just_a_sec INIT(960);            /* 1 sec at current baud rate */
  198.                     /* (number of nulls) */
  199.  
  200. /* define a few handy macros */
  201.  
  202. #define backspace() tputs(BC,0,putchr) FLUSH
  203. #define clear() tputs(CL,LINES,putchr) FLUSH
  204. #define erase_eol() tputs(CE,1,putchr) FLUSH
  205. #ifdef CLEAREOL
  206. #define clear_rest() tputs(CD,LINES,putchr) FLUSH
  207. #define maybe_eol() if(erase_screen&&can_home_clear)tputs(CE,1,putchr) FLUSH
  208. #endif /* CLEAREOL */
  209. #define underline() tputs(US,1,putchr) FLUSH
  210. #define un_underline() tputs(UE,1,putchr) FLUSH
  211. #define underchar() tputs(UC,0,putchr) FLUSH
  212. #define standout() tputs(SO,1,putchr) FLUSH
  213. #define un_standout() tputs(SE,1,putchr) FLUSH
  214. #define up_line() tputs(UP,1,putchr) FLUSH
  215. #define carriage_return() tputs(CR,1,putchr) FLUSH
  216. #define dingaling() tputs(VB,1,putchr) FLUSH
  217. #else
  218.   ????????        /* up to you */
  219. #endif
  220.  
  221. EXT int page_line INIT(1);    /* line number for paging in print_line (origin 1) */
  222.  
  223. void    term_init ANSI((void));
  224. void    term_set ANSI((char *));
  225. #ifdef PUSHBACK
  226. void    pushchar ANSI((char));
  227. void    mac_init ANSI((char *));
  228. void    mac_line ANSI((char *,char *,int));
  229. void    show_macros ANSI((void));
  230. #endif
  231. char    putchr ANSI((char));    /* routine for tputs to call */
  232. bool    finish_command ANSI((int));
  233. void    eat_typeahead ANSI((void));
  234. void    settle_down ANSI((void));
  235. #ifndef read_tty
  236.     int        read_tty ANSI((char *,int));
  237. #endif
  238. void    underprint ANSI((char *));
  239. #ifdef NOFIREWORKS
  240.     void    no_sofire ANSI((void));
  241.     void    no_ulfire ANSI((void));
  242. #endif
  243. void    getcmd ANSI((char *));
  244. int    get_anything ANSI((void));
  245. void    in_char ANSI((char *,char));
  246. int    print_lines ANSI((char *,int));
  247. void    page_init ANSI((void));
  248. void    pad ANSI((int));
  249. void    printcmd ANSI((void));
  250. void    rubout ANSI((void));
  251. void    reprint ANSI((void));
  252. #if defined(CLEAREOL) || defined(USETHREADS)
  253. void    home_cursor ANSI((void));
  254. #endif
  255. #ifdef USETHREADS
  256. void    goto_line ANSI((int,int));
  257. #endif
  258. #ifdef SIGWINCH
  259. int    winch_catcher ANSI((void));
  260. #endif /* SIGWINCH */
  261.