diff options
Diffstat (limited to 'Build/source/texk/web2c/mpdir/makecpool.c')
-rw-r--r-- | Build/source/texk/web2c/mpdir/makecpool.c | 60 |
1 files changed, 39 insertions, 21 deletions
diff --git a/Build/source/texk/web2c/mpdir/makecpool.c b/Build/source/texk/web2c/mpdir/makecpool.c index 7d37035b9fd..728e1f86654 100644 --- a/Build/source/texk/web2c/mpdir/makecpool.c +++ b/Build/source/texk/web2c/mpdir/makecpool.c @@ -6,58 +6,76 @@ #include <stdlib.h> int main(int argc, char *argv[]) { - char *filename, *headername, data[1024]; + char *filename; + char *headername; FILE *fh; + char data[1024]; + int is_metapost = 0; + int is_luatex = 0; if (argc!=3) { - puts("Need exactly two arguments: pool_name and header_name"); - exit(1); + fprintf(stderr,"%s: need exactly two arguments (pool name and C header name).\n", argv[0]); + exit(EXIT_FAILURE); } filename = argv[1]; headername = argv[2]; fh = fopen(filename,"r"); + if (!fh) { + fprintf(stderr,"%s: can't open %s for reading.\n", argv[0], filename); + exit(EXIT_FAILURE); + } + if (strstr(filename,"luatex.pool")!=NULL) + is_luatex = 1; + else if (strstr(filename,"mp.pool")!=NULL) + is_metapost = 1; printf( - "/* This file is auto-generated by makecpool */\n" + "/*\n" + " * This file is auto-generated by makecpool. \n" + " * %s %s %s\n" + " */\n" "\n" "#include <stdio.h>\n" - "#include <strings.h>\n" + "#include <string.h>\n" "#include \"%s\"\n" "\n" - "static char *poolfilearr[] = {\n",headername); + "static const char *poolfilearr[] = {\n", argv[0], filename, headername, 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; + int len = strlen(data); + int o = 0; /* skip first bytes */ + if (data[len-1]=='\n') { data[len-1] = 0; len--; } - if (data[0]=='*') break; // last if /^\*/; + if (data[0]=='*') break; if (data[0]>='0' && data[0]<='9' && data[1]>='0' && data[1]<='9') { - o=2; // $data =~ s/^\d\d//; + o=2; } 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" + " const char *s;\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" - " strref[g]= 127;\n" - " }\n" - " return g;\n" - "}\n"); - return 0; + " if (i>=spare_size) return 0;\n"); + if (is_luatex) + printf(" while (l-- > 0) str_pool[pool_ptr++] = *s++;\n" + " g = make_string();\n"); + else + printf(" while (l-- > 0) strpool[poolptr++] = *s++;\n" + " g = makestring();\n"); + if (is_metapost) + printf(" strref[g]= 127;\n"); + printf(" }\n" " return g;\n" "}\n"); + return EXIT_SUCCESS; } |