home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume7 / rvi / part2 / rv_fast.c < prev    next >
Encoding:
C/C++ Source or Header  |  1986-11-30  |  2.8 KB  |  162 lines

  1. #include "rv.h"
  2.  
  3. #ifndef USG
  4. extern int _putchar();
  5. static char *rCM, *rSC, *rRC, *rCS, *rAL, *rDL, *rSR;
  6. static char tcbuf[256];
  7. static char buf[4096];
  8. #endif
  9.  
  10. /*
  11.  * Fast versions of curses routines
  12.  */
  13.  
  14. rv_finit()
  15. {
  16. #ifndef USG
  17.     char *s;
  18.     extern char *tgetstr();
  19.  
  20.     if (!ttytype || *ttytype == '\0')
  21.         panic("Please set TERM to your terminal type.\n");
  22.     s = tcbuf;
  23.     tgetent(buf, ttytype);
  24.     rSC = tgetstr("sc", &s);
  25.     rCM = tgetstr("cm", &s);
  26.     rRC = tgetstr("rc", &s);
  27.     rCS = tgetstr("cs", &s);
  28.     rAL = tgetstr("al", &s);
  29.     rDL = tgetstr("dl", &s);
  30.     rSR = tgetstr("sr", &s);
  31.  
  32.     if (!rCM)
  33.         panic("Your terminal needs cursor motion capability");
  34. #endif
  35. }
  36.  
  37.  
  38. static
  39. unchange(win)
  40. /*
  41.  * Reset window so it appears not to have changed
  42.  */
  43. WINDOW *win;
  44. {
  45.     register INT    y, maxy;
  46.  
  47.     maxy = win->_maxy;
  48.     for (y=0; y < maxy; ++y)
  49.         win->_firstch[y] = _NOCHANGE;
  50. }
  51.  
  52.  
  53. rv_fscroll(cnt)
  54. /*
  55.  * Fast scroll.  Cursor is assumed to be in the lower left corner.
  56.  */
  57. INT cnt;
  58. {
  59. #ifdef USG
  60.     for (; cnt > 0; --cnt) {
  61.         if (scroll(stdscr) == ERR)
  62.             return ERR;
  63.     }
  64. #else
  65.     refresh();
  66.     for (; cnt > 0; --cnt) {
  67.         if (scroll(stdscr) == ERR)
  68.             return ERR;
  69.         if (scroll(curscr) == ERR)
  70.             return ERR;
  71.         curscr->_cury++;
  72.     }
  73.     unchange(stdscr);
  74. #endif
  75.     return OK;
  76. }
  77.  
  78.  
  79. rv_finsertln(cnt)
  80. /*
  81.  * Fast line insert.
  82.  */
  83. INT cnt;
  84. {
  85. #ifdef USG
  86.     for (; cnt > 0; --cnt) {
  87.         if (winsertln(stdscr) == ERR)
  88.             return ERR;
  89.     }
  90. #else
  91.     INT i;
  92.  
  93.     refresh();
  94.     if (CURLINE == 0 && rSR)
  95.         for (i=0; i < cnt; ++i)
  96.             tputs(rSR, 1, _putchar);
  97.     else if (rAL) 
  98.         for (i=0; i < cnt; ++i)
  99.             tputs(rAL, cnt - CURLINE, _putchar);
  100.     else if (rCS) {
  101.         tputs(rSC, 1, _putchar); /* Stupid chng scroll homes cursor */
  102.         tputs(tgoto(rCS, LINES-1, CURLINE), 1, _putchar);
  103.         tputs(rRC, 1, _putchar);
  104.         for (i=0; i < cnt; ++i)
  105.             tputs(rSR, 1, _putchar);
  106.         tputs(tgoto(rCS, LINES-1, 0), 1, _putchar);
  107.         tputs(rRC, 1, _putchar);
  108.     } else
  109.         panic("Need insert line capability");
  110.  
  111.     for (; cnt > 0; --cnt) {
  112.         if (winsertln(stdscr) == ERR)
  113.             return ERR;
  114.         if (winsertln(curscr) == ERR)
  115.             return ERR;
  116.     }
  117.     unchange(stdscr);
  118. #endif
  119.     return OK;
  120. }
  121.  
  122.  
  123. rv_fdeleteln(cnt)
  124. /*
  125.  * Fast line delete.
  126.  */
  127. INT cnt;
  128. {
  129. #ifdef USG
  130.     for (; cnt > 0; --cnt) {
  131.         if (wdeleteln(stdscr) == ERR)
  132.             return ERR;
  133.     }
  134. #else
  135.     INT i;
  136.  
  137.     refresh();
  138.     if (rDL)
  139.         for (i=0; i < cnt; ++i)
  140.             tputs(rDL, cnt-CURLINE, _putchar);
  141.     else if (rCS) {
  142.         tputs(rSC, 1, _putchar); /* Stupid scroll homes cursor */
  143.         tputs(tgoto(rCS, LINES-1, CURLINE), 1, _putchar);
  144.         tputs(tgoto(rCM, 0, LINES-1), 1, _putchar);
  145.         for (i=0; i < cnt; ++i)
  146.             tputs("\n", 1, _putchar);
  147.         tputs(tgoto(rCS, LINES-1, 0), 1, _putchar);
  148.         tputs(rRC, 1, _putchar);
  149.     } else
  150.         panic("Need delete line capability");
  151.     for (; cnt > 0; --cnt) {
  152.         if (wdeleteln(stdscr) == ERR)
  153.             return ERR;
  154.         if (wdeleteln(curscr) == ERR)
  155.             return ERR;
  156.     }
  157.     unchange(stdscr);
  158. #endif
  159.  
  160.     return OK;
  161. }
  162.