Alexander Wurzinger(Lohnegrim)' E-Mail 'Lohnegrim@gmx.net' fix follow bugs Commend "'type/p','dir/p','dir/s','dir/p/s' did not work with CTRL+C"\n"'pause' does not continie ones you Press Ctrl/Shift/Alt" Modified: trunk/reactos/subsys/system/cmd/cmd.h Modified: trunk/reactos/subsys/system/cmd/console.c Modified: trunk/reactos/subsys/system/cmd/dir.c Modified: trunk/reactos/subsys/system/cmd/misc.c Modified: trunk/reactos/subsys/system/cmd/type.c _____
Modified: trunk/reactos/subsys/system/cmd/cmd.h --- trunk/reactos/subsys/system/cmd/cmd.h 2005-12-17 21:41:15 UTC (rev 20233) +++ trunk/reactos/subsys/system/cmd/cmd.h 2005-12-17 21:51:36 UTC (rev 20234) @@ -144,7 +144,7 @@
VOID ConOutChar (TCHAR); VOID ConOutPuts (LPTSTR); VOID ConOutPrintf (LPTSTR, ...); -VOID ConOutPrintfPaging (BOOL NewPage, LPTSTR, ...); +INT ConOutPrintfPaging (BOOL NewPage, LPTSTR, ...); VOID ConErrChar (TCHAR); VOID ConErrPuts (LPTSTR); VOID ConErrPrintf (LPTSTR, ...); _____
Modified: trunk/reactos/subsys/system/cmd/console.c --- trunk/reactos/subsys/system/cmd/console.c 2005-12-17 21:41:15 UTC (rev 20233) +++ trunk/reactos/subsys/system/cmd/console.c 2005-12-17 21:51:36 UTC (rev 20234) @@ -13,71 +13,71 @@
* 01-Jul-2005 (Brandon Turner) turnerb7@msu.edu) * Added ConPrintfPaging and ConOutPrintfPaging */ - - - + + + #include <precomp.h> #include "resource.h" - - + + #define OUTPUT_BUFFER_SIZE 4096 - - + + UINT InputCodePage; UINT OutputCodePage; - - + + VOID ConInDisable (VOID) { HANDLE hInput = GetStdHandle (STD_INPUT_HANDLE); DWORD dwMode; - + GetConsoleMode (hInput, &dwMode); dwMode &= ~ENABLE_PROCESSED_INPUT; SetConsoleMode (hInput, dwMode); } - - + + VOID ConInEnable (VOID) { HANDLE hInput = GetStdHandle (STD_INPUT_HANDLE); DWORD dwMode; - + GetConsoleMode (hInput, &dwMode); dwMode |= ENABLE_PROCESSED_INPUT; SetConsoleMode (hInput, dwMode); } - - + + VOID ConInDummy (VOID) { HANDLE hInput = GetStdHandle (STD_INPUT_HANDLE); INPUT_RECORD dummy; DWORD dwRead; - + #ifdef _DEBUG if (hInput == INVALID_HANDLE_VALUE) DebugPrintf (_T("Invalid input handle!!!\n")); #endif /* _DEBUG */ ReadConsoleInput (hInput, &dummy, 1, &dwRead); } - + VOID ConInFlush (VOID) { FlushConsoleInputBuffer (GetStdHandle (STD_INPUT_HANDLE)); } - - + + VOID ConInKey (PINPUT_RECORD lpBuffer) { HANDLE hInput = GetStdHandle (STD_INPUT_HANDLE); DWORD dwRead; - + #ifdef _DEBUG if (hInput == INVALID_HANDLE_VALUE) DebugPrintf (_T("Invalid input handle!!!\n")); #endif /* _DEBUG */ - + do { ReadConsoleInput (hInput, lpBuffer, 1, &dwRead); @@ -87,19 +87,19 @@ } while (TRUE); } - - - + + + VOID ConInString (LPTSTR lpInput, DWORD dwLength) { DWORD dwOldMode; DWORD dwRead; HANDLE hFile; - + LPTSTR p; DWORD i; PCHAR pBuf; - + #ifdef _UNICODE pBuf = (PCHAR)malloc(dwLength); #else @@ -108,11 +108,11 @@ ZeroMemory (lpInput, dwLength * sizeof(TCHAR)); hFile = GetStdHandle (STD_INPUT_HANDLE); GetConsoleMode (hFile, &dwOldMode); - + SetConsoleMode (hFile, ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT); - + ReadFile (hFile, (PVOID)pBuf, dwLength, &dwRead, NULL); - + #ifdef _UNICODE MultiByteToWideChar( InputCodePage, 0, pBuf, dwLength + 1, lpInput, dwLength + 1); #endif @@ -125,14 +125,14 @@ break; } } - + #ifdef _UNICODE free(pBuf); #endif - + SetConsoleMode (hFile, dwOldMode); } - + static VOID ConChar(TCHAR c, DWORD nStdHandle) { DWORD dwWritten; @@ -153,18 +153,18 @@ &dwWritten, NULL); } - + VOID ConOutChar (TCHAR c) { ConChar(c, STD_OUTPUT_HANDLE); } - + VOID ConPuts(LPTSTR szText, DWORD nStdHandle) { DWORD dwWritten; PCHAR pBuf; INT len; - + len = _tcslen(szText); #ifdef _UNICODE pBuf = malloc(len + 1); @@ -186,35 +186,35 @@ free(pBuf); #endif } - + VOID ConOutResPaging(BOOL NewPage, UINT resID) { TCHAR szMsg[RC_STRING_MAX_SIZE]; LoadString(CMD_ModuleHandle, resID, szMsg, RC_STRING_MAX_SIZE); ConOutPrintfPaging(NewPage, szMsg); } - + VOID ConOutResPuts (UINT resID) { TCHAR szMsg[RC_STRING_MAX_SIZE]; LoadString(CMD_ModuleHandle, resID, szMsg, RC_STRING_MAX_SIZE); - + ConPuts(szMsg, STD_OUTPUT_HANDLE); } - + VOID ConOutPuts (LPTSTR szText) { ConPuts(szText, STD_OUTPUT_HANDLE); } - - + + VOID ConPrintf(LPTSTR szFormat, va_list arg_ptr, DWORD nStdHandle) { INT len; PCHAR pBuf; TCHAR szOut[OUTPUT_BUFFER_SIZE]; DWORD dwWritten; - + len = _vstprintf (szOut, szFormat, arg_ptr); #ifdef _UNICODE pBuf = malloc(len + 1); @@ -222,67 +222,67 @@ #else pBuf = szOut; #endif - + WriteFile (GetStdHandle (nStdHandle), pBuf, len, &dwWritten, NULL); - - + + #ifdef UNICODE free(pBuf); #endif } - -VOID ConPrintfPaging(BOOL NewPage, LPTSTR szFormat, va_list arg_ptr, DWORD nStdHandle) + +INT ConPrintfPaging(BOOL NewPage, LPTSTR szFormat, va_list arg_ptr, DWORD nStdHandle) { INT len; PCHAR pBuf; CONSOLE_SCREEN_BUFFER_INFO csbi; TCHAR szOut[OUTPUT_BUFFER_SIZE]; DWORD dwWritten; - + /* used to count number of lines since last pause */ static int LineCount = 0; - + /* used to see how big the screen is */ int ScreenLines = 0; - + /* the number of chars in a roow */ int ScreenCol = 0; - + /* chars since end of line */ int CharEL = 0; - + int i = 0; - + if(NewPage == TRUE) LineCount = 0; - + /* rest LineCount and return if no string have been given */ if (szFormat == NULL) - return; - - + return 0; + + //get the size of the visual screen that can be printed too if (!GetConsoleScreenBufferInfo(hConsole, &csbi)) { // we assuming its a file handle ConPrintf(szFormat, arg_ptr, nStdHandle); - return; + return 0; } //subtract 2 to account for "press any key..." and for the blank line at the end of PagePrompt() ScreenLines = (csbi.srWindow.Bottom - csbi.srWindow.Top) - 4; ScreenCol = (csbi.srWindow.Right - csbi.srWindow.Left) + 1; - + //make sure they didnt make the screen to small if(ScreenLines<4) { ConPrintf(szFormat, arg_ptr, nStdHandle); - return ; + return 0; } - + len = _vstprintf (szOut, szFormat, arg_ptr); #ifdef _UNICODE pBuf = malloc(len + 1); @@ -290,10 +290,10 @@ #else pBuf = szOut; #endif - + for(i = 0; i < len; i++) { - + if(pBuf[i] == _T('\n')) { LineCount++; @@ -311,37 +311,38 @@ CharEL=0; } } - + /* FIXME : write more that one char at time */ WriteFile (GetStdHandle (nStdHandle),&pBuf[i],sizeof(CHAR),&dwWritten,NULL); if(LineCount >= ScreenLines) { if(_tcsnicmp(&pBuf[i], _T("\n"), 2)!=0) WriteFile (GetStdHandle (nStdHandle),_T("\n"),sizeof(CHAR),&dwWritten,NULL); - + if(PagePrompt() != PROMPT_YES) { - return; + return 1; } //reset the number of lines being printed LineCount = 0; CharEL=0; } - + } - + #ifdef UNICODE free(pBuf); #endif + return 0; } - + VOID ConErrFormatMessage (DWORD MessageId, ...) { TCHAR szMsg[RC_STRING_MAX_SIZE]; DWORD ret; LPTSTR text; va_list arg_ptr; - + va_start (arg_ptr, MessageId); ret = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, @@ -350,7 +351,7 @@ (LPTSTR) &text, 0, &arg_ptr); - + va_end (arg_ptr); if(ret > 0) { @@ -363,14 +364,14 @@ ConErrPrintf(szMsg); } } - + VOID ConOutFormatMessage (DWORD MessageId, ...) { TCHAR szMsg[RC_STRING_MAX_SIZE]; DWORD ret; LPTSTR text; va_list arg_ptr; - + va_start (arg_ptr, MessageId); ret = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, @@ -379,7 +380,7 @@ (LPTSTR) &text, 0, &arg_ptr); - + va_end (arg_ptr); if(ret > 0) { @@ -392,58 +393,60 @@ ConErrPrintf(szMsg); } } - + VOID ConOutPrintf (LPTSTR szFormat, ...) { va_list arg_ptr; - + va_start (arg_ptr, szFormat); ConPrintf(szFormat, arg_ptr, STD_OUTPUT_HANDLE); va_end (arg_ptr); } - -VOID ConOutPrintfPaging (BOOL NewPage, LPTSTR szFormat, ...) + +INT ConOutPrintfPaging (BOOL NewPage, LPTSTR szFormat, ...) { + INT iReturn; va_list arg_ptr; - + va_start (arg_ptr, szFormat); - ConPrintfPaging(NewPage, szFormat, arg_ptr, STD_OUTPUT_HANDLE); + iReturn = ConPrintfPaging(NewPage, szFormat, arg_ptr, STD_OUTPUT_HANDLE); va_end (arg_ptr); + return iReturn; } - + VOID ConErrChar (TCHAR c) { ConChar(c, STD_ERROR_HANDLE); } - - + + VOID ConErrResPuts (UINT resID) { TCHAR szMsg[RC_STRING_MAX_SIZE]; LoadString(CMD_ModuleHandle, resID, szMsg, RC_STRING_MAX_SIZE); ConPuts(szMsg, STD_ERROR_HANDLE); } - + VOID ConErrPuts (LPTSTR szText) { ConPuts(szText, STD_ERROR_HANDLE); } - - + + VOID ConErrPrintf (LPTSTR szFormat, ...) { va_list arg_ptr; - + va_start (arg_ptr, szFormat); ConPrintf(szFormat, arg_ptr, STD_ERROR_HANDLE); va_end (arg_ptr); } - + #ifdef _DEBUG VOID DebugPrintf (LPTSTR szFormat, ...) { va_list arg_ptr; - + va_start (arg_ptr, szFormat); ConPrintf(szFormat, arg_ptr, STD_ERROR_HANDLE); va_end (arg_ptr); @@ -456,69 +459,69 @@ #endif } #endif /* _DEBUG */ - + VOID SetCursorXY (SHORT x, SHORT y) { COORD coPos; - + coPos.X = x; coPos.Y = y; SetConsoleCursorPosition (GetStdHandle (STD_OUTPUT_HANDLE), coPos); } - - + + VOID GetCursorXY (PSHORT x, PSHORT y) { CONSOLE_SCREEN_BUFFER_INFO csbi; - + GetConsoleScreenBufferInfo (hConsole, &csbi); - + *x = csbi.dwCursorPosition.X; *y = csbi.dwCursorPosition.Y; } - - + + SHORT GetCursorX (VOID) { CONSOLE_SCREEN_BUFFER_INFO csbi; - + GetConsoleScreenBufferInfo (hConsole, &csbi); - + return csbi.dwCursorPosition.X; } - - + + SHORT GetCursorY (VOID) { CONSOLE_SCREEN_BUFFER_INFO csbi; - + GetConsoleScreenBufferInfo (hConsole, &csbi); - + return csbi.dwCursorPosition.Y; } - - + + VOID GetScreenSize (PSHORT maxx, PSHORT maxy) { CONSOLE_SCREEN_BUFFER_INFO csbi; - + GetConsoleScreenBufferInfo (hConsole, &csbi); - + if (maxx) *maxx = csbi.dwSize.X; if (maxy) *maxy = csbi.dwSize.Y; } - - + + VOID SetCursorType (BOOL bInsert, BOOL bVisible) { CONSOLE_CURSOR_INFO cci; - + cci.dwSize = bInsert ? 10 : 99; cci.bVisible = bVisible; - + SetConsoleCursorInfo (GetStdHandle (STD_OUTPUT_HANDLE), &cci); } - + /* EOF */ _____
Modified: trunk/reactos/subsys/system/cmd/dir.c --- trunk/reactos/subsys/system/cmd/dir.c 2005-12-17 21:41:15 UTC (rev 20233) +++ trunk/reactos/subsys/system/cmd/dir.c 2005-12-17 21:51:36 UTC (rev 20234) @@ -1270,13 +1270,16 @@
/* Print the line */ if(lpFlags->bPause) - ConOutPrintfPaging(FALSE,_T("%10s %-8s %*s%s %s\n"), + { + if (ConOutPrintfPaging(FALSE,_T("%10s %-8s %*s%s %s\n"), szDate, szTime, iSizeFormat, szSize, szShortName, - ptrFiles[i]->cFileName); + ptrFiles[i]->cFileName) == 1) + return ; + } else ConOutPrintf(_T("%10s %-8s %*s%s %s\n"), szDate, @@ -1463,13 +1466,18 @@
/* Print the line */ if(lpFlags->bPause) - ConOutPrintfPaging(FALSE,_T("%-8s %-3s %*s %s %s\n"), + { + if (ConOutPrintfPaging(FALSE,_T("%-8s %-3s %*s %s %s\n"), szName, /* The file's 8.3 name */ szExt, /* The file's 8.3 extension */
iSizeFormat, /* print format for size column */ szSize, /* The size of file or "<DIR>" for dirs */ szDate, /* The date of file/dir */ - szTime); /* The time of file/dir */ + szTime) == 1) /* The time of file/dir */ + { + return ; + } + } else ConOutPrintf(_T("%-8s %-3s %*s %s %s\n"), szName, /* The file's 8.3 name */ @@ -1509,7 +1517,12 @@ _tcscpy(szFullName, lpCurPath); _tcscat(szFullName, ptrFiles[i]->cFileName); if(lpFlags->bPause) - ConOutPrintfPaging(FALSE,_T("%s\n"), szFullName); + { + if (ConOutPrintfPaging(FALSE,_T("%s\n"), szFullName) == 1) + { + return ; + } + } else ConOutPrintf(_T("%s\n"), szFullName); } @@ -1517,7 +1530,12 @@ { /* if we are not in recursive mode we print the file names */ if(lpFlags->bPause) - ConOutPrintfPaging(FALSE,_T("%s\n"),ptrFiles[i]->cFileName); + { + if (ConOutPrintfPaging(FALSE,_T("%s\n"),ptrFiles[i]->cFileName) == 1) + { + return ; + } + } else
ConOutPrintf(_T("%s\n"),ptrFiles[i]->cFileName); } @@ -1552,7 +1570,12 @@ { LoadString(CMD_ModuleHandle, STRING_DIR_HELP7, szMsg, RC_STRING_MAX_SIZE); if(lpFlags->bPause) - ConOutPrintfPaging(FALSE,szMsg, szTemp); + { + if (ConOutPrintfPaging(FALSE,szMsg, szTemp) == 1) + { + return ; + } + } else ConOutPrintf(szMsg, szTemp); } @@ -1896,7 +1919,10 @@
/* Free array */ free(ptrFileArray); + if (CheckCtrlBreak(BREAK_INPUT)) + return 1;
+ /* Add statistics to recursive statistics*/ recurse_dir_cnt += dwCountDirs; recurse_file_cnt += dwCountFiles; @@ -1924,7 +1950,10 @@ _tcscpy(szFullFileSpec, szFullPath); _tcscat(szFullFileSpec, wfdFileInfo.cFileName); /* We do the same for tha folder */ - DirList(szFullFileSpec, szFilespec, pLine,lpFlags); + if (DirList(szFullFileSpec, szFilespec, pLine,lpFlags) != 0) + { + return 1; + } } } }while(FindNextFile(hRecSearch,&wfdFileInfo)); _____
Modified: trunk/reactos/subsys/system/cmd/misc.c --- trunk/reactos/subsys/system/cmd/misc.c 2005-12-17 21:41:15 UTC (rev 20233) +++ trunk/reactos/subsys/system/cmd/misc.c 2005-12-17 21:51:36 UTC (rev 20234) @@ -44,7 +44,7 @@
HANDLE hInput = GetStdHandle (STD_INPUT_HANDLE); INPUT_RECORD irBuffer; DWORD dwRead; - +/* do { ReadConsoleInput (hInput, &irBuffer, 1, &dwRead); @@ -60,6 +60,39 @@ } } while (TRUE); +*/ + do + { + ReadConsoleInput (hInput, &irBuffer, 1, &dwRead); + + if (irBuffer.EventType == KEY_EVENT) + { + if (irBuffer.Event.KeyEvent.dwControlKeyState & + (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED)) + { + if (irBuffer.Event.KeyEvent.wVirtualKeyCode == 'C') + { +// if (irBuffer.Event.KeyEvent.bKeyDown == TRUE) +// { + bCtrlBreak = TRUE; + break; +// } + } + } + else if ((irBuffer.Event.KeyEvent.wVirtualKeyCode == VK_SHIFT) || + (irBuffer.Event.KeyEvent.wVirtualKeyCode == VK_MENU) || + (irBuffer.Event.KeyEvent.wVirtualKeyCode == VK_CONTROL)) + { + ; + } + + else + { + break; + } + } + } + while (TRUE);
#ifndef _UNICODE return irBuffer.Event.KeyEvent.uChar.AsciiChar; @@ -468,7 +501,10 @@ if ((ir.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE) || ((ir.Event.KeyEvent.wVirtualKeyCode == _T('C')) && (ir.Event.KeyEvent.dwControlKeyState & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED)))) + { + bCtrlBreak = TRUE; return PROMPT_BREAK; + }
return PROMPT_YES; } _____
Modified: trunk/reactos/subsys/system/cmd/type.c --- trunk/reactos/subsys/system/cmd/type.c 2005-12-17 21:41:15 UTC (rev 20233) +++ trunk/reactos/subsys/system/cmd/type.c 2005-12-17 21:51:36 UTC (rev 20234) @@ -108,7 +108,13 @@
if(bPaging) { if(bRet) - ConOutPrintfPaging(bFirstTime, buff); + { + if (ConOutPrintfPaging(bFirstTime, buff) == 1) + { + bCtrlBreak = FALSE; + return 0; + } + } } else {