Esempio n. 1
0
int main(int argc, char *argv[]) {	
    struct windows win = { NULL, NULL, NULL, NULL };
    int     curs_x = CURS_X_MIN,
            curs_y = CURS_Y_MIN,
            pad_minrow = 0,
            pad_textrows,
            ch,
            quit = 0;
    char    *status = "",
            scratch[1000];

    // Init curses
    initNCurses();
    initWindows(&win);

    // Add text to main window
    loadAndAddText(&win.textpad, &pad_textrows, "story.txt");

    while (!quit) {
        if ((ch = getch()) != ERR) {
            switch (tolower(ch)) {

            // UP
            case KEY_UP:
                if (curs_y > CURS_Y_MIN) {
                    curs_y--;
                } else {
                    if (pad_minrow > 0) {
                        pad_minrow--;
                    }
                }
                break;

            // DOWN
            case KEY_DOWN:
                if (curs_y < CURS_Y_MAX) {
                    curs_y++;
                } else {
                    if (pad_minrow < pad_textrows - PAD_HEIGHT) {
                        pad_minrow++;
                    }
                }
                break;

            // LEFT
            case KEY_LEFT:
                if (curs_x > CURS_X_MIN) {
                    curs_x--;
                }
                break;

            // RIGHT
            case KEY_RIGHT:
                if (curs_x < CURS_X_MAX) {
                    curs_x++;
                }
                break;

            // PAGE UP
            case KEY_PPAGE:
                curs_y = CURS_Y_MIN;
                pad_minrow = clip(pad_minrow - PAGE_SCROLL_SIZE,
                                  0,
                                  pad_textrows - PAD_HEIGHT);
                break;

            // PAGE DOWN
            case KEY_NPAGE:
                curs_y = CURS_Y_MAX;
                pad_minrow = clip(pad_minrow + PAGE_SCROLL_SIZE,
                                  0,
                                  pad_textrows - PAD_HEIGHT);
                break;

            // HOME
            case KEY_HOME:
                curs_x = CURS_X_MIN;
                break;

            // END
            case KEY_END:
                curs_x = CURS_X_MAX;
                break;

            case 'l':
                mvwinstr(win.textpad, pad_minrow + curs_y - 1, curs_x - 1, scratch);
                status = scratch;
                //status = "Lookup";
                break;

            case 'u':
                status = "Use";
                break;

            case 'g':
                status = "Goto";
                break;

            case 't':
                status = "Talk";
                break;

            case 'e':
                status = "Examine";
                break;

            case 'q':
                quit = 1;
                break;

            default:
                break;
            }
        }
        
        updateTextPad(win.textpad, pad_minrow);
        updateStatusBar(win.status, status);
        updateCursor(win.main, curs_y, curs_x);
    }

    delWindows(&win);
    delNCurses();
    
    return 0;
}
Esempio n. 2
0
//получить сообщение из строки ввода
void GetMessage(char *str)
{
    mvwinstr(mpanel[2],1,1,str);
    str[getmaxx(mpanel[2])-2]='\0';
}
Esempio n. 3
0
int
mvinstr(int y, int x, char *str)
{
	return mvwinstr(stdscr, y, x, str);
}