2 #@ Create src/su/gen-cs-ctype.h.
5 OUT
=src
/su
/gen-cs-ctype.h
7 # Generate a more verbose output. Not for shipout versions.
16 # Note this may be ISO C89, so we cannot
22 #define su_S(T,I) ((T)(I))
24 #define S8_MAX INT8_MAX
28 char const *xpre, *pre;
30 fprintf(fp, "CTAV(su_CS_CTYPE_NONE == 0);\n"
32 "#define a_X(X) su_CONCAT(su_CS_CTYPE_,X)\n"
33 "u16 const su__cs_ctype[S8_MAX + 1] = {\n");
34 xpre = $VERB ? " | " : "|";
39 fprintf(fp, " /* 0x%02X=%c */ ",
40 (unsigned)i, (isprint(i) ? (char)i : '?'));
42 fprintf(fp, "%sa_X(ALNUM)", pre), any = 1, pre = xpre;
44 fprintf(fp, "%sa_X(ALPHA)", pre), any = 1, pre = xpre;
46 fprintf(fp, "%sa_X(BLANK)", pre), any = 1, pre = xpre;
48 fprintf(fp, "%sa_X(CNTRL)", pre), any = 1, pre = xpre;
50 fprintf(fp, "%sa_X(DIGIT)", pre), any = 1, pre = xpre;
52 fprintf(fp, "%sa_X(GRAPH)", pre), any = 1, pre = xpre;
54 fprintf(fp, "%sa_X(LOWER)", pre), any = 1, pre = xpre;
56 fprintf(fp, "%sa_X(PRINT)", pre), any = 1, pre = xpre;
58 fprintf(fp, "%sa_X(PUNCT)", pre), any = 1, pre = xpre;
60 fprintf(fp, "%sa_X(SPACE)", pre), any = 1, pre = xpre;
62 fprintf(fp, "%sa_X(UPPER)", pre), any = 1, pre = xpre;
63 if(isblank(i) || i == '\n')
64 fprintf(fp, "%sa_X(WHITE)", pre), any = 1, pre = xpre;
66 fprintf(fp, "%sa_X(XDIGIT)", pre), any = 1, pre = xpre;
68 fprintf(fp, "a_X(NONE)");
70 }while(i++ != S8_MAX);
71 fprintf(fp, "};\n#undef a_X\n");
75 fprintf(fp, "u8 const su__cs_tolower[S8_MAX + 1] = {\n");
83 fprintf(fp, " "), any = 3;
84 fprintf(fp, "'\\\x%02X',", (u8)tolower((char)i));
86 }while(i++ != S8_MAX);
87 fprintf(fp, "\n};\n");
91 fprintf(fp, "u8 const su__cs_toupper[S8_MAX + 1] = {\n");
99 fprintf(fp, " "), any = 3;
100 fprintf(fp, "'\\\x%02X',", (u8)toupper((char)i));
102 }while(i++ != S8_MAX);
103 fprintf(fp, "\n};\n");
108 FILE *ofp = fopen("${OUT}", "a");
110 fprintf(stderr, "ERROR: cannot open output\n");
113 fprintf(ofp, "/*@ ${OUT}, generated by su-make-cs-ctype.sh.\n"
114 " *@ See cs-ctype.c for more */\n\n");
122 if [ ${#} -ne 0 ]; then
123 if [ "${1}" = noverbose
]; then
130 if [ ${#} -eq 0 ]; then
131 create
> "${TMPDIR}"/su-mk-cs-ctype.c ||
exit 2
132 ${CC} -o "${TMPDIR}"/su-mk-cs-ctype "${TMPDIR}"/su-mk-cs-ctype.c || exit 3
133 rm -f src/su/gen-cs-ctype.h
134 "${TMPDIR}"/su-mk-cs-ctype || exit 4
135 rm -f "${TMPDIR}"/su-mk-cs-ctype "${TMPDIR}"/su-mk-cs-ctype.c || exit 5
138 echo >&2 'Invalid usage'