Path: utzoo!attcan!uunet!husc6!ukma!rutgers!gatech!rayssd!m1b From: m1b@rayssd.ray.com (M. Joseph Barone) Newsgroups: comp.os.vms Subject: Scrolling using SMGs Message-ID: <2726@rayssd.ray.com> Date: 13 Jun 88 15:10:59 GMT Sender: m1b@rayssd.ray.com (M. Joseph Barone @ Raytheon Company, Portsmouth RI) Organization: Raytheon Company, Portsmouth RI Lines: 69 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!