diff options
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/luascripts/txt2zlib.w')
-rw-r--r-- | Build/source/texk/web2c/luatexdir/luascripts/txt2zlib.w | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/luatexdir/luascripts/txt2zlib.w b/Build/source/texk/web2c/luatexdir/luascripts/txt2zlib.w new file mode 100644 index 00000000000..ccf5d56cb88 --- /dev/null +++ b/Build/source/texk/web2c/luatexdir/luascripts/txt2zlib.w @@ -0,0 +1,145 @@ +% txt2zlib.w + +% Copyright 2010 Taco Hoekwater <taco@@luatex.org> +% Copyright 2010 Hartmut Henkel <hartmut@@luatex.org> + +% This file is part of LuaTeX. + +% LuaTeX is free software; you can redistribute it and/or modify it under +% the terms of the GNU General Public License as published by the Free +% Software Foundation; either version 2 of the License, or (at your +% option) any later version. + +% LuaTeX 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 General Public License along +% with LuaTeX; if not, see <http://www.gnu.org/licenses/>. + +% $Id: txt2zlib.w 3937 2010-11-01 21:58:54Z hhenkel $ +% $URL: http://foundry.supelec.fr/svn/luatex/tags/beta-0.66.0/source/texk/web2c/luatexdir/luascripts/txt2zlib.w $ + +@ +@c + +#include<stdlib.h> +#include<stdio.h> +#include<string.h> +#include<zlib.h> + +#define INBUFINITLEN 10 +#define LINELEN 16 + +char header[] = + " Copyright 2010 Taco Hoekwater <taco@@luatex.org>\n" + " Copyright 2010 Hartmut Henkel <hartmut@@luatex.org>\n" + "\n" + " This file is part of LuaTeX.\n" + "\n" + " LuaTeX is free software; you can redistribute it and/or modify it under\n" + " the terms of the GNU General Public License as published by the Free\n" + " Software Foundation; either version 2 of the License, or (at your\n" + " option) any later version.\n" + "\n" + " LuaTeX is distributed in the hope that it will be useful, but WITHOUT\n" + " ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n" + " FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public\n" + " License for more details.\n" + "\n" + " You should have received a copy of the GNU General Public License along\n" + " with LuaTeX; if not, see <http://www.gnu.org/licenses/>."; + +#define NAMELEN 100 + +int main(int argc, char *argv[]) +{ + int i, j, c, err; + Byte *inbuf = NULL, *outbuf; + FILE *fin, *fout; + char ptrname[NAMELEN]; + uLong inbuflen, uncomprLen = 0, outbuflen, comprLen; + + if (argc != 3) { + fprintf(stderr, + "%s: need exactly two arguments (input file name, output file name).\n", + argv[0]); + exit(EXIT_FAILURE); + } + fin = fopen(argv[1], "r"); + if (fin == NULL) { + fprintf(stderr, "%s: can't open %s for reading.\n", argv[0], argv[1]); + exit(EXIT_FAILURE); + } + fout = fopen(argv[2], "w"); + if (fout == NULL) { + fprintf(stderr, "%s: can't open %s for writing.\n", argv[0], argv[2]); + exit(EXIT_FAILURE); + } + if ((inbuf = malloc(INBUFINITLEN * sizeof(Byte))) == NULL) + exit(EXIT_FAILURE); + inbuflen = INBUFINITLEN; + while ((c = fgetc(fin)) != EOF) { + if (uncomprLen == inbuflen - 1) { + inbuflen = (uLong) ((double) inbuflen * 1.5 + 1); + if ((inbuf = realloc(inbuf, inbuflen)) == NULL) + exit(EXIT_FAILURE); + } + inbuf[uncomprLen] = (Byte) c; + uncomprLen++; + } + + outbuflen = comprLen = (uLong) ((double) uncomprLen * 1.1 + 50); + if ((outbuf = malloc(outbuflen * sizeof(Byte))) == NULL) + exit(EXIT_FAILURE); + + err = compress(outbuf, &comprLen, inbuf, uncomprLen); + + if (err != Z_OK) { + fprintf(stderr, "compress error: %d\n", err); + exit(EXIT_FAILURE); + } + + fprintf(fout, "/* %s\n\n", argv[2]); + fprintf(fout, "%s */\n\n", header); + fprintf(fout, "#include \"ptexlib.h\"\n\n"); + + fprintf(fout, "static const Byte compr[%ld] = {\n", comprLen); + for (i = 0, j = 0; (uLong) i < comprLen; i++) { + if (j == 0) + fprintf(fout, " "); + fprintf(fout, "0x%02x", outbuf[i]); + if ((uLong) i < comprLen - 1) { + fprintf(fout, ","); + if (j == LINELEN - 1) { + fprintf(fout, "\n"); + j = 0; + } else { + fprintf(fout, " "); + j++; + } + } + } + fprintf(fout, "\n};\n\n"); + + strncpy(ptrname, argv[2], NAMELEN - 20); + for (i = (int) strlen(ptrname) - 1; i > 0; i--) { + if (ptrname[i] == '.') { + ptrname[i] = '\0'; + break; + } + } + + strcat(ptrname, "_zlib_struct_ptr"); + + fprintf(fout, + "static const zlib_struct compr_struct = { %ld, %ld, compr };\n\n", + uncomprLen, comprLen); + + fprintf(fout, "const zlib_struct *%s = &compr_struct;\n", ptrname); + + fclose(fin); + fclose(fout); + return EXIT_SUCCESS; +} |