diff --git a/rosapps/cmd/.cvsignore b/rosapps/cmd/.cvsignore deleted file mode 100644 index b8b4afb7e30..00000000000 --- a/rosapps/cmd/.cvsignore +++ /dev/null @@ -1,16 +0,0 @@ -*.sys -*.exe -*.dll -*.cpl -*.a -*.o -*.d -*.coff -*.dsp -*.dsw -*.aps -*.ncb -*.opt -*.sym -*.plg -*.bak diff --git a/rosapps/cmd/alias.c b/rosapps/cmd/alias.c deleted file mode 100644 index 616cf3966b1..00000000000 --- a/rosapps/cmd/alias.c +++ /dev/null @@ -1,356 +0,0 @@ -/* - * ALIAS.C - alias administration module. - * - * - * History: - * - * 02/02/1996 (Oliver Mueller) - * started. - * - * 02/03/1996 (Oliver Mueller) - * Added sorting algorithm and case sensitive substitution by using - * partstrupr(). - * - * 27 Jul 1998 John P. Price - * added config.h include - * added ifdef's to disable aliases - * - * 09-Dec-1998 (Eric Kohl ) - * Fixed crash when removing an alias in DeleteAlias(). - * Added help text ("/?"). - * - * 14-Jan-1998 (Eric Kohl ) - * Clean up and Unicode safe! - * - * 24-Jan-1998 (Eric Kohl ) - * Redirection safe! - */ - - -#include "config.h" - -#ifdef FEATURE_ALIASES - -#include -#include -#include -#include -#include - -#include "cmd.h" - - -typedef struct tagALIAS -{ - struct tagALIAS *next; - LPTSTR lpName; - LPTSTR lpSubst; - DWORD dwUsed; -} ALIAS, *LPALIAS; - - -static LPALIAS lpFirst = NULL; -static LPALIAS lpLast = NULL; -static DWORD dwUsed = 0; - - -/* module internal functions */ -/* strlwr only for first word in string */ -static VOID -partstrlwr (LPTSTR str) -{ - LPTSTR c = str; - while (*c && !_istspace (*c) && *c != _T('=')) - { - *c = _totlower (*c); - c++; - } -} - - -static VOID -PrintAlias (VOID) -{ - LPALIAS ptr = lpFirst; - while (ptr) - { - ConOutPrintf (_T("%s=%s\n"), ptr->lpName, ptr->lpSubst); - ptr = ptr->next; - } -} - - -static VOID -DeleteAlias (LPTSTR pszName) -{ - LPALIAS ptr = lpFirst; - LPALIAS prev = NULL; - - while (ptr) - { - if (!_tcsicmp (ptr->lpName, pszName)) - { - if (prev) - prev->next = ptr->next; - else - lpFirst = ptr->next; - free (ptr->lpName); - free (ptr->lpSubst); - free (ptr); - return; - } - prev = ptr; - ptr = ptr->next; - } -} - - -static VOID -AddAlias (LPTSTR name, LPTSTR subst) -{ - LPALIAS ptr = lpFirst; - LPALIAS prev, entry; - LPTSTR s; - - while (ptr) - { - if (!_tcsicmp (ptr->lpName, name)) - { - s = (LPTSTR)malloc ((_tcslen (subst) + 1)*sizeof(TCHAR)); - if (!s) - { - error_out_of_memory (); - return; - } - - free (ptr->lpSubst); - ptr->lpSubst = s; - _tcscpy (ptr->lpSubst, subst); - return; - } - ptr = ptr->next; - } - - ptr = (LPALIAS)malloc (sizeof (ALIAS)); - if (!ptr) - return; - - ptr->next = 0; - - ptr->lpName = (LPTSTR)malloc ((_tcslen (name) + 1)*sizeof(TCHAR)); - if (!ptr->lpName) - { - error_out_of_memory (); - free (ptr); - return; - } - _tcscpy (ptr->lpName, name); - - ptr->lpSubst = (LPTSTR)malloc ((_tcslen (subst) + 1)*sizeof(TCHAR)); - if (!ptr->lpSubst) - { - error_out_of_memory (); - free (ptr->lpName); - free (ptr); - return; - } - _tcscpy (ptr->lpSubst, subst); - - /* it's necessary for recursive substitution */ - partstrlwr (ptr->lpSubst); - - ptr->dwUsed = 0; - - /* Alias table must be sorted! - * Here a little example: - * command line = "ls -c" - * If the entries are - * ls=dir - * ls -c=ls /w - * command line will be expanded to "dir -c" which is not correct. - * If the entries are sortet as - * ls -c=ls /w - * ls=dir - * it will be expanded to "dir /w" which is a valid DOS command. - */ - entry = lpFirst; - prev = 0; - while (entry) - { - if (_tcsicmp (ptr->lpName, entry->lpName) > 0) - { - if (prev) - { - prev->next = ptr; - ptr->next = entry; - } - else - { - ptr->next = entry; - lpFirst = ptr; - } - return; - } - prev = entry; - entry = entry->next; - } - - /* The new entry is the smallest (or the first) and must be - * added to the end of the list. - */ - if (!lpFirst) - lpFirst = ptr; - else - lpLast->next = ptr; - lpLast = ptr; - - return; -} - - -VOID InitializeAlias (VOID) -{ - lpFirst = NULL; - lpLast = NULL; - dwUsed = 0; -} - -VOID DestroyAlias (VOID) -{ - if (lpFirst == NULL) - return; - - while (lpFirst->next != NULL) - { - lpLast = lpFirst; - lpFirst = lpLast->next; - - free (lpLast->lpName); - free (lpLast->lpSubst); - free (lpLast); - } - - free (lpFirst->lpName); - free (lpFirst->lpSubst); - free (lpFirst); - - lpFirst = NULL; - lpLast = NULL; - dwUsed = 0; -} - -/* specified routines */ -VOID ExpandAlias (LPTSTR cmd, INT maxlen) -{ - unsigned n = 0, - m, - i, - len; - short d = 1; - LPALIAS ptr = lpFirst; - - dwUsed++; - if (dwUsed == 0) - { - while (ptr) - ptr->dwUsed = 0; - ptr = lpFirst; - dwUsed = 1; - } - - /* skipping white spaces */ - while (_istspace (cmd[n])) - n++; - - partstrlwr (&cmd[n]); - - if (!_tcsncmp (&cmd[n], _T("NOALIAS"), 7) && - (_istspace (cmd[n + 7]) || cmd[n + 7] == _T('\0'))) - { - memmove (cmd, &cmd[n + 7], (_tcslen (&cmd[n + 7]) + 1) * sizeof (TCHAR)); - return; - } - - /* substitution loop */ - while (d) - { - d = 0; - while (ptr) - { - len = _tcslen (ptr->lpName); - if (!_tcsncmp (&cmd[n], ptr->lpName, len) && - (_istspace (cmd[n + len]) || cmd[n + len] == _T('\0')) && - ptr->dwUsed != dwUsed) - { - m = _tcslen (ptr->lpSubst); - if ((int)(_tcslen (cmd) - len + m - n) > maxlen) - { - ConErrPrintf (_T("Command line too long after alias expansion!\n")); - /* the parser won't cause any problems with an empty line */ - cmd[0] = _T('\0'); - } - else - { - memmove (&cmd[m], &cmd[n + len], (_tcslen(&cmd[n + len]) + 1) * sizeof (TCHAR)); - for (i = 0; i < m; i++) - cmd[i] = ptr->lpSubst[i]; - ptr->dwUsed = dwUsed; - /* whitespaces are removed! */ - n = 0; - d = 1; - } - } - ptr = ptr->next; - } - } -} - - -INT CommandAlias (LPTSTR cmd, LPTSTR param) -{ - LPTSTR ptr; - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Sets, removes or shows aliases.\n" - "\n" - "ALIAS [alias=[command]]\n" - "\n" - " alias Name for an alias.\n" - " command Text to be substituted for an alias.\n" - "\n" -// "For example:\n" - "To list all aliases:\n" - " ALIAS\n\n" - "To set a new or replace an existing alias:\n" - " ALIAS da=dir a:\n\n" - "To remove an alias from the alias list:\n" - " ALIAS da=" -// "Type ALIAS without a parameter to display the alias list.\n" - )); - return 0; - } - - if (param[0] == _T('\0')) - { - PrintAlias (); - return 0; - } - - /* error if no '=' found */ - if ((ptr = _tcschr (param, _T('='))) == 0) - return 1; - - /* Split rest into name and substitute */ - *ptr++ = _T('\0'); - - partstrlwr (param); - - if (ptr[0] == _T('\0')) - DeleteAlias (param); - else - AddAlias (param, ptr); - - return 0; -} -#endif diff --git a/rosapps/cmd/attrib.c b/rosapps/cmd/attrib.c deleted file mode 100644 index a4435aa0991..00000000000 --- a/rosapps/cmd/attrib.c +++ /dev/null @@ -1,356 +0,0 @@ -/* - * ATTRIB.C - attrib internal command. - * - * - * History: - * - * 04-Dec-1998 (Eric Kohl ) - * started - * - * 09-Dec-1998 (Eric Kohl ) - * implementation works, except recursion ("attrib /s"). - * - * 05-Jan-1999 (Eric Kohl ) - * major rewrite. - * fixed recursion ("attrib /s"). - * started directory support ("attrib /s /d"). - * updated help text. - * - * 14-Jan-1999 (Eric Kohl ) - * Unicode ready! - * - * 19-Jan-1999 (Eric Kohl ) - * Redirection ready! - * - * 21-Jan-1999 (Eric Kohl ) - * Added check for invalid filenames. - * - * 23-Jan-1999 (Eric Kohl ) - * Added handling of multiple filenames. - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_ATTRIB - -#include -#include -#include -#include - -#include "cmd.h" - - -static VOID -PrintAttribute (LPTSTR pszPath, LPTSTR pszFile, BOOL bRecurse) -{ - WIN32_FIND_DATA findData; - HANDLE hFind; - TCHAR szFullName[MAX_PATH]; - LPTSTR pszFileName; - - /* prepare full file name buffer */ - _tcscpy (szFullName, pszPath); - pszFileName = szFullName + _tcslen (szFullName); - - /* display all subdirectories */ - if (bRecurse) - { - /* append file name */ - _tcscpy (pszFileName, pszFile); - - hFind = FindFirstFile (szFullName, &findData); - if (hFind == INVALID_HANDLE_VALUE) - { - ErrorMessage (GetLastError (), pszFile); - return; - } - - do - { - if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) - continue; - - if (!_tcscmp (findData.cFileName, _T(".")) || - !_tcscmp (findData.cFileName, _T(".."))) - continue; - - _tcscpy (pszFileName, findData.cFileName); - _tcscat (pszFileName, _T("\\")); - PrintAttribute (szFullName, pszFile, bRecurse); - } - while (FindNextFile (hFind, &findData)); - FindClose (hFind); - } - - /* append file name */ - _tcscpy (pszFileName, pszFile); - - /* display current directory */ - hFind = FindFirstFile (szFullName, &findData); - if (hFind == INVALID_HANDLE_VALUE) - { - ErrorMessage (GetLastError (), pszFile); - return; - } - - do - { - if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - continue; - - _tcscpy (pszFileName, findData.cFileName); - - ConOutPrintf (_T("%c %c%c%c %s\n"), - (findData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) ? _T('A') : _T(' '), - (findData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) ? _T('S') : _T(' '), - (findData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) ? _T('H') : _T(' '), - (findData.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? _T('R') : _T(' '), - szFullName); - } - while (FindNextFile (hFind, &findData)); - FindClose (hFind); -} - - -static VOID -ChangeAttribute (LPTSTR pszPath, LPTSTR pszFile, DWORD dwMask, - DWORD dwAttrib, BOOL bRecurse, BOOL bDirectories) -{ - WIN32_FIND_DATA findData; - HANDLE hFind; - DWORD dwAttribute; - TCHAR szFullName[MAX_PATH]; - LPTSTR pszFileName; - - /* prepare full file name buffer */ - _tcscpy (szFullName, pszPath); - pszFileName = szFullName + _tcslen (szFullName); - - /* change all subdirectories */ - if (bRecurse) - { - /* append file name */ - _tcscpy (pszFileName, _T("*.*")); - - hFind = FindFirstFile (szFullName, &findData); - if (hFind == INVALID_HANDLE_VALUE) - { - ErrorMessage (GetLastError (), pszFile); - return; - } - - do - { - if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - { - if (!_tcscmp (findData.cFileName, _T(".")) || - !_tcscmp (findData.cFileName, _T(".."))) - continue; - - _tcscpy (pszFileName, findData.cFileName); - _tcscat (pszFileName, _T("\\")); - - ChangeAttribute (szFullName, pszFile, dwMask, - dwAttrib, bRecurse, bDirectories); - } - } - while (FindNextFile (hFind, &findData)); - FindClose (hFind); - } - - /* append file name */ - _tcscpy (pszFileName, pszFile); - - hFind = FindFirstFile (szFullName, &findData); - if (hFind == INVALID_HANDLE_VALUE) - { - ErrorMessage (GetLastError (), pszFile); - return; - } - - do - { - if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - continue; - - _tcscpy (pszFileName, findData.cFileName); - - dwAttribute = GetFileAttributes (szFullName); - - if (dwAttribute != 0xFFFFFFFF) - { - dwAttribute = (dwAttribute & ~dwMask) | dwAttrib; - SetFileAttributes (szFullName, dwAttribute); - } - } - while (FindNextFile (hFind, &findData)); - FindClose (hFind); -} - - -INT CommandAttrib (LPTSTR cmd, LPTSTR param) -{ - LPTSTR *arg; - INT argc, i; - TCHAR szPath[MAX_PATH]; - TCHAR szFileName [MAX_PATH]; - BOOL bRecurse = FALSE; - BOOL bDirectories = FALSE; - DWORD dwAttrib = 0; - DWORD dwMask = 0; - - /* initialize strings */ - szPath[0] = _T('\0'); - szFileName[0] = _T('\0'); - - /* print help */ - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Displays or changes file attributes.\n\n" - "ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n" - " [/S [/D]]\n\n" - " + Sets an attribute\n" - " - Clears an attribute\n" - " R Read-only file attribute\n" - " A Archive file attribute\n" - " S System file attribute\n" - " H Hidden file attribute\n" - " /S Processes matching files in the current directory\n" - " and all subdirectories\n" - " /D Processes direcories as well\n\n" - "Type ATTRIB without a parameter to display the attributes of all files.")); - return 0; - } - - /* build parameter array */ - arg = split (param, &argc, FALSE); - - /* check for options */ - for (i = 0; i < argc; i++) - { - if (_tcsicmp (arg[i], _T("/s")) == 0) - bRecurse = TRUE; - else if (_tcsicmp (arg[i], _T("/d")) == 0) - bDirectories = TRUE; - } - - /* create attributes and mask */ - for (i = 0; i < argc; i++) - { - if (*arg[i] == _T('+')) - { - if (_tcslen (arg[i]) != 2) - { - error_invalid_parameter_format (arg[i]); - freep (arg); - return -1; - } - - switch ((TCHAR)_totupper (arg[i][1])) - { - case _T('A'): - dwMask |= FILE_ATTRIBUTE_ARCHIVE; - dwAttrib |= FILE_ATTRIBUTE_ARCHIVE; - break; - - case _T('H'): - dwMask |= FILE_ATTRIBUTE_HIDDEN; - dwAttrib |= FILE_ATTRIBUTE_HIDDEN; - break; - - case _T('R'): - dwMask |= FILE_ATTRIBUTE_READONLY; - dwAttrib |= FILE_ATTRIBUTE_READONLY; - break; - - case _T('S'): - dwMask |= FILE_ATTRIBUTE_SYSTEM; - dwAttrib |= FILE_ATTRIBUTE_SYSTEM; - break; - - default: - error_invalid_parameter_format (arg[i]); - freep (arg); - return -1; - } - } - else if (*arg[i] == _T('-')) - { - if (_tcslen (arg[i]) != 2) - { - error_invalid_parameter_format (arg[i]); - freep (arg); - return -1; - } - - switch ((TCHAR)_totupper (arg[i][1])) - { - case _T('A'): - dwMask |= FILE_ATTRIBUTE_ARCHIVE; - dwAttrib &= ~FILE_ATTRIBUTE_ARCHIVE; - break; - - case _T('H'): - dwMask |= FILE_ATTRIBUTE_HIDDEN; - dwAttrib &= ~FILE_ATTRIBUTE_HIDDEN; - break; - - case _T('R'): - dwMask |= FILE_ATTRIBUTE_READONLY; - dwAttrib &= ~FILE_ATTRIBUTE_READONLY; - break; - - case _T('S'): - dwMask |= FILE_ATTRIBUTE_SYSTEM; - dwAttrib &= ~FILE_ATTRIBUTE_SYSTEM; - break; - - default: - error_invalid_parameter_format (arg[i]); - freep (arg); - return -1; - } - } - } - - if (argc == 0) - { - DWORD len; - - len = GetCurrentDirectory (MAX_PATH, szPath); - if (szPath[len-1] != _T('\\')) - { - szPath[len] = _T('\\'); - szPath[len + 1] = 0; - } - _tcscpy (szFileName, _T("*.*")); - PrintAttribute (szPath, szFileName, bRecurse); - freep (arg); - return 0; - } - - /* get full file name */ - for (i = 0; i < argc; i++) - { - if ((*arg[i] != _T('+')) && (*arg[i] != _T('-')) && (*arg[i] != _T('/'))) - { - LPTSTR p; - GetFullPathName (arg[i], MAX_PATH, szPath, NULL); - p = _tcsrchr (szPath, _T('\\')) + 1; - _tcscpy (szFileName, p); - *p = _T('\0'); - - if (dwMask == 0) - PrintAttribute (szPath, szFileName, bRecurse); - else - ChangeAttribute (szPath, szFileName, dwMask, - dwAttrib, bRecurse, bDirectories); - } - } - - freep (arg); - return 0; -} - -#endif /* INCLUDE_CMD_ATTRIB */ diff --git a/rosapps/cmd/batch.c b/rosapps/cmd/batch.c deleted file mode 100644 index 000e9f54a3a..00000000000 --- a/rosapps/cmd/batch.c +++ /dev/null @@ -1,450 +0,0 @@ -/* $Id: batch.c,v 1.4 2001/02/28 22:33:23 ekohl Exp $ - * - * BATCH.C - batch file processor for CMD.EXE. - * - * - * History: - * - * ??/??/?? (Evan Jeffrey) - * started. - * - * 15 Jul 1995 (Tim Norman) - * modes and bugfixes. - * - * 08 Aug 1995 (Matt Rains) - * i have cleaned up the source code. changes now bring this - * source into guidelines for recommended programming practice. - * - * i have added some constants to help making changes easier. - * - * 29 Jan 1996 (Steffan Kaiser) - * made a few cosmetic changes - * - * 05 Feb 1996 (Tim Norman) - * changed to comply with new first/rest calling scheme - * - * 14 Jun 1997 (Steffen Kaiser) - * bug fixes. added error level expansion %?. ctrl-break handling - * - * 16 Jul 1998 (Hans B Pufal) - * Totally reorganised in conjunction with COMMAND.C (cf) to - * implement proper BATCH file nesting and other improvements. - * - * 16 Jul 1998 (John P Price ) - * Seperated commands into individual files. - * - * 19 Jul 1998 (Hans B Pufal) [HBP_001] - * Preserve state of echo flag across batch calls. - * - * 19 Jul 1998 (Hans B Pufal) [HBP_002] - * Implementation of FOR command - * - * 20-Jul-1998 (John P Price ) - * added error checking after malloc calls - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 02-Aug-1998 (Hans B Pufal) [HBP_003] - * Fixed bug in ECHO flag restoration at exit from batch file - * - * 26-Jan-1999 (Eric Kohl ) - * Replaced CRT io functions by Win32 io functions. - * Unicode safe! - * - * 23-Feb-2001 (Carl Nettelblad ) - * Fixes made to get "for" working. - */ - -#include "config.h" - -#include -#include -#include -#include -#include - -#include "cmd.h" -#include "batch.h" - - -/* The stack of current batch contexts. - * NULL when no batch is active - */ -LPBATCH_CONTEXT bc = NULL; - -BOOL bEcho = TRUE; /* The echo flag */ - - - -/* Buffer for reading Batch file lines */ -TCHAR textline[BATCH_BUFFSIZE]; - - -/* - * Returns a pointer to the n'th parameter of the current batch file. - * If no such parameter exists returns pointer to empty string. - * If no batch file is current, returns NULL - * - */ - -LPTSTR FindArg (INT n) -{ - LPTSTR pp; - -#ifdef _DEBUG - DebugPrintf ("FindArg: (%d)\n", n); -#endif - - if (bc == NULL) - return NULL; - - n += bc->shiftlevel; - pp = bc->params; - - /* Step up the strings till we reach the end */ - /* or the one we want */ - while (*pp && n--) - pp += _tcslen (pp) + 1; - - return pp; -} - - -/* - * Batch_params builds a parameter list in newlay allocated memory. - * The parameters consist of null terminated strings with a final - * NULL character signalling the end of the parameters. - * -*/ - -LPTSTR BatchParams (LPTSTR s1, LPTSTR s2) -{ - LPTSTR dp = (LPTSTR)malloc ((_tcslen(s1) + _tcslen(s2) + 3) * sizeof (TCHAR)); - - /* JPP 20-Jul-1998 added error checking */ - if (dp == NULL) - { - error_out_of_memory(); - return NULL; - } - - if (s1 && *s1) - { - s1 = stpcpy (dp, s1); - *s1++ = _T('\0'); - } - else - s1 = dp; - - while (*s2) - { - if (_istspace (*s2) || _tcschr (_T(",;"), *s2)) - { - *s1++ = _T('\0'); - s2++; - while (*s2 && _tcschr (_T(" ,;"), *s2)) - s2++; - continue; - } - - if ((*s2 == _T('"')) || (*s2 == _T('\''))) - { - TCHAR st = *s2; - - do - *s1++ = *s2++; - while (*s2 && (*s2 != st)); - } - - *s1++ = *s2++; - } - - *s1++ = _T('\0'); - *s1 = _T('\0'); - - return dp; -} - - -/* - * If a batch file is current, exits it, freeing the context block and - * chaining back to the previous one. - * - * If no new batch context is found, sets ECHO back ON. - * - * If the parameter is non-null or not empty, it is printed as an exit - * message - */ - -VOID ExitBatch (LPTSTR msg) -{ -#ifdef _DEBUG - DebugPrintf ("ExitBatch: (\'%s\')\n", msg); -#endif - - if (bc != NULL) - { - LPBATCH_CONTEXT t = bc; - - if (bc->hBatchFile) - { - CloseHandle (bc->hBatchFile); - bc->hBatchFile = INVALID_HANDLE_VALUE; - } - - if (bc->params) - free(bc->params); - - if (bc->forproto) - free(bc->forproto); - - if (bc->ffind) - free(bc->ffind); - - /* Preserve echo state across batch calls */ - bEcho = bc->bEcho; - - bc = bc->prev; - free(t); - } - - if (msg && *msg) - ConOutPrintf ("%s\n", msg); -} - - -/* - * Start batch file execution - * - * The firstword parameter is the full filename of the batch file. - * - */ - -BOOL Batch (LPTSTR fullname, LPTSTR firstword, LPTSTR param) -{ - HANDLE hFile; - - hFile = CreateFile (fullname, GENERIC_READ, FILE_SHARE_READ, NULL, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | - FILE_FLAG_SEQUENTIAL_SCAN, NULL); - -#ifdef _DEBUG - DebugPrintf ("Batch: (\'%s\', \'%s\', \'%s\') hFile = %x\n", - fullname, firstword, param, hFile); -#endif - - if (hFile == INVALID_HANDLE_VALUE) - { - ConErrPrintf (_T("Error opening batch file\n")); - return FALSE; - } - - /* Kill any and all FOR contexts */ - while (bc && bc->forvar) - ExitBatch (NULL); - - if (bc == NULL) - { - /* No curent batch file, create a new context */ - LPBATCH_CONTEXT n = (LPBATCH_CONTEXT)malloc (sizeof(BATCH_CONTEXT)); - - if (n == NULL) - { - error_out_of_memory (); - return FALSE; - } - - n->prev = bc; - bc = n; - } - else if (bc->hBatchFile != INVALID_HANDLE_VALUE) - { - /* Then we are transferring to another batch */ - CloseHandle (bc->hBatchFile); - bc->hBatchFile = INVALID_HANDLE_VALUE; - free (bc->params); - } - - bc->hBatchFile = hFile; - bc->bEcho = bEcho; /* Preserve echo across batch calls */ - bc->shiftlevel = 0; - - bc->ffind = NULL; - bc->forvar = _T('\0'); - bc->forproto = NULL; - bc->params = BatchParams (firstword, param); - -#ifdef _DEBUG - DebugPrintf ("Batch: returns TRUE\n"); -#endif - - return TRUE; -} - - -/* - * Read and return the next executable line form the current batch file - * - * If no batch file is current or no further executable lines are found - * return NULL. - * - * Here we also look out for FOR bcontext structures which trigger the - * FOR expansion code. - * - * Set eflag to 0 if line is not to be echoed else 1 - */ - -LPTSTR ReadBatchLine (LPBOOL bLocalEcho) -{ - LPTSTR first; - LPTSTR ip; - - /* No batch */ - if (bc == NULL) - return NULL; - -#ifdef _DEBUG - DebugPrintf ("ReadBatchLine ()\n"); -#endif - - while (1) - { - /* User halt */ - if (CheckCtrlBreak (BREAK_BATCHFILE)) - { - while (bc) - ExitBatch (NULL); - return NULL; - } - - /* No batch */ - if (bc == NULL) - return NULL; - - /* If its a FOR context... */ - if (bc->forvar) - { - LPTSTR sp = bc->forproto; /* pointer to prototype command */ - LPTSTR dp = textline; /* Place to expand protoype */ - LPTSTR fv = FindArg (0); /* Next list element */ - - /* End of list so... */ - if ((fv == NULL) || (*fv == _T('\0'))) - { - /* just exit this context */ - ExitBatch (NULL); - continue; - } - - if (_tcscspn (fv, _T("?*")) == _tcslen (fv)) - { - /* element is wild file */ - bc->shiftlevel++; /* No use it and shift list */ - } - else - { - /* Wild file spec, find first (or next) file name */ - if (bc->ffind) - { - /* First already done so do next */ - - fv = FindNextFile (bc->hFind, bc->ffind) ? bc->ffind->cFileName : NULL; - } - else - { - /* For first find, allocate a find first block */ - if ((bc->ffind = (LPWIN32_FIND_DATA)malloc (sizeof (WIN32_FIND_DATA))) == NULL) - { - error_out_of_memory(); - return NULL; - } - - bc->hFind = FindFirstFile (fv, bc->ffind); - - fv = !(bc->hFind==INVALID_HANDLE_VALUE) ? bc->ffind->cFileName : NULL; - } - - if (fv == NULL) - { - /* Null indicates no more files.. */ - free (bc->ffind); /* free the buffer */ - bc->ffind = NULL; - bc->shiftlevel++; /* On to next list element */ - continue; - } - } - - /* At this point, fv points to parameter string */ - while (*sp) - { - if ((*sp == _T('%')) && (*(sp + 1) == bc->forvar)) - { - /* replace % var */ - dp = stpcpy (dp, fv); - sp += 2; - } - else - { - /* Else just copy */ - *dp++ = *sp++; - } - } - - *dp = _T('\0'); - - *bLocalEcho = bEcho; - - return textline; - } - - if (!FileGetString (bc->hBatchFile, textline, sizeof (textline))) - { -#ifdef _DEBUG - DebugPrintf (_T("ReadBatchLine(): Reached EOF!\n")); -#endif - /* End of file.... */ - ExitBatch (NULL); - - if (bc == NULL) - return NULL; - - continue; - } - -#ifdef _DEBUG - DebugPrintf (_T("ReadBatchLine(): textline: \'%s\'\n"), textline); -#endif - - /* Strip leading spaces and trailing space/control chars */ - for (first = textline; _istspace (*first); first++) - ; - - for (ip = first + _tcslen (first) - 1; _istspace (*ip) || _istcntrl (*ip); ip--) - ; - - *++ip = _T('\0'); - - /* ignore labels and empty lines */ - if (*first == _T(':') || *first == 0) - continue; - - if (*first == _T('@')) - { - /* don't echo this line */ - do - first++; - while (_istspace (*first)); - - *bLocalEcho = 0; - } - else - *bLocalEcho = bEcho; - - break; - } - - return first; -} - -/* EOF */ diff --git a/rosapps/cmd/batch.h b/rosapps/cmd/batch.h deleted file mode 100644 index e7e6fb6c40f..00000000000 --- a/rosapps/cmd/batch.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * BATCH.H - A structure to preserve the context of a batch file - * - * - */ - -#ifndef _BATCH_H_INCLUDED_ -#define _BATCH_H_INCLUDED_ - - -typedef struct tagBATCHCONTEXT -{ - struct tagBATCHCONTEXT *prev; - LPWIN32_FIND_DATA ffind; - HANDLE hBatchFile; - LPTSTR forproto; - LPTSTR params; - INT shiftlevel; - BOOL bEcho; /* Preserve echo flag across batch calls */ - HANDLE hFind; /* Preserve find handle when doing a for */ - TCHAR forvar; -} BATCH_CONTEXT, *LPBATCH_CONTEXT; - - -/* The stack of current batch contexts. - * NULL when no batch is active - */ -extern LPBATCH_CONTEXT bc; - -extern BOOL bEcho; /* The echo flag */ - -#define BATCH_BUFFSIZE 2048 - -extern TCHAR textline[BATCH_BUFFSIZE]; /* Buffer for reading Batch file lines */ - - -LPTSTR FindArg (INT); -LPTSTR BatchParams (LPTSTR, LPTSTR); -VOID ExitBatch (LPTSTR); -BOOL Batch (LPTSTR, LPTSTR, LPTSTR); -LPTSTR ReadBatchLine (LPBOOL); - -#endif /* _BATCH_H_INCLUDED_ */ diff --git a/rosapps/cmd/beep.c b/rosapps/cmd/beep.c deleted file mode 100644 index bafe06c23ff..00000000000 --- a/rosapps/cmd/beep.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * BEEP.C - beep internal command. - * - * - * History: - * - * 16 Jul 1998 (Hans B Pufal) - * started. - * - * 16 Jul 1998 (John P Price) - * Separated commands into individual files. - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 14-Jan-1999 (Eric Kohl ) - * Added help text ("beep /?"). - * Unicode ready! - * - * 20-Jan-1999 (Eric Kohl ) - * Redirection ready! - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_BEEP - -#include -#include -#include - -#include "cmd.h" -#include "batch.h" - - -INT cmd_beep (LPTSTR cmd, LPTSTR param) -{ - if (_tcsncmp (param, _T("/?"), 2) == 0) - { - ConOutPuts (_T("Beep the speaker.\n\nBEEP")); - return 0; - } - -#if 0 - /* check if run in batch mode */ - if (bc == NULL) - return 1; -#endif -#ifdef __REACTOS__ - Beep (440, 50); -#else - MessageBeep (-1); -#endif - - return 0; -} -#endif diff --git a/rosapps/cmd/bugs.txt b/rosapps/cmd/bugs.txt deleted file mode 100644 index da1a2d6c2e6..00000000000 --- a/rosapps/cmd/bugs.txt +++ /dev/null @@ -1,15 +0,0 @@ - **** Please report bugs to ekohl@rz-online.de! **** - -Known bugs in CMD version 0.1 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -o let set work with or without the '=' sign. People like it that way. - (I don't know, if I should really fix this?) - -o command.com ignores control-c and control-break, which makes it difficult - to quit typing a long file, among other things - -o "alias v = dir" doesn't work because of the spaces. - - - **** Please report bugs to ekohl@rz-online.de! **** diff --git a/rosapps/cmd/call.c b/rosapps/cmd/call.c deleted file mode 100644 index 02f7f97c8e8..00000000000 --- a/rosapps/cmd/call.c +++ /dev/null @@ -1,95 +0,0 @@ -/* $Id: call.c,v 1.3 1999/10/03 22:20:33 ekohl Exp $ - * - * CALL.C - call internal batch command. - * - * - * History: - * - * 16 Jul 1998 (Hans B Pufal) - * started. - * - * 16 Jul 1998 (John P Price) - * Seperated commands into individual files. - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 04-Aug-1998 (Hans B Pufal) - * added lines to initialize for pointers (HBP004) This fixed the - * lock-up that happened sometimes when calling a batch file from - * another batch file. - * - * 07-Jan-1999 (Eric Kohl ) - * Added help text ("call /?") and cleaned up. - * - * 20-Jan-1999 (Eric Kohl ) - * Unicode and redirection safe! - */ - -#include "config.h" - -#include -#include -#include -#include -#include - -#include "cmd.h" -#include "batch.h" - - -/* - * Perform CALL command. - * - * Allocate a new batch context and add it to the current chain. - * Call parsecommandline passing in our param string - * If No batch file was opened then remove our newly allocted - * context block. - */ - -INT cmd_call (LPTSTR cmd, LPTSTR param) -{ - LPBATCH_CONTEXT n = NULL; - -#ifdef _DEBUG - DebugPrintf ("cmd_call: (\'%s\',\'%s\')\n", cmd, param); -#endif - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Calls one batch program from another.\n\n" - "CALL [drive:][path]filename [batch-parameter]\n\n" - " batch-parameter Specifies any command-line information required by the\n" - " batch program.")); - return 0; - } - - n = (LPBATCH_CONTEXT)malloc (sizeof (BATCH_CONTEXT)); - - if (n == NULL) - { - error_out_of_memory (); - return 1; - } - - n->prev = bc; - bc = n; - - bc->hBatchFile = INVALID_HANDLE_VALUE; - bc->params = NULL; - bc->shiftlevel = 0; - bc->forvar = 0; /* HBP004 */ - bc->forproto = NULL; /* HBP004 */ - - ParseCommandLine (param); - - /* Wasn't a batch file so remove conext */ - if (bc->hBatchFile == INVALID_HANDLE_VALUE) - { - bc = bc->prev; - free (n); - } - - return 0; -} - -/* EOF */ diff --git a/rosapps/cmd/chcp.c b/rosapps/cmd/chcp.c deleted file mode 100644 index 48d541bc6c8..00000000000 --- a/rosapps/cmd/chcp.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * CHCP.C - chcp internal command. - * - * - * History: - * - * 23-Dec-1998 (Eric Kohl ) - * Started. - * - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_CHCP - -#include -#include -#include -#include - -#include "cmd.h" - - -INT CommandChcp (LPTSTR cmd, LPTSTR param) -{ - LPTSTR *arg; - INT args; - UINT uOldCodePage; - UINT uNewCodePage; - - /* print help */ - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Displays or sets the active code page number.\n\n" - "CHCP [nnn]\n\n" - " nnn Specifies the active code page number.\n\n" - "Type CHCP without a parameter to display the active code page number.")); - return 0; - } - - if (args == 0) - { - /* display active code page number */ - ConOutPrintf ("Active code page: %u\n", GetConsoleCP ()); - return 0; - } - - if (args >= 2) - { - /* too many parameters */ - ConErrPrintf ("Invalid parameter format - %s\n", param); - return 1; - } - - /* get parameters */ - arg = split (param, &args, FALSE); - - /* save old code page */ - uOldCodePage = GetConsoleCP (); - - uNewCodePage = (UINT)_ttoi (arg[0]); - - if (uNewCodePage == 0) - { - ConErrPrintf ("Parameter format incorrect - %s\n", arg[0]); - freep (arg); - return 1; - } - - if (!SetConsoleCP (uNewCodePage)) - { - ConErrPrintf ("Invalid code page\n"); - } - else - { - SetConsoleOutputCP (uNewCodePage); - InitLocale (); - } - - freep (arg); - - return 0; -} - -#endif /* INCLUDE_CMD_CHCP */ diff --git a/rosapps/cmd/choice.c b/rosapps/cmd/choice.c deleted file mode 100644 index 97f70f2d3f7..00000000000 --- a/rosapps/cmd/choice.c +++ /dev/null @@ -1,331 +0,0 @@ -/* - * CHOICE.C - internal command. - * - * - * History: - * - * 12 Aug 1999 (Eric Kohl) - * started. - * - * 01 Sep 1999 (Eric Kohl) - * Fixed help text. - * - * 26 Sep 1999 (Paolo Pantaleo) - * Fixed timeout. - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_CHOICE - -#include -#include -#include -#include -#include - -#include "cmd.h" -#include "batch.h" - - -#define GC_TIMEOUT -1 -#define GC_NOKEY 0 //an event occurred but it wasn't a key pressed -#define GC_KEYREAD 1 //a key has been read - - -static INT -GetCharacterTimeout (LPTCH ch, DWORD dwMilliseconds) -{ -//-------------------------------------------- -// Get a character from standard input but with a timeout. -// The function will wait a limited amount -// of time, then the function returns GC_TIMEOUT. -// -// dwMilliseconds is the timeout value, that can -// be set to INFINITE, so the function works like -// stdio.h's getchar() - - HANDLE hInput; - DWORD dwRead; - - INPUT_RECORD lpBuffer; - - hInput = GetStdHandle (STD_INPUT_HANDLE); - - //if the timeout experied return GC_TIMEOUT - if (WaitForSingleObject (hInput, dwMilliseconds) == WAIT_TIMEOUT) - return GC_TIMEOUT; - - //otherwise get the event - ReadConsoleInput (hInput, &lpBuffer, 1, &dwRead); - - //if the event is a key pressed - if ((lpBuffer.EventType == KEY_EVENT) && - (lpBuffer.Event.KeyEvent.bKeyDown == TRUE)) - { - //read the key -#ifdef _UNICODE - *ch = lpBuffer.Event.KeyEvent.uChar.UnicodeChar; -#else - *ch = lpBuffer.Event.KeyEvent.uChar.AsciiChar; -#endif - return GC_KEYREAD; - } - - //else return no key - return GC_NOKEY; -} - -static INT -IsKeyInString (LPTSTR lpString, TCHAR cKey, BOOL bCaseSensitive) -{ - LPTCH p = lpString; - INT val = 0; - - while (*p) - { - if (bCaseSensitive) - { - if (*p == cKey) - return val; - } - else - { - if (_totlower (*p) == _totlower (cKey)) - return val; - } - - val++; - p++; - } - - return -1; -} - - -INT -CommandChoice (LPTSTR cmd, LPTSTR param) -{ - LPTSTR lpOptions = "YN"; - LPTSTR lpText = NULL; - BOOL bNoPrompt = FALSE; - BOOL bCaseSensitive = FALSE; - BOOL bTimeout = FALSE; - INT nTimeout = 0; - TCHAR cDefault = _T('\0'); - INPUT_RECORD ir; - LPTSTR p, np; - LPTSTR *arg; - INT argc; - INT i; - INT val; - - INT GCret; - TCHAR Ch; - DWORD amount,clk; - - if (_tcsncmp (param, _T("/?"), 2) == 0) - { - ConOutPuts (_T("Waits for the user to choose one of a set of choices.\n" - "\n" - "CHOICE [/C[:]choices][/N][/S][/T[:]c,nn][text]\n" - "\n" - " /C[:]choices Specifies allowable keys. Default is YN.\n" - " /N Do not display choices and ? at the end of the prompt string.\n" - " /S Treat choice keys as case sensitive.\n" - " /T[:]c,nn Default choice to c after nn seconds.\n" - " text Prompt string to display.\n" - "\n" - "ERRORLEVEL is set to offset of key user presses in choices.")); - return 0; - } - - /* retrieve text */ - p = param; - - while (TRUE) - { - if (*p == _T('\0')) - break; - - if (*p != _T('/')) - { - lpText = p; - break; - } - np = _tcschr (p, _T(' ')); - if (!np) - break; - p = np + 1; - } - - /* build parameter array */ - arg = split (param, &argc, FALSE); - - /* evaluate arguments */ - if (argc > 0) - { - for (i = 0; i < argc; i++) - { - if (_tcsnicmp (arg[i], _T("/c"), 2) == 0) - { - if (arg[i][2] == _T(':')) - lpOptions = &arg[i][3]; - else - lpOptions = &arg[i][2]; - - if (_tcslen (lpOptions) == 0) - { - ConErrPuts (_T("Invalid option. Expected format: /C[:]options")); - freep (arg); - return 1; - } - } - else if (_tcsnicmp (arg[i], _T("/n"), 2) == 0) - { - bNoPrompt = TRUE; - } - else if (_tcsnicmp (arg[i], _T("/s"), 2) == 0) - { - bCaseSensitive = TRUE; - } - else if (_tcsnicmp (arg[i], _T("/t"), 2) == 0) - { - LPTSTR s; - - if (arg[i][2] == _T(':')) - { - cDefault = arg[i][3]; - s = &arg[i][4]; - } - else - { - cDefault = arg[i][2]; - s = &arg[i][3]; - } - - if (*s != _T(',')) - { - ConErrPuts (_T("Invalid option. Expected format: /T[:]c,nn")); - freep (arg); - return 1; - } - - s++; - nTimeout = _ttoi(s); - bTimeout = TRUE; - } - else if (arg[i][0] == _T('/')) - { - ConErrPrintf (_T("Illegal Option: %s"), arg[i]); - freep (arg); - return 1; - } - } - } - - /* print text */ - if (lpText) - ConOutPrintf (_T("%s"), lpText); - - /* print options */ - if (bNoPrompt == FALSE) - { - ConOutPrintf (_T("[%c"), lpOptions[0]); - - for (i = 1; (unsigned)i < _tcslen (lpOptions); i++) - ConOutPrintf (_T(",%c"), lpOptions[i]); - - ConOutPrintf (_T("]?")); - } - - ConInFlush (); - - if(!bTimeout) - { - while (TRUE) - { - ConInKey (&ir); - - val = IsKeyInString (lpOptions, -#ifdef _UNICODE - ir.Event.KeyEvent.uChar.UnicodeChar, -#else - ir.Event.KeyEvent.uChar.AsciiChar, -#endif /* _UNICODE */ - bCaseSensitive); - - if (val >= 0) - { - ConOutPrintf (_T("%c\n"), lpOptions[val]); - - nErrorLevel = val + 1; - - break; - } - - Beep (440, 50); - } - - freep (arg); - return 0; - } - - clk = GetTickCount (); - amount = nTimeout*1000; - -loop: - GCret = GetCharacterTimeout (&Ch, amount - (GetTickCount () - clk)); - - switch (GCret) - { - case GC_TIMEOUT: -#ifdef _DEBUG - DebugPrintf (_T("GC_TIMEOUT\n")); - DebugPrintf (_T("elapsed %d msecs\n"), GetTickCount () - clk); -#endif /* _DEBUG */ - break; - - case GC_NOKEY: -#ifdef _DEBUG - DebugPrintf(_T("GC_NOKEY\n")); - DebugPrintf(_T("elapsed %d msecs\n"), GetTickCount () - clk); -#endif /* _DEBUG */ - goto loop; - - case GC_KEYREAD: -#ifdef _DEBUG - DebugPrintf(_T("GC_KEYREAD\n")); - DebugPrintf(_T("elapsed %d msecs\n"), GetTickCount () - clk); - DebugPrintf(_T("read %c"), Ch); -#endif /* _DEBUG */ - if ((val=IsKeyInString(lpOptions,Ch,bCaseSensitive))==-1) - { - Beep (440, 50); - goto loop; - } - cDefault=Ch; - break; - } - -#ifdef _DEBUG - DebugPrintf(_T("exiting wait loop after %d msecs\n"), - GetTickCount () - clk); -#endif /* _DEBUG */ - - val = IsKeyInString (lpOptions, cDefault, bCaseSensitive); - ConOutPrintf (_T("%c\n"), lpOptions[val]); - - nErrorLevel = val + 1; - - freep (arg); - -#ifdef _DEBUG - DebugPrintf (_T("ErrorLevel: %d\n"), nErrorLevel); -#endif /* _DEBUG */ - - return 0; -} -#endif /* INCLUDE_CMD_CHOICE */ - -/* EOF */ diff --git a/rosapps/cmd/cls.c b/rosapps/cmd/cls.c deleted file mode 100644 index e6a5991d0ec..00000000000 --- a/rosapps/cmd/cls.c +++ /dev/null @@ -1,65 +0,0 @@ -/* - * CLS.C - clear screen internal command. - * - * - * History: - * - * 07/27/1998 (John P. Price) - * started. - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 04-Dec-1998 (Eric Kohl ) - * Changed to Win32 console app. - * - * 08-Dec-1998 (Eric Kohl ) - * Added help text ("/?"). - * - * 14-Jan-1998 (Eric Kohl ) - * Unicode ready! - * - * 20-Jan-1998 (Eric Kohl ) - * Redirection ready! - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_CLS - -#include -#include -#include - -#include "cmd.h" - - -INT cmd_cls (LPTSTR cmd, LPTSTR param) -{ - DWORD dwWritten; - CONSOLE_SCREEN_BUFFER_INFO csbi; - COORD coPos; - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Clears the screen.\n\nCLS")); - return 0; - } - - GetConsoleScreenBufferInfo (hOut, &csbi); - - coPos.X = 0; - coPos.Y = 0; - FillConsoleOutputAttribute (hOut, wColor, - (csbi.dwSize.X)*(csbi.dwSize.Y), - coPos, &dwWritten); - FillConsoleOutputCharacter (hOut, _T(' '), - (csbi.dwSize.X)*(csbi.dwSize.Y), - coPos, &dwWritten); - SetConsoleCursorPosition (hOut, coPos); - - bIgnoreEcho = TRUE; - - return 0; -} -#endif diff --git a/rosapps/cmd/cmd.c b/rosapps/cmd/cmd.c deleted file mode 100644 index 4104feb1998..00000000000 --- a/rosapps/cmd/cmd.c +++ /dev/null @@ -1,1178 +0,0 @@ -/* $Id: cmd.c,v 1.33 2003/01/23 00:15:10 gvg Exp $ - * - * CMD.C - command-line interface. - * - * - * History: - * - * 17 Jun 1994 (Tim Norman) - * started. - * - * 08 Aug 1995 (Matt Rains) - * I have cleaned up the source code. changes now bring this source - * into guidelines for recommended programming practice. - * - * A added the the standard FreeDOS GNU licence test to the - * initialize() function. - * - * Started to replace puts() with printf(). this will help - * standardize output. please follow my lead. - * - * I have added some constants to help making changes easier. - * - * 15 Dec 1995 (Tim Norman) - * major rewrite of the code to make it more efficient and add - * redirection support (finally!) - * - * 06 Jan 1996 (Tim Norman) - * finished adding redirection support! Changed to use our own - * exec code (MUCH thanks to Svante Frey!!) - * - * 29 Jan 1996 (Tim Norman) - * added support for CHDIR, RMDIR, MKDIR, and ERASE, as per - * suggestion of Steffan Kaiser - * - * changed "file not found" error message to "bad command or - * filename" thanks to Dustin Norman for noticing that confusing - * message! - * - * changed the format to call internal commands (again) so that if - * they want to split their commands, they can do it themselves - * (none of the internal functions so far need that much power, anyway) - * - * 27 Aug 1996 (Tim Norman) - * added in support for Oliver Mueller's ALIAS command - * - * 14 Jun 1997 (Steffan Kaiser) - * added ctrl-break handling and error level - * - * 16 Jun 1998 (Rob Lake) - * Runs command.com if /P is specified in command line. Command.com - * also stays permanent. If /C is in the command line, starts the - * program next in the line. - * - * 21 Jun 1998 (Rob Lake) - * Fixed up /C so that arguments for the program - * - * 08-Jul-1998 (John P. Price) - * Now sets COMSPEC environment variable - * misc clean up and optimization - * added date and time commands - * changed to using spawnl instead of exec. exec does not copy the - * environment to the child process! - * - * 14 Jul 1998 (Hans B Pufal) - * Reorganised source to be more efficient and to more closely - * follow MS-DOS conventions. (eg %..% environment variable - * replacement works form command line as well as batch file. - * - * New organisation also properly support nested batch files. - * - * New command table structure is half way towards providing a - * system in which COMMAND will find out what internal commands - * are loaded - * - * 24 Jul 1998 (Hans B Pufal) [HBP_003] - * Fixed return value when called with /C option - * - * 27 Jul 1998 John P. Price - * added config.h include - * - * 28 Jul 1998 John P. Price - * added showcmds function to show commands and options available - * - * 07-Aug-1998 (John P Price ) - * Fixed carrage return output to better match MSDOS with echo - * on or off. (marked with "JPP 19980708") - * - * 07-Dec-1998 (Eric Kohl ) - * First ReactOS release. - * Extended length of commandline buffers to 512. - * - * 13-Dec-1998 (Eric Kohl ) - * Added COMSPEC environment variable. - * Added "/t" support (color) on cmd command line. - * - * 07-Jan-1999 (Eric Kohl ) - * Added help text ("cmd /?"). - * - * 25-Jan-1999 (Eric Kohl ) - * Unicode and redirection safe! - * Fixed redirections and piping. - * Piping is based on temporary files, but basic support - * for anonymous pipes already exists. - * - * 27-Jan-1999 (Eric Kohl ) - * Replaced spawnl() by CreateProcess(). - * - * 22-Oct-1999 (Eric Kohl ) - * Added break handler. - * - * 15-Dec-1999 (Eric Kohl ) - * Fixed current directory - * - * 28-Dec-1999 (Eric Kohl ) - * Restore window title after program/batch execution - * - * 03-Feb-2001 (Eric Kohl ) - * Workaround because argc[0] is NULL under ReactOS - * - * 23-Feb-2001 (Carl Nettelblad ) - * %envvar% replacement conflicted with for. - */ - -#include "config.h" - -#include -#include -#include -#include -#include -#include - -#include "cmd.h" -#include "batch.h" - - -BOOL bExit = FALSE; /* indicates EXIT was typed */ -BOOL bCanExit = TRUE; /* indicates if this shell is exitable */ -BOOL bCtrlBreak = FALSE; /* Ctrl-Break or Ctrl-C hit */ -BOOL bIgnoreEcho = FALSE; /* Ignore 'newline' before 'cls' */ -INT nErrorLevel = 0; /* Errorlevel of last launched external program */ -BOOL bChildProcessRunning = FALSE; -DWORD dwChildProcessId = 0; -OSVERSIONINFO osvi; -HANDLE hIn; -HANDLE hOut; - -#ifdef INCLUDE_CMD_COLOR -WORD wColor; /* current color */ -WORD wDefColor; /* default color */ -#endif - - -/* - * is character a delimeter when used on first word? - * - */ - -static BOOL IsDelimiter (TCHAR c) -{ - return (c == _T('/') || c == _T('=') || c == _T('\0') || _istspace (c)); -} - - -/* - * This command (in first) was not found in the command table - * - * first - first word on command line - * rest - rest of command line - */ - -static VOID -Execute (LPTSTR first, LPTSTR rest) -{ - TCHAR szFullName[MAX_PATH]; -#ifndef __REACTOS__ - TCHAR szWindowTitle[MAX_PATH]; -#endif - DWORD dwExitCode = 0; - -#ifdef _DEBUG - DebugPrintf ("Execute: \'%s\' \'%s\'\n", first, rest); -#endif - - /* check for a drive change */ - if ((_istalpha (first[0])) && (!_tcscmp (first + 1, _T(":")))) - { - BOOL working = TRUE; - if (!SetCurrentDirectory(first)) - /* Guess they changed disc or something, handle that gracefully and get to root */ - { - TCHAR str[4]; - str[0]=first[0]; - str[1]=':'; - str[2]='\\'; - str[3]=0; - working = SetCurrentDirectory(str); - } - - if (!working) ConErrPuts (INVALIDDRIVE); - - return; - } - - /* get the PATH environment variable and parse it */ - /* search the PATH environment variable for the binary */ - if (!SearchForExecutable (first, szFullName)) - { - error_bad_command (); - return; - } - -#ifndef __REACTOS__ - GetConsoleTitle (szWindowTitle, MAX_PATH); -#endif - - /* check if this is a .BAT or .CMD file */ - if (!_tcsicmp (_tcsrchr (szFullName, _T('.')), _T(".bat")) || - !_tcsicmp (_tcsrchr (szFullName, _T('.')), _T(".cmd"))) - { -#ifdef _DEBUG - DebugPrintf ("[BATCH: %s %s]\n", szFullName, rest); -#endif - Batch (szFullName, first, rest); - } - else - { - /* exec the program */ - TCHAR szFullCmdLine [CMDLINE_LENGTH]; - PROCESS_INFORMATION prci; - STARTUPINFO stui; - -#ifdef _DEBUG - DebugPrintf ("[EXEC: %s %s]\n", szFullName, rest); -#endif - /* build command line for CreateProcess() */ - _tcscpy (szFullCmdLine, first); - _tcscat (szFullCmdLine, _T(" ")); - _tcscat (szFullCmdLine, rest); - - /* fill startup info */ - memset (&stui, 0, sizeof (STARTUPINFO)); - stui.cb = sizeof (STARTUPINFO); - stui.dwFlags = STARTF_USESHOWWINDOW; - stui.wShowWindow = SW_SHOWDEFAULT; - - // return console to standard mode - SetConsoleMode( GetStdHandle( STD_INPUT_HANDLE ), - ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT | ENABLE_ECHO_INPUT ); - - if (CreateProcess (szFullName, - szFullCmdLine, - NULL, - NULL, - FALSE, - CREATE_NEW_PROCESS_GROUP, - NULL, - NULL, - &stui, - &prci)) - { - /* FIXME: Protect this with critical section */ - bChildProcessRunning = TRUE; - dwChildProcessId = prci.dwProcessId; - - WaitForSingleObject (prci.hProcess, INFINITE); - - /* FIXME: Protect this with critical section */ - bChildProcessRunning = TRUE; - - GetExitCodeProcess (prci.hProcess, &dwExitCode); - nErrorLevel = (INT)dwExitCode; - CloseHandle (prci.hThread); - CloseHandle (prci.hProcess); - } - else - { - ErrorMessage (GetLastError (), - "Error executing CreateProcess()!!\n"); - } - // restore console mode - SetConsoleMode( GetStdHandle( STD_INPUT_HANDLE ), - ENABLE_PROCESSED_INPUT ); - } - -#ifndef __REACTOS__ - SetConsoleTitle (szWindowTitle); -#endif -} - - -/* - * look through the internal commands and determine whether or not this - * command is one of them. If it is, call the command. If not, call - * execute to run it as an external program. - * - * line - the command line of the program to run - * - */ - -static VOID -DoCommand (LPTSTR line) -{ - TCHAR com[MAX_PATH]; /* the first word in the command */ - LPTSTR cp = com; - LPTSTR cstart; - LPTSTR rest = line; /* pointer to the rest of the command line */ - INT cl; - LPCOMMAND cmdptr; - -#ifdef _DEBUG - DebugPrintf ("DoCommand: (\'%s\')\n", line); -#endif /* DEBUG */ - - /* Skip over initial white space */ - while (isspace (*rest)) - rest++; - - cstart = rest; - - /* Anything to do ? */ - if (*rest) - { - /* Copy over 1st word as lower case */ - while (!IsDelimiter (*rest)) - *cp++ = _totlower (*rest++); - - /* Terminate first word */ - *cp = _T('\0'); - - /* Skip over whitespace to rest of line */ - while (_istspace (*rest)) - rest++; - - /* Scan internal command table */ - for (cmdptr = cmds;; cmdptr++) - { - /* If end of table execute ext cmd */ - if (cmdptr->name == NULL) - { - Execute (com, rest); - break; - } - - if (!_tcscmp (com, cmdptr->name)) - { - cmdptr->func (com, rest); - break; - } - - /* The following code handles the case of commands like CD which - * are recognised even when the command name and parameter are - * not space separated. - * - * e.g dir.. - * cd\freda - */ - - /* Get length of command name */ - cl = _tcslen (cmdptr->name); - - if ((cmdptr->flags & CMD_SPECIAL) && - (!_tcsncmp (cmdptr->name, com, cl)) && - (_tcschr (_T("\\.-"), *(com + cl)))) - { - /* OK its one of the specials...*/ - - /* Terminate first word properly */ - com[cl] = _T('\0'); - - /* Call with new rest */ - cmdptr->func (com, cstart + cl); - break; - } - } - } -} - - -/* - * process the command line and execute the appropriate functions - * full input/output redirection and piping are supported - */ - -VOID ParseCommandLine (LPTSTR cmd) -{ - TCHAR cmdline[CMDLINE_LENGTH]; - LPTSTR s; -#ifdef FEATURE_REDIRECTION - TCHAR in[CMDLINE_LENGTH] = ""; - TCHAR out[CMDLINE_LENGTH] = ""; - TCHAR err[CMDLINE_LENGTH] = ""; - TCHAR szTempPath[MAX_PATH] = _T(".\\"); - TCHAR szFileName[2][MAX_PATH] = {"", ""}; - HANDLE hFile[2] = {INVALID_HANDLE_VALUE, INVALID_HANDLE_VALUE}; - LPTSTR t = NULL; - INT num = 0; - INT nRedirFlags = 0; - - HANDLE hOldConIn; - HANDLE hOldConOut; - HANDLE hOldConErr; -#endif /* FEATURE_REDIRECTION */ - - _tcscpy (cmdline, cmd); - s = &cmdline[0]; - -#ifdef _DEBUG - DebugPrintf ("ParseCommandLine: (\'%s\')\n", s); -#endif /* DEBUG */ - -#ifdef FEATURE_ALIASES - /* expand all aliases */ - ExpandAlias (s, CMDLINE_LENGTH); -#endif /* FEATURE_ALIAS */ - -#ifdef FEATURE_REDIRECTION - /* find the temp path to store temporary files */ - GetTempPath (MAX_PATH, szTempPath); - if (szTempPath[_tcslen (szTempPath) - 1] != _T('\\')) - _tcscat (szTempPath, _T("\\")); - - /* get the redirections from the command line */ - num = GetRedirection (s, in, out, err, &nRedirFlags); - - /* more efficient, but do we really need to do this? */ - for (t = in; _istspace (*t); t++) - ; - _tcscpy (in, t); - - for (t = out; _istspace (*t); t++) - ; - _tcscpy (out, t); - - for (t = err; _istspace (*t); t++) - ; - _tcscpy (err, t); - - /* Set up the initial conditions ... */ - /* preserve STDIN, STDOUT and STDERR handles */ - hOldConIn = GetStdHandle (STD_INPUT_HANDLE); - hOldConOut = GetStdHandle (STD_OUTPUT_HANDLE); - hOldConErr = GetStdHandle (STD_ERROR_HANDLE); - - /* redirect STDIN */ - if (in[0]) - { - HANDLE hFile; - SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE}; - - hFile = CreateFile (in, GENERIC_READ, FILE_SHARE_READ, &sa, OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, NULL); - if (hFile == INVALID_HANDLE_VALUE) - { - ConErrPrintf ("Can't redirect input from file %s\n", in); - return; - } - - if (!SetStdHandle (STD_INPUT_HANDLE, hFile)) - { - ConErrPrintf ("Can't redirect input from file %s\n", in); - return; - } -#ifdef _DEBUG - DebugPrintf (_T("Input redirected from: %s\n"), in); -#endif - } - - /* Now do all but the last pipe command */ - *szFileName[0] = '\0'; - hFile[0] = INVALID_HANDLE_VALUE; - - while (num-- > 1) - { - SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE}; - - /* Create unique temporary file name */ - GetTempFileName (szTempPath, "CMD", 0, szFileName[1]); - - /* Set current stdout to temporary file */ - hFile[1] = CreateFile (szFileName[1], GENERIC_WRITE, 0, &sa, - TRUNCATE_EXISTING, FILE_ATTRIBUTE_TEMPORARY, NULL); - SetStdHandle (STD_OUTPUT_HANDLE, hFile[1]); - - DoCommand (s); - - /* close stdout file */ - SetStdHandle (STD_OUTPUT_HANDLE, hOldConOut); - if ((hFile[1] != INVALID_HANDLE_VALUE) && (hFile[1] != hOldConOut)) - { - CloseHandle (hFile[1]); - hFile[1] = INVALID_HANDLE_VALUE; - } - - /* close old stdin file */ - SetStdHandle (STD_INPUT_HANDLE, hOldConIn); - if ((hFile[0] != INVALID_HANDLE_VALUE) && (hFile[0] != hOldConIn)) - { - /* delete old stdin file, if it is a real file */ - CloseHandle (hFile[0]); - hFile[0] = INVALID_HANDLE_VALUE; - DeleteFile (szFileName[0]); - *szFileName[0] = _T('\0'); - } - - /* copy stdout file name to stdin file name */ - _tcscpy (szFileName[0], szFileName[1]); - *szFileName[1] = _T('\0'); - - /* open new stdin file */ - hFile[0] = CreateFile (szFileName[0], GENERIC_READ, 0, &sa, - OPEN_EXISTING, FILE_ATTRIBUTE_TEMPORARY, NULL); - SetStdHandle (STD_INPUT_HANDLE, hFile[0]); - - s = s + _tcslen (s) + 1; - } - - /* Now set up the end conditions... */ - /* redirect STDOUT */ - if (out[0]) - { - /* Final output to here */ - HANDLE hFile; - SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE}; - - hFile = CreateFile (out, GENERIC_WRITE, FILE_SHARE_READ, &sa, - (nRedirFlags & OUTPUT_APPEND) ? OPEN_ALWAYS : CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, NULL); - if (hFile == INVALID_HANDLE_VALUE) - { - ConErrPrintf ("Can't redirect to file %s\n", out); - return; - } - - if (!SetStdHandle (STD_OUTPUT_HANDLE, hFile)) - { - ConErrPrintf ("Can't redirect to file %s\n", out); - return; - } - - if (nRedirFlags & OUTPUT_APPEND) - { - LONG lHighPos = 0; - - if (GetFileType (hFile) == FILE_TYPE_DISK) - SetFilePointer (hFile, 0, &lHighPos, FILE_END); - } -#ifdef _DEBUG - DebugPrintf (_T("Output redirected to: %s\n"), out); -#endif - } - else if (hOldConOut != INVALID_HANDLE_VALUE) - { - /* Restore original stdout */ - HANDLE hOut = GetStdHandle (STD_OUTPUT_HANDLE); - SetStdHandle (STD_OUTPUT_HANDLE, hOldConOut); - if (hOldConOut != hOut) - CloseHandle (hOut); - hOldConOut = INVALID_HANDLE_VALUE; - } - - /* redirect STDERR */ - if (err[0]) - { - /* Final output to here */ - HANDLE hFile; - SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE}; - - if (!_tcscmp (err, out)) - { -#ifdef _DEBUG - DebugPrintf (_T("Stdout and stderr will use the same file!!\n")); -#endif - DuplicateHandle (GetCurrentProcess (), - GetStdHandle (STD_OUTPUT_HANDLE), - GetCurrentProcess (), - &hFile, 0, TRUE, DUPLICATE_SAME_ACCESS); - } - else - { - hFile = CreateFile (err, - GENERIC_WRITE, - 0, - &sa, - (nRedirFlags & ERROR_APPEND) ? OPEN_ALWAYS : CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, - NULL); - if (hFile == INVALID_HANDLE_VALUE) - { - ConErrPrintf ("Can't redirect to file %s\n", err); - return; - } - } - if (!SetStdHandle (STD_ERROR_HANDLE, hFile)) - { - ConErrPrintf ("Can't redirect to file %s\n", err); - return; - } - - if (nRedirFlags & ERROR_APPEND) - { - LONG lHighPos = 0; - - if (GetFileType (hFile) == FILE_TYPE_DISK) - SetFilePointer (hFile, 0, &lHighPos, FILE_END); - } -#ifdef _DEBUG - DebugPrintf (_T("Error redirected to: %s\n"), err); -#endif - } - else if (hOldConErr != INVALID_HANDLE_VALUE) - { - /* Restore original stderr */ - HANDLE hErr = GetStdHandle (STD_ERROR_HANDLE); - SetStdHandle (STD_ERROR_HANDLE, hOldConErr); - if (hOldConErr != hErr) - CloseHandle (hErr); - hOldConErr = INVALID_HANDLE_VALUE; - } -#endif - - /* process final command */ - DoCommand (s); - -#ifdef FEATURE_REDIRECTION - /* close old stdin file */ -#if 0 /* buggy implementation */ - SetStdHandle (STD_INPUT_HANDLE, hOldConIn); - if ((hFile[0] != INVALID_HANDLE_VALUE) && - (hFile[0] != hOldConIn)) - { - /* delete old stdin file, if it is a real file */ - CloseHandle (hFile[0]); - hFile[0] = INVALID_HANDLE_VALUE; - DeleteFile (szFileName[0]); - *szFileName[0] = _T('\0'); - } - - /* Restore original STDIN */ - if (hOldConIn != INVALID_HANDLE_VALUE) - { - HANDLE hIn = GetStdHandle (STD_INPUT_HANDLE); - SetStdHandle (STD_INPUT_HANDLE, hOldConIn); - if (hOldConIn != hIn) - CloseHandle (hIn); - hOldConIn = INVALID_HANDLE_VALUE; - } - else - { -#ifdef _DEBUG - DebugPrintf (_T("Can't restore STDIN! Is invalid!!\n"), out); -#endif - } -#endif /* buggy implementation */ - - - if (hOldConIn != INVALID_HANDLE_VALUE) - { - HANDLE hIn = GetStdHandle (STD_INPUT_HANDLE); - SetStdHandle (STD_INPUT_HANDLE, hOldConIn); - if (hIn == INVALID_HANDLE_VALUE) - { -#ifdef _DEBUG - DebugPrintf (_T("Previous STDIN is invalid!!\n")); -#endif - } - else - { - if (GetFileType (hIn) == FILE_TYPE_DISK) - { - if (hFile[0] == hIn) - { - CloseHandle (hFile[0]); - hFile[0] = INVALID_HANDLE_VALUE; - DeleteFile (szFileName[0]); - *szFileName[0] = _T('\0'); - } - else - { -#ifdef _DEBUG - DebugPrintf (_T("hFile[0] and hIn dont match!!!\n")); -#endif - } - } - } - } - - - /* Restore original STDOUT */ - if (hOldConOut != INVALID_HANDLE_VALUE) - { - HANDLE hOut = GetStdHandle (STD_OUTPUT_HANDLE); - SetStdHandle (STD_OUTPUT_HANDLE, hOldConOut); - if (hOldConOut != hOut) - CloseHandle (hOut); - hOldConOut = INVALID_HANDLE_VALUE; - } - - /* Restore original STDERR */ - if (hOldConErr != INVALID_HANDLE_VALUE) - { - HANDLE hErr = GetStdHandle (STD_ERROR_HANDLE); - SetStdHandle (STD_ERROR_HANDLE, hOldConErr); - if (hOldConErr != hErr) - CloseHandle (hErr); - hOldConErr = INVALID_HANDLE_VALUE; - } -#endif /* FEATURE_REDIRECTION */ -} - - -/* - * do the prompt/input/process loop - * - */ - -static INT -ProcessInput (BOOL bFlag) -{ - TCHAR commandline[CMDLINE_LENGTH]; - TCHAR readline[CMDLINE_LENGTH]; - LPTSTR tp = NULL; - LPTSTR ip; - LPTSTR cp; - BOOL bEchoThisLine; - - do - { - /* if no batch input then... */ - if (!(ip = ReadBatchLine (&bEchoThisLine))) - { - if (bFlag) - return 0; - - ReadCommand (readline, CMDLINE_LENGTH); - ip = readline; - bEchoThisLine = FALSE; - } - - cp = commandline; - while (*ip) - { - if (*ip == _T('%')) - { - switch (*++ip) - { - case _T('%'): - *cp++ = *ip++; - break; - - case _T('0'): - case _T('1'): - case _T('2'): - case _T('3'): - case _T('4'): - case _T('5'): - case _T('6'): - case _T('7'): - case _T('8'): - case _T('9'): - if ((tp = FindArg (*ip - _T('0')))) - { - cp = stpcpy (cp, tp); - ip++; - } - else - *cp++ = _T('%'); - break; - - case _T('?'): - cp += _stprintf (cp, _T("%u"), nErrorLevel); - ip++; - break; - - default: - tp = _tcschr(ip, _T('%')); - if ((tp != NULL) && - (tp <= _tcschr(ip, _T(' ')) - 1)) - { - char evar[512]; - *tp = _T('\0'); - - /* FIXME: This is just a quick hack!! */ - /* Do a proper memory allocation!! */ - if (GetEnvironmentVariable (ip, evar, 512)) - cp = stpcpy (cp, evar); - - ip = tp + 1; - } - else - { - *cp++ = _T('%'); - } - break; - } - continue; - } - - if (_istcntrl (*ip)) - *ip = _T(' '); - *cp++ = *ip++; - } - - *cp = _T('\0'); - - /* strip trailing spaces */ - while ((--cp >= commandline) && _istspace (*cp)); - - *(cp + 1) = _T('\0'); - - /* JPP 19980807 */ - /* Echo batch file line */ - if (bEchoThisLine) - { - PrintPrompt (); - ConOutPuts (commandline); - } - - if (*commandline) - { - ParseCommandLine (commandline); - if (bEcho && !bIgnoreEcho) - ConOutChar ('\n'); - bIgnoreEcho = FALSE; - } - } - while (!bCanExit || !bExit); - - return 0; -} - - -/* - * control-break handler. - */ -BOOL BreakHandler (DWORD dwCtrlType) -{ - if ((dwCtrlType != CTRL_C_EVENT) && - (dwCtrlType != CTRL_BREAK_EVENT)) - return FALSE; - - if (bChildProcessRunning == TRUE) - { - GenerateConsoleCtrlEvent (CTRL_C_EVENT, - dwChildProcessId); - return TRUE; - } - - /* FIXME: Handle batch files */ - - /* FIXME: Print "^C" */ - - - return TRUE; -} - - -VOID AddBreakHandler (VOID) -{ -#ifndef __REACTOS__ - SetConsoleCtrlHandler ((PHANDLER_ROUTINE)&BreakHandler, - TRUE); -#endif -} - - -VOID RemoveBreakHandler (VOID) -{ -#ifndef __REACTOS__ - SetConsoleCtrlHandler (NULL, FALSE); -#endif -} - - -/* - * show commands and options that are available. - * - */ -static VOID -ShowCommands (VOID) -{ - /* print command list */ - ConOutPrintf (_T("\nInternal commands available:\n")); - PrintCommandList (); - - /* print feature list */ - ConOutPuts ("\nFeatures available:"); -#ifdef FEATURE_ALIASES - ConOutPuts (" [aliases]"); -#endif -#ifdef FEATURE_HISTORY - ConOutPuts (" [history]"); -#endif -#ifdef FEATURE_UNIX_FILENAME_COMPLETION - ConOutPuts (" [unix filename completion]"); -#endif -#ifdef FEATURE_DIRECTORY_STACK - ConOutPuts (" [directory stack]"); -#endif -#ifdef FEATURE_REDIRECTION - ConOutPuts (" [redirections and piping]"); -#endif - ConOutChar ('\n'); -} - - -/* - * set up global initializations and process parameters - * - * argc - number of parameters to command.com - * argv - command-line parameters - * - */ -static VOID -Initialize (int argc, char *argv[]) -{ - TCHAR commandline[CMDLINE_LENGTH]; - TCHAR ModuleName[_MAX_PATH + 1]; - INT i; - -#ifdef _DEBUG - INT x; - - DebugPrintf ("[command args:\n"); - for (x = 0; x < argc; x++) - { - DebugPrintf ("%d. %s\n", x, argv[x]); - } - DebugPrintf ("]\n"); -#endif - - /* get version information */ - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx (&osvi); - - InitLocale (); - - /* get default input and output console handles */ - hOut = GetStdHandle (STD_OUTPUT_HANDLE); - hIn = GetStdHandle (STD_INPUT_HANDLE); - - - if (argc >= 2 && !_tcsncmp (argv[1], _T("/?"), 2)) - { - ConOutPuts (_T("Starts a new instance of the ReactOS command line interpreter.\n" - "\n" - "CMD [/[C|K] command][/P][/Q][/T:bf]\n" - "\n" - " /C command Runs the specified command and terminates.\n" - " /K command Runs the specified command and remains.\n" - " /P CMD becomes permanent and runs autoexec.bat\n" - " (cannot be terminated).\n" - " /T:bf Sets the background/foreground color (see COLOR command).")); - ExitProcess (0); - } - SetConsoleMode (hIn, ENABLE_PROCESSED_INPUT); - -#ifdef INCLUDE_CMD_CHDIR - InitLastPath (); -#endif - -#ifdef FATURE_ALIASES - InitializeAlias (); -#endif - - if (argc >= 2) - { - for (i = 1; i < argc; i++) - { - if (!_tcsicmp (argv[i], _T("/p"))) - { - if (!IsValidFileName (_T("\\autoexec.bat"))) - { -#ifdef INCLUDE_CMD_DATE - cmd_date ("", ""); -#endif -#ifdef INCLUDE_CMD_TIME - cmd_time ("", ""); -#endif - } - else - { - ParseCommandLine (_T("\\autoexec.bat")); - } - bCanExit = FALSE; - } - else if (!_tcsicmp (argv[i], _T("/c"))) - { - /* This just runs a program and exits */ - ++i; - if (argv[i]) - { - _tcscpy (commandline, argv[i]); - while (argv[++i]) - { - _tcscat (commandline, " "); - _tcscat (commandline, argv[i]); - } - - ParseCommandLine(commandline); - ExitProcess (ProcessInput (TRUE)); - } - else - { - ExitProcess (0); - } - } - else if (!_tcsicmp (argv[i], _T("/k"))) - { - /* This just runs a program and remains */ - ++i; - if (argv[i]) - { - _tcscpy (commandline, argv[i]); - while (argv[++i]) - { - _tcscat (commandline, " "); - _tcscat (commandline, argv[i]); - } - - ParseCommandLine(commandline); - } - } -#ifdef INCLUDE_CMD_COLOR - else if (!_tcsnicmp (argv[i], _T("/t:"), 3)) - { - /* process /t (color) argument */ - wDefColor = (WORD)strtoul (&argv[i][3], NULL, 16); - wColor = wDefColor; - SetScreenColor (wColor, TRUE); - } -#endif - } - } - - /* run cmdstart.bat */ - if (IsValidFileName (_T("cmdstart.bat"))) - { - ParseCommandLine (_T("cmdstart.bat")); - } - else if (IsValidFileName (_T("\\cmdstart.bat"))) - { - ParseCommandLine (_T("\\cmdstart.bat")); - } -#ifndef __REACTOS__ - else - { - /* try to run cmdstart.bat from install dir */ - LPTSTR p; - - _tcscpy (commandline, argv[0]); - p = _tcsrchr (commandline, _T('\\')) + 1; - _tcscpy (p, _T("cmdstart.bat")); - - if (IsValidFileName (_T("commandline"))) - { - ConErrPrintf ("Running %s...\n", commandline); - ParseCommandLine (commandline); - } - } -#endif - -#ifdef FEATURE_DIR_STACK - /* initialize directory stack */ - InitDirectoryStack (); -#endif - - -#ifdef FEATURE_HISTORY - /*initialize history*/ - InitHistory(); -#endif - - /* Set COMSPEC environment variable */ - if (0 != GetModuleFileName (NULL, ModuleName, _MAX_PATH + 1)) - { - ModuleName[_MAX_PATH] = _T('\0'); - SetEnvironmentVariable (_T("COMSPEC"), ModuleName); - } - - /* add ctrl break handler */ - AddBreakHandler (); -} - - -static VOID Cleanup (int argc, char *argv[]) -{ - /* run cmdexit.bat */ - if (IsValidFileName (_T("cmdexit.bat"))) - { - ConErrPrintf ("Running cmdexit.bat...\n"); - ParseCommandLine (_T("cmdexit.bat")); - } - else if (IsValidFileName (_T("\\cmdexit.bat"))) - { - ConErrPrintf ("Running \\cmdexit.bat...\n"); - ParseCommandLine (_T("\\cmdexit.bat")); - } -#ifndef __REACTOS__ - else - { - /* try to run cmdexit.bat from install dir */ - TCHAR commandline[CMDLINE_LENGTH]; - LPTSTR p; - - _tcscpy (commandline, argv[0]); - p = _tcsrchr (commandline, _T('\\')) + 1; - _tcscpy (p, _T("cmdexit.bat")); - - if (IsValidFileName (_T("commandline"))) - { - ConErrPrintf ("Running %s...\n", commandline); - ParseCommandLine (commandline); - } - } -#endif - -#ifdef FEATURE_ALIASES - DestroyAlias (); -#endif - -#ifdef FEATURE_DIECTORY_STACK - /* destroy directory stack */ - DestroyDirectoryStack (); -#endif - -#ifdef INCLUDE_CMD_CHDIR - FreeLastPath (); -#endif - -#ifdef FEATURE_HISTORY - CleanHistory(); -#endif - - - /* remove ctrl break handler */ - RemoveBreakHandler (); - SetConsoleMode( GetStdHandle( STD_INPUT_HANDLE ), - ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT | ENABLE_ECHO_INPUT ); -} - - -/* - * main function - */ -int main (int argc, char *argv[]) -{ - CONSOLE_SCREEN_BUFFER_INFO Info; - INT nExitCode; - - SetFileApisToOEM(); - - AllocConsole(); - if (GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &Info) == FALSE) - { - fprintf(stderr, "GetConsoleScreenBufferInfo: Error: %ld\n", GetLastError()); -#ifndef __REACTOS__ - /* On ReactOS GetConsoleScreenBufferInfo returns an error if the stdin - handle is redirected to a pipe or file. This stops windres from working. */ - return(1); -#endif - } - wColor = Info.wAttributes; - wDefColor = wColor; - - /* check switches on command-line */ - Initialize(argc, argv); - - /* call prompt routine */ - nExitCode = ProcessInput(FALSE); - - /* do the cleanup */ - Cleanup(argc, argv); - - return(nExitCode); -} - -/* EOF */ diff --git a/rosapps/cmd/cmd.h b/rosapps/cmd/cmd.h deleted file mode 100644 index c1193654c2a..00000000000 --- a/rosapps/cmd/cmd.h +++ /dev/null @@ -1,415 +0,0 @@ -/* $Id: cmd.h,v 1.22 2003/01/17 00:31:32 gvg Exp $ - * - * CMD.H - header file for the modules in CMD.EXE - * - * - * History: - * - * 7-15-95 Tim Norman - * started - * - * 06/29/98 (Rob Lake) - * Moved error messages in here - * - * 07/12/98 (Rob Lake) - * Moved more error messages here. - * - * 30-Jul-1998 (John P Price ) - * Added compile date to version. - * - * 26-Feb-1999 (Eric Kohl ) - * Introduced a new version string. - * Thanks to Emanuele Aliberti! - */ - -#ifndef _CMD_H_INCLUDED_ -#define _CMD_H_INCLUDED_ - -#include "config.h" - -#include -#include - -#include "cmdver.h" - -#ifdef _MSC_VER -#define SHELLVER "Version " CMD_VER " [" __DATE__ ", msc]" -#else -#ifdef __LCC__ -#define SHELLVER "Version " CMD_VER " [" __DATE__ ", lcc-win32]" -#else -#define SHELLVER "Version " CMD_VER " [" __DATE__ "]" -#endif -#endif - - -#define BREAK_BATCHFILE 1 -#define BREAK_OUTOFBATCH 2 -#define BREAK_INPUT 3 -#define BREAK_IGNORE 4 - -/* define some error messages */ -#define NOENVERR "ERROR: no environment" -#define INVALIDDRIVE "ERROR: invalid drive" -#define INVALIDFUNCTION "ERROR: invalid function" -#define ACCESSDENIED "ERROR: access denied" -#define BADENVIROMENT "ERROR: bad enviroment" -#define BADFORMAT "ERROR: bad format" -#define ERROR_E2BIG "ERROR: Argument list too long" -#define ERROR_EINVAL "ERROR: Invalid argument" - -#define SHELLINFO "ReactOS Command Line Interpreter" - - -#define D_ON "on" -#define D_OFF "off" - - -/* command line buffer length */ -#ifdef __REACTOS__ -#define CMDLINE_LENGTH 512 -#else -#define CMDLINE_LENGTH 8192 -//#define CMDLINE_LENGTH 1024 -#endif - -/* global variables */ -extern HANDLE hOut; -extern HANDLE hIn; -extern WORD wColor; -extern WORD wDefColor; -extern BOOL bCtrlBreak; -extern BOOL bIgnoreEcho; -extern BOOL bExit; -extern INT nErrorLevel; -extern SHORT maxx; -extern SHORT maxy; -extern OSVERSIONINFO osvi; - - - -/* Prototypes for ALIAS.C */ -VOID InitializeAlias (VOID); -VOID DestroyAlias (VOID); -VOID ExpandAlias (LPTSTR, INT); -INT CommandAlias (LPTSTR, LPTSTR); - - -/* Prototypes for ATTRIB.C */ -INT CommandAttrib (LPTSTR, LPTSTR); - - -/* Prototypes for BEEP.C */ -INT cmd_beep (LPTSTR, LPTSTR); - - -/* Prototypes for CALL.C */ -INT cmd_call (LPTSTR, LPTSTR); - - -/* Prototypes for CHCP.C */ -INT CommandChcp (LPTSTR, LPTSTR); - - -/* Prototypes for CHOICE.C */ -INT CommandChoice (LPTSTR, LPTSTR); - - -/* Prototypes for CLS.C */ -INT cmd_cls (LPTSTR, LPTSTR); - - -/* Prototypes for CMD.C */ -VOID ParseCommandLine (LPTSTR); -VOID AddBreakHandler (VOID); -VOID RemoveBreakHandler (VOID); - - -/* Prototypes for CMDINPUT.C */ -VOID ReadCommand (LPTSTR, INT); - - -/* Prototypes for CMDTABLE.C */ -#define CMD_SPECIAL 1 -#define CMD_BATCHONLY 2 -#define CMD_HIDE 4 - -typedef struct tagCOMMAND -{ - LPTSTR name; - INT flags; - INT (*func) (LPTSTR, LPTSTR); -} COMMAND, *LPCOMMAND; - -extern COMMAND cmds[]; /* The internal command table */ - -VOID PrintCommandList (VOID); - - -/* Prototypes for COLOR.C */ -VOID SetScreenColor(WORD wArgColor, BOOL bFill); -INT CommandColor (LPTSTR, LPTSTR); - - -/* Prototypes for CONSOLE.C */ -#ifdef _DEBUG -VOID DebugPrintf (LPTSTR, ...); -#endif /* _DEBUG */ - -VOID ConInDummy (VOID); -VOID ConInDisable (VOID); -VOID ConInEnable (VOID); -VOID ConInFlush (VOID); -VOID ConInKey (PINPUT_RECORD); -VOID ConInString (LPTSTR, DWORD); - -VOID ConOutChar (TCHAR); -VOID ConOutPuts (LPTSTR); -VOID ConOutPrintf (LPTSTR, ...); -VOID ConErrChar (TCHAR); -VOID ConErrPuts (LPTSTR); -VOID ConErrPrintf (LPTSTR, ...); - -SHORT GetCursorX (VOID); -SHORT GetCursorY (VOID); -VOID GetCursorXY (PSHORT, PSHORT); -VOID SetCursorXY (SHORT, SHORT); - -VOID GetScreenSize (PSHORT, PSHORT); -VOID SetCursorType (BOOL, BOOL); - - -/* Prototypes for COPY.C */ -INT cmd_copy (LPTSTR, LPTSTR); - - -/* Prototypes for DATE.C */ -INT cmd_date (LPTSTR, LPTSTR); - - -/* Prototypes for DEL.C */ -INT CommandDelete (LPTSTR, LPTSTR); - - -/* Prototypes for DELAY.C */ -INT CommandDelay (LPTSTR, LPTSTR); - - -/* Prototypes for DIR.C */ -INT CommandDir (LPTSTR, LPTSTR); - - -/* Prototypes for DIRSTACK.C */ -VOID InitDirectoryStack (VOID); -VOID DestroyDirectoryStack (VOID); -INT GetDirectoryStackDepth (VOID); -INT CommandPushd (LPTSTR, LPTSTR); -INT CommandPopd (LPTSTR, LPTSTR); -INT CommandDirs (LPTSTR, LPTSTR); - - -/* Prototypes for ECHO.C */ -INT CommandEcho (LPTSTR, LPTSTR); -INT CommandEchos (LPTSTR, LPTSTR); -INT CommandEchoerr (LPTSTR, LPTSTR); -INT CommandEchoserr (LPTSTR, LPTSTR); - - -/* Prototypes for ERROR.C */ -VOID ErrorMessage (DWORD, LPTSTR, ...); - -VOID error_no_pipe (VOID); -VOID error_bad_command (VOID); -VOID error_invalid_drive (VOID); -VOID error_req_param_missing (VOID); -VOID error_sfile_not_found (LPTSTR); -VOID error_file_not_found (VOID); -VOID error_path_not_found (VOID); -VOID error_too_many_parameters (LPTSTR); -VOID error_invalid_switch (TCHAR); -VOID error_invalid_parameter_format (LPTSTR); -VOID error_out_of_memory (VOID); -VOID error_syntax (LPTSTR); - -VOID msg_pause (VOID); - - -/* Prototypes for FILECOMP.C */ -#ifdef FEATURE_UNIX_FILENAME_COMPLETION -VOID CompleteFilename (LPTSTR, INT); -INT ShowCompletionMatches (LPTSTR, INT); -#endif -#ifdef FEATURE_4NT_FILENAME_COMPLETION -#endif - - -/* Prototypes for FOR.C */ -INT cmd_for (LPTSTR, LPTSTR); - - -/* Prototypes for FREE.C */ -INT CommandFree (LPTSTR, LPTSTR); - - -/* Prototypes for GOTO.C */ -INT cmd_goto (LPTSTR, LPTSTR); - - -/* Prototypes for HISTORY.C */ -#ifdef FEATURE_HISTORY -VOID History (INT, LPTSTR);/*add entries browse history*/ -VOID History_move_to_bottom(VOID);/*F3*/ -VOID InitHistory(VOID); -VOID CleanHistory(VOID); -VOID History_del_current_entry(LPTSTR str);/*CTRL-D*/ -INT CommandHistory (LPTSTR cmd, LPTSTR param); -#endif - - -/* Prototypes for INTERNAL.C */ -VOID InitLastPath (VOID); -VOID FreeLastPath (VOID); -INT cmd_chdir (LPTSTR, LPTSTR); -INT cmd_mkdir (LPTSTR, LPTSTR); -INT cmd_rmdir (LPTSTR, LPTSTR); -INT CommandExit (LPTSTR, LPTSTR); -INT CommandRem (LPTSTR, LPTSTR); -INT CommandShowCommands (LPTSTR, LPTSTR); - - -/* Prototypes for LABEL.C */ -INT cmd_label (LPTSTR, LPTSTR); - - -/* Prototypes for LOCALE.C */ -extern TCHAR cDateSeparator; -extern INT nDateFormat; -extern TCHAR cTimeSeparator; -extern INT nTimeFormat; -extern TCHAR aszDayNames[7][8]; -extern TCHAR cThousandSeparator; -extern TCHAR cDecimalSeparator; -extern INT nNumberGroups; - -VOID InitLocale (VOID); -VOID PrintDate (VOID); -VOID PrintTime (VOID); - - -/* Prototypes for MEMORY.C */ -INT CommandMemory (LPTSTR, LPTSTR); - - -/* Prototypes for MISC.C */ -TCHAR cgetchar (VOID); -BOOL CheckCtrlBreak (INT); -LPTSTR *split (LPTSTR, LPINT, BOOL); -VOID freep (LPTSTR *); -LPTSTR stpcpy (LPTSTR, LPTSTR); -BOOL IsValidPathName (LPCTSTR); -BOOL IsValidFileName (LPCTSTR); -BOOL IsValidDirectory (LPCTSTR); -BOOL FileGetString (HANDLE, LPTSTR, INT); -#ifndef __REACTOS__ -HWND GetConsoleWindow(VOID); -#endif - -#define PROMPT_NO 0 -#define PROMPT_YES 1 -#define PROMPT_ALL 2 -#define PROMPT_BREAK 3 - -INT PagePrompt (VOID); -INT FilePromptYN (LPTSTR, ...); -INT FilePromptYNA (LPTSTR, ...); - - -/* Prototypes for MOVE.C */ -INT cmd_move (LPTSTR, LPTSTR); - - -/* Prototypes for MSGBOX.C */ -INT CommandMsgbox (LPTSTR, LPTSTR); - - -/* Prototypes from PATH.C */ -INT cmd_path (LPTSTR, LPTSTR); - - -/* Prototypes from PROMPT.C */ -VOID PrintPrompt (VOID); -INT cmd_prompt (LPTSTR, LPTSTR); - - -/* Prototypes for REDIR.C */ -#define INPUT_REDIRECTION 1 -#define OUTPUT_REDIRECTION 2 -#define OUTPUT_APPEND 4 -#define ERROR_REDIRECTION 8 -#define ERROR_APPEND 16 -INT GetRedirection (LPTSTR, LPTSTR, LPTSTR, LPTSTR, LPINT); - - -/* Prototypes for REN.C */ -INT cmd_rename (LPTSTR, LPTSTR); - - -/* Prototypes for SCREEN.C */ -INT CommandScreen (LPTSTR, LPTSTR); - - -/* Prototypes for SET.C */ -INT cmd_set (LPTSTR, LPTSTR); - - -/* Prototypes for START.C */ -INT cmd_start (LPTSTR, LPTSTR); - - -/* Prototypes for STRTOCLR.C */ -BOOL StringToColor (LPWORD, LPTSTR *); - - -/* Prototypes for TIME.C */ -INT cmd_time (LPTSTR, LPTSTR); - - -/* Prototypes for TIMER.C */ -INT CommandTimer (LPTSTR cmd, LPTSTR param); - - -/* Prototypes for TITLE.C */ -INT cmd_title (LPTSTR, LPTSTR); - - -/* Prototypes for TYPE.C */ -INT cmd_type (LPTSTR, LPTSTR); - - -/* Prototypes for VER.C */ -VOID ShortVersion (VOID); -INT cmd_ver (LPTSTR, LPTSTR); - - -/* Prototypes for VERIFY.C */ -INT cmd_verify (LPTSTR, LPTSTR); - - -/* Prototypes for VOL.C */ -INT cmd_vol (LPTSTR, LPTSTR); - - -/* Prototypes for WHERE.C */ -BOOL SearchForExecutable (LPCTSTR, LPTSTR); - -/* Prototypes for WINDOW.C */ -INT CommandActivate (LPTSTR, LPTSTR); -INT CommandWindow (LPTSTR, LPTSTR); - - -/* The MSDOS Batch Commands [MS-DOS 5.0 User's Guide and Reference p359] */ -int cmd_if(char *, char *); -int cmd_pause(char *, char *); -int cmd_shift(char *, char *); - -#endif /* _CMD_H_INCLUDED_ */ diff --git a/rosapps/cmd/cmd.rc b/rosapps/cmd/cmd.rc deleted file mode 100644 index d35e4ed7716..00000000000 --- a/rosapps/cmd/cmd.rc +++ /dev/null @@ -1,40 +0,0 @@ -#include -#include -#include "cmdver.h" - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -VS_VERSION_INFO VERSIONINFO - FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD - PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", RES_STR_COMPANY_NAME - VALUE "FileDescription", "ReactOS Command Processor\0" - VALUE "FileVersion", CMD_VER_RC - VALUE "InternalName", "cmd\0" - VALUE "OriginalCopyright", "Copyright (C) 1994-1998 Tim Norman and others\0" - VALUE "LegalCopyright", "Copyright (C) 1998-2001 Eric Kohl and others\0" - VALUE "OriginalFilename", "cmd.exe\0" - VALUE "ProductName", RES_STR_PRODUCT_NAME - VALUE "ProductVersion", RES_STR_PRODUCT_VERSION - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - diff --git a/rosapps/cmd/cmdinput.c b/rosapps/cmd/cmdinput.c deleted file mode 100644 index b9a944ab7f5..00000000000 --- a/rosapps/cmd/cmdinput.c +++ /dev/null @@ -1,513 +0,0 @@ -/* - * CMDINPUT.C - handles command input (tab completion, history, etc.). - * - * - * History: - * - * 01/14/95 (Tim Norman) - * started. - * - * 08/08/95 (Matt Rains) - * i have cleaned up the source code. changes now bring this source - * into guidelines for recommended programming practice. - * i have added some constants to help making changes easier. - * - * 12/12/95 (Tim Norman) - * added findxy() function to get max x/y coordinates to display - * correctly on larger screens - * - * 12/14/95 (Tim Norman) - * fixed the Tab completion code that Matt Rains broke by moving local - * variables to a more global scope and forgetting to initialize them - * when needed - * - * 8/1/96 (Tim Norman) - * fixed a bug in tab completion that caused filenames at the beginning - * of the command-line to have their first letter truncated - * - * 9/1/96 (Tim Norman) - * fixed a silly bug using printf instead of fputs, where typing "%i" - * confused printf :) - * - * 6/14/97 (Steffan Kaiser) - * ctrl-break checking - * - * 6/7/97 (Marc Desrochers) - * recoded everything! now properly adjusts when text font is changed. - * removed findxy(), reposition(), and reprint(), as these functions - * were inefficient. added goxy() function as gotoxy() was buggy when - * the screen font was changed. the printf() problem with %i on the - * command line was fixed by doing printf("%s",str) instead of - * printf(str). Don't ask how I find em just be glad I do :) - * - * 7/12/97 (Tim Norman) - * Note: above changes pre-empted Steffan's ctrl-break checking. - * - * 7/7/97 (Marc Desrochers) - * rewrote a new findxy() because the new dir() used it. This - * findxy() simply returns the values of *maxx *maxy. In the - * future, please use the pointers, they will always be correct - * since they point to BIOS values. - * - * 7/8/97 (Marc Desrochers) - * once again removed findxy(), moved the *maxx, *maxy pointers - * global and included them as externs in command.h. Also added - * insert/overstrike capability - * - * 7/13/97 (Tim Norman) - * added different cursor appearance for insert/overstrike mode - * - * 7/13/97 (Tim Norman) - * changed my code to use _setcursortype until I can figure out why - * my code is crashing on some machines. It doesn't crash on mine :) - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 28-Jul-1998 (John P Price ) - * put ifdef's around filename completion code. - * - * 30-Jul-1998 (John P Price ) - * moved filename completion code to filecomp.c - * made second TAB display list of filename matches - * - * 31-Jul-1998 (John P Price ) - * Fixed bug where if you typed something, then hit HOME, then tried - * to type something else in insert mode, it crashed. - * - * 07-Aug-1998 (John P Price ) - * Fixed carrage return output to better match MSDOS with echo - * on or off.(marked with "JPP 19980708") - * - * 13-Dec-1998 (Eric Kohl ) - * Added insert/overwrite cursor. - * - * 25-Jan-1998 (Eric Kohl ) - * Replaced CRT io functions by Win32 console io functions. - * This can handle - for 4NT filename completion. - * Unicode and redirection safe! - * - * 04-Feb-1999 (Eric Kohl ) - * Fixed input bug. A "line feed" character remained in the keyboard - * input queue when you pressed . This sometimes caused - * some very strange effects. - * Fixed some command line editing annoyances. - */ - -#include "config.h" - -#include -#include -#include - -#include "cmd.h" -#include "batch.h" - - -SHORT maxx; -SHORT maxy; - -/* - * global command line insert/overwrite flag - */ -static BOOL bInsert = TRUE; - - -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); -} - - -/* read in a command line */ -VOID ReadCommand (LPTSTR str, INT maxlen) -{ - SHORT orgx; /* origin x/y */ - SHORT orgy; - SHORT curx; /*current x/y cursor position*/ - SHORT cury; - 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; - WORD wLastKey = 0; - TCHAR ch; - BOOL bContinue=FALSE;/*is TRUE the second case will not be executed*/ - - /* get screen size */ - GetScreenSize (&maxx, &maxy); - - /* JPP 19980807 - if echo off, don't print prompt */ - if (bEcho) - PrintPrompt(); - - GetCursorXY (&orgx, &orgy); - - memset (str, 0, maxlen * sizeof (TCHAR)); - - SetCursorType (bInsert, TRUE); - - do - { - ConInKey (&ir); - - if (ir.Event.KeyEvent.dwControlKeyState & - (RIGHT_ALT_PRESSED|RIGHT_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; - 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); - bContinue=TRUE; - break; - } - -#endif/*FEATURE_HISTORY*/ - } - - - - - } - - //if (bContinue) - // continue; - - - - switch (ir.Event.KeyEvent.wVirtualKeyCode) - { - case VK_BACK: - /* - 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 ("\b \b"); - } - else - { - SetCursorXY ((SHORT)(maxx - 1), (SHORT)(GetCursorY () - 1)); - ConOutChar (_T(' ')); - SetCursorXY ((SHORT)(maxx - 1), (SHORT)(GetCursorY () - 1)); - } - } - else - { - for (count = current - 1; count < charcount; count++) - str[count] = str[count + 1]; - if (GetCursorX () != 0) - SetCursorXY ((SHORT)(GetCursorX () - 1), GetCursorY ()); - else - SetCursorXY ((SHORT)(maxx - 1), (SHORT)(GetCursorY () - 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); - current = 0; - } - break; - - case VK_END: - /* goto end of string */ - if (current != charcount) - { - SetCursorXY (orgx, orgy); - ConOutPrintf (_T("%s"), str); - current = charcount; - } - break; - - case VK_TAB: -#ifdef FEATURE_UNIX_FILENAME_COMPLETION - /* expand current file name */ - if (current == charcount) /* only works at end of line*/ - { - if (wLastKey != VK_TAB) - { - /* if first TAB, complete filename*/ - CompleteFilename (str, charcount); - charcount = _tcslen (str); - current = charcount; - - SetCursorXY (orgx, orgy); - ConOutPrintf (_T("%s"), str); - if ((_tcslen (str) > (USHORT)(maxx - orgx)) && (orgy == maxy + 1)) - orgy--; - } - else - { - /*if second TAB, list matches*/ - if (ShowCompletionMatches (str, charcount)) - { - PrintPrompt (); - GetCursorXY (&orgx, &orgy); - ConOutPrintf (_T("%s"), str); - } - - } - } - else - { -#ifdef __REACTOS__ - Beep (440, 50); -#else - MessageBeep (-1); -#endif - } -#endif -#ifdef FEATURE_4NT_FILENAME_COMPLETION - /* this is not implemented yet */ - if (ir.Event.KeyEvent.dwControlKeyState & SHIFT_PRESSED) - { - /* get previous match */ - - } - else - { - /* get next match */ - - } -#endif - break; - - case VK_RETURN: - /* end input, return to main */ -#ifdef FEATURE_HISTORY - /* add to the history */ - if (str[0]) - History (0, str); -#endif - ConInDummy (); - ConOutChar (_T('\n')); - break; - - case VK_ESCAPE: - /* clear str Make this callable! */ - ClearCommandLine (str, maxlen, orgx, orgy); - current = charcount = 0; - break; - -#ifdef FEATURE_HISTORY - 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); - ConOutPrintf (_T("%s"), str); -#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); - ConOutPrintf (_T("%s"), str); -#endif - break; - - case VK_LEFT: - /* move cursor left */ - if (current > 0) - { - current--; - if (GetCursorX () == 0) - SetCursorXY ((SHORT)(maxx - 1), (SHORT)(GetCursorY () - 1)); - else - SetCursorXY ((SHORT)(GetCursorX () - 1), GetCursorY ()); - } - else - { -#ifdef __REACTOS__ - Beep (440, 50); -#else - MessageBeep (-1); -#endif - } - break; - - case VK_RIGHT: - /* move cursor right */ - if (current != charcount) - { - current++; - if (GetCursorX () == maxx - 1) - SetCursorXY (0, (SHORT)(GetCursorY () + 1)); - else - SetCursorXY ((SHORT)(GetCursorX () + 1), GetCursorY ()); - } - break; - -#if 0 - -#ifdef FEATURE_HISTORY - - - /*!!!WARNING!!!*/ - /*this will only work as long as the two if statement - evaluates the same expression and a break is included - in each if statement. - This can be used for any combination using CTRL. - For other combinations is needed another system*/ - - 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; - break; - } - - case 'D': - 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); - break; - } - -#endif/*FEATURE_HISTORY*/ -#endif/*0*/ - - default: -#ifdef _UNICODE - ch = ir.Event.KeyEvent.uChar.UnicodeChar; - if ((ch >= 32 && ch <= 255) && (charcount != (maxlen - 2))) -#else - ch = ir.Event.KeyEvent.uChar.AsciiChar; - if (ch >= 32 && (charcount != (maxlen - 2))) -#endif /* _UNICODE */ - { - /* insert character into string... */ - if (bInsert && current != charcount) - { - for (count = charcount; count > current; count--) - str[count] = str[count - 1]; - str[current++] = ch; - if (GetCursorX () == maxx - 1) - { - curx = 0; - cury = GetCursorY () + 1; - } - else - { - GetCursorXY (&curx, &cury); - curx++; - } - ConOutPrintf (_T("%s"), &str[current - 1]); - if ((_tcslen (str) > (USHORT)(maxx - orgx)) && (orgy == maxy + 1)) - cury--; - SetCursorXY (curx, cury); - charcount++; - } - else - { - if (current == charcount) - charcount++; - str[current++] = ch; - ConOutChar (ch); - } - if ((_tcslen (str) > (USHORT)(maxx - orgx)) && (orgy == maxy + 1)) - orgy--; - } -#if 0 - else - { -#ifdef __REACTOS__ - Beep (440, 100); -#else - MessageBeep (-1); -#endif - } -#endif - break; - - } - wLastKey = ir.Event.KeyEvent.wVirtualKeyCode; - } - while (ir.Event.KeyEvent.wVirtualKeyCode != VK_RETURN); - - SetCursorType (bInsert, TRUE); -} diff --git a/rosapps/cmd/cmdtable.c b/rosapps/cmd/cmdtable.c deleted file mode 100644 index 7087a7de56c..00000000000 --- a/rosapps/cmd/cmdtable.c +++ /dev/null @@ -1,263 +0,0 @@ -/* - * CMDTABLE.C - table of internal commands. - * - * - * History: - * - * 16 Jul 1998 (Hans B Pufal) - * started. - * New file to keep the internal command table. I plan on - * getting rid of the table real soon now and replacing it - * with a dynamic mechnism. - * - * 27 Jul 1998 John P. Price - * added config.h include - * - * 21-Jan-1999 (Eric Kohl ) - * Unicode ready! - */ - -#include "config.h" - -#include -#include - -#include "cmd.h" - -/* a list of all the internal commands, associating their command names */ -/* to the functions to process them */ - - -COMMAND cmds[] = -{ - {_T("?"), 0, CommandShowCommands}, - -#ifdef INCLUDE_CMD_ACTIVATE - {_T("activate"), 0, CommandActivate}, -#endif - -#ifdef FEATURE_ALIASES - {_T("alias"), 0, CommandAlias}, -#endif - -#ifdef INCLUDE_CMD_ATTRIB - {_T("attrib"), 0, CommandAttrib}, -#endif - -#ifdef INCLUDE_CMD_BEEP - {_T("beep"), 0, cmd_beep}, -#endif - - {_T("call"), CMD_BATCHONLY, cmd_call}, - -#ifdef INCLUDE_CMD_CHDIR - {_T("cd"), CMD_SPECIAL, cmd_chdir}, - {_T("chdir"), CMD_SPECIAL, cmd_chdir}, -#endif - -#ifdef INCLUDE_CMD_CHCP - {_T("chcp"), 0, CommandChcp}, -#endif - -#ifdef INCLUDE_CMD_CHOICE - {_T("choice"), 0, CommandChoice}, -#endif - -#ifdef INCLUDE_CMD_CLS - {_T("cls"), 0, cmd_cls}, -#endif - -#ifdef INCLUDE_CMD_COLOR - {_T("color"), 0, CommandColor}, -#endif - -#ifdef INCLUDE_CMD_COPY - {_T("copy"), 0, cmd_copy}, -#endif - -#ifdef INCLUDE_CMD_DATE - {_T("date"), 0, cmd_date}, -#endif - -#ifdef INCLUDE_CMD_DEL - {_T("del"), 0, CommandDelete}, - {_T("delete"), 0, CommandDelete}, -#endif - -#ifdef INCLUDE_CMD_DELAY - {_T("delay"), 0, CommandDelay}, -#endif - -#ifdef INCLUDE_CMD_DIR - {_T("dir"), CMD_SPECIAL, CommandDir}, -#endif - -#ifdef FEATURE_DIRECTORY_STACK - {_T("dirs"), 0, CommandDirs}, -#endif - - {_T("echo"), 0, CommandEcho}, - {_T("echo."), CMD_HIDE, CommandEcho}, - {_T("echos"), 0, CommandEchos}, - {_T("echoerr"), 0, CommandEchoerr}, - {_T("echoerr."), CMD_HIDE, CommandEchoerr}, - {_T("echoserr"), 0, CommandEchoserr}, - -#ifdef INCLUDE_CMD_DEL - {_T("erase"), 0, CommandDelete}, -#endif - - {_T("exit"), 0, CommandExit}, - - {_T("for"), 0, cmd_for}, - -#ifdef INCLUDE_CMD_FREE - {_T("free"), 0, CommandFree}, -#endif - - {_T("goto"), CMD_BATCHONLY, cmd_goto}, - -#ifdef FEATURE_HISTORY - {_T("history"), 0, CommandHistory}, -#endif - - {_T("if"), 0, cmd_if}, - -#ifdef INCLUDE_CMD_LABEL - {_T("label"), 0, cmd_label}, -#endif - -#ifdef INCLUDE_CMD_MEMORY - {_T("memory"), 0, CommandMemory}, -#endif - -#ifdef INCLUDE_CMD_MKDIR - {_T("md"), CMD_SPECIAL, cmd_mkdir}, - {_T("mkdir"), CMD_SPECIAL, cmd_mkdir}, -#endif - -#ifdef INCLUDE_CMD_MOVE - {_T("move"), 0, cmd_move}, -#endif - -#ifdef INCLUDE_CMD_MSGBOX - {_T("msgbox"), 0, CommandMsgbox}, -#endif - -#ifdef INCLUDE_CMD_PATH - {_T("path"), 0, cmd_path}, -#endif - -#ifdef INCLUDE_CMD_PAUSE - {_T("pause"), 0, cmd_pause}, -#endif - -#ifdef FEATURE_DIRECTORY_STACK - {_T("popd"), 0, CommandPopd}, -#endif - -#ifdef INCLUDE_CMD_PROMPT - {_T("prompt"), 0, cmd_prompt}, -#endif - -#ifdef FEATURE_DIRECTORY_STACK - {_T("pushd"), 0, CommandPushd}, -#endif - -#ifdef INCLUDE_CMD_RMDIR - {_T("rd"), CMD_SPECIAL, cmd_rmdir}, -#endif - -#ifdef INCLUDE_CMD_REM - {_T("rem"), 0, CommandRem}, -#endif - -#ifdef INCLUDE_CMD_RENAME - {_T("ren"), 0, cmd_rename}, - {_T("rename"), 0, cmd_rename}, -#endif - -#ifdef INCLUDE_CMD_RMDIR - {_T("rmdir"), CMD_SPECIAL, cmd_rmdir}, -#endif - -#ifdef INCLUDE_CMD_SCREEN - {_T("screen"), 0, CommandScreen}, -#endif - -#ifdef INCLUDE_CMD_SET - {_T("set"), 0, cmd_set}, -#endif - - {_T("shift"), CMD_BATCHONLY, cmd_shift}, - -#ifdef INCLUDE_CMD_START - {_T("start"), 0, cmd_start}, -#endif - -#ifdef INCLUDE_CMD_TIME - {_T("time"), 0, cmd_time}, -#endif - -#ifdef INCLUDE_CMD_TIMER - {_T("timer"), 0, CommandTimer}, -#endif - -#ifdef INCLUDE_CMD_TITLE - {_T("title"), 0, cmd_title}, -#endif - -#ifdef INCLUDE_CMD_TYPE - {_T("type"), 0, cmd_type}, -#endif - -#ifdef INCLUDE_CMD_VER - {_T("ver"), 0, cmd_ver}, -#endif - -#ifdef INCLUDE_CMD_VERIFY - {_T("verify"), 0, cmd_verify}, -#endif - -#ifdef INCLUDE_CMD_VOL - {_T("vol"), 0, cmd_vol}, -#endif - -#ifdef INCLUDE_CMD_WINDOW - {_T("window"), 0, CommandWindow}, -#endif - - {NULL, 0, NULL} -}; - - -VOID PrintCommandList (VOID) -{ - LPCOMMAND cmdptr; - INT y; - - y = 0; - cmdptr = cmds; - while (cmdptr->name) - { - if (!(cmdptr->flags & CMD_HIDE)) - { - if (++y == 8) - { - ConOutPuts (cmdptr->name); - y = 0; - } - else - { - ConOutPrintf (_T("%-10s"), cmdptr->name); - } - } - - cmdptr++; - } - - if (y != 0) - ConOutChar ('\n'); -} - -/* EOF */ diff --git a/rosapps/cmd/cmdver.h b/rosapps/cmd/cmdver.h deleted file mode 100644 index 93ed1b8f446..00000000000 --- a/rosapps/cmd/cmdver.h +++ /dev/null @@ -1,2 +0,0 @@ -#define CMD_VER "0.1.2" -#define CMD_VER_RC CMD_VER"\0" diff --git a/rosapps/cmd/color.c b/rosapps/cmd/color.c deleted file mode 100644 index 1ec86eb5bbb..00000000000 --- a/rosapps/cmd/color.c +++ /dev/null @@ -1,131 +0,0 @@ -/* $Id: color.c,v 1.5 2002/07/15 22:29:32 sedwards Exp $ - * - * COLOR.C - color internal command. - * - * - * History: - * - * 13-Dec-1998 (Eric Kohl ) - * Started. - * - * 19-Jan-1999 (Eric Kohl ) - * Unicode ready! - * - * 20-Jan-1999 (Eric Kohl ) - * Redirection ready! - * - * 14-Oct-1999 (Paolo Pantaleo ) - * 4nt's syntax implemented - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_COLOR -#include -#include -#include -#include - -#include "cmd.h" - -static VOID ColorHelp (VOID) -{ - ConOutPuts (_T( - "Sets the default foreground and background colors.\n" - "\n" - "COLOR [attr [/F]] \n\n" - " attr Specifies color attribute of console output\n" - " /F fill the console with color attribute\n" - "\n" - "There are three ways to specify the colors:" - )); - - ConOutPuts (_T( - "\n" - "1) [bright] name on [bright] name (only the first three letters are required)\n" - "2) decimal on decimal\n" - "3) two hex digits\n" - "\n" - "Colors are:" - )); - - ConOutPuts (_T( - "dec hex name dec hex name\n" - "0 0 Black 8 8 Gray(Bright black)\n" - "1 1 Blue 9 9 Bright Blue\n" - "2 2 Green 10 A Bright Green\n" - "3 3 Cyan 11 B Bright Cyan\n" - "4 4 Red 12 C Bright Red\n" - "5 5 Magenta 13 D Bright Magenta\n" - "6 6 Yellow 14 E Bright Yellow\n" - "7 7 White 15 F Bright White")); -} - - -VOID SetScreenColor (WORD wColor, BOOL bFill) -{ - DWORD dwWritten; - CONSOLE_SCREEN_BUFFER_INFO csbi; - COORD coPos; - - if (bFill == TRUE) - { - GetConsoleScreenBufferInfo (hOut, &csbi); - - coPos.X = 0; - coPos.Y = 0; - FillConsoleOutputAttribute (hOut, - (WORD)(wColor & 0x00FF), - (csbi.dwSize.X)*(csbi.dwSize.Y), - coPos, - &dwWritten); - } - SetConsoleTextAttribute (hOut, (WORD)(wColor & 0x00FF)); -} - - -/* - * color - * - * internal dir command - */ -INT CommandColor (LPTSTR first, LPTSTR rest) -{ - if (_tcsncmp (rest, _T("/?"), 2) == 0) - { - ColorHelp (); - return 0; - } - - if (rest[0] == _T('\0')) - { - /* set default color */ - wColor = wDefColor; - SetScreenColor (wColor, TRUE); - return 0; - } - - if (StringToColor (&wColor, &rest) == FALSE) - { - ConErrPuts("error in color specification"); - return 1; - } - - ConErrPrintf ("Color %x\n", wColor); - - if ((wColor & 0xF) == (wColor &0xF0) >> 4) - { - ConErrPuts (_T("same colors error!")); - return 1; - } - - /* set color */ - SetScreenColor (wColor, - (_tcsstr (rest,"/F") || _tcsstr (rest,"/f"))); - - return 0; -} - -#endif /* INCLUDE_CMD_COLOR */ - -/* EOF */ diff --git a/rosapps/cmd/config.h b/rosapps/cmd/config.h deleted file mode 100644 index 65f8dac1f88..00000000000 --- a/rosapps/cmd/config.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * CONFIG.H - Used to configure what will be compiled into the shell. - * - * - * History: - * - * 27 Jul 1998 - John P. Price - * started. - * - */ - -/* Define only if used under ReactOS */ -#define __REACTOS__ - -#ifndef _CONFIG_H_INCLUDED_ -#define _CONFIG_H_INCLUDED_ - - -#ifndef __REACTOS__ -#define WIN32_LEAN_AND_MEAN -#endif /* __REACTOS__ */ - - -/* Define to enable debugging code */ -//#define _DEBUG - - -/* Define to enable the alias command, and aliases.*/ -#define FEATURE_ALIASES - - -/* Define to enable history */ -#define FEATURE_HISTORY - -/*Define to enable history wrap (4nt's style)*/ -#define WRAP_HISTORY - - -/* Define one of these to enable filename completion */ -#define FEATURE_UNIX_FILENAME_COMPLETION -/* #define FEATURE_4NT_FILENAME_COMPLETION */ - - -/* Define to enable the directory stack */ -#define FEATURE_DIRECTORY_STACK - - -/* Define to activate redirections and piping */ -#define FEATURE_REDIRECTION - - -/* Define one of these to select the used locale. */ -/* (date and time formats etc.) used in DATE, TIME, */ -/* DIR, PROMPT etc. */ -#ifdef __REACTOS__ -#define LOCALE_DEFAULT -#else -#define LOCALE_WINDOWS /* System locale */ -/* #define LOCALE_GERMAN */ /* German locale */ -/* #define LOCALE_DEFAULT */ /* United States locale */ -#endif - -#ifndef __REACTOS__ -#define INCLUDE_CMD_ACTIVATE -#endif -#define INCLUDE_CMD_ATTRIB -#define INCLUDE_CMD_CHCP -#define INCLUDE_CMD_CHDIR -#define INCLUDE_CMD_CHOICE -#define INCLUDE_CMD_CLS -#define INCLUDE_CMD_COLOR -#define INCLUDE_CMD_COPY -#define INCLUDE_CMD_DATE -#define INCLUDE_CMD_DEL -#define INCLUDE_CMD_DELAY -#define INCLUDE_CMD_DIR -#define INCLUDE_CMD_FREE -#define INCLUDE_CMD_LABEL -#define INCLUDE_CMD_MEMORY -#define INCLUDE_CMD_MKDIR -#define INCLUDE_CMD_MOVE -#ifndef __REACTOS__ -#define INCLUDE_CMD_MSGBOX -#endif -#define INCLUDE_CMD_PATH -#define INCLUDE_CMD_PROMPT -#define INCLUDE_CMD_RMDIR -#define INCLUDE_CMD_RENAME -#define INCLUDE_CMD_SCREEN -#define INCLUDE_CMD_SET -#define INCLUDE_CMD_START -#define INCLUDE_CMD_TIME -#define INCLUDE_CMD_TIMER -#define INCLUDE_CMD_TITLE -#define INCLUDE_CMD_TYPE -#define INCLUDE_CMD_VER -#define INCLUDE_CMD_REM -#define INCLUDE_CMD_PAUSE -#define INCLUDE_CMD_BEEP -#define INCLUDE_CMD_VERIFY -#define INCLUDE_CMD_VOL -#ifndef __REACTOS__ -#define INCLUDE_CMD_WINDOW -#endif - -#endif /* _CONFIG_H_INCLUDED_ */ diff --git a/rosapps/cmd/console.c b/rosapps/cmd/console.c deleted file mode 100644 index 4bff4f18edd..00000000000 --- a/rosapps/cmd/console.c +++ /dev/null @@ -1,302 +0,0 @@ -/* $Id: console.c,v 1.13 1999/12/15 00:50:41 ekohl Exp $ - * - * CONSOLE.C - console input/output functions. - * - * - * History: - * - * 20-Jan-1999 (Eric Kohl ) - * started - */ - -#include "config.h" - -#include -#include -#include -#include -#include - -#include "cmd.h" - - -#define OUTPUT_BUFFER_SIZE 4096 - - -#ifdef _DEBUG -VOID DebugPrintf (LPTSTR szFormat, ...) -{ - TCHAR szOut[OUTPUT_BUFFER_SIZE]; - va_list arg_ptr; - DWORD dwWritten; - - va_start (arg_ptr, szFormat); - _vstprintf (szOut, szFormat, arg_ptr); - va_end (arg_ptr); - - WriteFile (GetStdHandle (STD_ERROR_HANDLE), - szOut, - _tcslen(szOut) * sizeof(TCHAR), - &dwWritten, - NULL); -#if 0 - OutputDebugString (szOut); -#endif -} -#endif /* _DEBUG */ - - -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 ("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 ("Invalid input handle!!!\n"); -#endif /* _DEBUG */ - - do - { - ReadConsoleInput (hInput, lpBuffer, 1, &dwRead); - if ((lpBuffer->EventType == KEY_EVENT) && - (lpBuffer->Event.KeyEvent.bKeyDown == TRUE)) - break; - } - while (TRUE); -} - - - -VOID ConInString (LPTSTR lpInput, DWORD dwLength) -{ - DWORD dwOldMode; - DWORD dwRead; - HANDLE hFile; - - LPTSTR p; - DWORD i; - - ZeroMemory (lpInput, dwLength * sizeof(TCHAR)); - hFile = GetStdHandle (STD_INPUT_HANDLE); - GetConsoleMode (hFile, &dwOldMode); - - SetConsoleMode (hFile, ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT); - - ReadFile (hFile, lpInput, dwLength, &dwRead, NULL); - - p = lpInput; - for (i = 0; i < dwRead; i++, p++) - { - if (*p == _T('\x0d')) - { - *p = _T('\0'); - break; - } - } - - SetConsoleMode (hFile, dwOldMode); -} - - -VOID ConOutChar (TCHAR c) -{ - DWORD dwWritten; - - WriteFile (GetStdHandle (STD_OUTPUT_HANDLE), - &c, - sizeof(TCHAR), - &dwWritten, - NULL); -} - - -VOID ConOutPuts (LPTSTR szText) -{ - DWORD dwWritten; - - WriteFile (GetStdHandle (STD_OUTPUT_HANDLE), - szText, - _tcslen(szText) * sizeof(TCHAR), - &dwWritten, - NULL); - WriteFile (GetStdHandle (STD_OUTPUT_HANDLE), - _T("\n"), - sizeof(TCHAR), - &dwWritten, - NULL); -} - - -VOID ConOutPrintf (LPTSTR szFormat, ...) -{ - TCHAR szOut[OUTPUT_BUFFER_SIZE]; - DWORD dwWritten; - va_list arg_ptr; - - va_start (arg_ptr, szFormat); - _vstprintf (szOut, szFormat, arg_ptr); - va_end (arg_ptr); - - WriteFile (GetStdHandle (STD_OUTPUT_HANDLE), - szOut, - _tcslen(szOut) * sizeof(TCHAR), - &dwWritten, - NULL); -} - - -VOID ConErrChar (TCHAR c) -{ - DWORD dwWritten; - - WriteFile (GetStdHandle (STD_ERROR_HANDLE), - &c, - sizeof(TCHAR), - &dwWritten, - NULL); -} - - -VOID ConErrPuts (LPTSTR szText) -{ - DWORD dwWritten; - - WriteFile (GetStdHandle (STD_ERROR_HANDLE), - szText, - _tcslen(szText) * sizeof(TCHAR), - &dwWritten, - NULL); - WriteFile (GetStdHandle (STD_ERROR_HANDLE), - _T ("\n"), - sizeof(TCHAR), - &dwWritten, - NULL); -} - - -VOID ConErrPrintf (LPTSTR szFormat, ...) -{ - TCHAR szOut[OUTPUT_BUFFER_SIZE]; - DWORD dwWritten; - va_list arg_ptr; - - va_start (arg_ptr, szFormat); - _vstprintf (szOut, szFormat, arg_ptr); - va_end (arg_ptr); - - WriteFile (GetStdHandle (STD_ERROR_HANDLE), - szOut, - _tcslen(szOut) * sizeof(TCHAR), - &dwWritten, - NULL); -} - - -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 (GetStdHandle (STD_OUTPUT_HANDLE), &csbi); - - *x = csbi.dwCursorPosition.X; - *y = csbi.dwCursorPosition.Y; -} - - -SHORT GetCursorX (VOID) -{ - CONSOLE_SCREEN_BUFFER_INFO csbi; - - GetConsoleScreenBufferInfo (GetStdHandle (STD_OUTPUT_HANDLE), &csbi); - - return csbi.dwCursorPosition.X; -} - - -SHORT GetCursorY (VOID) -{ - CONSOLE_SCREEN_BUFFER_INFO csbi; - - GetConsoleScreenBufferInfo (GetStdHandle (STD_OUTPUT_HANDLE), &csbi); - - return csbi.dwCursorPosition.Y; -} - - -VOID GetScreenSize (PSHORT maxx, PSHORT maxy) -{ - CONSOLE_SCREEN_BUFFER_INFO csbi; - - GetConsoleScreenBufferInfo (GetStdHandle (STD_OUTPUT_HANDLE), &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 */ diff --git a/rosapps/cmd/copy.c b/rosapps/cmd/copy.c deleted file mode 100644 index b1596f57dec..00000000000 --- a/rosapps/cmd/copy.c +++ /dev/null @@ -1,755 +0,0 @@ -/* $Id: copy.c,v 1.8 2003/01/17 00:31:32 gvg Exp $ - * - * COPY.C -- copy internal command. - * - * - * History: - * - * 01-Aug-98 (Rob Lake z63rrl@morgan.ucs.mun.ca) - * started - * - * 13-Aug-1998 (John P. Price) - * fixed memory leak problem in copy function. - * fixed copy function so it would work with wildcards in the source - * - * 13-Dec-1998 (Eric Kohl ) - * Added COPY command to CMD. - * - * 26-Jan-1998 (Eric Kohl ) - * Replaced CRT io functions by Win32 io functions. - * - * 27-Oct-1998 (Eric Kohl ) - * Disabled prompting when used in batch mode. - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_COPY - -#include -#include -#include -#include -#include - -#include "cmd.h" -#include "batch.h" - - -#define VERIFY 1 /* VERIFY Switch */ -#define BINARY 2 /* File is to be copied as BINARY */ -#define ASCII 4 /* File is to be copied as ASCII */ -#define PROMPT 8 /* Prompt before overwriting files */ -#define NPROMPT 16 /* Do not prompt before overwriting files */ -#define HELP 32 /* Help was asked for */ -#define SOURCE 128 /* File is a source */ - - -typedef struct tagFILES -{ - struct tagFILES *next; - TCHAR szFile[MAX_PATH]; - DWORD dwFlag; /* BINARY -xor- ASCII */ -} FILES, *LPFILES; - - -static BOOL DoSwitches (LPTSTR, LPDWORD); -static BOOL AddFile (LPFILES, char *, int *, int *, LPDWORD); -static BOOL AddFiles (LPFILES, char *, int *, int *, int *, LPDWORD); -static BOOL GetDestination (LPFILES, LPFILES); -static INT ParseCommand (LPFILES, int, char **, LPDWORD); -static VOID DeleteFileList (LPFILES); -static INT Overwrite (LPTSTR); - - - -static BOOL -IsDirectory (LPTSTR fn) -{ - if (!IsValidFileName (fn)) - return FALSE; - return (GetFileAttributes (fn) & FILE_ATTRIBUTE_DIRECTORY); -} - - -static BOOL -DoSwitches (LPTSTR arg, LPDWORD lpdwFlags) -{ - if (!_tcsicmp (arg, _T("/-Y"))) - { - *lpdwFlags |= PROMPT; - *lpdwFlags &= ~NPROMPT; - return TRUE; - } - else if (_tcslen (arg) > 2) - { - error_too_many_parameters (""); - return FALSE; - } - - switch (_totupper (arg[1])) - { - case _T('V'): - *lpdwFlags |= VERIFY; - break; - - case _T('A'): - *lpdwFlags |= ASCII; - *lpdwFlags &= ~BINARY; - break; - - case _T('B'): - *lpdwFlags |= BINARY; - *lpdwFlags &= ~ASCII; - break; - - case _T('Y'): - *lpdwFlags &= ~PROMPT; - *lpdwFlags |= NPROMPT; - break; - - default: - error_invalid_switch (arg[1]); - return FALSE; - } - return TRUE; -} - - -static BOOL -AddFile (LPFILES f, char *arg, int *source, int *dest, LPDWORD flags) -{ - if (*dest) - { - error_too_many_parameters (""); - return FALSE; - } - if (*source) - { - *dest = 1; - f->dwFlag = 0; - } - else - { - *source = 1; - f->dwFlag = SOURCE; - } - _tcscpy(f->szFile, arg); - f->dwFlag |= *flags & ASCII ? ASCII : BINARY; - if ((f->next = (LPFILES)malloc (sizeof (FILES))) == NULL) - { - error_out_of_memory (); - return FALSE; - } - f = f->next; - f->dwFlag = 0; - f->next = NULL; - return TRUE; -} - - -static BOOL -AddFiles (LPFILES f, char *arg, int *source, int *dest, - int *count, LPDWORD flags) -{ - char t[128]; - int j; - int k; - - if (*dest) - { - error_too_many_parameters (""); - return FALSE; - } - - j = 0; - k = 0; - - while (arg[j] == _T('+')) - j++; - - while (arg[j] != _T('\0')) - { - t[k] = arg[j++]; - if (t[k] == '+' || arg[j] == _T('\0')) - { - if (!k) - continue; - if (arg[j] == _T('\0') && t[k] != _T('+')) - k++; - t[k] = _T('\0'); - *count += 1; - _tcscpy (f->szFile, t); - *source = 1; - if (*flags & ASCII) - f->dwFlag |= *flags | SOURCE | ASCII; - else - f->dwFlag |= *flags | BINARY | SOURCE; - - if ((f->next = (LPFILES)malloc (sizeof (FILES))) == NULL) - { - error_out_of_memory (); - return FALSE; - } - f = f->next; - f->next = NULL; - k = 0; - f->dwFlag = 0; - continue; - } - k++; - } - - if (arg[--j] == _T('+')) - *source = 0; - - return 1; -} - - -static BOOL -GetDestination (LPFILES f, LPFILES dest) -{ - LPFILES p = NULL; - LPFILES start = f; - - while (f->next != NULL) - { - p = f; - f = f->next; - } - - f = p; - - if ((f->dwFlag & SOURCE) == 0) - { - free (p->next); - p->next = NULL; - _tcscpy (dest->szFile, f->szFile); - dest->dwFlag = f->dwFlag; - dest->next = NULL; - f = start; - return TRUE; - } - - return FALSE; -} - - -static INT -ParseCommand (LPFILES f, int argc, char **arg, LPDWORD lpdwFlags) -{ - INT i; - INT dest; - INT source; - INT count; - - dest = 0; - source = 0; - count = 0; - - for (i = 0; i < argc; i++) - { - if (arg[i][0] == _T('/')) - { - if (!DoSwitches (arg[i], lpdwFlags)) - return -1; - } - else - { - if (!_tcscmp(arg[i], _T("+"))) - source = 0; - else if (!_tcschr(arg[i], _T('+')) && source) - { - if (!AddFile(f, arg[i], &source, &dest, lpdwFlags)) - return -1; - f = f->next; - count++; - } - else - { - if (!AddFiles(f, arg[i], &source, &dest, &count, lpdwFlags)) - return -1; - while (f->next != NULL) - f = f->next; - } - } - } - -#ifdef _DEBUG - DebugPrintf ("ParseCommand: flags has %s\n", - *lpdwFlags & ASCII ? "ASCII" : "BINARY"); -#endif - return count; -} - - -static VOID -DeleteFileList (LPFILES f) -{ - LPFILES temp; - - while (f != NULL) - { - temp = f; - f = f->next; - free (temp); - } -} - - -static INT -Overwrite (LPTSTR fn) -{ - TCHAR inp[10]; - LPTSTR p; - - ConOutPrintf (_T("Overwrite %s (Yes/No/All)? "), fn); - ConInString (inp, 10); - ConOutPuts (_T("")); - - _tcsupr (inp); - for (p = inp; _istspace (*p); p++) - ; - - if (*p != _T('Y') && *p != _T('A')) - return 0; - if (*p == _T('A')) - return 2; - - return 1; -} - - -#define BUFF_SIZE 16384 /* 16k = max buffer size */ - - -int copy (LPTSTR source, LPTSTR dest, int append, LPDWORD lpdwFlags) -{ - FILETIME srctime; - HANDLE hFileSrc; - HANDLE hFileDest; - LPBYTE buffer; - DWORD dwAttrib; - DWORD dwRead; - DWORD dwWritten; - DWORD i; - BOOL bEof = FALSE; - -#ifdef _DEBUG - DebugPrintf ("checking mode\n"); -#endif - - dwAttrib = GetFileAttributes (source); - - hFileSrc = CreateFile (source, GENERIC_READ, FILE_SHARE_READ, - NULL, OPEN_EXISTING, 0, NULL); - if (hFileSrc == INVALID_HANDLE_VALUE) - { - ConErrPrintf (_T("Error: Cannot open source - %s!\n"), source); - return 0; - } - -#ifdef _DEBUG - DebugPrintf (_T("getting time\n")); -#endif - - GetFileTime (hFileSrc, &srctime, NULL, NULL); - -#ifdef _DEBUG - DebugPrintf (_T("copy: flags has %s\n"), - *lpdwFlags & ASCII ? "ASCII" : "BINARY"); -#endif - - if (!IsValidFileName (dest)) - { -#ifdef _DEBUG - DebugPrintf (_T("opening/creating\n")); -#endif - hFileDest = - CreateFile (dest, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - } - else if (!append) - { - if (!_tcscmp (dest, source)) - { - ConErrPrintf (_T("Error: Can't copy onto itself!\n")); - CloseHandle (hFileSrc); - return 0; - } - -#ifdef _DEBUG - DebugPrintf (_T("SetFileAttributes (%s, FILE_ATTRIBUTE_NORMAL);\n"), dest); -#endif - SetFileAttributes (dest, FILE_ATTRIBUTE_NORMAL); - -#ifdef _DEBUG - DebugPrintf (_T("DeleteFile (%s);\n"), dest); -#endif - DeleteFile (dest); - - hFileDest = - CreateFile (dest, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - } - else - { - LONG lFilePosHigh = 0; - - if (!_tcscmp (dest, source)) - { - CloseHandle (hFileSrc); - return 0; - } - -#ifdef _DEBUG - DebugPrintf (_T("opening/appending\n")); -#endif - hFileDest = - CreateFile (dest, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); - SetFilePointer (hFileDest, 0, &lFilePosHigh,FILE_END); - } - - if (hFileDest == INVALID_HANDLE_VALUE) - { - CloseHandle (hFileSrc); - error_path_not_found (); - return 0; - } - - buffer = (LPBYTE)malloc (BUFF_SIZE); - if (buffer == NULL) - { - CloseHandle (hFileDest); - CloseHandle (hFileSrc); - error_out_of_memory (); - return 0; - } - - do - { - ReadFile (hFileSrc, buffer, BUFF_SIZE, &dwRead, NULL); - if (*lpdwFlags & ASCII) - { - for (i = 0; i < dwRead; i++) - { - if (((LPTSTR)buffer)[i] == 0x1A) - { - bEof = TRUE; - break; - } - } - dwRead = i; - } - - if (dwRead == 0) - break; - - WriteFile (hFileDest, buffer, dwRead, &dwWritten, NULL); - if (dwWritten != dwRead) - { - ConErrPrintf (_T("Error writing destination!\n")); - free (buffer); - CloseHandle (hFileDest); - CloseHandle (hFileSrc); - return 0; - } - } - while (dwRead && !bEof); - -#ifdef _DEBUG - DebugPrintf (_T("setting time\n")); -#endif - SetFileTime (hFileDest, &srctime, NULL, NULL); - - if (*lpdwFlags & ASCII) - { - ((LPTSTR)buffer)[0] = 0x1A; - ((LPTSTR)buffer)[1] = _T('\0'); -#ifdef _DEBUG - DebugPrintf (_T("appending ^Z\n")); -#endif - WriteFile (hFileDest, buffer, sizeof(TCHAR), &dwWritten, NULL); - } - - free (buffer); - CloseHandle (hFileDest); - CloseHandle (hFileSrc); - -#ifdef _DEBUG - DebugPrintf (_T("setting mode\n")); -#endif - SetFileAttributes (dest, dwAttrib); - - return 1; -} - - -static INT -SetupCopy (LPFILES sources, char **p, BOOL bMultiple, - char *drive_d, char *dir_d, char *file_d, - char *ext_d, int *append, LPDWORD lpdwFlags) -{ - WIN32_FIND_DATA find; - - char drive_s[_MAX_DRIVE]; - CHAR dir_s[_MAX_DIR]; - char file_s[_MAX_FNAME]; - char ext_s[_MAX_EXT]; - char from_merge[_MAX_PATH]; - - LPTSTR real_source; - LPTSTR real_dest; - - INT nCopied = 0; - BOOL bAll = FALSE; - BOOL bDone; - HANDLE hFind; - -#ifdef _DEBUG - DebugPrintf (_T("SetupCopy\n")); -#endif - - real_source = (LPTSTR)malloc (MAX_PATH); - real_dest = (LPTSTR)malloc (MAX_PATH); - - if (!real_source || !real_dest) - { - error_out_of_memory (); - DeleteFileList (sources); - free (real_source); - free (real_dest); - freep (p); - return 0; - } - - while (sources->next != NULL) - { - _splitpath (sources->szFile, drive_s, dir_s, file_s, ext_s); - hFind = FindFirstFile (sources->szFile, &find); - if (hFind == INVALID_HANDLE_VALUE) - { - error_file_not_found(); - freep(p); - free(real_source); - free(real_dest); - return 0; - } - - do - { - if (find.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - goto next; - - _makepath(from_merge, drive_d, dir_d, file_d, ext_d); - if (from_merge[_tcslen(from_merge) - 1] == _T('\\')) - from_merge[_tcslen(from_merge) - 1] = 0; - - if (IsDirectory (from_merge)) - { - bMultiple = FALSE; - _tcscat (from_merge, _T("\\")); - _tcscat (from_merge, find.cFileName); - } - else - bMultiple = TRUE; - - _tcscpy (real_dest, from_merge); - _makepath (real_source, drive_s, dir_s, find.cFileName, NULL); - -#ifdef _DEBUG - DebugPrintf (_T("copying %s -> %s (%sappending%s)\n"), - real_source, real_dest, - *append ? "" : "not ", - sources->dwFlag & ASCII ? ", ASCII" : ", BINARY"); -#endif - - if (IsValidFileName (real_dest) && !bAll) - { - /* Don't prompt in a batch file */ - if (bc != NULL) - { - bAll = TRUE; - } - else - { - int over; - - over = Overwrite (real_dest); - if (over == 2) - bAll = TRUE; - else if (over == 0) - goto next; - else if (bMultiple) - bAll = TRUE; - } - } - if (copy (real_source, real_dest, *append, lpdwFlags)) - nCopied++; - next: - bDone = FindNextFile (hFind, &find); - - if (bMultiple) - *append = 1; - } - while (bDone); - - FindClose (hFind); - sources = sources->next; - - } - free (real_source); - free (real_dest); - - return nCopied; -} - - -INT cmd_copy (LPTSTR first, LPTSTR rest) -{ - char **p; - char drive_d[_MAX_DRIVE]; - char dir_d[_MAX_DIR]; - char file_d[_MAX_FNAME]; - char ext_d[_MAX_EXT]; - - int argc; - int append; - int files; - int copied; - - LPFILES sources = NULL; - LPFILES start = NULL; - FILES dest; - BOOL bMultiple; - BOOL bWildcards; - BOOL bDestFound; - DWORD dwFlags = 0; - - if (!_tcsncmp (rest, _T("/?"), 2)) - { - ConOutPuts (_T("Copies one or more files to another location.\n" - "\n" - "COPY [/V][/Y|/-Y][/A|/B] source [/A|/B]\n" - " [+ source [/A|/B] [+ ...]] [destination [/A|/B]]\n" - "\n" - " source Specifies the file or files to be copied.\n" - " /A Indicates an ASCII text file.\n" - " /B Indicates a binary file.\n" - " destination Specifies the directory and/or filename for the new file(s).\n" - " /V Verifies that new files are written correctly.\n" - " /Y Suppresses prompting to confirm you want to overwrite an\n" - " existing destination file.\n" - " /-Y Causes prompting to confirm you want to overwrite an\n" - " existing destination file.\n" - "\n" - "The switch /Y may be present in the COPYCMD environment variable.\n" - "...")); - return 1; - } - - p = split (rest, &argc, FALSE); - - if (argc == 0) - { - error_req_param_missing (); - return 0; - } - - sources = (LPFILES)malloc (sizeof (FILES)); - if (!sources) - { - error_out_of_memory (); - return 0; - } - sources->next = NULL; - sources->dwFlag = 0; - - if ((files = ParseCommand (sources, argc, p, &dwFlags)) == -1) - { - DeleteFileList (sources); - freep (p); - return 0; - } - else if (files == 0) - { - error_req_param_missing(); - DeleteFileList (sources); - freep (p); - return 0; - } - start = sources; - - bDestFound = GetDestination (sources, &dest); - if (bDestFound) - { - _splitpath (dest.szFile, drive_d, dir_d, file_d, ext_d); - if (IsDirectory (dest.szFile)) - { - _tcscat (dir_d, file_d); - _tcscat (dir_d, ext_d); - file_d[0] = _T('\0'); - ext_d[0] = _T('\0'); - } - } - - if (_tcschr (dest.szFile, _T('*')) || _tcschr (dest.szFile, _T('?'))) - bWildcards = TRUE; - else - bWildcards = FALSE; - - if (strchr(rest, '+')) - bMultiple = TRUE; - else - bMultiple = FALSE; - - append = 0; - copied = 0; - - if (bDestFound && !bWildcards) - { - copied = SetupCopy (sources, p, bMultiple, drive_d, dir_d, file_d, ext_d, &append, &dwFlags); - } - else if (bDestFound && bWildcards) - { - ConErrPrintf (_T("Error: Not implemented yet!\n")); - DeleteFileList (sources); - freep (p); - return 0; - } - else if (!bDestFound && !bMultiple) - { - _splitpath (sources->szFile, drive_d, dir_d, file_d, ext_d); - if (IsDirectory (sources->szFile)) - { - _tcscat (dir_d, file_d); - _tcscat (dir_d, ext_d); - file_d[0] = _T('\0'); - ext_d[0] = _T('\0'); - } - copied = SetupCopy (sources, p, FALSE, "", "", file_d, ext_d, &append, &dwFlags); - } - else - { - _splitpath(sources->szFile, drive_d, dir_d, file_d, ext_d); - if (IsDirectory (sources->szFile)) - { - _tcscat (dir_d, file_d); - _tcscat (dir_d, ext_d); - file_d[0] = _T('\0'); - ext_d[0] = _T('\0'); - } - - ConOutPuts (sources->szFile); - append = 1; - copied = SetupCopy (sources->next, p, bMultiple, drive_d, dir_d, file_d, ext_d, &append, &dwFlags) + 1; - } - - DeleteFileList (sources); - freep (p); - ConOutPrintf (_T(" %d file(s) copied\n"), copied); - - return 1; -} -#endif /* INCLUDE_CMD_COPY */ - -/* EOF */ diff --git a/rosapps/cmd/date.c b/rosapps/cmd/date.c deleted file mode 100644 index bcee0d63e18..00000000000 --- a/rosapps/cmd/date.c +++ /dev/null @@ -1,261 +0,0 @@ -/* - * DATE.C - date internal command. - * - * - * History: - * - * 08 Jul 1998 (John P. Price) - * started. - * - * 20 Jul 1998 (John P. Price) - * corrected number of days for December from 30 to 31. - * (Thanx to Steffen Kaiser for bug report) - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 29-Jul-1998 (Rob Lake) - * fixed stand-alone mode. - * Added Pacific C compatible dos_getdate functions - * - * 09-Jan-1999 (Eric Kohl ) - * Added locale support - * - * 23-Jan-1999 (Eric Kohl ) - * Unicode and redirection safe! - * - * 04-Feb-1999 (Eric Kohl ) - * Fixed date input bug. - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_DATE - -#include -#include -#include -#include - -#include "cmd.h" - - -static WORD awMonths[2][13] = -{ - {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, - {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} -}; - - -static VOID -PrintDateString (VOID) -{ - switch (nDateFormat) - { - case 0: /* mmddyy */ - default: - ConOutPrintf (_T("\nEnter new date (mm%cdd%cyyyy): "), - cDateSeparator, cDateSeparator); - break; - - case 1: /* ddmmyy */ - ConOutPrintf (_T("\nEnter new date (dd%cmm%cyyyy): "), - cDateSeparator, cDateSeparator); - break; - - case 2: /* yymmdd */ - ConOutPrintf (_T("\nEnter new date (yyyy%cmm%cdd): "), - cDateSeparator, cDateSeparator); - break; - } -} - - -static BOOL -ReadNumber (LPTSTR *s, LPWORD lpwValue) -{ - if (_istdigit (**s)) - { - while (_istdigit (**s)) - { - *lpwValue = *lpwValue * 10 + **s - _T('0'); - (*s)++; - } - return TRUE; - } - return FALSE; -} - - -static BOOL -ReadSeparator (LPTSTR *s) -{ - if (**s == _T('/') || **s == _T('-') || **s == cDateSeparator) - { - (*s)++; - return TRUE; - } - return FALSE; -} - - -static BOOL -ParseDate (LPTSTR s) -{ - SYSTEMTIME d; - unsigned char leap; - LPTSTR p = s; - - if (!*s) - return TRUE; - - GetLocalTime (&d); - - d.wYear = 0; - d.wDay = 0; - d.wMonth = 0; - - switch (nDateFormat) - { - case 0: /* mmddyy */ - default: - if (!ReadNumber (&p, &d.wMonth)) - return FALSE; - if (!ReadSeparator (&p)) - return FALSE; - if (!ReadNumber (&p, &d.wDay)) - return FALSE; - if (!ReadSeparator (&p)) - return FALSE; - if (!ReadNumber (&p, &d.wYear)) - return FALSE; - break; - - case 1: /* ddmmyy */ - if (!ReadNumber (&p, &d.wDay)) - return FALSE; - if (!ReadSeparator (&p)) - return FALSE; - if (!ReadNumber (&p, &d.wMonth)) - return FALSE; - if (!ReadSeparator (&p)) - return FALSE; - if (!ReadNumber (&p, &d.wYear)) - return FALSE; - break; - - case 2: /* yymmdd */ - if (!ReadNumber (&p, &d.wYear)) - return FALSE; - if (!ReadSeparator (&p)) - return FALSE; - if (!ReadNumber (&p, &d.wMonth)) - return FALSE; - if (!ReadSeparator (&p)) - return FALSE; - if (!ReadNumber (&p, &d.wDay)) - return FALSE; - break; - } - - /* if only entered two digits: */ - /* assume 2000's if value less than 80 */ - /* assume 1900's if value greater or equal 80 */ - if (d.wYear <= 99) - { - if (d.wYear >= 80) - d.wYear = 1900 + d.wYear; - else - d.wYear = 2000 + d.wYear; - } - - leap = (!(d.wYear % 4) && (d.wYear % 100)) || !(d.wYear % 400); - - if ((d.wMonth >= 1 && d.wMonth <= 12) && - (d.wDay >= 1 && d.wDay <= awMonths[leap][d.wMonth]) && - (d.wYear >= 1980 && d.wYear <= 2099)) - { - SetLocalTime (&d); - return TRUE; - } - - return FALSE; -} - - -INT cmd_date (LPTSTR cmd, LPTSTR param) -{ - LPTSTR *arg; - INT argc; - INT i; - BOOL bPrompt = TRUE; - INT nDateString = -1; - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Displays or sets the date.\n\n" - "DATE [/T][date]\n\n" - " /T display only\n\n" - "Type DATE without parameters to display the current date setting and\n" - "a prompt for a new one. Press ENTER to keep the same date.")); - return 0; - } - - /* build parameter array */ - arg = split (param, &argc, FALSE); - - /* check for options */ - for (i = 0; i < argc; i++) - { - if (_tcsicmp (arg[i], _T("/t")) == 0) - bPrompt = FALSE; - if ((*arg[i] != _T('/')) && (nDateString == -1)) - nDateString = i; - } - - if (nDateString == -1) - PrintDate (); - - if (!bPrompt) - { - freep (arg); - return 0; - } - - if (nDateString == -1) - { - while (TRUE) /* forever loop */ - { - TCHAR s[40]; - - PrintDateString (); - ConInString (s, 40); -#ifdef _DEBUG - DebugPrintf ("\'%s\'\n", s); -#endif - while (*s && s[_tcslen (s) - 1] < ' ') - s[_tcslen (s) - 1] = '\0'; - if (ParseDate (s)) - { - freep (arg); - return 0; - } - ConErrPuts ("Invalid date."); - } - } - else - { - if (ParseDate (arg[nDateString])) - { - freep (arg); - return 0; - } - ConErrPuts ("Invalid date."); - } - - freep (arg); - - return 0; -} -#endif - diff --git a/rosapps/cmd/del.c b/rosapps/cmd/del.c deleted file mode 100644 index 6ef495e9c2e..00000000000 --- a/rosapps/cmd/del.c +++ /dev/null @@ -1,348 +0,0 @@ -/* - * DEL.C - del internal command. - * - * - * History: - * - * 06/29/98 (Rob Lake rlake@cs.mun.ca) - * rewrote del to support wildcards - * added my name to the contributors - * - * 07/13/98 (Rob Lake) - * fixed bug that caused del not to delete file with out - * attribute. moved set, del, ren, and ver to there own files - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 09-Dec-1998 (Eric Kohl ) - * Fixed command line parsing bugs. - * - * 21-Jan-1999 (Eric Kohl ) - * Started major rewrite using a new structure. - * - * 03-Feb-1999 (Eric Kohl ) - * First working version. - * - * 30-Mar-1999 (Eric Kohl ) - * Added quiet ("/Q"), wipe ("/W") and zap ("/Z") option. - * - * 06-Nov-1999 (Eric Kohl ) - * Little fix to keep DEL quiet inside batch files. - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_DEL - -#include -#include -#include -#include -#include - -#include "cmd.h" -#include "batch.h" - - -enum -{ - DEL_ATTRIBUTES = 0x001, /* /A : not implemented */ - DEL_ERROR = 0x002, /* /E : not implemented */ - DEL_NOTHING = 0x004, /* /N */ - DEL_PROMPT = 0x008, /* /P : not implemented */ - DEL_QUIET = 0x010, /* /Q */ - DEL_SUBDIR = 0x020, /* /S : not implemented */ - DEL_TOTAL = 0x040, /* /T */ - DEL_WIPE = 0x080, /* /W */ - DEL_EMPTYDIR = 0x100, /* /X : not implemented */ - DEL_YES = 0x200, /* /Y : not implemented */ - DEL_ZAP = 0x400 /* /Z */ -}; - - - -static BOOL -RemoveFile (LPTSTR lpFileName, DWORD dwFlags) -{ - if (dwFlags & DEL_WIPE) - { - - /* FIXME: Wipe the given file */ - - } - - return DeleteFile (lpFileName); -} - - -INT CommandDelete (LPTSTR cmd, LPTSTR param) -{ - TCHAR szFullPath[MAX_PATH]; - LPTSTR pFilePart; - LPTSTR *arg = NULL; - INT args; - INT i; - INT nEvalArgs = 0; /* nunber of evaluated arguments */ - DWORD dwFlags = 0; - DWORD dwFiles = 0; - - HANDLE hFile; - WIN32_FIND_DATA f; - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Deletes one or more files.\n" - "\n" - "DEL [/N /P /T /Q /W /Z] file ...\n" - "DELETE [/N /P /T /Q /W /Z] file ...\n" - "ERASE [/N /P /T /Q /W /Z] file ...\n" - "\n" - " file Specifies the file(s) to delete.\n" - "\n" - " /N Nothing.\n" - " /P Prompts for confirmation before deleting each file.\n" - " (Not implemented yet!)\n" - " /T Display total number of deleted files and freed disk space.\n" - " /Q Quiet.\n" - " /W Wipe. Overwrite the file with zeros before deleting it.\n" - " /Z Zap (delete hidden, read-only and system files).\n")); - - return 0; - } - - arg = split (param, &args, FALSE); - - if (args > 0) - { - /* check for options anywhere in command line */ - for (i = 0; i < args; i++) - { - if (*arg[i] == _T('/')) - { - if (_tcslen (arg[i]) >= 2) - { - switch (_totupper (arg[i][1])) - { - case _T('N'): - dwFlags |= DEL_NOTHING; - break; - - case _T('P'): - dwFlags |= DEL_PROMPT; - break; - - case _T('Q'): - dwFlags |= DEL_QUIET; - break; - - case _T('S'): - dwFlags |= DEL_SUBDIR; - break; - - case _T('T'): - dwFlags |= DEL_TOTAL; - break; - - case _T('W'): - dwFlags |= DEL_WIPE; - break; - - case _T('Z'): - dwFlags |= DEL_ZAP; - break; - } - - } - - nEvalArgs++; - } - } - - /* there are only options on the command line --> error!!! */ - if (args == nEvalArgs) - { - error_req_param_missing (); - freep (arg); - return 1; - } - - /* keep quiet within batch files */ - if (bc != NULL) - dwFlags |= DEL_QUIET; - - /* check for filenames anywhere in command line */ - for (i = 0; i < args; i++) - { - if (!_tcscmp (arg[i], _T("*")) || - !_tcscmp (arg[i], _T("*.*"))) - { - INT res; - - res = FilePromptYN (_T("All files in directory will be deleted!\n" - "Are you sure (Y/N)?")); - if ((res == PROMPT_NO) || - (res == PROMPT_BREAK)) - break; - } - - if (*arg[i] != _T('/')) - { -#ifdef _DEBUG - ConErrPrintf (_T("File: %s\n"), arg[i]); -#endif - - if (_tcschr (arg[i], _T('*')) || _tcschr (arg[i], _T('?'))) - { - /* wildcards in filespec */ -#ifdef _DEBUG - ConErrPrintf (_T("Wildcards!\n\n")); -#endif - - GetFullPathName (arg[i], - MAX_PATH, - szFullPath, - &pFilePart); - -#ifdef _DEBUG - ConErrPrintf (_T("Full path: %s\n"), szFullPath); - ConErrPrintf (_T("File part: %s\n"), pFilePart); -#endif - - hFile = FindFirstFile (szFullPath, &f); - if (hFile == INVALID_HANDLE_VALUE) - { - error_file_not_found (); - freep (arg); - return 0; - } - - do - { - /* ignore "." and ".." */ - if (!_tcscmp (f.cFileName, _T(".")) || - !_tcscmp (f.cFileName, _T(".."))) - continue; - - _tcscpy (pFilePart, f.cFileName); - -#ifdef _DEBUG - ConErrPrintf (_T("Full filename: %s\n"), szFullPath); -#endif - - if (!(dwFlags & DEL_QUIET) && !(dwFlags & DEL_TOTAL)) - ConErrPrintf (_T("Deleting: %s\n"), szFullPath); - - /* delete the file */ - if (!(dwFlags & DEL_NOTHING)) - { - if (RemoveFile (szFullPath, dwFlags)) - { - dwFiles++; - } - else - { - if (dwFlags & DEL_ZAP) - { - if (SetFileAttributes (szFullPath, 0)) - { - if (RemoveFile (szFullPath, dwFlags)) - { - dwFiles++; - } - else - { - ErrorMessage (GetLastError(), _T("")); - } - } - else - { - ErrorMessage (GetLastError(), _T("")); - } - } - else - { - ErrorMessage (GetLastError(), _T("")); - } - } - } - } - while (FindNextFile (hFile, &f)); - FindClose (hFile); - } - else - { - /* no wildcards in filespec */ -#ifdef _DEBUG - ConErrPrintf (_T("No Wildcards!\n")); -#endif - GetFullPathName (arg[i], - MAX_PATH, - szFullPath, - &pFilePart); -#ifdef _DEBUG - ConErrPrintf (_T("Full path: %s\n"), szFullPath); -#endif - if (!(dwFlags & DEL_QUIET) && !(dwFlags & DEL_TOTAL)) - ConOutPrintf (_T("Deleting %s\n"), szFullPath); - - if (!(dwFlags & DEL_NOTHING)) - { - if (RemoveFile (szFullPath, dwFlags)) - { - dwFiles++; - } - else - { - if (dwFlags & DEL_ZAP) - { - if (SetFileAttributes (szFullPath, 0)) - { - if (RemoveFile (szFullPath, dwFlags)) - { - dwFiles++; - } - else - { - ErrorMessage (GetLastError(), _T("")); - } - } - else - { - ErrorMessage (GetLastError(), _T("")); - } - } - else - { - ErrorMessage (GetLastError(), _T("")); - } - } - } - } - } - } - } - else - { - /* only command given */ - error_req_param_missing (); - freep (arg); - return 1; - } - - freep (arg); - - if (!(dwFlags & DEL_QUIET)) - { - if (dwFiles == 0) - ConOutPrintf (_T(" 0 files deleted\n")); - else - ConOutPrintf (_T(" %lu file%s deleted\n"), - dwFiles, - (dwFiles == 1) ? "" : "s"); - } - - return 0; -} - -#endif diff --git a/rosapps/cmd/delay.c b/rosapps/cmd/delay.c deleted file mode 100644 index 1c953ab6a9c..00000000000 --- a/rosapps/cmd/delay.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * DELAY.C - internal command. - * - * clone from 4nt delay command - * - * 30 Aug 1999 - * started - Paolo Pantaleo - * - * - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_DELAY - -#include -#include -#include - -#include "cmd.h" - - -INT CommandDelay (LPTSTR cmd, LPTSTR param) -{ - DWORD val; - DWORD mul=1000; - - if (_tcsncmp (param, _T("/?"), 2) == 0) - { - ConOutPuts(_T( - "pause for n seconds or milliseconds" - "\n" - "DELAY [/m]n\n" - "\n" - " /m specifiy than n are milliseconds\n" - " otherwise n are seconds")); - return 0; - } - - if (*param==0) - { - error_req_param_missing (); - return 1; - } - - if (_tcsnicmp(param,"/m",2) == 0) - { - mul = 1; - param += 2; - } - - val = atoi(param); - Sleep(val*mul); - - return 0; -} - -#endif /* INCLUDE_CMD_DELAY */ diff --git a/rosapps/cmd/dir.c b/rosapps/cmd/dir.c deleted file mode 100644 index 74c12c2d4ba..00000000000 --- a/rosapps/cmd/dir.c +++ /dev/null @@ -1,1223 +0,0 @@ -/* $Id: dir.c,v 1.13 2002/08/01 10:29:18 ekohl Exp $ - * - * DIR.C - dir internal command. - * - * - * History: - * - * 01/29/97 (Tim Norman) - * started. - * - * 06/13/97 (Tim Norman) - * Fixed code. - * - * 07/12/97 (Tim Norman) - * Fixed bug that caused the root directory to be unlistable - * - * 07/12/97 (Marc Desrochers) - * Changed to use maxx, maxy instead of findxy() - * - * 06/08/98 (Rob Lake) - * Added compatibility for /w in dir - * - * 06/09/98 (Rob Lake) - * Compatibility for dir/s started - * Tested that program finds directories off root fine - * - * 06/10/98 (Rob Lake) - * do_recurse saves the cwd and also stores it in Root - * build_tree adds the cwd to the beginning of its' entries - * Program runs fine, added print_tree -- works fine.. as EXE, - * program won't work properly as COM. - * - * 06/11/98 (Rob Lake) - * Found problem that caused COM not to work - * - * 06/12/98 (Rob Lake) - * debugged... - * added free mem routine - * - * 06/13/98 (Rob Lake) - * debugged the free mem routine - * debugged whole thing some more - * Notes: - * ReadDir stores Root name and _Read_Dir does the hard work - * PrintDir prints Root and _Print_Dir does the hard work - * KillDir kills Root _after_ _Kill_Dir does the hard work - * Integrated program into DIR.C(this file) and made some same - * changes throughout - * - * 06/14/98 (Rob Lake) - * Cleaned up code a bit, added comments - * - * 06/16/98 (Rob Lake) - * Added error checking to my previously added routines - * - * 06/17/98 (Rob Lake) - * Rewrote recursive functions, again! Most other recursive - * functions are now obsolete -- ReadDir, PrintDir, _Print_Dir, - * KillDir and _Kill_Dir. do_recurse does what PrintDir did - * and _Read_Dir did what it did before along with what _Print_Dir - * did. Makes /s a lot faster! - * Reports 2 more files/dirs that MS-DOS actually reports - * when used in root directory(is this because dir defaults - * to look for read only files?) - * Added support for /b, /a and /l - * Made error message similar to DOS error messages - * Added help screen - * - * 06/20/98 (Rob Lake) - * Added check for /-(switch) to turn off previously defined - * switches. - * Added ability to check for DIRCMD in environment and - * process it - * - * 06/21/98 (Rob Lake) - * Fixed up /B - * Now can dir *.ext/X, no spaces! - * - * 06/29/98 (Rob Lake) - * error message now found in command.h - * - * 07/08/1998 (John P. Price) - * removed extra returns; closer to MSDOS - * fixed wide display so that an extra return is not displayed - * when there is five filenames in the last line. - * - * 07/12/98 (Rob Lake) - * Changed error messages - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * - * 04-Dec-1998 (Eric Kohl ) - * Converted source code to Win32, except recursive dir ("dir /s"). - * - * 10-Dec-1998 (Eric Kohl ) - * Fixed recursive dir ("dir /s"). - * - * 14-Dec-1998 (Eric Kohl ) - * Converted to Win32 directory functions and - * fixed some output bugs. There are still some more ;) - * - * 10-Jan-1999 (Eric Kohl ) - * Added "/N" and "/4" options, "/O" is a dummy. - * Added locale support. - * - * 20-Jan-1999 (Eric Kohl ) - * Redirection safe! - * - * 01-Mar-1999 (Eric Kohl ) - * Replaced all runtime io functions by their Win32 counterparts. - * - * 23-Feb-2001 (Carl Nettelblad ) - * dir /s now works in deeper trees - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_DIR -#include -#include -#include -#include -#include -#include - -#include "cmd.h" - - -typedef BOOL STDCALL -(*PGETFREEDISKSPACEEX)(LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER); - - -/* flag definitions */ -enum -{ - DIR_RECURSE = 0x0001, - DIR_PAGE = 0x0002, - DIR_WIDE = 0x0004, /* Rob Lake */ - DIR_BARE = 0x0008, /* Rob Lake */ - DIR_ALL = 0x0010, /* Rob Lake */ - DIR_LWR = 0x0020, /* Rob Lake */ - DIR_SORT = 0x0040, /* /O sort */ - DIR_NEW = 0x0080, /* /N new style */ - DIR_FOUR = 0x0100 /* /4 four digit year */ -}; - - -/* Globally save the # of dirs, files and bytes, - * probabaly later pass them to functions. Rob Lake */ -static ULONG recurse_dir_cnt; -static ULONG recurse_file_cnt; -static ULARGE_INTEGER recurse_bytes; - - -/* - * help - * - * displays help screen for dir - * Rob Lake - */ -static VOID Help (VOID) -{ - ConOutPuts(_T("Displays a list of files and subdirectories in a directory.\n" - "\n" - "DIR [drive:][path][filename] [/A] [/B] [/L] [/N] [/S] [/P] [/W] [/4]\n" - "\n" - " [drive:][path][filename]\n" - " Specifies drive, directory, and/or files to list.\n" - "\n" - " /A Displays files with HIDDEN SYSTEM attributes\n" - " default is ARCHIVE and READ ONLY\n" - " /B Uses bare format (no heading information or summary).\n" - " /L Uses lowercase.\n" - " /N New long list format where filenames are on the far right.\n" - " /S Displays files in specified directory and all subdirectories\n" - " /P Pauses after each screen full\n" - " /W Prints in wide format\n" - " /4 Display four digit years.\n" - "\n" - "Switches may be present in the DIRCMD environment variable. Use\n" - "of the - (hyphen) can turn off defined swtiches. Ex. /-W would\n" - "turn off printing in wide format.\n" - )); -} - - -/* - * DirReadParam - * - * read the parameters from the command line - */ -static BOOL -DirReadParam (LPTSTR line, LPTSTR *param, LPDWORD lpFlags) -{ - INT slash = 0; - - if (!line) - return TRUE; - - *param = NULL; - - /* scan the command line, processing switches */ - while (*line) - { - /* process switch */ - if (*line == _T('/') || slash) - { - if (!slash) - line++; - slash = 0; - if (*line == _T('-')) - { - line++; - if (_totupper (*line) == _T('S')) - *lpFlags &= ~DIR_RECURSE; - else if (_totupper (*line) == _T('P')) - *lpFlags &= ~DIR_PAGE; - else if (_totupper (*line) == _T('W')) - *lpFlags &= ~DIR_WIDE; - else if (_totupper (*line) == _T('B')) - *lpFlags &= ~DIR_BARE; - else if (_totupper (*line) == _T('A')) - *lpFlags &= ~DIR_ALL; - else if (_totupper (*line) == _T('L')) - *lpFlags &= ~DIR_LWR; - else if (_totupper (*line) == _T('N')) - *lpFlags &= ~DIR_NEW; - else if (_totupper (*line) == _T('O')) - *lpFlags &= ~DIR_SORT; - else if (_totupper (*line) == _T('4')) - *lpFlags &= ~DIR_FOUR; - else - { - error_invalid_switch ((TCHAR)_totupper (*line)); - return FALSE; - } - line++; - continue; - } - else - { - if (_totupper (*line) == _T('S')) - *lpFlags |= DIR_RECURSE; - else if (_totupper (*line) == _T('P')) - *lpFlags |= DIR_PAGE; - else if (_totupper (*line) == _T('W')) - *lpFlags |= DIR_WIDE; - else if (_totupper (*line) == _T('B')) - *lpFlags |= DIR_BARE; - else if (_totupper (*line) == _T('A')) - *lpFlags |= DIR_ALL; - else if (_totupper (*line) == _T('L')) - *lpFlags |= DIR_LWR; - else if (_totupper (*line) == _T('N')) - *lpFlags |= DIR_NEW; - else if (_totupper (*line) == _T('O')) - *lpFlags |= DIR_SORT; - else if (_totupper (*line) == _T('4')) - *lpFlags |= DIR_FOUR; - else if (*line == _T('?')) - { - Help(); - return FALSE; - } - else - { - error_invalid_switch ((TCHAR)_totupper (*line)); - return FALSE; - } - line++; - continue; - } - } - - /* process parameter */ - if (!_istspace (*line)) - { - if (*param) - { - error_too_many_parameters (*param); - return FALSE; - } - - *param = line; - - /* skip to end of line or next whitespace or next / */ - while (*line && !_istspace (*line) && *line != _T('/')) - line++; - - /* if end of line, return */ - if (!*line) - return TRUE; - - /* if parameter, remember to process it later */ - if (*line == _T('/')) - slash = 1; - - *line++ = 0; - continue; - } - - line++; - } - - if (slash) - { - error_invalid_switch ((TCHAR)_totupper (*line)); - return FALSE; - } - - return TRUE; -} - - -/* - * ExtendFilespec - * - * extend the filespec, possibly adding wildcards - */ -static VOID -ExtendFilespec (LPTSTR file) -{ - INT len = 0; - - if (!file) - return; - - /* if no file spec, change to "*.*" */ - if (*file == _T('\0')) - { - _tcscpy (file, _T("*.*")); - return; - } - - /* if starts with . add * in front */ - if (*file == _T('.')) - { - memmove (&file[1], &file[0], (_tcslen (file) + 1) * sizeof(TCHAR)); - file[0] = _T('*'); - } - - /* if no . add .* */ - if (!_tcschr (file, _T('.'))) - { - _tcscat (file, _T(".*")); - return; - } - - /* if last character is '.' add '*' */ - len = _tcslen (file); - if (file[len - 1] == _T('.')) - { - _tcscat (file, _T("*")); - return; - } -} - - -/* - * dir_parse_pathspec - * - * split the pathspec into drive, directory, and filespec - */ -static INT -DirParsePathspec (LPTSTR szPathspec, LPTSTR szPath, LPTSTR szFilespec) -{ - TCHAR szOrigPath[MAX_PATH]; - LPTSTR start; - LPTSTR tmp; - INT i; - BOOL bWildcards = FALSE; - - GetCurrentDirectory (MAX_PATH, szOrigPath); - - /* get the drive and change to it */ - if (szPathspec[1] == _T(':')) - { - TCHAR szRootPath[] = _T("A:"); - - szRootPath[0] = szPathspec[0]; - start = szPathspec + 2; - SetCurrentDirectory (szRootPath); - } - else - { - start = szPathspec; - } - - - /* check for wildcards */ - for (i = 0; szPathspec[i]; i++) - { - if (szPathspec[i] == _T('*') || szPathspec[i] == _T('?')) - bWildcards = TRUE; - } - - /* check if this spec is a directory */ - if (!bWildcards) - { - if (SetCurrentDirectory (szPathspec)) - { - _tcscpy (szFilespec, _T("*.*")); - - if (!GetCurrentDirectory (MAX_PATH, szPath)) - { - szFilespec[0] = _T('\0'); - SetCurrentDirectory (szOrigPath); - error_out_of_memory(); - return 1; - } - - SetCurrentDirectory (szOrigPath); - return 0; - } - } - - /* find the file spec */ - tmp = _tcsrchr (start, _T('\\')); - - /* if no path is specified */ - if (!tmp) - { - _tcscpy (szFilespec, start); - ExtendFilespec (szFilespec); - if (!GetCurrentDirectory (MAX_PATH, szPath)) - { - szFilespec[0] = _T('\0'); - SetCurrentDirectory (szOrigPath); - error_out_of_memory(); - return 1; - } - - SetCurrentDirectory (szOrigPath); - return 0; - } - - /* get the filename */ - _tcscpy (szFilespec, tmp+1); - ExtendFilespec (szFilespec); - - *tmp = _T('\0'); - - /* change to this directory and get its full name */ - if (!SetCurrentDirectory (start)) - { - *tmp = _T('\\'); - szFilespec[0] = _T('\0'); - SetCurrentDirectory (szOrigPath); - error_path_not_found (); - return 1; - } - - if (!GetCurrentDirectory (MAX_PATH, szPath)) - { - *tmp = _T('\\'); - szFilespec[0] = _T('\0'); - SetCurrentDirectory (szOrigPath); - error_out_of_memory (); - return 1; - } - - *tmp = _T('\\'); - - SetCurrentDirectory (szOrigPath); - - return 0; -} - - -/* - * incline - * - * increment our line if paginating, display message at end of screen - */ -static BOOL -IncLine (LPINT pLine, DWORD dwFlags) -{ - if (!(dwFlags & DIR_PAGE)) - return FALSE; - - (*pLine)++; - - if (*pLine >= (int)maxy - 2) - { - *pLine = 0; - return (PagePrompt () == PROMPT_BREAK); - } - - return FALSE; -} - - -/* - * PrintDirectoryHeader - * - * print the header for the dir command - */ -static BOOL -PrintDirectoryHeader (LPTSTR szPath, LPINT pLine, DWORD dwFlags) -{ - TCHAR szRootName[MAX_PATH]; - TCHAR szVolName[80]; - DWORD dwSerialNr; - LPTSTR p; - - if (dwFlags & DIR_BARE) - return(TRUE); - - /* build usable root path */ - if (szPath[1] == _T(':') && szPath[2] == _T('\\')) - { - /* normal path */ - szRootName[0] = szPath[0]; - szRootName[1] = _T(':'); - szRootName[2] = _T('\\'); - szRootName[3] = 0; - } - else if (szPath[0] == _T('\\') && szPath[1] == _T('\\')) - { - /* UNC path */ - p = _tcschr(&szPath[2], _T('\\')); - if (p == NULL) - { - error_invalid_drive(); - return(FALSE); - } - p = _tcschr(p+1, _T('\\')); - if (p == NULL) - { - _tcscpy(szRootName, szPath); - _tcscat(szRootName, _T("\\")); - } - else - { - *p = 0; - _tcscpy(szRootName, szPath); - _tcscat(szRootName, _T("\\")); - *p = _T('\\'); - } - } - else - { - error_invalid_drive(); - return(FALSE); - } - - /* get the media ID of the drive */ - if (!GetVolumeInformation(szRootName, szVolName, 80, &dwSerialNr, - NULL, NULL, NULL, 0)) - { - error_invalid_drive(); - return(FALSE); - } - - /* print drive info */ - ConOutPrintf(_T(" Volume in drive %c"), szRootName[0]); - - if (szVolName[0] != _T('\0')) - ConOutPrintf(_T(" is %s\n"), szVolName); - else - ConOutPrintf(_T(" has no label\n")); - - if (IncLine(pLine, dwFlags)) - return(FALSE); - - /* print the volume serial number if the return was successful */ - ConOutPrintf(_T(" Volume Serial Number is %04X-%04X\n"), - HIWORD(dwSerialNr), - LOWORD(dwSerialNr)); - if (IncLine(pLine, dwFlags)) - return(FALSE); - - return(TRUE); -} - - -/* - * convert - * - * insert commas into a number - */ -static INT -ConvertULong (ULONG num, LPTSTR des, INT len) -{ - TCHAR temp[32]; - INT c = 0; - INT n = 0; - - if (num == 0) - { - des[0] = _T('0'); - des[1] = _T('\0'); - n = 1; - } - else - { - temp[31] = 0; - while (num > 0) - { - if (((c + 1) % (nNumberGroups + 1)) == 0) - temp[30 - c++] = cThousandSeparator; - temp[30 - c++] = (TCHAR)(num % 10) + _T('0'); - num /= 10; - } - - for (n = 0; n <= c; n++) - des[n] = temp[31 - c + n]; - } - - return n; -} - - -static INT -ConvertULargeInteger (ULARGE_INTEGER num, LPTSTR des, INT len) -{ - TCHAR temp[32]; - INT c = 0; - INT n = 0; - - if (num.QuadPart == 0) - { - des[0] = _T('0'); - des[1] = _T('\0'); - n = 1; - } - else - { - temp[31] = 0; - while (num.QuadPart > 0) - { - if (((c + 1) % (nNumberGroups + 1)) == 0) - temp[30 - c++] = cThousandSeparator; - temp[30 - c++] = (TCHAR)(num.QuadPart % 10) + _T('0'); - num.QuadPart /= 10; - } - - for (n = 0; n <= c; n++) - des[n] = temp[31 - c + n]; - } - - return n; -} - - -static VOID -PrintFileDateTime (LPSYSTEMTIME dt, DWORD dwFlags) -{ - WORD wYear = (dwFlags & DIR_FOUR) ? dt->wYear : dt->wYear%100; - - switch (nDateFormat) - { - case 0: /* mmddyy */ - default: - ConOutPrintf (_T("%.2d%c%.2d%c%d"), - dt->wMonth, cDateSeparator, dt->wDay, cDateSeparator, wYear); - break; - - case 1: /* ddmmyy */ - ConOutPrintf (_T("%.2d%c%.2d%c%d"), - dt->wDay, cDateSeparator, dt->wMonth, cDateSeparator, wYear); - break; - - case 2: /* yymmdd */ - ConOutPrintf (_T("%d%c%.2d%c%.2d"), - wYear, cDateSeparator, dt->wMonth, cDateSeparator, dt->wDay); - break; - } - - switch (nTimeFormat) - { - case 0: /* 12 hour format */ - default: - ConOutPrintf (_T(" %2d%c%.2u%c"), - (dt->wHour == 0 ? 12 : (dt->wHour <= 12 ? dt->wHour : dt->wHour - 12)), - cTimeSeparator, - dt->wMinute, (dt->wHour <= 11 ? 'a' : 'p')); - break; - - case 1: /* 24 hour format */ - ConOutPrintf (_T(" %2d%c%.2u"), - dt->wHour, cTimeSeparator, dt->wMinute); - break; - } -} - - -static VOID -GetUserDiskFreeSpace(LPCTSTR lpRoot, - PULARGE_INTEGER lpFreeSpace) -{ - PGETFREEDISKSPACEEX pGetFreeDiskSpaceEx; - HINSTANCE hInstance; - DWORD dwSecPerCl; - DWORD dwBytPerSec; - DWORD dwFreeCl; - DWORD dwTotCl; - - lpFreeSpace->QuadPart = 0; - - hInstance = LoadLibrary(_T("KERNEL32")); - if (hInstance != NULL) - { -#ifndef UNICODE - pGetFreeDiskSpaceEx = GetProcAddress(hInstance, - "GetDiskFreeSpaceExA"); -#else - pGetFreeDiskSpaceEx = GetProcAddress(hInstance, - "GetDiskFreeSpaceExW"); -#endif - if (pGetFreeDiskSpaceEx != NULL) - { - if (pGetFreeDiskSpaceEx(lpRoot, lpFreeSpace, NULL, NULL) == TRUE) - return; - } - FreeLibrary(hInstance); - } - - GetDiskFreeSpace(lpRoot, - &dwSecPerCl, - &dwBytPerSec, - &dwFreeCl, - &dwTotCl); - - lpFreeSpace->QuadPart = dwSecPerCl * dwBytPerSec * dwFreeCl; -} - - -/* - * print_summary: prints dir summary - * Added by Rob Lake 06/17/98 to compact code - * Just copied Tim's Code and patched it a bit - * - */ -static INT -PrintSummary(LPTSTR szPath, - ULONG ulFiles, - ULONG ulDirs, - ULARGE_INTEGER bytes, - LPINT pLine, - DWORD dwFlags) -{ - TCHAR buffer[64]; - ULARGE_INTEGER uliFree; - TCHAR szRoot[] = _T("A:\\"); - - if (dwFlags & DIR_BARE) - return(0); - - /* Print number of files and bytes */ - ConvertULong (ulFiles, buffer, sizeof(buffer)); - ConOutPrintf (_T(" %6s File%c"), - buffer, ulFiles == 1 ? _T(' ') : _T('s')); - - ConvertULargeInteger (bytes, buffer, sizeof(buffer)); - ConOutPrintf (_T(" %15s byte%c\n"), - buffer, bytes.QuadPart == 1 ? _T(' ') : _T('s')); - ConOutPrintf (_T(" %I64u byte%c\n"), - bytes.QuadPart, bytes.QuadPart == 1 ? _T(' ') : _T('s')); - - if (IncLine (pLine, dwFlags)) - return 1; - - /* Print number of dirs and bytes free */ - ConvertULong (ulDirs, buffer, sizeof(buffer)); - ConOutPrintf (_T(" %6s Dir%c"), - buffer, ulDirs == 1 ? _T(' ') : _T('s')); - - if (!(dwFlags & DIR_RECURSE)) - { - szRoot[0] = szPath[0]; - GetUserDiskFreeSpace(szRoot, &uliFree); - ConvertULargeInteger (uliFree, buffer, sizeof(buffer)); - ConOutPrintf (_T(" %15s bytes free\n"), buffer); - } - - if (IncLine (pLine, dwFlags)) - return 1; - - return 0; -} - - -/* - * dir_list - * - * list the files in the directory - */ -static INT -DirList (LPTSTR szPath, LPTSTR szFilespec, LPINT pLine, DWORD dwFlags) -{ - TCHAR szFullPath[MAX_PATH]; - WIN32_FIND_DATA file; - ULARGE_INTEGER bytecount; - FILETIME ft; - SYSTEMTIME dt; - HANDLE hFile; - TCHAR buffer[32]; - ULONG filecount = 0; - ULONG dircount = 0; - INT count; - - bytecount.QuadPart = 0; - - _tcscpy (szFullPath, szPath); - if (szFullPath[_tcslen(szFullPath) - 1] != _T('\\')) - _tcscat (szFullPath, _T("\\")); - _tcscat (szFullPath, szFilespec); - - hFile = FindFirstFile (szFullPath, &file); - if (hFile == INVALID_HANDLE_VALUE) - { - /* Don't want to print anything if scanning recursively - * for a file. RL - */ - if ((dwFlags & DIR_RECURSE) == 0) - { - FindClose (hFile); - error_file_not_found (); - if (IncLine (pLine, dwFlags)) - return 0; - return 1; - } - FindClose (hFile); - return 0; - } - - /* moved down here because if we are recursively searching and - * don't find any files, we don't want just to print - * Directory of C:\SOMEDIR - * with nothing else - * Rob Lake 06/13/98 - */ - if ((dwFlags & DIR_BARE) == 0) - { - ConOutPrintf (_T(" Directory of %s\n"), szPath); - if (IncLine (pLine, dwFlags)) - return 1; - ConOutPrintf (_T("\n")); - if (IncLine (pLine, dwFlags)) - return 1; - } - - /* For counting columns of output */ - count = 0; - - do - { - /* next file, if user doesn't want all files */ - if (!(dwFlags & DIR_ALL) && - ((file.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) || - (file.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM))) - continue; - - if (dwFlags & DIR_LWR) - { - _tcslwr (file.cAlternateFileName); - } - - if (dwFlags & DIR_WIDE && (dwFlags & DIR_BARE) == 0) - { - ULARGE_INTEGER uliSize; - - if (file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - { - if (file.cAlternateFileName[0] == _T('\0')) - _stprintf (buffer, _T("[%s]"), file.cFileName); - else - _stprintf (buffer, _T("[%s]"), file.cAlternateFileName); - dircount++; - } - else - { - if (file.cAlternateFileName[0] == _T('\0')) - _stprintf (buffer, _T("%s"), file.cFileName); - else - _stprintf (buffer, _T("%s"), file.cAlternateFileName); - filecount++; - } - - ConOutPrintf (_T("%-15s"), buffer); - count++; - if (count == 5) - { - /* output 5 columns */ - ConOutPrintf (_T("\n")); - if (IncLine (pLine, dwFlags)) - return 1; - count = 0; - } - - uliSize.LowPart = file.nFileSizeLow; - uliSize.HighPart = file.nFileSizeHigh; - bytecount.QuadPart += uliSize.QuadPart; - } - else if (dwFlags & DIR_BARE) - { - ULARGE_INTEGER uliSize; - - if (_tcscmp (file.cFileName, _T(".")) == 0 || - _tcscmp (file.cFileName, _T("..")) == 0) - continue; - - if (dwFlags & DIR_RECURSE) - { - TCHAR dir[MAX_PATH]; - - _tcscpy (dir, szPath); - _tcscat (dir, _T("\\")); - if (dwFlags & DIR_LWR) - _tcslwr (dir); - ConOutPrintf (dir); - } - - ConOutPrintf (_T("%-13s\n"), file.cFileName); - if (file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - dircount++; - else - filecount++; - if (IncLine (pLine, dwFlags)) - return 1; - - uliSize.LowPart = file.nFileSizeLow; - uliSize.HighPart = file.nFileSizeHigh; - bytecount.QuadPart += uliSize.QuadPart; - } - else - { - if (dwFlags & DIR_NEW) - { - /* print file date and time */ - if (FileTimeToLocalFileTime (&file.ftLastWriteTime, &ft)) - { - FileTimeToSystemTime (&ft, &dt); - PrintFileDateTime (&dt, dwFlags); - } - - /* print file size */ - if (file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - { - ConOutPrintf (_T(" ")); - dircount++; - } - else - { - ULARGE_INTEGER uliSize; - - uliSize.LowPart = file.nFileSizeLow; - uliSize.HighPart = file.nFileSizeHigh; - - ConvertULargeInteger (uliSize, buffer, sizeof(buffer)); - ConOutPrintf (_T(" %20s"), buffer); - - bytecount.QuadPart += uliSize.QuadPart; - filecount++; - } - - /* print long filename */ - ConOutPrintf (_T(" %s\n"), file.cFileName); - } - else - { - if (file.cFileName[0] == _T('.')) - ConOutPrintf (_T("%-13s "), file.cFileName); - else if (file.cAlternateFileName[0] == _T('\0')) - { - TCHAR szShortName[13]; - LPTSTR ext; - - _tcsncpy (szShortName, file.cFileName, 13); - ext = _tcschr (szShortName, _T('.')); - if (!ext) - ext = _T(""); - else - *ext++ = _T('\0'); - ConOutPrintf (_T("%-8s %-3s "), szShortName, ext); - } - else - { - LPTSTR ext; - - ext = _tcschr (file.cAlternateFileName, _T('.')); - if (!ext) - ext = _T(""); - else - *ext++ = _T('\0'); - ConOutPrintf (_T("%-8s %-3s "), file.cAlternateFileName, ext); - } - - /* print file size */ - if (file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - { - ConOutPrintf ("%-14s", ""); - dircount++; - } - else - { - ULARGE_INTEGER uliSize; - - uliSize.LowPart = file.nFileSizeLow; - uliSize.HighPart = file.nFileSizeHigh; - ConvertULargeInteger (uliSize, buffer, sizeof(buffer)); - ConOutPrintf (_T(" %10s "), buffer); - bytecount.QuadPart += uliSize.QuadPart; - filecount++; - } - - /* print file date and time */ - if (FileTimeToLocalFileTime (&file.ftLastWriteTime, &ft)) - { - FileTimeToSystemTime (&ft, &dt); - PrintFileDateTime (&dt, dwFlags); - } - - /* print long filename */ - ConOutPrintf (" %s\n", file.cFileName); - } - - if (IncLine (pLine, dwFlags)) - return 1; - } - } - while (FindNextFile (hFile, &file)); - FindClose (hFile); - - /* Rob Lake, need to make clean output */ - /* JPP 07/08/1998 added check for count != 0 */ - if ((dwFlags & DIR_WIDE) && (count != 0)) - { - ConOutPrintf (_T("\n")); - if (IncLine (pLine, dwFlags)) - return 1; - } - - if (filecount || dircount) - { - recurse_dir_cnt += dircount; - recurse_file_cnt += filecount; - recurse_bytes.QuadPart += bytecount.QuadPart; - - /* print_summary */ - if (PrintSummary (szPath, filecount, dircount, bytecount, pLine, dwFlags)) - return 1; - } - else - { - error_file_not_found (); - return 1; - } - - return 0; -} - - -/* - * _Read_Dir: Actual function that does recursive listing - */ -static INT -DirRead (LPTSTR szPath, LPTSTR szFilespec, LPINT pLine, DWORD dwFlags) -{ - TCHAR szFullPath[MAX_PATH]; - WIN32_FIND_DATA file; - HANDLE hFile; - - _tcscpy (szFullPath, szPath); - if (szFullPath[_tcslen (szFullPath) - 1] != _T('\\')) - _tcscat (szFullPath, _T("\\")); - _tcscat (szFullPath, szFilespec); - - hFile = FindFirstFile (szFullPath, &file); - if (hFile == INVALID_HANDLE_VALUE) - return 1; - - do - { - /* don't list "." and ".." */ - if (_tcscmp (file.cFileName, _T(".")) == 0 || - _tcscmp (file.cFileName, _T("..")) == 0) - continue; - - if (file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - { - _tcscpy (szFullPath, szPath); - if (szFullPath[_tcslen (szFullPath) - 1] != _T('\\')) - _tcscat (szFullPath, _T("\\")); - _tcscat (szFullPath, file.cFileName); - - if (DirList (szFullPath, szFilespec, pLine, dwFlags)) - { - FindClose (hFile); - return 1; - } - - if ((dwFlags & DIR_BARE) == 0) - { - ConOutPrintf ("\n"); - if (IncLine (pLine, dwFlags) != 0) - return 1; - ConOutPrintf ("\n"); - if (IncLine (pLine, dwFlags) != 0) - return 1; - } - - if (DirRead (szFullPath, szFilespec, pLine, dwFlags) == 1) - { - FindClose (hFile); - return 1; - } - } - } - while (FindNextFile (hFile, &file)); - - if (!FindClose (hFile)) - return 1; - - return 0; -} - - -/* - * do_recurse: Sets up for recursive directory listing - */ -static INT -DirRecurse (LPTSTR szPath, LPTSTR szSpec, LPINT pLine, DWORD dwFlags) -{ - if (!PrintDirectoryHeader (szPath, pLine, dwFlags)) - return 1; - - if (DirList (szPath, szSpec, pLine, dwFlags)) - return 1; - - if ((dwFlags & DIR_BARE) == 0) - { - ConOutPrintf (_T("\n")); - if (IncLine (pLine, dwFlags)) - return 1; - } - - if (DirRead (szPath, szSpec, pLine, dwFlags)) - return 1; - - if ((dwFlags & DIR_BARE) == 0) - ConOutPrintf (_T("Total files listed:\n")); - - dwFlags &= ~DIR_RECURSE; - - if (PrintSummary (szPath, recurse_file_cnt, - recurse_dir_cnt, recurse_bytes, pLine, dwFlags)) - return 1; - - if ((dwFlags & DIR_BARE) == 0) - { - ConOutPrintf (_T("\n")); - if (IncLine (pLine, dwFlags)) - return 1; - } - - return 0; -} - - -/* - * dir - * - * internal dir command - */ -INT CommandDir (LPTSTR first, LPTSTR rest) -{ - DWORD dwFlags = DIR_NEW | DIR_FOUR; - TCHAR dircmd[256]; - TCHAR szPath[MAX_PATH]; - TCHAR szFilespec[MAX_PATH]; - LPTSTR param; - INT nLine = 0; - - - recurse_dir_cnt = 0L; - recurse_file_cnt = 0L; - recurse_bytes.QuadPart = 0; - - /* read the parameters from the DIRCMD environment variable */ - if (GetEnvironmentVariable (_T("DIRCMD"), dircmd, 256)) - { - if (!DirReadParam (dircmd, ¶m, &dwFlags)) - return 1; - } - - /* read the parameters */ - if (!DirReadParam (rest, ¶m, &dwFlags)) - return 1; - - /* default to current directory */ - if (!param) - param = "."; - - /* parse the directory info */ - if (DirParsePathspec (param, szPath, szFilespec)) - return 1; - - if (dwFlags & DIR_RECURSE) - { - if (IncLine (&nLine, dwFlags)) - return 0; - if (DirRecurse (szPath, szFilespec, &nLine, dwFlags)) - return 1; - return 0; - } - - /* print the header */ - if (!PrintDirectoryHeader (szPath, &nLine, dwFlags)) - return 1; - - if (DirList (szPath, szFilespec, &nLine, dwFlags)) - return 1; - - return 0; -} - -#endif - -/* EOF */ diff --git a/rosapps/cmd/dirstack.c b/rosapps/cmd/dirstack.c deleted file mode 100644 index a910d32660e..00000000000 --- a/rosapps/cmd/dirstack.c +++ /dev/null @@ -1,237 +0,0 @@ -/* - * DIRSTACK.C - pushd / pop (directory stack) internal commands. - * - * - * History: - * - * 14-Dec-1998 (Eric Kohl ) - * Implemented PUSHD and POPD command. - * - * 20-Jan-1999 (Eric Kohl ) - * Unicode and redirection safe! - * - * 20-Jan-1999 (Eric Kohl ) - * Added DIRS command. - */ - -#include "config.h" - -#ifdef FEATURE_DIRECTORY_STACK - -#include -#include -#include -#include - -#include "cmd.h" - - -typedef struct tagDIRENTRY -{ - struct tagDIRENTRY *prev; - struct tagDIRENTRY *next; - LPTSTR pszPath; -} DIRENTRY, *LPDIRENTRY; - - -static INT nStackDepth; -static LPDIRENTRY lpStackTop; -static LPDIRENTRY lpStackBottom; - - -static INT -PushDirectory (LPTSTR pszPath) -{ - LPDIRENTRY lpDir; - - lpDir = (LPDIRENTRY)malloc (sizeof (DIRENTRY)); - if (!lpDir) - { - error_out_of_memory (); - return -1; - } - - lpDir->prev = NULL; - if (lpStackTop == NULL) - { - lpDir->next = NULL; - lpStackBottom = lpDir; - } - else - { - lpDir->next = lpStackTop; - lpStackTop->prev = lpDir; - } - lpStackTop = lpDir; - - lpDir->pszPath = (LPTSTR)malloc ((_tcslen(pszPath)+1)*sizeof(TCHAR)); - if (!lpDir->pszPath) - { - free (lpDir); - error_out_of_memory (); - return -1; - } - - _tcscpy (lpDir->pszPath, pszPath); - - nStackDepth++; - - return 0; -} - - -static VOID -PopDirectory (VOID) -{ - LPDIRENTRY lpDir; - - if (nStackDepth == 0) - return; - - lpDir = lpStackTop; - lpStackTop = lpDir->next; - if (lpStackTop != NULL) - lpStackTop->prev = NULL; - else - lpStackBottom = NULL; - - free (lpDir->pszPath); - free (lpDir); - - nStackDepth--; -} - - -static VOID -GetDirectoryStackTop (LPTSTR pszPath) -{ - if (lpStackTop) - _tcsncpy (pszPath, lpStackTop->pszPath, MAX_PATH); - else - *pszPath = _T('\0'); -} - - -/* - * initialize directory stack - */ -VOID InitDirectoryStack (VOID) -{ - nStackDepth = 0; - lpStackTop = NULL; - lpStackBottom = NULL; -} - - -/* - * destroy directory stack - */ -VOID DestroyDirectoryStack (VOID) -{ - while (nStackDepth) - PopDirectory (); -} - - -INT GetDirectoryStackDepth (VOID) -{ - return nStackDepth; -} - - -/* - * pushd command - */ -INT CommandPushd (LPTSTR first, LPTSTR rest) -{ - TCHAR curPath[MAX_PATH]; - TCHAR newPath[MAX_PATH]; - BOOL bChangePath = FALSE; - - if (!_tcsncmp (rest, _T("/?"), 2)) - { - ConOutPuts (_T("Stores the current directory for use by the POPD command, then\n" - "changes to the specified directory.\n\n" - "PUSHD [path | ..]\n\n" - " path Specifies the directory to make the current directory")); - return 0; - } - - if (rest[0] != _T('\0')) - { - GetFullPathName (rest, MAX_PATH, newPath, NULL); - bChangePath = IsValidPathName (newPath); - } - - GetCurrentDirectory (MAX_PATH, curPath); - if (PushDirectory (curPath)) - return 0; - - if (bChangePath) - SetCurrentDirectory (newPath); - - return 0; -} - - -/* - * popd command - */ -INT CommandPopd (LPTSTR first, LPTSTR rest) -{ - TCHAR szPath[MAX_PATH]; - - if (!_tcsncmp(rest, _T("/?"), 2)) - { - ConOutPuts (_T("Changes to the directory stored by the PUSHD command.\n\n" - "POPD")); - return 0; - } - - if (GetDirectoryStackDepth () == 0) - return 0; - - GetDirectoryStackTop (szPath); - PopDirectory (); - - SetCurrentDirectory (szPath); - - return 0; -} - - -/* - * dirs command - */ -INT CommandDirs (LPTSTR first, LPTSTR rest) -{ - LPDIRENTRY lpDir; - - if (!_tcsncmp(rest, _T("/?"), 2)) - { - ConOutPuts (_T("Prints the contents of the directory stack.\n" - "\n" - "DIRS")); - return 0; - } - - - lpDir = lpStackBottom; - - if (lpDir == NULL) - { - ConOutPuts (_T("Directory stack empty")); - return 0; - } - - while (lpDir != NULL) - { - ConOutPuts (lpDir->pszPath); - - lpDir = lpDir->prev; - } - - return 0; -} - -#endif /* FEATURE_DIRECTORY_STACK */ diff --git a/rosapps/cmd/echo.c b/rosapps/cmd/echo.c deleted file mode 100644 index 7e9b567f095..00000000000 --- a/rosapps/cmd/echo.c +++ /dev/null @@ -1,148 +0,0 @@ -/* $Id: echo.c,v 1.4 2000/07/19 06:58:13 ekohl Exp $ - * - * ECHO.C - internal echo commands. - * - * - * History: - * - * 16 Jul 1998 (Hans B Pufal) - * Started. - * - * 16 Jul 1998 (John P Price) - * Separated commands into individual files. - * - * 27-Jul-1998 (John P Price ) - * Added config.h include - * - * 08-Dec-1998 (Eric Kohl ) - * Added help text ("/?"). - * - * 19-Jan-1999 (Eric Kohl ) - * Unicode and redirection ready! - * - * 13-Jul-2000 (Eric Kohl ) - * Implemented 'echo.' and 'echoerr.'. - */ - -#include "config.h" - -#include -#include -#include - -#include "cmd.h" -#include "batch.h" - - -INT CommandEcho (LPTSTR cmd, LPTSTR param) -{ -#ifdef _DEBUG - DebugPrintf ("CommandEcho '%s' : '%s'\n", cmd, param); -#endif - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts ("Displays a message or switches command echoing on or off.\n" - "\n" - " ECHO [ON | OFF]\n" - " ECHO [message]\n" - " ECHO. prints an empty line\n" - "\n" - "Type ECHO without a parameter to display the current ECHO setting."); - return 0; - } - - if (_tcsicmp (cmd, _T("echo.")) == 0) - { - if (param[0] == 0) - ConOutChar (_T('\n')); - else - ConOutPuts (param); - } - else - { - if (_tcsicmp (param, D_OFF) == 0) - bEcho = FALSE; - else if (_tcsicmp (param, D_ON) == 0) - bEcho = TRUE; - else if (*param) - ConOutPuts (param); - else - ConOutPrintf (_T("ECHO is %s\n"), bEcho ? D_ON : D_OFF); - } - - return 0; -} - -INT CommandEchos (LPTSTR cmd, LPTSTR param) -{ -#ifdef _DEBUG - DebugPrintf ("CommandEchos '%s' : '%s'\n", cmd, param); -#endif - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts ("Display a messages without trailing carridge return and line feed.\n" - "\n" - " ECHOS message"); - return 0; - } - - if (*param) - ConOutPrintf ("%s", param); - - return 0; -} - - -INT CommandEchoerr (LPTSTR cmd, LPTSTR param) -{ -#ifdef _DEBUG - DebugPrintf ("CommandEchoerr '%s' : '%s'\n", cmd, param); -#endif - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts ("Displays a message to the standard error.\n" - "\n" - " ECHOERR message\n" - " ECHOERR. prints an empty line"); - return 0; - } - - if (_tcsicmp (cmd, _T("echoerr.")) == 0) - { - if (param[0] == 0) - ConErrChar (_T('\n')); - else - ConErrPuts (param); - } - else if (*param) - { - ConErrPuts (param); - } - - return 0; -} - -INT CommandEchoserr (LPTSTR cmd, LPTSTR param) -{ -#ifdef _DEBUG - DebugPrintf ("CommandEchoserr '%s' : '%s'\n", cmd, param); -#endif - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts ("Prints a messages to standard error output without trailing carridge return and line feed.\n" - "\n" - " ECHOSERR message"); - return 0; - } - - if (*param) - ConOutPrintf (_T("%s"), param); - - return 0; -} - -/* EOF */ diff --git a/rosapps/cmd/error.c b/rosapps/cmd/error.c deleted file mode 100644 index d0bf15b1e8f..00000000000 --- a/rosapps/cmd/error.c +++ /dev/null @@ -1,175 +0,0 @@ -/* - * ERROR.C - error reporting functions. - * - * - * History: - * - * 07/12/98 (Rob Lake) - * started - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 24-Jan-1999 (Eric Kohl ) - * Redirection safe! - * - * 02-Feb-1999 (Eric Kohl ) - * Use FormatMessage() for error reports. - */ - -#include "config.h" - -#include -#include -#include -#include - -#include "cmd.h" - - -#define INVALID_SWITCH _T("Invalid switch - /%c\n") -#define TOO_MANY_PARAMETERS _T("Too many parameters - %s\n") -#define PATH_NOT_FOUND _T("Path not found\n") -#define FILE_NOT_FOUND _T("File not found\n") -#define REQ_PARAM_MISSING _T("Required parameter missing\n") -#define INVALID_DRIVE _T("Invalid drive specification\n") -#define INVALID_PARAM_FORMAT _T("Invalid parameter format - %s\n") -#define BADCOMMAND _T("Bad command or filename\n") -#define OUT_OF_MEMORY _T("Out of memory error.\n") -#define CANNOTPIPE _T("Error! Cannot pipe! Cannot open temporary file!\n") - -#define D_PAUSEMSG _T("Press any key to continue . . .") - - - -VOID ErrorMessage (DWORD dwErrorCode, LPTSTR szFormat, ...) -{ - TCHAR szMessage[1024]; - LPTSTR szError; - va_list arg_ptr; - - if (dwErrorCode == ERROR_SUCCESS) - return; - - va_start (arg_ptr, szFormat); - _vstprintf (szMessage, szFormat, arg_ptr); - va_end (arg_ptr); - -#ifndef __REACTOS__ - - if (FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER, - NULL, dwErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR)&szError, 0, NULL)) - { - ConErrPrintf (_T("%s %s\n"), szError, szMessage); - LocalFree (szError); - return; - } - else - { - ConErrPrintf (_T("Unknown error! Error code: 0x%lx\n"), dwErrorCode); - return; - } - -#else - - switch (dwErrorCode) - { - case ERROR_FILE_NOT_FOUND: - szError = _T("File not found --"); - break; - - case ERROR_PATH_NOT_FOUND: - szError = _T("Path not found --"); - break; - - default: - ConErrPrintf (_T("Unknown error! Error code: 0x%lx\n"), dwErrorCode); - return; - } - - ConErrPrintf (_T("%s %s\n"), szError, szMessage); -#endif -} - - - -VOID error_invalid_switch (TCHAR ch) -{ - ConErrPrintf (INVALID_SWITCH, ch); -} - - -VOID error_too_many_parameters (LPTSTR s) -{ - ConErrPrintf (TOO_MANY_PARAMETERS, s); -} - - -VOID error_path_not_found (VOID) -{ - ConErrPrintf (PATH_NOT_FOUND); -} - - -VOID error_file_not_found (VOID) -{ - ConErrPrintf (FILE_NOT_FOUND); -} - - -VOID error_sfile_not_found (LPTSTR f) -{ - ConErrPrintf (FILE_NOT_FOUND _T(" - %s\n"), f); -} - - -VOID error_req_param_missing (VOID) -{ - ConErrPrintf (REQ_PARAM_MISSING); -} - - -VOID error_invalid_drive (VOID) -{ - ConErrPrintf (INVALID_DRIVE); -} - - -VOID error_bad_command (VOID) -{ - ConErrPrintf (BADCOMMAND); -} - - -VOID error_no_pipe (VOID) -{ - ConErrPrintf (CANNOTPIPE); -} - - -VOID error_out_of_memory (VOID) -{ - ConErrPrintf (OUT_OF_MEMORY); -} - - -VOID error_invalid_parameter_format (LPTSTR s) -{ - ConErrPrintf (INVALID_PARAM_FORMAT, s); -} - - -VOID error_syntax (LPTSTR s) -{ - if (s) - ConErrPrintf (_T("Syntax error - %s\n"), s); - else - ConErrPrintf (_T("Syntax error.\n")); -} - - -VOID msg_pause (VOID) -{ - ConOutPuts (D_PAUSEMSG); -} diff --git a/rosapps/cmd/filecomp.c b/rosapps/cmd/filecomp.c deleted file mode 100644 index 678e3a91b63..00000000000 --- a/rosapps/cmd/filecomp.c +++ /dev/null @@ -1,285 +0,0 @@ -/* - * FILECOMP.C - handles filename completion. - * - * - * Comments: - * - * 30-Jul-1998 (John P Price ) - * moved from command.c file - * made second TAB display list of filename matches - * made filename be lower case if last character typed is lower case - * - * 25-Jan-1999 (Eric Kohl ) - * Cleanup. Unicode safe! - */ - -#include "config.h" - -#include -#include -#include -#include -#include -#include - -#include "cmd.h" - - -#ifdef FEATURE_UNIX_FILENAME_COMPLETION - -VOID CompleteFilename (LPTSTR str, INT charcount) -{ - WIN32_FIND_DATA file; - HANDLE hFile; - INT curplace = 0; - INT start; - INT count; - BOOL found_dot = FALSE; - BOOL perfectmatch = TRUE; - TCHAR path[MAX_PATH]; - TCHAR fname[MAX_PATH]; - TCHAR maxmatch[MAX_PATH] = _T(""); - TCHAR directory[MAX_PATH]; - LPCOMMAND cmds_ptr; - - /* expand current file name */ - count = charcount - 1; - if (count < 0) - count = 0; - - /* find front of word */ - while (count > 0 && str[count] != _T(' ')) - count--; - - /* if not at beginning, go forward 1 */ - if (str[count] == _T(' ')) - count++; - - start = count; - - /* extract directory from word */ - _tcscpy (directory, &str[start]); - curplace = _tcslen (directory) - 1; - while (curplace >= 0 && directory[curplace] != _T('\\') && - directory[curplace] != _T(':')) - { - directory[curplace] = 0; - curplace--; - } - - _tcscpy (path, &str[start]); - - /* look for a '.' in the filename */ - for (count = _tcslen (directory); path[count] != _T('\0'); count++) - { - if (path[count] == _T('.')) - { - found_dot = TRUE; - break; - } - } - - if (found_dot) - _tcscat (path, _T("*")); - else - _tcscat (path, _T("*.*")); - - /* current fname */ - curplace = 0; - - hFile = FindFirstFile (path, &file); - if (hFile != INVALID_HANDLE_VALUE) - { - /* find anything */ - do - { - /* ignore "." and ".." */ - if (!_tcscmp (file.cFileName, _T(".")) || - !_tcscmp (file.cFileName, _T(".."))) - continue; - - _tcscpy (fname, file.cFileName); - - if (file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - _tcscat (fname, _T("\\")); - else - _tcscat (fname, _T(" ")); - - if (!maxmatch[0] && perfectmatch) - { - _tcscpy(maxmatch, fname); - } - else - { - for (count = 0; maxmatch[count] && fname[count]; count++) - { - if (tolower(maxmatch[count]) != tolower(fname[count])) - { - perfectmatch = FALSE; - maxmatch[count] = 0; - break; - } - } - } - } - while (FindNextFile (hFile, &file)); - - FindClose (hFile); - if( perfectmatch ) - { - str[start] = '\"'; - _tcscpy (&str[start+1], directory); - _tcscat (&str[start], maxmatch); - _tcscat (&str[start], "\"" ); - } - - else -#ifdef __REACTOS__ - Beep (440, 50); -#else - MessageBeep (-1); -#endif - } - else - { - /* no match found - search for internal command */ - for (cmds_ptr = cmds; cmds_ptr->name; cmds_ptr++) - { - if (!_tcsnicmp (&str[start], cmds_ptr->name, - _tcslen (&str[start]))) - { - /* return the mach only if it is unique */ - if (_tcsnicmp (&str[start], (cmds_ptr+1)->name, _tcslen (&str[start]))) - _tcscpy (&str[start], cmds_ptr->name); - break; - } - } - -#ifdef __REACTOS__ - Beep (440, 50); -#else - MessageBeep (-1); -#endif - } -} - - -/* - * returns 1 if at least one match, else returns 0 - */ - -BOOL ShowCompletionMatches (LPTSTR str, INT charcount) -{ - WIN32_FIND_DATA file; - HANDLE hFile; - BOOL found_dot = FALSE; - INT curplace = 0; - INT start; - INT count; - TCHAR path[MAX_PATH]; - TCHAR fname[MAX_PATH]; - TCHAR directory[MAX_PATH]; - - /* expand current file name */ - count = charcount - 1; - if (count < 0) - count = 0; - - /* find front of word */ - while (count > 0 && str[count] != _T(' ')) - count--; - - /* if not at beginning, go forward 1 */ - if (str[count] == _T(' ')) - count++; - - start = count; - - /* extract directory from word */ - _tcscpy (directory, &str[start]); - curplace = _tcslen (directory) - 1; - while (curplace >= 0 && - directory[curplace] != _T('\\') && - directory[curplace] != _T(':')) - { - directory[curplace] = 0; - curplace--; - } - - _tcscpy (path, &str[start]); - - /* look for a . in the filename */ - for (count = _tcslen (directory); path[count] != _T('\0'); count++) - { - if (path[count] == _T('.')) - { - found_dot = TRUE; - break; - } - } - - if (found_dot) - _tcscat (path, _T("*")); - else - _tcscat (path, _T("*.*")); - - /* current fname */ - curplace = 0; - - hFile = FindFirstFile (path, &file); - if (hFile != INVALID_HANDLE_VALUE) - { - /* find anything */ - ConOutChar (_T('\n')); - count = 0; - do - { - /* ignore . and .. */ - if (!_tcscmp (file.cFileName, _T(".")) || - !_tcscmp (file.cFileName, _T(".."))) - continue; - - if (file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - _stprintf (fname, _T("[%s]"), file.cFileName); - else - _tcscpy (fname, file.cFileName); - - ConOutPrintf (_T("%-14s"), fname); - if (++count == 5) - { - ConOutChar (_T('\n')); - count = 0; - } - } - while (FindNextFile (hFile, &file)); - - FindClose (hFile); - - if (count) - ConOutChar (_T('\n')); - } - else - { - /* no match found */ -#ifdef __REACTOS__ - Beep (440, 50); -#else - MessageBeep (-1); -#endif - return FALSE; - } - - return TRUE; -} -#endif - -#ifdef FEATURE_4NT_FILENAME_COMPLETION - -//static VOID BuildFilenameMatchList (...) - -// VOID CompleteFilenameNext (LPTSTR, INT) -// VOID CompleteFilenamePrev (LPTSTR, INT) - -// VOID RemoveFilenameMatchList (VOID) - -#endif diff --git a/rosapps/cmd/files.txt b/rosapps/cmd/files.txt deleted file mode 100644 index fd3ef16082d..00000000000 --- a/rosapps/cmd/files.txt +++ /dev/null @@ -1,61 +0,0 @@ -Archive Contents -~~~~~~~~~~~~~~~~ -bugs.txt Bug List -files.txt This file list -history.txt History of the shell development -license.txt GNU license - applies to all files named here -readme.txt General shell info -todo.txt What I have to do -wishlist.txt Wish List - -makefile experimental makefile -makefile.lcc makefile for lcc-win - -alias.c Alias code -alias.h Alias header file -attrib.c Implements attrib command -batch.c Batch file interpreter -beep.c Implements beep command -call.c Implements call command -chcp.c Implements chcp command -choice.c Implements choice command -cls.c Implements cls command -cmdinput.c Command-line input functions -cmdtable.c Table of available internal commands -cmd.c Main code for command-line interpreter -cmd.h Command header file -color.c Implements color command -console.c Windows console handling code -copy.c Implements copy command -date.c Implements date command -del.c Implements del command -dir.c Directory listing code -dirstack.c Directory stack code (PUSHD and POPD) -echo.c Implements echo command -error.c Error Message Routines -filecomp.c Filename completion functions -for.c Implements for command -free.c Implements free command -goto.c Implements goto command -history.c Command-line history handling -if.c Implements if command -internal.c Internal commands (DIR, RD, etc) -label.c Implements label command -locale.c Locale handling code -memory.c Implements memory command -misc.c Misc. Functions -msgbox.c Implements msgbox command -move.c Implements move command -path.c Implements path command -pause.c Implements pause command -prompt.c Prompt handling functions -redir.c Redirection and piping parsing functions -ren.c Implements rename command -set.c Implements set command -shift.c Implements shift command -time.c Implements time command -timer.c Implements timer command -type.c Implements type command -ver.c Implements ver command -where.c Code to search path for executables -verify.c Implements verify command diff --git a/rosapps/cmd/for.c b/rosapps/cmd/for.c deleted file mode 100644 index d4625beec9a..00000000000 --- a/rosapps/cmd/for.c +++ /dev/null @@ -1,157 +0,0 @@ -/* - * FOR.C - for internal batch command. - * - * - * History: - * - * 16-Jul-1998 (Hans B Pufal) - * Started. - * - * 16-Jul-1998 (John P Price) - * Seperated commands into individual files. - * - * 19-Jul-1998 (Hans B Pufal) - * Implementation of FOR. - * - * 27-Jul-1998 (John P Price ) - * Added config.h include. - * - * 20-Jan-1999 (Eric Kohl) - * Unicode and redirection safe! - * - * 01-Sep-1999 (Eric Kohl) - * Added help text. - * - * 23-Feb-2001 (Carl Nettelblad ) - * Implemented preservation of echo flag. Some other for related - * code in other files fixed, too. - */ - -#include "config.h" - -#include -#include -#include -#include -#include - -#include "cmd.h" -#include "batch.h" - - -/* - * Perform FOR command. - * - * First check syntax is correct : FOR %v IN ( ) DO - * v must be alphabetic, must not be empty. - * - * If all is correct build a new bcontext structure which preserves - * the necessary information so that readbatchline can expand - * each the command prototype for each list element. - * - * You might look on a FOR as being a called batch file with one line - * per list element. - */ - -INT cmd_for (LPTSTR cmd, LPTSTR param) -{ - LPBATCH_CONTEXT lpNew; - LPTSTR pp; - TCHAR var; - -#ifdef _DEBUG - DebugPrintf ("cmd_for (\'%s\', \'%s\'\n", cmd, param); -#endif - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Runs a specified command for each file in a set of files\n" - "\n" - "FOR %variable IN (set) DO command [parameters]\n" - "\n" - " %variable Specifies a replaceable parameter.\n" - " (set) Specifies a set of one or more files. Wildcards may be used.\n" - " command Specifies the command to carry out for each file.\n" - " parameters Specifies parameters or switches for the specified command.\n" - "\n" - "To user the FOR comamnd in a batch program, specify %%variable instead of\n" - "%variable.")); - return 0; - } - - /* Check that first element is % then an alpha char followed by space */ - if ((*param != _T('%')) || !_istalpha (*(param + 1)) || !_istspace (*(param + 2))) - { - error_syntax (_T("bad variable specification.")); - return 1; - } - - param++; - var = *param++; /* Save FOR var name */ - - while (_istspace (*param)) - param++; - - /* Check next element is 'IN' */ - if ((_tcsnicmp (param, _T("in"), 2) != 0) || !_istspace (*(param + 2))) - { - error_syntax (_T("'in' missing in for statement.")); - return 1; - } - - param += 2; - while (_istspace (*param)) - param++; - - /* Folowed by a '(', find also matching ')' */ - if ((*param != _T('(')) || (NULL == (pp = _tcsrchr (param, _T(')'))))) - { - error_syntax (_T("no brackets found.")); - return 1; - } - - *pp++ = _T('\0'); - param++; /* param now points at null terminated list */ - - while (_istspace (*pp)) - pp++; - - /* Check DO follows */ - if ((_tcsnicmp (pp, _T("do"), 2) != 0) || !_istspace (*(pp + 2))) - { - error_syntax (_T("'do' missing.")); - return 1; - } - - pp += 2; - while (_istspace (*pp)) - pp++; - - /* Check that command tail is not empty */ - if (*pp == _T('\0')) - { - error_syntax (_T("no command after 'do'.")); - return 1; - } - - /* OK all is correct, build a bcontext.... */ - lpNew = (LPBATCH_CONTEXT)malloc (sizeof (BATCH_CONTEXT)); - - lpNew->prev = bc; - bc = lpNew; - - bc->hBatchFile = INVALID_HANDLE_VALUE; - bc->ffind = NULL; - bc->params = BatchParams (_T(""), param); /* Split out list */ - bc->shiftlevel = 0; - bc->forvar = var; - bc->forproto = _tcsdup (pp); - if (bc->prev) - bc->bEcho = bc->prev->bEcho; - else - bc->bEcho = bEcho; - - return 0; -} - -/* EOF */ diff --git a/rosapps/cmd/free.c b/rosapps/cmd/free.c deleted file mode 100644 index 934e776879c..00000000000 --- a/rosapps/cmd/free.c +++ /dev/null @@ -1,165 +0,0 @@ -/* - * FREE.C - internal command. - * - * - * History: - * - * 01-Sep-1999 (Eric Kohl) - * Started. - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_FREE - -#include -#include -#include -#include -#include - -#include "cmd.h" - - -/* - * convert - * - * insert commas into a number - */ - -static INT -ConvertULargeInteger (ULARGE_INTEGER num, LPTSTR des, INT len) -{ - TCHAR temp[32]; - INT c = 0; - INT n = 0; - - if (num.QuadPart == 0) - { - des[0] = _T('0'); - des[1] = _T('\0'); - n = 1; - } - else - { - temp[31] = 0; - while (num.QuadPart > 0) - { - if (((c + 1) % (nNumberGroups + 1)) == 0) - temp[30 - c++] = cThousandSeparator; - temp[30 - c++] = (TCHAR)(num.QuadPart % 10) + _T('0'); - num.QuadPart /= 10; - } - - for (n = 0; n <= c; n++) - des[n] = temp[31 - c + n]; - } - - return n; -} - - -static VOID -PrintDiskInfo (LPTSTR szDisk) -{ - TCHAR szRootPath[4] = "A:\\"; - TCHAR szDrive[2] = "A"; - TCHAR szVolume[64]; - TCHAR szSerial[10]; - TCHAR szTotal[40]; - TCHAR szUsed[40]; - TCHAR szFree[40]; - DWORD dwSerial; - ULARGE_INTEGER uliSize; - DWORD dwSecPerCl; - DWORD dwBytPerSec; - DWORD dwFreeCl; - DWORD dwTotCl; - - if (_tcslen (szDisk) < 2 || szDisk[1] != _T(':')) - { - ConErrPrintf (_T("Invalid drive %s\n"), szDisk); - return; - } - - szRootPath[0] = szDisk[0]; - szDrive[0] = _totupper (szRootPath[0]); - - if (!GetVolumeInformation (szRootPath, szVolume, 64, &dwSerial, - NULL, NULL, NULL, 0)) - { - ConErrPrintf (_T("Invalid drive %s:\n"), szDrive); - return; - } - - if (szVolume[0] == _T('\0')) - _tcscpy (szVolume, _T("unlabeled")); - - _stprintf (szSerial, - _T("%04X-%04X"), - HIWORD(dwSerial), - LOWORD(dwSerial)); - - if (!GetDiskFreeSpace (szRootPath, &dwSecPerCl, - &dwBytPerSec, &dwFreeCl, &dwTotCl)) - { - ConErrPrintf (_T("Invalid drive %s:\n"), szDrive); - return; - } - - uliSize.QuadPart = dwSecPerCl * dwBytPerSec * dwTotCl; - ConvertULargeInteger (uliSize, szTotal, 40); - - uliSize.QuadPart = dwSecPerCl * dwBytPerSec * (dwTotCl - dwFreeCl); - ConvertULargeInteger (uliSize, szUsed, 40); - - uliSize.QuadPart = dwSecPerCl * dwBytPerSec * dwFreeCl; - ConvertULargeInteger (uliSize, szFree, 40); - - ConOutPrintf (_T("\n" - " Volume in drive %s is %-11s Serial number is %s\n" - " %16s bytes total disk space\n" - " %16s bytes used\n" - " %16s bytes free\n"), - szDrive, szVolume, szSerial, - szTotal, szUsed, szFree); -} - - -INT CommandFree (LPTSTR cmd, LPTSTR param) -{ - LPTSTR szParam; - TCHAR szDefPath[MAX_PATH]; - INT argc, i; - LPTSTR *arg; - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Displays drive information.\n" - "\n" - "FREE [drive: ...]")); - return 0; - } - - if (!param || *param == _T('\0')) - { - GetCurrentDirectory (MAX_PATH, szDefPath); - szDefPath[2] = _T('\0'); - szParam = szDefPath; - } - else - szParam = param; - - arg = split (szParam, &argc, FALSE); - - for (i = 0; i < argc; i++) - PrintDiskInfo (arg[i]); - - freep (arg); - - return 0; -} - -#endif /* INCLUDE_CMD_FREE */ - -/* EOF */ diff --git a/rosapps/cmd/goto.c b/rosapps/cmd/goto.c deleted file mode 100644 index c80a9e4047a..00000000000 --- a/rosapps/cmd/goto.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * GOTO.C - goto internal batch command. - * - * History: - * - * 16 Jul 1998 (Hans B Pufal) - * started. - * - * 16 Jul 1998 (John P Price) - * Seperated commands into individual files. - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 28 Jul 1998 (Hans B Pufal) [HBP_003] - * Terminate label on first space character, use only first 8 chars of - * label string - * - * 24-Jan-1999 (Eric Kohl ) - * Unicode and redirection safe! - * - * 27-Jan-1999 (Eric Kohl ) - * Added help text ("/?"). - */ - -#include "config.h" - -#include -#include -#include -#include - -#include "cmd.h" -#include "batch.h" - - -/* - * Perform GOTO command. - * - * Only valid if batch file current. - * - */ - -INT cmd_goto (LPTSTR cmd, LPTSTR param) -{ - LPTSTR tmp; - LONG lNewPosHigh; - -#ifdef _DEBUG - DebugPrintf ("cmd_goto (\'%s\', \'%s\'\n", cmd, param); -#endif - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Directs CMD to a labeled line in a batch script.\n" - "\n" - "GOTO label\n" - "\n" - " label Specifies a text string used in a batch script as a label.\n" - "\n" - "You type a label on a line by itself, beginning with a colon.")); - return 0; - } - - /* if not in batch -- error!! */ - if (bc == NULL) - { - return 1; - } - - if (*param == _T('\0')) - { - ExitBatch (_T("No label specified for GOTO\n")); - return 1; - } - - /* terminate label at first space char */ - tmp = param; - while (*tmp && !_istspace (*tmp)) - tmp++; - *tmp = _T('\0'); - - /* set file pointer to the beginning of the batch file */ - lNewPosHigh = 0; - SetFilePointer (bc->hBatchFile, 0, &lNewPosHigh, FILE_BEGIN); - - while (FileGetString (bc->hBatchFile, textline, sizeof(textline))) - { - /* Strip out any trailing spaces or control chars */ - tmp = textline + _tcslen (textline) - 1; - while (_istcntrl (*tmp) || _istspace (*tmp)) - tmp--; - *(tmp + 1) = _T('\0'); - - /* Then leading spaces... */ - tmp = textline; - while (_istspace (*tmp)) - tmp++; - - /* use only 1st 8 chars of label */ - if ((*tmp == _T(':')) && (_tcsncmp (++tmp, param, 8) == 0)) - return 0; - } - - ConErrPrintf (_T("Label '%s' not found\n"), param); - ExitBatch (NULL); - - return 1; -} diff --git a/rosapps/cmd/history.c b/rosapps/cmd/history.c deleted file mode 100644 index 948ca9dd46a..00000000000 --- a/rosapps/cmd/history.c +++ /dev/null @@ -1,526 +0,0 @@ -/* - * HISTORY.C - command line history. - * - * - * History: - * - * 14/01/95 (Tim Norman) - * started. - * - * 08/08/95 (Matt Rains) - * i have cleaned up the source code. changes now bring this source - * into guidelines for recommended programming practice. - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 25-Jan-1999 (Eric Kohl ) - * Cleanup! - * Unicode and redirection safe! - * - * 25-Jan-1999 (Paolo Pantaleo ) - * Added lots of comments (beginning studying the source) - * Added command.com's F3 support (see cmdinput.c) - * - */ - - - -/* - * HISTORY.C - command line history. Second version - * - * - * History: - * - * 06/12/99 (Paolo Pantaleo ) - * started. - * - */ - - - - - - -#include "config.h" - - -#ifdef FEATURE_HISTORY - -#include -#include -#include -#include -#include - -#include "cmd.h" - - -typedef struct tagHISTORY -{ - struct tagHISTORY *prev; - struct tagHISTORY *next; - LPTSTR string; -} HIST_ENTRY, * LPHIST_ENTRY; - -static INT size, - max_size=100; - - - -static LPHIST_ENTRY Top; -static LPHIST_ENTRY Bottom; - - -static LPHIST_ENTRY curr_ptr=0; - - -VOID InitHistory(VOID); -VOID History_move_to_bottom(VOID); -VOID History (INT dir, LPTSTR commandline); -VOID CleanHistory(VOID); -VOID History_del_current_entry(LPTSTR str); - -/*service functions*/ -static VOID del(LPHIST_ENTRY item); -static VOID add_at_bottom(LPTSTR string); -/*VOID add_before_last(LPTSTR string);*/ -VOID set_size(INT new_size); - - - -INT CommandHistory (LPTSTR cmd, LPTSTR param) -{ - LPTSTR tmp; - INT tmp_int; - LPHIST_ENTRY h_tmp; - TCHAR szBuffer[2048]; - - tmp=_tcschr(param,_T('/')); - - if (tmp) - { - param=tmp; - switch (_totupper(param[1])) - { - case _T('F'):/*delete history*/ - CleanHistory();InitHistory(); - break; - - case _T('R'):/*read history from standard in*/ - //hIn=GetStdHandle (STD_INPUT_HANDLE); - - for(;;) - { - ConInString(szBuffer,sizeof(szBuffer)/sizeof(TCHAR)); - if (*szBuffer!=_T('\0')) - History(0,szBuffer); - else - break; - } - break; - - case _T('A'):/*add an antry*/ - History(0,param+2); - break; - - case _T('S'):/*set history size*/ - if ((tmp_int=_ttoi(param+2))) - set_size(tmp_int); - break; - - default: - return 1; - } - } - else - { - for(h_tmp=Top->prev;h_tmp!=Bottom;h_tmp=h_tmp->prev) - ConErrPuts(h_tmp->string); - } - return 0; -} - -VOID set_size(INT new_size) -{ - - while(new_sizeprev); - - - max_size=new_size; -} - - -VOID InitHistory(VOID) -{ - size=0; - - - Top = malloc(sizeof(HIST_ENTRY)); - Bottom = malloc(sizeof(HIST_ENTRY)); - - - Top->prev = Bottom; - Top->next = NULL; - Top->string = NULL; - - - Bottom->prev = NULL; - Bottom->next = Top; - Bottom->string = NULL; - - curr_ptr=Bottom; -} - - - - -VOID CleanHistory(VOID) -{ - - while (Bottom->next!=Top) - del(Bottom->next); - - free(Top); - free(Bottom); - -} - - -VOID History_del_current_entry(LPTSTR str) -{ - LPHIST_ENTRY tmp; - - if (size==0) - return; - - if(curr_ptr==Bottom) - curr_ptr=Bottom->next; - - if(curr_ptr==Top) - curr_ptr=Top->prev; - - - tmp=curr_ptr; - curr_ptr=curr_ptr->prev; - del(tmp); - History(-1,str); - -} - - -static -VOID del(LPHIST_ENTRY item) -{ - - if( item==NULL || item==Top || item==Bottom ) - { -#ifdef _DEBUG - DebugPrintf("del in " __FILE__ ": retrning\n" - "item is 0x%08x (Bottom is0x%08x)\n", - item, Bottom); - -#endif - return; - } - - - - /*free string's mem*/ - if (item->string) - free(item->string); - - - - - - /*set links in prev and next item*/ - item->next->prev=item->prev; - item->prev->next=item->next; - - free(item); - - size--; - -} - -#if 0 -static -VOID add_before_last(LPTSTR string) -{ - - LPHIST_ENTRY tmp,before,after; - - - /*delete first entry if maximum number of entries is reached*/ - while(size>=max_size) - del(Top->prev); - - while (_istspace(*string)) - string++; - - if (*string==_T('\0')) - return; - - - - /*allocte entry and string*/ - tmp=malloc(sizeof(HIST_ENTRY)); - tmp->string=malloc(_tcslen(string)+1); - _tcscpy(tmp->string,string); - - - /*set links*/ - before=Bottom->next; - after=before->next; - - tmp->prev=before; - tmp->next=after; - - after->prev=tmp; - before->next=tmp; - - - - - - - - /*set new size*/ - size++; - - -} -#endif/*0*/ - -static -VOID add_at_bottom(LPTSTR string) -{ - - - LPHIST_ENTRY tmp; - - - /*delete first entry if maximum number of entries is reached*/ - while(size>=max_size) - del(Top->prev); - - while (_istspace(*string)) - string++; - - if (*string==_T('\0')) - return; - - - /*if new entry is the same than the last do not add it*/ - if(size) - if(_tcscmp(string,Bottom->next->string)==0) - return; - - - /*fill bottom with string, it will become Bottom->next*/ - Bottom->string=malloc(_tcslen(string)+1); - _tcscpy(Bottom->string,string); - - /*save Bottom value*/ - tmp=Bottom; - - - /*create new void Bottom*/ - Bottom=malloc(sizeof(HIST_ENTRY)); - Bottom->next=tmp; - Bottom->prev=NULL; - Bottom->string=NULL; - - tmp->prev=Bottom; - - /*set new size*/ - size++; - -} - - - -VOID History_move_to_bottom(VOID) -{ - curr_ptr=Bottom; - -} - - -VOID History (INT dir, LPTSTR commandline) -{ - - if(dir==0) - { - add_at_bottom(commandline); - curr_ptr=Bottom; - return; - } - - if (size==0) - { - commandline[0]=_T('\0'); - return; - } - - - if(dir<0)/*key up*/ - { - if (curr_ptr->next==Top || curr_ptr==Top) - { -#ifdef WRAP_HISTORY - curr_ptr=Bottom; -#else - curr_ptr=Top; - commandline[0]=_T('\0'); - return; -#endif - } - - - curr_ptr = curr_ptr->next; - if(curr_ptr->string) - _tcscpy(commandline,curr_ptr->string); - - } - - - - - - if(dir>0) - { - - if (curr_ptr->prev==Bottom || curr_ptr==Bottom) - { -#ifdef WRAP_HISTORY - curr_ptr=Top; -#else - curr_ptr=Bottom; - commandline[0]=_T('\0'); - return; -#endif - } - - curr_ptr=curr_ptr->prev; - if(curr_ptr->string) - _tcscpy(commandline,curr_ptr->string); - - } -} - - - - - - -#if 0 - -LPTSTR history = NULL; /*buffer to sotre all the lines*/ -LPTSTR lines[MAXLINES]; /*array of pointers to each line(entry)*/ - /*located in history buffer*/ - -INT curline = 0; /*the last line recalled by user*/ -INT numlines = 0; /*number of entries, included the last*/ - /*empty one*/ - -INT maxpos = 0; /*index of last byte of last entry*/ - - - -VOID History (INT dir, LPTSTR commandline) -{ - - INT count; /*used in for loops*/ - INT length; /*used in the same loops of count*/ - /*both to make room when is full - either history or lines*/ - - /*first time History is called allocate mem*/ - if (!history) - { - history = malloc (history_size * sizeof (TCHAR)); - lines[0] = history; - history[0] = 0; - } - - if (dir > 0) - { - /* next command */ - if (curline < numlines) - { - curline++; - } - - if (curline == numlines) - { - commandline[0] = 0; - } - else - { - _tcscpy (commandline, lines[curline]); - } - } - else if (dir < 0) - { - /* prev command */ - if (curline > 0) - { - curline--; - } - - _tcscpy (commandline, lines[curline]); - } - else - { - /* add to history */ - /* remove oldest string until there's enough room for next one */ - /* strlen (commandline) must be less than history_size! */ - while ((maxpos + (INT)_tcslen (commandline) + 1 > history_size) || (numlines >= MAXLINES)) - { - length = _tcslen (lines[0]) + 1; - - for (count = 0; count < maxpos && count + (lines[1] - lines[0]) < history_size; count++) - { - history[count] = history[count + length]; - } - - maxpos -= length; - - for (count = 0; count <= numlines && count < MAXLINES; count++) - { - lines[count] = lines[count + 1] - length; - } - - numlines--; -#ifdef DEBUG - ConOutPrintf (_T("Reduced size: %ld lines\n"), numlines); - - for (count = 0; count < numlines; count++) - { - ConOutPrintf (_T("%d: %s\n"), count, lines[count]); - } -#endif - } - - /*copy entry in the history bufer*/ - _tcscpy (lines[numlines], commandline); - numlines++; - - /*set last lines[numlines] pointer next the end of last, valid, - just setted entry (the two lines above)*/ - lines[numlines] = lines[numlines - 1] + _tcslen (commandline) + 1; - maxpos += _tcslen (commandline) + 1; - /* last line, empty */ - - curline = numlines; - } - - return; -} - -#endif - -#endif //#if 0 diff --git a/rosapps/cmd/history.txt b/rosapps/cmd/history.txt deleted file mode 100644 index a0cac6f59d1..00000000000 --- a/rosapps/cmd/history.txt +++ /dev/null @@ -1,367 +0,0 @@ -FreeDOS Command Line Interface Development History -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -11/11/94 version 0.01 -~~~~~~~~~~~~~~~~~~~~~ -o initial release. - -01/01/95 version 0.10 -~~~~~~~~~~~~~~~~~~~~~ -o removed some scaffolding. -o modified CD. -o added tab file completion. -o added command line history. - -01/15/95 version 0.20 -~~~~~~~~~~~~~~~~~~~~~ -o formatted all existing source modules. -o added prompt support. -o added drive selection. -o added dir command. -o started this development log. - -08/06/95 prerelease of version 0.30 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -o reorganized code into separate source modules. -o added batch processing support (thanks to Evan Jeffrey). -o added exec code (thanks to Steffan Kaiser). -o removed environment handling (thanks again to Steffan Kaiser) - - [ 08/08/95 -- Matt Rains ] -o formatted this development log. -o formatted all existing source modules so that they comply with recommended - programming practice. -o added MD command. -o added RD command. -o added VER command. -o replaced CD command. -o modified DIR command. -o DIR now called regardless of other DIR.??? files. this is done because of - exec() problems. - -12/10/95 version 0.30 -~~~~~~~~~~~~~~~~~~~~~ -o used Borland's spawnve to fix exec problem -o fixed CD again so you don't need a space after it -o couple of spelling fixes - -12/14/95 version 0.31 -~~~~~~~~~~~~~~~~~~~~~ -o modified cmdinput.c to work with non-standard screen sizes (see 28.com) -o fixed a bug in history.c that made it not work when you hit the up arrow - on the first line -o fixed DIR to work a little more like MS-DOS's DIR (see internal.c) -o fixed some code in where.c to make things a bit more efficient and nicer - -01/06/96 version 0.40 (never released) -~~~~~~~~~~~~~~~~~~~~~ -o added redirection and piping support!!! (see redir.c and command.c) -o fixed a stupid pointer problem in where.c that was causing LOTS of - problems in the strangest places... -o added day of the week support to prompt.c (oops, that was already supposed - to be there! :) -o fixed and reorganized the EXEC code!!! Thanks to Svante Frey! -o reorganized command.c and internal.c to handle parsing internal commands - more efficiently and consistently. -o changed the behavior of MD, CD, RD to work without spaces (e.g. CD\DOS) -o small changes here and there to make it work with redirection/piping - (e.g. DIR only pauses if you're not doing redirection) - -01/17/96 version 0.50 -~~~~~~~~~~~~~~~~~~~~~ -Version 0.40 was never released because I was home on Christmas vacation, -and I couldn't upload it. By the time I got back to school, I had the -LOADHIGH patch from Svante Frey, so I decided to jump up to 0.50 without any -release of 0.40... - Tim Norman - -o LOADHIGH/LOADFIX/LH support added!!!! Many thanks go to Svante Frey! -o bug fixed in command parsing that didn't handle / switches correctly... -o removed debugging output from history.c - -07/26/96 version 0.60 -~~~~~~~~~~~~~~~~~~~~~ -Lots of internal changes here... Not much added to the interface. - -o Changed internals to use first,rest parameters instead of arrays of params -o Fixed some bugs -o Some other things I don't remember :) - -07/26/96 version 0.61 -~~~~~~~~~~~~~~~~~~~~~ -Bugfixes - -o Added hook to the PATH command -o Fixed CD.. bug - -08/27/96 version 0.70 -~~~~~~~~~~~~~~~~~~~~~ -Finally added Oliver Mueller's ALIAS command! Also numerous bug fixes. - -o Added ALIAS command -o Removed support for - as a switch in LOADHIGH.C -o Bugfixes in BATCH.C. %0 was returning garbage -o Removed lots of unused variables, reducing # of warnings when compiling -o Other miscellaneous code clean-ups -o Changed WHERE.C to use a little less memory - -06/14/97 version 0.71 -~~~~~~~~~~~~~~~~~~~~~ -Lots of bug fixes, plus some additional features. - -o New DIR command. Now more like MS-DOS's DIR. /p supported, /s coming soon -o bug fix in internal.c - parse_firstarg -o Rewrote parser in batch.c (Steffan Kaiser) -o Ctrl-Break checking in various places (Steffan Kaiser) -o Error level setting/checking (%? in batch files) (Steffan Kaiser) -o bug fix in cmdinput.c ("%i" on command-line caused weird behavior) -o bug fix in where.c (first item in path wasn't searched) - -07/12/97 version 0.72 -~~~~~~~~~~~~~~~~~~~~~ -More bug fixes and code cleanup - -o Rewrote cmdinput.c to be more efficient (Marc Desrochers) -o Added insert/overstrike modes (Marc Desrochers) -o Replaced findxy() with pointers into BIOS (maxx, maxy) (Marc Desrochers) -o Fixed bug that disallowed listing of root directories -o Fixed bug that didn't search the first path (again!) - -07/13/97 version 0.72b -~~~~~~~~~~~~~~~~~~~~~~ -Disabled a feature that caused a crash on some machines. - -o Replaced setcursor calls in cmdinput.c with _setcursortype -o Added dir.c to the distribution (was left out in 0.72) - -07/01/98 version 0.73 (Rob Lake) -~~~~~~~~~~~~~~~~~~~~~~ -o New DIR commands supported: /S, /B, /L, /A and /W. - (/R changed to /S). Also /? added. -o Supports DIRCMD in environment. -o Supports turning off commands with hyphen (ex. /-S - turns off recursive listing) -o Changed error messages for DIR and DEL to more MS-DOS'ish -o Moved error messages from DIR.C and DEL.C to COMMAND.H - (more may go there soon) -o Fixed bug that caused dir *.ext/X not to work (no spaces - between filespec and slash) -o Added wildcard support for DEL command -o Added prompt and help switch for DEL command, /P and /? - respectively. -o Added support for /C when envoking the shell -o Added /P support when Kernel loads shell. This means - the shell now is permanent and runs the autoexec.bat - (/E is not implemented) -o Added my name (Rob Lake) to the developer listing -o Changed version routine to print out copyright notice - with no args, and with appropriate switches, warranty - and redistribution notices and developer listing - -07/08/1998 version 0.74 (John P. Price (linux-guru@gcfl.net)) -~~~~~~~~~~~~~~~~~~~~~~~~ -COMMAND.C/COMMAND.H: -o Now sets COMSPEC environment variable -o misc clean up and optimization -o added date, time and type commands -o changed to using spawnl instead of exec. exec does not copy the - environment to the child process! -DIR.C -o removed extra returns; closer to MSDOS -o fixed wide display so that an extra return is not displayed when - there is five filenames in the last line. -ENVIRON.C -o commented out show_environment function. Not used anymore. -INTERAL.C -o removed call to show_environment in set command. -o moved test for syntax before allocating memory in set command. -o misc clean up and optimization. - -o created DATE.C -o created TIME.C -o created TYPE.C - -07/08/1998 version 0.74b (John P. Price (linux-guru@gcfl.net)) -~~~~~~~~~~~~~~~~~~~~~~~~ -COMMAND.C -o fixed call to spawnl so that it would pass command line arguments - correctly. - -07/12/98 version 0.74c (Rob Lake rlake@cs.mun.ca) -~~~~~~~~~~~~~~~~~~~~~~ -Various Files: -o removed redundant use of error message defines and moved - error printing calls to ERROR.C to reduced program size. - -o created MISC.C -o created ERR_HAND.C/H -o created ERROR.C - -07/13/98 version 0.74d (Rob Lake rlake@cs.mun.ca) -~~~~~~~~~~~~~~~~~~~~~~ -INTERNAL.C -o removed most of the commands and placed them in there own file - -- del, ren, set and ver -o created DEL.C, REN.C SET.C and VER.C -o fixed bug that caused del not to delete files with no attributes -o the critical error handler count number of times called, autofails - at 5 calls - - -16 Jul 1998 (Hans B Pufal ) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -batch.c - A new version, implements CALL, ECHO, GOT, IF, PAUSE, SHIFT and - BEEP. There is a stub for FOR but that's all. - -cmdtable.c - New file to keep the internal command table. I plan on getting rid - of the table real soon now and replacing it with a dynamic - mechanism. - -command.c - A new (improved ;) version. Conforms closely to MS-DOS specs. - Cleaned up (and fixed) the redirection handler. - -command.h - Version D with changes. Look for the HBP tag. - -redir.c - Modified file, now supports append redirects. - - -16 Jul 1998 (Rob Lake rlake@cs.mun.ca) -~~~~~~~~~~~~~~~~~~~~~~ -Added TRUENAME command. - - -19 Jul 1998 (Hans B Pufal) ) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -o Preserve state of echo flag across batch calls. -o Implementation of FOR command - - -20 Jul 1998 (John P Price ) -~~~~~~~~~~~~~~~~~~~~~~ -o Fixed bug in DATE.C. -o Fixed bug in LH.ASM. -o Separated commands into individual files. - - -28 Jul 1998 (John P Price ) -~~~~~~~~~~~~~~~~~~~~~~ -o Added CLS command. -o Put ifdef's around all commands and added include file config.h - Now you can define exact what commands you want to include in - command.com. -o Also added ifdefs for optional features: aliases, command history - and filename completion. -o Added display of available internal commands and options at startup. - - -29 Jul 1998 (Rob Lake rlake@cs.mun.ca) -~~~~~~~~~~~~~~~~~~~~~~ -o changed date.c and time.c, and wrote datefunc.c and timefunc.c to - impliment _dos_getdate, _dos_setdate, _dos_gettime and _dos_settime. - This is the first of many steps to make the shell compatible under - Pacific C. - -30-Jul-1998 (John P Price ) -~~~~~~~~~~~~~~~~~~~~~~ -o Changed filename completion so that a second TAB displays a list of - matching filenames! -o made filename be lower case if last character typed is lower case. -o Moved filename completion code to filecomp.c. -o Change ver command to display email address to report bugs, and the - web page address for updates. -o fixed so that it find_which returns NULL if filename is not - executable (does not have .bat, .com, or .exe extension). Before - command would to execute any file with any extension. (opps!) - -30-Jul-1998 (John P Price ) -~~~~~~~~~~~~~~~~~~~~~~ -o Fixed bug where if you typed something, then hit HOME, then tried to - type something else in insert mode, it locked up. -o Changed default insert mode to on. There should be a way to change - this. Maybe options to doskey command. -o Added VERIFY command - -02-Aug-1998 (Hans B Pufal) ) -~~~~~~~~~~~~~~~~~~~~~~ -o batch.c: Fixed bug in ECHO flag restoration at exit from batch file -o command.c: Fixed return value when called with /C option -o Terminate label on first space character, use only first 8 chars of - label string - -04-Aug-1998 (Hans B Pufal) ) -~~~~~~~~~~~~~~~~~~~~~~ -o call.c: added lines to initialize for pointers. This fixed the - lock-up that happened sometimes when calling a batch file from - another batch file. - -07-Aug-1998 (John P Price ) -~~~~~~~~~~~~~~~~~~~~~~ -o Fixed carrage return output to better match MSDOS with echo on or off. - - -07-Dec-1998 ReactOS CMD version 0.0.1 (Eric Kohl ) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -o First test release. -o Added internal ATTRIB command. - -11-Dec-1998 ReactOS CMD version 0.0.2 (Eric Kohl ) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -o Fixed bug in ALIAS. CMD crashed when you tried to remove an alias. -o Fixed bug in split(). Added freep(). This fixed the DEL command. -o Improved ATTRIB command. -o Added most help texts. -o Fixed recursive DIR ("dir /s"). -o Fixed DATE and TIME command. Now they accept values when used - without parameter. -o Implemented LABEL command. - -05-Jan-1999 ReactOS CMD version 0.0.3 (Eric Kohl ) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -o Added COLOR command and "/t" option. -o Cursor shows insert/overwrite mode. -o COMSPEC environment variable is set upon startup. -o Started COPY command. -o Started MOVE command. -o Added directory stack (PUSHD and POPD commands). -o Added support for file names or paths that contain spaces - (quoted paths / file names). -o Added recursion to ATTRIB command. -o Added locale support for DIR, DATE, TIME and PROMPT. -o Fixed VERIFY. - -10-Feb-1999 ReactOS CMD version 0.0.4 (Eric Kohl ) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -o "?" lists all available commands. -o Most commands are unicode and redirection aware now. -o Input-, Output- and Error-Redirections works with most commands. -o ATTRIB and DEL can handle multiple filenames now. -o Fixed handling of environment variables. -o Added CHCP command. -o Fixed keyboard input bug. -o Rewrote DEL and MOVE commands. - -28-Dec-1999 ReactOS CMD version 0.1 (Eric Kohl ) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -o Cleaned up DIR command. -o Searching for executables in the right order. -o Fixed some little but nasty bugs. -o Added TITLE command. Thanks to Emanuele Aliberti! -o Added "/Q", "/W" and "/Z" options to DEL command. -o Added CHOICE, TIMER, FREE and MEMORY commands. -o Added MSGBOX command (not available under ReactOS). -o Added and fixed missing help texts. -o Fixed bugs in MD and RD that crashed cmd when no directory was specified. -o Improved history support. -o Improved COLOR command. - -09-Apr-2000 ReactOS CMD version 0.1 (EricKohl -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -o Fixed bug in COPY command. CMD crashed if source file didn't exist. - -13-Jul-2000 ReactOS CMD version 0.1.1 (EricKohl -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -o Implemented 'ECHO.' and 'ECHOERR.' commands. diff --git a/rosapps/cmd/if.c b/rosapps/cmd/if.c deleted file mode 100644 index 298dcd3a3df..00000000000 --- a/rosapps/cmd/if.c +++ /dev/null @@ -1,212 +0,0 @@ -/* - * IF.C - if internal batch command. - * - * - * History: - * - * 16 Jul 1998 (Hans B Pufal) - * started. - * - * 16 Jul 1998 (John P Price) - * Seperated commands into individual files. - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 07-Jan-1999 (Eric Kohl ) - * Added help text ("if /?") and cleaned up. - * - * 21-Jan-1999 (Eric Kohl ) - * Unicode and redirection ready! - * - * 01-Sep-1999 (Eric Kohl ) - * Fixed help text. - * - * 17-Feb-2001 (ea) - * IF DEFINED variable command - */ - -#include "config.h" - -#include -#include -#include -#include - -#include "cmd.h" -#include "batch.h" - - -#define X_EXEC 1 -#define X_EMPTY 0x80 - -INT cmd_if (LPTSTR cmd, LPTSTR param) -{ - INT x_flag = 0; /* when set cause 'then' clause to be executed */ - LPTSTR pp; - -#ifdef _DEBUG - DebugPrintf ("cmd_if: (\'%s\', \'%s\'\n", cmd, param); -#endif - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Performs conditional processing in batch programs.\n" - "\n" - " IF [NOT] ERRORLEVEL number command\n" - " IF [NOT] string1==string2 command\n" - " IF [NOT] EXIST filename command\n" - " IF [NOT] DEFINED variable command\n" - "\n" - "NOT Specifies that CMD should carry out the command only if\n" - " the condition is false\n" - "ERRORLEVEL number Specifies a true condition if the last program run returned\n" - " an exit code equal or greater than the number specified.\n" - "command Specifies the command to carry out if the condition is met.\n" - "string1==string2 Specifies a true condition if the specified text strings\n" - " match.\n" - "EXIST filename Specifies a true condition if the specified filename exists.\n" - "DEFINED variable Specifies a true condition if the specified variable is\n" - " defined.")); - return 0; - } - - /* First check if param string begins with word 'not' */ - if (!_tcsnicmp (param, _T("not"), 3) && _istspace (*(param + 3))) - { - x_flag = X_EXEC; /* Remember 'NOT' */ - param += 3; /* Step over 'NOT' */ - while (_istspace (*param)) /* And subsequent spaces */ - param++; - } - - /* Check for 'exist' form */ - if (!_tcsnicmp (param, _T("exist"), 5) && _istspace (*(param + 5))) - { - param += 5; - while (_istspace (*param)) - param++; - - pp = param; - while (*pp && !_istspace (*pp)) - pp++; - - if (*pp) - { - WIN32_FIND_DATA f; - HANDLE hFind; - - *pp++ = _T('\0'); - hFind = FindFirstFile (param, &f); - x_flag ^= (hFind == INVALID_HANDLE_VALUE) ? 0 : X_EXEC; - if (hFind != INVALID_HANDLE_VALUE) - { - FindClose (hFind); - } - } - else - return 0; - } - - /* Check for 'defined' form */ - else if (!_tcsnicmp (param, _T("defined"), 7) && _istspace (*(param + 7))) - { - TCHAR Value [1]; - INT ValueSize = 0; - - param += 7; - /* IF [NOT] DEFINED var COMMAND */ - /* ^ */ - while (_istspace (*param)) - param++; - /* IF [NOT] DEFINED var COMMAND */ - /* ^ */ - pp = param; - while (*pp && !_istspace (*pp)) - pp++; - /* IF [NOT] DEFINED var COMMAND */ - /* ^ */ - if (*pp) - { - *pp++ = _T('\0'); - ValueSize = GetEnvironmentVariable(param, Value, sizeof Value); - x_flag ^= (0 == ValueSize) - ? 0 - : X_EXEC; - x_flag |= X_EMPTY; - } - else - return 0; - } - - /* Check for 'errorlevel' form */ - else if (!_tcsnicmp (param, _T("errorlevel"), 10) && _istspace (*(param + 10))) - { - INT n = 0; - - pp = param + 10; - while (_istspace (*pp)) - pp++; - - while (_istdigit (*pp)) - n = n * 10 + (*pp++ - _T('0')); - - x_flag ^= (nErrorLevel < n) ? 0 : X_EXEC; - - x_flag |= X_EMPTY; /* Syntax error if comd empty */ - } - - /* Check that '==' is present, syntax error if not */ - else if (NULL == (pp = _tcsstr (param, _T("==")))) - { - error_syntax (NULL); - return 1; - } - - else - { - /* Change first '='to space to terminate comparison loop */ - - *pp = _T(' '); /* Need a space to terminate comparison loop */ - pp += 2; /* over '==' */ - while (_istspace (*pp)) /* Skip subsequent spaces */ - pp++; - - _tcscat (pp, _T(" ")); /* Add one space to ensure comparison ends */ - - while (*param == *pp) /* Comparison loop */ - { - if (_istspace (*param)) /* Terminates on space */ - break; - - param++, pp++; - } - - if (x_flag ^= (*param != *pp) ? 0 : X_EXEC) - { - while (*pp && !_istspace (*pp)) /* Find first space, */ - pp++; - - x_flag |= X_EMPTY; - } - } - - if (x_flag & X_EMPTY) - { - while (_istspace (*pp)) /* Then skip spaces */ - pp++; - - if (*pp == _T('\0')) /* If nothing left then syntax err */ - { - error_syntax (NULL); - return 1; - } - } - - if (x_flag & X_EXEC) - { - ParseCommandLine (pp); - } - - return 0; -} diff --git a/rosapps/cmd/internal.c b/rosapps/cmd/internal.c deleted file mode 100644 index 6f74ab50434..00000000000 --- a/rosapps/cmd/internal.c +++ /dev/null @@ -1,468 +0,0 @@ -/* - * INTERNAL.C - command.com internal commands. - * - * - * History: - * - * 17/08/94 (Tim Norman) - * started. - * - * 08/08/95 (Matt Rains) - * i have cleaned up the source code. changes now bring this source into - * guidelines for recommended programming practice. - * - * cd() - * started. - * - * dir() - * i have added support for file attributes to the DIR() function. the - * routine adds "d" (directory) and "r" (read only) output. files with the - * system attribute have the filename converted to lowercase. files with - * the hidden attribute are not displayed. - * - * i have added support for directorys. now if the directory attribute is - * detected the file size if replaced with the string "". - * - * ver() - * started. - * - * md() - * started. - * - * rd() - * started. - * - * del() - * started. - * - * does not support wildcard selection. - * - * todo: add delete directory support. - * add recursive directory delete support. - * - * ren() - * started. - * - * does not support wildcard selection. - * - * todo: add rename directory support. - * - * a general structure has been used for the cd, rd and md commands. this - * will be better in the long run. it is too hard to maintain such diverse - * functions when you are involved in a group project like this. - * - * 12/14/95 (Tim Norman) - * fixed DIR so that it will stick \*.* if a directory is specified and - * that it will stick on .* if a file with no extension is specified or - * *.* if it ends in a \ - * - * 1/6/96 (Tim Norman) - * added an isatty call to DIR so it won't prompt for keypresses unless - * stdin and stdout are the console. - * - * changed parameters to be mutually consistent to make calling the - * functions easier - * - * rem() - * started. - * - * doskey() - * started. - * - * 01/22/96 (Oliver Mueller) - * error messages are now handled by perror. - * - * 02/05/96 (Tim Norman) - * converted all functions to accept first/rest parameters - * - * 07/26/96 (Tim Norman) - * changed return values to int instead of void - * - * path() started. - * - * 12/23/96 (Aaron Kaufman) - * rewrote dir() to mimic MS-DOS's dir - * - * 01/28/97 (Tim Norman) - * cleaned up Aaron's DIR code - * - * 06/13/97 (Tim Norman) - * moved DIR code to dir.c - * re-implemented Aaron's DIR code - * - * 06/14/97 (Steffan Kaiser) - * ctrl-break handling - * bug fixes - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 03-Dec-1998 (Eric Kohl ) - * Replaced DOS calls by Win32 calls. - * - * 08-Dec-1998 (Eric Kohl ) - * Added help texts ("/?"). - * - * 18-Dec-1998 (Eric Kohl ) - * Added support for quoted arguments (cd "program files"). - * - * 07-Jan-1999 (Eric Kohl ) - * Clean up. - * - * 26-Jan-1999 (Eric Kohl ) - * Replaced remaining CRT io functions by Win32 io functions. - * Unicode safe! - * - * 30-Jan-1999 (Eric Kohl ) - * Added "cd -" feature. Changes to the previous directory. - * - * 15-Mar-1999 (Eric Kohl ) - * Fixed bug in "cd -" feature. If the previous directory was a root - * directory, it was ignored. - * - * 23-Feb-2001 (Carl Nettelblad ) - * Improved chdir/cd command. - */ - -#include "config.h" - -#include -#include -#include -#include -#include - -#include "cmd.h" - - -#ifdef INCLUDE_CMD_CHDIR - -static LPTSTR lpLastPath; - - -VOID InitLastPath (VOID) -{ - lpLastPath = NULL; -} - - -VOID FreeLastPath (VOID) -{ - if (lpLastPath) - free (lpLastPath); -} - -/* - * CD / CHDIR - * - */ -INT cmd_chdir (LPTSTR cmd, LPTSTR param) -{ - LPTSTR dir; /* pointer to the directory to change to */ - LPTSTR lpOldPath; - LPTSTR endofstring; /* pointer to the null character in the directory to change to */ - LPTSTR lastquote; /* pointer to the last quotation mark in the directory to change to */ - - /*Should we better declare a variable containing _tsclen(dir) ? It's used a few times, - but on the other hand paths are generally not very long*/ - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Changes the current directory or displays it's name\n\n" - "CHDIR [drive:][path]\n" - "CHDIR[..|-]\n" - "CD [drive:][path]\n" - "CD[..|-]\n\n" - " .. parent directory\n" - " - previous directory\n\n" - "Type CD drive: to display the current directory on the specified drive.\n" - "Type CD without a parameter to display the current drive and directory.")); - return 0; - } - - /* The whole param string is our parameter these days. The only thing we do is eliminating every quotation mark */ - /* Is it safe to change the characters param is pointing to? I presume it is, as there doesn't seem to be any - post-processing of it after the function call (what would that accomplish?) */ - - dir=param; - endofstring=dir+_tcslen(dir); - - while ((lastquote = _tcsrchr(dir,'\"'))) - { - endofstring--; - memmove(lastquote,lastquote+1,endofstring-lastquote); - *endofstring=_T('\0'); - } - - /* if doing a CD and no parameters given, print out current directory */ - if (!dir || !dir[0]) - { - TCHAR szPath[MAX_PATH]; - - GetCurrentDirectory (MAX_PATH, szPath); - - ConOutPuts (szPath); - - - return 0; - } - - if (dir && _tcslen (dir) == 1 && *dir == _T('-')) - { - if (lpLastPath) - dir = lpLastPath; - else - return 0; - } - else if (dir && _tcslen (dir)==2 && dir[1] == _T(':')) - { - TCHAR szRoot[3] = _T("A:"); - TCHAR szPath[MAX_PATH]; - - szRoot[0] = _totupper (dir[0]); - GetFullPathName (szRoot, MAX_PATH, szPath, NULL); - - /* PathRemoveBackslash */ - if (_tcslen (szPath) > 3) - { - LPTSTR p = _tcsrchr (szPath, _T('\\')); - *p = _T('\0'); - } - - ConOutPuts (szPath); - - - return 0; - } - - /* remove trailing \ if any, but ONLY if dir is not the root dir */ - if (_tcslen (dir) > 3 && dir[_tcslen (dir) - 1] == _T('\\')) - dir[_tcslen(dir) - 1] = _T('\0'); - - - /* store current directory */ - lpOldPath = (LPTSTR)malloc (MAX_PATH * sizeof(TCHAR)); - GetCurrentDirectory (MAX_PATH, lpOldPath); - - if (!SetCurrentDirectory (dir)) - { - ErrorMessage (GetLastError(), _T("CD")); - - /* throw away current directory */ - free (lpOldPath); - lpOldPath = NULL; - - return 1; - } - else - { - GetCurrentDirectory(MAX_PATH, dir); - if (dir[0]!=lpOldPath[0]) - { - SetCurrentDirectory(lpOldPath); - free(lpOldPath); - } - else - { - if (lpLastPath) - free (lpLastPath); - lpLastPath = lpOldPath; - } - } - - - return 0; -} -#endif - - - -#ifdef INCLUDE_CMD_MKDIR -/* - * MD / MKDIR - * - */ -INT cmd_mkdir (LPTSTR cmd, LPTSTR param) -{ - LPTSTR dir; /* pointer to the directory to change to */ - LPTSTR place; /* used to search for the \ when no space is used */ - LPTSTR *p = NULL; - INT argc; - - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Creates a directory.\n\n" - "MKDIR [drive:]path\nMD [drive:]path")); - return 0; - } - - - /* check if there is no space between the command and the path */ - if (param[0] == _T('\0')) - { - /* search for the \ or . so that both short & long names will work */ - for (place = cmd; *place; place++) - if (*place == _T('.') || *place == _T('\\')) - break; - - if (*place) - dir = place; - else - /* signal that there are no parameters */ - dir = NULL; - } - else - { - p = split (param, &argc, FALSE); - if (argc > 1) - { - /*JPP 20-Jul-1998 use standard error message */ - error_too_many_parameters (param); - freep (p); - return 1; - } - else - dir = p[0]; - } - - if (!dir) - { - ConErrPrintf (_T("Required parameter missing\n")); - return 1; - } - - /* remove trailing \ if any, but ONLY if dir is not the root dir */ - if (_tcslen (dir) >= 2 && dir[_tcslen (dir) - 1] == _T('\\')) - dir[_tcslen(dir) - 1] = _T('\0'); - - if (!CreateDirectory (dir, NULL)) - { - ErrorMessage (GetLastError(), _T("MD")); - - freep (p); - return 1; - } - - freep (p); - - return 0; -} -#endif - - -#ifdef INCLUDE_CMD_RMDIR -/* - * RD / RMDIR - * - */ -INT cmd_rmdir (LPTSTR cmd, LPTSTR param) -{ - LPTSTR dir; /* pointer to the directory to change to */ - LPTSTR place; /* used to search for the \ when no space is used */ - - LPTSTR *p = NULL; - INT argc; - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Removes a directory.\n\n" - "RMDIR [drive:]path\nRD [drive:]path")); - return 0; - } - - /* check if there is no space between the command and the path */ - if (param[0] == _T('\0')) - { - /* search for the \ or . so that both short & long names will work */ - for (place = cmd; *place; place++) - if (*place == _T('.') || *place == _T('\\')) - break; - - if (*place) - dir = place; - else - /* signal that there are no parameters */ - dir = NULL; - } - else - { - p = split (param, &argc, FALSE); - if (argc > 1) - { - /*JPP 20-Jul-1998 use standard error message */ - error_too_many_parameters (param); - freep (p); - return 1; - } - else - dir = p[0]; - } - - if (!dir) - { - ConErrPrintf (_T("Required parameter missing\n")); - return 1; - } - - /* remove trailing \ if any, but ONLY if dir is not the root dir */ - if (_tcslen (dir) >= 2 && dir[_tcslen (dir) - 1] == _T('\\')) - dir[_tcslen(dir) - 1] = _T('\0'); - - if (!RemoveDirectory (dir)) - { - ErrorMessage (GetLastError(), _T("RD")); - freep (p); - - return 1; - } - - freep (p); - - return 0; -} -#endif - - -/* - * set the exitflag to true - * - */ -INT CommandExit (LPTSTR cmd, LPTSTR param) -{ - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Exits the command line interpreter.\n\nEXIT")); - return 0; - } - - bExit = TRUE; - return 0; -} - - -#ifdef INCLUDE_CMD_REM -/* - * does nothing - * - */ -INT CommandRem (LPTSTR cmd, LPTSTR param) -{ - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Starts a comment line in a batch file.\n\n" - "REM [Comment]")); - } - - return 0; -} -#endif /* INCLUDE_CMD_REM */ - - -INT CommandShowCommands (LPTSTR cmd, LPTSTR param) -{ - PrintCommandList (); - return 0; -} - -/* EOF */ diff --git a/rosapps/cmd/label.c b/rosapps/cmd/label.c deleted file mode 100644 index b7062f002a3..00000000000 --- a/rosapps/cmd/label.c +++ /dev/null @@ -1,120 +0,0 @@ -/* - * LABEL.C - label internal command. - * - * - * History: - * - * 10-Dec-1998 (Eric Kohl ) - * Started. - * - * 11-Dec-1998 (Eric Kohl ) - * Finished. - * - * 19-Jan-1998 (Eric Kohl ) - * Unicode ready! - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_LABEL - -#include -#include -#include -#include - -#include "cmd.h" - - -INT cmd_label (LPTSTR cmd, LPTSTR param) -{ - TCHAR szRootPath[] = _T("A:\\"); - TCHAR szLabel[80]; - TCHAR szOldLabel[80]; - DWORD dwSerialNr; - LPTSTR *arg; - INT args; - - /* set empty label string */ - szLabel[0] = _T('\0'); - - /* print help */ - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Displays or changes drive label.\n\n" - "LABEL [drive:][label]")); - return 0; - } - - /* get parameters */ - arg = split (param, &args, FALSE); - - if (args > 2) - { - /* too many parameters */ - error_too_many_parameters (arg[args - 1]); - freep (arg); - return 1; - } - - if (args == 0) - { - /* get label of current drive */ - TCHAR szCurPath[MAX_PATH]; - GetCurrentDirectory (MAX_PATH, szCurPath); - szRootPath[0] = szCurPath[0]; - } - else - { - if ((_tcslen (arg[0]) >= 2) && (arg[0][1] == _T(':'))) - { - szRootPath[0] = toupper (*arg[0]); - if (args == 2) - _tcsncpy (szLabel, arg[1], 12); - } - else - { - TCHAR szCurPath[MAX_PATH]; - GetCurrentDirectory (MAX_PATH, szCurPath); - szRootPath[0] = szCurPath[0]; - _tcsncpy (szLabel, arg[0], 12); - } - } - - /* check root path */ - if (!IsValidPathName (szRootPath)) - { - error_invalid_drive (); - freep (arg); - return 1; - } - - GetVolumeInformation (szRootPath, szOldLabel, 80, &dwSerialNr, - NULL, NULL, NULL, 0); - - /* print drive info */ - ConOutPrintf (_T("Volume in drive %c:"), _totupper (szRootPath[0])); - - if (szOldLabel[0] != _T('\0')) - ConOutPrintf (_T(" is %s\n"), szOldLabel); - else - ConOutPrintf (_T(" has no label\n")); - - /* print the volume serial number */ - ConOutPrintf (_T("Volume Serial Number is %04X-%04X\n"), - HIWORD(dwSerialNr), LOWORD(dwSerialNr)); - - if (szLabel[0] == _T('\0')) - { - ConOutPrintf (_T("Drive label (11 Characters, ENTER if none)? ")); - ConInString (szLabel, 80); - } - - SetVolumeLabel (szRootPath, szLabel); - - freep (arg); - - return 0; -} - -#endif /* INCLUDE_CMD_LABEL */ diff --git a/rosapps/cmd/license.txt b/rosapps/cmd/license.txt deleted file mode 100644 index c4fb365c774..00000000000 --- a/rosapps/cmd/license.txt +++ /dev/null @@ -1,342 +0,0 @@ - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) 19yy - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. - - diff --git a/rosapps/cmd/locale.c b/rosapps/cmd/locale.c deleted file mode 100644 index 2751719b642..00000000000 --- a/rosapps/cmd/locale.c +++ /dev/null @@ -1,184 +0,0 @@ -/* - * LOCALE.C - locale handling. - * - * - * History: - * - * 09-Jan-1999 (Eric Kohl ) - * Started. - * - * 20-Jan-1999 (Eric Kohl ) - * Unicode safe! - */ - -#include "config.h" - -#include -#include -#include -#include - -#include "cmd.h" - - -TCHAR cDateSeparator; -TCHAR cTimeSeparator; -TCHAR cThousandSeparator; -TCHAR cDecimalSeparator; -INT nDateFormat; -INT nTimeFormat; -TCHAR aszDayNames[7][8]; -INT nNumberGroups; - - -VOID InitLocale (VOID) -{ -#ifdef LOCALE_WINDOWS - TCHAR szBuffer[256]; - INT i; - - /* date settings */ - GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_SDATE, szBuffer, 256); - CharToOem (szBuffer, szBuffer); - cDateSeparator = szBuffer[0]; - GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_IDATE, szBuffer, 256); - nDateFormat = _ttoi (szBuffer); - - /* time settings */ - GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_STIME, szBuffer, 256); - CharToOem (szBuffer, szBuffer); - cTimeSeparator = szBuffer[0]; - GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_ITIME, szBuffer, 256); - nTimeFormat = _ttoi (szBuffer); - - /* number settings */ - GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, szBuffer, 256); - CharToOem (szBuffer, szBuffer); - cThousandSeparator = szBuffer[0]; - GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, szBuffer, 256); - CharToOem (szBuffer, szBuffer); - cDecimalSeparator = szBuffer[0]; - GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_SGROUPING, szBuffer, 256); - nNumberGroups = _ttoi (szBuffer); - - /* days of week */ - for (i = 0; i < 7; i++) - { - GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_SABBREVDAYNAME1 + i, szBuffer, 256); - CharToOem (szBuffer, szBuffer); - _tcscpy (aszDayNames[(i+1)%7], szBuffer); /* little hack */ - } -#endif - -#ifdef LOCALE_GERMAN - LPTSTR names [7] = {_T("So"), _T("Mo"), _T("Di"), _T("Mi"), _T("Do"), _T("Fr"), _T("Sa")}; - INT i; - - /* date settings */ - cDateSeparator = '.'; - nDateFormat = 1; /* ddmmyy */ - - /* time settings */ - cTimeSeparator = ':'; - nTimeFormat = 1; /* 24 hour */ - - /* number settings */ - cThousandSeparator = '.'; - cDecimalSeparator = ','; - nNumberGroups = 3; - - /* days of week */ - for (i = 0; i < 7; i++) - _tcscpy (aszDayNames[i], names[i]); -#endif - -#ifdef LOCALE_DEFAULT - LPTSTR names [7] = {_T("Sun"), _T("Mon"), _T("Tue"), _T("Wed"), _T("Thu"), _T("Fri"), _T("Sat")}; - INT i; - - /* date settings */ - cDateSeparator = '-'; - nDateFormat = 0; /* mmddyy */ - - /* time settings */ - cTimeSeparator = ':'; - nTimeFormat = 0; /* 12 hour */ - - /* number settings */ - cThousandSeparator = ','; - cDecimalSeparator = '.'; - nNumberGroups = 3; - - /* days of week */ - for (i = 0; i < 7; i++) - _tcscpy (aszDayNames[i], names[i]); -#endif -} - - -VOID PrintDate (VOID) -{ -#ifdef __REACTOS__ - SYSTEMTIME st; - - GetLocalTime (&st); - - switch (nDateFormat) - { - case 0: /* mmddyy */ - default: - ConOutPrintf (_T("%s %02d%c%02d%c%04d"), - aszDayNames[st.wDayOfWeek], st.wMonth, cDateSeparator, st.wDay, cDateSeparator, st.wYear); - break; - - case 1: /* ddmmyy */ - ConOutPrintf (_T("%s %02d%c%02d%c%04d"), - aszDayNames[st.wDayOfWeek], st.wDay, cDateSeparator, st.wMonth, cDateSeparator, st.wYear); - break; - - case 2: /* yymmdd */ - ConOutPrintf (_T("%s %04d%c%02d%c%02d"), - aszDayNames[st.wDayOfWeek], st.wYear, cDateSeparator, st.wMonth, cDateSeparator, st.wDay); - break; - } -#else - TCHAR szDate[32]; - - GetDateFormat (LOCALE_USER_DEFAULT, DATE_SHORTDATE, NULL, NULL, - szDate, sizeof (szDate)); - ConOutPrintf (_T("%s"), szDate); -#endif -} - - -VOID PrintTime (VOID) -{ -#ifdef __REACTOS__ - SYSTEMTIME st; - - GetLocalTime (&st); - - switch (nTimeFormat) - { - case 0: /* 12 hour format */ - default: - ConOutPrintf (_T("Current time is %2d%c%02d%c%02d%c%02d%c\n"), - (st.wHour == 0 ? 12 : (st.wHour <= 12 ? st.wHour : st.wHour - 12)), - cTimeSeparator, st.wMinute, cTimeSeparator, st.wSecond, cDecimalSeparator, - st.wMilliseconds / 10, (st.wHour <= 11 ? 'a' : 'p')); - break; - - case 1: /* 24 hour format */ - ConOutPrintf (_T("Current time is %2d%c%02d%c%02d%c%02d\n"), - st.wHour, cTimeSeparator, st.wMinute, cTimeSeparator, - st.wSecond, cDecimalSeparator, st.wMilliseconds / 10); - break; - } -#else - TCHAR szTime[32]; - - GetTimeFormat (LOCALE_USER_DEFAULT, 0, NULL, NULL, - szTime, sizeof (szTime)); - ConOutPrintf (_T("Current time is: %s\n"), szTime); -#endif -} diff --git a/rosapps/cmd/makefile b/rosapps/cmd/makefile deleted file mode 100644 index beec15e74f6..00000000000 --- a/rosapps/cmd/makefile +++ /dev/null @@ -1,38 +0,0 @@ -# -# ReactOS CMD -# -# Makefile -# - -PATH_TO_TOP = ../../reactos - -TARGET_TYPE = program - -TARGET_APPTYPE = console - -TARGET_NAME = cmd - -WINE_MODE = yes - -WINE_RC = $(TARGET_NAME) - -WINE_INCLUDE = ./ - -TARGET_SDKLIBS = \ - kernel32.a \ - user32.a - -TARGET_OBJECTS = \ - cmd.o attrib.o alias.o batch.o beep.o call.o chcp.o choice.o \ - cls.o cmdinput.o cmdtable.o color.o console.o copy.o date.o del.o \ - delay.o dir.o dirstack.o echo.o error.o filecomp.o for.o free.o \ - goto.o history.o if.o internal.o label.o locale.o memory.o misc.o \ - move.o msgbox.o path.o pause.o prompt.o redir.o ren.o screen.o \ - set.o shift.o start.o strtoclr.o time.o timer.o title.o type.o \ - ver.o verify.o vol.o where.o window.o #cmd.coff - -include $(PATH_TO_TOP)/rules.mak - -include $(TOOLS_PATH)/helper.mk - -# EOF diff --git a/rosapps/cmd/memory.c b/rosapps/cmd/memory.c deleted file mode 100644 index 42d102877ab..00000000000 --- a/rosapps/cmd/memory.c +++ /dev/null @@ -1,110 +0,0 @@ -/* - * MEMORY.C - internal command. - * - * - * History: - * - * 01-Sep-1999 (Eric Kohl) - * Started. - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_MEMORY - -#include -#include -#include -#include - -#include "cmd.h" - - -/* - * convert - * - * insert commas into a number - */ -static INT -ConvertDWord (DWORD num, LPTSTR des, INT len, BOOL bSeparator) -{ - TCHAR temp[32]; - INT c = 0; - INT n = 0; - - if (num == 0) - { - des[0] = _T('0'); - des[1] = _T('\0'); - n = 1; - } - else - { - temp[31] = 0; - while (num > 0) - { - if (bSeparator && (((c + 1) % (nNumberGroups + 1)) == 0)) - temp[30 - c++] = cThousandSeparator; - temp[30 - c++] = (TCHAR)(num % 10) + _T('0'); - num /= 10; - } - - for (n = 0; n <= c; n++) - des[n] = temp[31 - c + n]; - } - - return n; -} - - -INT CommandMemory (LPTSTR cmd, LPTSTR param) -{ - MEMORYSTATUS ms; - TCHAR szMemoryLoad[20]; - TCHAR szTotalPhys[20]; - TCHAR szAvailPhys[20]; - TCHAR szTotalPageFile[20]; - TCHAR szAvailPageFile[20]; - TCHAR szTotalVirtual[20]; - TCHAR szAvailVirtual[20]; - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Displays the amount of system memory.\n" - "\n" - "MEMORY")); - return 0; - } - - ms.dwLength = sizeof(MEMORYSTATUS); - - GlobalMemoryStatus (&ms); - - ConvertDWord (ms.dwMemoryLoad, szMemoryLoad, 20, FALSE); - ConvertDWord (ms.dwTotalPhys, szTotalPhys, 20, TRUE); - ConvertDWord (ms.dwAvailPhys, szAvailPhys, 20, TRUE); - ConvertDWord (ms.dwTotalPageFile, szTotalPageFile, 20, TRUE); - ConvertDWord (ms.dwAvailPageFile, szAvailPageFile, 20, TRUE); - ConvertDWord (ms.dwTotalVirtual, szTotalVirtual, 20, TRUE); - ConvertDWord (ms.dwAvailVirtual, szAvailVirtual, 20, TRUE); - - ConOutPrintf (_T("\n" - " %12s%% memory load.\n" - "\n" - " %13s bytes total physical RAM.\n" - " %13s bytes available physical RAM.\n" - "\n" - " %13s bytes total page file.\n" - " %13s bytes available page file.\n" - "\n" - " %13s bytes total virtual memory.\n" - " %13s bytes available virtual memory.\n"), - szMemoryLoad, szTotalPhys, szAvailPhys, szTotalPageFile, - szAvailPageFile, szTotalVirtual, szAvailVirtual); - - return 0; -} - -#endif /* INCLUDE_CMD_MEMORY */ - -/* EOF */ diff --git a/rosapps/cmd/misc.c b/rosapps/cmd/misc.c deleted file mode 100644 index 86434638552..00000000000 --- a/rosapps/cmd/misc.c +++ /dev/null @@ -1,598 +0,0 @@ -/* - * MISC.C - misc. functions. - * - * - * History: - * - * 07/12/98 (Rob Lake) - * started - * - * 07/13/98 (Rob Lake) - * moved functions in here - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 18-Dec-1998 (Eric Kohl ) - * Changed split() to accept quoted arguments. - * Removed parse_firstarg(). - * - * 23-Jan-1999 (Eric Kohl ) - * Fixed an ugly bug in split(). In rare cases (last character - * of the string is a space) it ignored the NULL character and - * tried to add the following to the argument list. - * - * 28-Jan-1999 (Eric Kohl ) - * FileGetString() seems to be working now. - * - * 06-Nov-1999 (Eric Kohl ) - * Added PagePrompt() and FilePrompt(). - */ - -#include "config.h" - -#include -#include -#include -#include -#include -#include - -#include "cmd.h" - - -/* - * get a character out-of-band and honor Ctrl-Break characters - */ -TCHAR cgetchar (VOID) -{ - HANDLE hInput = GetStdHandle (STD_INPUT_HANDLE); - INPUT_RECORD irBuffer; - DWORD dwRead; - - do - { - ReadConsoleInput (hInput, &irBuffer, 1, &dwRead); - if ((irBuffer.EventType == KEY_EVENT) && - (irBuffer.Event.KeyEvent.bKeyDown == TRUE)) - { - if ((irBuffer.Event.KeyEvent.dwControlKeyState & - (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED)) & - (irBuffer.Event.KeyEvent.wVirtualKeyCode == 'C')) - bCtrlBreak = TRUE; - - break; - } - } - while (TRUE); - -#ifndef _UNICODE - return irBuffer.Event.KeyEvent.uChar.AsciiChar; -#else - return irBuffer.Event.KeyEvent.uChar.UnicodeChar; -#endif /* _UNICODE */ -} - - -/* - * Check if Ctrl-Break was pressed during the last calls - */ - -BOOL CheckCtrlBreak (INT mode) -{ - static BOOL bLeaveAll = FALSE; /* leave all batch files */ - TCHAR c; - - switch (mode) - { - case BREAK_OUTOFBATCH: - bLeaveAll = 0; - return FALSE; - - case BREAK_BATCHFILE: - if (bLeaveAll) - return TRUE; - - if (!bCtrlBreak) - return FALSE; - - /* we need to be sure the string arrives on the screen! */ - do - ConOutPuts (_T("\r\nCtrl-Break pressed. Cancel batch file? (Yes/No/All) ")); - while (!_tcschr ("YNA\3", c = _totupper (cgetchar())) || !c); - - ConOutPuts (_T("\r\n")); - - if (c == _T('N')) - return bCtrlBreak = FALSE; /* ignore */ - - /* leave all batch files */ - bLeaveAll = ((c == _T('A')) || (c == _T('\3'))); - break; - - case BREAK_INPUT: - if (!bCtrlBreak) - return FALSE; - break; - } - - /* state processed */ - bCtrlBreak = FALSE; - return TRUE; -} - -/* add new entry for new argument */ -static BOOL add_entry (LPINT ac, LPTSTR **arg, LPCTSTR entry) -{ - LPTSTR q; - LPTSTR *oldarg; - - q = malloc ((_tcslen(entry) + 1) * sizeof (TCHAR)); - if (NULL == q) - { - return FALSE; - } - _tcscpy (q, entry); - - oldarg = *arg; - *arg = realloc (oldarg, (*ac + 2) * sizeof (LPTSTR)); - if (NULL == *arg) - { - *arg = oldarg; - return FALSE; - } - - /* save new entry */ - (*arg)[*ac] = q; - (*arg)[++(*ac)] = NULL; - - return TRUE; -} - -static BOOL expand (LPINT ac, LPTSTR **arg, LPCTSTR pattern) -{ - HANDLE hFind; - WIN32_FIND_DATA FindData; - BOOL ok; - LPCTSTR pathend; - LPTSTR dirpart, fullname; - - pathend = _tcsrchr (pattern, _T('\\')); - if (NULL != pathend) - { - dirpart = malloc((pathend - pattern + 2) * sizeof(TCHAR)); - if (NULL == dirpart) - { - return FALSE; - } - memcpy(dirpart, pattern, pathend - pattern + 1); - dirpart[pathend - pattern + 1] = '\0'; - } - else - { - dirpart = NULL; - } - hFind = FindFirstFile (pattern, &FindData); - if (INVALID_HANDLE_VALUE != hFind) - { - do - { - if (NULL != dirpart) - { - fullname = malloc((_tcslen(dirpart) + _tcslen(FindData.cFileName) + 1) * sizeof(TCHAR)); - if (NULL == fullname) - { - ok = FALSE; - } - else - { - _tcscat (_tcscpy (fullname, dirpart), FindData.cFileName); - ok = add_entry(ac, arg, fullname); - free (fullname); - } - } - else - { - ok = add_entry(ac, arg, FindData.cFileName); - } - } while (FindNextFile (hFind, &FindData) && ok); - FindClose (hFind); - } - else - { - ok = add_entry(ac, arg, pattern); - } - - if (NULL != dirpart) - { - free (dirpart); - } - - return ok; -} - -/* - * split - splits a line up into separate arguments, deliminators - * are spaces and slashes ('/'). - */ - -LPTSTR *split (LPTSTR s, LPINT args, BOOL expand_wildcards) -{ - LPTSTR *arg; - LPTSTR start; - LPTSTR q; - INT ac; - INT len; - BOOL bQuoted = FALSE; - - arg = malloc (sizeof (LPTSTR)); - if (!arg) - return NULL; - *arg = NULL; - - ac = 0; - while (*s) - { - /* skip leading spaces */ - while (*s && (_istspace (*s) || _istcntrl (*s))) - ++s; - - /* if quote (") then set bQuoted */ - if (*s == _T('\"')) - { - ++s; - bQuoted = TRUE; - } - - start = s; - - /* the first character can be '/' */ - if (*s == _T('/')) - ++s; - - /* skip to next word delimiter or start of next option */ - if (bQuoted) - { - while (_istprint (*s) && (*s != _T('\"')) && (*s != _T('/'))) - ++s; - } - else - { - while (_istprint (*s) && !_istspace (*s) && (*s != _T('/'))) - ++s; - } - - /* a word was found */ - if (s != start) - { - q = malloc (((len = s - start) + 1) * sizeof (TCHAR)); - if (!q) - { - return NULL; - } - memcpy (q, start, len * sizeof (TCHAR)); - q[len] = _T('\0'); - if (expand_wildcards && _T('/') != *start && - (NULL != _tcschr(q, _T('*')) || NULL != _tcschr(q, _T('?')))) - { - if (! expand(&ac, &arg, q)) - { - free (q); - freep (arg); - return NULL; - } - } - else - { - if (! add_entry(&ac, &arg, q)) - { - free (q); - freep (arg); - return NULL; - } - } - free (q); - } - - /* adjust string pointer if quoted (") */ - if (bQuoted) - { - ++s; - bQuoted = FALSE; - } - } - - *args = ac; - - return arg; -} - - -/* - * freep -- frees memory used for a call to split - * - */ -VOID freep (LPTSTR *p) -{ - LPTSTR *q; - - if (!p) - return; - - q = p; - while (*q) - free(*q++); - - free(p); -} - - -LPTSTR stpcpy (LPTSTR dest, LPTSTR src) -{ - _tcscpy (dest, src); - return (dest + _tcslen (src)); -} - - - -/* - * Checks if a path is valid (accessible) - */ - -BOOL IsValidPathName (LPCTSTR pszPath) -{ - TCHAR szOldPath[MAX_PATH]; - BOOL bResult; - - GetCurrentDirectory (MAX_PATH, szOldPath); - bResult = SetCurrentDirectory (pszPath); - - SetCurrentDirectory (szOldPath); - - return bResult; -} - - -/* - * Checks if a file exists (accessible) - */ - -BOOL IsValidFileName (LPCTSTR pszPath) -{ - return (GetFileAttributes (pszPath) != 0xFFFFFFFF); -} - - -BOOL IsValidDirectory (LPCTSTR pszPath) -{ - return (GetFileAttributes (pszPath) & FILE_ATTRIBUTE_DIRECTORY); -} - - -BOOL FileGetString (HANDLE hFile, LPTSTR lpBuffer, INT nBufferLength) -{ - LPTSTR lpString; - TCHAR ch; - DWORD dwRead; - - lpString = lpBuffer; - - while ((--nBufferLength > 0) && - ReadFile(hFile, &ch, 1, &dwRead, NULL) && dwRead) - { - if (ch == _T('\r')) - { - /* overread '\n' */ - ReadFile (hFile, &ch, 1, &dwRead, NULL); - break; - } - *lpString++ = ch; - } - - if (!dwRead && lpString == lpBuffer) - return FALSE; - - *lpString++ = _T('\0'); - - return TRUE; -} - -#ifndef __REACTOS__ -/* - * GetConsoleWindow - returns the handle to the current console window - */ -HWND GetConsoleWindow (VOID) -{ - TCHAR original[256]; - TCHAR temp[256]; - HWND h=0; - - if(h) - return h; - - GetConsoleTitle (original, sizeof(original)); - - _tcscpy (temp, original); - _tcscat (temp, _T("-xxx ")); - - if (FindWindow (0, temp) == NULL ) - { - SetConsoleTitle (temp); - Sleep (0); - - while(!(h = FindWindow (0, temp))) - ; - - SetConsoleTitle (original); - } - - return h; -} -#endif - - -INT PagePrompt (VOID) -{ - INPUT_RECORD ir; - - ConOutPrintf ("Press a key to continue...\n"); - - RemoveBreakHandler (); - ConInDisable (); - - do - { - ConInKey (&ir); - } - while ((ir.Event.KeyEvent.wVirtualKeyCode == VK_SHIFT) || - (ir.Event.KeyEvent.wVirtualKeyCode == VK_MENU) || - (ir.Event.KeyEvent.wVirtualKeyCode == VK_CONTROL)); - - AddBreakHandler (); - ConInEnable (); - - if ((ir.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE) || - ((ir.Event.KeyEvent.wVirtualKeyCode == 'C') && - (ir.Event.KeyEvent.dwControlKeyState & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED)))) - return PROMPT_BREAK; - - return PROMPT_YES; -} - - -INT FilePromptYN (LPTSTR szFormat, ...) -{ - TCHAR szOut[512]; - va_list arg_ptr; -// TCHAR cKey = 0; -// LPTSTR szKeys = _T("yna"); - - TCHAR szIn[10]; - LPTSTR p; - - va_start (arg_ptr, szFormat); - _vstprintf (szOut, szFormat, arg_ptr); - va_end (arg_ptr); - - ConOutPrintf (szFormat); - -/* preliminary fix */ - ConInString (szIn, 10); - ConOutPrintf (_T("\n")); - - _tcsupr (szIn); - for (p = szIn; _istspace (*p); p++) - ; - - if (*p == _T('Y')) - return PROMPT_YES; - else if (*p == _T('N')) - return PROMPT_NO; -#if 0 - else if (*p == _T('\03')) - return PROMPT_BREAK; -#endif - - return PROMPT_NO; - - -/* unfinished sollution */ -#if 0 - RemoveBreakHandler (); - ConInDisable (); - - do - { - ConInKey (&ir); - cKey = _totlower (ir.Event.KeyEvent.uChar.AsciiChar); - if (_tcschr (szKeys, cKey[0]) == NULL) - cKey = 0; - - - } - while ((ir.Event.KeyEvent.wVirtualKeyCode == VK_SHIFT) || - (ir.Event.KeyEvent.wVirtualKeyCode == VK_MENU) || - (ir.Event.KeyEvent.wVirtualKeyCode == VK_CONTROL)); - - AddBreakHandler (); - ConInEnable (); - - if ((ir.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE) || - ((ir.Event.KeyEvent.wVirtualKeyCode == 'C') && - (ir.Event.KeyEvent.dwControlKeyState & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED)))) - return PROMPT_BREAK; - - return PROMPT_YES; -#endif -} - - -INT FilePromptYNA (LPTSTR szFormat, ...) -{ - TCHAR szOut[512]; - va_list arg_ptr; -// TCHAR cKey = 0; -// LPTSTR szKeys = _T("yna"); - - TCHAR szIn[10]; - LPTSTR p; - - va_start (arg_ptr, szFormat); - _vstprintf (szOut, szFormat, arg_ptr); - va_end (arg_ptr); - - ConOutPrintf (szFormat); - -/* preliminary fix */ - ConInString (szIn, 10); - ConOutPrintf (_T("\n")); - - _tcsupr (szIn); - for (p = szIn; _istspace (*p); p++) - ; - - if (*p == _T('Y')) - return PROMPT_YES; - else if (*p == _T('N')) - return PROMPT_NO; - if (*p == _T('A')) - return PROMPT_ALL; -#if 0 - else if (*p == _T('\03')) - return PROMPT_BREAK; -#endif - - return PROMPT_NO; - - -/* unfinished sollution */ -#if 0 - RemoveBreakHandler (); - ConInDisable (); - - do - { - ConInKey (&ir); - cKey = _totlower (ir.Event.KeyEvent.uChar.AsciiChar); - if (_tcschr (szKeys, cKey[0]) == NULL) - cKey = 0; - - - } - while ((ir.Event.KeyEvent.wVirtualKeyCode == VK_SHIFT) || - (ir.Event.KeyEvent.wVirtualKeyCode == VK_MENU) || - (ir.Event.KeyEvent.wVirtualKeyCode == VK_CONTROL)); - - AddBreakHandler (); - ConInEnable (); - - if ((ir.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE) || - ((ir.Event.KeyEvent.wVirtualKeyCode == 'C') && - (ir.Event.KeyEvent.dwControlKeyState & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED)))) - return PROMPT_BREAK; - - return PROMPT_YES; -#endif -} - -/* EOF */ diff --git a/rosapps/cmd/move.c b/rosapps/cmd/move.c deleted file mode 100644 index fd3744f674e..00000000000 --- a/rosapps/cmd/move.c +++ /dev/null @@ -1,265 +0,0 @@ -/* - * MOVE.C - move internal command. - * - * - * History: - * - * 14-Dec-1998 (Eric Kohl ) - * Started. - * - * 18-Jan-1999 (Eric Kohl ) - * Unicode safe! - * Preliminary version!!! - * - * 20-Jan-1999 (Eric Kohl ) - * Redirection safe! - * - * 27-Jan-1999 (Eric Kohl ) - * Added help text ("/?"). - * Added more error checks. - * - * 03-Feb-1999 (Eric Kohl ) - * Added "/N" option. - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_MOVE - -#include -#include -#include -#include - -#include "cmd.h" - - -#define OVERWRITE_NO 0 -#define OVERWRITE_YES 1 -#define OVERWRITE_ALL 2 -#define OVERWRITE_CANCEL 3 - - -static INT Overwrite (LPTSTR fn) -{ - TCHAR inp[10]; - LPTSTR p; - - ConOutPrintf (_T("Overwrite %s (Yes/No/All)? "), fn); - ConInString (inp, 10); - - _tcsupr (inp); - for (p=inp; _istspace (*p); p++) - ; - - if (*p != _T('Y') && *p != _T('A')) - return OVERWRITE_NO; - if (*p == _T('A')) - return OVERWRITE_ALL; - - return OVERWRITE_YES; -} - - - -INT cmd_move (LPTSTR cmd, LPTSTR param) -{ - LPTSTR *arg; - INT argc, i, nFiles; - TCHAR szDestPath[MAX_PATH]; - TCHAR szSrcPath[MAX_PATH]; - BOOL bPrompt = TRUE; - LPTSTR p; - WIN32_FIND_DATA findBuffer; - HANDLE hFile; - LPTSTR pszFile; - BOOL bNothing = FALSE; - - if (!_tcsncmp (param, _T("/?"), 2)) - { -#if 0 - ConOutPuts (_T("Moves files and renames files and directories.\n\n" - "To move one or more files:\n" - "MOVE [/N][/Y|/-Y][drive:][path]filename1[,...] destination\n" - "\n" - "To rename a directory:\n" - "MOVE [/N][/Y|/-Y][drive:][path]dirname1 dirname2\n" - "\n" - " [drive:][path]filename1 Specifies the location and name of the file\n" - " or files you want to move.\n" - " /N Nothing. Don everthing but move files or direcories.\n" - " /Y\n" - " /-Y\n" - "...")); -#else - ConOutPuts (_T("Moves files and renames files and directories.\n\n" - "To move one or more files:\n" - "MOVE [/N][drive:][path]filename1[,...] destination\n" - "\n" - "To rename a directory:\n" - "MOVE [/N][drive:][path]dirname1 dirname2\n" - "\n" - " [drive:][path]filename1 Specifies the location and name of the file\n" - " or files you want to move.\n" - " /N Nothing. Don everthing but move files or direcories.\n" - "\n" - "Current limitations:\n" - " - You can't move a file or directory from one drive to another.\n" - )); -#endif - return 0; - } - - arg = split (param, &argc, FALSE); - nFiles = argc; - - /* read options */ - for (i = 0; i < argc; i++) - { - p = arg[i]; - - if (*p == _T('/')) - { - p++; - if (*p == _T('-')) - { - p++; - if (_totupper (*p) == _T('Y')) - bPrompt = TRUE; - } - else - { - if (_totupper (*p) == _T('Y')) - bPrompt = FALSE; - else if (_totupper (*p) == _T('N')) - bNothing = TRUE; - } - nFiles--; - } - } - - if (nFiles < 2) - { - /* there must be at least two pathspecs */ - error_req_param_missing (); - return 1; - } - - /* get destination */ - GetFullPathName (arg[argc - 1], MAX_PATH, szDestPath, NULL); -#ifdef _DEBUG - DebugPrintf (_T("Destination: %s\n"), szDestPath); -#endif - - /* move it*/ - for (i = 0; i < argc - 1; i++) - { - if (*arg[i] == _T('/')) - continue; - - hFile = FindFirstFile (arg[i], &findBuffer); - if (hFile == INVALID_HANDLE_VALUE) - { - ErrorMessage (GetLastError (), arg[i]); - freep (arg); - return 1; - } - - do - { - GetFullPathName (findBuffer.cFileName, MAX_PATH, szSrcPath, &pszFile); - - if (GetFileAttributes (szSrcPath) & FILE_ATTRIBUTE_DIRECTORY) - { - /* source is directory */ - -#ifdef _DEBUG - DebugPrintf (_T("Move directory \'%s\' to \'%s\'\n"), - szSrcPath, szDestPath); -#endif - if (!bNothing) - { - MoveFile (szSrcPath, szDestPath); - } - } - else - { - /* source is file */ - - if (IsValidFileName (szDestPath)) - { - /* destination exists */ - if (GetFileAttributes (szDestPath) & FILE_ATTRIBUTE_DIRECTORY) - { - /* destination is existing directory */ - - TCHAR szFullDestPath[MAX_PATH]; - - _tcscpy (szFullDestPath, szDestPath); - _tcscat (szFullDestPath, _T("\\")); - _tcscat (szFullDestPath, pszFile); - - ConOutPrintf (_T("%s => %s"), szSrcPath, szFullDestPath); - - if (!bNothing) - { - if (MoveFile (szSrcPath, szFullDestPath)) - ConOutPrintf (_T("[OK]\n")); - else - ConOutPrintf (_T("[Error]\n")); - } - } - else - { - /* destination is existing file */ - INT nOverwrite; - - /* must get the overwrite code */ - if ((nOverwrite = Overwrite (szDestPath))) - { -#if 0 - if (nOverwrite == OVERWRITE_ALL) - *lpFlags |= FLAG_OVERWRITE_ALL; -#endif - ConOutPrintf (_T("%s => %s"), szSrcPath, szDestPath); - - if (!bNothing) - { - if (MoveFile (szSrcPath, szDestPath)) - ConOutPrintf (_T("[OK]\n")); - else - ConOutPrintf (_T("[Error]\n")); - } - } - } - } - else - { - /* destination does not exist */ - TCHAR szFullDestPath[MAX_PATH]; - - GetFullPathName (szDestPath, MAX_PATH, szFullDestPath, NULL); - - ConOutPrintf (_T("%s => %s"), szSrcPath, szFullDestPath); - - if (!bNothing) - { - if (MoveFile (szSrcPath, szFullDestPath)) - ConOutPrintf (_T("[OK]\n")); - else - ConOutPrintf (_T("[Error]\n")); - } - } - } - } - while (FindNextFile (hFile, &findBuffer)); - - FindClose (hFile); - } - - freep (arg); - - return 0; -} - -#endif /* INCLUDE_CMD_MOVE */ diff --git a/rosapps/cmd/msgbox.c b/rosapps/cmd/msgbox.c deleted file mode 100644 index 284ccd2e1a6..00000000000 --- a/rosapps/cmd/msgbox.c +++ /dev/null @@ -1,174 +0,0 @@ -/* - * MSGBOX.C - msgbox internal command. - * - * clone from 4nt msgbox command - * - * 25 Aug 1999 - * started - Paolo Pantaleo - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_MSGBOX -#include -#include -#include -#include -#include "cmd.h" -//#include - -//#include - - -#define U_TYPE_INIT 0 - -//undefine it to allow to omit arguments -//that will be replaced by default ones -#define _SYNTAX_CHECK - - -INT CommandMsgbox (LPTSTR cmd, LPTSTR param) -{ - //used to parse command line - LPTSTR tmp; - - //used to find window title (used as messagebox title) - //and to find window handle to pass to MessageBox - HWND hWnd; - TCHAR buff[128]; - - //these are MessabeBox() parameters - LPTSTR title, prompt=""; - UINT uType=U_TYPE_INIT; - - //set default title to window title - GetConsoleTitle(buff,128); - title = buff; - - if (_tcsncmp (param, _T("/?"), 2) == 0) - { - ConOutPuts(_T( - "display a message box and return user responce\n" - "\n" - "MSGBOX type [\"title\"] prompt\n" - "\n" - "type button displayed\n" - " possible values are: OK, OKCANCEL,\n" - " YESNO, YESNOCANCEL\n" - "title title of message box\n" - "prompt text displayed by the message box\n" - "\n" - "\n" - "ERRORLEVEL is set according the button pressed:\n" - "\n" - "YES : 10 | NO : 11\n" - "OK : 10 | CANCEL : 12\n")); - return 0; - } - - //yes here things are quite massed up :) - - //skip spaces - while(_istspace(*param)) - param++; - - //search for type of messagebox (ok, okcancel, ...) - if (_tcsnicmp(param, _T("ok "),3 ) == 0) - { - uType |= MB_ICONEXCLAMATION | MB_OK; - param+=3; - } - else if (_tcsnicmp(param, _T("okcancel "),9 ) == 0) - { - uType |= MB_ICONQUESTION | MB_OKCANCEL; - param+=9; - } - else if (_tcsnicmp(param, _T("yesno "),6 ) == 0) - { - uType |= MB_ICONQUESTION | MB_YESNO; - param+=6; - } - else if (_tcsnicmp(param, _T("yesnocancel "), 12 ) == 0) - { - uType |= MB_ICONQUESTION | MB_YESNOCANCEL; - param+=12; - } - else{ -#ifdef _SYNTAX_CHECK - error_req_param_missing (); - return 1; -#else - uType |= MB_ICONEXCLAMATION | MB_OK; -#endif - } - - - //skip spaces - while(_istspace(*param)) - param++; - -#ifdef _SYNTAX_CHECK - //if reached end of string - //it is an error becuase we do not yet have prompt - if ( *param == 0) - { - error_req_param_missing (); - return 1; - } -#endif - - //search for "title" - tmp = param; - - if(*param == '"') - { - tmp = _tcschr(param+1,'"'); - if (tmp) - { - *tmp = 0; - title = param+1; - tmp++; - param = tmp; - } - } - - //skip spaces - while(_istspace(*param)) - param++; -#ifdef _SYNTAX_CHECK - //get prompt - if ( *param == 0) - { - error_req_param_missing (); - return 1; - } -#endif - - prompt = param; - - hWnd=GetConsoleWindow (); -// DebugPrintf("FindWindow hWnd = %d\n",hWnd); - ConErrPrintf("FindWindow hWnd = %d\n",hWnd); - - switch ( - MessageBox(hWnd,prompt,title,uType) - ) - { - case IDYES: - case IDOK: - nErrorLevel = 10; - break; - - case IDNO: - nErrorLevel = 11; - break; - - case IDCANCEL: - nErrorLevel = 12; - break; - } - - return 0; -} - -#endif /* INCLUDE_CMD_MSGBOX */ diff --git a/rosapps/cmd/path.c b/rosapps/cmd/path.c deleted file mode 100644 index 39e9309bd45..00000000000 --- a/rosapps/cmd/path.c +++ /dev/null @@ -1,90 +0,0 @@ -/* - * PATH.C - path internal command. - * - * - * History: - * - * 17 Jul 1998 (John P Price) - * Separated commands into individual files. - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 09-Dec-1998 (Eric Kohl ) - * Added help text ("/?"). - * - * 18-Jan-1999 (Eric Kohl ) - * Unicode ready! - * - * 18-Jan-1999 (Eric Kohl ) - * Redirection safe! - * - * 24-Jan-1999 (Eric Kohl ) - * Fixed Win32 environment handling. - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_PATH - -#include -#include -#include -#include - -#include "cmd.h" - - -/* size of environment variable buffer */ -#define ENV_BUFFER_SIZE 1024 - - -INT cmd_path (LPTSTR cmd, LPTSTR param) -{ - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Displays or sets a search path for executable files.\n\n" - "PATH [[drive:]path[;...]]\nPATH ;\n\n" - "Type PATH ; to clear all search-path settings and direct the command shell\n" - "to search only in the current directory.\n" - "Type PATH without parameters to display the current path.\n")); - return 0; - } - - /* if param is empty, display the PATH environment variable */ - if (!param || !*param) - { - DWORD dwBuffer; - LPTSTR pszBuffer; - - pszBuffer = (LPTSTR)malloc (ENV_BUFFER_SIZE * sizeof(TCHAR)); - dwBuffer = GetEnvironmentVariable (_T("PATH"), pszBuffer, ENV_BUFFER_SIZE); - if (dwBuffer == 0) - { - ConErrPrintf ("CMD: Not in environment \"PATH\"\n"); - return 0; - } - else if (dwBuffer > ENV_BUFFER_SIZE) - { - pszBuffer = (LPTSTR)realloc (pszBuffer, dwBuffer * sizeof (TCHAR)); - GetEnvironmentVariable (_T("PATH"), pszBuffer, ENV_BUFFER_SIZE); - } - - ConOutPrintf (_T("PATH=%s\n"), pszBuffer); - free (pszBuffer); - - return 0; - } - - /* skip leading '=' */ - if (*param == _T('=')) - param++; - - /* set PATH environment variable */ - if (!SetEnvironmentVariable (_T("PATH"), param)) - return 1; - - return 0; -} - -#endif diff --git a/rosapps/cmd/pause.c b/rosapps/cmd/pause.c deleted file mode 100644 index 19e67d539d1..00000000000 --- a/rosapps/cmd/pause.c +++ /dev/null @@ -1,66 +0,0 @@ -/* - * PAUSE.C - pause internal command. - * - * - * History: - * - * 16 Jul 1998 (Hans B Pufal) - * started. - * - * 16 Jul 1998 (John P Price) - * Seperated commands into individual files. - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 18-Jan-1999 (Eric Kohl ) - * Unicode ready! - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_PAUSE - -#include -#include -#include - -#include "cmd.h" -#include "batch.h" - - -/* - * Perform PAUSE command. - * - * FREEDOS extension : If parameter is specified use that as the pause - * message. - * - * ?? Extend to include functionality of CHOICE if switch chars - * specified. - */ - -INT cmd_pause (LPTSTR cmd, LPTSTR param) -{ -#ifdef _DEBUG - DebugPrintf ("cmd_pause: \'%s\' : \'%s\'\n", cmd, param); -#endif - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Stops the execution of a batch file and shows the following message:\n" - "\"Press any key to continue...\" or a user defined message.\n\n" - "PAUSE [message]")); - return 0; - } - - if (*param) - ConOutPrintf (param); - else - msg_pause (); - - cgetchar (); - - return 0; -} - -#endif diff --git a/rosapps/cmd/prompt.c b/rosapps/cmd/prompt.c deleted file mode 100644 index 0bfe411e7ee..00000000000 --- a/rosapps/cmd/prompt.c +++ /dev/null @@ -1,225 +0,0 @@ -/* - * PROMPT.C - prompt handling. - * - * - * History: - * - * 14/01/95 (Tim Normal) - * started. - * - * 08/08/95 (Matt Rains) - * i have cleaned up the source code. changes now bring this source - * into guidelines for recommended programming practice. - * - * 01/06/96 (Tim Norman) - * added day of the week printing (oops, forgot about that!) - * - * 08/07/96 (Steffan Kaiser) - * small changes for speed - * - * 20-Jul-1998 (John P Price ) - * removed redundant day strings. Use ones defined in date.c. - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 28-Jul-1998 (John P Price ) - * moved cmd_prompt from internal.c to here - * - * 09-Dec-1998 (Eric Kohl ) - * Added help text ("/?"). - * - * 14-Dec-1998 (Eric Kohl ) - * Added "$+" option. - * - * 09-Jan-1999 (Eric Kohl ) - * Added "$A", "$C" and "$F" option. - * Added locale support. - * Fixed "$V" option. - * - * 20-Jan-1999 (Eric Kohl ) - * Unicode and redirection safe! - * - * 24-Jan-1999 (Eric Kohl ) - * Fixed Win32 environment handling. - */ - -#include "config.h" - -#include -#include -#include -#include - -#include "cmd.h" - - -/* - * print the command-line prompt - * - */ -VOID PrintPrompt(VOID) -{ - static TCHAR default_pr[] = _T("$P$G"); - TCHAR szPrompt[256]; - LPTSTR pr; - - if (GetEnvironmentVariable (_T("PROMPT"), szPrompt, 256)) - pr = szPrompt; - else - pr = default_pr; - - while (*pr) - { - if (*pr != _T('$')) - { - ConOutChar (*pr); - } - else - { - pr++; - - switch (_totupper (*pr)) - { - case _T('A'): - ConOutChar (_T('&')); - break; - - case _T('B'): - ConOutChar (_T('|')); - break; - - case _T('C'): - ConOutChar (_T('(')); - break; - - case _T('D'): - PrintDate (); - break; - - case _T('E'): - ConOutChar (_T('\x1B')); - break; - - case _T('F'): - ConOutChar (_T(')')); - break; - - case _T('G'): - ConOutChar (_T('>')); - break; - - case _T('H'): - ConOutChar (_T('\x08')); - break; - - case _T('L'): - ConOutChar (_T('<')); - break; - - case _T('N'): - { - TCHAR szPath[MAX_PATH]; - GetCurrentDirectory (MAX_PATH, szPath); - ConOutChar (szPath[0]); - } - break; - - case _T('P'): - { - TCHAR szPath[MAX_PATH]; - GetCurrentDirectory (MAX_PATH, szPath); - ConOutPrintf (_T("%s"), szPath); - } - break; - - case _T('Q'): - ConOutChar (_T('=')); - break; - - case _T('T'): - PrintTime (); - break; - - case _T('V'): - switch (osvi.dwPlatformId) - { - case VER_PLATFORM_WIN32_WINDOWS: - if (osvi.dwMajorVersion == 4 && - osvi.dwMinorVersion == 1) - ConOutPrintf (_T("Windows 98")); - else - ConOutPrintf (_T("Windows 95")); - break; - - case VER_PLATFORM_WIN32_NT: - ConOutPrintf (_T("Windows NT Version %lu.%lu"), - osvi.dwMajorVersion, osvi.dwMinorVersion); - break; - } - break; - - case _T('_'): - ConOutChar (_T('\n')); - break; - - case '$': - ConOutChar (_T('$')); - break; - -#ifdef FEATURE_DIRECTORY_STACK - case '+': - { - INT i; - for (i = 0; i < GetDirectoryStackDepth (); i++) - ConOutChar (_T('+')); - } - break; -#endif - } - } - pr++; - } -} - - -#ifdef INCLUDE_CMD_PROMPT - -INT cmd_prompt (LPTSTR cmd, LPTSTR param) -{ - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Changes the command prompt.\n\n" - "PROMPT [text]\n\n" - " text Specifies a new command prompt.\n\n" - "Prompt can be made up of normal characters and the following special codes:\n\n" - " $A & (Ampersand)\n" - " $B | (pipe)\n" - " $C ( (Left parenthesis)\n" - " $D Current date\n" - " $E Escape code (ASCII code 27)\n" - " $F ) (Right parenthesis)\n" - " $G > (greater-than sign)\n" - " $H Backspace (erases previous character)\n" - " $L < (less-than sign)\n" - " $N Current drive\n" - " $P Current drive and path\n" - " $Q = (equal sign)\n" - " $T Current time\n" - " $V OS version number\n" - " $_ Carriage return and linefeed\n" - " $$ $ (dollar sign)")); -#ifdef FEATURE_DIRECTORY_STACK - ConOutPuts (_T(" $+ Displays the current depth of the directory stack")); -#endif - ConOutPuts (_T("\nType PROMPT without parameters to reset the prompt to the default setting.")); - return 0; - } - - /* set PROMPT environment variable */ - if (!SetEnvironmentVariable (_T("PROMPT"), param)) - return 1; - - return 0; -} -#endif diff --git a/rosapps/cmd/readme.txt b/rosapps/cmd/readme.txt deleted file mode 100644 index 37bf9a9a7e7..00000000000 --- a/rosapps/cmd/readme.txt +++ /dev/null @@ -1,69 +0,0 @@ -ReactOS command line interpreter CMD version 0.1.1 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The ReactOS command line interpreter CMD is derived from FreeCOM, the -FreeDOS command line interpreter. - -We are going for 4NT compatibility but try to stay compatible with -WinNT's CMD.EXE too. - - -Compiling -~~~~~~~~~ -Cmd can be built in two different versions. A full version for use under -Windows 9x or Windows NT and a reduced version for use under ReactOS. - -Note: The full version won't run on ReactOS and the reduced version is not -usable under Win 9x/NT. - -To build the full version, make sure the symbol '__REACTOS__' is NOT defined -in 'rosapps/cmd/config.h' line 13. - -To build the reduced version, make sure the symbol '__REACTOS__' is defined -in 'rosapps/cmd/config.h' line 13. - - -Current Features -~~~~~~~~~~~~~~~~ - - environment handling with prompt and path support. - - directory utilities. - - command-line history with doskey-like features. - - batch file processing. - - input/output redirection and piping. - - alias support. - - filename completion (use TAB) - (this is still incomplete) - - -Credits -~~~~~~~ -FreeDOS developers: - normat@rpi.edu (Tim Norman) - mrains@apanix.apana.org.au (Matt Rains) - ejeffrey@iastate.edu (Evan Jeffrey) - Steffen.Kaiser@Informatik.TU-Chemnitz.DE (Steffen Kaiser) - Svante Frey (sfrey@kuai.se) - Oliver Mueller (ogmueller@t-online.de) - Aaron Kaufman (morgan@remarque.berkeley.edu) - Marc Desrochers (bitzero@hotmail.com) - Rob Lake (rlake@cs.mun.ca) - John P. Price - Hans B Pufal - -ReactOS developers: - Eric Kohl - Emanuele Aliberti - Paolo Pantaleo - - -Bugs -~~~~ -Batch file handling is still untested or buggy. Please report -any bug you find. - -Please report bugs to Eric Kohl . - - -Good luck - - Eric Kohl diff --git a/rosapps/cmd/redir.c b/rosapps/cmd/redir.c deleted file mode 100644 index 801b818fe4f..00000000000 --- a/rosapps/cmd/redir.c +++ /dev/null @@ -1,216 +0,0 @@ -/* - * REDIR.C - redirection handling. - * - * - * History: - * - * 12/15/95 (Tim Norman) - * started. - * - * 12 Jul 98 (Hans B Pufal) - * Rewrote to make more efficient and to conform to new command.c - * and batch.c processing. - * - * 27-Jul-1998 (John P Price ) - * Added config.h include - * - * 22-Jan-1999 (Eric Kohl ) - * Unicode safe! - * Added new error redirection "2>" and "2>>". - * - * 26-Jan-1999 (Eric Kohl ) - * Added new error AND output redirection "&>" and "&>>". - */ - -#include "config.h" - -#ifdef FEATURE_REDIRECTION - -#include -#include -#include -#include - -#include "cmd.h" - - -static BOOL -IsRedirection (TCHAR c) -{ - return (c == _T('<')) || (c == _T('>')) || (c == _T('|')); -} - - -/* - * Gets the redirection info from the command line and copies the - * file names into ifn, ofn and efn removing them from the command - * line. - * - * Converts remaining command line into a series of null terminated - * strings defined by the pipe char '|'. Each string corresponds - * to a single executable command. A double null terminates the - * command strings. - * - * Return number of command strings found. - * - */ - -INT GetRedirection (LPTSTR s, LPTSTR ifn, LPTSTR ofn, LPTSTR efn, LPINT lpnFlags) -{ - INT num = 1; - LPTSTR dp = s; - LPTSTR sp = s; - - /* find and remove all the redirections first */ - while (*sp) - { - if ((*sp == _T('"')) || (*sp == _T('\''))) - { - /* No redirects inside quotes */ - TCHAR qc = *sp; - - do - *dp++ = *sp++; - while (*sp && *sp != qc); - - *dp++ = *sp++; - } - else if ((*sp == _T('<')) || (*sp == _T('>')) || - (*sp == _T('2')) || (*sp == _T('&'))) - { - /* MS-DOS ignores multiple redirection symbols and uses the last */ - /* redirection, so we'll emulate that and not check */ - - if (*sp == _T('<')) - { - /* input redirection */ - *lpnFlags |= INPUT_REDIRECTION; - do sp++; - while( _istspace (*sp) ); - - /* copy file name */ - while (*sp && !IsRedirection (*sp) && !_istspace (*sp)) - *ifn++ = *sp++; - *ifn = _T('\0'); - } - else if (*sp == _T('>')) - { - /* output redirection */ - *lpnFlags |= OUTPUT_REDIRECTION; - sp++; - - /* append request ? */ - if (*sp == _T('>')) - { - *lpnFlags |= OUTPUT_APPEND; - sp++; - } - - while (_istspace (*sp)) - sp++; - - /* copy file name */ - while (*sp && !IsRedirection (*sp) && !_istspace (*sp)) - *ofn++ = *sp++; - *ofn = _T('\0'); - } - else if (*sp == _T('2')) - { - /* error redirection */ - sp++; - - if (*sp == _T('>')) - { - *lpnFlags |= ERROR_REDIRECTION; - sp++; - - /* append request ? */ - if (*sp == _T('>')) - { - *lpnFlags |= ERROR_APPEND; - sp++; - } - } - else - { - /* no redirection!! copy the '2' character! */ - sp--; - *dp++ = *sp++; - continue; - } - - while (_istspace (*sp)) - sp++; - - /* copy file name */ - while (*sp && !IsRedirection (*sp) && !_istspace (*sp)) - *efn++ = *sp++; - *efn = _T('\0'); - } - else if (*sp == _T('&')) - { - /* output AND error redirection */ - sp++; - - if (*sp == _T('>')) - { - *lpnFlags |= (ERROR_REDIRECTION | OUTPUT_REDIRECTION); - sp++; - - /* append request ? */ - if (*sp == _T('>')) - { - *lpnFlags |= (ERROR_APPEND | OUTPUT_APPEND); - sp++; - } - } - else - { - /* no redirection!! copy the '&' character! */ - sp--; - *dp++ = *sp++; - continue; - } - - while (_istspace (*sp)) - sp++; - - /* copy file name */ - while (*sp && !IsRedirection (*sp) && !_istspace (*sp)) - *ofn++ = *efn++ = *sp++; - *ofn = *efn = _T('\0'); - } - } - else - *dp++ = *sp++; - } - *dp++ = _T('\0'); - *dp = _T('\0'); - - /* now go for the pipes */ - sp = s; - while (*sp) - { - if ((*sp == _T('"')) || (*sp == _T('\''))) - { - TCHAR qc = *sp; - - do - sp++; - while (*sp && *sp != qc); - - sp++; - } - else if (*sp == _T('|')) - { - *sp++ = _T('\0'); - num++; - } - else - sp++; - } - - return num; -} - -#endif /* FEATURE_REDIRECTION */ diff --git a/rosapps/cmd/ren.c b/rosapps/cmd/ren.c deleted file mode 100644 index ef8065721b2..00000000000 --- a/rosapps/cmd/ren.c +++ /dev/null @@ -1,281 +0,0 @@ -/* - * REN.C - rename internal command. - * - * - * History: - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 18-Dec-1998 (Eric Kohl - * Added support for quoted long file names with spaces. - * - * 20-Jan-1999 (Eric Kohl - * Unicode and redirection safe! - * - * 17-Oct-2001 (Eric Kohl - * Implemented basic rename code. - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_RENAME - -#include -#include -#include -#include - -#include "cmd.h" -#include "batch.h" - -enum -{ - REN_ATTRIBUTES = 0x001, /* /A : not implemented */ - REN_ERROR = 0x002, /* /E */ - REN_NOTHING = 0x004, /* /N */ - REN_PROMPT = 0x008, /* /P : not implemented */ - REN_QUIET = 0x010, /* /Q */ - REN_SUBDIR = 0x020, /* /S */ - REN_TOTAL = 0x040, /* /T */ -}; - - -/* - * file rename internal command. - * - */ -INT cmd_rename (LPTSTR cmd, LPTSTR param) -{ - LPTSTR *arg = NULL; - INT args = 0; - INT nEvalArgs = 0; /* nunber of evaluated arguments */ - DWORD dwFlags = 0; - DWORD dwFiles = 0; /* number of renamedd files */ - INT i; - LPTSTR srcPattern = NULL; - LPTSTR dstPattern = NULL; - TCHAR dstFile[MAX_PATH]; - BOOL bDstWildcard = FALSE; - - LPTSTR p,q,r; - - HANDLE hFile; - WIN32_FIND_DATA f; - - if (!_tcsncmp(param, _T("/?"), 2)) - { - ConOutPuts(_T("Renames a file/directory or files/directories.\n" - "\n" - "RENAME [/E /N /P /Q /S /T] old_name ... new_name\n" - "REN [/E /N /P /Q /S /T] old_name ... new_name\n" - "\n" - " /E No eror messages.\n" - " /N Nothing.\n" - " /P Prompts for confirmation before renaming each file.\n" - " (Not implemented yet!)\n" - " /Q Quiet.\n" - " /S Rename subdirectories.\n" - " /T Display total number of renamed files.\n" - "\n" - "Note that you cannot specify a new drive or path for your destination. Use\n" - "the MOVE command for that purpose.")); - return(0); - } - - /* split the argument list */ - arg = split(param, &args, FALSE); - - if (args < 2) - { - if (!(dwFlags & REN_ERROR)) - error_req_param_missing(); - freep(arg); - return(1); - } - - /* read options */ - for (i = 0; i < args; i++) - { - if (*arg[i] == _T('/')) - { - if (_tcslen(arg[i]) >= 2) - { - switch (_totupper(arg[i][1])) - { - case _T('E'): - dwFlags |= REN_ERROR; - break; - - case _T('N'): - dwFlags |= REN_NOTHING; - break; - - case _T('P'): - dwFlags |= REN_PROMPT; - break; - - case _T('Q'): - dwFlags |= REN_QUIET; - break; - - case _T('S'): - dwFlags |= REN_SUBDIR; - break; - - case _T('T'): - dwFlags |= REN_TOTAL; - break; - } - } - nEvalArgs++; - } - } - - /* keep quiet within batch files */ - if (bc != NULL) - dwFlags |= REN_QUIET; - - /* there are only options on the command line --> error!!! */ - if (args < nEvalArgs + 2) - { - if (!(dwFlags & REN_ERROR)) - error_req_param_missing(); - freep(arg); - return(1); - } - - /* get destination pattern */ - for (i = 0; i < args; i++) - { - if (*arg[i] == _T('/')) - continue; - dstPattern = arg[i]; - } - - if (_tcschr(dstPattern, _T('*')) || _tcschr(dstPattern, _T('?'))) - bDstWildcard = TRUE; - - /* enumerate source patterns */ - for (i = 0; i < args; i++) - { - if (*arg[i] == _T('/') || arg[i] == dstPattern) - continue; - - srcPattern = arg[i]; - -#ifdef _DEBUG - ConErrPrintf(_T("\n\nSourcePattern: %s\n"), srcPattern); - ConErrPrintf(_T("DestinationPattern: %s\n"), dstPattern); -#endif - - hFile = FindFirstFile(srcPattern, &f); - if (hFile == INVALID_HANDLE_VALUE) - { - if (!(dwFlags & REN_ERROR)) - error_file_not_found(); - continue; - } - - do - { - /* ignore "." and ".." */ - if (!_tcscmp (f.cFileName, _T(".")) || - !_tcscmp (f.cFileName, _T(".."))) - continue; - - /* do not rename hidden or system files */ - if (f.dwFileAttributes & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM)) - continue; - - /* do not rename directories when the destination pattern contains - * wildcards, unless option /S is used */ - if ((f.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - && bDstWildcard - && !(dwFlags & REN_SUBDIR)) - continue; - -#ifdef _DEBUG - ConErrPrintf(_T("Found source name: %s\n"), f.cFileName); -#endif - - /* build destination file name */ - p = f.cFileName; - q = dstPattern; - r = dstFile; - while(*q != 0) - { - if (*q == '*') - { - q++; - while (*p != 0 && *p != *q) - { - *r = *p; - p++; - r++; - } - } - else if (*q == '?') - { - q++; - if (*p != 0) - { - *r = *p; - p++; - r++; - } - } - else - { - *r = *q; - if (*p != 0) - p++; - q++; - r++; - } - } - *r = 0; - -#ifdef _DEBUG - ConErrPrintf(_T("DestinationFile: %s\n"), dstFile); -#endif - - if (!(dwFlags & REN_QUIET) && !(dwFlags & REN_TOTAL)) - ConOutPrintf(_T("%s -> %s\n"), f.cFileName, dstFile); - - /* rename the file */ - if (!(dwFlags & REN_NOTHING)) - { - if (MoveFile(f.cFileName, dstFile)) - { - dwFiles++; - } - else - { - if (!(dwFlags & REN_ERROR)) - ConErrPrintf(_T("MoveFile() failed. Error: %lu\n"), GetLastError()); - } - } - } - while (FindNextFile(hFile, &f)); - FindClose(hFile); - } - - if (!(dwFlags & REN_QUIET)) - { - if (dwFiles == 1) - ConOutPrintf(_T(" %lu file renamed\n"), - dwFiles); - else - ConOutPrintf(_T(" %lu files renamed\n"), - dwFiles); - } - - freep(arg); - - return(0); -} - -#endif - -/* EOF */ diff --git a/rosapps/cmd/screen.c b/rosapps/cmd/screen.c deleted file mode 100644 index c27671afc36..00000000000 --- a/rosapps/cmd/screen.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * SCREEN.C - screen internal command. - * - * clone from 4nt msgbox command - * - * 30 Aug 1999 - * started - Paolo Pantaleo - * - * - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_SCREEN - -#include -#include -#include -#include - -#include "cmd.h" - - -INT CommandScreen (LPTSTR cmd, LPTSTR param) -{ - SHORT x,y; - BOOL bSkipText = FALSE; - - if (_tcsncmp (param, _T("/?"), 2) == 0) - { - ConOutPuts(_T( - "move cursor and optionally print text\n" - "\n" - "SCREEN row col [text]\n" - "\n" - " row row to wich move the cursor\n" - " col column to wich move the cursor")); - return 0; - } - - //get row - while(_istspace(*param)) - param++; - - if(!(*param)) - { - error_req_param_missing (); - return 1; - } - - y = atoi(param); - if (y<0 || y>(maxy-1)) - { - ConOutPrintf("invalid value for row"); - return 1; - } - - //get col - if(!(param = _tcschr(param,_T(' ')))) - { - error_req_param_missing (); - return 1; - } - - while(_istspace(*param)) - param++; - - if(!(*param)) - { - error_req_param_missing (); - return 1; - } - - x = atoi(param); - if (x<0 || x>(maxx-1)) - { - ConErrPuts(_T("invalid value for col")); - return 1; - } - - //get text - if(!(param = _tcschr(param,_T(' ')))) - { - bSkipText = TRUE; - } - else - { - while(_istspace(*param)) - param++; - - if(!(*param)) - { - bSkipText = TRUE; - } - } - - bIgnoreEcho = TRUE; - - if(bSkipText) - x=0; - - - SetCursorXY(x,y); - - if(!(bSkipText)) - ConOutPuts(param); - - return 0; -} - -#endif /* INCLUDE_CMD_SCREEN */ diff --git a/rosapps/cmd/set.c b/rosapps/cmd/set.c deleted file mode 100644 index a1c9dc7ba97..00000000000 --- a/rosapps/cmd/set.c +++ /dev/null @@ -1,128 +0,0 @@ -/* - * SET.C - set internal command. - * - * - * History: - * - * 06/14/97 (Tim Norman) - * changed static var in set() to a malloc'd space to pass to putenv. - * need to find a better way to do this, since it seems it is wasting - * memory when variables are redefined. - * - * 07/08/1998 (John P. Price) - * removed call to show_environment in set command. - * moved test for syntax before allocating memory in set command. - * misc clean up and optimization. - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 28-Jul-1998 (John P Price ) - * added set_env function to set env. variable without needing set command - * - * 09-Dec-1998 (Eric Kohl ) - * Added help text ("/?"). - * - * 24-Jan-1999 (Eric Kohl ) - * Fixed Win32 environment handling. - * Unicode and redirection safe! - * - * 25-Feb-1999 (Eric Kohl ) - * Fixed little bug. - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_SET - -#include -#include -#include -#include - -#include "cmd.h" - - -/* initial size of environment variable buffer */ -#define ENV_BUFFER_SIZE 1024 - - -INT cmd_set (LPTSTR cmd, LPTSTR param) -{ - LPTSTR p; - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Displays, sets, or removes environment variables.\n\n" - "SET [variable[=][string]]\n\n" - " variable Specifies the environment-variable name.\n" - " string Specifies a series of characters to assign to the variable.\n\n" - "Type SET without parameters to display the current environment variables.\n")); - return 0; - } - - /* if no parameters, show the environment */ - if (param[0] == _T('\0')) - { - LPTSTR lpEnv; - LPTSTR lpOutput; - INT len; - - lpEnv = (LPTSTR)GetEnvironmentStrings (); - if (lpEnv) - { - lpOutput = lpEnv; - while (*lpOutput) - { - len = _tcslen(lpOutput); - if (len) - { - if (*lpOutput != _T('=')) - ConOutPuts (lpOutput); - lpOutput += (len + 1); - } - } - FreeEnvironmentStrings (lpEnv); - } - - return 0; - } - - p = _tcschr (param, _T('=')); - if (p) - { - /* set or remove environment variable */ - *p = _T('\0'); - p++; - - SetEnvironmentVariable (param, p); - } - else - { - /* display environment variable */ - LPTSTR pszBuffer; - DWORD dwBuffer; - - pszBuffer = (LPTSTR)malloc (ENV_BUFFER_SIZE * sizeof(TCHAR)); - dwBuffer = GetEnvironmentVariable (param, pszBuffer, ENV_BUFFER_SIZE); - if (dwBuffer == 0) - { - ConErrPrintf ("CMD: Not in environment \"%s\"\n", param); - return 0; - } - else if (dwBuffer > ENV_BUFFER_SIZE) - { - pszBuffer = (LPTSTR)realloc (pszBuffer, dwBuffer * sizeof (TCHAR)); - GetEnvironmentVariable (param, pszBuffer, dwBuffer * sizeof (TCHAR)); - } - - ConOutPrintf ("%s\n", pszBuffer); - free (pszBuffer); - - return 0; - } - - return 0; -} - -#endif diff --git a/rosapps/cmd/shift.c b/rosapps/cmd/shift.c deleted file mode 100644 index 87ce454b178..00000000000 --- a/rosapps/cmd/shift.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * SHIFT.C - shift internal batch command - * - * - * History: - * - * 16 Jul 1998 (Hans B Pufal) - * started. - * - * 16 Jul 1998 (John P Price) - * Separated commands into individual files. - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 07-Jan-1999 (Eric Kohl ) - * Added help text ("shift /?") and cleaned up. - * - * 20-Jan-1999 (Eric Kohl ) - * Unicode and redirection safe! - */ - -#include "config.h" - -#include -#include -#include - -#include "cmd.h" -#include "batch.h" - - -/* - * Perform the SHIFT command. - * - * Only valid inside batch files. - * - * FREEDOS extension : optional parameter DOWN to allow shifting - * parameters backwards. - */ - -INT cmd_shift (LPTSTR cmd, LPTSTR param) -{ -#ifdef _DEBUG - DebugPrintf ("cmd_shift: (\'%s\', \'%s\'\n", cmd, param); -#endif - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Changes the position of replaceable parameters in a batch file.\n\n" - "SHIFT [DOWN]")); - return 0; - } - - if (bc == NULL) - { - /* not in batch - error!! */ - return 1; - } - - if (!_tcsicmp (param, _T("down"))) - { - if (bc->shiftlevel) - bc->shiftlevel--; - } - else /* shift up */ - bc->shiftlevel++; - - return 0; -} diff --git a/rosapps/cmd/start.c b/rosapps/cmd/start.c deleted file mode 100644 index 5b465bbb409..00000000000 --- a/rosapps/cmd/start.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - * START.C - start internal command. - * - * - * History: - * - * 24-Jul-1999 (Eric Kohl ) - * Started. - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_START -#include -#include -#include -#include -#include - -#include "cmd.h" - - -INT cmd_start (LPTSTR first, LPTSTR rest) -{ - TCHAR szFullName[MAX_PATH]; - BOOL bWait = FALSE; - TCHAR *param; - - if (_tcsncmp (rest, _T("/?"), 2) == 0) - { - ConOutPuts (_T("Starts a command.\n\n" - "START command \n\n" - " command Specifies the command to run.\n\n" - "At the moment all commands are started asynchronously.\n")); - - return 0; - } - - /* check for a drive change */ - if (!_tcscmp (first + 1, _T(":")) && _istalpha (*first)) - { - TCHAR szPath[MAX_PATH]; - - _tcscpy (szPath, _T("A:")); - szPath[0] = _totupper (*first); - SetCurrentDirectory (szPath); - GetCurrentDirectory (MAX_PATH, szPath); - if (szPath[0] != (TCHAR)_totupper (*first)) - ConErrPuts (INVALIDDRIVE); - - return 0; - } - if( !*rest ) - { - // FIXME: use comspec instead - rest = "cmd"; - } - /* get the PATH environment variable and parse it */ - /* search the PATH environment variable for the binary */ - param = strchr( rest, ' ' ); // skip program name to reach parameters - if( param ) - { - *param = 0; - param++; - } - if (!SearchForExecutable (rest, szFullName)) - { - error_bad_command (); - return 1; - } - /* check if this is a .BAT or .CMD file */ - if (!_tcsicmp (_tcsrchr (szFullName, _T('.')), _T(".bat")) || - !_tcsicmp (_tcsrchr (szFullName, _T('.')), _T(".cmd"))) - { -#ifdef _DEBUG - DebugPrintf ("[BATCH: %s %s]\n", szFullName, rest); -#endif - ConErrPuts (_T("No batch support at the moment!")); - } - else - { - /* exec the program */ - TCHAR szFullCmdLine [CMDLINE_LENGTH]; - PROCESS_INFORMATION prci; - STARTUPINFO stui; - -#ifdef _DEBUG - DebugPrintf ("[EXEC: %s %s]\n", szFullName, rest); -#endif - /* build command line for CreateProcess() */ - _tcscpy (szFullCmdLine, first); - if( param ) - { - _tcscat(szFullCmdLine, " " ); - _tcscat (szFullCmdLine, param); - } - - /* fill startup info */ - memset (&stui, 0, sizeof (STARTUPINFO)); - stui.cb = sizeof (STARTUPINFO); - stui.dwFlags = STARTF_USESHOWWINDOW; - stui.wShowWindow = SW_SHOWDEFAULT; - - if (CreateProcess (szFullName, szFullCmdLine, NULL, NULL, FALSE, - CREATE_NEW_CONSOLE, NULL, NULL, &stui, &prci)) - { - if (bWait) - { - DWORD dwExitCode; - WaitForSingleObject (prci.hProcess, INFINITE); - GetExitCodeProcess (prci.hProcess, &dwExitCode); - nErrorLevel = (INT)dwExitCode; - CloseHandle (prci.hThread); - CloseHandle (prci.hProcess); - } - } - else - { - ErrorMessage (GetLastError (), - "Error executing CreateProcess()!!\n"); - } - } - - return 0; -} - -#endif - -/* EOF */ diff --git a/rosapps/cmd/strtoclr.c b/rosapps/cmd/strtoclr.c deleted file mode 100644 index f309623eb55..00000000000 --- a/rosapps/cmd/strtoclr.c +++ /dev/null @@ -1,290 +0,0 @@ -/* - * STRTOCLR.C - read color (for color command and other) - * - * - * History: - * - * 07-Oct-1999 (Paolo Pantaleo) - * Started. - * - * - */ - -/*only -BOOL StringToColor(LPWORD lpColor, LPTSTR*str) -is to be called -other are internal service functions*/ - - -#include "cmd.h" - -#include -#include - - -#define _B FOREGROUND_BLUE -#define _G FOREGROUND_GREEN -#define _R FOREGROUND_RED -#define _I FOREGROUND_INTENSITY - - -/*return values for chop_blank*/ -#define CP_OK 0 -#define CP_BLANK_NOT_FOUND 1 -#define CP_END_OF_STRING 2 - -#define SC_HEX 0x0100 -#define SC_TXT 0x0200 - - - -typedef struct _CLRTABLE -{ - LPTSTR name; - WORD val; -} CLRTABLE; - - -CLRTABLE clrtable[] = -{ - {"bla" ,0 }, - {"blu" ,_B }, - {"gre" ,_G }, - {"cya" ,_B|_G }, - {"red" ,_R }, - {"mag" ,_B|_R }, - {"yel" ,_R|_G }, - {"whi" ,_R|_G|_B }, - {"gra" ,_I }, - - - {"0" ,0 }, - {"2" ,_G }, - {"3" ,_B|_G }, - {"4" ,_R }, - {"5" ,_B|_R }, - {"6" ,_R|_G }, - {"7" ,_R|_G|_B }, - - {"8" ,_I }, - {"9" ,_I|_B }, - {"10" ,_I|_G }, - {"11" ,_I|_B|_G }, - {"12" ,_I|_R }, - {"13" ,_I|_B|_R }, - {"14" ,_I|_R|_G }, - {"15" ,_I|_R|_G|_B}, - - - /* note that 1 is at the end of list - to avoid to confuse it with 10-15*/ - {"1" ,_B }, - - /*cyan synonimous*/ - {"aqu" ,_B|_G }, - /*magenta synonimous*/ - {"pur" ,_B|_R }, - - - {"" ,0}, -}; - - - -/* -move string pointer to next word (skip all spaces) -on erro retunr nonzero value -*/ -static -INT chop_blank(LPTSTR *arg_str) -{ - - LPTSTR str; - str = _tcschr(*arg_str,_T(' ')); - if(!str) - { - str = _tcschr (*arg_str, _T('\0')); - if(str != NULL) - *arg_str=str; - return CP_BLANK_NOT_FOUND; - } - - - - while(_istspace(*str)) - str++; - - if (*str == _T('\0')) - { - *arg_str=str; - return CP_END_OF_STRING; - } - - *arg_str = str; - - return CP_OK; -} - - - -/* -read a color value in hex (like win nt's cmd syntax) -if an error occurs return -1 -*/ -static -WORD hex_clr(LPTSTR str) -{ - WORD ret= (WORD)-1; - TCHAR ch; - - ch = str[1]; - - if(_istdigit(ch)) - ret = ch-_T('0'); - else - { - ch=_totupper(ch); - - if( ch >= _T('A') && ch <= _T('F') ) - ret = ch-_T('A')+10; - else - return (WORD)-1; - } - - - ch = str[0]; - - if(_istdigit(ch)) - ret |= (ch-_T('0')) << 4; - else - { - ch=_totupper(ch); - - if( ch >= _T('A') && ch <= _T('F') ) - ret |= (ch-_T('A')+10) <<4; - else - return (WORD)-1; - } - - return ret; -} - - -/* -read a color value from a string (like 4nt's syntax) -if an error occurs return -1 -*/ -static -WORD txt_clr(LPTSTR str) -{ - INT i; - - for(i=0;*(clrtable[i].name);i++) - if( _tcsnicmp(str,clrtable[i].name,_tcslen(clrtable[i].name)) == 0) - return clrtable[i].val; - - return (WORD)-1; -} - - - -/*search for x on y*/ -static -WORD str_to_color(LPTSTR* arg_str) -{ - LPTSTR str; - BOOL bBri; - - WORD tmp_clr,ret_clr; - - str = *arg_str; - - - - if(!(*str)) - return (WORD)-1; - - - /*foreground*/ - bBri = FALSE; - - if(_tcsnicmp(str,"bri",3) == 0 ) - { - bBri = TRUE; - - if(chop_blank(&str)) - return (WORD)-1; - } - - if( (tmp_clr = txt_clr(str)) == (WORD)-1 ) - { - return (WORD)-1; - } - - /*skip spaces and "on"*/ - if ( chop_blank(&str) || chop_blank(&str) ) - return (WORD)-1; - - ret_clr = tmp_clr | (bBri << 3); - - /*background*/ - bBri = FALSE; - - if(_tcsnicmp(str,"bri",3) == 0 ) - { - bBri = TRUE; - - if(chop_blank(&str)) - return (WORD)-1; - } - - - if( (tmp_clr = txt_clr(str)) == (WORD)-1 ) - return (WORD)-1; - - chop_blank(&str); - - *arg_str = str; - - return SC_HEX | ret_clr | tmp_clr << 4 | bBri << 7; -} - - - -/****main function****/ -/* -the only parameter is arg_str, a pointer to a string. -the string is modified so it will begin to first word after -color specification -(only the char* is moved, no chars in the string are modfied) - - -it returns the color in the l.o. byte, plus two flags in the -h.o. byte, they are: -SC_HEX win nt's cmd syntax (for exampl a0) -SC_TXT 4nt's syntax ( "bri gre on bla" or "10 on 0") - -if succedes also move the LPTSTR to end of -string that specify color -*/ - - -BOOL StringToColor(LPWORD lpColor, LPTSTR*str) -{ - WORD wRet; - - wRet = str_to_color (str); - if (wRet == (WORD)-1) - { - wRet=hex_clr (*str); - chop_blank (str); - if (wRet == (WORD)-1) - return FALSE; - } - - *lpColor = wRet; - - return TRUE; -} - -/* EOF */ diff --git a/rosapps/cmd/time.c b/rosapps/cmd/time.c deleted file mode 100644 index eb2fc08dbec..00000000000 --- a/rosapps/cmd/time.c +++ /dev/null @@ -1,221 +0,0 @@ -/* - * TIME.C - time internal command. - * - * - * History: - * - * 07/08/1998 (John P. Price) - * started. - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 09-Jan-1999 (Eric Kohl ) - * Added locale support. - * - * 19-Jan-1999 (Eric Kohl ) - * Unicode and redirection safe! - * Added "/t" option. - * - * 04-Feb-1999 (Eric Kohl ) - * Fixed time input bug. - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_TIME - -#include -#include -#include -#include - -#include "cmd.h" - - -static BOOL ParseTime (LPTSTR s) -{ - SYSTEMTIME t; - LPTSTR p = s; - - if (!*s) - return TRUE; - - GetLocalTime (&t); - t.wHour = 0; - t.wMinute = 0; - t.wSecond = 0; - t.wMilliseconds = 0; - - // first get hour - if (_istdigit(*p)) - { - while (_istdigit(*p)) - { - t.wHour = t.wHour * 10 + *p - _T('0'); - p++; - } - } - else - return FALSE; - - // get time separator - if (*p != cTimeSeparator) - return FALSE; - p++; - - // now get minutes - if (_istdigit(*p)) - { - while (_istdigit(*p)) - { - t.wMinute = t.wMinute * 10 + *p - _T('0'); - p++; - } - } - else - return FALSE; - - // get time separator - if (*p != cTimeSeparator) - return FALSE; - p++; - - // now get seconds - if (_istdigit(*p)) - { - while (_istdigit(*p)) - { - t.wSecond = t.wSecond * 10 + *p - _T('0'); - p++; - } - } - else - return FALSE; - - // get decimal separator - if (*p == cDecimalSeparator) - { - p++; - - // now get hundreths - if (_istdigit(*p)) - { - while (_istdigit(*p)) - { -// t.wMilliseconds = t.wMilliseconds * 10 + *p - _T('0'); - p++; - } -// t.wMilliseconds *= 10; - } - } - - /* special case: 12 hour format */ - if (nTimeFormat == 0) - { - if (_totupper(*s) == _T('P')) - { - t.wHour += 12; - } - - if ((_totupper(*s) == _T('A')) && (t.wHour == 12)) - { - t.wHour = 0; - } - } - - if (t.wHour > 23 || t.wMinute > 60 || t.wSecond > 60 || t.wMilliseconds > 999) - return FALSE; - - SetLocalTime (&t); - - return TRUE; -} - - -INT cmd_time (LPTSTR cmd, LPTSTR param) -{ - LPTSTR *arg; - INT argc; - INT i; - BOOL bPrompt = TRUE; - INT nTimeString = -1; - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Displays or sets the system time.\n" - "\n" - "TIME [/T][time]\n" - "\n" - " /T display only\n" - "\n" - "Type TIME with no parameters to display the current time setting and a prompt\n" - "for a new one. Press ENTER to keep the same time.")); - return 0; - } - - /* build parameter array */ - arg = split (param, &argc, FALSE); - - /* check for options */ - for (i = 0; i < argc; i++) - { - if (_tcsicmp (arg[i], _T("/t")) == 0) - bPrompt = FALSE; - - if ((*arg[i] != _T('/')) && (nTimeString == -1)) - nTimeString = i; - } - - if (nTimeString == -1) - PrintTime (); - - if (!bPrompt) - { - freep (arg); - return 0; - } - - while (1) - { - if (nTimeString == -1) - { - TCHAR s[40]; - - ConOutPrintf (_T("Enter new time: ")); - - ConInString (s, 40); - -#ifdef _DEBUG - DebugPrintf ("\'%s\'\n", s); -#endif - - while (*s && s[_tcslen (s) - 1] < _T(' ')) - s[_tcslen(s) - 1] = _T('\0'); - - if (ParseTime (s)) - { - freep (arg); - return 0; - } - } - else - { - if (ParseTime (arg[nTimeString])) - { - freep (arg); - return 0; - } - - /* force input the next time around. */ - nTimeString = -1; - } - ConErrPuts (_T("Invalid time.")); - } - - freep (arg); - - return 0; -} - -#endif diff --git a/rosapps/cmd/timer.c b/rosapps/cmd/timer.c deleted file mode 100644 index 2df9e408a5c..00000000000 --- a/rosapps/cmd/timer.c +++ /dev/null @@ -1,246 +0,0 @@ -/* - * TIMER.C - timer internal command. - * - * clone from 4nt timer command - * - * 20 Aug 1999 - * started - Paolo Pantaleo - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_TIMER -#include "cmd.h" - -#include -#include -#include -#include - - -#define NCS_NOT_SPECIFIED -1 -#define NCS_ON 1 -#define NCS_OFF 0 - - - -//print timer status -#define PS ConOutPrintf("Timer %d is %s: ",clk_n,cS?"ON":"OFF"); \ - PrintTime() - -//print timer value -#define PT(format) PrintElapsedTime(GetTickCount()-cT,format) - - -//current timer Time (at wich started to count) -#define cT clksT[clk_n] - -//current timer status -#define cS clksS[clk_n] - - -static VOID -PrintElapsedTime (DWORD time,INT format) -{ - - DWORD h,m,s,ms; - -#ifdef _DEBUG - DebugPrintf("PrintTime(%d,%d)",time,format); -#endif - - switch (format) - { - case 0: - ConOutPrintf("Elapsed %d msecs\n",time); - break; - - case 1: - ms = time % 1000; - time /= 1000; - s = time % 60; - time /=60; - m = time % 60; - h = time / 60; - ConOutPrintf("Elapsed %02d%c%02d%c%02d%c%02d\n", - h,cTimeSeparator, - m,cTimeSeparator, - s,cDecimalSeparator,ms/10); - break; - } -} - - -INT CommandTimer (LPTSTR cmd, LPTSTR param) -{ - // all timers are kept - static DWORD clksT[10]; - - // timers status - // set all the clocks off by default - static BOOL clksS[10]={FALSE,FALSE,FALSE,FALSE, - FALSE,FALSE,FALSE,FALSE,FALSE,FALSE}; - - // TRUE if /S in command line - BOOL bS = FALSE; - - // avoid to set clk_n more than once - BOOL bCanNSet = TRUE; - - INT NewClkStatus = NCS_NOT_SPECIFIED; - - // the clock number specified on the command line - // 1 by default - INT clk_n=1; - - // output format - INT iFormat=1; - - - // command line parsing variables - INT argc; - LPTSTR *p; - - INT i; - - if (_tcsncmp (param, _T("/?"), 2) == 0) - { - ConOutPrintf(_T( - "allow the use of ten stopwaches.\n" - "\n" - "TIMER [ON|OFF] [/S] [/n] [/Fn]\n" - "\n" - " ON set stopwach ON\n" - " OFF set stopwach OFF\n" - " /S Split time. Return stopwach split\n" - " time without changing its value\n" - " /n Specifiy the stopwach number.\n" - " Stopwaches avaliable are 0 to 10\n" - " If it is not specified default is 1\n" - " /Fn Format for output\n" - " n can be:\n" - " 0 milliseconds\n" - " 1 hh%cmm%css%cdd\n" - "\n"), - cTimeSeparator,cTimeSeparator,cDecimalSeparator); - - ConOutPrintf(_T( - "if none of ON, OFF or /S is specified the command\n" - "will toggle stopwach state\n" - "\n")); - return 0; - } - - - p = split (param, &argc, FALSE); - - //read options - for (i = 0; i < argc; i++) - { - //set timer on - if (!(_tcsicmp(&p[i][0],"on")) && NewClkStatus == NCS_NOT_SPECIFIED) - { - NewClkStatus = NCS_ON; - continue; - } - - //set timer off - if (!(_tcsicmp(&p[i][0],"off")) && NewClkStatus == NCS_NOT_SPECIFIED) - { - NewClkStatus = NCS_OFF; - continue; - } - - // other options - if (p[i][0] == _T('/')) - { - - // set timer number - if (_istdigit(p[i][1]) && bCanNSet) - { - clk_n = p[i][1] - _T('0'); - bCanNSet = FALSE; - continue; - } - - // set s(plit) option - if (_totupper(p[i][1]) == _T('S')) - { - bS = TRUE; - continue; - } - - // specify format - if(_totupper(p[i][1]) == _T('F')) - { - iFormat = p[i][2] - _T('0'); - continue; - } - } - } - - // do stuff (start/stop/read timer) - if(NewClkStatus == NCS_ON) - { - cT=GetTickCount(); - cS=TRUE; - PS; - freep(p); - return 0; - } - - if(bS) - { - if(cS) - { - PS; - PrintElapsedTime(GetTickCount()-cT, iFormat); - freep(p); - return 0; - } - - cT=GetTickCount(); - cS=TRUE; - PS; - freep(p); - return 0; - } - - if(NewClkStatus == NCS_NOT_SPECIFIED) - { - if(cS){ - cS=FALSE; - PS; - PrintElapsedTime(GetTickCount()-cT, iFormat); - freep(p); - return 0; - } - - cT=GetTickCount(); - cS=TRUE; - PS; - freep(p); - return 0; - } - - - if(NewClkStatus == NCS_OFF) - { - if(cS) - { - cS=FALSE; - PS; - PrintElapsedTime(GetTickCount()-cT, iFormat); - freep(p); - return 0; - } - PS; - freep(p); - return 0; - } - - freep(p); - return 0; -} - -#endif /* INCLUDE_CMD_TIMER */ diff --git a/rosapps/cmd/title.c b/rosapps/cmd/title.c deleted file mode 100644 index a2a1562359f..00000000000 --- a/rosapps/cmd/title.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * title.c - title internal command. - * - * - * History: - * 1999-02-11 Emanuele Aliberti - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_TITLE - -#include -#include -#include - -#include "cmd.h" - - -INT cmd_title (LPTSTR cmd, LPTSTR param) -{ - /* Do nothing if no args */ - if (*param == _T('\0')) - return 0; - - /* Asking help? */ - if (!_tcsncmp(param, _T("/?"), 2)) - { - ConOutPuts (_T("Sets the window title for the command prompt window.\n" - "\n" - "TITLE [string]\n" - "\n" - " string Specifies the title for the command prompt window.")); - return 0; - } - - return SetConsoleTitle (param); -} - -#endif /* def INCLUDE_CMD_TITLE */ - -/* EOF */ diff --git a/rosapps/cmd/todo.txt b/rosapps/cmd/todo.txt deleted file mode 100644 index c1257593e93..00000000000 --- a/rosapps/cmd/todo.txt +++ /dev/null @@ -1,16 +0,0 @@ -Things to do -~~~~~~~~~~~~ -Fix bugs :) - -Optimize the code! For size and speed. There are numerous places -where the code is hardly optimal for either. - -Sorting in DIR command ("dir /o..."). - -^S and ^Q to pause/resume displays. - -Improve DEL, COPY and MOVE commands. - -Add wildcard support to REN. - -And many, many more... diff --git a/rosapps/cmd/type.c b/rosapps/cmd/type.c deleted file mode 100644 index 8ed6a508bdc..00000000000 --- a/rosapps/cmd/type.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * TYPE.C - type internal command. - * - * History: - * - * 07/08/1998 (John P. Price) - * started. - * - * 07/12/98 (Rob Lake) - * Changed error messages - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 07-Jan-1999 (Eric Kohl ) - * Added support for quoted arguments (type "test file.dat"). - * Cleaned up. - * - * 19-Jan-1999 (Eric Kohl ) - * Unicode and redirection ready! - * - * 19-Jan-1999 (Paolo Pantaleo ) - * Added multiple file support (copied from y.c) - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_TYPE - -#include -#include -#include - -#include "cmd.h" - - -INT cmd_type (LPTSTR cmd, LPTSTR param) -{ - TCHAR buff[256]; - HANDLE hFile, hConsoleOut; - DWORD dwRead; - DWORD dwWritten; - BOOL bRet; - INT argc,i; - LPTSTR *argv; - LPTSTR errmsg; - - hConsoleOut=GetStdHandle (STD_OUTPUT_HANDLE); - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Displays the contents of text files.\n\n" - "TYPE [drive:][path]filename")); - return 0; - } - - if (!*param) - { - error_req_param_missing (); - return 1; - } - - argv = split (param, &argc, TRUE); - - for (i = 0; i < argc; i++) - { - if (_T('/') == argv[i][0]) - { - ConErrPrintf("Invalid option \"%s\"\n", argv[i] + 1); - continue; - } - hFile = CreateFile(argv[i], - GENERIC_READ, - FILE_SHARE_READ,NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL,NULL); - - if(hFile == INVALID_HANDLE_VALUE) - { - FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_IGNORE_INSERTS | - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - GetLastError(), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &errmsg, - 0, - NULL); - ConErrPrintf ("%s - %s", argv[i], errmsg); - LocalFree (errmsg); - continue; - } - - do - { - bRet = ReadFile(hFile,buff,sizeof(buff),&dwRead,NULL); - - if (dwRead>0 && bRet) - WriteFile(hConsoleOut,buff,dwRead,&dwWritten,NULL); - - } while(dwRead>0 && bRet); - - CloseHandle(hFile); - } - - freep (argv); - - return 0; -} - -#endif diff --git a/rosapps/cmd/ver.c b/rosapps/cmd/ver.c deleted file mode 100644 index 333f5672b9d..00000000000 --- a/rosapps/cmd/ver.c +++ /dev/null @@ -1,147 +0,0 @@ -/* - * VER.C - ver internal command. - * - * - * History: - * - * 06/30/98 (Rob Lake) - * rewrote ver command to accept switches, now ver alone prints - * copyright notice only. - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 30-Jul-1998 (John P Price ) - * added text about where to send bug reports and get updates. - * - * 20-Jan-1999 (Eric Kohl ) - * Unicode and redirection safe! - * - * 26-Feb-1999 (Eric Kohl ) - * New version info and some output changes. - */ - -#include "config.h" - -#include -#include -#include -#include - -#include "cmd.h" - - - -VOID ShortVersion (VOID) -{ - ConOutPuts (_T("\n" - SHELLINFO "\n" - SHELLVER "\n")); -} - - -#ifdef INCLUDE_CMD_VER - -/* - * display shell version info internal command. - * - * - */ -INT cmd_ver (LPTSTR cmd, LPTSTR param) -{ - INT i; - - if (_tcsstr (param, _T("/?")) != NULL) - { - ConOutPuts (_T("Displays shell version information\n" - "\n" - "VER [/C][/R][/W]\n" - "\n" - " /C Displays credits.\n" - " /R Displays redistribution information.\n" - " /W Displays warranty information.")); - return 0; - } - - ConOutPuts (_T("\n" - SHELLINFO "\n" - SHELLVER "\n" - "\n" - "Copyright (C) 1994-1998 Tim Norman and others.")); - ConOutPuts (_T("Copyright (C) 1998-2001 Eric Kohl and others.")); - - /* Basic copyright notice */ - if (param[0] == _T('\0')) - { - ConOutPuts (_T("\n"SHELLINFO - " comes with ABSOLUTELY NO WARRANTY; for details\n" - "type: `ver /w'. This is free software, and you are welcome to redistribute\n" - "it under certain conditions; type `ver /r' for details. Type `ver /c' for a\n" - "listing of credits.")); - } - else - { - for (i = 0; param[i]; i++) - { - /* skip spaces */ - if (param[i] == _T(' ')) - continue; - - if (param[i] == _T('/')) - { - /* is this a lone '/' ? */ - if (param[i + 1] == 0) - { - error_invalid_switch (_T(' ')); - return 1; - } - continue; - } - - if (_totupper (param[i]) == _T('W')) - { - /* Warranty notice */ - ConOutPuts (_T("\n This program is distributed in the hope that it will be useful,\n" - " but WITHOUT ANY WARRANTY; without even the implied warranty of\n" - " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" - " GNU General Public License for more details.")); - } - else if (_totupper (param[i]) == _T('R')) - { - /* Redistribution notice */ - ConOutPuts (_T("\n This program is free software; you can redistribute it and/or modify\n" - " it under the terms of the GNU General Public License as published by\n" - " the Free Software Foundation; either version 2 of the License, or\n" - " (at your option) any later version.")); - } - else if (_totupper (param[i]) == _T('C')) - { - /* Developer listing */ - ConOutPuts (_T("\n" - "FreeDOS version written by:\n" - " Tim Norman Matt Rains\n" - " Evan Jeffrey Steffen Kaiser\n" - " Svante Frey Oliver Mueller\n" - " Aaron Kaufman Marc Desrochers\n" - " Rob Lake John P Price\n" - " Hans B Pufal\n" - "\n" - "ReactOS version written by:\n" - " Eric Kohl Emanuele Aliberti\n" - " Paolo Pantaleo Phillip Susi\n")); - } - else - { - error_invalid_switch ((TCHAR)_totupper (param[i])); - return 1; - } - } - } - - ConOutPuts (_T("\n" - "Send bug reports to .\n" - "Updates are available at: http://www.reactos.com")); - return 0; -} - -#endif diff --git a/rosapps/cmd/verify.c b/rosapps/cmd/verify.c deleted file mode 100644 index 4aeaa94e9e4..00000000000 --- a/rosapps/cmd/verify.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * VERIFY.C - verify internal command. - * - * - * History: - * - * 31 Jul 1998 (John P Price) - * started. - * - * 18-Jan-1999 (Eric Kohl ) - * VERIFY is just a dummy under Win32; it only exists - * for compatibility!!! - * - * 20-Jan-1999 (Eric Kohl ) - * Unicode and redirection ready! - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_VERIFY - -#include -#include -#include - -#include "cmd.h" - - -/* global verify flag */ -static BOOL bVerify = FALSE; - - -INT cmd_verify (LPTSTR cmd, LPTSTR param) -{ - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("This command is just a dummy!!\n" - "Sets whether to verify that your files are written correctly to a\n" - "disk.\n\n" - "VERIFY [ON | OFF]\n\n" - "Type VERIFY without a parameter to display the current VERIFY setting.")); - return 0; - } - - if (!*param) - ConOutPrintf (_T("VERIFY is %s.\n"), bVerify ? D_ON : D_OFF); - else if (_tcsicmp (param, D_OFF) == 0) - bVerify = FALSE; - else if (_tcsicmp (param, D_ON) == 0) - bVerify = TRUE; - else - ConOutPuts (_T("Must specify ON or OFF.")); - - return 0; -} - -#endif diff --git a/rosapps/cmd/vol.c b/rosapps/cmd/vol.c deleted file mode 100644 index a37bf263fec..00000000000 --- a/rosapps/cmd/vol.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - * VOL.C - vol internal command. - * - * - * History: - * - * 03-Dec-1998 (Eric Kohl ) - * Replaced DOS calls by Win32 calls. - * - * 08-Dec-1998 (Eric Kohl ) - * Added help text ("/?"). - * - * 07-Jan-1999 (Eric Kohl ) - * Cleanup. - * - * 18-Jan-1999 (Eric Kohl ) - * Unicode ready! - * - * 20-Jan-1999 (Eric Kohl ) - * Redirection ready! - */ - -#include "config.h" - -#ifdef INCLUDE_CMD_VOL - -#include -#include -#include - -#include "cmd.h" - - -static INT -PrintVolumeHeader (LPTSTR pszRootPath) -{ - TCHAR szVolName[80]; - DWORD dwSerialNr; - - /* get the volume information of the drive */ - if(!GetVolumeInformation (pszRootPath, - szVolName, - 80, - &dwSerialNr, - NULL, - NULL, - NULL, - 0)) - { - ErrorMessage (GetLastError (), _T("")); - return 1; - } - - /* print drive info */ - ConOutPrintf (_T(" Volume in drive %c:"), pszRootPath[0]); - - if (szVolName[0] != '\0') - ConOutPrintf (_T(" is %s\n"), - szVolName); - else - ConOutPrintf (_T(" has no label\n")); - - /* print the volume serial number */ - ConOutPrintf (_T(" Volume Serial Number is %04X-%04X\n"), - HIWORD(dwSerialNr), - LOWORD(dwSerialNr)); - return 0; -} - - -INT cmd_vol (LPTSTR cmd, LPTSTR param) -{ - TCHAR szRootPath[] = _T("A:\\"); - TCHAR szPath[MAX_PATH]; - - if (!_tcsncmp (param, _T("/?"), 2)) - { - ConOutPuts (_T("Displays the disk volume label and serial number, if they exist.\n\n" - "VOL [drive:]")); - return 0; - } - - if (param[0] == _T('\0')) - { - GetCurrentDirectory (MAX_PATH, szPath); - szRootPath[0] = szPath[0]; - } - else - { - _tcsupr (param); - if (param[1] == _T(':')) - szRootPath[0] = param[0]; - else - { - error_invalid_drive (); - return 1; - } - } - - if (!IsValidPathName (szRootPath)) - { - error_invalid_drive (); - return 1; - } - - /* print the header */ - if (!PrintVolumeHeader (szRootPath)) - return 1; - - return 0; -} - -#endif diff --git a/rosapps/cmd/where.c b/rosapps/cmd/where.c deleted file mode 100644 index c9f2cef5ea0..00000000000 --- a/rosapps/cmd/where.c +++ /dev/null @@ -1,333 +0,0 @@ -/* - * WHERE.C - file search functions. - * - * - * History: - * - * 07/15/95 (Tim Norman) - * started. - * - * 08/08/95 (Matt Rains) - * i have cleaned up the source code. changes now bring this source - * into guidelines for recommended programming practice. - * - * 12/12/95 (Steffan Kaiser & Tim Norman) - * added some patches to fix some things and make more efficient - * - * 1/6/96 (Tim Norman) - * fixed a stupid pointer mistake... - * Thanks to everyone who noticed it! - * - * 8/1/96 (Tim Norman) - * fixed a bug when getenv returns NULL - * - * 8/7/96 (Steffan Kaiser and Tim Norman) - * speed improvements and bug fixes - * - * 8/27/96 (Tim Norman) - * changed code to use pointers directly into PATH environment - * variable rather than making our own copy. This saves some memory, - * but requires we write our own function to copy pathnames out of - * the variable. - * - * 12/23/96 (Aaron Kaufman) - * Fixed a bug in get_paths() that did not point to the first PATH - * in the environment variable. - * - * 7/12/97 (Tim Norman) - * Apparently, Aaron's bugfix got lost, so I fixed it again. - * - * 16 July 1998 (John P. Price) - * Added stand alone code. - * - * 17 July 1998 (John P. Price) - * Rewrote find_which to use searchpath function - * - * 24-Jul-1998 (John P Price ) - * fixed bug where didn't check all extensions when path was specified - * - * 27-Jul-1998 (John P Price ) - * added config.h include - * - * 30-Jul-1998 (John P Price ) - * fixed so that it find_which returns NULL if filename is not - * executable (does not have .bat, .com, or .exe extention). - * Before command would to execute any file with any extension (opps!) - * - * 03-Dec-1998 (Eric Kohl ) - * Changed find_which(). - * - * 07-Dec-1998 (Eric Kohl ) - * Added ".CMD" extension. - * Replaced numeric constant by _NR_OF_EXTENSIONS. - * - * 26-Feb-1999 (Eric Kohl ) - * Replaced find_which() by SearchForExecutable(). - * Now files are searched using the right extension order. - * - * 20-Apr-1999 (Eric Kohl ) - * Some minor changes and improvements. - */ - -#include "config.h" - -#include -#include -#include - -#include "cmd.h" - - -/* initial size of environment variable buffer */ -#define ENV_BUFFER_SIZE 1024 - - -static LPTSTR ext[] = {".bat", ".cmd", ".com", ".exe"}; -static INT nExtCount = sizeof(ext) / sizeof(LPTSTR); - - -/* searches for file using path info. */ - -BOOL -SearchForExecutable (LPCTSTR pFileName, LPTSTR pFullName) -{ - TCHAR szPathBuffer[MAX_PATH]; - LPTSTR pszBuffer = NULL; - DWORD dwBuffer, len; - INT n; - LPTSTR p,s,f; - - - /* initialize full name buffer */ - *pFullName = _T('\0'); - -#ifdef _DEBUG - DebugPrintf (_T("SearchForExecutable: \'%s\'\n"), pFileName); -#endif - - if (_tcschr (pFileName, _T('\\')) != NULL) - { - LPTSTR pFilePart; -#ifdef _DEBUG - DebugPrintf (_T("Absolute or relative path is given.\n")); -#endif - - if (GetFullPathName (pFileName, - MAX_PATH, - szPathBuffer, - &pFilePart) ==0) - return FALSE; - - if(pFilePart == 0) - return FALSE; - - - if (_tcschr (pFilePart, _T('.')) != NULL) - { -#ifdef _DEBUG - DebugPrintf (_T("Filename extension!\n")); -#endif - _tcscpy (pFullName, szPathBuffer); - return TRUE; - - } - else - { -#ifdef _DEBUG - DebugPrintf (_T("No filename extension!\n")); -#endif - - p = szPathBuffer + _tcslen (szPathBuffer); - - for (n = 0; n < nExtCount; n++) - { - _tcscpy (p, ext[n]); - -#ifdef _DEBUG - DebugPrintf (_T("Testing: \'%s\'\n"), szPathBuffer); -#endif - - if (IsValidFileName (szPathBuffer)) - { -#ifdef _DEBUG - DebugPrintf (_T("Found: \'%s\'\n"), szPathBuffer); -#endif - _tcscpy (pFullName, szPathBuffer); - return TRUE; - } - } - return FALSE; - } - } - - /* load environment varable PATH into buffer */ - pszBuffer = (LPTSTR)malloc (ENV_BUFFER_SIZE * sizeof(TCHAR)); - dwBuffer = GetEnvironmentVariable (_T("PATH"), pszBuffer, ENV_BUFFER_SIZE); - if (dwBuffer > ENV_BUFFER_SIZE) - { - pszBuffer = (LPTSTR)realloc (pszBuffer, dwBuffer * sizeof (TCHAR)); - GetEnvironmentVariable (_T("PATH"), pszBuffer, dwBuffer * sizeof (TCHAR)); - } - - if (!(p = _tcsrchr (pFileName, _T('.'))) || - _tcschr (p + 1, _T('\\'))) - { - /* There is no extension ==> test all the extensions. */ -#ifdef _DEBUG - DebugPrintf (_T("No filename extension!\n")); -#endif - - /* search in current directory */ - len = GetCurrentDirectory (MAX_PATH, szPathBuffer); - if (szPathBuffer[len - 1] != _T('\\')) - { - szPathBuffer[len] = _T('\\'); - szPathBuffer[len + 1] = _T('\0'); - } - _tcscat (szPathBuffer, pFileName); - - p = szPathBuffer + _tcslen (szPathBuffer); - - for (n = 0; n < nExtCount; n++) - { - _tcscpy (p, ext[n]); - -#ifdef _DEBUG - DebugPrintf (_T("Testing: \'%s\'\n"), szPathBuffer); -#endif - - if (IsValidFileName (szPathBuffer)) - { -#ifdef _DEBUG - DebugPrintf (_T("Found: \'%s\'\n"), szPathBuffer); -#endif - free (pszBuffer); - _tcscpy (pFullName, szPathBuffer); - return TRUE; - } - } - - /* search in PATH */ - s = pszBuffer; - while (s && *s) - { - f = _tcschr (s, _T(';')); - - if (f) - { - _tcsncpy (szPathBuffer, s, (size_t)(f-s)); - szPathBuffer[f-s] = _T('\0'); - s = f + 1; - } - else - { - _tcscpy (szPathBuffer, s); - s = NULL; - } - - len = _tcslen(szPathBuffer); - if (szPathBuffer[len - 1] != _T('\\')) - { - szPathBuffer[len] = _T('\\'); - szPathBuffer[len + 1] = _T('\0'); - } - _tcscat (szPathBuffer, pFileName); - - p = szPathBuffer + _tcslen (szPathBuffer); - - for (n = 0; n < nExtCount; n++) - { - _tcscpy (p, ext[n]); - -#ifdef _DEBUG - DebugPrintf (_T("Testing: \'%s\'\n"), szPathBuffer); -#endif - - if (IsValidFileName (szPathBuffer)) - { -#ifdef _DEBUG - DebugPrintf (_T("Found: \'%s\'\n"), szPathBuffer); -#endif - free (pszBuffer); - _tcscpy (pFullName, szPathBuffer); - return TRUE; - } - } - } - } - else - { - /* There is an extension and it is in the last path component, */ - /* so don't test all the extensions. */ -#ifdef _DEBUG - DebugPrintf (_T("Filename extension!\n")); -#endif - - /* search in current directory */ - len = GetCurrentDirectory (MAX_PATH, szPathBuffer); - if (szPathBuffer[len - 1] != _T('\\')) - { - szPathBuffer[len] = _T('\\'); - szPathBuffer[len + 1] = _T('\0'); - } - _tcscat (szPathBuffer, pFileName); - -#ifdef _DEBUG - DebugPrintf (_T("Testing: \'%s\'\n"), szPathBuffer); -#endif - if (IsValidFileName (szPathBuffer)) - { -#ifdef _DEBUG - DebugPrintf (_T("Found: \'%s\'\n"), szPathBuffer); -#endif - free (pszBuffer); - _tcscpy (pFullName, szPathBuffer); - return TRUE; - } - - - /* search in PATH */ - s = pszBuffer; - while (s && *s) - { - f = _tcschr (s, _T(';')); - - if (f) - { - _tcsncpy (szPathBuffer, s, (size_t)(f-s)); - szPathBuffer[f-s] = _T('\0'); - s = f + 1; - } - else - { - _tcscpy (szPathBuffer, s); - s = NULL; - } - - len = _tcslen(szPathBuffer); - if (szPathBuffer[len - 1] != _T('\\')) - { - szPathBuffer[len] = _T('\\'); - szPathBuffer[len + 1] = _T('\0'); - } - _tcscat (szPathBuffer, pFileName); - -#ifdef _DEBUG - DebugPrintf (_T("Testing: \'%s\'\n"), szPathBuffer); -#endif - if (IsValidFileName (szPathBuffer)) - { -#ifdef _DEBUG - DebugPrintf (_T("Found: \'%s\'\n"), szPathBuffer); -#endif - free (pszBuffer); - _tcscpy (pFullName, szPathBuffer); - return TRUE; - } - } - } - - free (pszBuffer); - - return FALSE; -} diff --git a/rosapps/cmd/window.c b/rosapps/cmd/window.c deleted file mode 100644 index 04d3a1bfd8e..00000000000 --- a/rosapps/cmd/window.c +++ /dev/null @@ -1,247 +0,0 @@ -/* $Id: window.c,v 1.4 2002/09/24 03:43:25 sedwards Exp $ - * - * WINDOW.C - activate & window internal commands. - * - * clone from 4nt activate command - * - * 10 Sep 1999 (Paolo Pantaleo) - * started (window command in WINDOW.c) - * - * 29 Sep 1999 (Paolo Pantaleo) - * activate and window in a single file using mainly the same code - * (nice size optimization :) - */ - - -#include "config.h" - -#if ( defined(INCLUDE_CMD_WINDOW) || defined(INCLUDE_CMD_ACTIVATE) ) - -#include "cmd.h" -#include -#include -#include -#include - - -#define A_MIN 0x01 -#define A_MAX 0x02 -#define A_RESTORE 0x04 -#define A_POS 0x08 -#define A_SIZE 0x10 -#define A_CLOSE 0x20 - - -/*service funciton to perform actions on windows - - param is a string to parse for options/actions - hWnd is the handle of window on wich perform actions - -*/ - -static -INT ServiceActivate (LPTSTR param, HWND hWnd) -{ - LPTSTR *p=0,p_tmp; - INT argc=0,i; - INT iAction=0; - LPTSTR title=0; - WINDOWPLACEMENT wp; - RECT pos; - LPTSTR tmp; - - - if(*param) - p=split(param,&argc); - - - for(i = 0; i < argc; i++) - { - p_tmp=p[i]; - if (*p_tmp == _T('/')) - p_tmp++; - - if (_tcsicmp(p_tmp,_T("min"))==0) - { - iAction |= A_MIN; - continue; - } - - if (_tcsicmp(p_tmp,_T("max"))==0) - { - iAction |= A_MAX; - continue; - } - - if (_tcsicmp(p_tmp,_T("restore"))==0) - { - iAction |= A_RESTORE; - continue; - } - - if (_tcsicmp(p_tmp,_T("close"))==0) - { - iAction |= A_CLOSE; - continue; - } - - if (_tcsnicmp(p_tmp,_T("pos"),3)==0) - { - iAction |= A_POS; - tmp = p_tmp+3; - if (*tmp == _T('=')) - tmp++; - - pos.left= _ttoi(tmp); - if(!(tmp=_tcschr(tmp,_T(',')))) - { - error_invalid_parameter_format(p[i]); - freep(p); - return 1; - } - - pos.top = _ttoi (++tmp); - if(!(tmp=_tcschr(tmp,_T(',')))) - { - error_invalid_parameter_format(p[i]); - freep(p); - return 1; - } - - pos.right = _ttoi(++tmp)+pos.left; - if(!(tmp=_tcschr(tmp,_T(',')))) - { - error_invalid_parameter_format(p[i]); - freep(p); - return 1; - } - pos.bottom = _ttoi(++tmp) + pos.top; - continue; - } - - if (_tcsnicmp(p_tmp,_T("size"),4)==0) - { - iAction |=A_SIZE; - continue; - } - - /*none of them=window title*/ - if (title) - { - error_invalid_parameter_format(p[i]); - freep(p); - return 1; - } - - if (p_tmp[0] == _T('"')) - { - title = (p_tmp+1); - *_tcschr(p_tmp+1,_T('"'))=0; - continue; - } - title = p_tmp; - } - - if(title) - SetWindowText(hWnd,title); - - wp.length=sizeof(WINDOWPLACEMENT); - GetWindowPlacement(hWnd,&wp); - - if(iAction & A_POS) - wp.rcNormalPosition = pos; - - if(iAction & A_MIN) - wp.showCmd=SW_MINIMIZE; - - if(iAction & A_MAX) - wp.showCmd=SW_SHOWMAXIMIZED; - - /*if no actions are specified default is SW_RESTORE*/ - if( (iAction & A_RESTORE) || (!iAction) ) - wp.showCmd=SW_RESTORE; - - if(iAction & A_CLOSE) - ConErrPrintf(_T("!!!FIXME: CLOSE Not implemented!!!\n")); - - wp.length=sizeof(WINDOWPLACEMENT); - SetWindowPlacement(hWnd,&wp); - - if(p) - freep(p); - - return 0; -} - - - - -INT CommandWindow (LPTSTR cmd, LPTSTR param) -{ - HWND h; - - if (_tcsncmp (param, _T("/?"), 2) == 0) - { - ConOutPuts(_T("change console window aspect\n" - "\n" - "WINDOW [/POS[=]left,top,width,heigth]\n" - " [MIN|MAX|RESTORE] [\"title\"]\n" - "\n" - "/POS specify window placement and dimensions\n" - "MIN minimize the window\n" - "MAX maximize the window\n" - "RESTORE restore the window")); - return 0; - } - - h = GetConsoleWindow(); - Sleep(0); - return ServiceActivate(param,h); -} - - -INT CommandActivate (LPTSTR cmd, LPTSTR param) -{ - LPTSTR str; - HWND h; - - if (_tcsncmp (param, _T("/?"), 2) == 0) - { - ConOutPuts(_T("change console window aspect\n" - "\n" - "ACTIAVTE \"window\" [/POS[=]left,top,width,heigth]\n" - " [MIN|MAX|RESTORE] [\"title\"]\n" - "\n" - "window tile of window on wich perform actions\n" - "/POS specify window placement and dimensions\n" - "MIN minimize the window\n" - "MAX maximize the window\n" - "RESTORE restore the window\n" - "title new title")); - return 0; - } - - if(!(*param)) - return 1; - - str=_tcschr(param,_T(' ')); - - if (str) - { - *str=_T('\0'); - str++; - } - else - str = ""; - - h=FindWindow(NULL, param); - if (!h) - { - ConErrPuts("window not found"); - return 1; - } - - return ServiceActivate(str,h); -} - -#endif /* ( defined(INCLUDE_CMD_WINDOW) || defined(INCLUDE_CMD_ACTIVATE) ) */ diff --git a/rosapps/cmd/wishlist.txt b/rosapps/cmd/wishlist.txt deleted file mode 100644 index fe53603b48f..00000000000 --- a/rosapps/cmd/wishlist.txt +++ /dev/null @@ -1,15 +0,0 @@ - -Wishlist for ReactOS CMD -~~~~~~~~~~~~~~~~~~~~~~~~ - - - Exclusion wildcards: "del /r *.bak -abcd.bak" - Deletes ALL *.bak files EXCEPT abcd.bak. - - - Progress indikator on long file operations (copy/move). - Percentage at the right side of the filename. - - - [cd test directory] should change to the subdirectory "test directory". - -More ideas? - - Eric Kohl