Subversion Repositories SvarDOS

Rev

Rev 514 | Rev 527 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 514 Rev 517
Line 34... Line 34...
34
#include <string.h>
34
#include <string.h>
35
 
35
 
36
#include "doserr.h"
36
#include "doserr.h"
37
#include "env.h"
37
#include "env.h"
38
#include "helpers.h"
38
#include "helpers.h"
-
 
39
#include "redir.h"
39
#include "rmodinit.h"
40
#include "rmodinit.h"
40
#include "sayonara.h"
41
#include "sayonara.h"
41
 
42
 
42
 
43
 
43
struct cmd_funcparam {
44
struct cmd_funcparam {
Line 196... Line 197...
196
  if (argvlist) argvlist[argc] = NULL;
197
  if (argvlist) argvlist[argc] = NULL;
197
  return(argc);
198
  return(argc);
198
}
199
}
199
 
200
 
200
 
201
 
201
int cmd_process(struct rmod_props far *rmod, unsigned short env_seg, const char *cmdline, void *BUFFER, unsigned short BUFFERSZ) {
202
int cmd_process(struct rmod_props far *rmod, unsigned short env_seg, const char *cmdline, void *BUFFER, unsigned short BUFFERSZ, const struct redir_data *redir) {
202
  const struct CMD_ID *cmdptr;
203
  const struct CMD_ID *cmdptr;
203
  unsigned short argoffset;
204
  unsigned short argoffset;
-
 
205
  int cmdres;
204
  struct cmd_funcparam *p = (void *)BUFFER;
206
  struct cmd_funcparam *p = (void *)BUFFER;
205
  p->BUFFERSZ = BUFFERSZ - sizeof(*p);
207
  p->BUFFERSZ = BUFFERSZ - sizeof(*p);
206
 
208
 
207
  /* special case: is this a drive change? (like "E:") */
209
  /* special case: is this a drive change? (like "E:") */
208
  if ((cmdline[0] != 0) && (cmdline[1] == ':') && ((cmdline[2] == ' ') || (cmdline[2] == 0))) {
210
  if ((cmdline[0] != 0) && (cmdline[1] == ':') && ((cmdline[2] == ' ') || (cmdline[2] == 0))) {
Line 235... Line 237...
235
  cmdptr = cmd_match(cmdline, &argoffset);
237
  cmdptr = cmd_match(cmdline, &argoffset);
236
  if (cmdptr == NULL) return(-2); /* command is not recognized as internal */
238
  if (cmdptr == NULL) return(-2); /* command is not recognized as internal */
237
 
239
 
238
  /* printf("recognized internal command: '%s', tail of command at offset %u\r\n", cmdptr->cmd, argoffset); */
240
  /* printf("recognized internal command: '%s', tail of command at offset %u\r\n", cmdptr->cmd, argoffset); */
239
 
241
 
-
 
242
  /* apply redirections (if any) */
-
 
243
  if (redir_apply(redir) != 0) return(-1);
-
 
244
 
240
  /* prepare function parameters and feed it to the cmd handling function */
245
  /* prepare function parameters and feed it to the cmd handling function */
241
  p->argc = cmd_explode(p->argvbuf, cmdline + argoffset, p->argv);
246
  p->argc = cmd_explode(p->argvbuf, cmdline + argoffset, p->argv);
242
  p->env_seg = env_seg;
247
  p->env_seg = env_seg;
243
  p->rmod = rmod;
248
  p->rmod = rmod;
244
  p->argoffset = argoffset;
249
  p->argoffset = argoffset;
245
  p->cmdline = cmdline;
250
  p->cmdline = cmdline;
246
 
251
 
247
  return((cmdptr->func_ptr)(p));
252
  cmdres = (cmdptr->func_ptr)(p);
-
 
253
 
-
 
254
  /* cancel redirections */
-
 
255
  redir_revert();
-
 
256
 
-
 
257
  return(cmdres);
248
}
258
}