Thread View: comp.unix.programmer
2 messages
2 total messages
Started by Nikos B. Troullinos
Wed, 12 Sep 1990 05:16
Can CURSES do a simple scroll?
Author: Nikos B. Troullinos
Date: Wed, 12 Sep 1990 05:16
Date: Wed, 12 Sep 1990 05:16
49 lines
1823 bytes
1823 bytes
Can anyone shed some light in the following perplexing problem?
I am trying to use CURSES in a program where decent scrolling off the
screen is required when the cursor is in the last line and a newline
is echoed (how unusual!)
Compiling with cc under SUN OS 4.1 I get scrolling but also repainting
of the whole screen for each and every scroll! (whether idlok() is there or
not)
Compiling with /usr/5bin/cc (and the corresponding library) things
improve but instead of a simple echoing of a nl/cr, the insert/delete
capabilities of the terminal (vt100) are used and the cursor is sent for
a brief time on the upper left 'home' position. This is very noticeable
at a low baud rate.
Is it too much to ask for curses to behave reasonably and just send a nl/cr?
Or am I missing something really obvious? My little test program follows:
Nikos Troullinos, CIS
Syracuse University
---------------------------------------------------------------------------
#include <curses.h>
#define EOT 0x4
/*
Minimum curses program to make curses do A SIMPLE SCROLLING
under SUN OS 4.1 and with a vt100 terminal setting.
*/
void main()
{
int c;
initscr();
cbreak();
noecho();
nl();
idlok(stdscr, TRUE);
scrollok(stdscr, TRUE);
refresh();
while ((c=getch()) != EOT)
{addch(c);refresh();}
refresh();
endwin();
}
Re: Can CURSES do a simple scroll?
Author: Adam Bryant
Date: Wed, 12 Sep 1990 16:18
Date: Wed, 12 Sep 1990 16:18
69 lines
2518 bytes
2518 bytes
In article <1990Sep12.051641.11113@rodan.acs.syr.edu> nicktrou@rodan.acs.syr.edu (Nikos B. Troullinos) writes:
+
+ Path: bu.edu!rpi!uupsi!rodan.acs.syr.edu!nicktrou
+ From: nicktrou@rodan.acs.syr.edu (Nikos B. Troullinos)
+ Newsgroups: comp.unix.programmer
+ Keywords: curses
+ Date: 12 Sep 90 05:16:41 GMT
+ Organization: Syracuse University, Syracuse, NY
+ Lines: 49
+
+ I am trying to use CURSES in a program where decent scrolling off the
+ screen is required when the cursor is in the last line and a newline
+ is echoed (how unusual!)
+
+ void main()
+ {
+ int c;
+
+ initscr();
+ cbreak();
+ noecho();
+ nl();
+ idlok(stdscr, TRUE);
+ scrollok(stdscr, TRUE);
+ refresh();
+
+ while ((c=getch()) != EOT)
+ {addch(c);refresh();}
+ refresh();
+ endwin();
+ }
Try changing the line:
{addch(c); refresh(); }
to
{
if ((c == '\n') || (c == '\r'))
scroll(stdscr);
else
addch(c);
refresh();
}
I have only made a little use of the scrolling functionality of curses
myself, and have found that it often makes mistakes, such as when you
scroll up a line that has the same characters on the line about, it
forgets to redraw those characters during the scroll.
[I get around that by redrawing the entire screen all over again in
memory and then issuing a refresh(). The way to do that is to use:
move(0, 0);
clrtobot();
in place of 'clear()'. Only use 'clear()' when you absolutely know
that the screen will be greatly changed, since this tremendously
increased display speed]
Hope this correctly answers your question.
adam
ps. Now, if only curses would implement backward scrolling, my built
in pager would be really efficient.
--
Adam Bryant INTERNET: adb@cs.bu.edu
Conquer Hack'n'Slasher BITNET: adb@buenga
list: conquer-news-request@cs.bu.edu UUCP: ...!harvard!bu-cs!adb
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads