Author: hbelusca Date: Sun Jun 30 12:58:45 2013 New Revision: 59387 URL: http://svn.reactos.org/svn/reactos?rev=59387&view=rev Log: [CMD] Fix whitespace (part 5ter/6) (convert tabs into 4-space indent).
Modified: trunk/reactos/base/shell/cmd/cmdinput.c Modified: trunk/reactos/base/shell/cmd/cmdinput.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/cmdinput.c?rev=59387&r1=59386&r2=59387&view=diff ============================================================================== --- trunk/reactos/base/shell/cmd/cmdinput.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/cmdinput.c [iso-8859-1] Sun Jun 30 12:58:45 2013 @@ -114,501 +114,491 @@ static VOID ClearCommandLine (LPTSTR str, INT maxlen, SHORT orgx, SHORT orgy) { - INT count; - - SetCursorXY (orgx, orgy); - for (count = 0; count < (INT)_tcslen (str); count++) - ConOutChar (_T(' ')); - _tcsnset (str, _T('\0'), maxlen); - SetCursorXY (orgx, orgy); + INT count; + + SetCursorXY (orgx, orgy); + for (count = 0; count < (INT)_tcslen (str); count++) + ConOutChar (_T(' ')); + _tcsnset (str, _T('\0'), maxlen); + SetCursorXY (orgx, orgy); } /* read in a command line */ BOOL ReadCommand (LPTSTR str, INT maxlen) { - CONSOLE_SCREEN_BUFFER_INFO csbi; - SHORT orgx; /* origin x/y */ - SHORT orgy; - SHORT curx; /*current x/y cursor position*/ - SHORT cury; - SHORT tempscreen; - INT count; /*used in some for loops*/ - INT current = 0; /*the position of the cursor in the string (str)*/ - INT charcount = 0;/*chars in the string (str)*/ - INPUT_RECORD ir; + CONSOLE_SCREEN_BUFFER_INFO csbi; + SHORT orgx; /* origin x/y */ + SHORT orgy; + SHORT curx; /*current x/y cursor position*/ + SHORT cury; + SHORT tempscreen; + INT count; /*used in some for loops*/ + INT current = 0; /*the position of the cursor in the string (str)*/ + INT charcount = 0;/*chars in the string (str)*/ + INPUT_RECORD ir; #ifdef FEATURE_UNIX_FILENAME_COMPLETION - WORD wLastKey = 0; -#endif - TCHAR ch; - BOOL bReturn = FALSE; - BOOL bCharInput; + WORD wLastKey = 0; +#endif + TCHAR ch; + BOOL bReturn = FALSE; + BOOL bCharInput; #ifdef FEATURE_4NT_FILENAME_COMPLETION - TCHAR szPath[MAX_PATH]; + TCHAR szPath[MAX_PATH]; #endif #ifdef FEATURE_HISTORY - //BOOL bContinue=FALSE;/*is TRUE the second case will not be executed*/ - TCHAR PreviousChar; -#endif - - if (!GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi)) - { - /* No console */ - HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); - DWORD dwRead; - CHAR chr; - do - { - if (!ReadFile(hStdin, &chr, 1, &dwRead, NULL) || !dwRead) - return FALSE; + //BOOL bContinue=FALSE;/*is TRUE the second case will not be executed*/ + TCHAR PreviousChar; +#endif + + if (!GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi)) + { + /* No console */ + HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); + DWORD dwRead; + CHAR chr; + do + { + if (!ReadFile(hStdin, &chr, 1, &dwRead, NULL) || !dwRead) + return FALSE; #ifdef _UNICODE - MultiByteToWideChar(InputCodePage, 0, &chr, 1, &str[charcount++], 1); -#endif - } while (chr != '\n' && charcount < maxlen); - str[charcount] = _T('\0'); - return TRUE; - } - - /* get screen size */ - maxx = csbi.dwSize.X; - maxy = csbi.dwSize.Y; - - curx = orgx = csbi.dwCursorPosition.X; - cury = orgy = csbi.dwCursorPosition.Y; - - memset (str, 0, maxlen * sizeof (TCHAR)); - - SetCursorType (bInsert, TRUE); - - do - { - - bReturn = FALSE; - - ConInKey (&ir); - - if (ir.Event.KeyEvent.dwControlKeyState & - (RIGHT_ALT_PRESSED|LEFT_ALT_PRESSED| - RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED) ) - { - - switch (ir.Event.KeyEvent.wVirtualKeyCode) - { - + MultiByteToWideChar(InputCodePage, 0, &chr, 1, &str[charcount++], 1); +#endif + } while (chr != '\n' && charcount < maxlen); + str[charcount] = _T('\0'); + return TRUE; + } + + /* get screen size */ + maxx = csbi.dwSize.X; + maxy = csbi.dwSize.Y; + + curx = orgx = csbi.dwCursorPosition.X; + cury = orgy = csbi.dwCursorPosition.Y; + + memset (str, 0, maxlen * sizeof (TCHAR)); + + SetCursorType (bInsert, TRUE); + + do + { + + bReturn = FALSE; + + ConInKey (&ir); + + if (ir.Event.KeyEvent.dwControlKeyState & + (RIGHT_ALT_PRESSED |LEFT_ALT_PRESSED| + RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED) ) + { + switch (ir.Event.KeyEvent.wVirtualKeyCode) + { #ifdef FEATURE_HISTORY - - case 'K': - /*add the current command line to the history*/ - if (ir.Event.KeyEvent.dwControlKeyState & - (LEFT_CTRL_PRESSED|RIGHT_CTRL_PRESSED)) - { - - if (str[0]) - History(0,str); - - ClearCommandLine (str, maxlen, orgx, orgy); - current = charcount = 0; - curx = orgx; - cury = orgy; - //bContinue=TRUE; - break; - } - - case 'D': - /*delete current history entry*/ - if (ir.Event.KeyEvent.dwControlKeyState & - (LEFT_CTRL_PRESSED|RIGHT_CTRL_PRESSED)) - { - ClearCommandLine (str, maxlen, orgx, orgy); - History_del_current_entry(str); - current = charcount = _tcslen (str); - ConOutPrintf (_T("%s"), str); - GetCursorXY (&curx, &cury); - //bContinue=TRUE; - break; - } - -#endif/*FEATURE_HISTORY*/ - } - - - - - } - - bCharInput = FALSE; - - switch (ir.Event.KeyEvent.wVirtualKeyCode) - { - case VK_BACK: - /* <BACKSPACE> - delete character to left of cursor */ - if (current > 0 && charcount > 0) - { - if (current == charcount) - { - /* if at end of line */ - str[current - 1] = _T('\0'); - if (GetCursorX () != 0) - { - ConOutPrintf (_T("\b \b")); - curx--; - } - else - { - SetCursorXY ((SHORT)(maxx - 1), (SHORT)(GetCursorY () - 1)); - ConOutChar (_T(' ')); - SetCursorXY ((SHORT)(maxx - 1), (SHORT)(GetCursorY () - 1)); - cury--; - curx = maxx - 1; - } - } - else - { - for (count = current - 1; count < charcount; count++) - str[count] = str[count + 1]; - if (GetCursorX () != 0) - { - SetCursorXY ((SHORT)(GetCursorX () - 1), GetCursorY ()); - curx--; - } - else - { - SetCursorXY ((SHORT)(maxx - 1), (SHORT)(GetCursorY () - 1)); - cury--; - curx = maxx - 1; - } - GetCursorXY (&curx, &cury); - ConOutPrintf (_T("%s "), &str[current - 1]); - SetCursorXY (curx, cury); - } - charcount--; - current--; - } - break; - - case VK_INSERT: - /* toggle insert/overstrike mode */ - bInsert ^= TRUE; - SetCursorType (bInsert, TRUE); - break; - - case VK_DELETE: - /* delete character under cursor */ - if (current != charcount && charcount > 0) - { - for (count = current; count < charcount; count++) - str[count] = str[count + 1]; - charcount--; - GetCursorXY (&curx, &cury); - ConOutPrintf (_T("%s "), &str[current]); - SetCursorXY (curx, cury); - } - break; - - case VK_HOME: - /* goto beginning of string */ - if (current != 0) - { - SetCursorXY (orgx, orgy); - curx = orgx; - cury = orgy; - current = 0; - } - break; - - case VK_END: - /* goto end of string */ - if (current != charcount) - { - SetCursorXY (orgx, orgy); - ConOutPrintf (_T("%s"), str); - GetCursorXY (&curx, &cury); - current = charcount; - } - break; - - case VK_TAB: + case 'K': + /*add the current command line to the history*/ + if (ir.Event.KeyEvent.dwControlKeyState & + (LEFT_CTRL_PRESSED|RIGHT_CTRL_PRESSED)) + { + if (str[0]) + History(0,str); + + ClearCommandLine (str, maxlen, orgx, orgy); + current = charcount = 0; + curx = orgx; + cury = orgy; + //bContinue=TRUE; + break; + } + + case 'D': + /*delete current history entry*/ + if (ir.Event.KeyEvent.dwControlKeyState & + (LEFT_CTRL_PRESSED|RIGHT_CTRL_PRESSED)) + { + ClearCommandLine (str, maxlen, orgx, orgy); + History_del_current_entry(str); + current = charcount = _tcslen (str); + ConOutPrintf (_T("%s"), str); + GetCursorXY (&curx, &cury); + //bContinue=TRUE; + break; + } + +#endif /*FEATURE_HISTORY*/ + } + } + + bCharInput = FALSE; + + switch (ir.Event.KeyEvent.wVirtualKeyCode) + { + case VK_BACK: + /* <BACKSPACE> - delete character to left of cursor */ + if (current > 0 && charcount > 0) + { + if (current == charcount) + { + /* if at end of line */ + str[current - 1] = _T('\0'); + if (GetCursorX () != 0) + { + ConOutPrintf (_T("\b \b")); + curx--; + } + else + { + SetCursorXY ((SHORT)(maxx - 1), (SHORT)(GetCursorY () - 1)); + ConOutChar (_T(' ')); + SetCursorXY ((SHORT)(maxx - 1), (SHORT)(GetCursorY () - 1)); + cury--; + curx = maxx - 1; + } + } + else + { + for (count = current - 1; count < charcount; count++) + str[count] = str[count + 1]; + if (GetCursorX () != 0) + { + SetCursorXY ((SHORT)(GetCursorX () - 1), GetCursorY ()); + curx--; + } + else + { + SetCursorXY ((SHORT)(maxx - 1), (SHORT)(GetCursorY () - 1)); + cury--; + curx = maxx - 1; + } + GetCursorXY (&curx, &cury); + ConOutPrintf (_T("%s "), &str[current - 1]); + SetCursorXY (curx, cury); + } + charcount--; + current--; + } + break; + + case VK_INSERT: + /* toggle insert/overstrike mode */ + bInsert ^= TRUE; + SetCursorType (bInsert, TRUE); + break; + + case VK_DELETE: + /* delete character under cursor */ + if (current != charcount && charcount > 0) + { + for (count = current; count < charcount; count++) + str[count] = str[count + 1]; + charcount--; + GetCursorXY (&curx, &cury); + ConOutPrintf (_T("%s "), &str[current]); + SetCursorXY (curx, cury); + } + break; + + case VK_HOME: + /* goto beginning of string */ + if (current != 0) + { + SetCursorXY (orgx, orgy); + curx = orgx; + cury = orgy; + current = 0; + } + break; + + case VK_END: + /* goto end of string */ + if (current != charcount) + { + SetCursorXY (orgx, orgy); + ConOutPrintf (_T("%s"), str); + GetCursorXY (&curx, &cury); + current = charcount; + } + break; + + case VK_TAB: #ifdef FEATURE_UNIX_FILENAME_COMPLETION - /* expand current file name */ - if ((current == charcount) || - (current == charcount - 1 && - str[current] == _T('"'))) /* only works at end of line*/ - { - if (wLastKey != VK_TAB) - { - /* if first TAB, complete filename*/ - tempscreen = charcount; - CompleteFilename (str, charcount); - charcount = _tcslen (str); - current = charcount; - - SetCursorXY (orgx, orgy); - ConOutPrintf (_T("%s"), str); - - if (tempscreen > charcount) - { - GetCursorXY (&curx, &cury); - for (count = tempscreen - charcount; count--; ) - ConOutChar (_T(' ')); - SetCursorXY (curx, cury); - } - else - { - if (((charcount + orgx) / maxx) + orgy > maxy - 1) - orgy += maxy - ((charcount + orgx) / maxx + orgy + 1); - } - - /* set cursor position */ - SetCursorXY ((orgx + current) % maxx, - orgy + (orgx + current) / maxx); - GetCursorXY (&curx, &cury); - } - else - { - /*if second TAB, list matches*/ - if (ShowCompletionMatches (str, charcount)) - { - PrintPrompt (); - GetCursorXY (&orgx, &orgy); - ConOutPrintf (_T("%s"), str); - - /* set cursor position */ - SetCursorXY ((orgx + current) % maxx, - orgy + (orgx + current) / maxx); - GetCursorXY (&curx, &cury); - } - - } - } - else - { - MessageBeep (-1); - } + /* expand current file name */ + if ((current == charcount) || + (current == charcount - 1 && + str[current] == _T('"'))) /* only works at end of line*/ + { + if (wLastKey != VK_TAB) + { + /* if first TAB, complete filename*/ + tempscreen = charcount; + CompleteFilename (str, charcount); + charcount = _tcslen (str); + current = charcount; + + SetCursorXY (orgx, orgy); + ConOutPrintf (_T("%s"), str); + + if (tempscreen > charcount) + { + GetCursorXY (&curx, &cury); + for (count = tempscreen - charcount; count--; ) + ConOutChar (_T(' ')); + SetCursorXY (curx, cury); + } + else + { + if (((charcount + orgx) / maxx) + orgy > maxy - 1) + orgy += maxy - ((charcount + orgx) / maxx + orgy + 1); + } + + /* set cursor position */ + SetCursorXY ((orgx + current) % maxx, + orgy + (orgx + current) / maxx); + GetCursorXY (&curx, &cury); + } + else + { + /*if second TAB, list matches*/ + if (ShowCompletionMatches (str, charcount)) + { + PrintPrompt (); + GetCursorXY (&orgx, &orgy); + ConOutPrintf (_T("%s"), str); + + /* set cursor position */ + SetCursorXY ((orgx + current) % maxx, + orgy + (orgx + current) / maxx); + GetCursorXY (&curx, &cury); + } + + } + } + else + { + MessageBeep (-1); + } #endif #ifdef FEATURE_4NT_FILENAME_COMPLETION - - /* used to later see if we went down to the next line */ - tempscreen = charcount; - szPath[0]=_T('\0'); - - /* str is the whole things that is on the current line - that is and and out. arg 2 is weather it goes back - one file or forward one file */ - CompleteFilename(str, !(ir.Event.KeyEvent.dwControlKeyState & SHIFT_PRESSED), szPath, current); - /* Attempt to clear the line */ - ClearCommandLine (str, maxlen, orgx, orgy); - curx = orgx; - cury = orgy; - current = charcount = 0; - - /* Everything is deleted, lets add it back in */ - _tcscpy(str,szPath); - - /* Figure out where cusor is going to be after we print it */ - charcount = _tcslen (str); - current = charcount; - - SetCursorXY (orgx, orgy); - /* Print out what we have now */ - ConOutPrintf (_T("%s"), str); - - /* Move cursor accordingly */ - if(tempscreen > charcount) - { - GetCursorXY (&curx, &cury); - for(count = tempscreen - charcount; count--; ) - ConOutChar (_T(' ')); - SetCursorXY (curx, cury); - } - else - { - if(((charcount + orgx) / maxx) + orgy > maxy - 1) - orgy += maxy - ((charcount + orgx) / maxx + orgy + 1); - } - SetCursorXY((short)(((int)orgx + current) % maxx), (short)((int)orgy + ((int)orgx + current) / maxx)); - GetCursorXY(&curx, &cury); - -#endif - break; - - case _T('M'): - case _T('C'): - /* ^M does the same as return */ - bCharInput = TRUE; - if(!(ir.Event.KeyEvent.dwControlKeyState & - (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED))) - { - break; - } - - case VK_RETURN: - /* end input, return to main */ + /* used to later see if we went down to the next line */ + tempscreen = charcount; + szPath[0]=_T('\0'); + + /* str is the whole things that is on the current line + that is and and out. arg 2 is weather it goes back + one file or forward one file */ + CompleteFilename(str, !(ir.Event.KeyEvent.dwControlKeyState & SHIFT_PRESSED), szPath, current); + /* Attempt to clear the line */ + ClearCommandLine (str, maxlen, orgx, orgy); + curx = orgx; + cury = orgy; + current = charcount = 0; + + /* Everything is deleted, lets add it back in */ + _tcscpy(str,szPath); + + /* Figure out where cusor is going to be after we print it */ + charcount = _tcslen (str); + current = charcount; + + SetCursorXY (orgx, orgy); + /* Print out what we have now */ + ConOutPrintf (_T("%s"), str); + + /* Move cursor accordingly */ + if(tempscreen > charcount) + { + GetCursorXY (&curx, &cury); + for(count = tempscreen - charcount; count--; ) + ConOutChar (_T(' ')); + SetCursorXY (curx, cury); + } + else + { + if(((charcount + orgx) / maxx) + orgy > maxy - 1) + orgy += maxy - ((charcount + orgx) / maxx + orgy + 1); + } + SetCursorXY((short)(((int)orgx + current) % maxx), (short)((int)orgy + ((int)orgx + current) / maxx)); + GetCursorXY(&curx, &cury); +#endif + break; + + case _T('M'): + case _T('C'): + /* ^M does the same as return */ + bCharInput = TRUE; + if(!(ir.Event.KeyEvent.dwControlKeyState & + (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED))) + { + break; + } + + case VK_RETURN: + /* end input, return to main */ #ifdef FEATURE_HISTORY - /* add to the history */ - if (str[0]) - History (0, str); -#endif - str[charcount++] = _T('\n'); - str[charcount] = _T('\0'); - ConOutChar (_T('\n')); - bReturn = TRUE; - break; - - case VK_ESCAPE: - /* clear str Make this callable! */ - ClearCommandLine (str, maxlen, orgx, orgy); - curx = orgx; - cury = orgy; - current = charcount = 0; - break; + /* add to the history */ + if (str[0]) + History (0, str); +#endif + str[charcount++] = _T('\n'); + str[charcount] = _T('\0'); + ConOutChar (_T('\n')); + bReturn = TRUE; + break; + + case VK_ESCAPE: + /* clear str Make this callable! */ + ClearCommandLine (str, maxlen, orgx, orgy); + curx = orgx; + cury = orgy; + current = charcount = 0; + break; #ifdef FEATURE_HISTORY - case VK_F3: - History_move_to_bottom(); -#endif - case VK_UP: + case VK_F3: + History_move_to_bottom(); +#endif + case VK_UP: #ifdef FEATURE_HISTORY - /* get previous command from buffer */ - ClearCommandLine (str, maxlen, orgx, orgy); - History (-1, str); - current = charcount = _tcslen (str); - if (((charcount + orgx) / maxx) + orgy > maxy - 1) - orgy += maxy - ((charcount + orgx) / maxx + orgy + 1); - ConOutPrintf (_T("%s"), str); - GetCursorXY (&curx, &cury); -#endif - break; - - case VK_DOWN: + /* get previous command from buffer */ + ClearCommandLine (str, maxlen, orgx, orgy); + History (-1, str); + current = charcount = _tcslen (str); + if (((charcount + orgx) / maxx) + orgy > maxy - 1) + orgy += maxy - ((charcount + orgx) / maxx + orgy + 1); + ConOutPrintf (_T("%s"), str); + GetCursorXY (&curx, &cury); +#endif + break; + + case VK_DOWN: #ifdef FEATURE_HISTORY - /* get next command from buffer */ - ClearCommandLine (str, maxlen, orgx, orgy); - History (1, str); - current = charcount = _tcslen (str); - if (((charcount + orgx) / maxx) + orgy > maxy - 1) - orgy += maxy - ((charcount + orgx) / maxx + orgy + 1); - ConOutPrintf (_T("%s"), str); - GetCursorXY (&curx, &cury); -#endif - break; - - case VK_LEFT: - /* move cursor left */ - if (current > 0) - { - current--; - if (GetCursorX () == 0) - { - SetCursorXY ((SHORT)(maxx - 1), (SHORT)(GetCursorY () - 1)); - curx = maxx - 1; - cury--; - } - else - { - SetCursorXY ((SHORT)(GetCursorX () - 1), GetCursorY ()); - curx--; - } - } - else - { - MessageBeep (-1); - } - break; - - case VK_RIGHT: - /* move cursor right */ - if (current != charcount) - { - current++; - if (GetCursorX () == maxx - 1) - { - SetCursorXY (0, (SHORT)(GetCursorY () + 1)); - curx = 0; - cury++; - } - else - { - SetCursorXY ((SHORT)(GetCursorX () + 1), GetCursorY ()); - curx++; - } - } + /* get next command from buffer */ + ClearCommandLine (str, maxlen, orgx, orgy); + History (1, str); + current = charcount = _tcslen (str); + if (((charcount + orgx) / maxx) + orgy > maxy - 1) + orgy += maxy - ((charcount + orgx) / maxx + orgy + 1); + ConOutPrintf (_T("%s"), str); + GetCursorXY (&curx, &cury); +#endif + break; + + case VK_LEFT: + /* move cursor left */ + if (current > 0) + { + current--; + if (GetCursorX () == 0) + { + SetCursorXY ((SHORT)(maxx - 1), (SHORT)(GetCursorY () - 1)); + curx = maxx - 1; + cury--; + } + else + { + SetCursorXY ((SHORT)(GetCursorX () - 1), GetCursorY ()); + curx--; + } + } + else + { + MessageBeep (-1); + } + break; + + case VK_RIGHT: + /* move cursor right */ + if (current != charcount) + { + current++; + if (GetCursorX () == maxx - 1) + { + SetCursorXY (0, (SHORT)(GetCursorY () + 1)); + curx = 0; + cury++; + } + else + { + SetCursorXY ((SHORT)(GetCursorX () + 1), GetCursorY ()); + curx++; + } + } #ifdef FEATURE_HISTORY - else - { - LPCTSTR last = PeekHistory(-1); - if (last && charcount < (INT)_tcslen (last)) - { - PreviousChar = last[current]; - ConOutChar(PreviousChar); - GetCursorXY(&curx, &cury); - str[current++] = PreviousChar; - charcount++; - } - } -#endif - break; - - default: - /* This input is just a normal char */ - bCharInput = TRUE; - - } + else + { + LPCTSTR last = PeekHistory(-1); + if (last && charcount < (INT)_tcslen (last)) + { + PreviousChar = last[current]; + ConOutChar(PreviousChar); + GetCursorXY(&curx, &cury); + str[current++] = PreviousChar; + charcount++; + } + } +#endif + break; + + default: + /* This input is just a normal char */ + bCharInput = TRUE; + + } #ifdef _UNICODE - ch = ir.Event.KeyEvent.uChar.UnicodeChar; - if (ch >= 32 && (charcount != (maxlen - 2)) && bCharInput) + ch = ir.Event.KeyEvent.uChar.UnicodeChar; + if (ch >= 32 && (charcount != (maxlen - 2)) && bCharInput) #else - ch = ir.Event.KeyEvent.uChar.AsciiChar; - if ((UCHAR)ch >= 32 && (charcount != (maxlen - 2)) && bCharInput) + ch = ir.Event.KeyEvent.uChar.AsciiChar; + if ((UCHAR)ch >= 32 && (charcount != (maxlen - 2)) && bCharInput) #endif /* _UNICODE */ - { - /* insert character into string... */ - if (bInsert && current != charcount) - { - /* If this character insertion will cause screen scrolling, - * adjust the saved origin of the command prompt. */ - tempscreen = _tcslen(str + current) + curx; - if ((tempscreen % maxx) == (maxx - 1) && - (tempscreen / maxx) + cury == (maxy - 1)) - { - orgy--; - cury--; - } - - for (count = charcount; count > current; count--) - str[count] = str[count - 1]; - str[current++] = ch; - if (curx == maxx - 1) - curx = 0, cury++; - else - curx++; - ConOutPrintf (_T("%s"), &str[current - 1]); - SetCursorXY (curx, cury); - charcount++; - } - else - { - if (current == charcount) - charcount++; - str[current++] = ch; - if (GetCursorX () == maxx - 1 && GetCursorY () == maxy - 1) - orgy--, cury--; - if (GetCursorX () == maxx - 1) - curx = 0, cury++; - else - curx++; - ConOutChar (ch); - } - } - - //wLastKey = ir.Event.KeyEvent.wVirtualKeyCode; - } - while (!bReturn); - - SetCursorType (bInsert, TRUE); + { + /* insert character into string... */ + if (bInsert && current != charcount) + { + /* If this character insertion will cause screen scrolling, + * adjust the saved origin of the command prompt. */ + tempscreen = _tcslen(str + current) + curx; + if ((tempscreen % maxx) == (maxx - 1) && + (tempscreen / maxx) + cury == (maxy - 1)) + { + orgy--; + cury--; + } + + for (count = charcount; count > current; count--) + str[count] = str[count - 1]; + str[current++] = ch; + if (curx == maxx - 1) + curx = 0, cury++; + else + curx++; + ConOutPrintf (_T("%s"), &str[current - 1]); + SetCursorXY (curx, cury); + charcount++; + } + else + { + if (current == charcount) + charcount++; + str[current++] = ch; + if (GetCursorX () == maxx - 1 && GetCursorY () == maxy - 1) + orgy--, cury--; + if (GetCursorX () == maxx - 1) + curx = 0, cury++; + else + curx++; + ConOutChar (ch); + } + } + + //wLastKey = ir.Event.KeyEvent.wVirtualKeyCode; + } + while (!bReturn); + + SetCursorType (bInsert, TRUE); #ifdef FEATURE_ALIASES - /* expand all aliases */ - ExpandAlias (str, maxlen); + /* expand all aliases */ + ExpandAlias (str, maxlen); #endif /* FEATURE_ALIAS */ - return TRUE; + return TRUE; }