home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / heath / jmodz100.lbr / H19.CQ / H19.C
Text File  |  1985-05-20  |  5KB  |  306 lines

  1. /* terminal control for h19 */
  2. /* after Trm.c */
  3. /* K. Mitchum 6/84 */
  4.  
  5. #include "tm.h"
  6. #include "jove.h"
  7.  
  8.  
  9.  
  10. /* define BIGH19 if using 25 lines */
  11. #define BIGH19
  12.  
  13.  
  14.  
  15. #define NCOLS 80
  16.  
  17. /* local equates for h19 escape sequences */
  18.  
  19.  
  20. #ifdef BIGH19
  21.  
  22. /* enable 25th line, restart block cursor, no autolf, no autocr */
  23.  
  24. #define H19INIT "\033x1\033x4\033y5\033y8\033y9\033x4\033E"
  25. #define H19EXIT "\033y1\033y4\033E"
  26. #define LINES 25
  27. #else
  28.  
  29. /* same as above, disable 25th line */
  30.  
  31. #define H19INIT "\033y1\033x4\033y5\033y8\033y9\033E"
  32. #define H19EXIT "\033y1\033y4\033E"
  33. #define LINES 24
  34. #endif
  35.  
  36.  
  37. #define REVOFF "\033q"        /* reverse video off */
  38. #define REVON "\033p"        /* reverse video on */
  39. #define INSLN "\033L"        /* insert line */
  40. #define DELLN "\033M"        /* delete line */
  41. #define INSCHON "\033@"        /* enter insert character mode */
  42. #define INSCHOFF "\033O"    /* exit insert character mode */
  43. #define CURFWD "\033C"        /* cursor forward */
  44. #define CURDWN "\033B"        /* cursor down */
  45. #define CURUP "\033A"        /* cursor up */
  46. #define CURPOS "\033Y%c%c"    /* cursor positioning sequence */
  47. #define CURHOME "\033H"        /* cursor home, non destructive */
  48. #define KILLN "\033K"        /* kill line */
  49. #define DELCHR "\033N"        /* delete char */
  50. #define CLRSCN "\033E"        /* erase screen and home */
  51. #define BS 010            /* backspace char */
  52.  
  53.  
  54. /* padding constants */
  55.  
  56. #define KILLNPAD 0.05
  57. #define INSLNPAD 0.25
  58. #define DELLNPAD 0.25
  59. #define INSCHPAD 0.05
  60. #define CURPAD 0.01
  61. #define INITPAD 0.05
  62. #define DELPAD 0.05
  63. #define CLRSCNPAD 1.00
  64. #define REVPAD 0.10
  65.  
  66.  
  67. static int curX, curY, Baud, DesHL, CurHL;
  68.  
  69. static float BaudFactor;
  70.  
  71. #ifdef VAX
  72. static
  73. enum IDmode { m_insert = 1, m_overwrite = 0} DesiredMode;
  74.  
  75. static
  76. enum Vmode { v_regular = 1, v_reverse = 0} Vimage;
  77. #else
  78. int DesiredMode, Vimage;
  79. #define m_insert    1
  80. #define    m_overwrite    0
  81. #define v_regular    1
  82. #define v_reverse    0
  83. #endif
  84.  
  85. static
  86. INSmode (new)
  87. #ifdef VAX
  88. enum IDmode new;
  89. #else
  90. int new;
  91. #endif
  92. {
  93.     DesiredMode = new;
  94. }
  95.  
  96. static HLmode (new)
  97. {
  98.     DesHL = new;
  99. }
  100.  
  101.  
  102. static SetHL (OverRide)
  103. {
  104.  
  105.  
  106.     register Des = OverRide ? 0 : DesHL;
  107.  
  108.     if (Des == CurHL)
  109.         return;
  110.     if (Vimage == v_reverse)
  111.         printf (Des ? REVOFF : REVON);
  112.     else
  113.         printf (Des ? REVON : REVOFF);
  114.     CurHL = Des;
  115.     pad(1,REVPAD);
  116.  
  117.  
  118. }
  119.  
  120.  
  121. static inslines(n)
  122. {
  123.     SetHL(1);
  124.  
  125.  
  126.     while(n--) {
  127.     printf(INSLN);
  128.     pad(1,INSLNPAD);
  129.     }
  130. }
  131.  
  132. static dellines(n)
  133. {
  134.     SetHL(1);
  135.  
  136.     while(n--) {
  137.     printf(DELLN);
  138.     pad(1,DELLNPAD);
  139.     }
  140. }
  141.  
  142. static writechars(start, end)
  143. register char *start, *end;
  144. {
  145.     int insmode =0;
  146.         
  147.     
  148.     SetHL(0);
  149.     if (DesiredMode == m_insert) {
  150.     printf(INSCHON);
  151.     insmode++;
  152.     }
  153.     while ((start <= end) && ((curY != (LINES -1)) || (curX < (NCOLS)))) {
  154.     pch(*start++);
  155.     curX++;
  156.     }
  157. }
  158.  
  159. static blanks(n)
  160. register int n;
  161. {
  162.     int insmode;
  163.     int len = n;
  164.  
  165.     insmode = 0;
  166.     SetHL(0);
  167.     curX += n;
  168.     if (DesiredMode == m_insert) {
  169.     printf(INSCHON);
  170.     insmode++;
  171.     }
  172.     while(n--) pch(' ');
  173. }
  174.  
  175. static
  176. pad (n, f)
  177. float f; {
  178. return;
  179. }
  180.  
  181. static topos(row,column)
  182. register int row, column;
  183. {
  184.     SetHL(1);
  185.     row++;
  186.     column++;
  187.     if(curX != column || curY != row) {
  188.     if(cur););;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  189.         else if(curX == column -1) printf(CURFWD);
  190.         else if(curY == row +1) printf(CURUP);
  191.         else if(curY == row -1) printf(CURDWN);
  192.         else printf(CURPOS,row+31,column+31);
  193.     }
  194.     else {
  195.         if(row == 1 && column == 1) {
  196.         printf(CURHOME);
  197.         }
  198.         else printf(CURPOS,(row+31)&0x7f,(column+31)&0x7f);
  199.     }
  200.     curX = column;
  201.     curY = row;
  202. /*    pad(1,CURPAD);*/
  203.     }
  204. }
  205.  
  206.  
  207. static init (BaudRate)
  208. {
  209.     BaudFactor = BaudRate / 100.;
  210.     Baud = BaudRate;
  211. /*    MetaFlag++; */
  212. }
  213.  
  214. static reset()
  215. {
  216.     printf(H19INIT);
  217.     curX = curY = 1;
  218.     CurHL = 0;
  219.     DesiredMode = m_overwrite;
  220.     pad(1,INITPAD);
  221.     wipescreen();
  222. }
  223.  
  224. cleanup()
  225. {
  226.     SetHL(1);
  227.     printf(H19EXIT);
  228.     topos(24,1);
  229.     sleep(1);
  230. }
  231.  
  232. static wipeline()
  233. {
  234.     SetHL(1);
  235.     printf(KILLN);
  236.     pad(1,KILLNPAD);
  237. }
  238.  
  239. static wipescreen()
  240. {
  241.     SetHL(1);
  242.  
  243. /*
  244. #ifdef BIGH19
  245.     topos(25,1);
  246.     printf(KILLN);
  247.     topos(1,1);
  248. #endif
  249. */
  250.     printf(CLRSCN);
  251.     pad(1,CLRSCNPAD);
  252. }
  253.     
  254. static delchars(n)
  255. {
  256.     int len = n;
  257.     
  258.     SetHL(1);
  259.     while(n--) printf(DELCHR);
  260.     pad(len,DELPAD);
  261. }
  262.  
  263.  
  264. Trm()
  265. {
  266.     Vimage = v_regular;
  267.  
  268.     tt.t_length = LINES;
  269.     tt.t_INSmode = INSmode;
  270.     tt.t_HLmode = HLmode;
  271.     tt.t_inslines = inslines;
  272.     tt.t_dellines = dellines;
  273.     tt.t_blanks = blanks;
  274.     tt.t_init = init;
  275.     tt.t_cleanup = cleanup;
  276.     tt.t_wipeline = wipeline;
  277.     tt.t_wipescreen = wipescreen;
  278.     tt.t_topos = topos;
  279.     tt.t_reset = reset;
  280.     tt.t_delchars = delchars;
  281.     tt.t_writechars = writechars;
  282.     tt.t_window = NULL;
  283.     reset();
  284.     return(tt.t_length);
  285. }
  286.  
  287.  
  288.  
  289.     
  290.     
  291. pch(c)
  292. {
  293. #ifdef VAX
  294.     Putc(c,&termout);
  295. #else
  296.     write(1,&c,1);
  297. #endif
  298. }
  299.  
  300.  
  301.  
  302. putp(p)
  303. char p;
  304. {
  305.     writechars(&p,&p);
  306.