home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Geek Gadgets 1
/
ADE-1.bin
/
ade-dist
/
ixemul-45.0-src.tgz
/
tar.out
/
contrib
/
ixemul
/
utils
/
ixrun.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-09-28
|
2KB
|
76 lines
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <proto/dos.h>
char VERSION[] = "\000$VER: ixrun 1.0 (10.11.95)";
static void usage(void)
{
fprintf(stderr, "Usage: ixrun [-n | -q] filename [arguments...]
-n\tdon't add quotes (\") around the arguments
-q\tadd quotes (\") around the arguments (default)
-nv\tas -n, but print the command line to standard error, don't execute it
-qv\tas -q, but print the command line to standard error, don't execute it\n");
exit(1);
}
main(int argc, char **argv)
{
char *p;
long size, i, first_opt = 1, add_quotes = 2, debug = 0;
if (argc == 1)
usage();
if (!strcmp(argv[1], "-q") || !strcmp(argv[1], "-qv"))
{
if (argc == 2)
usage();
first_opt++;
debug = !strcmp(argv[1], "-qv");
}
if (!strcmp(argv[1], "-n") || !strcmp(argv[1], "-nv"))
{
if (argc == 2)
usage();
add_quotes = 0;
first_opt++;
debug = !strcmp(argv[1], "-nv");
}
if (argv[first_opt][0] == '/' && (p = strchr(argv[first_opt] + 1, '/')))
{
*p = ':';
(argv[first_opt])++;
}
for (size = strlen(argv[first_opt]) + 1, i = first_opt + 1; argv[i]; i++)
size += strlen(argv[i]) + 1 + add_quotes;
p = malloc(size);
if (p == NULL)
{
fprintf(stderr, "couldn't allocate %d bytes\n", size);
exit(1);
}
strcpy(p, argv[first_opt]);
for (i = first_opt + 1; argv[i]; i++)
{
if (add_quotes)
strcat(p, " \"");
else
strcat(p, " ");
strcat(p, argv[i]);
if (add_quotes)
strcat(p, "\"");
}
if (debug)
fprintf(stderr, "command line = '%s'\n", p);
else
{
int result, omask;
omask = sigsetmask(~0);
result = !Execute(p, NULL, NULL);
sigsetmask(omask);
exit(result);
}
}