Subversion Repositories SvarDOS

Rev

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

Rev 470 Rev 472
Line 345... Line 345...
345
  return(-1);
345
  return(-1);
346
}
346
}
347
 
347
 
348
 
348
 
349
static void run_as_external(char *buff, const char far *cmdline, unsigned short envseg, struct rmod_props far *rmod) {
349
static void run_as_external(char *buff, const char far *cmdline, unsigned short envseg, struct rmod_props far *rmod) {
350
  char const **argvlist = (void *)(buff + 512);
-
 
351
  char *cmdfile = buff + 1024;
350
  char *cmdfile = buff + 512;
352
  const char far *pathptr;
351
  const char far *pathptr;
353
  int lookup;
352
  int lookup;
354
  unsigned short i;
353
  unsigned short i;
355
  const char *ext;
354
  const char *ext;
-
 
355
  char *cmd = buff + 256;
356
  const char far *cmdtail;
356
  const char far *cmdtail;
357
  char far *rmod_execprog = MK_FP(rmod->rmodseg, RMOD_OFFSET_EXECPROG);
357
  char far *rmod_execprog = MK_FP(rmod->rmodseg, RMOD_OFFSET_EXECPROG);
358
  char far *rmod_cmdtail = MK_FP(rmod->rmodseg, 0x81);
358
  char far *rmod_cmdtail = MK_FP(rmod->rmodseg, 0x81);
359
  _Packed struct {
359
  _Packed struct {
360
    unsigned short envseg;
360
    unsigned short envseg;
361
    unsigned long cmdtail;
361
    unsigned long cmdtail;
362
    unsigned long fcb1;
362
    unsigned long fcb1;
363
    unsigned long fcb2;
363
    unsigned long fcb2;
364
  } far *ExecParam = MK_FP(rmod->rmodseg, RMOD_OFFSET_EXECPARAM);
364
  } far *ExecParam = MK_FP(rmod->rmodseg, RMOD_OFFSET_EXECPARAM);
365
 
365
 
366
  cmd_explode(buff + 2048, cmdline, argvlist);
366
  /* find cmd and cmdtail */
367
 
367
  i = 0;
-
 
368
  cmdtail = cmdline;
-
 
369
  while (*cmdtail == ' ') cmdtail++; /* skip any leading spaces */
368
  /* for (i = 0; argvlist[i] != NULL; i++) printf("arg #%d = '%s'\r\n", i, argvlist[i]); */
370
  while ((*cmdtail != ' ') && (*cmdtail != '/') && (*cmdtail != '+') && (*cmdtail != 0)) {
-
 
371
    cmd[i++] = *cmdtail;
-
 
372
    cmdtail++;
-
 
373
  }
-
 
374
  cmd[i] = 0;
369
 
375
 
370
  /* is this a command in curdir? */
376
  /* is this a command in curdir? */
371
  lookup = lookup_cmd(cmdfile, argvlist[0], NULL, &ext);
377
  lookup = lookup_cmd(cmdfile, cmd, NULL, &ext);
372
  if (lookup == 0) {
378
  if (lookup == 0) {
373
    /* printf("FOUND LOCAL EXEC FILE: '%s'\r\n", cmdfile); */
379
    /* printf("FOUND LOCAL EXEC FILE: '%s'\r\n", cmdfile); */
374
    goto RUNCMDFILE;
380
    goto RUNCMDFILE;
375
  } else if (lookup == -2) {
381
  } else if (lookup == -2) {
376
    /* puts("NOT FOUND"); */
382
    /* puts("NOT FOUND"); */
Line 387... Line 393...
387
      buff[i] = *pathptr;
393
      buff[i] = *pathptr;
388
      if ((buff[i] == 0) || (buff[i] == ';')) break;
394
      if ((buff[i] == 0) || (buff[i] == ';')) break;
389
      pathptr++;
395
      pathptr++;
390
    }
396
    }
391
    buff[i] = 0;
397
    buff[i] = 0;
392
    lookup = lookup_cmd(cmdfile, argvlist[0], buff, &ext);
398
    lookup = lookup_cmd(cmdfile, cmd, buff, &ext);
393
    if (lookup == 0) break;
399
    if (lookup == 0) break;
394
    if (lookup == -2) return;
400
    if (lookup == -2) return;
395
    if (*pathptr == ';') {
401
    if (*pathptr == ';') {
396
      pathptr++;
402
      pathptr++;
397
    } else {
403
    } else {
Line 399... Line 405...
399
    }
405
    }
400
  }
406
  }
401
 
407
 
402
  RUNCMDFILE:
408
  RUNCMDFILE:
403
 
409
 
404
  /* find cmdtail */
-
 
405
  cmdtail = cmdline;
-
 
406
  while (*cmdtail == ' ') cmdtail++;
-
 
407
  while ((*cmdtail != ' ') && (*cmdtail != '/') && (*cmdtail != '+') && (*cmdtail != 0)) {
-
 
408
    cmdtail++;
-
 
409
  }
-
 
410
 
-
 
411
  /* special handling of batch files */
410
  /* special handling of batch files */
412
  if ((ext != NULL) && (imatch(ext, "bat"))) {
411
  if ((ext != NULL) && (imatch(ext, "bat"))) {
413
    /* copy truename of the bat file to rmod buff */
412
    /* copy truename of the bat file to rmod buff */
414
    for (i = 0; cmdfile[i] != 0; i++) rmod->batfile[i] = cmdfile[i];
413
    for (i = 0; cmdfile[i] != 0; i++) rmod->batfile[i] = cmdfile[i];
415
    rmod->batfile[i] = 0;
414
    rmod->batfile[i] = 0;