summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHironobu Yamashita <h.y.acetaminophen@gmail.com>2018-10-12 16:31:44 +0000
committerHironobu Yamashita <h.y.acetaminophen@gmail.com>2018-10-12 16:31:44 +0000
commit991c3603b7082d4ea2a20d4a15b95d051b96a9db (patch)
treefebe83ace42a07694a8a0b115fe9c289fa7c9092
parent215c869923575190661ed44a6a27d5424fb9bea0 (diff)
dviout-util: import aminophen/dviout-util@568ad32
git-svn-id: svn://tug.org/texlive/trunk@48890 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Build/source/texk/dviout-util/Makefile.am3
-rw-r--r--Build/source/texk/dviout-util/Makefile.in5
-rw-r--r--Build/source/texk/dviout-util/dvispc.c77
-rwxr-xr-xBuild/source/texk/dviout-util/dvispc.test38
4 files changed, 76 insertions, 47 deletions
diff --git a/Build/source/texk/dviout-util/Makefile.am b/Build/source/texk/dviout-util/Makefile.am
index 760bb4e7276..13e5905ffbf 100644
--- a/Build/source/texk/dviout-util/Makefile.am
+++ b/Build/source/texk/dviout-util/Makefile.am
@@ -36,7 +36,8 @@ EXTRA_DIST += tests/test.spc \
tests/longspec.tex tests/longspec.dvi tests/longspecout.dvi
DISTCLEANFILES = x*test.spc \
x*testa.txt x*testax.dvi \
- x*testout.dvi x*oldindepout.dvi x*longspecout.dvi
+ x*testout.dvi x*oldindepout.dvi x*longspecout.dvi \
+ x*write.dvi x*writeout.dvi
## chkdvifont.test
EXTRA_DIST += tests/test.cfn \
diff --git a/Build/source/texk/dviout-util/Makefile.in b/Build/source/texk/dviout-util/Makefile.in
index a7068163c3c..196dabc8bf8 100644
--- a/Build/source/texk/dviout-util/Makefile.in
+++ b/Build/source/texk/dviout-util/Makefile.in
@@ -566,8 +566,9 @@ EXTRA_DIST = $(TESTS) tests/test.spc tests/test.tex tests/test.dvi \
tests/jis.cfn tests/eufm10.tfm tests/eufm10.cfn tests/cmr10.pk \
tests/cmr10.cfn tests/upjisr-h.vf tests/upsjir-h.cfn
DISTCLEANFILES = x*test.spc x*testa.txt x*testax.dvi x*testout.dvi \
- x*oldindepout.dvi x*longspecout.dvi test.dvi xtest.cfn \
- xjis.cfn xeufm10.cfn xeufm10.ed.cfn xcmr10.cfn xupjisr-h.cfn
+ x*oldindepout.dvi x*longspecout.dvi x*write.dvi x*writeout.dvi \
+ test.dvi xtest.cfn xjis.cfn xeufm10.cfn xeufm10.ed.cfn \
+ xcmr10.cfn xupjisr-h.cfn
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-am
diff --git a/Build/source/texk/dviout-util/dvispc.c b/Build/source/texk/dviout-util/dvispc.c
index 89da842e531..67e08a71517 100644
--- a/Build/source/texk/dviout-util/dvispc.c
+++ b/Build/source/texk/dviout-util/dvispc.c
@@ -252,6 +252,14 @@ int max_stack;
char *out_pages ="T-L";
int total_book_page;
+/* non-stack specials */
+int f_background = 0;
+char background[MAX_LEN];
+int f_pdf_bgcolor = 0;
+char pdf_bgcolor[MAX_LEN];
+int f_pn = 0;
+char tpic_pn[MAX_LEN];
+
/* stack specials */
int color_depth;
int color_depth_max;
@@ -266,14 +274,6 @@ int pdf_annot_depth_max;
int pdf_annot_under;
char *pdf_annot_pt[MAX_ANNOT];
-/* non-stack specials */
-int f_background = 0;
-char background[MAX_LEN];
-int f_pdf_bgcolor = 0;
-char pdf_bgcolor[MAX_LEN];
-int f_pn = 0;
-char tpic_pn[MAX_LEN];
-
int f_needs_corr; /* flag to determine if correction is needed */
char color_buf[COLOR_BUF_SIZE]; /* common buffer for color/pdf_color */
char annot_buf[ANNOT_BUF_SIZE];
@@ -667,13 +667,11 @@ skip: ;
break;
case 2:
- /* if(fp_in == NULL){ */
/* prioritize filename arguments;
if fp_in != NULL, non-empty stdin will be discarded but don't care! */
strcpy(infile, argv[argc-2]);
strcpy(outfile, argv[argc-1]);
break;
- /* } */
default:
usage(1);
}
@@ -688,7 +686,27 @@ skip: ;
setmode( fileno( stdin ), O_BINARY);
#endif
}
- /* -x : text -> DVI */
+
+ /* append .dvi suffix if input/output is DVI */
+ if(f_mode == EXE2DVI || f_mode == EXE2MODIFY){
+ len = strlen(outfile);
+ if(len){
+ if(len < 4 || StrCmp(outfile + len - 4, ".dvi"))
+ strcat(outfile, ".dvi");
+ }
+ }
+ if(f_mode != EXE2DVI){
+ len = strlen(infile);
+ if(len){
+ if(len < 4 || StrCmp(infile + len - 4, ".dvi")){
+ strcat(infile, ".dvi");
+ len += 4; /* will be reused later while preparing overwrite */
+ }
+ dvi_info.file_name = infile;
+ }
+ }
+
+ /* -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) */
@@ -699,11 +717,8 @@ skip: ;
exit(1);
}
}
- /* [TODO] I'd like to use outfile if given */
+ /* use outfile if given */
if(fp_out == NULL || *outfile){
- len = strlen(outfile);
- if(len < 4 || StrCmp(outfile + len - 4, ".dvi"))
- strcat(outfile, ".dvi");
fp_out = fopen(outfile, WRITE_BINARY);
if(fp_out == NULL){
fprintf(stderr, "Cannot open %s for output\n", outfile);
@@ -713,16 +728,8 @@ skip: ;
trans2dvi(); /* files will be closed */
return 0;
}
- /* dvi->dvi or -d or -s or -a */
- len = strlen(infile);
- if(len){
- if(len < 4 || StrCmp(infile + len - 4, ".dvi")){
- strcat(infile, ".dvi");
- len += 4;
- }
- dvi_info.file_name = infile;
- }
+ /* dvi->dvi or -d or -s or -a */
/* [TODO] comments not added yet */
if(argc - i == 1){
if(f_mode == EXE2MODIFY && !fnum){
@@ -750,9 +757,6 @@ same: strcpy(outfile, infile);
}else if(argc - i == 2){
#ifdef UNIX
struct stat infstat, outfstat;
-#endif
- strcpy(outfile, argv[argc-1]);
-#ifdef UNIX
if(stat(infile, &infstat) == 0 && stat(outfile, &outfstat) == 0 &&
infstat.st_dev == outfstat.st_dev && infstat.st_ino == outfstat.st_ino)
#else
@@ -1327,11 +1331,11 @@ skip: while (tmp--)
!strsubcmp(special, "ar") || /* ar: draw circle */
!strsubcmp(special, "ia")) ) /* ia: fill */
f_pn = -1;
- else if(!strsubcmp(special, "color") && !f_prescan) /* color push/pop */
+ else if(!strsubcmp(special, "color")) /* color push/pop */
sp_color(special);
- else if(!strsubcmp(special, "pdf:bcolor") && !f_prescan) /* pdf:bcolor */
+ else if(!strsubcmp(special, "pdf:bcolor")) /* pdf:bcolor */
sp_pdf_bcolor(special);
- else if(!strsubcmp(special, "pdf:ecolor") && !f_prescan) /* pdf:ecolor */
+ else if(!strsubcmp(special, "pdf:ecolor")) /* pdf:ecolor */
sp_pdf_ecolor(special);
else if(!strsubcmp(special, "background")){ /* background */
strncpy(background, special, MAX_LEN);
@@ -1341,13 +1345,13 @@ skip: while (tmp--)
strncpy(pdf_bgcolor, special, MAX_LEN);
f_pdf_bgcolor = 1;
}
- else if(!strsubcmp_n(special, "pdf:bann") && !f_prescan) /* pdf:bann */
+ else if(!strsubcmp_n(special, "pdf:bann")) /* pdf:bann */
sp_pdf_bann(special);
- else if(!strsubcmp(special, "pdf:eann") && !f_prescan) /* pdf:eann */
+ else if(!strsubcmp(special, "pdf:eann")) /* pdf:eann */
sp_pdf_eann(special);
break;
- }
- goto skip;
+ }
+ goto skip;
}
}
}
@@ -1359,6 +1363,7 @@ skip: while (tmp--)
void sp_color(char *sp)
{
char *s;
+ if(f_prescan) return;
if(strstr(sp, "pop")){
if(--color_depth < 0){
@@ -1395,6 +1400,7 @@ void sp_color(char *sp)
void sp_pdf_bcolor(char *sp)
{
char *s;
+ if(f_prescan) return;
/* copied from "color push" routine of sp_color */
if(pdf_color_depth >= MAX_COLOR){
@@ -1421,6 +1427,7 @@ void sp_pdf_bcolor(char *sp)
void sp_pdf_ecolor(char *sp)
{
char *s;
+ if(f_prescan) return;
/* copied from "color pop" routine of sp_color */
if(--pdf_color_depth < 0){
@@ -1436,6 +1443,7 @@ void sp_pdf_ecolor(char *sp)
void sp_pdf_bann(char *sp)
{
char *s;
+ if(f_prescan) return;
if(pdf_annot_depth >= MAX_ANNOT){
fprintf(stderr, "Too many pdf:bann > %d\n", MAX_ANNOT);
Exit(1);
@@ -1460,6 +1468,7 @@ void sp_pdf_bann(char *sp)
void sp_pdf_eann(char *sp)
{
char *s;
+ if(f_prescan) return;
if(--pdf_annot_depth < 0){
fprintf(stderr, "pdf:bann ... pdf:eann stack underflow\n");
pdf_annot_under++;
diff --git a/Build/source/texk/dviout-util/dvispc.test b/Build/source/texk/dviout-util/dvispc.test
index a22519496ec..f477921e759 100755
--- a/Build/source/texk/dviout-util/dvispc.test
+++ b/Build/source/texk/dviout-util/dvispc.test
@@ -41,21 +41,27 @@ diff --strip-trailing-cr $testdir/test.spc $testdir/test.spc \
./dvispc -x < x1testa.txt > x1testax.dvi && \
cmp $testdir/test.dvi x1testax.dvi && echo || exit 5
-# not working as expected only for test ??
+# not working as expected only for test (redirect??)
#./dvispc -a $testdir/test.dvi | ./dvispc -x x2testax.dvi && \
# cmp $testdir/test.dvi x2testax.dvi && echo || exit 6
-./dvispc -a $testdir/test.dvi | ./dvispc -x > x2testax.dvi && \
- cmp $testdir/test.dvi x2testax.dvi && echo || exit 7
+./dvispc -a $testdir/test.dvi | ./dvispc -x > x3testax.dvi && \
+ cmp $testdir/test.dvi x3testax.dvi && echo || exit 7
## EXE2INDEP
./dvispc -c $testdir/oldindep.dvi xoldindepout.dvi && \
- cmp $testdir/oldindepout.dvi xoldindepout.dvi && echo || exit 8
+ cmp $testdir/oldindepout.dvi xoldindepout.dvi && echo || exit 1
./dvispc -c $testdir/oldindep.dvi > x1oldindepout.dvi && \
- cmp $testdir/oldindepout.dvi x1oldindepout.dvi && echo || exit 9
+ cmp $testdir/oldindepout.dvi x1oldindepout.dvi && echo || exit 2
+
+## check default overwrite
+# not working as expected only for test (redirect??)
+#cp $testdir/oldindep.dvi x3write.dvi && \
+# ./dvispc x3write.dvi
+# cmp $testdir/oldindepout.dvi x3write.dvi && echo || exit 3
./dvispc && echo || exit 0
@@ -68,10 +74,10 @@ diff --strip-trailing-cr $testdir/test.spc $testdir/test.spc \
# exit code 1 for usage without argument. (the above line did it!)
./dvispc -c $testdir/test.dvi xtestout.dvi && \
- cmp $testdir/testout.dvi xtestout.dvi && echo || exit 10
+ cmp $testdir/testout.dvi xtestout.dvi && echo || exit 4
./dvispc -c $testdir/test.dvi > x1testout.dvi && \
- cmp $testdir/testout.dvi x1testout.dvi && echo || exit 11
+ cmp $testdir/testout.dvi x1testout.dvi && echo || exit 5
## invalid usage
#./dvispc -c < $testdir/test.dvi x2testout.dvi && \
@@ -79,14 +85,26 @@ diff --strip-trailing-cr $testdir/test.spc $testdir/test.spc \
## stdin is a DVI, random access may not be supported, no test
#./dvispc -c < $testdir/test.dvi > x3testout.dvi && \
-# cmp $testdir/testout.dvi x3testout.dvi && echo || exit 12
+# cmp $testdir/testout.dvi x3testout.dvi && echo || exit 6
./dvispc -c $testdir/longspec.dvi xlongspecout.dvi && \
- cmp $testdir/longspecout.dvi xlongspecout.dvi && echo || exit 13
+ cmp $testdir/longspecout.dvi xlongspecout.dvi && echo || exit 7
## check default is -c
./dvispc $testdir/longspec.dvi x1longspecout.dvi && \
- cmp $testdir/longspecout.dvi x1longspecout.dvi && echo || exit 14
+ cmp $testdir/longspecout.dvi x1longspecout.dvi && echo || exit 8
+
+## check -b backup works (old version did not work)
+# not working as expected only for test (redirect??)
+#cp $testdir/oldindep.dvi x4write.dvi && \
+# ./dvispc -b x4write.dvi
+# cmp $testdir/oldindepout.dvi x4write.dvi && echo || exit 9
+# cmp $testdir/oldindep.dvi x4write.dvi.bak && echo || exit 9
+
+## without .dvi extension (old version missed for outfile)
+cp $testdir/oldindep.dvi x5write.dvi && \
+ ./dvispc x5write x5writeout
+ cmp $testdir/oldindepout.dvi x5writeout.dvi && echo || exit 10
exit 0