Subversion Repositories SvarDOS

Rev

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

Rev 371 Rev 372
Line 4... Line 4...
4
 * returns -2 if command unrecognized */
4
 * returns -2 if command unrecognized */
5
 
5
 
6
#include <i86.h>
6
#include <i86.h>
7
#include <stdio.h>
7
#include <stdio.h>
8
#include <stdlib.h>
8
#include <stdlib.h>
-
 
9
#include <string.h>
9
 
10
 
10
#include "doserr.h"
11
#include "doserr.h"
11
#include "env.h"
12
#include "env.h"
12
#include "helpers.h"
13
#include "helpers.h"
13
 
14
 
Line 15... Line 16...
15
  int argc;                 /* number of arguments */
16
  int argc;                 /* number of arguments */
16
  const char *argv[256];    /* pointers to each argument */
17
  const char *argv[256];    /* pointers to each argument */
17
  unsigned short env_seg;   /* segment of environment block */
18
  unsigned short env_seg;   /* segment of environment block */
18
  unsigned short argoffset; /* offset of cmdline where first argument starts */
19
  unsigned short argoffset; /* offset of cmdline where first argument starts */
19
  const char far *cmdline;  /* original cmdline (terminated by \r) */
20
  const char far *cmdline;  /* original cmdline (terminated by \r) */
-
 
21
  char BUFFER[1024];        /* a buffer for whatever is needed */
20
};
22
};
21
 
23
 
22
#include "cmd/cd.c"
24
#include "cmd/cd.c"
23
#include "cmd/dir.c"
25
#include "cmd/dir.c"
24
#include "cmd/exit.c"
26
#include "cmd/exit.c"
-
 
27
#include "cmd/path.c"
25
#include "cmd/prompt.c"
28
#include "cmd/prompt.c"
26
#include "cmd/set.c"
29
#include "cmd/set.c"
27
 
30
 
28
#include "cmd.h"
31
#include "cmd.h"
29
 
32
 
30
 
33
 
31
struct CMD_ID {
34
struct CMD_ID {
32
  const char *cmd;
35
  const char *cmd;
33
  int (*func_ptr)(const struct cmd_funcparam *); /* pointer to handling function */
36
  int (*func_ptr)(struct cmd_funcparam *); /* pointer to handling function */
34
};
37
};
35
 
38
 
36
const struct CMD_ID INTERNAL_CMDS[] = {
39
const struct CMD_ID INTERNAL_CMDS[] = {
37
  {"CD",      cmd_cd},
40
  {"CD",      cmd_cd},
38
  {"CHDIR",   cmd_cd},
41
  {"CHDIR",   cmd_cd},
39
  {"DIR",     cmd_dir},
42
  {"DIR",     cmd_dir},
40
  {"EXIT",    cmd_exit},
43
  {"EXIT",    cmd_exit},
-
 
44
  {"PATH",    cmd_path},
41
  {"PROMPT",  cmd_prompt},
45
  {"PROMPT",  cmd_prompt},
42
  {"SET",     cmd_set},
46
  {"SET",     cmd_set},
43
  {NULL,      NULL}
47
  {NULL,      NULL}
44
};
48
};
45
 
49
 
Line 102... Line 106...
102
  argvlist[argc] = NULL;
106
  argvlist[argc] = NULL;
103
  return(argc);
107
  return(argc);
104
}
108
}
105
 
109
 
106
 
110
 
107
int cmd_process(unsigned short env_seg, const char far *cmdline) {
111
int cmd_process(unsigned short env_seg, const char far *cmdline, char *BUFFER) {
108
  const struct CMD_ID *cmdptr;
112
  const struct CMD_ID *cmdptr;
109
  struct cmd_funcparam p;
-
 
110
  unsigned short argoffset;
113
  unsigned short argoffset;
111
  char cmdbuff[256];
114
  struct cmd_funcparam *p = (void *)BUFFER;
112
 
115
 
113
  /* special case: is this a drive change? (like "E:") */
116
  /* special case: is this a drive change? (like "E:") */
114
  if ((cmdline[0] != 0) && (cmdline[1] == ':') && ((cmdline[2] == ' ') || (cmdline[2] == 0))) {
117
  if ((cmdline[0] != 0) && (cmdline[1] == ':') && ((cmdline[2] == ' ') || (cmdline[2] == 0))) {
115
    if (((cmdline[0] >= 'a') && (cmdline[0] <= 'z')) || ((cmdline[0] >= 'A') && (cmdline[0] <= 'Z'))) {
118
    if (((cmdline[0] >= 'a') && (cmdline[0] <= 'z')) || ((cmdline[0] >= 'A') && (cmdline[0] <= 'Z'))) {
116
      unsigned char drive = cmdline[0];
119
      unsigned char drive = cmdline[0];
Line 142... Line 145...
142
  if (cmdptr == NULL) return(-2); /* command is not recognized as internal */
145
  if (cmdptr == NULL) return(-2); /* command is not recognized as internal */
143
 
146
 
144
  /* printf("recognized internal command: '%s', tail of command at offset %u\r\n", cmdptr->cmd, argoffset); */
147
  /* printf("recognized internal command: '%s', tail of command at offset %u\r\n", cmdptr->cmd, argoffset); */
145
 
148
 
146
  /* prepare function parameters and feed it to the cmd handling function */
149
  /* prepare function parameters and feed it to the cmd handling function */
147
  p.argc = cmd_explode(cmdbuff, cmdline + argoffset, p.argv);
150
  p->argc = cmd_explode(BUFFER + sizeof(*p), cmdline + argoffset, p->argv);
148
  p.env_seg = env_seg;
151
  p->env_seg = env_seg;
149
  p.argoffset = argoffset;
152
  p->argoffset = argoffset;
150
  p.cmdline = cmdline;
153
  p->cmdline = cmdline;
151
 
154
 
152
  return((cmdptr->func_ptr)(&p));
155
  return((cmdptr->func_ptr)(p));
153
}
156
}