ReactOS  0.4.15-dev-492-ga1108f6
misc.c File Reference
#include "precomp.h"
Include dependency graph for misc.c:

Go to the source code of this file.

Functions

TCHAR cgetchar (VOID)
 
VOID GetPathCase (TCHAR *Path, TCHAR *OutPath)
 
BOOL CheckCtrlBreak (INT mode)
 
BOOL add_entry (LPINT ac, LPTSTR **arg, LPCTSTR entry)
 
static BOOL expand (LPINT ac, LPTSTR **arg, LPCTSTR pattern)
 
LPTSTRsplit (LPTSTR s, LPINT args, BOOL expand_wildcards, BOOL handle_plus)
 
LPTSTRsplitspace (LPTSTR s, LPINT args)
 
VOID freep (LPTSTR *p)
 
LPTSTR _stpcpy (LPTSTR dest, LPCTSTR src)
 
VOID StripQuotes (TCHAR *in)
 
BOOL IsValidPathName (LPCTSTR pszPath)
 
BOOL IsExistingFile (LPCTSTR pszPath)
 
BOOL IsExistingDirectory (LPCTSTR pszPath)
 
BOOL FileGetString (HANDLE hFile, LPTSTR lpBuffer, INT nBufferLength)
 
BOOL __stdcall PagePrompt (PCON_PAGER Pager, DWORD Done, DWORD Total)
 
INT FilePromptYN (UINT resID)
 
INT FilePromptYNA (UINT resID)
 

Function Documentation

◆ _stpcpy()

LPTSTR _stpcpy ( LPTSTR  dest,
LPCTSTR  src 
)

Definition at line 460 of file misc.c.

461 {
462  _tcscpy (dest, src);
463  return (dest + _tcslen (src));
464 }
_TCHAR * _tcscpy(_TCHAR *to, const _TCHAR *from)
Definition: tcscpy.h:8
size_t __cdecl _tcslen(const _TCHAR *str)
Definition: tcslen.h:9
GLenum src
Definition: glext.h:6340
static char * dest
Definition: rtl.c:135

Referenced by BatchParams(), ExecuteAsync(), ForRecursive(), GetEnhancedVar(), ParseCommandPart(), ParseFor(), and SubstituteForVars().

◆ add_entry()

BOOL add_entry ( LPINT  ac,
LPTSTR **  arg,
LPCTSTR  entry 
)

Definition at line 184 of file misc.c.

185 {
186  LPTSTR q;
187  LPTSTR *oldarg;
188 
189  q = cmd_alloc ((_tcslen(entry) + 1) * sizeof (TCHAR));
190  if (!q)
191  {
192  WARN("Cannot allocate memory for q!\n");
193  return FALSE;
194  }
195 
196  _tcscpy (q, entry);
197  oldarg = *arg;
198  *arg = cmd_realloc (oldarg, (*ac + 2) * sizeof (LPTSTR));
199  if (!*arg)
200  {
201  WARN("Cannot reallocate memory for arg!\n");
202  *arg = oldarg;
203  cmd_free (q);
204  return FALSE;
205  }
206 
207  /* save new entry */
208  (*arg)[*ac] = q;
209  (*arg)[++(*ac)] = NULL;
210 
211  return TRUE;
212 }
#define TRUE
Definition: types.h:120
#define WARN(fmt,...)
Definition: debug.h:112
_TCHAR * _tcscpy(_TCHAR *to, const _TCHAR *from)
Definition: tcscpy.h:8
void * arg
Definition: msvc.h:10
CHAR * LPTSTR
Definition: xmlstorage.h:192
size_t __cdecl _tcslen(const _TCHAR *str)
Definition: tcslen.h:9
smooth NULL
Definition: ftsmooth.c:416
char TCHAR
Definition: xmlstorage.h:189
GLdouble GLdouble GLdouble GLdouble q
Definition: gl.h:2063
#define cmd_realloc(ptr, size)
Definition: cmddbg.h:30
uint32_t entry
Definition: isohybrid.c:63
#define cmd_alloc(size)
Definition: cmddbg.h:29
#define cmd_free(ptr)
Definition: cmddbg.h:31

Referenced by expand(), split(), and splitspace().

◆ cgetchar()

TCHAR cgetchar ( VOID  )

Definition at line 41 of file misc.c.

