6 #define MAX_CP_CAHR 0x10000
8 static wint_t isalphatab
[MAX_CP_CAHR
];
9 static wint_t isuppertab
[MAX_CP_CAHR
];
10 static wint_t islowertab
[MAX_CP_CAHR
];
11 static wint_t uppertable
[MAX_CP_CAHR
];
12 static wint_t lowertable
[MAX_CP_CAHR
];
16 for (int i
= 0; i
< n
; i
++) {
22 print_range (wint_t *tab
, int max
, int t
, int retbool
) {
31 printf("CASE ch OF\n");
34 while ((i
< max
) && (tab
[i
] == 0)) ++i
;
38 if (i
+ 2 < max
&& tab
[i
+ 1] == 0 && tab
[i
+ 2] != 0) {
39 if (tab
[i
] % 2 == 1) {
47 while (i
< max
&& tab
[i
] != 0) i
+= 1;
50 while (i
+ 1 < max
&& tab
[i
] != 0 && tab
[i
+ 1] == 0) i
+= 2;
54 if (i
< max
&& begin
<= end
) {
56 // printf("(* %i *) ", oddmode)
61 printf("0%XX: RETURN TRUE\n", begin
);
63 printf("0%XX: RETURN 0%XX\n", begin
, tab
[begin
]);
66 printf("0%XX..0%XX: ", begin
, end
);
69 printf("RETURN TRUE\n");
70 } else if (oddmode
== 1) {
71 printf("RETURN ODD(ORD(ch))\n");
72 } else if (oddmode
== 2) {
73 printf("RETURN ~ODD(ORD(ch))\n");
77 printf("RETURN CHR(0%XH + ORD(ch) - 0%XH)\n", tab
[begin
], begin
);
78 } else if (oddmode
== 1) {
79 printf("IF ODD(ORD(ch)) THEN RETURN CHR(0%XH + ORD(ch) - 0%XH) ELSE RETURN ch END\n", tab
[begin
], begin
);
80 } else if (oddmode
== 2) {
81 printf("IF ~ODD(ORD(ch)) THEN RETURN CHR(0%XH + ORD(ch) - 0%XH) ELSE RETURN ch END\n", tab
[begin
], begin
);
94 printf("CASE ch OF\n");
101 for (int i
= 0; i
< fold
+ 1; i
++) {
105 printf("RETURN FALSE\n");
107 printf("RETURN ch\n");
116 main (int argc
, char **argv
) {
117 setlocale(LC_ALL
, "");
118 for (wint_t i
= 0; i
< MAX_CP_CAHR
; i
++) {
119 isalphatab
[i
] = iswalpha(i
) ? i
: 0;
120 isuppertab
[i
] = iswupper(i
) ? i
: 0;
121 islowertab
[i
] = iswlower(i
) ? i
: 0;
122 uppertable
[i
] = (towupper(i
) == i
) ? 0 : towupper(i
);
123 lowertable
[i
] = (towlower(i
) == i
) ? 0 : towlower(i
);
126 printf("MODULE Unicode;\n\n");
128 printf("\tIMPORT Kernel;\n\n");
131 printf("\t\tHook = POINTER TO RECORD (Kernel.CharHook) END;\n\n");
133 printf("\tPROCEDURE (h: Hook) Upper (ch: CHAR): CHAR;\n");
135 print_range(uppertable
, MAX_CP_CAHR
, 2, 0);
136 printf("\tEND Upper;\n\n");
138 printf("\tPROCEDURE (h: Hook) Lower (ch: CHAR): CHAR;\n");
140 print_range(lowertable
, MAX_CP_CAHR
, 2, 0);
141 printf("\tEND Lower;\n\n");
143 printf("\tPROCEDURE (h: Hook) IsAlpha (ch: CHAR): BOOLEAN;\n");
145 print_range(isalphatab
, MAX_CP_CAHR
, 2, 1);
146 printf("\tEND IsAlpha;\n\n");
148 printf("\tPROCEDURE (h: Hook) IsUpper (ch: CHAR): BOOLEAN;\n");
150 print_range(isuppertab
, MAX_CP_CAHR
, 2, 1);
151 printf("\tEND IsUpper;\n\n");
153 printf("\tPROCEDURE (h: Hook) IsLower (ch: CHAR): BOOLEAN;\n");
155 print_range(islowertab
, MAX_CP_CAHR
, 2, 1);
156 printf("\tEND IsLower;\n\n");
158 printf("\tPROCEDURE Init;\n");
159 printf("\t\tVAR h: Hook;\n");
161 printf("\t\tNEW(h); Kernel.SetCharHook(h)\n");
162 printf("\tEND Init;\n\n");
167 printf("\tKernel.SetCharHook(NIL)\n");
168 printf("END Unicode.");