2010-03-20 6 views
0

J'essaye de redessiner le contenu d'une simple boucle. Jusqu'à présent, il imprime sur les lignes stdscr 100, puis en utilisant scrl pour faire défiler n lignes, je reçois n lignes vides.retravailler sur ncurses

Ce que je veux, c'est garder la séquence. Cependant, je ne suis pas sûr de savoir comment redessiner le stdscr avec les n lignes supplémentaires. Toutes les idées seront l'apprécier!

#include <ncurses.h> 
int main(void) 
{ 
    initscr(); 
    int maxy,maxx,y; 
    getmaxyx(stdscr,maxy,maxx); 
    scrollok(stdscr,TRUE); 
    for(y=0;y<=100;y++) 
     mvprintw(y,0,"This is some text written to line %d.",y); 
    refresh(); 
    getch(); 
    scrl(5); 
    refresh(); 
    getch(); 
    endwin(); 
    return(0); 
} 

Répondre

0

On peut supposer que, après la refresh() après scrl(), ajoutez les lignes:

for (y = 96; y <= 100; y++) 
    mvprintw(y, 0, "This is some text written as line %d.", y+5); 
refresh(); 

J'utilise des numéros de magie, bien sûr. Vous devez utiliser quelque chose comme:

enum { MAX_SCR_LINE = 100 }; 
enum { MAX_SCROLL = 5 }; 

La boucle est:

for (y = MAX_SCR_LINE - MAX_SCROLL + 1; y <= MAX_SCR_LINE; y++) 
    mvprintw(y, 0, "This is some text written as line %d.", y + MAX_SCROLL); 
refresh(); 

Et si vous avez besoin de répéter le processus plus, et plus, le calcul devient:

enum { MAX_ITER = 10 }; 
for (int j = 0; j < MAX_ITER; j++) 
{ 
    scrl(MAX_SCROLL); 
    for (y = MAX_SCR_LINE - MAX_SCROLL + 1; y <= MAX_SCR_LINE; y++) 
     mvprintw(y, 0, "This is the text written as line %d.", 
       y + (j + 1) * MAX_SCROLL); 
} 

Etcetera ...

(Code non testé - Méfiez-vous des bugs.)