2d5d02e383c795b2f7db1122891d8d51d6c39478
[reactos.git] / reactos / subsys / system / cmd / call.c
1 /*
2 * CALL.C - call internal batch command.
3 *
4 *
5 * History:
6 *
7 * 16 Jul 1998 (Hans B Pufal)
8 * started.
9 *
10 * 16 Jul 1998 (John P Price)
11 * Seperated commands into individual files.
12 *
13 * 27-Jul-1998 (John P Price <linux-guru@gcfl.net>)
14 * added config.h include
15 *
16 * 04-Aug-1998 (Hans B Pufal)
17 * added lines to initialize for pointers (HBP004) This fixed the
18 * lock-up that happened sometimes when calling a batch file from
19 * another batch file.
20 *
21 * 07-Jan-1999 (Eric Kohl <ekohl@abo.rhein-zeitung.de>)
22 * Added help text ("call /?") and cleaned up.
23 *
24 * 20-Jan-1999 (Eric Kohl <ekohl@abo.rhein-zeitung.de>)
25 * Unicode and redirection safe!
26 *
27 * 02-Apr-2005 (Magnus Olsen) <magnus@greatlord.com>)
28 * Remove all hardcode string to En.rc
29 */
30
31 #include "precomp.h"
32 #include "resource.h"
33
34
35 /*
36 * Perform CALL command.
37 *
38 * Allocate a new batch context and add it to the current chain.
39 * Call parsecommandline passing in our param string
40 * If No batch file was opened then remove our newly allocted
41 * context block.
42 */
43
44 INT cmd_call (LPTSTR cmd, LPTSTR param)
45 {
46 LPBATCH_CONTEXT n = NULL;
47
48 #ifdef _DEBUG
49 DebugPrintf (_T("cmd_call: (\'%s\',\'%s\')\n"), cmd, param);
50 #endif
51 if (!_tcsncmp (param, _T("/?"), 2))
52 {
53 ConOutResPuts(STRING_CALL_HELP);
54 return 0;
55 }
56
57 n = (LPBATCH_CONTEXT)malloc (sizeof (BATCH_CONTEXT));
58
59 if (n == NULL)
60 {
61 error_out_of_memory ();
62 return 1;
63 }
64
65 n->prev = bc;
66 bc = n;
67
68 bc->hBatchFile = INVALID_HANDLE_VALUE;
69 bc->params = NULL;
70 bc->shiftlevel = 0;
71 bc->forvar = 0; /* HBP004 */
72 bc->forproto = NULL; /* HBP004 */
73
74 ParseCommandLine (param);
75
76 /* Wasn't a batch file so remove conext */
77 if (bc->hBatchFile == INVALID_HANDLE_VALUE)
78 {
79 bc = bc->prev;
80 free (n);
81 }
82
83 return 0;
84 }
85
86 /* EOF */