github.com/afumu/libc@v0.0.6/darwin/gen.c (about) 1 #include <stdio.h> 2 #include <ctype.h> 3 4 // typedef struct { 5 // char __magic[8]; /* Magic saying what version we are */ 6 // char __encoding[32]; /* ASCII name of this encoding */ 7 // 8 // __darwin_rune_t (*__sgetrune)(const char *, __darwin_size_t, char const **); 9 // int (*__sputrune)(__darwin_rune_t, char *, __darwin_size_t, char **); 10 // __darwin_rune_t __invalid_rune; 11 // 12 // __uint32_t __runetype[_CACHED_RUNES]; 13 // __darwin_rune_t __maplower[_CACHED_RUNES]; 14 // __darwin_rune_t __mapupper[_CACHED_RUNES]; 15 // 16 // /* 17 // * The following are to deal with Runes larger than _CACHED_RUNES - 1. 18 // * Their data is actually contiguous with this structure so as to make 19 // * it easier to read/write from/to disk. 20 // */ 21 // _RuneRange __runetype_ext; 22 // _RuneRange __maplower_ext; 23 // _RuneRange __mapupper_ext; 24 // 25 // void *__variable; /* Data which depends on the encoding */ 26 // int __variable_len; /* how long that data is */ 27 // 28 // /* 29 // * extra fields to deal with arbitrary character classes 30 // */ 31 // int __ncharclasses; 32 // _RuneCharClass *__charclasses; 33 // } _RuneLocale; 34 35 36 #define SZ(a) (sizeof(a)/sizeof(a[0])) 37 38 int main() { 39 printf("#include <ctype.h>\n\n"); 40 41 printf( 42 " __maskrune(__darwin_ct_rune_t _c, unsigned long _f)\n" 43 "{\n" 44 " return (int)_DefaultRuneLocale.__runetype[_c & 0xff] & (__uint32_t)_f;\n" 45 "}\n" 46 ); 47 printf("\n__darwin_ct_rune_t __toupper(__darwin_ct_rune_t c) { return toupper(c); }\n"); 48 printf("\n__darwin_ct_rune_t __tolower(__darwin_ct_rune_t c) { return tolower(c); }\n"); 49 50 printf("_RuneLocale _DefaultRuneLocale = {\n"); 51 52 printf("\t.__magic = {"); 53 for (int i = 0; i < SZ(_DefaultRuneLocale.__magic); i++) { 54 printf("%i, ", _DefaultRuneLocale.__magic[i]); 55 } 56 printf("},\n"); 57 58 printf("\t.__encoding = {"); 59 for (int i = 0; i < SZ(_DefaultRuneLocale.__encoding); i++) { 60 printf("%i, ", _DefaultRuneLocale.__encoding[i]); 61 } 62 printf("},\n"); 63 64 printf("\t.__invalid_rune = 0x%x,\n", (unsigned)_DefaultRuneLocale.__invalid_rune); 65 66 printf("\t.__runetype = {"); 67 for (int i = 0; i < SZ(_DefaultRuneLocale.__runetype); i++) { 68 if (i%16 == 0) { 69 printf("\n\t\t"); 70 } 71 printf("0x%x, ", _DefaultRuneLocale.__runetype[i]); 72 } 73 printf("\n\t},\n"); 74 75 printf("\t.__maplower = {"); 76 for (int i = 0; i < SZ(_DefaultRuneLocale.__maplower); i++) { 77 if (i%16 == 0) { 78 printf("\n\t\t"); 79 } 80 printf("0x%x, ", _DefaultRuneLocale.__maplower[i]); 81 } 82 printf("\n\t},\n"); 83 84 printf("\t.__mapupper= {"); 85 for (int i = 0; i < SZ(_DefaultRuneLocale.__mapupper); i++) { 86 if (i%16 == 0) { 87 printf("\n\t\t"); 88 } 89 printf("0x%x, ", _DefaultRuneLocale.__mapupper[i]); 90 } 91 printf("\n\t},\n"); 92 93 printf("\n};\n"); 94 printf("\n_RuneLocale *_CurrentRuneLocale = &_DefaultRuneLocale;\n"); 95 }