42 {
44  INPUT_RECORD irBuffer;
45  DWORD dwRead;
46 
47  do
48  {
49  ReadConsoleInput (hInput, &irBuffer, 1, &dwRead);
50  if ((irBuffer.EventType == KEY_EVENT) &&
51  (irBuffer.Event.KeyEvent.bKeyDown != FALSE))
52  {
53  if (irBuffer.Event.KeyEvent.dwControlKeyState &
55  {
56  if (irBuffer.Event.KeyEvent.wVirtualKeyCode == 'C')
57  {
58  bCtrlBreak = TRUE;
59  break;
60  }
61  }
62  else if ((irBuffer.Event.KeyEvent.wVirtualKeyCode == VK_SHIFT) ||
63  (irBuffer.Event.KeyEvent.wVirtualKeyCode == VK_MENU) ||
65  {
66  // Nothing to do
67  }
68  else
69  {
70  break;
71  }
72  }
73  }
74  while (TRUE);
75 
76 #ifndef _UNICODE
77  return irBuffer.Event.KeyEvent.uChar.AsciiChar;
78 #else
79  return irBuffer.Event.KeyEvent.uChar.UnicodeChar;
80 #endif /* _UNICODE */
81 }
union _KEY_EVENT_RECORD::@3198 uChar
#define TRUE
Definition: types.h:120
WCHAR UnicodeChar
Definition: wincon.h:245
DWORD dwControlKeyState
Definition: wincon.h:248
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
Definition: console.c:200
#define VK_MENU
Definition: winuser.h:2179
WORD wVirtualKeyCode
Definition: wincon.h:242
#define ReadConsoleInput
Definition: wincon.h:781
#define KEY_EVENT
Definition: wincon.h:128
#define VK_SHIFT
Definition: winuser.h:2177
#define STD_INPUT_HANDLE
Definition: winbase.h:264
KEY_EVENT_RECORD KeyEvent
Definition: wincon.h:278
unsigned long DWORD
Definition: ntddk_ex.h:95
#define LEFT_CTRL_PRESSED
Definition: wincon.h:140
#define VK_CONTROL
Definition: winuser.h:2178
WORD EventType
Definition: wincon.h:276
#define RIGHT_CTRL_PRESSED
Definition: wincon.h:139
union _INPUT_RECORD::@3199 Event
BOOL bCtrlBreak
Definition: cmd.c:154

Referenced by CheckCtrlBreak(), cmd_pause(), and cmd_replace().

◆ CheckCtrlBreak()

BOOL CheckCtrlBreak ( INT  mode)

Definition at line 132 of file misc.c.

133 {
134  static BOOL bLeaveAll = FALSE; /* leave all batch files */
135  TCHAR options[4]; /* Yes, No, All */
136  TCHAR c;
137 
138  switch (mode)
139  {
140  case BREAK_OUTOFBATCH:
141  bLeaveAll = FALSE;
142  return FALSE;
143 
144  case BREAK_BATCHFILE:
145  {
146  if (bLeaveAll)
147  return TRUE;
148 
149  if (!bCtrlBreak)
150  return FALSE;
151 
153 
155  do
156  {
157  c = _totupper(cgetchar());
158  } while (!(_tcschr(options, c) || c == _T('\3')) || !c);
159 
160  ConOutChar(_T('\n'));
161 
162  if (c == options[1])
163  {
164  bCtrlBreak = FALSE; /* ignore */
165  return FALSE;
166  }
167 
168  /* leave all batch files */
169  bLeaveAll = ((c == options[2]) || (c == _T('\3')));
170  break;
171  }
172 
173  case BREAK_INPUT:
174  if (!bCtrlBreak)
175  return FALSE;
176  break;
177  }
178 
179  /* state processed */
180  return TRUE;
181 }
#define TRUE
Definition: types.h:120
#define BREAK_BATCHFILE
Definition: cmd.h:31
#define BREAK_INPUT
Definition: cmd.h:33
VOID ConOutChar(TCHAR c)
Definition: console.c:123
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define _totupper
Definition: tchar.h:1509
TCHAR cgetchar(VOID)
Definition: misc.c:41
unsigned int BOOL
Definition: ntddk_ex.h:94
_TCHAR * _tcschr(const _TCHAR *s, _XINT c)
Definition: tcschr.h:4
#define STRING_CANCEL_BATCH_FILE
Definition: resource.h:240
char TCHAR
Definition: xmlstorage.h:189
#define _T(x)
Definition: vfdio.h:22
const GLubyte * c
Definition: glext.h:8905
#define STRING_COPY_OPTION
Definition: resource.h:20
GLenum mode
Definition: glext.h:6217
#define BREAK_OUTOFBATCH
Definition: cmd.h:32
HANDLE CMD_ModuleHandle
Definition: cmd.c:164
#define ConOutResPuts(uID)
Definition: console.h:36
#define c
Definition: ke_i.h:80
#define LoadString
Definition: winuser.h:5794
BOOL bCtrlBreak
Definition: cmd.c:154

Referenced by cmd_copy(), CommandDir(), copy(), DirList(), DirPrintBareList(), DirPrintNewList(), DirPrintOldList(), DirPrintWideList(), ReadBatchLine(), ReadLine(), recReplace(), RemoveFile(), and replace().

◆ expand()

static BOOL expand ( LPINT  ac,
LPTSTR **  arg,
LPCTSTR  pattern 
)
static

Definition at line 214 of file misc.c.

215 {
216  HANDLE hFind;
217  WIN32_FIND_DATA FindData;
218  BOOL ok;
219  LPCTSTR pathend;
220  LPTSTR dirpart, fullname;
221 
222  pathend = _tcsrchr (pattern, _T('\\'));
223  if (NULL != pathend)
224  {
225  dirpart = cmd_alloc((pathend - pattern + 2) * sizeof(TCHAR));
226  if (!dirpart)
227  {
228  WARN("Cannot allocate memory for dirpart!\n");
229  return FALSE;
230  }
231  memcpy(dirpart, pattern, pathend - pattern + 1);
232  dirpart[pathend - pattern + 1] = _T('\0');
233  }
234  else
235  {
236  dirpart = NULL;
237  }
238  hFind = FindFirstFile (pattern, &FindData);
239  if (INVALID_HANDLE_VALUE != hFind)
240  {
241  do
242  {
243  if (NULL != dirpart)
244  {
245  fullname = cmd_alloc((_tcslen(dirpart) + _tcslen(FindData.cFileName) + 1) * sizeof(TCHAR));
246  if (!fullname)
247  {
248  WARN("Cannot allocate memory for fullname!\n");
249  ok = FALSE;
250  }
251  else
252  {
253  _tcscat (_tcscpy (fullname, dirpart), FindData.cFileName);
254  ok = add_entry(ac, arg, fullname);
255  cmd_free (fullname);
256  }
257  }
258  else
259  {
260  ok = add_entry(ac, arg, FindData.cFileName);
261  }
262  } while (FindNextFile (hFind, &FindData) && ok);
263  FindClose (hFind);
264  }
265  else
266  {
267  ok = add_entry(ac, arg, pattern);
268  }
269 
270  if (NULL != dirpart)
271  {
272  cmd_free (dirpart);
273  }
274 
275  return ok;
276 }
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
BOOL add_entry(LPINT ac, LPTSTR **arg, LPCTSTR entry)
Definition: misc.c:184
#define WARN(fmt,...)
Definition: debug.h:112
#define INVALID_HANDLE_VALUE
Definition: compat.h:400
_TCHAR * _tcscpy(_TCHAR *to, const _TCHAR *from)
Definition: tcscpy.h:8
CHAR * LPTSTR
Definition: xmlstorage.h:192
unsigned int BOOL
Definition: ntddk_ex.h:94
size_t __cdecl _tcslen(const _TCHAR *str)
Definition: tcslen.h:9
smooth NULL
Definition: ftsmooth.c:416
#define FindFirstFile
Definition: winbase.h:3622
char TCHAR
Definition: xmlstorage.h:189
#define _T(x)
Definition: vfdio.h:22
#define FindNextFile
Definition: winbase.h:3628
const char * fullname
Definition: shader.c:1766
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define cmd_alloc(size)
Definition: cmddbg.h:29
#define cmd_free(ptr)
Definition: cmddbg.h:31
#define ok(value,...)
Definition: atltest.h:57
_TCHAR * _tcscat(_TCHAR *s, const _TCHAR *append)
Definition: tcscat.h:8
_TCHAR * _tcsrchr(const _TCHAR *s, _XINT c)
Definition: tcsrchr.h:4
GLubyte * pattern
Definition: glext.h:7787
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502

Referenced by aclist_Expand(), ShellBrowser::select_entry(), ShellBrowser::select_folder(), split(), and wine_fold_string().

◆ FileGetString()

BOOL FileGetString ( HANDLE  hFile,
LPTSTR  lpBuffer,
INT  nBufferLength 
)

Definition at line 513 of file misc.c.

514 {
515  LPSTR lpString;
516  DWORD dwRead;
517  INT len = 0;
518 #ifdef _UNICODE
519  lpString = cmd_alloc(nBufferLength);
520 #else
521  lpString = lpBuffer;
522 #endif
523 
524  if (ReadFile(hFile, lpString, nBufferLength - 1, &dwRead, NULL))
525  {
526  /* break at new line*/
527  CHAR *end = memchr(lpString, '\n', dwRead);
528  len = dwRead;
529  if (end)
530  {
531  len = (INT)(end - lpString) + 1;
533  }
534  }
535 
536  if (!len)
537  {
538 #ifdef _UNICODE
539  cmd_free(lpString);
540 #endif
541  return FALSE;
542  }
543 
544  lpString[len++] = '\0';
545 #ifdef _UNICODE
546  MultiByteToWideChar(OutputCodePage, 0, lpString, -1, lpBuffer, len);
547  cmd_free(lpString);
548 #endif
549  return TRUE;
550 }
#define TRUE
Definition: types.h:120
#define memchr(s, c, n)
Definition: mkisofs.h:875
char CHAR
Definition: xmlstorage.h:175
#define FILE_CURRENT
Definition: winbase.h:113
GLuint GLuint end
Definition: gl.h:1545
static INT
Definition: misc.c:33
char * LPSTR
Definition: xmlstorage.h:182
int32_t INT
Definition: typedefs.h:57
DWORD WINAPI DECLSPEC_HOTPATCH SetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod)
Definition: fileinfo.c:204
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
Definition: db.cpp:173
smooth NULL
Definition: ftsmooth.c:416
_In_ LPCSTR _In_opt_ LPCSTR _In_ DWORD nBufferLength
Definition: winbase.h:3034
UINT OutputCodePage
Definition: console.c:26
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLsizei len
Definition: glext.h:6722
_In_ HANDLE hFile
Definition: mswsock.h:90
#define cmd_alloc(size)
Definition: cmddbg.h:29
#define cmd_free(ptr)
Definition: cmddbg.h:31
#define MultiByteToWideChar
Definition: compat.h:100
BOOL WINAPI ReadFile(IN HANDLE hFile, IN LPVOID lpBuffer, IN DWORD nNumberOfBytesToRead, OUT LPDWORD lpNumberOfBytesRead OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:123

◆ FilePromptYN()

INT FilePromptYN ( UINT  resID)

Definition at line 600 of file misc.c.

601 {
602  TCHAR szMsg[RC_STRING_MAX_SIZE];
603 // TCHAR cKey = 0;
604 // LPTSTR szKeys = _T("yna");
605 
606  TCHAR szIn[10];
607  LPTSTR p;
608 
609  if (resID != 0)
610  ConOutResPrintf (resID);
611 
612  /* preliminary fix */
613  ConInString(szIn, 10);
614  ConOutChar(_T('\n'));
615 
616  _tcsupr (szIn);
617  for (p = szIn; _istspace (*p); p++)
618  ;
619 
621 
622  if (_tcsncmp(p, &szMsg[0], 1) == 0)
623  return PROMPT_YES;
624  else if (_tcsncmp(p, &szMsg[1], 1) == 0)
625  return PROMPT_NO;
626 #if 0
627  else if (*p == _T('\03'))
628  return PROMPT_BREAK;
629 #endif
630 
631  return PROMPT_NO;
632 
633  /* unfinished solution */
634 #if 0
636  ConInDisable();
637 
638  do
639  {
640  ConInKey (&ir);
641  cKey = _totlower (ir.Event.KeyEvent.uChar.AsciiChar);
642  if (_tcschr (szKeys, cKey[0]) == NULL)
643  cKey = 0;
644 
645 
646  }
647  while ((ir.Event.KeyEvent.wVirtualKeyCode == VK_SHIFT) ||
648  (ir.Event.KeyEvent.wVirtualKeyCode == VK_MENU) ||
649  (ir.Event.KeyEvent.wVirtualKeyCode == VK_CONTROL));
650 
651  AddBreakHandler();
652  ConInEnable();
653 
654  if ((ir.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE) ||
655  ((ir.Event.KeyEvent.wVirtualKeyCode == 'C') &&
656  (ir.Event.KeyEvent.dwControlKeyState & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED))))
657  return PROMPT_BREAK;
658 
659  return PROMPT_YES;
660 #endif
661 }
VOID ConOutChar(TCHAR c)
Definition: console.c:123
static VOID ConInString(LPWSTR lpInput, DWORD dwLength)
Definition: label.c:56
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define PROMPT_BREAK
Definition: cmd.h:291
#define PROMPT_NO
Definition: cmd.h:288
#define VK_MENU
Definition: winuser.h:2179
#define VK_ESCAPE
Definition: winuser.h:2189
CHAR * LPTSTR
Definition: xmlstorage.h:192
VOID ConInKey(PINPUT_RECORD lpBuffer)
Definition: console.c:61
#define VK_SHIFT
Definition: winuser.h:2177
smooth NULL
Definition: ftsmooth.c:416
_TCHAR * _tcschr(const _TCHAR *s, _XINT c)
Definition: tcschr.h:4
char TCHAR
Definition: xmlstorage.h:189
#define _T(x)
Definition: vfdio.h:22
VOID ConInEnable(VOID)
Definition: console.c:46
#define ConOutResPrintf(uID,...)
Definition: console.h:48
VOID ConInDisable(VOID)
Definition: console.c:36
#define _totlower
Definition: tchar.h:1511
#define LEFT_CTRL_PRESSED
Definition: wincon.h:140
#define _tcsupr
Definition: tchar.h:1467
VOID AddBreakHandler(VOID)
Definition: cmd.c:1572
#define STRING_CHOICE_OPTION
Definition: resource.h:19
#define PROMPT_YES
Definition: cmd.h:289
HANDLE CMD_ModuleHandle
Definition: cmd.c:164
#define VK_CONTROL
Definition: winuser.h:2178
#define _istspace
Definition: tchar.h:1504
#define RIGHT_CTRL_PRESSED
Definition: wincon.h:139
GLfloat GLfloat p
Definition: glext.h:8902
int _tcsncmp(const _TCHAR *s1, const _TCHAR *s2, size_t n)
Definition: tcsncmp.h:9
#define LoadString
Definition: winuser.h:5794
VOID RemoveBreakHandler(VOID)
Definition: cmd.c:1578
#define RC_STRING_MAX_SIZE
Definition: resource.h:3

Referenced by DeleteFiles().

◆ FilePromptYNA()

INT FilePromptYNA ( UINT  resID)

Definition at line 664 of file misc.c.

665 {
666  TCHAR szMsg[RC_STRING_MAX_SIZE];
667 // TCHAR cKey = 0;
668 // LPTSTR szKeys = _T("yna");
669 
670  TCHAR szIn[10];
671  LPTSTR p;
672 
673  if (resID != 0)
674  ConOutResPrintf (resID);
675 
676  /* preliminary fix */
677  ConInString(szIn, 10);
678  ConOutChar(_T('\n'));
679 
680  _tcsupr (szIn);
681  for (p = szIn; _istspace (*p); p++)
682  ;
683 
685 
686  if (_tcsncmp(p, &szMsg[0], 1) == 0)
687  return PROMPT_YES;
688  else if (_tcsncmp(p, &szMsg[1], 1) == 0)
689  return PROMPT_NO;
690  else if (_tcsncmp(p, &szMsg[2], 1) == 0)
691  return PROMPT_ALL;
692 #if 0
693  else if (*p == _T('\03'))
694  return PROMPT_BREAK;
695 #endif
696 
697  return PROMPT_NO;
698 
699  /* unfinished solution */
700 #if 0
702  ConInDisable();
703 
704  do
705  {
706  ConInKey (&ir);
707  cKey = _totlower (ir.Event.KeyEvent.uChar.AsciiChar);
708  if (_tcschr (szKeys, cKey[0]) == NULL)
709  cKey = 0;
710  }
711  while ((ir.Event.KeyEvent.wVirtualKeyCode == VK_SHIFT) ||
712  (ir.Event.KeyEvent.wVirtualKeyCode == VK_MENU) ||
713  (ir.Event.KeyEvent.wVirtualKeyCode == VK_CONTROL));
714 
715  AddBreakHandler();
716  ConInEnable();
717 
718  if ((ir.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE) ||
719  ((ir.Event.KeyEvent.wVirtualKeyCode == _T('C')) &&
720  (ir.Event.KeyEvent.dwControlKeyState & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED))))
721  return PROMPT_BREAK;
722 
723  return PROMPT_YES;
724 #endif
725 }
VOID ConOutChar(TCHAR c)
Definition: console.c:123
static VOID ConInString(LPWSTR lpInput, DWORD dwLength)
Definition: label.c:56
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define PROMPT_BREAK
Definition: cmd.h:291
#define PROMPT_NO
Definition: cmd.h:288
#define VK_MENU
Definition: winuser.h:2179
#define VK_ESCAPE
Definition: winuser.h:2189
#define PROMPT_ALL
Definition: cmd.h:290
CHAR * LPTSTR
Definition: xmlstorage.h:192
VOID ConInKey(PINPUT_RECORD lpBuffer)
Definition: console.c:61
#define VK_SHIFT
Definition: winuser.h:2177
smooth NULL
Definition: ftsmooth.c:416
_TCHAR * _tcschr(const _TCHAR *s, _XINT c)
Definition: tcschr.h:4
char TCHAR
Definition: xmlstorage.h:189
#define _T(x)
Definition: vfdio.h:22
VOID ConInEnable(VOID)
Definition: console.c:46
#define ConOutResPrintf(uID,...)
Definition: console.h:48
#define STRING_COPY_OPTION
Definition: resource.h:20
VOID ConInDisable(VOID)
Definition: console.c:36
#define _totlower
Definition: tchar.h:1511
#define LEFT_CTRL_PRESSED
Definition: wincon.h:140
#define _tcsupr
Definition: tchar.h:1467
VOID AddBreakHandler(VOID)
Definition: cmd.c:1572
#define PROMPT_YES
Definition: cmd.h:289
HANDLE CMD_ModuleHandle
Definition: cmd.c:164
#define VK_CONTROL
Definition: winuser.h:2178
#define _istspace
Definition: tchar.h:1504
#define RIGHT_CTRL_PRESSED
Definition: wincon.h:139
GLfloat GLfloat p
Definition: glext.h:8902
int _tcsncmp(const _TCHAR *s1, const _TCHAR *s2, size_t n)
Definition: tcsncmp.h:9
#define LoadString
Definition: winuser.h:5794
VOID RemoveBreakHandler(VOID)
Definition: cmd.c:1578
#define RC_STRING_MAX_SIZE
Definition: resource.h:3

