summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/mpdir/makecpool.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/mpdir/makecpool.c')
-rw-r--r--Build/source/texk/web2c/mpdir/makecpool.c60
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;
}