[rogueclone-cvs] rogue/src curses.c, 1.11.2.2, 1.11.2.3 message.c, 1.7.2.1, 1.7.2.2 rogue.h, 1.9.2.
Brought to you by:
mlehotay
From: Michael L. <mle...@us...> - 2008-06-19 04:48:55
|
Update of /cvsroot/rogueclone/rogue/src In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv20671/src Modified Files: Tag: curses curses.c message.c rogue.h Log Message: moved rgetchar() back to message.c Index: message.c =================================================================== RCS file: /cvsroot/rogueclone/rogue/src/message.c,v retrieving revision 1.7.2.1 retrieving revision 1.7.2.2 diff -C2 -d -r1.7.2.1 -r1.7.2.2 *** message.c 18 Jun 2008 03:16:13 -0000 1.7.2.1 --- message.c 19 Jun 2008 04:32:13 -0000 1.7.2.2 *************** *** 196,199 **** --- 196,219 ---- } + char rgetchar(void) + { + char ch; + + for(;;) { + ch = getch(); + + switch(ch) { + case '\022': /* ^R */ + wrefresh(curscr); + break; + case '&': + save_screen(); + break; + default: + return(ch); + } + } + } + /* Level: 99 Gold: 999999 Hp: 999(999) Str: 99(99) Arm: 99 Exp: 21/10000000 Hungry Index: rogue.h =================================================================== RCS file: /cvsroot/rogueclone/rogue/src/rogue.h,v retrieving revision 1.9.2.2 retrieving revision 1.9.2.3 diff -C2 -d -r1.9.2.2 -r1.9.2.3 *** rogue.h 19 Jun 2008 02:49:54 -0000 1.9.2.2 --- rogue.h 19 Jun 2008 04:32:15 -0000 1.9.2.3 *************** *** 244,251 **** typedef unsigned short chtype; /* 8-bit attr + 8-bit char */ typedef chtype attr_t; - chtype mvinch(short row, short col); - - #if 0 /* Support for color GUI... */ --- 244,248 ---- *************** *** 284,288 **** #define BGCOLOR_OF(col) (byte)(((col) >> 4) & 0x0F) #define FGCOLOR_OF(col) (byte)((col) & 0x0F) - #endif /* Support for color GUI...*/ #else /* link with pdcurses. maybe other curses would work too? */ --- 281,284 ---- *************** *** 608,613 **** /* curses.c */ - char rgetchar(void); #ifdef ROGUECURSES void initscr(void); void move(const short row, const short col); --- 604,609 ---- /* curses.c */ #ifdef ROGUECURSES + char getch(void); void initscr(void); void move(const short row, const short col); *************** *** 623,627 **** void refresh(void); void redraw(void); ! /* int mvinch(const short row, const short col); */ chtype mvincch(const short row, const short col); void clear(void); --- 619,623 ---- void refresh(void); void redraw(void); ! chtype mvinch(const short row, const short col); chtype mvincch(const short row, const short col); void clear(void); *************** *** 722,725 **** --- 718,722 ---- void check_message(void); short get_input_line(char *prompt, char *insert, char *buf, char *if_cancelled, const boolean add_blank, const boolean do_echo); + char rgetchar(void); void print_stats(const int stat_mask); void save_screen(void); Index: curses.c =================================================================== RCS file: /cvsroot/rogueclone/rogue/src/curses.c,v retrieving revision 1.11.2.2 retrieving revision 1.11.2.3 diff -C2 -d -r1.11.2.2 -r1.11.2.3 *** curses.c 19 Jun 2008 02:49:54 -0000 1.11.2.2 --- curses.c 19 Jun 2008 04:32:13 -0000 1.11.2.3 *************** *** 69,181 **** */ - - #include "rogue.h" - - /* Returns a keystroke, translated into a Rogue command. - */ - - char rgetchar(void) - { - char ch; - #ifdef ROGUECURSES - #ifdef _MSC_VER - INPUT_RECORD ir; - DWORD n; - - put_cursor(curscr->_cury, curscr->_curx); - #else - int scancode; - regs_t regs; - #endif - #endif /* ROGUECURSES */ - - for(;;) { - ch = getch(); - - #ifdef ROGUECURSES - #ifdef _MSC_VER - if(!ReadConsoleInput(hStdIn, &ir, 1, &n) || - ir.EventType != KEY_EVENT || !ir.Event.KeyEvent.bKeyDown) - continue; - - /* convert keypad input to rogue commands */ - switch(ir.Event.KeyEvent.wVirtualKeyCode) { - case VK_NUMPAD9: case VK_PRIOR: - ir.Event.KeyEvent.uChar.AsciiChar = 'u'; break; - case VK_NUMPAD3: case VK_NEXT: - ir.Event.KeyEvent.uChar.AsciiChar = 'n'; break; - case VK_NUMPAD1: case VK_END: - ir.Event.KeyEvent.uChar.AsciiChar = 'b'; break; - case VK_NUMPAD7: case VK_HOME: - ir.Event.KeyEvent.uChar.AsciiChar = 'y'; break; - case VK_NUMPAD4: case VK_LEFT: - ir.Event.KeyEvent.uChar.AsciiChar = 'h'; break; - case VK_NUMPAD8: case VK_UP: - ir.Event.KeyEvent.uChar.AsciiChar = 'k'; break; - case VK_NUMPAD6: case VK_RIGHT: - ir.Event.KeyEvent.uChar.AsciiChar = 'l'; break; - case VK_NUMPAD2: case VK_DOWN: - ir.Event.KeyEvent.uChar.AsciiChar = 'j'; break; - case VK_DELETE: - ir.Event.KeyEvent.uChar.AsciiChar = '.'; break; - } - - if(!ir.Event.KeyEvent.uChar.AsciiChar) - continue; - - /* apply shift or control to keypad movement keys */ - if((ir.Event.KeyEvent.wVirtualKeyCode>=VK_PRIOR && - ir.Event.KeyEvent.wVirtualKeyCode<=VK_DOWN) || - (ir.Event.KeyEvent.wVirtualKeyCode>=VK_NUMPAD1 && - ir.Event.KeyEvent.wVirtualKeyCode<=VK_NUMPAD9)) { - if(ir.Event.KeyEvent.dwControlKeyState & SHIFT_PRESSED) - ir.Event.KeyEvent.uChar.AsciiChar -= ('a' - 'A'); - else if(ir.Event.KeyEvent.dwControlKeyState & (LEFT_CTRL_PRESSED | - RIGHT_CTRL_PRESSED)) - ir.Event.KeyEvent.uChar.AsciiChar -= ('a' - 1); - - /* Check for fast play mode, but only for the keypad. The current - * method of converting y to ^y can mess up answers to y/n questions. */ - if(ir.Event.KeyEvent.dwControlKeyState & SCROLLLOCK_ON) { - if(strchr("hjklyubn", ir.Event.KeyEvent.uChar.AsciiChar)) - ir.Event.KeyEvent.uChar.AsciiChar -= ('a' - 1); - else if(strchr("HJKLYUBN", ir.Event.KeyEvent.uChar.AsciiChar)) - ir.Event.KeyEvent.uChar.AsciiChar += ('a' - 'A'); - else if(strchr("\010\012\013\014\031\025\002\016", - ir.Event.KeyEvent.uChar.AsciiChar)) - ir.Event.KeyEvent.uChar.AsciiChar += ('a' - 1); - } - } - - ch = ir.Event.KeyEvent.uChar.AsciiChar; - #else - regs.h.ah = 0x00; /* get keystroke */ - intr_fn(0x16, ®s); - scancode = regs.h.ah; /* BIOS scancode */ - - if(scancode>0x46 && scancode<0x54) - ch = translate_keypad(scancode); - else - ch = regs.h.al; /* ASCII code */ - #endif - #endif /* ROGUECURSES */ - - switch(ch) { - case '\022': /* ^R */ - wrefresh(curscr); - break; - case '&': - save_screen(); - break; - default: - return(ch); - } - } - } - - - #ifdef ROGUECURSES #include <stdio.h> --- 69,75 ---- */ #ifdef ROGUECURSES + #include "rogue.h" #include <stdio.h> *************** *** 254,257 **** --- 148,235 ---- /* ================== PUBLIC FUNCTIONS ================== */ + /* Returns a keystroke, translated into a Rogue command. + */ + + char getch(void) + { + char ch; + + #ifdef _MSC_VER + INPUT_RECORD ir; + DWORD n; + + put_cursor(curscr->_cury, curscr->_curx); + + if(!ReadConsoleInput(hStdIn, &ir, 1, &n) || + ir.EventType != KEY_EVENT || !ir.Event.KeyEvent.bKeyDown) + return 0; + + /* convert keypad input to rogue commands */ + switch(ir.Event.KeyEvent.wVirtualKeyCode) { + case VK_NUMPAD9: case VK_PRIOR: + ir.Event.KeyEvent.uChar.AsciiChar = 'u'; break; + case VK_NUMPAD3: case VK_NEXT: + ir.Event.KeyEvent.uChar.AsciiChar = 'n'; break; + case VK_NUMPAD1: case VK_END: + ir.Event.KeyEvent.uChar.AsciiChar = 'b'; break; + case VK_NUMPAD7: case VK_HOME: + ir.Event.KeyEvent.uChar.AsciiChar = 'y'; break; + case VK_NUMPAD4: case VK_LEFT: + ir.Event.KeyEvent.uChar.AsciiChar = 'h'; break; + case VK_NUMPAD8: case VK_UP: + ir.Event.KeyEvent.uChar.AsciiChar = 'k'; break; + case VK_NUMPAD6: case VK_RIGHT: + ir.Event.KeyEvent.uChar.AsciiChar = 'l'; break; + case VK_NUMPAD2: case VK_DOWN: + ir.Event.KeyEvent.uChar.AsciiChar = 'j'; break; + case VK_DELETE: + ir.Event.KeyEvent.uChar.AsciiChar = '.'; break; + } + + if(!ir.Event.KeyEvent.uChar.AsciiChar) + return 0; + + /* apply shift or control to keypad movement keys */ + if((ir.Event.KeyEvent.wVirtualKeyCode>=VK_PRIOR && + ir.Event.KeyEvent.wVirtualKeyCode<=VK_DOWN) || + (ir.Event.KeyEvent.wVirtualKeyCode>=VK_NUMPAD1 && + ir.Event.KeyEvent.wVirtualKeyCode<=VK_NUMPAD9)) { + if(ir.Event.KeyEvent.dwControlKeyState & SHIFT_PRESSED) + ir.Event.KeyEvent.uChar.AsciiChar -= ('a' - 'A'); + else if(ir.Event.KeyEvent.dwControlKeyState & (LEFT_CTRL_PRESSED | + RIGHT_CTRL_PRESSED)) + ir.Event.KeyEvent.uChar.AsciiChar -= ('a' - 1); + + /* Check for fast play mode, but only for the keypad. The current + * method of converting y to ^y can mess up answers to y/n questions. */ + if(ir.Event.KeyEvent.dwControlKeyState & SCROLLLOCK_ON) { + if(strchr("hjklyubn", ir.Event.KeyEvent.uChar.AsciiChar)) + ir.Event.KeyEvent.uChar.AsciiChar -= ('a' - 1); + else if(strchr("HJKLYUBN", ir.Event.KeyEvent.uChar.AsciiChar)) + ir.Event.KeyEvent.uChar.AsciiChar += ('a' - 'A'); + else if(strchr("\010\012\013\014\031\025\002\016", + ir.Event.KeyEvent.uChar.AsciiChar)) + ir.Event.KeyEvent.uChar.AsciiChar += ('a' - 1); + } + } + + ch = ir.Event.KeyEvent.uChar.AsciiChar; + #else + int scancode; + regs_t regs; + + regs.h.ah = 0x00; /* get keystroke */ + intr_fn(0x16, ®s); + scancode = regs.h.ah; /* BIOS scancode */ + + if(scancode>0x46 && scancode<0x54) + ch = translate_keypad(scancode); + else + ch = regs.h.al; /* ASCII code */ + #endif + + return(ch); + } + /* Initializes the screen and pulls in the DPMI mode and page in use */ *************** *** 454,458 **** /* Returns the character currently at the specified current position */ ! int mvinch(const short row, const short col) { move(row, col); --- 432,436 ---- /* Returns the character currently at the specified current position */ ! chtype mvinch(const short row, const short col) { move(row, col); |