summaryrefslogtreecommitdiff
path: root/Build/source/texk/kpathsea/win32/mktexpk.c
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2015-06-18 10:49:17 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2015-06-18 10:49:17 +0000
commit973cc50127fd0835fbbd57bbb9dd8885c60e154d (patch)
treec14d3476c68fd27c7e3382b9e5089e410ac9a6de /Build/source/texk/kpathsea/win32/mktexpk.c
parentbae57b6f7ea0c81be60f4c73814128c4c91a84ee (diff)
Sync WIN32 versions of mktex* with W32TeX
git-svn-id: svn://tug.org/texlive/trunk@37597 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/kpathsea/win32/mktexpk.c')
-rw-r--r--Build/source/texk/kpathsea/win32/mktexpk.c220
1 files changed, 155 insertions, 65 deletions
diff --git a/Build/source/texk/kpathsea/win32/mktexpk.c b/Build/source/texk/kpathsea/win32/mktexpk.c
index 2d562528495..ee716b8de76 100644
--- a/Build/source/texk/kpathsea/win32/mktexpk.c
+++ b/Build/source/texk/kpathsea/win32/mktexpk.c
@@ -1,33 +1,52 @@
-/* mktexpk.c (Web2C-7.5.5 --ak 2006)
- * %%----------------------------------------
- * % Special variables for mktexpk ( W32TeX )
- * % ----------------------------------------
- * % MAKETEXPK_STYLE = dosnames
- * % -----------------------------------------
- * % MAKETEXPK_TOP_DIR = $VARTEXFONTS
- * % -----------------------------------------
- * % MAKETEXPK_MODE = canonex
- * % -----------------------------------------
- * % MAKETEXPK_MODE_300 = cx
- * % MAKETEXPK_MODE_400 = nexthi
- * % MAKETEXPK_MODE_600 = canonex
- * % etc.
- * %%-----------------------------------------
- *
- * Usage: mktexpk [OPTIONS] name,
- * Create a PK font.
- *
- * --dpi DPI use resolution DPI.
- * --bdpi BDPI use base resolution BDPI.
- * --mag MAG use magnificiation MAG.
- * --mfmode MODE use MODE as the METAFONT mode.
- * --destdir DESTDIR write fonts in DESTDIR (absolute path).
- *
- * The following old form is also supported:
- * Usage: mktexmk name dpi bdpi mag [mode]
- */
+/* mktexpk.c
+
+ Copyright 2000, 2015 Akira Kakuto.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this library; if not, see <http://www.gnu.org/licenses/>.
+
+ %%----------------------------------------
+ % Special variables for mktexpk ( W32TeX )
+ % ----------------------------------------
+ % MAKETEXPK_STYLE = dosnames
+ % -----------------------------------------
+ % MAKETEXPK_TOP_DIR = $VARTEXFONTS
+ % -----------------------------------------
+ % MAKETEXPK_MODE = canonex
+ % -----------------------------------------
+ % MAKETEXPK_MODE_300 = cx
+ % MAKETEXPK_MODE_400 = nexthi
+ % MAKETEXPK_MODE_600 = canonex
+ % etc.
+ %%-----------------------------------------
+
+ Usage: mktexpk [OPTIONS] name,
+ Create a PK font.
+
+ --dpi DPI use resolution DPI.
+ --bdpi BDPI use base resolution BDPI.
+ --mag MAG use magnificiation MAG.
+ --mfmode MODE use MODE as the METAFONT mode.
+ --destdir DESTDIR write fonts in DESTDIR (absolute path).
+
+ The following old form is also supported:
+ Usage: mktexmk name dpi bdpi mag [mode]
+*/
#include <kpathsea/kpathsea.h>
+#ifndef __MINGW32__
+#include <web2c/w2c/c-auto.h>
+#endif
#include "dirutil.h"
#include "getdestdir.h"
@@ -35,8 +54,8 @@
#define LLBUF 1024
#define LBUF 512
-#define SBUF 256
-#define TBUF 256
+#define SBUF 512
+#define TBUF 512
/*
Global variables
@@ -116,7 +135,7 @@ static void
version (void)
{
fprintf (stderr, "%s, (C version 1.5 --ak 2006-2012)\n", progname);
- fprintf (stderr, WEB2C_KPSE_VERSION "\n");
+ fprintf (stderr, KPSEVERSION WEB2CVERSION "\n");
}
static void
@@ -168,6 +187,34 @@ relmem (char **v)
return;
}
+static void
+get_designsize(char *tfname, char *dsiz)
+{
+ FILE *f;
+ unsigned char a, b, c, d;
+ unsigned int n;
+ double x;
+ char *p;
+
+ strcpy(dsiz, "10.0"); /* default */
+
+ p = kpse_find_file (tfname, kpse_tfm_format, 0);
+ if(p) {
+ f = fopen(p, "rb");
+ free(p);
+ if(f) {
+ fseek(f, 28, SEEK_SET);
+ a = getc(f);
+ b = getc(f);
+ c = getc(f);
+ d = getc(f);
+ fclose(f);
+ n = (a << 24) + (b << 16) + (c << 8) + d;
+ x = n / 1048576.0;
+ sprintf(dsiz, "%.1lf", x);
+ }
+ }
+}
int
main (int ac, char **av)
@@ -187,6 +234,7 @@ main (int ac, char **av)
char mag[TBUF];
char mode[TBUF];
char destdir[SBUF];
+ char designsize[64];
char *arg[4];
@@ -244,9 +292,9 @@ main (int ac, char **av)
tmp = getenv ("TEMP");
if (!tmp)
- getenv ("TMP");
+ tmp = getenv ("TMP");
if (!tmp)
- getenv ("TMPDIR");
+ tmp = getenv ("TMPDIR");
if (!tmp) {
tpkerr ("Please define TEMP | TMP | TMPDIR.");
return (100);
@@ -257,17 +305,17 @@ main (int ac, char **av)
*/
for (fpp = tmp; *fpp; fpp++) {
- if (*fpp == '\\')
- *fpp = '/';
- else if (IS_KANJI(fpp))
+ if (IS_KANJI(fpp))
fpp++;
+ else if (*fpp == '\\')
+ *fpp = '/';
}
for (i = 0; i < 4; i++)
arg[i] = (char *) malloc (SBUF);
- progname = av[0];
- kpse_set_program_name (progname, NULL);
+ kpse_set_program_name (av[0], NULL);
+ progname = kpse_program_name;
/*
* get tex binary dir
@@ -289,6 +337,7 @@ main (int ac, char **av)
if (ac < 2) {
usage ();
relmem (arg);
+ free(tmp);
return (100);
}
@@ -314,6 +363,7 @@ main (int ac, char **av)
if (ac < 5) {
usage ();
relmem (arg);
+ free(tmp);
return (100);
}
if((strlen(av[1]) > TBUF -1 ) ||
@@ -321,6 +371,7 @@ main (int ac, char **av)
(strlen(av[3]) > TBUF -1 ) ||
(strlen(av[4]) > TBUF -1 )) {
fprintf(stderr, "\nToo long a string.\n");
+ free(tmp);
return 100;
}
@@ -331,6 +382,7 @@ main (int ac, char **av)
if (ac > 5) {
if(strlen(av[5]) > TBUF -1) {
fprintf(stderr, "\nToo long a string.\n");
+ free(tmp);
return 100;
}
strcpy (mode, av[5]);
@@ -346,6 +398,7 @@ main (int ac, char **av)
while (i < ac) {
if(strlen(av[i]) > TBUF - 1) {
fprintf(stderr, "\nToo long a string.\n");
+ free(tmp);
return 100;
}
if (av[i][0] != '-') {
@@ -355,8 +408,9 @@ main (int ac, char **av)
if (!strcmp (av[i], "--dpi") || !strcmp (av[i], "-dpi")) {
i++;
if (i >= ac) {
- tpkerr ("Invarid arguments.");
+ tpkerr ("Invalid arguments.");
relmem (arg);
+ free(tmp);
return (100);
}
strcpy (dpi, av[i]);
@@ -364,8 +418,9 @@ main (int ac, char **av)
} else if (!strcmp (av[i], "--bdpi") || !strcmp (av[i], "-bdpi")) {
i++;
if (i >= ac) {
- tpkerr ("Invarid arguments.");
+ tpkerr ("Invalid arguments.");
relmem (arg);
+ free(tmp);
return (100);
}
strcpy (bdpi, av[i]);
@@ -373,8 +428,9 @@ main (int ac, char **av)
} else if (!strcmp (av[i], "--mag") || !strcmp (av[i], "-mag")) {
i++;
if (i >= ac) {
- tpkerr ("Invarid arguments.");
+ tpkerr ("Invalid arguments.");
relmem (arg);
+ free(tmp);
return (100);
}
strcpy (mag, av[i]);
@@ -382,8 +438,9 @@ main (int ac, char **av)
} else if (!strcmp (av[i], "--mfmode") || !strcmp (av[i], "-mfmode")) {
i++;
if (i >= ac) {
- tpkerr ("Invarid arguments.");
+ tpkerr ("Invalid arguments.");
relmem (arg);
+ free(tmp);
return (100);
}
strcpy (mode, av[i]);
@@ -391,8 +448,9 @@ main (int ac, char **av)
} else if (!strcmp (av[i], "--destdir") || !strcmp (av[i], "-destdir")) {
i++;
if (i >= ac) {
- tpkerr ("Invarid arguments.");
+ tpkerr ("Invalid arguments.");
relmem (arg);
+ free(tmp);
return (100);
}
strcpy (destdir, av[i]);
@@ -401,14 +459,17 @@ main (int ac, char **av)
} else if (!strcmp (av[i], "--version") || !strcmp (av[i], "-version")) {
version ();
relmem (arg);
+ free(tmp);
return (0);
} else if (!strcmp (av[i], "--help") || !strcmp (av[i], "-help")) {
help ();
relmem (arg);
+ free(tmp);
return (0);
} else {
tpkerr ("Argument error.");
relmem (arg);
+ free(tmp);
return (100);
}
}
@@ -447,17 +508,20 @@ main (int ac, char **av)
if (!frd) {
tpkerr ("I cannot find METAFONT.\n");
relmem (arg);
+ free(tmp);
return (100);
}
(void) fgets (buff, 126, frd);
(void) fgets (buff, 126, frd);
pclose (frd);
- remove ("mfput.log");
- remove ("mfput.tfm");
+ system("del /Q mfput.*");
- len = strlen (buff);
- if (buff[len - 1] == '\n')
+ len = (int)strlen (buff);
+ if (buff[len - 1] == '\n') {
buff[len - 1] = '\0';
+ if (buff[len - 2] == '\r')
+ buff[len - 2] = '\0';
+ }
if (strcmp (bdpi, buff)) {
fprintf(stderr, "mode_dpi %s and bdpi %s are inconsistent.\n", buff, bdpi);
fprintf(stderr, "therefore I reset mfmode.\n");
@@ -540,6 +604,7 @@ main (int ac, char **av)
if (name[0] == 0) {
tpkerr ("Font name is not given.");
relmem (arg);
+ free(tmp);
return (100);
}
@@ -553,6 +618,7 @@ main (int ac, char **av)
if (!(p = kpse_var_value ("MFINPUTS"))) {
tpkerr ("Cannot get value of MFINPUTS.");
relmem (arg);
+ free(tmp);
return (100);
}
free (p);
@@ -571,6 +637,7 @@ main (int ac, char **av)
if (!(p = kpse_var_value ("TFMFONTS"))) {
tpkerr ("Cannot get value of TFMFONTS.");
relmem (arg);
+ free(tmp);
return (100);
}
free (p);
@@ -580,12 +647,14 @@ main (int ac, char **av)
if (!(p = kpse_find_file (tfname, kpse_tfm_format, 0))) {
fprintf (stderr, "Cannot find %s .\n", tfname);
relmem (arg);
+ free(tmp);
return 100;
}
tfmfileptr = fopen (p, "rb");
if (!tfmfileptr) {
fprintf (stderr, "I cannot open %s.\n", p);
relmem (arg);
+ free(tmp);
return 100;
}
i = 256 * getc (tfmfileptr);
@@ -595,6 +664,7 @@ main (int ac, char **av)
fprintf (stderr, "Current font seems to be a Japanese one.\n");
fprintf (stderr, "I give up to create a PK font.\n");
relmem (arg);
+ free(tmp);
return 100;
}
}
@@ -606,16 +676,17 @@ main (int ac, char **av)
if (!fpp) {
fprintf (stderr, "Failed to get current working directory.\n");
relmem (arg);
+ free(tmp);
return (100);
}
for (fpp = currdir; *fpp; fpp++) {
- if (*fpp == '\\')
- *fpp = '/';
- else if (IS_KANJI(fpp))
+ if (IS_KANJI(fpp))
fpp++;
+ else if (*fpp == '\\')
+ *fpp = '/';
}
- i = strlen (currdir);
+ i = (int)strlen (currdir);
if (currdir[i - 1] == '/')
currdir[i - 1] = '\0';
@@ -636,6 +707,7 @@ main (int ac, char **av)
if (!(p = getdestdir (4, arg))) {
tpkerr ("Cannot get destination directory name.");
relmem (arg);
+ free(tmp);
return (100);
}
strcpy (rbuff, p);
@@ -647,14 +719,14 @@ main (int ac, char **av)
*/
for (p = rbuff; *p; p++) {
- if (*p == '\\')
- *p = '/';
- else if (IS_KANJI(p))
+ if (IS_KANJI(p))
p++;
+ else if (*p == '\\')
+ *p = '/';
}
p = rbuff;
- i = strlen (p);
+ i = (int)strlen (p);
if (p[i - 1] == '/')
p[i - 1] = '\0';
@@ -662,12 +734,14 @@ main (int ac, char **av)
if (!is_dir (p)) {
fprintf (stderr, "Destination %s is not found.\n", p);
relmem (arg);
+ free(tmp);
return (100);
}
} else if (!is_dir (p)) {
if (make_dir (p)) {
tpkerr ("Error in make_dir.");
relmem (arg);
+ free(tmp);
return (100);
}
}
@@ -675,7 +749,7 @@ main (int ac, char **av)
strcpy (buff, p);
p = buff;
- i = strlen (p);
+ i = (int)strlen (p);
if (p[i - 1] != '/')
strcat (p, "/");
@@ -683,6 +757,7 @@ main (int ac, char **av)
if (dpi[0] == 0) {
tpkerr ("Cannot determine DPI.");
relmem (arg);
+ free(tmp);
return (100);
}
@@ -693,6 +768,7 @@ main (int ac, char **av)
if (make_dir (p)) {
tpkerr ("Error in make_dir.");
relmem (arg);
+ free(tmp);
return (100);
}
}
@@ -713,6 +789,7 @@ main (int ac, char **av)
fprintf (stderr, "%s exists.\n", p);
relmem (arg);
printf ("%s\n", p);
+ free(tmp);
return (0);
}
@@ -746,6 +823,7 @@ main (int ac, char **av)
_chdrive (cdrive);
_chdir (currdir);
relmem (arg);
+ free(tmp);
return (100);
}
_dup2 (fileno (fnul), fileno (stdin));
@@ -764,6 +842,7 @@ main (int ac, char **av)
_chdrive (cdrive);
_chdir (currdir);
relmem (arg);
+ free(tmp);
return (100);
}
sprintf (cmd,
@@ -786,6 +865,7 @@ main (int ac, char **av)
_chdrive (cdrive);
_chdir (currdir);
relmem (arg);
+ free(tmp);
return (100);
}
@@ -803,6 +883,7 @@ main (int ac, char **av)
_chdrive (cdrive);
_chdir (currdir);
relmem (arg);
+ free(tmp);
return (100);
}
@@ -1094,18 +1175,22 @@ skip flag
} else
strcpy (ydpi, dpi);
+ strcpy(tfname, name);
+ strcat(tfname, ".tfm");
+ get_designsize(tfname, designsize);
+
if (i == 3) {
- sprintf (cmd, "-X%s -Y%s -S%s -E%s %s %s",
- dpi, ydpi, slant, extend, pfbname, pkname);
+ sprintf (cmd, "-X%s -Y%s -S%s -E%s -P%s %s %s",
+ dpi, ydpi, slant, extend, designsize, pfbname, pkname);
} else if (i == 4 && bdpi[0]) {
- sprintf (cmd, "-X%s -Y%s -R%s -S%s -E%s %s %s",
- dpi, ydpi, bdpi, slant, extend, pfbname, pkname);
+ sprintf (cmd, "-X%s -Y%s -R%s -S%s -E%s -P%s %s %s",
+ dpi, ydpi, bdpi, slant, extend, designsize, pfbname, pkname);
} else if (i == 4 && encname[0]) {
- sprintf (cmd, "-e%s -X%s -Y%s -S%s -E%s %s %s",
- encname, dpi, ydpi, slant, extend, pfbname, pkname);
+ sprintf (cmd, "-e%s -X%s -Y%s -S%s -E%s -P%s %s %s",
+ encname, dpi, ydpi, slant, extend, designsize, pfbname, pkname);
} else if (i == 5) {
- sprintf (cmd, "-e%s -X%s -Y%s -R%s -S%s -E%s %s %s",
- encname, dpi, ydpi, bdpi, slant, extend, pfbname, pkname);
+ sprintf (cmd, "-e%s -X%s -Y%s -R%s -S%s -E%s -P%s %s %s",
+ encname, dpi, ydpi, bdpi, slant, extend, designsize, pfbname, pkname);
} else {
tpkerr ("File format of pspksupp.map is wrong.");
goto do_gsftopk;
@@ -1166,6 +1251,7 @@ skip flag
_chdrive (cdrive);
_chdir (currdir);
relmem (arg);
+ free(tmp);
return (100);
}
strcpy (execfile, "gftopk.exe");
@@ -1179,6 +1265,7 @@ skip flag
_chdrive (cdrive);
_chdir (currdir);
relmem (arg);
+ free(tmp);
return (100);
}
remove (cmd);
@@ -1208,6 +1295,7 @@ skip flag
_chdrive (cdrive);
_chdir (currdir);
relmem (arg);
+ free(tmp);
return (100);
}
@@ -1216,10 +1304,11 @@ skip flag
_chdrive (cdrive);
_chdir (currdir);
relmem (arg);
+ free(tmp);
return (100);
}
- while ((i = fread (rbuff, 1, LBUF, fr)))
+ while ((i = (int)fread (rbuff, 1, LBUF, fr)))
fwrite (rbuff, 1, i, fw);
fclose (fr);
@@ -1240,6 +1329,7 @@ skip flag
printf ("%s\n", buff);
_chdrive (cdrive);
_chdir (currdir);
+ free(tmp);
return (0);
}