m1b@rayssd.ray.com (M. Joseph Barone) (06/13/88)
Can anyone help me with reverse scrolling using SMG routines? The problem
that I am having is that once a portion of text scrolls off the screen,
reverse scrolling does not restore the text -- I just get blank lines.
I am including pertinent portions of my code. I am using VAXC V2.3 on
VMS V4.7. Thanks.
/***************************** CUT HERE ********************************/
#include descrip
#include stdio
#include ssdef
#include smgdef
#define MAXLEN 0xff
main()
{
FILE *fpi; /* SYSMSG.ANC pointer */
int display;
int status, i;
unsigned pid; /* pasteboard IDs */
unsigned _erase; /* erase flag */
unsigned direction = SMG$M_DOWN; /* scrolling direction */
static int row, col, lines;
static int height, width;
char text[MAXLEN];
$DESCRIPTOR(TEXT, text);
/* create scrolling region pasteboard */
status = smg$create_pasteboard(&pid, 0, &height, &width, 0);
if ((status & 1) != SS$_NORMAL) exit(status);
fpi = fopen("SYS$SCRATCH:TEST.C", "r"); /* open test file */
lines = 1;
while(fgets(text, MAXLEN - 1, fpi) != NULL)
lines++;
fseek(fpi, 0, 0); /* rewind file */
status = smg$create_virtual_display(&lines, &width, &display, 0, 0, 0);
if ((status & 1) != SS$_NORMAL) exit(status);
_erase = TRUE;
row = 1; col = 1;
while (fgets(text, MAXLEN - 1, fpi) != NULL) {
TEXT.dsc$w_length = strlen(text);
status = smg$put_chars(&display, &TEXT, &row, &col,
&_erase, 0, 0, 0);
if ((status & 1) != SS$_NORMAL) exit(status);
row++;
}
row = 1; col = 1;
status = smg$paste_virtual_display(&display, &pid, &row, &col);
if ((status & 1) != SS$_NORMAL) exit(status);
row = 10;
status = smg$scroll_display_area(&display, 0, 0, 0, 0, 0, &row);
if ((status & 1) != SS$_NORMAL) exit(status);
status = smg$scroll_display_area(&display, 0, 0, 0, 0, &direction,
&row);
for (i = 0; i < 15; i++)
status = smg$scroll_display_area(&display, 0, 0, 0, 0, 0, 0);
for (i = 0; i < 10; i++) {
status = smg$scroll_display_area(&display, 0, 0, 0, 0,
&direction, 0);
}
}
--
Joe Barone ---------------------------> m1b@rayssd.RAY.COM
{cbosgd, gatech, ihnp4, linus, mirror, uiucdcs}!rayssd!m1b
Always wit' da negative waves, Moriarty! Always wit' da negative waves!