diff options
author | Peter Breitenlohner <peb@mppmu.mpg.de> | 2015-06-18 10:49:17 +0000 |
---|---|---|
committer | Peter Breitenlohner <peb@mppmu.mpg.de> | 2015-06-18 10:49:17 +0000 |
commit | 973cc50127fd0835fbbd57bbb9dd8885c60e154d (patch) | |
tree | c14d3476c68fd27c7e3382b9e5089e410ac9a6de /Build/source/texk/kpathsea/win32/mktexpk.c | |
parent | bae57b6f7ea0c81be60f4c73814128c4c91a84ee (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.c | 220 |
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); } |