diff options
Diffstat (limited to 'Build/source/texk/web2c/tex-mkcpool.c')
-rw-r--r-- | Build/source/texk/web2c/tex-mkcpool.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/tex-mkcpool.c b/Build/source/texk/web2c/tex-mkcpool.c new file mode 100644 index 00000000000..bd95e7f5994 --- /dev/null +++ b/Build/source/texk/web2c/tex-mkcpool.c @@ -0,0 +1,60 @@ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +int main(int argc, char *argv[]) { + char *filename; + char *headername; + FILE *fh; + char data[1024]; + if (argc!=3) { + puts("Need exactly two arguments: pool_name and header_name"); + exit(1); + } + filename = argv[1]; + headername = argv[2]; + fh = fopen(filename,"r"); + printf( + "/* This file is auto-generated by makecpool */\n" + "\n" + "#include <stdio.h>\n" + "#include \"%s\"\n" + "\n" + "static char *poolfilearr[] = {\n",headername); + while (fgets(data,1024,fh)) { + int len = strlen(data); + int o = 0; /* skip first o characters*/ + int i; + if (data[len-1]=='\n') { /* chomp;*/ + data[len-1] = 0; + len--; + } + if (data[0]=='*') break; /* last if !^\*!; */ + if (data[0]>='0' && data[0]<='9' && data[1]>='0' && data[1]<='9') { + o=2; /* $data =~ s/^\d\d//; */ + } + printf(" \""); + for (i=o; i<len; i++) { + if (data[i]=='"' || data[i]=='\\') putchar('\\'); + if (data[i]=='?') printf("\" \""); /* suppress trigraphs */ + putchar(data[i]); + } /* $data =~ s/(["\\])/\\$1/g; */ + printf("\",\n"); + } + fclose(fh); + printf(" NULL };\n" + "int loadpoolstrings (integer spare_size) {\n" + " strnumber g=0;\n" + " int i=0,j=0;\n" + " char *s;\n" + " while ((s = poolfilearr[j++])) {\n" + " int l = strlen (s);\n" + " i += l;\n" + " if (i>=spare_size) return 0;\n" + " while (l-- > 0) strpool[poolptr++] = *s++;\n" + " g = makestring();\n" + " }\n" + " return g;\n" + "}\n"); + return 0; +} |