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; }
//получить сообщение из строки ввода void GetMessage(char *str) { mvwinstr(mpanel[2],1,1,str); str[getmaxx(mpanel[2])-2]='\0'; }
int mvinstr(int y, int x, char *str) { return mvwinstr(stdscr, y, x, str); }