This is vterm.c in view mode; [Download] [Up]
/* * Copyright (c) 1992, 1995 John E. Davis (davis@space.mit.edu) * All Rights Reserved. */ #include <config.h> #include <stdio.h> #include "buffer.h" #include "screen.h" #include "window.h" #include "vterm.h" int Scroll_By_Copying; static void sbc_do_copy(register unsigned short *dst, register unsigned short *src, int n) { register unsigned short *smax = src + n; while (src < smax) *dst++ = *src++; } void execute_vscroll_down(int r1, int r2, int num) { unsigned short *old; int r, rp1; int sbc = Scroll_By_Copying, n = JWindow->width; r1--; r2--; for (r = r2; r >= r1 + num; r--) { rp1 = r - num; JScreen[r].n = JScreen[rp1].n; JScreen[r].hi0 = JScreen[rp1].hi0; JScreen[r].hi1 = JScreen[rp1].hi1; old = JScreen[r].old; JScreen[r].old = JScreen[rp1].old; JScreen[rp1].old = old; if (sbc) { sbc_do_copy(old, JScreen[r].old, n); } } for (r = r1; r < r1 + num; r++) { JScreen[r].line = NULL; JScreen[r].flags = sbc; if (sbc == 0) { JScreen[r].n = 0; JScreen[r].hi0 = NULL; JScreen[r].hi1 = NULL; blank_line(r); } } } void vscroll_down(int r1, int r2, int num) { int r, rp1; r1--; r2--; for (r = r2; r >= r1 + num; r--) { rp1 = r - num; JScreen[r].line = JScreen[rp1].line; JScreen[r].flags = JScreen[rp1].flags; } } void execute_vscroll_up (int r1, int r2, int num) { unsigned short *old; register int r, rp1; int sbc = Scroll_By_Copying, n = JWindow->width; r1--; r2--; for (r = r1; r <= r2 - num; r++) { rp1 = r + num; old = JScreen[r].old; JScreen[r].old = JScreen[rp1].old; JScreen[rp1].old = old; JScreen[r].hi0 = JScreen[rp1].hi0; JScreen[r].hi1 = JScreen[rp1].hi1; JScreen[r].n = JScreen[rp1].n; if (sbc) { sbc_do_copy(old, JScreen[r].old, n); } } for (r = r2 - num + 1; r <= r2; r++) { JScreen[r].line = NULL; JScreen[r].flags = sbc; if (sbc == 0) { JScreen[r].n = 0; JScreen[r].hi0 = 0; JScreen[r].hi1 = 0; blank_line(r); } } } void vscroll_up(int r1, int r2, int num) { register int r, rp1; r1--; r2--; for (r = r1; r <= r2 - num; r++) { rp1 = r + num; JScreen[r].line = JScreen[rp1].line; JScreen[r].flags = JScreen[rp1].flags; } } void vins(char ch) { int r; unsigned short *p, *p1; unsigned short *pins; r = Screen_Row - 1; if (ch > ' ') JScreen[r].n += 1; pins = JScreen[r].old + Screen_Col - 1; p = JScreen[r].old + JWindow->width - 1; while(p > pins) { p1 = p - 1; *p = *p1; p = p1; } *p = ch; } void vdel() { int r; register unsigned short *p, *p1, *pmax; r = Screen_Row - 1; p = JScreen[r].old + Screen_Col - 1; pmax = JScreen[r].old + JWindow->width - 1; while(p < pmax) { p1 = p + 1; *p = *p1; p = p1; } *p = ' '; } void vdel_eol() { int r; register unsigned short *p, *pmax; r = Screen_Row - 1; p = JScreen[r].old + Screen_Col - 1; pmax = JScreen[r].old + JWindow->width; /* MEMSET(p, ' ', JWindow->width - Screen_Col + 1); */ while(p < pmax) { *p = ' '; p++; } *p = ' '; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.