73 lines
1.3 KiB
C
73 lines
1.3 KiB
C
typedef unsigned char byte;
|
|
typedef unsigned int uint;
|
|
typedef unsigned long ulong;
|
|
typedef ulong gs_char;
|
|
typedef struct gs_show_enum_s gs_show_enum;
|
|
typedef struct gs_font_s gs_font;
|
|
typedef struct gx_font_stack_item_s {
|
|
gs_font *font;
|
|
} gx_font_stack_item;
|
|
typedef struct gx_font_stack_s {
|
|
gx_font_stack_item items[1 + 5 ];
|
|
} gx_font_stack;
|
|
struct gs_show_enum_s {
|
|
gx_font_stack fstack;
|
|
};
|
|
typedef enum {
|
|
ft_composite = 0,
|
|
} font_type;
|
|
struct gs_font_s {
|
|
font_type FontType;
|
|
};
|
|
typedef enum {
|
|
fmap_escape = 3,
|
|
fmap_shift = 8
|
|
} fmap_type;
|
|
typedef struct gs_type0_data_s {
|
|
fmap_type FMapType;
|
|
} gs_type0_data;
|
|
gs_type0_next_char(register gs_show_enum *penum)
|
|
{
|
|
const byte *p;
|
|
int fdepth;
|
|
gs_font *pfont;
|
|
gs_type0_data *pdata;
|
|
uint fidx;
|
|
gs_char chr;
|
|
for (; pfont->FontType == ft_composite; )
|
|
{
|
|
fmap_type fmt;
|
|
switch ( fmt )
|
|
{
|
|
do {} while (0);
|
|
rdown:
|
|
continue;
|
|
case fmap_shift:
|
|
p++;
|
|
do {} while (0);
|
|
goto rdown;
|
|
}
|
|
break;
|
|
}
|
|
up:
|
|
while ( fdepth > 0 )
|
|
{
|
|
switch ( pdata->FMapType )
|
|
{
|
|
default:
|
|
continue;
|
|
case fmap_escape:
|
|
fidx = *++p;
|
|
do {} while (0);
|
|
if ( fidx == chr && fdepth > 1 )
|
|
goto up;
|
|
down:
|
|
fdepth--;
|
|
do {} while (0);
|
|
}
|
|
break;
|
|
}
|
|
while ( (pfont = penum->fstack.items[fdepth].font)->FontType == ft_composite )
|
|
;
|
|
}
|