1 typedef unsigned char byte; 2 typedef unsigned int uint; 3 typedef unsigned long ulong; 4 typedef ulong gs_char; 5 typedef struct gs_show_enum_s gs_show_enum; 6 typedef struct gs_font_s gs_font; 7 typedef struct gx_font_stack_item_s { 8 gs_font *font; 9 } gx_font_stack_item; 10 typedef struct gx_font_stack_s { 11 gx_font_stack_item items[1 + 5 ]; 12 } gx_font_stack; 13 struct gs_show_enum_s { 14 gx_font_stack fstack; 15 }; 16 typedef enum { 17 ft_composite = 0, 18 } font_type; 19 struct gs_font_s { 20 font_type FontType; 21 }; 22 typedef enum { 23 fmap_escape = 3, 24 fmap_shift = 8 25 } fmap_type; 26 typedef struct gs_type0_data_s { 27 fmap_type FMapType; 28 } gs_type0_data; gs_type0_next_char(register gs_show_enum * penum)29gs_type0_next_char(register gs_show_enum *penum) 30 { 31 const byte *p; 32 int fdepth; 33 gs_font *pfont; 34 gs_type0_data *pdata; 35 uint fidx; 36 gs_char chr; 37 for (; pfont->FontType == ft_composite; ) 38 { 39 fmap_type fmt; 40 switch ( fmt ) 41 { 42 do {} while (0); 43 rdown: 44 continue; 45 case fmap_shift: 46 p++; 47 do {} while (0); 48 goto rdown; 49 } 50 break; 51 } 52 up: 53 while ( fdepth > 0 ) 54 { 55 switch ( pdata->FMapType ) 56 { 57 default: 58 continue; 59 case fmap_escape: 60 fidx = *++p; 61 do {} while (0); 62 if ( fidx == chr && fdepth > 1 ) 63 goto up; 64 down: 65 fdepth--; 66 do {} while (0); 67 } 68 break; 69 } 70 while ( (pfont = penum->fstack.items[fdepth].font)->FontType == ft_composite ) 71 ; 72 } 73