summaryrefslogtreecommitdiff
path: root/Build/source/texk/xdvipdfmx/src/spc_dvips.c
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2012-09-18 17:53:04 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2012-09-18 17:53:04 +0000
commitcf6f2edfb33cb21fb49e4c182f43aab5e031f80a (patch)
tree77db730489a3ead883398dbb3f204385615f88ea /Build/source/texk/xdvipdfmx/src/spc_dvips.c
parentc6fb62e03853e7fb1d0bf0299fd54fa1ac680bf3 (diff)
Reduce TL/W32TeX diffs (mostly from Akira)
git-svn-id: svn://tug.org/texlive/trunk@27714 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/xdvipdfmx/src/spc_dvips.c')
-rw-r--r--Build/source/texk/xdvipdfmx/src/spc_dvips.c40
1 files changed, 24 insertions, 16 deletions
diff --git a/Build/source/texk/xdvipdfmx/src/spc_dvips.c b/Build/source/texk/xdvipdfmx/src/spc_dvips.c
index dfed29fbc9b..b408d648c56 100644
--- a/Build/source/texk/xdvipdfmx/src/spc_dvips.c
+++ b/Build/source/texk/xdvipdfmx/src/spc_dvips.c
@@ -298,7 +298,7 @@ spc_handler_ps_tricks_gdef (struct spc_env *spe, struct spc_arg *args)
{
FILE* fp;
- fp = fopen(global_defs, "a");
+ fp = fopen(global_defs, "ab");
fwrite(args->curptr, 1, args->endptr - args->curptr, fp);
fprintf(fp, "\n");
fclose(fp);
@@ -321,7 +321,7 @@ spc_handler_ps_tricks_pdef (struct spc_env *spe, struct spc_arg *args)
pdf_concatmatrix(&M, &T);
if (page_defs == 0)
page_defs = dpx_create_temp_file();
- fp = fopen(page_defs, "a");
+ fp = fopen(page_defs, "ab");
fprintf(fp, "gsave initmatrix [%f %f %f %f %f %f] concat %f %f moveto\n", M.a, M.b, M.c, M.d, M.e, M.f, spe->x_user - pt.x, spe->y_user - pt.y);
fwrite(args->curptr, 1, args->endptr - args->curptr, fp);
fprintf(fp, "\ngrestore\n");
@@ -336,7 +336,7 @@ spc_handler_ps_tricks_tdef (struct spc_env *spe, struct spc_arg *args)
FILE* fp;
if (!temporary_defs)
temporary_defs = dpx_create_temp_file();
- fp = fopen(temporary_defs, "w");
+ fp = fopen(temporary_defs, "wb");
fwrite(args->curptr, 1, args->endptr - args->curptr, fp);
fprintf(fp, "\n");
fclose(fp);
@@ -391,7 +391,7 @@ spc_handler_ps_tricks_bput (struct spc_env *spe, struct spc_arg *args, int must_
FILE* fp;
if (!temporary_defs)
temporary_defs = dpx_create_temp_file();
- fp = fopen(temporary_defs, "a");
+ fp = fopen(temporary_defs, "ab");
fprintf(fp, "gsave\n");
if (label == 0)
fprintf(fp, "[%f %f %f %f %f %f] concat %f %f moveto\n", M.a, M.b, M.c, M.d, M.e, M.f, spe->x_user, spe->y_user);
@@ -535,7 +535,7 @@ spc_handler_ps_tricks_parse_path (struct spc_env *spe, struct spc_arg *args,
WARN("Failed to create temporary input file for PSTricks image conversion.");
return -1;
}
- fp = fopen(gs_in, "w");
+ fp = fopen(gs_in, "wb");
for (k = 0; k < num_ps_headers; k++)
fprintf(fp, "(%s) run\n", ps_headers[k]);
fprintf(fp, "[%f %f %f %f %f %f] concat %f %f translate 0 0 moveto\n", M.a, M.b, M.c, M.d, M.e, M.f, spe->x_user, spe->y_user);
@@ -563,7 +563,7 @@ spc_handler_ps_tricks_parse_path (struct spc_env *spe, struct spc_arg *args,
}
#endif
} else {
- fp = fopen(gs_in, "a");
+ fp = fopen(gs_in, "ab");
fprintf(fp, "flattenpath stroke\n");
}
fclose(fp);
@@ -595,7 +595,7 @@ spc_handler_ps_tricks_parse_path (struct spc_env *spe, struct spc_arg *args,
return error;
}
- fp = fopen(gs_out, "r");
+ fp = fopen(gs_out, "rb");
if (pdf_copy_clip(fp, 1, 0, 0) != 0) {
spc_warn(spe, "Failed to parse the clipping path.");
RELEASE(gs_in);
@@ -629,7 +629,7 @@ spc_handler_ps_tricks_render (struct spc_env *spe, struct spc_arg *args)
WARN("Failed to create temporary input file for PSTricks image conversion.");
return -1;
}
- fp = fopen(gs_in, "w");
+ fp = fopen(gs_in, "wb");
for (k = 0; k < num_ps_headers; k++)
fprintf(fp, "(%s) run\n", ps_headers[k]);
fprintf(fp, "[%f %f %f %f %f %f] concat %f %f translate 0 0 moveto\n", M.a, M.b, M.c, M.d, M.e, M.f, spe->x_user, spe->y_user);
@@ -637,7 +637,7 @@ spc_handler_ps_tricks_render (struct spc_env *spe, struct spc_arg *args)
if (page_defs != 0)
fprintf(fp, "(%s) run\n", page_defs);
} else
- fp = fopen(gs_in, "a");
+ fp = fopen(gs_in, "ab");
fprintf(fp, "\nsave\n");
fwrite(args->curptr, 1, args->endptr - args->curptr, fp);
@@ -885,7 +885,7 @@ spc_dvips_at_begin_document (void)
/* This, together with \pscharpath support code, must be moved to xtex.pro header. */
global_defs = dpx_create_temp_file();
- fp = fopen(global_defs, "w");
+ fp = fopen(global_defs, "wb");
fprintf(fp, "tx@Dict begin /STV {} def end\n");
fclose(fp);
return 0;
@@ -894,6 +894,12 @@ spc_dvips_at_begin_document (void)
int
spc_dvips_at_end_document (void)
{
+ if (ps_headers) {
+ while (num_ps_headers > 0)
+ RELEASE(ps_headers[--num_ps_headers]);
+ free(ps_headers);
+ ps_headers = NULL;
+ }
dpx_delete_temp_file(global_defs);
dpx_delete_temp_file(page_defs);
return 0;
@@ -980,9 +986,11 @@ spc_dvips_setup_handler (struct spc_handler *handle,
}
#ifdef __EMX__
-#define GS_CALCULATOR "gsos2 -q -dNOPAUSE -dBATCH -sDEVICE=nullpage -f "
+#define GS_CALCULATOR "gsos2 -q -dNOPAUSE -dBATCH -sDEVICE=nullpage -f "
+#elif defined(WIN32)
+#define GS_CALCULATOR "gswin32c -q -dNOPAUSE -dBATCH -sDEVICE=nullpage -f "
#else
-#define GS_CALCULATOR "gs -q -dNOPAUSE -dBATCH -sDEVICE=nullpage -f "
+#define GS_CALCULATOR "gs -q -dNOPAUSE -dBATCH -sDEVICE=nullpage -f "
#endif
static
@@ -994,7 +1002,7 @@ int calculate_PS (char *string, int length, double *res1, double *res2, double *
if (res1 == 0 && res2 == 0)
return -1;
formula = dpx_create_temp_file();
- fp = fopen(formula, "w");
+ fp = fopen(formula, "wb");
for (k = 0; k < num_ps_headers; k++)
fprintf(fp, "(%s) run\n", ps_headers[k]);
fprintf(fp, "0 0 moveto\n");
@@ -1013,10 +1021,9 @@ int calculate_PS (char *string, int length, double *res1, double *res2, double *
*p = '/';
}
#endif
- k = strlen(GS_CALCULATOR) + strlen(formula) + 2;
- cmd = malloc(k);
+ k = strlen(GS_CALCULATOR) + strlen(formula) + 1;
+ cmd = NEW(k, char);
strcpy(cmd, GS_CALCULATOR);
- strcat(cmd, " ");
strcat(cmd, formula);
coord = popen(cmd, "r");
@@ -1033,6 +1040,7 @@ int calculate_PS (char *string, int length, double *res1, double *res2, double *
return -1;
pclose(coord);
+ RELEASE(cmd);
dpx_delete_temp_file(formula);
return 0;
}