home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / AP / JED / JED097-1.TAR / jed / src / vterm.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-12  |  3.2 KB  |  176 lines

  1. /*
  2.  *  Copyright (c) 1992, 1994 John E. Davis  (davis@amy.tch.harvard.edu)
  3.  *  All Rights Reserved.
  4.  */
  5. #include <stdio.h>
  6. #include "config.h"
  7. #include "buffer.h"
  8. #include "screen.h"
  9. #include "window.h"
  10. #include "vterm.h"
  11.  
  12. int Scroll_By_Copying;
  13.  
  14. static void sbc_do_copy(register unsigned short *dst, register unsigned short *src, int n)
  15. {
  16.    register unsigned short *smax = src + n;
  17.    while (src < smax) *dst++ = *src++;
  18. }
  19.  
  20. void execute_vscroll_down(int r1, int r2, int num)
  21. {
  22.    unsigned short *old;
  23.    int r, rp1;
  24.    int sbc = Scroll_By_Copying, n = JWindow->width;
  25.  
  26.    r1--; r2--;
  27.    for (r = r2; r >= r1 + num; r--)
  28.      {
  29.     rp1 = r - num;
  30.     JScreen[r].n = JScreen[rp1].n;
  31.     JScreen[r].hi0 = JScreen[rp1].hi0;
  32.     JScreen[r].hi1 = JScreen[rp1].hi1;
  33.     old = JScreen[r].old;
  34.     JScreen[r].old = JScreen[rp1].old;
  35.     JScreen[rp1].old = old;
  36.     
  37.     if (sbc)
  38.       {
  39.          sbc_do_copy(old, JScreen[r].old, n);
  40.       }
  41.      }
  42.    
  43.    for (r = r1; r < r1 + num; r++)
  44.      {
  45.     JScreen[r].line = NULL;
  46.     JScreen[r].flags = sbc;
  47.     
  48.     if (sbc == 0)
  49.       {
  50.          JScreen[r].n = 0;
  51.          JScreen[r].hi0 = NULL;
  52.          JScreen[r].hi1 = NULL;
  53.          blank_line(r);
  54.       }
  55.      }
  56. }
  57.  
  58. void vscroll_down(int r1, int r2, int num)
  59. {
  60.    int r, rp1;
  61.  
  62.    r1--; r2--;
  63.    for (r = r2; r >= r1 + num; r--)
  64.      {
  65.     rp1 = r - num;
  66.     JScreen[r].line = JScreen[rp1].line;
  67.     JScreen[r].flags = JScreen[rp1].flags;
  68.      }
  69. }
  70.  
  71. void execute_vscroll_up (int r1, int r2, int num)
  72. {
  73.    unsigned short *old;
  74.    register int r, rp1;
  75.  
  76.    int sbc = Scroll_By_Copying, n = JWindow->width;
  77.    r1--; r2--;
  78.    
  79.    for (r = r1; r <= r2 - num; r++)
  80.      {
  81.     rp1 = r + num;
  82.     old = JScreen[r].old;
  83.     JScreen[r].old = JScreen[rp1].old;
  84.     JScreen[rp1].old = old;
  85.     JScreen[r].hi0 = JScreen[rp1].hi0;
  86.     JScreen[r].hi1 = JScreen[rp1].hi1;
  87.     JScreen[r].n = JScreen[rp1].n;
  88.     
  89.     if (sbc)
  90.       {
  91.          sbc_do_copy(old, JScreen[r].old, n);
  92.       }
  93.      }
  94.  
  95.    for (r = r2 - num + 1; r <= r2; r++)
  96.      {
  97.     JScreen[r].line = NULL;
  98.     JScreen[r].flags = sbc;
  99.     if (sbc == 0)
  100.       {
  101.          JScreen[r].n = 0;
  102.          JScreen[r].hi0 = 0;
  103.          JScreen[r].hi1 = 0;
  104.          blank_line(r);
  105.       }
  106.      }
  107. }
  108.  
  109. void vscroll_up(int r1, int r2, int num)
  110. {
  111.    register int r, rp1;
  112.    
  113.    r1--; r2--;
  114.    
  115.    for (r = r1; r <= r2 - num; r++)
  116.      {
  117.     rp1 = r + num;
  118.     JScreen[r].line = JScreen[rp1].line;
  119.     JScreen[r].flags = JScreen[rp1].flags;
  120.      }
  121. }
  122.  
  123. void vins(char ch)
  124. {
  125.    int r;
  126.    unsigned short *p, *p1;
  127.    unsigned short *pins;
  128.  
  129.     r = Screen_Row - 1;
  130.     if (ch > ' ') JScreen[r].n += 1;
  131.     pins = JScreen[r].old + Screen_Col - 1;
  132.     p = JScreen[r].old + JWindow->width - 1;
  133.     while(p > pins)
  134.       {
  135.      p1 = p - 1;
  136.      *p = *p1;
  137.          p = p1;
  138.       }
  139.     *p = ch;
  140. }
  141.  
  142. void vdel()
  143. {
  144.    int r;
  145.    register unsigned short *p, *p1, *pmax;
  146.  
  147.     r = Screen_Row - 1;
  148.     p = JScreen[r].old + Screen_Col - 1;
  149.     pmax = JScreen[r].old + JWindow->width - 1;
  150.     while(p < pmax)
  151.       {
  152.      p1 = p + 1;
  153.      *p = *p1;
  154.      p = p1;
  155.       }
  156.     *p = ' ';
  157. }
  158.  
  159. void vdel_eol()
  160. {
  161.    int r;
  162.    register unsigned short *p, *pmax;
  163.    
  164.    r = Screen_Row - 1;
  165.    p = JScreen[r].old + Screen_Col - 1;
  166.    pmax = JScreen[r].old + JWindow->width;
  167.    /* MEMSET(p, ' ', JWindow->width - Screen_Col + 1); */
  168.    
  169.     while(p < pmax)
  170.       {
  171.           *p = ' ';
  172.           p++;
  173.       }
  174.     *p = ' '; 
  175. }
  176.