Subversion Repositories SvarDOS

Rev

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

Rev 352 Rev 353
Line 109... Line 109...
109
 
109
 
110
int main(int argc, char **argv) {
110
int main(int argc, char **argv) {
111
  struct config cfg;
111
  struct config cfg;
112
  unsigned short rmod_seg;
112
  unsigned short rmod_seg;
113
  unsigned short far *rmod_envseg;
113
  unsigned short far *rmod_envseg;
114
  int ecode = 0;
114
  unsigned short far *lastexitcode;
115
 
115
 
116
  parse_argv(&cfg, argc, argv);
116
  parse_argv(&cfg, argc, argv);
117
 
117
 
118
  rmod_seg = rmod_find();
118
  rmod_seg = rmod_find();
119
  if (rmod_seg == 0xffff) {
119
  if (rmod_seg == 0xffff) {
Line 127... Line 127...
127
  } else {
127
  } else {
128
    printf("rmod found at seg 0x%04x\r\n", rmod_seg);
128
    printf("rmod found at seg 0x%04x\r\n", rmod_seg);
129
  }
129
  }
130
 
130
 
131
  rmod_envseg = MK_FP(rmod_seg, RMOD_OFFSET_ENVSEG);
131
  rmod_envseg = MK_FP(rmod_seg, RMOD_OFFSET_ENVSEG);
-
 
132
  lastexitcode = MK_FP(rmod_seg, RMOD_OFFSET_LEXITCODE);
132
 
133
 
133
  {
134
  {
134
    unsigned short envsiz;
135
    unsigned short envsiz;
135
    unsigned short far *sizptr = MK_FP(*rmod_envseg - 1, 3);
136
    unsigned short far *sizptr = MK_FP(*rmod_envseg - 1, 3);
136
    envsiz = *sizptr;
137
    envsiz = *sizptr;
Line 200... Line 201...
200
 
201
 
201
    /* is it about quitting? */
202
    /* is it about quitting? */
202
    if (imatch(argvlist[0], "exit")) break;
203
    if (imatch(argvlist[0], "exit")) break;
203
 
204
 
204
    /* try running it as an internal command */
205
    /* try running it as an internal command */
-
 
206
    {
205
    ecode = cmd_process(argcount, argvlist, *rmod_envseg);
207
      int ecode = cmd_process(argcount, argvlist, *rmod_envseg);
206
    if (ecode >= 0) continue;
208
      if (ecode >= 0) *lastexitcode = ecode;
-
 
209
      if (ecode >= -1) continue; /* command is internal but did not set an exit code */
-
 
210
    }
207
 
211
 
208
    /* must be an external command then */
212
    /* must be an external command then */
209
    execvp(argvlist[0], argvlist);
213
    execvp(argvlist[0], argvlist);
210
 
214
 
211
    /* execvp() replaces the current process by the new one
215
    /* execvp() replaces the current process by the new one