Referenced by cmd_rmdir(), CopyOverwrite(), DeleteFiles(), MoveOverwrite(), and replace().

◆ freep()

VOID freep ( LPTSTR p)

Definition at line 446 of file misc.c.

447 {
448  LPTSTR *q;
449 
450  if (!p)
451  return;
452 
453  q = p;
454  while (*q)
455  cmd_free(*q++);
456 
457  cmd_free(p);
458 }
CHAR * LPTSTR
Definition: xmlstorage.h:192
GLdouble GLdouble GLdouble GLdouble q
Definition: gl.h:2063
#define cmd_free(ptr)
Definition: cmddbg.h:31
GLfloat GLfloat p
Definition: glext.h:8902

Referenced by split(), and splitspace().

◆ GetPathCase()

VOID GetPathCase ( TCHAR Path,
TCHAR OutPath 
)

Definition at line 86 of file misc.c.

87 {
88  UINT i = 0;
89  TCHAR TempPath[MAX_PATH];
90  WIN32_FIND_DATA FindFileData;
91  HANDLE hFind;
92  _tcscpy(TempPath, _T(""));
93  _tcscpy(OutPath, _T(""));
94 
95  for(i = 0; i < _tcslen(Path); i++)
96  {
97  if (Path[i] != _T('\\'))
98  {
99  _tcsncat(TempPath, &Path[i], 1);
100  if (i != _tcslen(Path) - 1)
101  continue;
102  }
103  /* Handle the base part of the path different.
104  Because if you put it into findfirstfile, it will
105  return your current folder */
106  if (_tcslen(TempPath) == 2 && TempPath[1] == _T(':'))
107  {
108  _tcscat(OutPath, TempPath);
109  _tcscat(OutPath, _T("\\"));
110  _tcscat(TempPath, _T("\\"));
111  }
112  else
113  {
114  hFind = FindFirstFile(TempPath,&FindFileData);
115  if (hFind == INVALID_HANDLE_VALUE)
116  {
117  _tcscpy(OutPath, Path);
118  return;
119  }
120  _tcscat(TempPath, _T("\\"));
121  _tcscat(OutPath, FindFileData.cFileName);
122  _tcscat(OutPath, _T("\\"));
123  FindClose(hFind);
124  }
125  }
126 }
#define INVALID_HANDLE_VALUE
Definition: compat.h:400
_TCHAR * _tcscpy(_TCHAR *to, const _TCHAR *from)
Definition: tcscpy.h:8
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
size_t __cdecl _tcslen(const _TCHAR *str)
Definition: tcslen.h:9
#define FindFirstFile
Definition: winbase.h:3622
char TCHAR
Definition: xmlstorage.h:189
#define _T(x)
Definition: vfdio.h:22
_TCHAR * _tcsncat(_TCHAR *dst, const _TCHAR *src, size_t n)
Definition: tcsncat.h:5
#define MAX_PATH
Definition: compat.h:26
PRTL_UNICODE_STRING_BUFFER Path
unsigned int UINT
Definition: ndis.h:50
_TCHAR * _tcscat(_TCHAR *s, const _TCHAR *append)
Definition: tcscat.h:8
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502

