/*= CursorLeft_N ============================================================== Purpose: Moves the cursor left N characters to the left Inputs: n -- number of characters to move the cursor to the left Note: This sequence only takes a single digit of length, so may need to do the move in steps Returns: none ============================================================================*/ tZGVoidReturn CursorLeft_N(tZGU8 n) { tZGS8 sequence_string[sizeof(cursorLeftEscapeSequence) + 2]; /* null and extra digit */ if (n > 0u) { SET_CURSOR( GET_CURSOR() - n ); sequence_string[0] = cursorLeftEscapeSequence[0]; /* ESC */ sequence_string[1] = cursorLeftEscapeSequence[1]; /* '[' */ if (n < 10u) { sequence_string[2] = n + '0'; /* ascii digit */ sequence_string[3] = cursorLeftEscapeSequence[3]; /* 'D' */ sequence_string[4] = '\0'; } else { sequence_string[2] = (n / 10) + '0'; /* first ascii digit */ sequence_string[3] = (n % 10) + '0'; /* second ascii digit */ sequence_string[4] = cursorLeftEscapeSequence[3]; /* 'D' */ sequence_string[5] = '\0'; } ZG_PUTSUART( (char *) sequence_string); } }
static void EraseEntireLine() { // int i; SYS_CONSOLE_MESSAGE(eraseEntireLineEscapeSequence); CursorLeft_N(GET_CURSOR()); SET_CURSOR(0); }
static void EraseEntireLine() { // int i; putrsUART( (ROM FAR char*) eraseEntireLineEscapeSequence); CursorLeft_N(GET_CURSOR()); SET_CURSOR(0); }
/*= CursorLeft_N ============================================================== Purpose: Moves the cursor left N characters to the left Inputs: n -- number of characters to move the cursor to the left Note: This sequence only takes a single digit of length, so may need to do the move in steps Returns: none ============================================================================*/ void CursorLeft_N(uint8_t n) { char sequence_string[sizeof(cursorLeftEscapeSequence) + 2]; /* null and extra digit */ // ASSERT(n <= g_ConsoleContext.cursorIndex + CMD_LINE_PROMPT_LENGTH); if (n > 0u) { SET_CURSOR( GET_CURSOR() - n ); sequence_string[0] = cursorLeftEscapeSequence[0]; /* ESC */ sequence_string[1] = cursorLeftEscapeSequence[1]; /* '[' */ if (n < 10u) { sequence_string[2] = n + '0'; /* ascii digit */ sequence_string[3] = cursorLeftEscapeSequence[3]; /* 'D' */ sequence_string[4] = '\0'; } else { sequence_string[2] = (n / 10) + '0'; /* first ascii digit */ sequence_string[3] = (n % 10) + '0'; /* second ascii digit */ sequence_string[4] = cursorLeftEscapeSequence[3]; /* 'D' */ sequence_string[5] = '\0'; } SYS_CONSOLE_MESSAGE(sequence_string); } }
/* ================= UI_DrawMouseCursor ================= */ void UI_DrawMouseCursor( void ) { menuCommon_s *item; HICON hCursor = NULL; int i; if( uiStatic.hideCursor ) return; for( i = 0; i < uiStatic.menuActive->numItems; i++ ) { item = (menuCommon_s *)uiStatic.menuActive->items[i]; if ( item->flags & (QMF_INACTIVE|QMF_HIDDEN)) continue; if ( !UI_CursorInRect( item->x, item->y, item->width, item->height )) continue; if ( item->flags & QMF_GRAYED ) { hCursor = (HICON)LoadCursor( NULL, (LPCTSTR)OCR_NO ); } else { if( item->type == QMTYPE_FIELD ) hCursor = (HICON)LoadCursor( NULL, (LPCTSTR)OCR_IBEAM ); } break; } if( !hCursor ) hCursor = (HICON)LoadCursor( NULL, (LPCTSTR)OCR_NORMAL ); SET_CURSOR( hCursor ); }
/*= CursorRight_N ============================================================== Purpose: Moves the cursor left N characters to the right Inputs: n -- number of characters to move the cursor to the left Note: This sequence only takes a single digit of length, so may need to do the move in steps Returns: none ============================================================================*/ void CursorRight_N(UINT8 n) { INT8 sequence_string[sizeof(cursorRightEscapeSequence) + 2]; /* null and extra digit */ // ASSERT(n <= (strlen(g_ConsoleContext.buf) + CMD_LINE_PROMPT_LENGTH)); if (n > 0u) { SET_CURSOR( GET_CURSOR() + n ); sequence_string[0] = cursorRightEscapeSequence[0]; /* ESC */ sequence_string[1] = cursorRightEscapeSequence[1]; /* '[' */ if (n < 10u) { sequence_string[2] = n + '0'; /* ascii digit */ sequence_string[3] = cursorRightEscapeSequence[3]; /* 'C' */ sequence_string[4] = '\0'; } else { sequence_string[2] = (n / 10) + '0'; /* first ascii digit */ sequence_string[3] = (n % 10) + '0'; /* second ascii digit */ sequence_string[4] = cursorRightEscapeSequence[3]; /* 'C' */ sequence_string[5] = '\0'; } putsUART( (char *) sequence_string); } }
/*= CursorRight ============================================================= Purpose: Moves the cursor right by one character Inputs: none Returns: none ============================================================================*/ void CursorRight(void) { /* if cursor is not already at the right-most position */ if (GET_CURSOR() < GET_LEN_RX_CMD_STRING() + gCmdLinePromptLength) { SET_CURSOR( GET_CURSOR() + 1); SYS_CONSOLE_MESSAGE(cursorRightEscapeSequence); } }
/*= CursorLeft ============================================================== Purpose: Moves the cursor left by one character Inputs: none Returns: none ============================================================================*/ tZGVoidReturn CursorLeft(tZGVoidInput) { /* if cursor is not already at the left-most position */ if (GET_CURSOR() > strlenpgm( (ROM FAR char *) gCmdLinePrompt)) { SET_CURSOR( GET_CURSOR() - 1); ZG_PUTRSUART( (ROM FAR char *) cursorLeftEscapeSequence); } }
/*= CursorRight ============================================================= Purpose: Moves the cursor right by one character Inputs: none Returns: none ============================================================================*/ void CursorRight(void) { /* if cursor is not already at the right-most position */ if (GET_CURSOR() < GET_LEN_RX_CMD_STRING() + gCmdLinePromptLength) { SET_CURSOR( GET_CURSOR() + 1); putrsUART( (ROM FAR char*) cursorRightEscapeSequence); } }
/*= CursorLeft ============================================================== Purpose: Moves the cursor left by one character Inputs: none Returns: none ============================================================================*/ void CursorLeft(void) { /* if cursor is not already at the left-most position */ if (GET_CURSOR() > strlenpgm( (ROM FAR char *) gCmdLinePrompt)) { SET_CURSOR( GET_CURSOR() - 1); putrsUART( (ROM FAR char *) cursorLeftEscapeSequence); } }
/*= CursorLeft ============================================================== Purpose: Moves the cursor left by one character Inputs: none Returns: none ============================================================================*/ void CursorLeft(void) { /* if cursor is not already at the left-most position */ if (GET_CURSOR() > strlen( (const FAR char *) gCmdLinePrompt)) { SET_CURSOR( GET_CURSOR() - 1); SYS_CONSOLE_MESSAGE(cursorLeftEscapeSequence); } }
/*= CursorRight ============================================================= Purpose: Moves the cursor right by one character Inputs: none Returns: none ============================================================================*/ tZGVoidReturn CursorRight(tZGVoidInput) { /* if cursor is not already at the right-most position */ if (GET_CURSOR() < GET_LEN_RX_CMD_STRING() + gCmdLinePromptLength) { SET_CURSOR( GET_CURSOR() + 1); ZG_PUTRSUART( (ROM FAR char*) cursorRightEscapeSequence); } }
static void OutputCommandPrompt(void) { if ( IS_ECHO_ON() ) { putrsUART("\n\r"); putrsUART((ROM FAR char*) gCmdLinePrompt); } SET_CURSOR(gCmdLinePromptLength); memset(g_ConsoleContext.rxBuf, 0x00, sizeof(g_ConsoleContext.rxBuf)); }
static void OutputCommandPrompt(void) { if ( IS_ECHO_ON() ) { SYS_CONSOLE_MESSAGE("\n\r"); SYS_CONSOLE_MESSAGE(gCmdLinePrompt); } SET_CURSOR(gCmdLinePromptLength); memset(g_ConsoleContext.rxBuf, 0x00, sizeof(g_ConsoleContext.rxBuf)); }
static tZGVoidReturn OutputCommandPrompt(tZGVoidInput) { if ( IS_ECHO_ON() ) { ZG_PUTRSUART("\n\r"); ZG_PUTRSUART((ROM FAR char*) gCmdLinePrompt); } SET_CURSOR(gCmdLinePromptLength); memset(g_ConsoleContext.rxBuf, 0x00, sizeof(g_ConsoleContext.rxBuf)); }
/***************************************************************************** * FUNCTION: ZGConsoleInit * * RETURNS: None * * PARAMS: p_cmdStrings -- pointer to array of application-specific command strings * numCmdStrings -- number of strings in p_cmdStrings * * NOTES: Initialization for console thread * *****************************************************************************/ tZGVoidReturn ZGConsoleInit( ROM tZGU8 **p_cmdStrings, tZGU8 numCmdStrings) { SET_RX_STATE(kSTWaitForChar); SET_CURSOR(0); // zero out command line buffer memset(g_ConsoleContext.rxBuf, 0x00, sizeof(g_ConsoleContext.rxBuf)); g_ConsoleContext.bStateMachineLoop = kZGBoolTrue; g_ConsoleContext.firstChar = kZGBoolFalse; g_ConsoleContext.p_cmdStrings = p_cmdStrings; g_ConsoleContext.numCmdStrings = numCmdStrings; g_ConsoleContext.appConsoleMsgRx = kZGBoolFalse; SET_ECHO_ON(); #if (kZGNumHistoryEntries > 0) InitHistory(); #endif }
/***************************************************************************** * FUNCTION: WFConsoleInit * * RETURNS: None * * PARAMS: * * NOTES: Initialization for console thread * *****************************************************************************/ void WFConsoleInit(void) { SET_RX_STATE(kSTWaitForChar); SET_CURSOR(0); // zero out command line buffer memset(g_ConsoleContext.rxBuf, 0x00, sizeof(g_ConsoleContext.rxBuf)); g_ConsoleContext.bStateMachineLoop = TRUE; g_ConsoleContext.firstChar = FALSE; g_ConsoleContext.appConsoleMsgRx = FALSE; SET_ECHO_ON(); #if (kWFNumHistoryEntries > 0) InitHistory(); #endif g_ConsoleContext.echoOn = TRUE; }
/*= Backspace ================================================================ Purpose: Performs a backspace operation on the command line Inputs: none Returns: none ============================================================================*/ static void Backspace(void) { UINT8 num_chars; UINT8 orig_index = GET_CURSOR(); /* if cursor is not at the left-most position */ if (GET_CURSOR() != gCmdLinePromptLength) { /* Null out tmp cmd line */ memset(gTmpCmdLine, 0x00, sizeof(gTmpCmdLine)); /* get characters before the backspace */ num_chars = GET_CURSOR() - gCmdLinePromptLength - 1; strncpy( (char *) gTmpCmdLine, (const char *) g_ConsoleContext.rxBuf, num_chars); /* append characters after the deleted char (if there are any) */ if ( (GET_LEN_RX_CMD_STRING() - 1) > 0u) { strcpy( (char *) &gTmpCmdLine[num_chars], (const char *) &g_ConsoleContext.rxBuf[num_chars + 1]); } EraseEntireLine(); /* leaves g_ConsoleContext.cursorIndex at 0 */ strcpy( (char *) g_ConsoleContext.rxBuf, (const char *) gTmpCmdLine); putrsUART( (ROM FAR char *) gCmdLinePrompt); putsUART( (char *) g_ConsoleContext.rxBuf); SET_CURSOR(gCmdLinePromptLength + GET_LEN_RX_CMD_STRING()); CursorHome(); /* to first character after prompt */ /* move cursor to point of backspace */ CursorRight_N(orig_index - 1 - gCmdLinePromptLength); } }
static void Delete(void) { unsigned int num_chars; unsigned int orig_index = GET_CURSOR(); /* if cursor is not at the end of the line */ if (GET_CURSOR() != GET_LEN_RX_CMD_STRING() + gCmdLinePromptLength) { /* Null out tmp cmd line */ memset(gTmpCmdLine, 0x00, sizeof(gTmpCmdLine)); /* get characters before the deleted key */ num_chars = GET_CURSOR() - gCmdLinePromptLength; strncpy( (char *) gTmpCmdLine, (const char *) g_ConsoleContext.rxBuf, num_chars); /* append characters after the deleted char (if there are any) */ if (strlen( (char *) g_ConsoleContext.rxBuf) - 1 > 0u) { strcpy( (char *) &gTmpCmdLine[num_chars], (const char *) &g_ConsoleContext.rxBuf[num_chars + 1]); } EraseEntireLine(); /* leaves g_ConsoleContext.cursorIndex at 0 */ putrsUART( (ROM FAR char *) gCmdLinePrompt); strcpy( (char *) g_ConsoleContext.rxBuf, (const char *) gTmpCmdLine); putsUART( (char *) g_ConsoleContext.rxBuf ); SET_CURSOR(gCmdLinePromptLength + GET_LEN_RX_CMD_STRING()); CursorHome(); /* to first character after prompt */ /* move cursor to point of delete */ CursorRight_N(orig_index - gCmdLinePromptLength); } }
void empty_cursor(void) { SET_CURSOR(null_cursor, 0, 0); }
/***************************************************************************** * FUNCTION: DisplayHistoryEntry * * RETURNS: None * * PARAMS: action -- PREV_HISTORY or NEXT_HISTORY * * NOTES: In response to the user pressing up or down arrow key, display * corresponding entry in history buffer. * *****************************************************************************/ static void DisplayHistoryEntry(uint8_t action) { bool foundEntry = false; // if nothing in history buffer if (history.seeded == false) { return; } if (action == (uint8_t)kPrevHistory) { --history.recallIndex; if (history.recallIndex < 0) { history.recallIndex = kNumHistoryEntries - 1; } /* search until found a history entry or searched all entries */ while (foundEntry == false) { /* if found a history entry */ if (history.buf[history.recallIndex][0] != 0) { foundEntry = true; } else { --history.recallIndex; if (history.recallIndex < 0) { history.recallIndex = kNumHistoryEntries - 1; } } } } else /* action == kNextHistory */ { history.recallIndex = (history.recallIndex + 1) % kNumHistoryEntries; /* search until found a history entry or searched all entries */ while (foundEntry == false) { /* if found a history entry */ if (history.buf[history.recallIndex][0] != 0) { foundEntry = true; } else { history.recallIndex = (history.recallIndex + 1) % kNumHistoryEntries; } } } if (foundEntry) { // erase line on screen and output command from history EraseEntireLine(); /* leaves Cursor_Index at 0 */ SYS_CONSOLE_MESSAGE(gCmdLinePrompt ); SYS_CONSOLE_MESSAGE(history.buf[history.recallIndex]); // copy history command to console buffer (so they match) and put cursor // at end of line memset(g_ConsoleContext.rxBuf, 0x00, GET_LEN_RX_CMD_STRING() ); strcpy( (char *) g_ConsoleContext.rxBuf, (const char *) history.buf[history.recallIndex]); SET_CURSOR(gCmdLinePromptLength + strlen( (char *) history.buf[history.recallIndex])); } }
/***************************************************************************** * FUNCTION: DisplayHistoryEntry * * RETURNS: None * * PARAMS: action -- PREV_HISTORY or NEXT_HISTORY * * NOTES: In response to the user pressing up or down arrow key, display * corresponding entry in history buffer. * *****************************************************************************/ static void DisplayHistoryEntry(UINT8 action) { BOOL foundEntry = FALSE; // if nothing in history buffer if (history.seeded == FALSE) { return; } if (action == (UINT8)kWFPrevHistory) { --history.recallIndex; if (history.recallIndex < 0) { history.recallIndex = kWFNumHistoryEntries - 1; } /* search until found a history entry or searched all entries */ while (foundEntry == FALSE) { /* if found a history entry */ if (history.buf[history.recallIndex][0] != 0) { foundEntry = TRUE; } else { --history.recallIndex; if (history.recallIndex < 0) { history.recallIndex = kWFNumHistoryEntries - 1; } } } } else /* action == kWFNextHistory */ { history.recallIndex = (history.recallIndex + 1) % kWFNumHistoryEntries; /* search until found a history entry or searched all entries */ while (foundEntry == FALSE) { /* if found a history entry */ if (history.buf[history.recallIndex][0] != 0) { foundEntry = TRUE; } else { history.recallIndex = (history.recallIndex + 1) % kWFNumHistoryEntries; } } } if (foundEntry) { // erase line on screen and output command from history EraseEntireLine(); /* leaves Cursor_Index at 0 */ putrsUART( (ROM FAR char *) gCmdLinePrompt ); putsUART( (char *) history.buf[history.recallIndex]); // copy history command to console buffer (so they match) and put cursor // at end of line memset(g_ConsoleContext.rxBuf, 0x00, GET_LEN_RX_CMD_STRING() ); strcpy( (char *) g_ConsoleContext.rxBuf, (const char *) history.buf[history.recallIndex]); SET_CURSOR(gCmdLinePromptLength + strlen( (char *) history.buf[history.recallIndex])); } }
/*= InsertCharacter ========================================================= Purpose: Inserts and echoes an printable character into the command line at the cursor location. Inputs: c -- char to insert Returns: none ============================================================================*/ static void InsertCharacter(INT8 c) { UINT8 len; UINT8 i; UINT8 orig_cursor_index = GET_CURSOR(); UINT8 count; /* throw away characters if exceeded cmd line length */ if (GET_LEN_RX_CMD_STRING() >= sizeof(g_ConsoleContext.rxBuf)-1) { return; } len = GET_LEN_RX_CMD_STRING() + gCmdLinePromptLength; /* if inserting a character at end of cmd line */ if (GET_CURSOR() == len) { g_ConsoleContext.rxBuf[GET_CURSOR() - gCmdLinePromptLength] = c; SET_CURSOR(GET_CURSOR() + 1); EchoCharacter(c); } /* inserting a character somewhere before the end of command line */ else { /* Null out tmp cmd line */ memset(gTmpCmdLine, 0x00, sizeof(gTmpCmdLine)); /* copy up to the point of insertion */ strncpy( (char *) gTmpCmdLine, (const char *) g_ConsoleContext.rxBuf, GET_CURSOR() - gCmdLinePromptLength); /* insert the new character */ gTmpCmdLine[GET_CURSOR() - gCmdLinePromptLength] = c; /* copy the chars after the new character */ strncpy( (char *) &gTmpCmdLine[GET_CURSOR() - gCmdLinePromptLength + 1], (const char *) &g_ConsoleContext.rxBuf[GET_CURSOR() - gCmdLinePromptLength], len - GET_CURSOR()); /* put the first part of new string in the cmd line buffer */ strcpy( (char *) g_ConsoleContext.rxBuf, (const char *) gTmpCmdLine); /* erase entire line, put the cursor at index 0 */ EraseEntireLine(); /* output the prompt */ putrsUART( (ROM FAR char *) gCmdLinePrompt); /* Output the updated command line */ putsUART( (char *) &g_ConsoleContext.rxBuf[0]); /* move the cursor to the next insert location */ count = (len + 1) - orig_cursor_index - 1; for (i = 0; i < count; ++i) { putrsUART( (ROM FAR char *) cursorLeftEscapeSequence); } SET_CURSOR(orig_cursor_index + 1); } }