diff options
author | William Joye <wjoye@cfa.harvard.edu> | 2016-10-25 20:57:49 (GMT) |
---|---|---|
committer | William Joye <wjoye@cfa.harvard.edu> | 2016-10-25 20:57:49 (GMT) |
commit | d1c4bf158203c4e8ec29fdeb83fd311e36320885 (patch) | |
tree | 15874534e282f67505ce4af5ba805a1ff70ec43e /funtools/util/tlaunch.c | |
parent | e19a18e035dc4d0e8e215f9b452bb9ef6f58b9d7 (diff) | |
parent | 339420dd5dd874c41f6bab5808291fb4036dd022 (diff) | |
download | blt-d1c4bf158203c4e8ec29fdeb83fd311e36320885.zip blt-d1c4bf158203c4e8ec29fdeb83fd311e36320885.tar.gz blt-d1c4bf158203c4e8ec29fdeb83fd311e36320885.tar.bz2 |
Merge commit '339420dd5dd874c41f6bab5808291fb4036dd022' as 'funtools'
Diffstat (limited to 'funtools/util/tlaunch.c')
-rw-r--r-- | funtools/util/tlaunch.c | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/funtools/util/tlaunch.c b/funtools/util/tlaunch.c new file mode 100644 index 0000000..b12b074 --- /dev/null +++ b/funtools/util/tlaunch.c @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2007 Smithsonian Astrophysical Observatory + */ + +/* + * + * tlaunch -- test launch routine + * + */ + +#define HAVE_CONFIG_H 1 +#include <xlaunch.h> + +extern char *optarg; +extern int optind; + +#ifdef ANSI_FUNC +int main (int argc, char **argv) +#else +int main(argc, argv) + int argc; + char **argv; +#endif +{ + int c; + int got=0; + int doattach=0; + int dofiles=0; + int dopipes=0; + int pipes[2]; + char *prog=NULL; + char *files[3]; + char *pfile=NULL; + char wbuf[SZ_LINE]; + FILE *fd; + + /* init */ + memset(files, 0, sizeof(char *)*3); + /* process switch arguments */ + while ((c = getopt(argc, argv, "ae:i:o:p:w:")) != -1){ + switch(c){ + case 'a': + doattach = 1; + break; + case 'e': + files[2] = optarg; + dofiles |= 4; + break; + case 'i': + files[0] = optarg; + dofiles |= 1; + break; + case 'o': + files[1] = optarg; + dofiles |= 2; + break; + case 'p': + pfile = optarg; + dopipes = 1; + break; + case 'w': + snprintf(wbuf, SZ_LINE, "LAUNCH_ROUTINE=%s", optarg); + putenv(wbuf); + default: + break; + } + } + if( optind >= argc ){ + fprintf(stderr, + "usage: %s -a -i stdin -o stdout -e stderr -p pfile [command]\n", + argv[0]); + return 1; + } + prog = argv[optind++]; + if( !strcmp(prog, "tlaunch2") && !dopipes ){ + fprintf(stderr, "ERROR: use -p [file] with tlaunch2\n"); + return 1; + } + if( (got = Launch(prog, doattach, dofiles?files:NULL, dopipes?pipes:NULL)) ) + fprintf(stderr, "ERROR: got=%d\n", got); + else + fprintf(stderr, "SUCCESS: got(%x)=%d\n", dofiles, got); + /* send pipe file contents to child, read back and display results */ + if( pfile ){ + if( !(fd = fopen(pfile,"r")) ){ + perror("fopen"); + return 1; + } + while( fread(&c, sizeof(char), 1, fd) ){ + write(pipes[1], &c, 1); + if( read(pipes[0], &c, 1) ){ + fwrite(&c, sizeof(char), 1, stdout); + } + } + fclose(fd); + } + return 0; +} |