|
- /* VVIEW.C - DRAWING FOR THE C64 VIM CLONE: SCROLL, ROWS, STATUS ROW. */
EXTERN CHAR *BFR;
EXTERN UNSIGNED BLEN;
EXTERN UNSIGNED LPTR[];
EXTERN INT NLINES, CY, CX, TOP, LEFTCOL, MODE, DIRTY;
EXTERN CHAR *NOTE;
EXTERN CHAR FNAME[];
EXTERN CHAR YBUF[];
EXTERN INT YLEN, YOK;
EXTERN INT REDRAW;
/* DECIMAL OF V INTO T AT P, RETURNS THE POSITION AFTER IT */
DNUM(T, P, V)
CHAR *T;
INT P, V;
Û
CHAR D[6];
INT N;
N = 0;
IF (V == 0) Û
T[P++] = 48;
RETURN P;
Ý
WHILE (V > 0 && N < 5) Û
D[N++] = 48 + (V % 10);
V = V / 10;
Ý
WHILE (N > 0) T[P++] = D[--N];
RETURN P;
Ý
/* BRING THE CURSOR BACK INTO VIEW */
SCROLL()
Û
IF (CY < TOP) TOP = CY;
IF (CY > TOP + 23) TOP = CY - 23;
IF (TOP < 0) TOP = 0;
IF (CX < LEFTCOL) LEFTCOL = CX;
IF (CX > LEFTCOL + 39) LEFTCOL = CX - 39;
IF (LEFTCOL < 0) LEFTCOL = 0;
RETURN 0;
Ý
/* THE STATUS ROW: MESSAGE, MODE OR NAME ON THE LEFT; MODIFIED FLAG; LINE/TOTAL */
DSTAT()
Û
CHAR T[40];
CHAR *S;
INT I, N, P;
IF (NOTE != 0) S = NOTE;
ELSE IF (MODE) S = "-- INSERT --";
ELSE IF (FNAME[0] == 0) S = "[NO NAME]";
ELSE S = FNAME;
N = 0;
FOR (I = 0; S[I] && I < 26; I++) T[N++] = S[I];
WHILE (N < 28) T[N++] = 32;
IF (DIRTY) T[N++] = 43; /* + */
ELSE T[N++] = 32;
WHILE (N < 31) T[N++] = 32;
P = DNUM(T, N, CY + 1);
T[P++] = 47; /* / */
P = DNUM(T, P, NLINES);
MLROW((UNSIGNED) T, P, 1984, 255, 128); /* ROW 24 = $0400 + 960, REVERSE */
RETURN 0;
Ý
/* WHAT THE SCREEN SHOWED LAST TIME, SO A KEY THAT ONLY MOVES THE CURSOR
REPAINTS TWO ROWS INSTEAD OF 24 */
INT LTOP, LLEFT, LCY;
/* REPAINT WHAT CHANGED, THEN THE STATUS ROW. REDRAW IS RAISED BY THE EDITING
CODE: 1 = THE CURSOR LINE CHANGED, 2 = LINES MOVED, REPAINT EVERYTHING.
(NO DOUBLE BAR: POWER C CANNOT TYPE IT, SEE ÎÏÔÅÓ.MD) */
DALL()
Û
INT CROW, CCOL, OROW, FULL;
CROW = CY - TOP;
CCOL = CX - LEFTCOL;
FULL = 0;
IF (REDRAW == 2) FULL = 1;
IF (TOP != LTOP) FULL = 1;
IF (LEFTCOL != LLEFT) FULL = 1;
IF (FULL) Û
MLSCR(0, 23, CROW, CCOL); /* ONE CALL PAINTS 24 ROWS */
Ý ELSE Û
OROW = LCY - TOP; /* TAKE THE CURSOR OFF ITS OLD ROW */
IF (OROW != CROW && OROW >= 0 && OROW < 24) MLSCR(OROW, OROW, CROW, CCOL);
MLSCR(CROW, CROW, CROW, CCOL);
Ý
LTOP = TOP;
LLEFT = LEFTCOL;
LCY = CY;
REDRAW = 0;
DSTAT();
RETURN 0;
Ý
/* END OF VVIEW.C */
|