Referenced by replace(), and SetRootPath().

◆ IsExistingDirectory()

BOOL IsExistingDirectory ( LPCTSTR  pszPath)

Definition at line 506 of file misc.c.

507 {
508  DWORD attr = GetFileAttributes (pszPath);
509  return (attr != 0xFFFFFFFF && (attr & FILE_ATTRIBUTE_DIRECTORY) );
510 }
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
unsigned long DWORD
Definition: ntddk_ex.h:95
Definition: cookie.c:201
#define GetFileAttributes
Definition: winbase.h:3655

Referenced by cmd_copy(), cmd_move(), cmd_replace(), DeleteFiles(), GetDirectory(), ProcessDirectory(), recFindSubDirs(), and ResolvePattern().

◆ IsExistingFile()

BOOL IsExistingFile ( LPCTSTR  pszPath)

Definition at line 499 of file misc.c.

500 {
501  DWORD attr = GetFileAttributes (pszPath);
502  return (attr != 0xFFFFFFFF && (! (attr & FILE_ATTRIBUTE_DIRECTORY)) );
503 }
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
unsigned long DWORD
Definition: ntddk_ex.h:95
Definition: cookie.c:201
#define GetFileAttributes
Definition: winbase.h:3655

Referenced by Cleanup(), cmd_copy(), cmd_move(), cmd_replace(), copy(), DoCommand(), Initialize(), recFindSubDirs(), recReplace(), replace(), and SearchForExecutableSingle().

