home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / usr.bin / window / tth19.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-18  |  5.9 KB  |  279 lines

  1. /*
  2.  * Copyright (c) 1983 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * This code is derived from software contributed to Berkeley by
  6.  * Edward Wang at The University of California, Berkeley.
  7.  *
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  * 2. Redistributions in binary form must reproduce the above copyright
  14.  *    notice, this list of conditions and the following disclaimer in the
  15.  *    documentation and/or other materials provided with the distribution.
  16.  * 3. All advertising materials mentioning features or use of this software
  17.  *    must display the following acknowledgement:
  18.  *    This product includes software developed by the University of
  19.  *    California, Berkeley and its contributors.
  20.  * 4. Neither the name of the University nor the names of its contributors
  21.  *    may be used to endorse or promote products derived from this software
  22.  *    without specific prior written permission.
  23.  *
  24.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  25.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  27.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  28.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  29.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  30.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  31.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  32.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  33.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  34.  * SUCH DAMAGE.
  35.  */
  36.  
  37. #ifndef lint
  38. static char sccsid[] = "@(#)tth19.c    3.25 (Berkeley) 6/6/90";
  39. #endif /* not lint */
  40.  
  41. #include "ww.h"
  42. #include "tt.h"
  43. #include "char.h"
  44.  
  45. /*
  46. kb|h19|heath|h19-b|h19b|heathkit|heath-19|z19|zenith:
  47.     cr=^M:nl=^J:bl=^G:al=1*\EL:am:le=^H:bs:cd=\EJ:ce=\EK:
  48.     cl=\EE:cm=\EY%+ %+ :co#80:dc=\EN:dl=1*\EM:do=\EB:
  49.     ei=\EO:ho=\EH:im=\E@:li#24:mi:nd=\EC:as=\EF:ae=\EG:ms:
  50.     ta=^I:pt:sr=\EI:se=\Eq:so=\Ep:up=\EA:vs=\Ex4:ve=\Ey4:
  51.     kb=^h:ku=\EA:kd=\EB:kl=\ED:kr=\EC:kh=\EH:
  52.     kn#8:k1=\ES:k2=\ET:k3=\EU:k4=\EV:k5=\EW:
  53.     l6=blue:l7=red:l8=white:k6=\EP:k7=\EQ:k8=\ER:
  54.     es:hs:ts=\Ej\Ex5\Ex1\EY8%+ \Eo:fs=\Ek\Ey5:ds=\Ey1:
  55. */
  56.  
  57. #define NCOL    80
  58. #define NROW    24
  59.  
  60. #define G (WWM_GRP << WWC_MSHIFT)
  61. short h19_frame[16] = {
  62.     ' ',    '`'|G,    'a'|G,    'e'|G,
  63.     '`'|G,    '`'|G,    'f'|G,    'v'|G,
  64.     'a'|G,    'd'|G,    'a'|G,    'u'|G,
  65.     'c'|G,    't'|G,    's'|G,    'b'|G
  66. };
  67.  
  68. extern struct tt_str *gen_VS;
  69. extern struct tt_str *gen_VE;
  70.  
  71. int h19_msp10c;
  72.  
  73. #define PAD(ms10) { \
  74.     register i; \
  75.     for (i = ((ms10) + 5) / h19_msp10c; --i >= 0;) \
  76.         ttputc('\0'); \
  77. }
  78. #define ICPAD() PAD((NCOL - tt.tt_col) * 1)    /* 0.1 ms per char */
  79. #define ILPAD() PAD((NROW - tt.tt_row) * 10)    /* 1 ms per char */
  80.  
  81. #define H19_SETINSERT(m) ttesc((tt.tt_insert = (m)) ? '@' : 'O')
  82.  
  83. h19_setmodes(new)
  84. register new;
  85. {
  86.     register diff;
  87.  
  88.     diff = new ^ tt.tt_modes;
  89.     if (diff & WWM_REV)
  90.         ttesc(new & WWM_REV ? 'p' : 'q');
  91.     if (diff & WWM_GRP)
  92.         ttesc(new & WWM_REV ? 'F' : 'G');
  93.     tt.tt_modes = new;
  94. }
  95.  
  96. h19_insline(n)
  97. {
  98.     while (--n >= 0) {
  99.         ttesc('L');
  100.         ILPAD();
  101.     }
  102. }
  103.  
  104. h19_delline(n)
  105. {
  106.     while (--n >= 0) {
  107.         ttesc('M');
  108.         ILPAD();
  109.     }
  110. }
  111.  
  112. h19_putc(c)
  113. register char c;
  114. {
  115.     if (tt.tt_nmodes != tt.tt_modes)
  116.         (*tt.tt_setmodes)(tt.tt_nmodes);
  117.     if (tt.tt_insert)
  118.         H19_SETINSERT(0);
  119.     ttputc(c);
  120.     if (++tt.tt_col == NCOL)
  121.         tt.tt_col = NCOL - 1;
  122. }
  123.  
  124. h19_write(p, n)
  125. register char *p;
  126. register n;
  127. {
  128.     if (tt.tt_nmodes != tt.tt_modes)
  129.         (*tt.tt_setmodes)(tt.tt_nmodes);
  130.     if (tt.tt_insert)
  131.         H19_SETINSERT(0);
  132.     ttwrite(p, n);
  133.     tt.tt_col += n;
  134.     if (tt.tt_col == NCOL)
  135.         tt.tt_col = NCOL - 1;
  136. }
  137.  
  138. h19_move(row, col)
  139. register char row, col;
  140. {
  141.     if (tt.tt_row == row) {
  142.         if (tt.tt_col == col)
  143.             return;
  144.         if (col == 0) {
  145.             ttctrl('m');
  146.             goto out;
  147.         }
  148.         if (tt.tt_col == col - 1) {
  149.             ttesc('C');
  150.             goto out;
  151.         }
  152.         if (tt.tt_col == col + 1) {
  153.             ttctrl('h');
  154.             goto out;
  155.         }
  156.     }
  157.     if (tt.tt_col == col) {
  158.         if (tt.tt_row == row + 1) {
  159.             ttesc('A');
  160.             goto out;
  161.         }
  162.         if (tt.tt_row == row - 1) {
  163.             ttctrl('j');
  164.             goto out;
  165.         }
  166.     }
  167.     if (col == 0 && row == 0) {
  168.         ttesc('H');
  169.         goto out;
  170.     }
  171.     ttesc('Y');
  172.     ttputc(' ' + row);
  173.     ttputc(' ' + col);
  174. out:
  175.     tt.tt_col = col;
  176.     tt.tt_row = row;
  177. }
  178.  
  179. h19_start()
  180. {
  181.     if (gen_VS)
  182.         ttxputs(gen_VS);
  183.     ttesc('w');
  184.     ttesc('E');
  185.     tt.tt_col = tt.tt_row = 0;
  186.     tt.tt_insert = 0;
  187.     tt.tt_nmodes = tt.tt_modes = 0;
  188. }
  189.  
  190. h19_end()
  191. {
  192.     if (tt.tt_insert)
  193.         H19_SETINSERT(0);
  194.     if (gen_VE)
  195.         ttxputs(gen_VE);
  196.     ttesc('v');
  197. }
  198.  
  199. h19_clreol()
  200. {
  201.     ttesc('K');
  202. }
  203.  
  204. h19_clreos()
  205. {
  206.     ttesc('J');
  207. }
  208.  
  209. h19_clear()
  210. {
  211.     ttesc('E');
  212. }
  213.  
  214. h19_inschar(c)
  215. register char c;
  216. {
  217.     if (tt.tt_nmodes != tt.tt_modes)
  218.         (*tt.tt_setmodes)(tt.tt_nmodes);
  219.     if (!tt.tt_insert)
  220.         H19_SETINSERT(1);
  221.     ttputc(c);
  222.     if (tt.tt_insert)
  223.         ICPAD();
  224.     if (++tt.tt_col == NCOL)
  225.         tt.tt_col = NCOL - 1;
  226. }
  227.  
  228. h19_delchar(n)
  229. {
  230.     while (--n >= 0)
  231.         ttesc('N');
  232. }
  233.  
  234. h19_scroll_down(n)
  235. {
  236.     h19_move(NROW - 1, 0);
  237.     while (--n >= 0)
  238.         ttctrl('j');
  239. }
  240.  
  241. h19_scroll_up(n)
  242. {
  243.     h19_move(0, 0);
  244.     while (--n >= 0)
  245.         ttesc('I');
  246. }
  247.  
  248. tt_h19()
  249. {
  250.     float cpms = (float) wwbaud / 10000;    /* char per ms */
  251.  
  252.     h19_msp10c = 10 / cpms;            /* ms per 10 char */
  253.     gen_VS = ttxgetstr("vs");
  254.     gen_VE = ttxgetstr("ve");
  255.  
  256.     tt.tt_start = h19_start;
  257.     tt.tt_end = h19_end;
  258.  
  259.     tt.tt_insline = h19_insline;
  260.     tt.tt_delline = h19_delline;
  261.     tt.tt_inschar = h19_inschar;
  262.     tt.tt_delchar = h19_delchar;
  263.     tt.tt_clreol = h19_clreol;
  264.     tt.tt_clreos = h19_clreos;
  265.     tt.tt_clear = h19_clear;
  266.     tt.tt_move = h19_move;
  267.     tt.tt_write = h19_write;
  268.     tt.tt_putc = h19_putc;
  269.     tt.tt_scroll_down = h19_scroll_down;
  270.     tt.tt_scroll_up = h19_scroll_up;
  271.     tt.tt_setmodes = h19_setmodes;
  272.  
  273.     tt.tt_ncol = NCOL;
  274.     tt.tt_nrow = NROW;
  275.     tt.tt_availmodes = WWM_REV|WWM_GRP;
  276.     tt.tt_frame = h19_frame;
  277.     return 0;
  278. }
  279.