/* ** tuiCommand.c ** This module contains functions specific to command window processing. */ #include "defs.h" #include "tui.h" #include "tuiData.h" #include "tuiWin.h" #include "tuiIO.h" /***************************************** ** STATIC LOCAL FUNCTIONS FORWARD DECLS ** ******************************************/ /***************************************** ** PUBLIC FUNCTIONS ** ******************************************/ /* ** tuiDispatchCtrlChar(). ** Dispatch the correct tui function based upon the control character. */ unsigned int #ifdef __STDC__ tuiDispatchCtrlChar ( unsigned int ch) #else tuiDispatchCtrlChar (ch) unsigned int ch; #endif { TuiWinInfoPtr winInfo = tuiWinWithFocus (); /* ** If the command window has the logical focus, or no-one does ** assume it is the command window; in this case, pass the ** character on through and do nothing here. */ if (winInfo == (TuiWinInfoPtr) NULL || winInfo == cmdWin) return ch; else { unsigned int c = 0, chCopy = ch; register int i; char *term; /* If this is an xterm, page next/prev keys aren't returned ** by keypad as a single char, so we must handle them here. ** Seems like a bug in the curses library? */ term = (char *) getenv ("TERM"); for (i = 0; (term && term[i]); i++) term[i] = toupper (term[i]); if ((strcmp (term, "XTERM") == 0) && m_isStartSequence (ch)) { unsigned int pageCh = 0, tmpChar; tmpChar = 0; while (!m_isEndSequence (tmpChar)) { tmpChar = (int) wgetch (cmdWin->generic.handle); if (!tmpChar) break; if (tmpChar == 53) pageCh = KEY_PPAGE; else if (tmpChar == 54) pageCh = KEY_NPAGE; } chCopy = pageCh; } switch (chCopy) { case KEY_NPAGE: tuiScrollForward (winInfo, 0); break; case KEY_PPAGE: tuiScrollBackward (winInfo, 0); break; case KEY_DOWN: case KEY_SF: tuiScrollForward (winInfo, 1); break; case KEY_UP: case KEY_SR: tuiScrollBackward (winInfo, 1); break; case KEY_RIGHT: tuiScrollLeft (winInfo, 1); break; case KEY_LEFT: tuiScrollRight (winInfo, 1); break; case '\f': tuiRefreshAll (); break; default: c = chCopy; break; } return c; } } /* tuiDispatchCtrlChar */ /* ** tuiIncrCommandCharCountBy() ** Increment the current character count in the command window, ** checking for overflow. Returns the new value of the char count. */ int #ifdef __STDC__ tuiIncrCommandCharCountBy ( int count) #else tuiIncrCommandCharCountBy (count) int count; #endif { if (tui_version) { if ((count + cmdWin->detail.commandInfo.curch) >= cmdWin->generic.width) cmdWin->detail.commandInfo.curch = (count + cmdWin->detail.commandInfo.curch) - cmdWin->generic.width; else cmdWin->detail.commandInfo.curch += count; } return cmdWin->detail.commandInfo.curch; } /* tuiIncrCommandCharCountBy */ /* ** tuiDecrCommandCharCountBy() ** Decrement the current character count in the command window, ** checking for overflow. Returns the new value of the char count. */ int #ifdef __STDC__ tuiDecrCommandCharCountBy ( int count) #else tuiDecrCommandCharCountBy (count) int count; #endif { if (tui_version) { if ((cmdWin->detail.commandInfo.curch - count) < 0) cmdWin->detail.commandInfo.curch = cmdWin->generic.width + (cmdWin->detail.commandInfo.curch - count); else cmdWin->detail.commandInfo.curch -= count; } return cmdWin->detail.commandInfo.curch; } /* tuiDecrCommandCharCountBy */ /* ** tuiSetCommandCharCountTo() ** Set the character count to count. */ int #ifdef __STDC__ tuiSetCommandCharCountTo ( int count) #else tuiSetCommandCharCountTo (count) int count; #endif { if (tui_version) { if (count > cmdWin->generic.width - 1) { cmdWin->detail.commandInfo.curch = 0; tuiIncrCommandCharCountBy (count); } else cmdWin->detail.commandInfo.curch -= count; } return cmdWin->detail.commandInfo.curch; } /* tuiSetCommandCharCountTo */ /* ** tuiClearCommandCharCount() ** Clear the character count to count. */ int #ifdef __STDC__ tuiClearCommandCharCount (void) #else tuiClearCommandCharCount () #endif { if (tui_version) cmdWin->detail.commandInfo.curch = 0; return cmdWin->detail.commandInfo.curch; } /* tuiClearCommandCharCount */ /***************************************** ** STATIC LOCAL FUNCTIONS ** ******************************************/