summaryrefslogtreecommitdiff
path: root/Build/source/texk/dviout-util/dvispc.c
diff options
context:
space:
mode:
authorHironobu Yamashita <h.y.acetaminophen@gmail.com>2018-10-06 13:26:55 +0000
committerHironobu Yamashita <h.y.acetaminophen@gmail.com>2018-10-06 13:26:55 +0000
commit001e19b7e92a6a7d56efdac55d671803959ab3d5 (patch)
treef4edafc17f51f1a693f1806cbf809fef3df29dfd /Build/source/texk/dviout-util/dvispc.c
parent46e300903da7b0a183e06eea2c20909d6b00e080 (diff)
dviout-util: prioritize filename arguments (tests still not working?)
git-svn-id: svn://tug.org/texlive/trunk@48841 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/dviout-util/dvispc.c')
-rw-r--r--Build/source/texk/dviout-util/dvispc.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/Build/source/texk/dviout-util/dvispc.c b/Build/source/texk/dviout-util/dvispc.c
index 6c3dbda2968..e92e9ec363a 100644
--- a/Build/source/texk/dviout-util/dvispc.c
+++ b/Build/source/texk/dviout-util/dvispc.c
@@ -635,11 +635,14 @@ skip: ;
error("Too long filename");
}
- switch(argc - i){
+ switch(argc - i){ /* number of non-optional arguments */
case 0:
if(fp_in == NULL)
+ /* infile not given, empty stdin; nothing I can do */
usage(1);
if(fp_out == NULL){
+ /* outfile not given, free stdout;
+ binary cannot be written, text is fine */
if((f_mode & EXE2INDEP) || f_mode == EXE2DVI)
usage(1);
fp_out = stdout;
@@ -647,26 +650,35 @@ skip: ;
break;
case 1:
- if(fnum == 2)
+ if(fnum == 2) /* non-empty stdin, redirected stdout */
+ /* [TODO] ??? */
usage(1);
- if(!fnum){
+ if(!fnum){ /* empty stdin, free stdout */
+ /* if EXE2DVI, the only argument might be outfile,
+ but no input available; nothing I can do */
+ if(f_mode == EXE2DVI)
+ usage(1);
+ /* otherwise, the only argument should be infile */
strcpy(infile, argv[argc-1]);
+ /* outfile not given;
+ nonetheless binary should be written to a file,
+ text is fine with free stdout */
if((f_mode & EXE2INDEP))
strcpy(outfile, argv[argc-1]);
- else if(f_mode == EXE2DVI)
- usage(1);
else
fp_out = stdout;
- }else
+ }else /* if fp_out == NULL, free stdout; otherwise empty stdin */
+ /* [TODO] ??? */
strcpy((fp_out == NULL)?outfile:infile, argv[argc-1]);
break;
case 2:
if(fp_in == NULL){
+ /* prioritize filename arguments */
strcpy(infile, argv[argc-2]);
strcpy(outfile, argv[argc-1]);
break;
- }
+ } /* else non-empty stdin already given, confused! */
default:
usage(1);
}
@@ -683,6 +695,8 @@ skip: ;
}
/* -x : text -> DVI */
if(f_mode == EXE2DVI){
+ /* use infile if given, otherwise use existing fp_in (= non-empty stdin)
+ note that fp_in and infile are exclusive (already checked above) */
if(fp_in == NULL){
fp_in = fopen(infile, READ_TEXT);
if(fp_in == NULL){
@@ -690,7 +704,8 @@ skip: ;
exit(1);
}
}
- if(fp_out == NULL){
+ /* [TODO] I'd like to use outfile if given */
+ if(fp_out == NULL || outfile){
len = strlen(outfile);
if(len < 4 || StrCmp(outfile + len - 4, ".dvi"))
strcat(outfile, ".dvi");