| 38 |
*/ |
*/ |
| 39 |
|
|
| 40 |
|
|
| 41 |
/* This is a freestanding support program to generate a file containing default |
/* This is a freestanding support program to generate a file containing |
| 42 |
character tables for PCRE. The tables are built according to the default C |
character tables for PCRE. The tables are built according to the current |
| 43 |
locale. Now that pcre_maketables is a function visible to the outside world, we |
locale. Now that pcre_maketables is a function visible to the outside world, we |
| 44 |
make use of its code from here in order to be consistent. */ |
make use of its code from here in order to be consistent. */ |
| 45 |
|
|
| 46 |
#include <ctype.h> |
#include <ctype.h> |
| 47 |
#include <stdio.h> |
#include <stdio.h> |
| 48 |
#include <string.h> |
#include <string.h> |
| 49 |
|
#include <locale.h> |
| 50 |
|
|
| 51 |
#include "pcre_internal.h" |
#include "pcre_internal.h" |
| 52 |
|
|
| 56 |
|
|
| 57 |
int main(int argc, char **argv) |
int main(int argc, char **argv) |
| 58 |
{ |
{ |
|
int i; |
|
| 59 |
FILE *f; |
FILE *f; |
| 60 |
const unsigned char *tables = pcre_maketables(); |
int i = 1; |
| 61 |
const unsigned char *base_of_tables = tables; |
const unsigned char *tables; |
| 62 |
|
const unsigned char *base_of_tables; |
| 63 |
|
|
| 64 |
if (argc != 2) |
/* By default, the default C locale is used rather than what the building user |
| 65 |
|
happens to have set. However, if the -L option is given, set the locale from |
| 66 |
|
the LC_xxx environment variables. */ |
| 67 |
|
|
| 68 |
|
if (argc > 1 && strcmp(argv[1], "-L") == 0) |
| 69 |
|
{ |
| 70 |
|
setlocale(LC_ALL, ""); /* Set from environment variables */ |
| 71 |
|
i++; |
| 72 |
|
} |
| 73 |
|
|
| 74 |
|
if (argc < i + 1) |
| 75 |
{ |
{ |
| 76 |
fprintf(stderr, "dftables: one filename argument is required\n"); |
fprintf(stderr, "dftables: one filename argument is required\n"); |
| 77 |
return 1; |
return 1; |
| 78 |
} |
} |
| 79 |
|
|
| 80 |
f = fopen(argv[1], "wb"); |
tables = pcre_maketables(); |
| 81 |
|
base_of_tables = tables; |
| 82 |
|
|
| 83 |
|
f = fopen(argv[i], "wb"); |
| 84 |
if (f == NULL) |
if (f == NULL) |
| 85 |
{ |
{ |
| 86 |
fprintf(stderr, "dftables: failed to open %s for writing\n", argv[1]); |
fprintf(stderr, "dftables: failed to open %s for writing\n", argv[1]); |
| 87 |
return 1; |
return 1; |
| 88 |
} |
} |
| 89 |
|
|
| 90 |
/* There are two fprintf() calls here, because gcc in pedantic mode complains |
/* There are several fprintf() calls here, because gcc in pedantic mode |
| 91 |
about the very long string otherwise. */ |
complains about the very long string otherwise. */ |
| 92 |
|
|
| 93 |
fprintf(f, |
fprintf(f, |
| 94 |
"/*************************************************\n" |
"/*************************************************\n" |
| 95 |
"* Perl-Compatible Regular Expressions *\n" |
"* Perl-Compatible Regular Expressions *\n" |
| 96 |
"*************************************************/\n\n" |
"*************************************************/\n\n" |
| 97 |
"/* This file is automatically written by the dftables auxiliary \n" |
"/* This file was automatically written by the dftables auxiliary\n" |
| 98 |
"program. If you edit it by hand, you might like to edit the Makefile to \n" |
"program. It contains character tables that are used when no external\n" |
| 99 |
"prevent its ever being regenerated.\n\n"); |
"tables are passed to PCRE by the application that calls it. The tables\n" |
| 100 |
fprintf(f, |
"are used only for characters whose code values are less than 256.\n\n"); |
|
"This file contains the default tables for characters with codes less than\n" |
|
|
"128 (ASCII characters). These tables are used when no external tables are\n" |
|
|
"passed to PCRE.\n\n"); |
|
| 101 |
fprintf(f, |
fprintf(f, |
| 102 |
"The following #include is present because without it gcc 4.x may remove\n" |
"The following #include is present because without it gcc 4.x may remove\n" |
| 103 |
"the array definition from the final binary if PCRE is built into a static\n" |
"the array definition from the final binary if PCRE is built into a static\n" |
| 182 |
else fprintf(f, "%3d-", i-8); |
else fprintf(f, "%3d-", i-8); |
| 183 |
if (isprint(i-1)) fprintf(f, " %c ", i-1); |
if (isprint(i-1)) fprintf(f, " %c ", i-1); |
| 184 |
else fprintf(f, "%3d", i-1); |
else fprintf(f, "%3d", i-1); |
| 185 |
fprintf(f, " */\n\n/* End of chartables.c */\n"); |
fprintf(f, " */\n\n/* End of pcre_chartables.c */\n"); |
| 186 |
|
|
| 187 |
fclose(f); |
fclose(f); |
| 188 |
free((void *)base_of_tables); |
free((void *)base_of_tables); |