◆ IsValidPathName()

BOOL IsValidPathName ( LPCTSTR  pszPath)

Definition at line 482 of file misc.c.

483 {
484  TCHAR szOldPath[MAX_PATH];
485  BOOL bResult;
486 
487  GetCurrentDirectory (MAX_PATH, szOldPath);
488  bResult = SetCurrentDirectory (pszPath);
489 
490  SetCurrentDirectory (szOldPath);
491 
492  return bResult;
493 }
unsigned int BOOL
Definition: ntddk_ex.h:94
#define GetCurrentDirectory
Definition: winbase.h:3645
char TCHAR
Definition: xmlstorage.h:189
#define MAX_PATH
Definition: compat.h:26
#define SetCurrentDirectory
Definition: winbase.h:3743

◆ PagePrompt()

BOOL __stdcall PagePrompt ( PCON_PAGER  Pager,
DWORD  Done,
DWORD  Total 
)

Definition at line 553 of file misc.c.

554 {
555  SHORT iScreenWidth, iCursorY;
556  INPUT_RECORD ir;
557 
559 
561  ConInDisable();
562 
563  do
564  {
565  ConInKey(&ir);
566  }
567  while ((ir.Event.KeyEvent.wVirtualKeyCode == VK_SHIFT) ||
570 
571  AddBreakHandler();
572  ConInEnable();
573 
574  /*
575  * Get the screen width, erase the full line where the cursor is,
576  * and move the cursor back to the beginning of the line.
577  */
578  GetScreenSize(&iScreenWidth, NULL);
579  iCursorY = GetCursorY();
580  SetCursorXY(0, iCursorY);
581  while (iScreenWidth-- > 0) // Or call FillConsoleOutputCharacter ?
582  ConOutChar(_T(' '));
583  SetCursorXY(0, iCursorY);
584 
585  if ((ir.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE) ||
586  ((ir.Event.KeyEvent.wVirtualKeyCode == _T('C')) &&
588  {
589  /* We break, output a newline */
590  ConOutChar(_T('\n'));
591 
592  bCtrlBreak = TRUE;
593  return FALSE;
594  }
595 
596  return TRUE;
597 }
#define TRUE
Definition: types.h:120
VOID ConOutChar(TCHAR c)
Definition: console.c:123
DWORD dwControlKeyState
Definition: wincon.h:248
#define VK_MENU
Definition: winuser.h:2179
#define VK_ESCAPE
Definition: winuser.h:2189
WORD wVirtualKeyCode
Definition: wincon.h:242
VOID ConInKey(PINPUT_RECORD lpBuffer)
Definition: console.c:61
short SHORT
Definition: pedump.c:59
#define VK_SHIFT
Definition: winuser.h:2177
smooth NULL
Definition: ftsmooth.c:416
#define _T(x)
Definition: vfdio.h:22
VOID ConInEnable(VOID)
Definition: console.c:46
KEY_EVENT_RECORD KeyEvent
Definition: wincon.h:278
VOID ConInDisable(VOID)
Definition: console.c:36
#define LEFT_CTRL_PRESSED
Definition: wincon.h:140
VOID GetScreenSize(PSHORT maxx, PSHORT maxy)
Definition: console.c:236
VOID AddBreakHandler(VOID)
Definition: cmd.c:1572
VOID SetCursorXY(SHORT x, SHORT y)
Definition: console.c:191
#define STRING_MISC_HELP1
Definition: resource.h:144
#define VK_CONTROL
Definition: winuser.h:2178
SHORT GetCursorY(VOID)
Definition: console.c:218
#define ConOutResPuts(uID)
Definition: console.h:36
#define RIGHT_CTRL_PRESSED
Definition: wincon.h:139
union _INPUT_RECORD::@3199 Event
VOID RemoveBreakHandler(VOID)
Definition: cmd.c:1578
BOOL bCtrlBreak
Definition: cmd.c:154

◆ split()

LPTSTR* split ( LPTSTR  s,
LPINT  args,
BOOL  expand_wildcards,
BOOL  handle_plus 
)

Definition at line 282 of file misc.c.

283 {
284  LPTSTR *arg;
285  LPTSTR start;
286  LPTSTR q;
287  INT ac;
288  INT_PTR len;
289 
290  arg = cmd_alloc (sizeof (LPTSTR));
291  if (!arg)
292  {
293  WARN("Cannot allocate memory for arg!\n");
294  return NULL;
295  }
296  *arg = NULL;
297 
298  ac = 0;
299  while (*s)
300  {
301  BOOL bQuoted = FALSE;
302 
303  /* skip leading spaces */
304  while (*s && (_istspace(*s) || _istcntrl(*s)))
305  ++s;
306 
307  start = s;
308 
309  /* the first character can be '/' */
310  if (*s == _T('/'))
311  ++s;
312 
313  /* skip to next word delimiter or start of next option */
314  while (_istprint(*s))
315  {
316  /* if quote (") then set bQuoted */
317  bQuoted ^= (*s == _T('\"'));
318 
319  /* Check if we have unquoted text */
320  if (!bQuoted)
321  {
322  /* check for separators */
323  if (_istspace(*s) ||
324  (*s == _T('/')) ||
325  (handle_plus && (*s == _T('+'))))
326  {
327  /* Make length at least one character */
328  if (s == start) s++;
329  break;
330  }
331  }
332 
333  ++s;
334  }
335 
336  /* a word was found */
337  if (s != start)
338  {
339  q = cmd_alloc (((len = s - start) + 1) * sizeof (TCHAR));
340  if (!q)
341  {
342  WARN("Cannot allocate memory for q!\n");
343  return NULL;
344  }
345  memcpy (q, start, len * sizeof (TCHAR));
346  q[len] = _T('\0');
347  StripQuotes(q);
348  if (expand_wildcards && (_T('/') != *start) &&
349  (NULL != _tcschr(q, _T('*')) || NULL != _tcschr(q, _T('?'))))
350  {
351  if (! expand(&ac, &arg, q))
352  {
353  cmd_free (q);
354  freep (arg);
355  return NULL;
356  }
357  }
358  else
359  {
360  if (! add_entry(&ac, &arg, q))
361  {
362  cmd_free (q);
363  freep (arg);
364  return NULL;
365  }
366  }
367  cmd_free (q);
368  }
369  }
370 
371  *args = ac;
372 
373  return arg;
374 }
BOOL add_entry(LPINT ac, LPTSTR **arg, LPCTSTR entry)
Definition: misc.c:184
#define WARN(fmt,...)
Definition: debug.h:112
void * arg
Definition: msvc.h:10
int32_t INT_PTR
Definition: typedefs.h:63
Definition: match.c:390
int32_t INT
Definition: typedefs.h:57
CHAR * LPTSTR
Definition: xmlstorage.h:192
unsigned int BOOL
Definition: ntddk_ex.h:94
smooth NULL
Definition: ftsmooth.c:416
static BOOL expand(LPINT ac, LPTSTR **arg, LPCTSTR pattern)
Definition: misc.c:214
_TCHAR * _tcschr(const _TCHAR *s, _XINT c)
Definition: tcschr.h:4
char TCHAR
Definition: xmlstorage.h:189
#define _T(x)
Definition: vfdio.h:22
GLdouble GLdouble GLdouble GLdouble q
Definition: gl.h:2063
#define _istcntrl
Definition: tchar.h:739
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
GLdouble s
Definition: gl.h:2039
#define _istprint
Definition: tchar.h:1500
#define cmd_alloc(size)
Definition: cmddbg.h:29
#define cmd_free(ptr)
Definition: cmddbg.h:31
GLuint start
Definition: gl.h:1545
VOID freep(LPTSTR *p)
Definition: misc.c:446
#define _istspace
Definition: tchar.h:1504
VOID StripQuotes(TCHAR *in)
Definition: misc.c:467

◆ splitspace()

LPTSTR* splitspace ( LPTSTR  s,
LPINT  args 
)

Definition at line 381 of file misc.c.

382 {
383  LPTSTR *arg;
384  LPTSTR start;
385  LPTSTR q;
386  INT ac;
387  INT_PTR len;
388 
389  arg = cmd_alloc (sizeof (LPTSTR));
390  if (!arg)
391  {
392  WARN("Cannot allocate memory for arg!\n");
393  return NULL;
394  }
395  *arg = NULL;
396 
397  ac = 0;
398  while (*s)
399  {
400  BOOL bQuoted = FALSE;
401 
402  /* skip leading spaces */
403  while (*s && (_istspace (*s) || _istcntrl (*s)))
404  ++s;
405 
406  start = s;
407 
408  /* skip to next word delimiter or start of next option */
409  while (_istprint(*s) && (bQuoted || !_istspace(*s)))
410  {
411  /* if quote (") then set bQuoted */
412  bQuoted ^= (*s == _T('\"'));
413  ++s;
414  }
415 
416  /* a word was found */
417  if (s != start)
418  {
419  q = cmd_alloc (((len = s - start) + 1) * sizeof (TCHAR));
420  if (!q)
421  {
422  WARN("Cannot allocate memory for q!\n");
423  return NULL;
424  }
425  memcpy (q, start, len * sizeof (TCHAR));
426  q[len] = _T('\0');
427  StripQuotes(q);
428  if (! add_entry(&ac, &arg, q))
429  {
430  cmd_free (q);
431  freep (arg);
432  return NULL;
433  }
434  cmd_free (q);
435  }
436  }
437 
438  *args = ac;
439 
440  return arg;
441 }
BOOL add_entry(LPINT ac, LPTSTR **arg, LPCTSTR entry)
Definition: misc.c:184
#define WARN(fmt,...)
Definition: debug.h:112
void * arg
Definition: msvc.h:10
int32_t INT_PTR
Definition: typedefs.h:63
Definition: match.c:390
int32_t INT
Definition: typedefs.h:57
CHAR * LPTSTR
Definition: xmlstorage.h:192
unsigned int BOOL
Definition: ntddk_ex.h:94
smooth NULL
Definition: ftsmooth.c:416
char TCHAR
Definition: xmlstorage.h:189
#define _T(x)
Definition: vfdio.h:22
GLdouble GLdouble GLdouble GLdouble q
Definition: gl.h:2063
#define _istcntrl
Definition: tchar.h:739
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
GLdouble s
Definition: gl.h:2039
#define _istprint
Definition: tchar.h:1500
#define cmd_alloc(size)
Definition: cmddbg.h:29
#define cmd_free(ptr)
Definition: cmddbg.h:31
GLuint start
Definition: gl.h:1545
VOID freep(LPTSTR *p)
Definition: misc.c:446
#define _istspace
Definition: tchar.h:1504
VOID StripQuotes(TCHAR *in)
Definition: misc.c:467

Referenced by cmd_move(), and cmd_setlocal().

◆ StripQuotes()

VOID StripQuotes ( TCHAR in)

Definition at line 467 of file misc.c.

468 {
469  TCHAR *out = in;
470  for (; *in; in++)
471  {
472  if (*in != _T('"'))
473  *out++ = *in;
474  }
475  *out = _T('\0');
476 }
char TCHAR
Definition: xmlstorage.h:189
#define _T(x)
Definition: vfdio.h:22
static FILE * out
Definition: regtests2xml.c:44
GLuint in
Definition: glext.h:9616

Referenced by split(), and splitspace().