xref: /aoo4110/main/soldep/inc/soldep/command.hxx (revision b1cdbd2c)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef COMMAND_HXX
25 #define COMMAND_HXX
26 
27 #include <iostream>
28 
29 #include <tools/stream.hxx>
30 #define STRLEN 100
31 #ifndef UNX
32 #define TMPNAME "\\command.tmp"
33 #else
34 #define TMPNAME "/tmp/command.tmp"
35 #endif
36 
37 /** Different types of spawnable programs
38 */
39 enum ExeType
40 {
41 	EXE,	/// programm is a native executable
42 	BAT, 	/// programm is a DOS-Batch
43 	BTM 	/// programm is a 4DOS-Batch
44 };
45 
46 #define COMMAND_NOTFOUND	0x0001
47 #define COMMAND_TOOBIG		0x0002
48 #define COMMAND_INVALID		0x0004
49 #define COMMAND_NOEXEC		0x0008
50 #define COMMAND_NOMEM		0x0010
51 #define COMMAND_UNKNOWN		0x0020
52 
53 #ifdef WNT
54 #define COMMAND_SHELL	"4nt.exe"
55 #endif
56 #ifdef OS2
57 #define COMMAND_SHELL  "4os2.exe"
58 #endif
59 #ifdef UNX
60 #define COMMAND_SHELL	"csh"
61 #endif
62 
63 class CommandLine;
64 class LogWindow;
65 
66 class CommandLine
67 {
68 friend class ChildProcess;
69 private:
70 	char 			*CommandBuffer;
71 	char 			*ComShell;
72 	char 			**ppArgv;
73 	sal_Bool			bTmpWrite;
74 
75 public:
76 					CommandLine(sal_Bool bTmpWrite = sal_False);
77 					CommandLine(const char *, sal_Bool bTmpWrite = sal_False);
78 					CommandLine(const CommandLine&, sal_Bool bTmpWrite = sal_False);
79 	virtual 		~CommandLine();
80 
81 	int 			nArgc;
82 
83 	CommandLine& 	operator=(const CommandLine&);
84 	CommandLine& 	operator=(const char *);
85 	void 			BuildCommand(const char *);
GetCommand(void)86 	char**			GetCommand(void) { return ppArgv; }
87 	void 			Strtokens(const char *);
88 	void 			Print();
89 };
90 
91 /** Declares and spawns a child process.
92 	The spawned programm could be a native executable or a schell script.
93 */
94 class CCommand
95 {
96 private:
97 	ByteString			aCommandLine;
98 	ByteString			aCommand;
99 	char				*pArgv;
100 	char				**ppArgv;
101 	sal_uIntPtr				nArgc;
102 	int					nError;
103 
104 protected:
105 	void			ImplInit();
106 	void			Initpp( sal_uIntPtr nCount, ByteString &rStr );
107 
108 public:
109 					/** Creates the process specified without spawning it
110 						@param rString specifies the programm or shell scrip
111 					*/
112 					CCommand( ByteString &rString );
113 
114 					/** Creates the process specified without spawning it
115 						@param pChar specifies the programm or shell scrip
116 					*/
117 					CCommand( const char *pChar );
118 
119 					/** Try to find the given programm in specified path
120 						@param sEnv specifies the current search path, defaulted by environment
121 						@param sItem specifies the system shell
122 						@return the Location (when programm was found)
123 					*/
124 	static ByteString	Search( ByteString sEnv,
125 									ByteString sItem = COMMAND_SHELL );
126 
127 					/** Spawns the Process
128 						@return 0 when spawned without errors, otherwise a error code
129 					*/
130 	operator int();
131 
GetCommandLine_()132 	ByteString			GetCommandLine_() { return aCommandLine; }
GetCommand()133 	ByteString			GetCommand() { return aCommand; }
134 
GetCommandStr()135 	char**	GetCommandStr() { return ppArgv; }
136 };
137 
138 #define COMMAND_EXECUTE_WINDOW	0x0000001
139 #define COMMAND_EXECUTE_CONSOLE	0x0000002
140 #define COMMAND_EXECUTE_HIDDEN  0x0000004
141 #define COMMAND_EXECUTE_START   0x0000008
142 #define COMMAND_EXECUTE_WAIT    0x0000010
143 #define COMMAND_EXECUTE_REMOTE  0x1000000
144 
145 typedef sal_uIntPtr CommandBits;
146 
147 /** Allowes to spawn programms hidden, waiting etc.
148 	@see CCommand
149 */
150 class CCommandd : public CCommand
151 {
152 	CommandBits		nFlag;
153 public:
154 					CCommandd( ByteString &rString, CommandBits nBits );
155 					CCommandd( const char *pChar, CommandBits nBits );
156 	operator int();
157 };
158 
159 #endif
160