home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d1xx
/
d166
/
stevie.lha
/
Stevie
/
source
/
updateRealscreen.c
< prev
Wrap
C/C++ Source or Header
|
1988-11-22
|
2KB
|
70 lines
/*
* STEVIE - Simply Try this Editor for VI Enthusiasts
*
* Code Contributions By : Tim Thompson twitch!tjt
* Tony Andrews onecom!wldrdg!tony
* G. R. (Fred) Walter watmath!watcgl!grwalter
*/
#include "stevie.h"
/*
* updateRealscreen
*
* Transfer the contents of Nextscreen to the screen, using Realscreen to avoid
* unnecessary output.
*/
void
updateRealscreen()
{
register char *np = Nextscreen;
register char *rp = Realscreen;
register char *endscreen;
int row = 0, col = 0;
int gorow = -1, gocol = -1;
if (RedrawingDisabled)
return;
if (!MustRedrawScreen && !MustRedrawLine)
return;
if (MustRedrawLine) {
msg("STEVIE internal error: updateRealscreen called");
sleep(5);
}
endscreen = &np[(Rows - 1) * Columns];
outstr(T_CI); /* disable cursor */
for (; np < endscreen; np++, rp++) {
/* If desired screen (contents of Nextscreen) does not */
/* match what's really there, put it there. */
if (*np != *rp) {
/* if we are positioned at the right place, */
/* we don't have to use windgoto(). */
if (gocol != col || gorow != row) {
/*
* If we're just off by one, don't send an entire esc. seq.
* (this happens a lot!)
*/
if (gorow == row && gocol + 1 == col) {
outchar(*(np - 1));
gocol++;
} else
windgoto(gorow = row, gocol = col);
}
outchar(*rp = *np);
gocol++;
}
if (++col >= Columns) {
col = 0;
row++;
}
}
outstr(T_CV); /* enable cursor again */
MustRedrawLine = FALSE;
MustRedrawScreen = FALSE;
}