diff --git a/.gitattributes b/.gitattributes index 11653e1..06e7fe1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -34,6 +34,8 @@ freeglut/freeglut/freeglut-1.3/freeglut_menu.c svn_keywords=Author+Date+Id+Revis freeglut/freeglut/freeglut-1.3/freeglut_misc.c svn_keywords=Author+Date+Id+Revision freeglut/freeglut/freeglut-1.3/freeglut_overlay.c svn_keywords=Author+Date+Id+Revision freeglut/freeglut/freeglut-1.3/freeglut_state.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_stroke_mono_roman.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/freeglut-1.3/freeglut_stroke_roman.c svn_keywords=Author+Date+Id+Revision freeglut/freeglut/freeglut-1.3/freeglut_structure.c svn_keywords=Author+Date+Id+Revision freeglut/freeglut/freeglut-1.3/freeglut_teapot.c svn_keywords=Author+Date+Id+Revision freeglut/freeglut/freeglut-1.3/freeglut_videoresize.c svn_keywords=Author+Date+Id+Revision @@ -50,6 +52,9 @@ freeglut/freeglut/genfonts/Roman.src svn_keywords=Author+Date+Id+Revision freeglut/freeglut/genfonts/Roman_M.src svn_keywords=Author+Date+Id+Revision freeglut/freeglut/genfonts/genfonts.c svn_keywords=Author+Date+Id+Revision freeglut/freeglut/genfonts/genstroke.c svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/genfonts/lex.l svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/genfonts/to_stroke.y svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/genfonts/wfont.h svn_keywords=Author+Date+Id+Revision freeglut/freeglut/include/GL/Makefile.am svn_keywords=Author+Date+Id+Revision freeglut/freeglut/include/GL/freeglut.h svn_keywords=Author+Date+Id+Revision freeglut/freeglut/include/GL/freeglut_internal.h svn_keywords=Author+Date+Id+Revision diff --git a/freeglut/freeglut/freeglut-1.3/Makefile.am b/freeglut/freeglut/freeglut-1.3/Makefile.am index 5ea457c..54d8dee 100644 --- a/freeglut/freeglut/freeglut-1.3/Makefile.am +++ b/freeglut/freeglut/freeglut-1.3/Makefile.am @@ -13,6 +13,8 @@ libfreeglut_1_3_la_SOURCES = freeglut_callbacks.c \ freeglut_display.c \ freeglut_font.c \ freeglut_font_data.c \ + freeglut_stroke_roman.c \ + freeglut_stroke_mono_roman.c \ freeglut_gamemode.c \ freeglut_geometry.c \ freeglut_init.c \ diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_font.c b/freeglut/freeglut/freeglut-1.3/freeglut_font.c index 64a9278..90d38e3 100644 --- a/freeglut/freeglut/freeglut-1.3/freeglut_font.c +++ b/freeglut/freeglut/freeglut-1.3/freeglut_font.c @@ -53,6 +53,8 @@ extern SFG_Font fgFontHelvetica12; extern SFG_Font fgFontHelvetica18; extern SFG_Font fgFontTimesRoman10; extern SFG_Font fgFontTimesRoman24; +extern SFG_StrokeFont fgStrokeRoman; +extern SFG_StrokeFont fgStrokeMonoRoman; /* * This is for GLUT binary compatibility, as suggested by Steve Baker @@ -97,6 +99,26 @@ static SFG_Font* fghFontByID( void* font ) return 0; } +/* + * Matches a font ID with a SFG_StrokeFont structure pointer. + * This was changed to match the GLUT header style. + */ +static SFG_StrokeFont* fghStrokeByID( void* font ) +{ + /* + * Try matching the font ID and the font data structure + */ + if( font == GLUT_STROKE_ROMAN ) return( &fgStrokeRoman ); + if( font == GLUT_STROKE_MONO_ROMAN ) return( &fgStrokeMonoRoman ); + + /* + * This probably is the library user's fault + */ + fgError( "stroke font 0x%08x not found", font ); + + return 0; +} + /* -- INTERFACE FUNCTIONS -------------------------------------------------- */ @@ -115,7 +137,7 @@ void FGAPIENTRY glutBitmapCharacter( void* fontID, int character ) /* * Make sure the character we want to output is valid */ - freeglut_return_if_fail( character > 0 && character < 256 ); + freeglut_return_if_fail( character >= 0 && character < font->Quantity ); /* * Then find the character we want to draw @@ -174,7 +196,7 @@ int FGAPIENTRY glutBitmapWidth( void* fontID, int character ) /* * Make sure the character we want to output is valid */ - freeglut_return_val_if_fail( character > 0 && character < 256, 0 ); + freeglut_return_val_if_fail( character > 0 && character < font->Quantity, 0 ); /* * Scan the font looking for the specified character @@ -187,10 +209,34 @@ int FGAPIENTRY glutBitmapWidth( void* fontID, int character ) */ void FGAPIENTRY glutStrokeCharacter( void* fontID, int character ) { + const SFG_StrokeChar *schar; + const SFG_StrokeStrip *strip; + int i, j; + /* - * Stroke fonts are not supported yet, use a bitmap font instead + * First of all we'll need a font to use */ - glutBitmapCharacter( GLUT_BITMAP_8_BY_13, character ); + SFG_StrokeFont* font = fghStrokeByID( fontID ); + + /* + * Make sure the character we want to output is valid + */ + freeglut_return_if_fail( character >= 0 && character < font->Quantity ); + + schar = font->Characters[character]; + + strip = schar->Strips; + + for (i = 0; i < schar->Number; i++, strip++) + { + glBegin(GL_LINE_STRIP); + for(j = 0; j < strip->Number; j++) + { + glVertex2f(strip->Vertices[j].X, strip->Vertices[j].Y); + } + glEnd(); + } + glTranslatef(schar->Right, 0.0, 0.0); } /* @@ -199,9 +245,16 @@ void FGAPIENTRY glutStrokeCharacter( void* fontID, int character ) int FGAPIENTRY glutStrokeWidth( void* fontID, int character ) { /* - * Stroke fonts are not supported yet, use a bitmap font instead + * First of all we'll need a font to use */ - return( glutBitmapWidth( GLUT_BITMAP_8_BY_13, character ) ); + SFG_StrokeFont* font = fghStrokeByID( fontID ); + + /* + * Make sure the character we want to output is valid + */ + freeglut_return_if_fail( character >= 0 && character < font->Quantity ); + + return (font->Characters[character]->Right); } /* @@ -261,13 +314,17 @@ int FGAPIENTRY glutBitmapHeight( void* fontID ) /* * Returns the height of a stroke font */ -int FGAPIENTRY glutStrokeHeight( void* font ) +GLfloat FGAPIENTRY glutStrokeHeight( void* fontID ) { /* - * Stroke fonts are currently not implemented. - * Using GLUT_BITMAP_8_BY_13 bitmap font instead + * See which font are we queried about */ - return( glutBitmapHeight( GLUT_BITMAP_8_BY_13 ) ); + SFG_StrokeFont* font = fghStrokeByID( fontID ); + + /* + * Return the character set's height + */ + return( font->Height ); } /*** END OF FILE ***/ diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_stroke_mono_roman.c b/freeglut/freeglut/freeglut-1.3/freeglut_stroke_mono_roman.c new file mode 100644 index 0000000..35e5cff --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_stroke_mono_roman.c @@ -0,0 +1,2820 @@ + +/* This file has been automatically generated by the genstroke utility. */ + +#include "../include/GL/freeglut_internal.h" + +/* char: 0x20 */ + +static const SFG_StrokeStrip ch32st[] = +{ +}; + +static const SFG_StrokeChar ch32 = {104.762,0,ch32st}; + +/* char: 0x21 */ + +static const SFG_StrokeVertex ch33st0[] = +{ + {52.381,100}, + {52.381,33.3333} +}; + +static const SFG_StrokeVertex ch33st1[] = +{ + {52.381,9.5238}, + {47.6191,4.7619}, + {52.381,0}, + {57.1429,4.7619}, + {52.381,9.5238} +}; + +static const SFG_StrokeStrip ch33st[] = +{ + {2,ch33st0}, + {5,ch33st1} +}; + +static const SFG_StrokeChar ch33 = {104.762,2,ch33st}; + +/* char: 0x22 */ + +static const SFG_StrokeVertex ch34st0[] = +{ + {33.3334,100}, + {33.3334,66.6667} +}; + +static const SFG_StrokeVertex ch34st1[] = +{ + {71.4286,100}, + {71.4286,66.6667} +}; + +static const SFG_StrokeStrip ch34st[] = +{ + {2,ch34st0}, + {2,ch34st1} +}; + +static const SFG_StrokeChar ch34 = {104.762,2,ch34st}; + +/* char: 0x23 */ + +static const SFG_StrokeVertex ch35st0[] = +{ + {54.7619,119.048}, + {21.4286,-33.3333} +}; + +static const SFG_StrokeVertex ch35st1[] = +{ + {83.3334,119.048}, + {50,-33.3333} +}; + +static const SFG_StrokeVertex ch35st2[] = +{ + {21.4286,57.1429}, + {88.0952,57.1429} +}; + +static const SFG_StrokeVertex ch35st3[] = +{ + {16.6667,28.5714}, + {83.3334,28.5714} +}; + +static const SFG_StrokeStrip ch35st[] = +{ + {2,ch35st0}, + {2,ch35st1}, + {2,ch35st2}, + {2,ch35st3} +}; + +static const SFG_StrokeChar ch35 = {104.762,4,ch35st}; + +/* char: 0x24 */ + +static const SFG_StrokeVertex ch36st0[] = +{ + {42.8571,119.048}, + {42.8571,-19.0476} +}; + +static const SFG_StrokeVertex ch36st1[] = +{ + {61.9047,119.048}, + {61.9047,-19.0476} +}; + +static const SFG_StrokeVertex ch36st2[] = +{ + {85.7143,85.7143}, + {76.1905,95.2381}, + {61.9047,100}, + {42.8571,100}, + {28.5714,95.2381}, + {19.0476,85.7143}, + {19.0476,76.1905}, + {23.8095,66.6667}, + {28.5714,61.9048}, + {38.0952,57.1429}, + {66.6666,47.619}, + {76.1905,42.8571}, + {80.9524,38.0952}, + {85.7143,28.5714}, + {85.7143,14.2857}, + {76.1905,4.7619}, + {61.9047,0}, + {42.8571,0}, + {28.5714,4.7619}, + {19.0476,14.2857} +}; + +static const SFG_StrokeStrip ch36st[] = +{ + {2,ch36st0}, + {2,ch36st1}, + {20,ch36st2} +}; + +static const SFG_StrokeChar ch36 = {104.762,3,ch36st}; + +/* char: 0x25 */ + +static const SFG_StrokeVertex ch37st0[] = +{ + {95.2381,100}, + {9.5238,0} +}; + +static const SFG_StrokeVertex ch37st1[] = +{ + {33.3333,100}, + {42.8571,90.4762}, + {42.8571,80.9524}, + {38.0952,71.4286}, + {28.5714,66.6667}, + {19.0476,66.6667}, + {9.5238,76.1905}, + {9.5238,85.7143}, + {14.2857,95.2381}, + {23.8095,100}, + {33.3333,100}, + {42.8571,95.2381}, + {57.1428,90.4762}, + {71.4286,90.4762}, + {85.7143,95.2381}, + {95.2381,100} +}; + +static const SFG_StrokeVertex ch37st2[] = +{ + {76.1905,33.3333}, + {66.6667,28.5714}, + {61.9048,19.0476}, + {61.9048,9.5238}, + {71.4286,0}, + {80.9524,0}, + {90.4762,4.7619}, + {95.2381,14.2857}, + {95.2381,23.8095}, + {85.7143,33.3333}, + {76.1905,33.3333} +}; + +static const SFG_StrokeStrip ch37st[] = +{ + {2,ch37st0}, + {16,ch37st1}, + {11,ch37st2} +}; + +static const SFG_StrokeChar ch37 = {104.762,3,ch37st}; + +/* char: 0x26 */ + +static const SFG_StrokeVertex ch38st0[] = +{ + {100,57.1429}, + {100,61.9048}, + {95.2381,66.6667}, + {90.4762,66.6667}, + {85.7143,61.9048}, + {80.9524,52.381}, + {71.4286,28.5714}, + {61.9048,14.2857}, + {52.3809,4.7619}, + {42.8571,0}, + {23.8095,0}, + {14.2857,4.7619}, + {9.5238,9.5238}, + {4.7619,19.0476}, + {4.7619,28.5714}, + {9.5238,38.0952}, + {14.2857,42.8571}, + {47.619,61.9048}, + {52.3809,66.6667}, + {57.1429,76.1905}, + {57.1429,85.7143}, + {52.3809,95.2381}, + {42.8571,100}, + {33.3333,95.2381}, + {28.5714,85.7143}, + {28.5714,76.1905}, + {33.3333,61.9048}, + {42.8571,47.619}, + {66.6667,14.2857}, + {76.1905,4.7619}, + {85.7143,0}, + {95.2381,0}, + {100,4.7619}, + {100,9.5238} +}; + +static const SFG_StrokeStrip ch38st[] = +{ + {34,ch38st0} +}; + +static const SFG_StrokeChar ch38 = {104.762,1,ch38st}; + +/* char: 0x27 */ + +static const SFG_StrokeVertex ch39st0[] = +{ + {52.381,100}, + {52.381,66.6667} +}; + +static const SFG_StrokeStrip ch39st[] = +{ + {2,ch39st0} +}; + +static const SFG_StrokeChar ch39 = {104.762,1,ch39st}; + +/* char: 0x28 */ + +static const SFG_StrokeVertex ch40st0[] = +{ + {69.0476,119.048}, + {59.5238,109.524}, + {50,95.2381}, + {40.4762,76.1905}, + {35.7143,52.381}, + {35.7143,33.3333}, + {40.4762,9.5238}, + {50,-9.5238}, + {59.5238,-23.8095}, + {69.0476,-33.3333} +}; + +static const SFG_StrokeStrip ch40st[] = +{ + {10,ch40st0} +}; + +static const SFG_StrokeChar ch40 = {104.762,1,ch40st}; + +/* char: 0x29 */ + +static const SFG_StrokeVertex ch41st0[] = +{ + {35.7143,119.048}, + {45.2381,109.524}, + {54.7619,95.2381}, + {64.2857,76.1905}, + {69.0476,52.381}, + {69.0476,33.3333}, + {64.2857,9.5238}, + {54.7619,-9.5238}, + {45.2381,-23.8095}, + {35.7143,-33.3333} +}; + +static const SFG_StrokeStrip ch41st[] = +{ + {10,ch41st0} +}; + +static const SFG_StrokeChar ch41 = {104.762,1,ch41st}; + +/* char: 0x2a */ + +static const SFG_StrokeVertex ch42st0[] = +{ + {52.381,71.4286}, + {52.381,14.2857} +}; + +static const SFG_StrokeVertex ch42st1[] = +{ + {28.5715,57.1429}, + {76.1905,28.5714} +}; + +static const SFG_StrokeVertex ch42st2[] = +{ + {76.1905,57.1429}, + {28.5715,28.5714} +}; + +static const SFG_StrokeStrip ch42st[] = +{ + {2,ch42st0}, + {2,ch42st1}, + {2,ch42st2} +}; + +static const SFG_StrokeChar ch42 = {104.762,3,ch42st}; + +/* char: 0x2b */ + +static const SFG_StrokeVertex ch43st0[] = +{ + {52.3809,85.7143}, + {52.3809,0} +}; + +static const SFG_StrokeVertex ch43st1[] = +{ + {9.5238,42.8571}, + {95.2381,42.8571} +}; + +static const SFG_StrokeStrip ch43st[] = +{ + {2,ch43st0}, + {2,ch43st1} +}; + +static const SFG_StrokeChar ch43 = {104.762,2,ch43st}; + +/* char: 0x2c */ + +static const SFG_StrokeVertex ch44st0[] = +{ + {57.1429,4.7619}, + {52.381,0}, + {47.6191,4.7619}, + {52.381,9.5238}, + {57.1429,4.7619}, + {57.1429,-4.7619}, + {52.381,-14.2857}, + {47.6191,-19.0476} +}; + +static const SFG_StrokeStrip ch44st[] = +{ + {8,ch44st0} +}; + +static const SFG_StrokeChar ch44 = {104.762,1,ch44st}; + +/* char: 0x2d */ + +static const SFG_StrokeVertex ch45st0[] = +{ + {9.5238,42.8571}, + {95.2381,42.8571} +}; + +static const SFG_StrokeStrip ch45st[] = +{ + {2,ch45st0} +}; + +static const SFG_StrokeChar ch45 = {104.762,1,ch45st}; + +/* char: 0x2e */ + +static const SFG_StrokeVertex ch46st0[] = +{ + {52.381,9.5238}, + {47.6191,4.7619}, + {52.381,0}, + {57.1429,4.7619}, + {52.381,9.5238} +}; + +static const SFG_StrokeStrip ch46st[] = +{ + {5,ch46st0} +}; + +static const SFG_StrokeChar ch46 = {104.762,1,ch46st}; + +/* char: 0x2f */ + +static const SFG_StrokeVertex ch47st0[] = +{ + {19.0476,-14.2857}, + {85.7143,100} +}; + +static const SFG_StrokeStrip ch47st[] = +{ + {2,ch47st0} +}; + +static const SFG_StrokeChar ch47 = {104.762,1,ch47st}; + +/* char: 0x30 */ + +static const SFG_StrokeVertex ch48st0[] = +{ + {47.619,100}, + {33.3333,95.2381}, + {23.8095,80.9524}, + {19.0476,57.1429}, + {19.0476,42.8571}, + {23.8095,19.0476}, + {33.3333,4.7619}, + {47.619,0}, + {57.1428,0}, + {71.4286,4.7619}, + {80.9524,19.0476}, + {85.7143,42.8571}, + {85.7143,57.1429}, + {80.9524,80.9524}, + {71.4286,95.2381}, + {57.1428,100}, + {47.619,100} +}; + +static const SFG_StrokeStrip ch48st[] = +{ + {17,ch48st0} +}; + +static const SFG_StrokeChar ch48 = {104.762,1,ch48st}; + +/* char: 0x31 */ + +static const SFG_StrokeVertex ch49st0[] = +{ + {40.4762,80.9524}, + {50,85.7143}, + {64.2857,100}, + {64.2857,0} +}; + +static const SFG_StrokeStrip ch49st[] = +{ + {4,ch49st0} +}; + +static const SFG_StrokeChar ch49 = {104.762,1,ch49st}; + +/* char: 0x32 */ + +static const SFG_StrokeVertex ch50st0[] = +{ + {23.8095,76.1905}, + {23.8095,80.9524}, + {28.5714,90.4762}, + {33.3333,95.2381}, + {42.8571,100}, + {61.9047,100}, + {71.4286,95.2381}, + {76.1905,90.4762}, + {80.9524,80.9524}, + {80.9524,71.4286}, + {76.1905,61.9048}, + {66.6666,47.619}, + {19.0476,0}, + {85.7143,0} +}; + +static const SFG_StrokeStrip ch50st[] = +{ + {14,ch50st0} +}; + +static const SFG_StrokeChar ch50 = {104.762,1,ch50st}; + +/* char: 0x33 */ + +static const SFG_StrokeVertex ch51st0[] = +{ + {28.5714,100}, + {80.9524,100}, + {52.3809,61.9048}, + {66.6666,61.9048}, + {76.1905,57.1429}, + {80.9524,52.381}, + {85.7143,38.0952}, + {85.7143,28.5714}, + {80.9524,14.2857}, + {71.4286,4.7619}, + {57.1428,0}, + {42.8571,0}, + {28.5714,4.7619}, + {23.8095,9.5238}, + {19.0476,19.0476} +}; + +static const SFG_StrokeStrip ch51st[] = +{ + {15,ch51st0} +}; + +static const SFG_StrokeChar ch51 = {104.762,1,ch51st}; + +/* char: 0x34 */ + +static const SFG_StrokeVertex ch52st0[] = +{ + {64.2857,100}, + {16.6667,33.3333}, + {88.0952,33.3333} +}; + +static const SFG_StrokeVertex ch52st1[] = +{ + {64.2857,100}, + {64.2857,0} +}; + +static const SFG_StrokeStrip ch52st[] = +{ + {3,ch52st0}, + {2,ch52st1} +}; + +static const SFG_StrokeChar ch52 = {104.762,2,ch52st}; + +/* char: 0x35 */ + +static const SFG_StrokeVertex ch53st0[] = +{ + {76.1905,100}, + {28.5714,100}, + {23.8095,57.1429}, + {28.5714,61.9048}, + {42.8571,66.6667}, + {57.1428,66.6667}, + {71.4286,61.9048}, + {80.9524,52.381}, + {85.7143,38.0952}, + {85.7143,28.5714}, + {80.9524,14.2857}, + {71.4286,4.7619}, + {57.1428,0}, + {42.8571,0}, + {28.5714,4.7619}, + {23.8095,9.5238}, + {19.0476,19.0476} +}; + +static const SFG_StrokeStrip ch53st[] = +{ + {17,ch53st0} +}; + +static const SFG_StrokeChar ch53 = {104.762,1,ch53st}; + +/* char: 0x36 */ + +static const SFG_StrokeVertex ch54st0[] = +{ + {78.5714,85.7143}, + {73.8096,95.2381}, + {59.5238,100}, + {50,100}, + {35.7143,95.2381}, + {26.1905,80.9524}, + {21.4286,57.1429}, + {21.4286,33.3333}, + {26.1905,14.2857}, + {35.7143,4.7619}, + {50,0}, + {54.7619,0}, + {69.0476,4.7619}, + {78.5714,14.2857}, + {83.3334,28.5714}, + {83.3334,33.3333}, + {78.5714,47.619}, + {69.0476,57.1429}, + {54.7619,61.9048}, + {50,61.9048}, + {35.7143,57.1429}, + {26.1905,47.619}, + {21.4286,33.3333} +}; + +static const SFG_StrokeStrip ch54st[] = +{ + {23,ch54st0} +}; + +static const SFG_StrokeChar ch54 = {104.762,1,ch54st}; + +/* char: 0x37 */ + +static const SFG_StrokeVertex ch55st0[] = +{ + {85.7143,100}, + {38.0952,0} +}; + +static const SFG_StrokeVertex ch55st1[] = +{ + {19.0476,100}, + {85.7143,100} +}; + +static const SFG_StrokeStrip ch55st[] = +{ + {2,ch55st0}, + {2,ch55st1} +}; + +static const SFG_StrokeChar ch55 = {104.762,2,ch55st}; + +/* char: 0x38 */ + +static const SFG_StrokeVertex ch56st0[] = +{ + {42.8571,100}, + {28.5714,95.2381}, + {23.8095,85.7143}, + {23.8095,76.1905}, + {28.5714,66.6667}, + {38.0952,61.9048}, + {57.1428,57.1429}, + {71.4286,52.381}, + {80.9524,42.8571}, + {85.7143,33.3333}, + {85.7143,19.0476}, + {80.9524,9.5238}, + {76.1905,4.7619}, + {61.9047,0}, + {42.8571,0}, + {28.5714,4.7619}, + {23.8095,9.5238}, + {19.0476,19.0476}, + {19.0476,33.3333}, + {23.8095,42.8571}, + {33.3333,52.381}, + {47.619,57.1429}, + {66.6666,61.9048}, + {76.1905,66.6667}, + {80.9524,76.1905}, + {80.9524,85.7143}, + {76.1905,95.2381}, + {61.9047,100}, + {42.8571,100} +}; + +static const SFG_StrokeStrip ch56st[] = +{ + {29,ch56st0} +}; + +static const SFG_StrokeChar ch56 = {104.762,1,ch56st}; + +/* char: 0x39 */ + +static const SFG_StrokeVertex ch57st0[] = +{ + {83.3334,66.6667}, + {78.5714,52.381}, + {69.0476,42.8571}, + {54.7619,38.0952}, + {50,38.0952}, + {35.7143,42.8571}, + {26.1905,52.381}, + {21.4286,66.6667}, + {21.4286,71.4286}, + {26.1905,85.7143}, + {35.7143,95.2381}, + {50,100}, + {54.7619,100}, + {69.0476,95.2381}, + {78.5714,85.7143}, + {83.3334,66.6667}, + {83.3334,42.8571}, + {78.5714,19.0476}, + {69.0476,4.7619}, + {54.7619,0}, + {45.2381,0}, + {30.9524,4.7619}, + {26.1905,14.2857} +}; + +static const SFG_StrokeStrip ch57st[] = +{ + {23,ch57st0} +}; + +static const SFG_StrokeChar ch57 = {104.762,1,ch57st}; + +/* char: 0x3a */ + +static const SFG_StrokeVertex ch58st0[] = +{ + {52.381,66.6667}, + {47.6191,61.9048}, + {52.381,57.1429}, + {57.1429,61.9048}, + {52.381,66.6667} +}; + +static const SFG_StrokeVertex ch58st1[] = +{ + {52.381,9.5238}, + {47.6191,4.7619}, + {52.381,0}, + {57.1429,4.7619}, + {52.381,9.5238} +}; + +static const SFG_StrokeStrip ch58st[] = +{ + {5,ch58st0}, + {5,ch58st1} +}; + +static const SFG_StrokeChar ch58 = {104.762,2,ch58st}; + +/* char: 0x3b */ + +static const SFG_StrokeVertex ch59st0[] = +{ + {52.381,66.6667}, + {47.6191,61.9048}, + {52.381,57.1429}, + {57.1429,61.9048}, + {52.381,66.6667} +}; + +static const SFG_StrokeVertex ch59st1[] = +{ + {57.1429,4.7619}, + {52.381,0}, + {47.6191,4.7619}, + {52.381,9.5238}, + {57.1429,4.7619}, + {57.1429,-4.7619}, + {52.381,-14.2857}, + {47.6191,-19.0476} +}; + +static const SFG_StrokeStrip ch59st[] = +{ + {5,ch59st0}, + {8,ch59st1} +}; + +static const SFG_StrokeChar ch59 = {104.762,2,ch59st}; + +/* char: 0x3c */ + +static const SFG_StrokeVertex ch60st0[] = +{ + {90.4762,85.7143}, + {14.2857,42.8571}, + {90.4762,0} +}; + +static const SFG_StrokeStrip ch60st[] = +{ + {3,ch60st0} +}; + +static const SFG_StrokeChar ch60 = {104.762,1,ch60st}; + +/* char: 0x3d */ + +static const SFG_StrokeVertex ch61st0[] = +{ + {9.5238,57.1429}, + {95.2381,57.1429} +}; + +static const SFG_StrokeVertex ch61st1[] = +{ + {9.5238,28.5714}, + {95.2381,28.5714} +}; + +static const SFG_StrokeStrip ch61st[] = +{ + {2,ch61st0}, + {2,ch61st1} +}; + +static const SFG_StrokeChar ch61 = {104.762,2,ch61st}; + +/* char: 0x3e */ + +static const SFG_StrokeVertex ch62st0[] = +{ + {14.2857,85.7143}, + {90.4762,42.8571}, + {14.2857,0} +}; + +static const SFG_StrokeStrip ch62st[] = +{ + {3,ch62st0} +}; + +static const SFG_StrokeChar ch62 = {104.762,1,ch62st}; + +/* char: 0x3f */ + +static const SFG_StrokeVertex ch63st0[] = +{ + {23.8095,76.1905}, + {23.8095,80.9524}, + {28.5714,90.4762}, + {33.3333,95.2381}, + {42.8571,100}, + {61.9047,100}, + {71.4285,95.2381}, + {76.1905,90.4762}, + {80.9524,80.9524}, + {80.9524,71.4286}, + {76.1905,61.9048}, + {71.4285,57.1429}, + {52.3809,47.619}, + {52.3809,33.3333} +}; + +static const SFG_StrokeVertex ch63st1[] = +{ + {52.3809,9.5238}, + {47.619,4.7619}, + {52.3809,0}, + {57.1428,4.7619}, + {52.3809,9.5238} +}; + +static const SFG_StrokeStrip ch63st[] = +{ + {14,ch63st0}, + {5,ch63st1} +}; + +static const SFG_StrokeChar ch63 = {104.762,2,ch63st}; + +/* char: 0x40 */ + +static const SFG_StrokeVertex ch64st0[] = +{ + {64.2857,52.381}, + {54.7619,57.1429}, + {45.2381,57.1429}, + {40.4762,47.619}, + {40.4762,42.8571}, + {45.2381,33.3333}, + {54.7619,33.3333}, + {64.2857,38.0952} +}; + +static const SFG_StrokeVertex ch64st1[] = +{ + {64.2857,57.1429}, + {64.2857,38.0952}, + {69.0476,33.3333}, + {78.5714,33.3333}, + {83.3334,42.8571}, + {83.3334,47.619}, + {78.5714,61.9048}, + {69.0476,71.4286}, + {54.7619,76.1905}, + {50,76.1905}, + {35.7143,71.4286}, + {26.1905,61.9048}, + {21.4286,47.619}, + {21.4286,42.8571}, + {26.1905,28.5714}, + {35.7143,19.0476}, + {50,14.2857}, + {54.7619,14.2857}, + {69.0476,19.0476} +}; + +static const SFG_StrokeStrip ch64st[] = +{ + {8,ch64st0}, + {19,ch64st1} +}; + +static const SFG_StrokeChar ch64 = {104.762,2,ch64st}; + +/* char: 0x41 */ + +static const SFG_StrokeVertex ch65st0[] = +{ + {52.3809,100}, + {14.2857,0} +}; + +static const SFG_StrokeVertex ch65st1[] = +{ + {52.3809,100}, + {90.4762,0} +}; + +static const SFG_StrokeVertex ch65st2[] = +{ + {28.5714,33.3333}, + {76.1905,33.3333} +}; + +static const SFG_StrokeStrip ch65st[] = +{ + {2,ch65st0}, + {2,ch65st1}, + {2,ch65st2} +}; + +static const SFG_StrokeChar ch65 = {104.762,3,ch65st}; + +/* char: 0x42 */ + +static const SFG_StrokeVertex ch66st0[] = +{ + {19.0476,100}, + {19.0476,0} +}; + +static const SFG_StrokeVertex ch66st1[] = +{ + {19.0476,100}, + {61.9047,100}, + {76.1905,95.2381}, + {80.9524,90.4762}, + {85.7143,80.9524}, + {85.7143,71.4286}, + {80.9524,61.9048}, + {76.1905,57.1429}, + {61.9047,52.381} +}; + +static const SFG_StrokeVertex ch66st2[] = +{ + {19.0476,52.381}, + {61.9047,52.381}, + {76.1905,47.619}, + {80.9524,42.8571}, + {85.7143,33.3333}, + {85.7143,19.0476}, + {80.9524,9.5238}, + {76.1905,4.7619}, + {61.9047,0}, + {19.0476,0} +}; + +static const SFG_StrokeStrip ch66st[] = +{ + {2,ch66st0}, + {9,ch66st1}, + {10,ch66st2} +}; + +static const SFG_StrokeChar ch66 = {104.762,3,ch66st}; + +/* char: 0x43 */ + +static const SFG_StrokeVertex ch67st0[] = +{ + {88.0952,76.1905}, + {83.3334,85.7143}, + {73.8096,95.2381}, + {64.2857,100}, + {45.2381,100}, + {35.7143,95.2381}, + {26.1905,85.7143}, + {21.4286,76.1905}, + {16.6667,61.9048}, + {16.6667,38.0952}, + {21.4286,23.8095}, + {26.1905,14.2857}, + {35.7143,4.7619}, + {45.2381,0}, + {64.2857,0}, + {73.8096,4.7619}, + {83.3334,14.2857}, + {88.0952,23.8095} +}; + +static const SFG_StrokeStrip ch67st[] = +{ + {18,ch67st0} +}; + +static const SFG_StrokeChar ch67 = {104.762,1,ch67st}; + +/* char: 0x44 */ + +static const SFG_StrokeVertex ch68st0[] = +{ + {19.0476,100}, + {19.0476,0} +}; + +static const SFG_StrokeVertex ch68st1[] = +{ + {19.0476,100}, + {52.3809,100}, + {66.6666,95.2381}, + {76.1905,85.7143}, + {80.9524,76.1905}, + {85.7143,61.9048}, + {85.7143,38.0952}, + {80.9524,23.8095}, + {76.1905,14.2857}, + {66.6666,4.7619}, + {52.3809,0}, + {19.0476,0} +}; + +static const SFG_StrokeStrip ch68st[] = +{ + {2,ch68st0}, + {12,ch68st1} +}; + +static const SFG_StrokeChar ch68 = {104.762,2,ch68st}; + +/* char: 0x45 */ + +static const SFG_StrokeVertex ch69st0[] = +{ + {21.4286,100}, + {21.4286,0} +}; + +static const SFG_StrokeVertex ch69st1[] = +{ + {21.4286,100}, + {83.3334,100} +}; + +static const SFG_StrokeVertex ch69st2[] = +{ + {21.4286,52.381}, + {59.5238,52.381} +}; + +static const SFG_StrokeVertex ch69st3[] = +{ + {21.4286,0}, + {83.3334,0} +}; + +static const SFG_StrokeStrip ch69st[] = +{ + {2,ch69st0}, + {2,ch69st1}, + {2,ch69st2}, + {2,ch69st3} +}; + +static const SFG_StrokeChar ch69 = {104.762,4,ch69st}; + +/* char: 0x46 */ + +static const SFG_StrokeVertex ch70st0[] = +{ + {21.4286,100}, + {21.4286,0} +}; + +static const SFG_StrokeVertex ch70st1[] = +{ + {21.4286,100}, + {83.3334,100} +}; + +static const SFG_StrokeVertex ch70st2[] = +{ + {21.4286,52.381}, + {59.5238,52.381} +}; + +static const SFG_StrokeStrip ch70st[] = +{ + {2,ch70st0}, + {2,ch70st1}, + {2,ch70st2} +}; + +static const SFG_StrokeChar ch70 = {104.762,3,ch70st}; + +/* char: 0x47 */ + +static const SFG_StrokeVertex ch71st0[] = +{ + {88.0952,76.1905}, + {83.3334,85.7143}, + {73.8096,95.2381}, + {64.2857,100}, + {45.2381,100}, + {35.7143,95.2381}, + {26.1905,85.7143}, + {21.4286,76.1905}, + {16.6667,61.9048}, + {16.6667,38.0952}, + {21.4286,23.8095}, + {26.1905,14.2857}, + {35.7143,4.7619}, + {45.2381,0}, + {64.2857,0}, + {73.8096,4.7619}, + {83.3334,14.2857}, + {88.0952,23.8095}, + {88.0952,38.0952} +}; + +static const SFG_StrokeVertex ch71st1[] = +{ + {64.2857,38.0952}, + {88.0952,38.0952} +}; + +static const SFG_StrokeStrip ch71st[] = +{ + {19,ch71st0}, + {2,ch71st1} +}; + +static const SFG_StrokeChar ch71 = {104.762,2,ch71st}; + +/* char: 0x48 */ + +static const SFG_StrokeVertex ch72st0[] = +{ + {19.0476,100}, + {19.0476,0} +}; + +static const SFG_StrokeVertex ch72st1[] = +{ + {85.7143,100}, + {85.7143,0} +}; + +static const SFG_StrokeVertex ch72st2[] = +{ + {19.0476,52.381}, + {85.7143,52.381} +}; + +static const SFG_StrokeStrip ch72st[] = +{ + {2,ch72st0}, + {2,ch72st1}, + {2,ch72st2} +}; + +static const SFG_StrokeChar ch72 = {104.762,3,ch72st}; + +/* char: 0x49 */ + +static const SFG_StrokeVertex ch73st0[] = +{ + {52.381,100}, + {52.381,0} +}; + +static const SFG_StrokeStrip ch73st[] = +{ + {2,ch73st0} +}; + +static const SFG_StrokeChar ch73 = {104.762,1,ch73st}; + +/* char: 0x4a */ + +static const SFG_StrokeVertex ch74st0[] = +{ + {76.1905,100}, + {76.1905,23.8095}, + {71.4286,9.5238}, + {66.6667,4.7619}, + {57.1429,0}, + {47.6191,0}, + {38.0953,4.7619}, + {33.3334,9.5238}, + {28.5715,23.8095}, + {28.5715,33.3333} +}; + +static const SFG_StrokeStrip ch74st[] = +{ + {10,ch74st0} +}; + +static const SFG_StrokeChar ch74 = {104.762,1,ch74st}; + +/* char: 0x4b */ + +static const SFG_StrokeVertex ch75st0[] = +{ + {19.0476,100}, + {19.0476,0} +}; + +static const SFG_StrokeVertex ch75st1[] = +{ + {85.7143,100}, + {19.0476,33.3333} +}; + +static const SFG_StrokeVertex ch75st2[] = +{ + {42.8571,57.1429}, + {85.7143,0} +}; + +static const SFG_StrokeStrip ch75st[] = +{ + {2,ch75st0}, + {2,ch75st1}, + {2,ch75st2} +}; + +static const SFG_StrokeChar ch75 = {104.762,3,ch75st}; + +/* char: 0x4c */ + +static const SFG_StrokeVertex ch76st0[] = +{ + {23.8095,100}, + {23.8095,0} +}; + +static const SFG_StrokeVertex ch76st1[] = +{ + {23.8095,0}, + {80.9524,0} +}; + +static const SFG_StrokeStrip ch76st[] = +{ + {2,ch76st0}, + {2,ch76st1} +}; + +static const SFG_StrokeChar ch76 = {104.762,2,ch76st}; + +/* char: 0x4d */ + +static const SFG_StrokeVertex ch77st0[] = +{ + {14.2857,100}, + {14.2857,0} +}; + +static const SFG_StrokeVertex ch77st1[] = +{ + {14.2857,100}, + {52.3809,0} +}; + +static const SFG_StrokeVertex ch77st2[] = +{ + {90.4762,100}, + {52.3809,0} +}; + +static const SFG_StrokeVertex ch77st3[] = +{ + {90.4762,100}, + {90.4762,0} +}; + +static const SFG_StrokeStrip ch77st[] = +{ + {2,ch77st0}, + {2,ch77st1}, + {2,ch77st2}, + {2,ch77st3} +}; + +static const SFG_StrokeChar ch77 = {104.762,4,ch77st}; + +/* char: 0x4e */ + +static const SFG_StrokeVertex ch78st0[] = +{ + {19.0476,100}, + {19.0476,0} +}; + +static const SFG_StrokeVertex ch78st1[] = +{ + {19.0476,100}, + {85.7143,0} +}; + +static const SFG_StrokeVertex ch78st2[] = +{ + {85.7143,100}, + {85.7143,0} +}; + +static const SFG_StrokeStrip ch78st[] = +{ + {2,ch78st0}, + {2,ch78st1}, + {2,ch78st2} +}; + +static const SFG_StrokeChar ch78 = {104.762,3,ch78st}; + +/* char: 0x4f */ + +static const SFG_StrokeVertex ch79st0[] = +{ + {42.8571,100}, + {33.3333,95.2381}, + {23.8095,85.7143}, + {19.0476,76.1905}, + {14.2857,61.9048}, + {14.2857,38.0952}, + {19.0476,23.8095}, + {23.8095,14.2857}, + {33.3333,4.7619}, + {42.8571,0}, + {61.9047,0}, + {71.4286,4.7619}, + {80.9524,14.2857}, + {85.7143,23.8095}, + {90.4762,38.0952}, + {90.4762,61.9048}, + {85.7143,76.1905}, + {80.9524,85.7143}, + {71.4286,95.2381}, + {61.9047,100}, + {42.8571,100} +}; + +static const SFG_StrokeStrip ch79st[] = +{ + {21,ch79st0} +}; + +static const SFG_StrokeChar ch79 = {104.762,1,ch79st}; + +/* char: 0x50 */ + +static const SFG_StrokeVertex ch80st0[] = +{ + {19.0476,100}, + {19.0476,0} +}; + +static const SFG_StrokeVertex ch80st1[] = +{ + {19.0476,100}, + {61.9047,100}, + {76.1905,95.2381}, + {80.9524,90.4762}, + {85.7143,80.9524}, + {85.7143,66.6667}, + {80.9524,57.1429}, + {76.1905,52.381}, + {61.9047,47.619}, + {19.0476,47.619} +}; + +static const SFG_StrokeStrip ch80st[] = +{ + {2,ch80st0}, + {10,ch80st1} +}; + +static const SFG_StrokeChar ch80 = {104.762,2,ch80st}; + +/* char: 0x51 */ + +static const SFG_StrokeVertex ch81st0[] = +{ + {42.8571,100}, + {33.3333,95.2381}, + {23.8095,85.7143}, + {19.0476,76.1905}, + {14.2857,61.9048}, + {14.2857,38.0952}, + {19.0476,23.8095}, + {23.8095,14.2857}, + {33.3333,4.7619}, + {42.8571,0}, + {61.9047,0}, + {71.4286,4.7619}, + {80.9524,14.2857}, + {85.7143,23.8095}, + {90.4762,38.0952}, + {90.4762,61.9048}, + {85.7143,76.1905}, + {80.9524,85.7143}, + {71.4286,95.2381}, + {61.9047,100}, + {42.8571,100} +}; + +static const SFG_StrokeVertex ch81st1[] = +{ + {57.1428,19.0476}, + {85.7143,-9.5238} +}; + +static const SFG_StrokeStrip ch81st[] = +{ + {21,ch81st0}, + {2,ch81st1} +}; + +static const SFG_StrokeChar ch81 = {104.762,2,ch81st}; + +/* char: 0x52 */ + +static const SFG_StrokeVertex ch82st0[] = +{ + {19.0476,100}, + {19.0476,0} +}; + +static const SFG_StrokeVertex ch82st1[] = +{ + {19.0476,100}, + {61.9047,100}, + {76.1905,95.2381}, + {80.9524,90.4762}, + {85.7143,80.9524}, + {85.7143,71.4286}, + {80.9524,61.9048}, + {76.1905,57.1429}, + {61.9047,52.381}, + {19.0476,52.381} +}; + +static const SFG_StrokeVertex ch82st2[] = +{ + {52.3809,52.381}, + {85.7143,0} +}; + +static const SFG_StrokeStrip ch82st[] = +{ + {2,ch82st0}, + {10,ch82st1}, + {2,ch82st2} +}; + +static const SFG_StrokeChar ch82 = {104.762,3,ch82st}; + +/* char: 0x53 */ + +static const SFG_StrokeVertex ch83st0[] = +{ + {85.7143,85.7143}, + {76.1905,95.2381}, + {61.9047,100}, + {42.8571,100}, + {28.5714,95.2381}, + {19.0476,85.7143}, + {19.0476,76.1905}, + {23.8095,66.6667}, + {28.5714,61.9048}, + {38.0952,57.1429}, + {66.6666,47.619}, + {76.1905,42.8571}, + {80.9524,38.0952}, + {85.7143,28.5714}, + {85.7143,14.2857}, + {76.1905,4.7619}, + {61.9047,0}, + {42.8571,0}, + {28.5714,4.7619}, + {19.0476,14.2857} +}; + +static const SFG_StrokeStrip ch83st[] = +{ + {20,ch83st0} +}; + +static const SFG_StrokeChar ch83 = {104.762,1,ch83st}; + +/* char: 0x54 */ + +static const SFG_StrokeVertex ch84st0[] = +{ + {52.3809,100}, + {52.3809,0} +}; + +static const SFG_StrokeVertex ch84st1[] = +{ + {19.0476,100}, + {85.7143,100} +}; + +static const SFG_StrokeStrip ch84st[] = +{ + {2,ch84st0}, + {2,ch84st1} +}; + +static const SFG_StrokeChar ch84 = {104.762,2,ch84st}; + +/* char: 0x55 */ + +static const SFG_StrokeVertex ch85st0[] = +{ + {19.0476,100}, + {19.0476,28.5714}, + {23.8095,14.2857}, + {33.3333,4.7619}, + {47.619,0}, + {57.1428,0}, + {71.4286,4.7619}, + {80.9524,14.2857}, + {85.7143,28.5714}, + {85.7143,100} +}; + +static const SFG_StrokeStrip ch85st[] = +{ + {10,ch85st0} +}; + +static const SFG_StrokeChar ch85 = {104.762,1,ch85st}; + +/* char: 0x56 */ + +static const SFG_StrokeVertex ch86st0[] = +{ + {14.2857,100}, + {52.3809,0} +}; + +static const SFG_StrokeVertex ch86st1[] = +{ + {90.4762,100}, + {52.3809,0} +}; + +static const SFG_StrokeStrip ch86st[] = +{ + {2,ch86st0}, + {2,ch86st1} +}; + +static const SFG_StrokeChar ch86 = {104.762,2,ch86st}; + +/* char: 0x57 */ + +static const SFG_StrokeVertex ch87st0[] = +{ + {4.7619,100}, + {28.5714,0} +}; + +static const SFG_StrokeVertex ch87st1[] = +{ + {52.3809,100}, + {28.5714,0} +}; + +static const SFG_StrokeVertex ch87st2[] = +{ + {52.3809,100}, + {76.1905,0} +}; + +static const SFG_StrokeVertex ch87st3[] = +{ + {100,100}, + {76.1905,0} +}; + +static const SFG_StrokeStrip ch87st[] = +{ + {2,ch87st0}, + {2,ch87st1}, + {2,ch87st2}, + {2,ch87st3} +}; + +static const SFG_StrokeChar ch87 = {104.762,4,ch87st}; + +/* char: 0x58 */ + +static const SFG_StrokeVertex ch88st0[] = +{ + {19.0476,100}, + {85.7143,0} +}; + +static const SFG_StrokeVertex ch88st1[] = +{ + {85.7143,100}, + {19.0476,0} +}; + +static const SFG_StrokeStrip ch88st[] = +{ + {2,ch88st0}, + {2,ch88st1} +}; + +static const SFG_StrokeChar ch88 = {104.762,2,ch88st}; + +/* char: 0x59 */ + +static const SFG_StrokeVertex ch89st0[] = +{ + {14.2857,100}, + {52.3809,52.381}, + {52.3809,0} +}; + +static const SFG_StrokeVertex ch89st1[] = +{ + {90.4762,100}, + {52.3809,52.381} +}; + +static const SFG_StrokeStrip ch89st[] = +{ + {3,ch89st0}, + {2,ch89st1} +}; + +static const SFG_StrokeChar ch89 = {104.762,2,ch89st}; + +/* char: 0x5a */ + +static const SFG_StrokeVertex ch90st0[] = +{ + {85.7143,100}, + {19.0476,0} +}; + +static const SFG_StrokeVertex ch90st1[] = +{ + {19.0476,100}, + {85.7143,100} +}; + +static const SFG_StrokeVertex ch90st2[] = +{ + {19.0476,0}, + {85.7143,0} +}; + +static const SFG_StrokeStrip ch90st[] = +{ + {2,ch90st0}, + {2,ch90st1}, + {2,ch90st2} +}; + +static const SFG_StrokeChar ch90 = {104.762,3,ch90st}; + +/* char: 0x5b */ + +static const SFG_StrokeVertex ch91st0[] = +{ + {35.7143,119.048}, + {35.7143,-33.3333} +}; + +static const SFG_StrokeVertex ch91st1[] = +{ + {40.4762,119.048}, + {40.4762,-33.3333} +}; + +static const SFG_StrokeVertex ch91st2[] = +{ + {35.7143,119.048}, + {69.0476,119.048} +}; + +static const SFG_StrokeVertex ch91st3[] = +{ + {35.7143,-33.3333}, + {69.0476,-33.3333} +}; + +static const SFG_StrokeStrip ch91st[] = +{ + {2,ch91st0}, + {2,ch91st1}, + {2,ch91st2}, + {2,ch91st3} +}; + +static const SFG_StrokeChar ch91 = {104.762,4,ch91st}; + +/* char: 0x5c */ + +static const SFG_StrokeVertex ch92st0[] = +{ + {19.0476,100}, + {85.7143,-14.2857} +}; + +static const SFG_StrokeStrip ch92st[] = +{ + {2,ch92st0} +}; + +static const SFG_StrokeChar ch92 = {104.762,1,ch92st}; + +/* char: 0x5d */ + +static const SFG_StrokeVertex ch93st0[] = +{ + {64.2857,119.048}, + {64.2857,-33.3333} +}; + +static const SFG_StrokeVertex ch93st1[] = +{ + {69.0476,119.048}, + {69.0476,-33.3333} +}; + +static const SFG_StrokeVertex ch93st2[] = +{ + {35.7143,119.048}, + {69.0476,119.048} +}; + +static const SFG_StrokeVertex ch93st3[] = +{ + {35.7143,-33.3333}, + {69.0476,-33.3333} +}; + +static const SFG_StrokeStrip ch93st[] = +{ + {2,ch93st0}, + {2,ch93st1}, + {2,ch93st2}, + {2,ch93st3} +}; + +static const SFG_StrokeChar ch93 = {104.762,4,ch93st}; + +/* char: 0x5e */ + +static const SFG_StrokeVertex ch94st0[] = +{ + {52.3809,109.524}, + {14.2857,42.8571} +}; + +static const SFG_StrokeVertex ch94st1[] = +{ + {52.3809,109.524}, + {90.4762,42.8571} +}; + +static const SFG_StrokeStrip ch94st[] = +{ + {2,ch94st0}, + {2,ch94st1} +}; + +static const SFG_StrokeChar ch94 = {104.762,2,ch94st}; + +/* char: 0x5f */ + +static const SFG_StrokeVertex ch95st0[] = +{ + {0,-33.3333}, + {104.762,-33.3333}, + {104.762,-28.5714}, + {0,-28.5714}, + {0,-33.3333} +}; + +static const SFG_StrokeStrip ch95st[] = +{ + {5,ch95st0} +}; + +static const SFG_StrokeChar ch95 = {104.762,1,ch95st}; + +/* char: 0x60 */ + +static const SFG_StrokeVertex ch96st0[] = +{ + {42.8572,100}, + {66.6667,71.4286} +}; + +static const SFG_StrokeVertex ch96st1[] = +{ + {42.8572,100}, + {38.0953,95.2381}, + {66.6667,71.4286} +}; + +static const SFG_StrokeStrip ch96st[] = +{ + {2,ch96st0}, + {3,ch96st1} +}; + +static const SFG_StrokeChar ch96 = {104.762,2,ch96st}; + +/* char: 0x61 */ + +static const SFG_StrokeVertex ch97st0[] = +{ + {80.9524,66.6667}, + {80.9524,0} +}; + +static const SFG_StrokeVertex ch97st1[] = +{ + {80.9524,52.381}, + {71.4285,61.9048}, + {61.9047,66.6667}, + {47.619,66.6667}, + {38.0952,61.9048}, + {28.5714,52.381}, + {23.8095,38.0952}, + {23.8095,28.5714}, + {28.5714,14.2857}, + {38.0952,4.7619}, + {47.619,0}, + {61.9047,0}, + {71.4285,4.7619}, + {80.9524,14.2857} +}; + +static const SFG_StrokeStrip ch97st[] = +{ + {2,ch97st0}, + {14,ch97st1} +}; + +static const SFG_StrokeChar ch97 = {104.762,2,ch97st}; + +/* char: 0x62 */ + +static const SFG_StrokeVertex ch98st0[] = +{ + {23.8095,100}, + {23.8095,0} +}; + +static const SFG_StrokeVertex ch98st1[] = +{ + {23.8095,52.381}, + {33.3333,61.9048}, + {42.8571,66.6667}, + {57.1428,66.6667}, + {66.6666,61.9048}, + {76.1905,52.381}, + {80.9524,38.0952}, + {80.9524,28.5714}, + {76.1905,14.2857}, + {66.6666,4.7619}, + {57.1428,0}, + {42.8571,0}, + {33.3333,4.7619}, + {23.8095,14.2857} +}; + +static const SFG_StrokeStrip ch98st[] = +{ + {2,ch98st0}, + {14,ch98st1} +}; + +static const SFG_StrokeChar ch98 = {104.762,2,ch98st}; + +/* char: 0x63 */ + +static const SFG_StrokeVertex ch99st0[] = +{ + {80.9524,52.381}, + {71.4285,61.9048}, + {61.9047,66.6667}, + {47.619,66.6667}, + {38.0952,61.9048}, + {28.5714,52.381}, + {23.8095,38.0952}, + {23.8095,28.5714}, + {28.5714,14.2857}, + {38.0952,4.7619}, + {47.619,0}, + {61.9047,0}, + {71.4285,4.7619}, + {80.9524,14.2857} +}; + +static const SFG_StrokeStrip ch99st[] = +{ + {14,ch99st0} +}; + +static const SFG_StrokeChar ch99 = {104.762,1,ch99st}; + +/* char: 0x64 */ + +static const SFG_StrokeVertex ch100st0[] = +{ + {80.9524,100}, + {80.9524,0} +}; + +static const SFG_StrokeVertex ch100st1[] = +{ + {80.9524,52.381}, + {71.4285,61.9048}, + {61.9047,66.6667}, + {47.619,66.6667}, + {38.0952,61.9048}, + {28.5714,52.381}, + {23.8095,38.0952}, + {23.8095,28.5714}, + {28.5714,14.2857}, + {38.0952,4.7619}, + {47.619,0}, + {61.9047,0}, + {71.4285,4.7619}, + {80.9524,14.2857} +}; + +static const SFG_StrokeStrip ch100st[] = +{ + {2,ch100st0}, + {14,ch100st1} +}; + +static const SFG_StrokeChar ch100 = {104.762,2,ch100st}; + +/* char: 0x65 */ + +static const SFG_StrokeVertex ch101st0[] = +{ + {23.8095,38.0952}, + {80.9524,38.0952}, + {80.9524,47.619}, + {76.1905,57.1429}, + {71.4285,61.9048}, + {61.9047,66.6667}, + {47.619,66.6667}, + {38.0952,61.9048}, + {28.5714,52.381}, + {23.8095,38.0952}, + {23.8095,28.5714}, + {28.5714,14.2857}, + {38.0952,4.7619}, + {47.619,0}, + {61.9047,0}, + {71.4285,4.7619}, + {80.9524,14.2857} +}; + +static const SFG_StrokeStrip ch101st[] = +{ + {17,ch101st0} +}; + +static const SFG_StrokeChar ch101 = {104.762,1,ch101st}; + +/* char: 0x66 */ + +static const SFG_StrokeVertex ch102st0[] = +{ + {71.4286,100}, + {61.9048,100}, + {52.381,95.2381}, + {47.6191,80.9524}, + {47.6191,0} +}; + +static const SFG_StrokeVertex ch102st1[] = +{ + {33.3334,66.6667}, + {66.6667,66.6667} +}; + +static const SFG_StrokeStrip ch102st[] = +{ + {5,ch102st0}, + {2,ch102st1} +}; + +static const SFG_StrokeChar ch102 = {104.762,2,ch102st}; + +/* char: 0x67 */ + +static const SFG_StrokeVertex ch103st0[] = +{ + {80.9524,66.6667}, + {80.9524,-9.5238}, + {76.1905,-23.8095}, + {71.4285,-28.5714}, + {61.9047,-33.3333}, + {47.619,-33.3333}, + {38.0952,-28.5714} +}; + +static const SFG_StrokeVertex ch103st1[] = +{ + {80.9524,52.381}, + {71.4285,61.9048}, + {61.9047,66.6667}, + {47.619,66.6667}, + {38.0952,61.9048}, + {28.5714,52.381}, + {23.8095,38.0952}, + {23.8095,28.5714}, + {28.5714,14.2857}, + {38.0952,4.7619}, + {47.619,0}, + {61.9047,0}, + {71.4285,4.7619}, + {80.9524,14.2857} +}; + +static const SFG_StrokeStrip ch103st[] = +{ + {7,ch103st0}, + {14,ch103st1} +}; + +static const SFG_StrokeChar ch103 = {104.762,2,ch103st}; + +/* char: 0x68 */ + +static const SFG_StrokeVertex ch104st0[] = +{ + {26.1905,100}, + {26.1905,0} +}; + +static const SFG_StrokeVertex ch104st1[] = +{ + {26.1905,47.619}, + {40.4762,61.9048}, + {50,66.6667}, + {64.2857,66.6667}, + {73.8095,61.9048}, + {78.5715,47.619}, + {78.5715,0} +}; + +static const SFG_StrokeStrip ch104st[] = +{ + {2,ch104st0}, + {7,ch104st1} +}; + +static const SFG_StrokeChar ch104 = {104.762,2,ch104st}; + +/* char: 0x69 */ + +static const SFG_StrokeVertex ch105st0[] = +{ + {47.6191,100}, + {52.381,95.2381}, + {57.1429,100}, + {52.381,104.762}, + {47.6191,100} +}; + +static const SFG_StrokeVertex ch105st1[] = +{ + {52.381,66.6667}, + {52.381,0} +}; + +static const SFG_StrokeStrip ch105st[] = +{ + {5,ch105st0}, + {2,ch105st1} +}; + +static const SFG_StrokeChar ch105 = {104.762,2,ch105st}; + +/* char: 0x6a */ + +static const SFG_StrokeVertex ch106st0[] = +{ + {57.1429,100}, + {61.9048,95.2381}, + {66.6667,100}, + {61.9048,104.762}, + {57.1429,100} +}; + +static const SFG_StrokeVertex ch106st1[] = +{ + {61.9048,66.6667}, + {61.9048,-14.2857}, + {57.1429,-28.5714}, + {47.6191,-33.3333}, + {38.0953,-33.3333} +}; + +static const SFG_StrokeStrip ch106st[] = +{ + {5,ch106st0}, + {5,ch106st1} +}; + +static const SFG_StrokeChar ch106 = {104.762,2,ch106st}; + +/* char: 0x6b */ + +static const SFG_StrokeVertex ch107st0[] = +{ + {26.1905,100}, + {26.1905,0} +}; + +static const SFG_StrokeVertex ch107st1[] = +{ + {73.8095,66.6667}, + {26.1905,19.0476} +}; + +static const SFG_StrokeVertex ch107st2[] = +{ + {45.2381,38.0952}, + {78.5715,0} +}; + +static const SFG_StrokeStrip ch107st[] = +{ + {2,ch107st0}, + {2,ch107st1}, + {2,ch107st2} +}; + +static const SFG_StrokeChar ch107 = {104.762,3,ch107st}; + +/* char: 0x6c */ + +static const SFG_StrokeVertex ch108st0[] = +{ + {52.381,100}, + {52.381,0} +}; + +static const SFG_StrokeStrip ch108st[] = +{ + {2,ch108st0} +}; + +static const SFG_StrokeChar ch108 = {104.762,1,ch108st}; + +/* char: 0x6d */ + +static const SFG_StrokeVertex ch109st0[] = +{ + {0,66.6667}, + {0,0} +}; + +static const SFG_StrokeVertex ch109st1[] = +{ + {0,47.619}, + {14.2857,61.9048}, + {23.8095,66.6667}, + {38.0952,66.6667}, + {47.619,61.9048}, + {52.381,47.619}, + {52.381,0} +}; + +static const SFG_StrokeVertex ch109st2[] = +{ + {52.381,47.619}, + {66.6667,61.9048}, + {76.1905,66.6667}, + {90.4762,66.6667}, + {100,61.9048}, + {104.762,47.619}, + {104.762,0} +}; + +static const SFG_StrokeStrip ch109st[] = +{ + {2,ch109st0}, + {7,ch109st1}, + {7,ch109st2} +}; + +static const SFG_StrokeChar ch109 = {104.762,3,ch109st}; + +/* char: 0x6e */ + +static const SFG_StrokeVertex ch110st0[] = +{ + {26.1905,66.6667}, + {26.1905,0} +}; + +static const SFG_StrokeVertex ch110st1[] = +{ + {26.1905,47.619}, + {40.4762,61.9048}, + {50,66.6667}, + {64.2857,66.6667}, + {73.8095,61.9048}, + {78.5715,47.619}, + {78.5715,0} +}; + +static const SFG_StrokeStrip ch110st[] = +{ + {2,ch110st0}, + {7,ch110st1} +}; + +static const SFG_StrokeChar ch110 = {104.762,2,ch110st}; + +/* char: 0x6f */ + +static const SFG_StrokeVertex ch111st0[] = +{ + {45.2381,66.6667}, + {35.7143,61.9048}, + {26.1905,52.381}, + {21.4286,38.0952}, + {21.4286,28.5714}, + {26.1905,14.2857}, + {35.7143,4.7619}, + {45.2381,0}, + {59.5238,0}, + {69.0476,4.7619}, + {78.5714,14.2857}, + {83.3334,28.5714}, + {83.3334,38.0952}, + {78.5714,52.381}, + {69.0476,61.9048}, + {59.5238,66.6667}, + {45.2381,66.6667} +}; + +static const SFG_StrokeStrip ch111st[] = +{ + {17,ch111st0} +}; + +static const SFG_StrokeChar ch111 = {104.762,1,ch111st}; + +/* char: 0x70 */ + +static const SFG_StrokeVertex ch112st0[] = +{ + {23.8095,66.6667}, + {23.8095,-33.3333} +}; + +static const SFG_StrokeVertex ch112st1[] = +{ + {23.8095,52.381}, + {33.3333,61.9048}, + {42.8571,66.6667}, + {57.1428,66.6667}, + {66.6666,61.9048}, + {76.1905,52.381}, + {80.9524,38.0952}, + {80.9524,28.5714}, + {76.1905,14.2857}, + {66.6666,4.7619}, + {57.1428,0}, + {42.8571,0}, + {33.3333,4.7619}, + {23.8095,14.2857} +}; + +static const SFG_StrokeStrip ch112st[] = +{ + {2,ch112st0}, + {14,ch112st1} +}; + +static const SFG_StrokeChar ch112 = {104.762,2,ch112st}; + +/* char: 0x71 */ + +static const SFG_StrokeVertex ch113st0[] = +{ + {80.9524,66.6667}, + {80.9524,-33.3333} +}; + +static const SFG_StrokeVertex ch113st1[] = +{ + {80.9524,52.381}, + {71.4285,61.9048}, + {61.9047,66.6667}, + {47.619,66.6667}, + {38.0952,61.9048}, + {28.5714,52.381}, + {23.8095,38.0952}, + {23.8095,28.5714}, + {28.5714,14.2857}, + {38.0952,4.7619}, + {47.619,0}, + {61.9047,0}, + {71.4285,4.7619}, + {80.9524,14.2857} +}; + +static const SFG_StrokeStrip ch113st[] = +{ + {2,ch113st0}, + {14,ch113st1} +}; + +static const SFG_StrokeChar ch113 = {104.762,2,ch113st}; + +/* char: 0x72 */ + +static const SFG_StrokeVertex ch114st0[] = +{ + {33.3334,66.6667}, + {33.3334,0} +}; + +static const SFG_StrokeVertex ch114st1[] = +{ + {33.3334,38.0952}, + {38.0953,52.381}, + {47.6191,61.9048}, + {57.1429,66.6667}, + {71.4286,66.6667} +}; + +static const SFG_StrokeStrip ch114st[] = +{ + {2,ch114st0}, + {5,ch114st1} +}; + +static const SFG_StrokeChar ch114 = {104.762,2,ch114st}; + +/* char: 0x73 */ + +static const SFG_StrokeVertex ch115st0[] = +{ + {78.5715,52.381}, + {73.8095,61.9048}, + {59.5238,66.6667}, + {45.2381,66.6667}, + {30.9524,61.9048}, + {26.1905,52.381}, + {30.9524,42.8571}, + {40.4762,38.0952}, + {64.2857,33.3333}, + {73.8095,28.5714}, + {78.5715,19.0476}, + {78.5715,14.2857}, + {73.8095,4.7619}, + {59.5238,0}, + {45.2381,0}, + {30.9524,4.7619}, + {26.1905,14.2857} +}; + +static const SFG_StrokeStrip ch115st[] = +{ + {17,ch115st0} +}; + +static const SFG_StrokeChar ch115 = {104.762,1,ch115st}; + +/* char: 0x74 */ + +static const SFG_StrokeVertex ch116st0[] = +{ + {47.6191,100}, + {47.6191,19.0476}, + {52.381,4.7619}, + {61.9048,0}, + {71.4286,0} +}; + +static const SFG_StrokeVertex ch116st1[] = +{ + {33.3334,66.6667}, + {66.6667,66.6667} +}; + +static const SFG_StrokeStrip ch116st[] = +{ + {5,ch116st0}, + {2,ch116st1} +}; + +static const SFG_StrokeChar ch116 = {104.762,2,ch116st}; + +/* char: 0x75 */ + +static const SFG_StrokeVertex ch117st0[] = +{ + {26.1905,66.6667}, + {26.1905,19.0476}, + {30.9524,4.7619}, + {40.4762,0}, + {54.7619,0}, + {64.2857,4.7619}, + {78.5715,19.0476} +}; + +static const SFG_StrokeVertex ch117st1[] = +{ + {78.5715,66.6667}, + {78.5715,0} +}; + +static const SFG_StrokeStrip ch117st[] = +{ + {7,ch117st0}, + {2,ch117st1} +}; + +static const SFG_StrokeChar ch117 = {104.762,2,ch117st}; + +/* char: 0x76 */ + +static const SFG_StrokeVertex ch118st0[] = +{ + {23.8095,66.6667}, + {52.3809,0} +}; + +static const SFG_StrokeVertex ch118st1[] = +{ + {80.9524,66.6667}, + {52.3809,0} +}; + +static const SFG_StrokeStrip ch118st[] = +{ + {2,ch118st0}, + {2,ch118st1} +}; + +static const SFG_StrokeChar ch118 = {104.762,2,ch118st}; + +/* char: 0x77 */ + +static const SFG_StrokeVertex ch119st0[] = +{ + {14.2857,66.6667}, + {33.3333,0} +}; + +static const SFG_StrokeVertex ch119st1[] = +{ + {52.3809,66.6667}, + {33.3333,0} +}; + +static const SFG_StrokeVertex ch119st2[] = +{ + {52.3809,66.6667}, + {71.4286,0} +}; + +static const SFG_StrokeVertex ch119st3[] = +{ + {90.4762,66.6667}, + {71.4286,0} +}; + +static const SFG_StrokeStrip ch119st[] = +{ + {2,ch119st0}, + {2,ch119st1}, + {2,ch119st2}, + {2,ch119st3} +}; + +static const SFG_StrokeChar ch119 = {104.762,4,ch119st}; + +/* char: 0x78 */ + +static const SFG_StrokeVertex ch120st0[] = +{ + {26.1905,66.6667}, + {78.5715,0} +}; + +static const SFG_StrokeVertex ch120st1[] = +{ + {78.5715,66.6667}, + {26.1905,0} +}; + +static const SFG_StrokeStrip ch120st[] = +{ + {2,ch120st0}, + {2,ch120st1} +}; + +static const SFG_StrokeChar ch120 = {104.762,2,ch120st}; + +/* char: 0x79 */ + +static const SFG_StrokeVertex ch121st0[] = +{ + {26.1905,66.6667}, + {54.7619,0} +}; + +static const SFG_StrokeVertex ch121st1[] = +{ + {83.3334,66.6667}, + {54.7619,0}, + {45.2381,-19.0476}, + {35.7143,-28.5714}, + {26.1905,-33.3333}, + {21.4286,-33.3333} +}; + +static const SFG_StrokeStrip ch121st[] = +{ + {2,ch121st0}, + {6,ch121st1} +}; + +static const SFG_StrokeChar ch121 = {104.762,2,ch121st}; + +/* char: 0x7a */ + +static const SFG_StrokeVertex ch122st0[] = +{ + {78.5715,66.6667}, + {26.1905,0} +}; + +static const SFG_StrokeVertex ch122st1[] = +{ + {26.1905,66.6667}, + {78.5715,66.6667} +}; + +static const SFG_StrokeVertex ch122st2[] = +{ + {26.1905,0}, + {78.5715,0} +}; + +static const SFG_StrokeStrip ch122st[] = +{ + {2,ch122st0}, + {2,ch122st1}, + {2,ch122st2} +}; + +static const SFG_StrokeChar ch122 = {104.762,3,ch122st}; + +/* char: 0x7b */ + +static const SFG_StrokeVertex ch123st0[] = +{ + {64.2857,119.048}, + {54.7619,114.286}, + {50,109.524}, + {45.2381,100}, + {45.2381,90.4762}, + {50,80.9524}, + {54.7619,76.1905}, + {59.5238,66.6667}, + {59.5238,57.1429}, + {50,47.619} +}; + +static const SFG_StrokeVertex ch123st1[] = +{ + {54.7619,114.286}, + {50,104.762}, + {50,95.2381}, + {54.7619,85.7143}, + {59.5238,80.9524}, + {64.2857,71.4286}, + {64.2857,61.9048}, + {59.5238,52.381}, + {40.4762,42.8571}, + {59.5238,33.3333}, + {64.2857,23.8095}, + {64.2857,14.2857}, + {59.5238,4.7619}, + {54.7619,0}, + {50,-9.5238}, + {50,-19.0476}, + {54.7619,-28.5714} +}; + +static const SFG_StrokeVertex ch123st2[] = +{ + {50,38.0952}, + {59.5238,28.5714}, + {59.5238,19.0476}, + {54.7619,9.5238}, + {50,4.7619}, + {45.2381,-4.7619}, + {45.2381,-14.2857}, + {50,-23.8095}, + {54.7619,-28.5714}, + {64.2857,-33.3333} +}; + +static const SFG_StrokeStrip ch123st[] = +{ + {10,ch123st0}, + {17,ch123st1}, + {10,ch123st2} +}; + +static const SFG_StrokeChar ch123 = {104.762,3,ch123st}; + +/* char: 0x7c */ + +static const SFG_StrokeVertex ch124st0[] = +{ + {52.381,119.048}, + {52.381,-33.3333} +}; + +static const SFG_StrokeStrip ch124st[] = +{ + {2,ch124st0} +}; + +static const SFG_StrokeChar ch124 = {104.762,1,ch124st}; + +/* char: 0x7d */ + +static const SFG_StrokeVertex ch125st0[] = +{ + {40.4762,119.048}, + {50,114.286}, + {54.7619,109.524}, + {59.5238,100}, + {59.5238,90.4762}, + {54.7619,80.9524}, + {50,76.1905}, + {45.2381,66.6667}, + {45.2381,57.1429}, + {54.7619,47.619} +}; + +static const SFG_StrokeVertex ch125st1[] = +{ + {50,114.286}, + {54.7619,104.762}, + {54.7619,95.2381}, + {50,85.7143}, + {45.2381,80.9524}, + {40.4762,71.4286}, + {40.4762,61.9048}, + {45.2381,52.381}, + {64.2857,42.8571}, + {45.2381,33.3333}, + {40.4762,23.8095}, + {40.4762,14.2857}, + {45.2381,4.7619}, + {50,0}, + {54.7619,-9.5238}, + {54.7619,-19.0476}, + {50,-28.5714} +}; + +static const SFG_StrokeVertex ch125st2[] = +{ + {54.7619,38.0952}, + {45.2381,28.5714}, + {45.2381,19.0476}, + {50,9.5238}, + {54.7619,4.7619}, + {59.5238,-4.7619}, + {59.5238,-14.2857}, + {54.7619,-23.8095}, + {50,-28.5714}, + {40.4762,-33.3333} +}; + +static const SFG_StrokeStrip ch125st[] = +{ + {10,ch125st0}, + {17,ch125st1}, + {10,ch125st2} +}; + +static const SFG_StrokeChar ch125 = {104.762,3,ch125st}; + +/* char: 0x7e */ + +static const SFG_StrokeVertex ch126st0[] = +{ + {9.5238,28.5714}, + {9.5238,38.0952}, + {14.2857,52.381}, + {23.8095,57.1429}, + {33.3333,57.1429}, + {42.8571,52.381}, + {61.9048,38.0952}, + {71.4286,33.3333}, + {80.9524,33.3333}, + {90.4762,38.0952}, + {95.2381,47.619} +}; + +static const SFG_StrokeVertex ch126st1[] = +{ + {9.5238,38.0952}, + {14.2857,47.619}, + {23.8095,52.381}, + {33.3333,52.381}, + {42.8571,47.619}, + {61.9048,33.3333}, + {71.4286,28.5714}, + {80.9524,28.5714}, + {90.4762,33.3333}, + {95.2381,47.619}, + {95.2381,57.1429} +}; + +static const SFG_StrokeStrip ch126st[] = +{ + {11,ch126st0}, + {11,ch126st1} +}; + +static const SFG_StrokeChar ch126 = {104.762,2,ch126st}; + +/* char: 0x7f */ + +static const SFG_StrokeVertex ch127st0[] = +{ + {71.4286,100}, + {33.3333,-33.3333} +}; + +static const SFG_StrokeVertex ch127st1[] = +{ + {47.619,66.6667}, + {33.3333,61.9048}, + {23.8095,52.381}, + {19.0476,38.0952}, + {19.0476,23.8095}, + {23.8095,14.2857}, + {33.3333,4.7619}, + {47.619,0}, + {57.1428,0}, + {71.4286,4.7619}, + {80.9524,14.2857}, + {85.7143,28.5714}, + {85.7143,42.8571}, + {80.9524,52.381}, + {71.4286,61.9048}, + {57.1428,66.6667}, + {47.619,66.6667} +}; + +static const SFG_StrokeStrip ch127st[] = +{ + {2,ch127st0}, + {17,ch127st1} +}; + +static const SFG_StrokeChar ch127 = {104.762,2,ch127st}; + +static const SFG_StrokeChar *chars[] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + &ch32, &ch33, &ch34, &ch35, &ch36, &ch37, &ch38, &ch39, + &ch40, &ch41, &ch42, &ch43, &ch44, &ch45, &ch46, &ch47, + &ch48, &ch49, &ch50, &ch51, &ch52, &ch53, &ch54, &ch55, + &ch56, &ch57, &ch58, &ch59, &ch60, &ch61, &ch62, &ch63, + &ch64, &ch65, &ch66, &ch67, &ch68, &ch69, &ch70, &ch71, + &ch72, &ch73, &ch74, &ch75, &ch76, &ch77, &ch78, &ch79, + &ch80, &ch81, &ch82, &ch83, &ch84, &ch85, &ch86, &ch87, + &ch88, &ch89, &ch90, &ch91, &ch92, &ch93, &ch94, &ch95, + &ch96, &ch97, &ch98, &ch99, &ch100, &ch101, &ch102, &ch103, + &ch104, &ch105, &ch106, &ch107, &ch108, &ch109, &ch110, &ch111, + &ch112, &ch113, &ch114, &ch115, &ch116, &ch117, &ch118, &ch119, + &ch120, &ch121, &ch122, &ch123, &ch124, &ch125, &ch126, &ch127 +}; + +const SFG_StrokeFont fgStrokeMonoRoman = {"MonoRoman",128,152.381,chars}; diff --git a/freeglut/freeglut/freeglut-1.3/freeglut_stroke_roman.c b/freeglut/freeglut/freeglut-1.3/freeglut_stroke_roman.c new file mode 100644 index 0000000..432f63c --- /dev/null +++ b/freeglut/freeglut/freeglut-1.3/freeglut_stroke_roman.c @@ -0,0 +1,2820 @@ + +/* This file has been automatically generated by the genstroke utility. */ + +#include "../include/GL/freeglut_internal.h" + +/* char: 0x20 */ + +static const SFG_StrokeStrip ch32st[] = +{ +}; + +static const SFG_StrokeChar ch32 = {104.762,0,ch32st}; + +/* char: 0x21 */ + +static const SFG_StrokeVertex ch33st0[] = +{ + {13.3819,100}, + {13.3819,33.3333} +}; + +static const SFG_StrokeVertex ch33st1[] = +{ + {13.3819,9.5238}, + {8.62,4.7619}, + {13.3819,0}, + {18.1438,4.7619}, + {13.3819,9.5238} +}; + +static const SFG_StrokeStrip ch33st[] = +{ + {2,ch33st0}, + {5,ch33st1} +}; + +static const SFG_StrokeChar ch33 = {26.6238,2,ch33st}; + +/* char: 0x22 */ + +static const SFG_StrokeVertex ch34st0[] = +{ + {4.02,100}, + {4.02,66.6667} +}; + +static const SFG_StrokeVertex ch34st1[] = +{ + {42.1152,100}, + {42.1152,66.6667} +}; + +static const SFG_StrokeStrip ch34st[] = +{ + {2,ch34st0}, + {2,ch34st1} +}; + +static const SFG_StrokeChar ch34 = {51.4352,2,ch34st}; + +/* char: 0x23 */ + +static const SFG_StrokeVertex ch35st0[] = +{ + {41.2952,119.048}, + {7.9619,-33.3333} +}; + +static const SFG_StrokeVertex ch35st1[] = +{ + {69.8667,119.048}, + {36.5333,-33.3333} +}; + +static const SFG_StrokeVertex ch35st2[] = +{ + {7.9619,57.1429}, + {74.6286,57.1429} +}; + +static const SFG_StrokeVertex ch35st3[] = +{ + {3.2,28.5714}, + {69.8667,28.5714} +}; + +static const SFG_StrokeStrip ch35st[] = +{ + {2,ch35st0}, + {2,ch35st1}, + {2,ch35st2}, + {2,ch35st3} +}; + +static const SFG_StrokeChar ch35 = {79.4886,4,ch35st}; + +/* char: 0x24 */ + +static const SFG_StrokeVertex ch36st0[] = +{ + {28.6295,119.048}, + {28.6295,-19.0476} +}; + +static const SFG_StrokeVertex ch36st1[] = +{ + {47.6771,119.048}, + {47.6771,-19.0476} +}; + +static const SFG_StrokeVertex ch36st2[] = +{ + {71.4867,85.7143}, + {61.9629,95.2381}, + {47.6771,100}, + {28.6295,100}, + {14.3438,95.2381}, + {4.82,85.7143}, + {4.82,76.1905}, + {9.5819,66.6667}, + {14.3438,61.9048}, + {23.8676,57.1429}, + {52.439,47.619}, + {61.9629,42.8571}, + {66.7248,38.0952}, + {71.4867,28.5714}, + {71.4867,14.2857}, + {61.9629,4.7619}, + {47.6771,0}, + {28.6295,0}, + {14.3438,4.7619}, + {4.82,14.2857} +}; + +static const SFG_StrokeStrip ch36st[] = +{ + {2,ch36st0}, + {2,ch36st1}, + {20,ch36st2} +}; + +static const SFG_StrokeChar ch36 = {76.2067,3,ch36st}; + +/* char: 0x25 */ + +static const SFG_StrokeVertex ch37st0[] = +{ + {92.0743,100}, + {6.36,0} +}; + +static const SFG_StrokeVertex ch37st1[] = +{ + {30.1695,100}, + {39.6933,90.4762}, + {39.6933,80.9524}, + {34.9314,71.4286}, + {25.4076,66.6667}, + {15.8838,66.6667}, + {6.36,76.1905}, + {6.36,85.7143}, + {11.1219,95.2381}, + {20.6457,100}, + {30.1695,100}, + {39.6933,95.2381}, + {53.979,90.4762}, + {68.2648,90.4762}, + {82.5505,95.2381}, + {92.0743,100} +}; + +static const SFG_StrokeVertex ch37st2[] = +{ + {73.0267,33.3333}, + {63.5029,28.5714}, + {58.741,19.0476}, + {58.741,9.5238}, + {68.2648,0}, + {77.7886,0}, + {87.3124,4.7619}, + {92.0743,14.2857}, + {92.0743,23.8095}, + {82.5505,33.3333}, + {73.0267,33.3333} +}; + +static const SFG_StrokeStrip ch37st[] = +{ + {2,ch37st0}, + {16,ch37st1}, + {11,ch37st2} +}; + +static const SFG_StrokeChar ch37 = {96.5743,3,ch37st}; + +/* char: 0x26 */ + +static const SFG_StrokeVertex ch38st0[] = +{ + {101.218,57.1429}, + {101.218,61.9048}, + {96.4562,66.6667}, + {91.6943,66.6667}, + {86.9324,61.9048}, + {82.1705,52.381}, + {72.6467,28.5714}, + {63.1229,14.2857}, + {53.599,4.7619}, + {44.0752,0}, + {25.0276,0}, + {15.5038,4.7619}, + {10.7419,9.5238}, + {5.98,19.0476}, + {5.98,28.5714}, + {10.7419,38.0952}, + {15.5038,42.8571}, + {48.8371,61.9048}, + {53.599,66.6667}, + {58.361,76.1905}, + {58.361,85.7143}, + {53.599,95.2381}, + {44.0752,100}, + {34.5514,95.2381}, + {29.7895,85.7143}, + {29.7895,76.1905}, + {34.5514,61.9048}, + {44.0752,47.619}, + {67.8848,14.2857}, + {77.4086,4.7619}, + {86.9324,0}, + {96.4562,0}, + {101.218,4.7619}, + {101.218,9.5238} +}; + +static const SFG_StrokeStrip ch38st[] = +{ + {34,ch38st0} +}; + +static const SFG_StrokeChar ch38 = {101.758,1,ch38st}; + +/* char: 0x27 */ + +static const SFG_StrokeVertex ch39st0[] = +{ + {4.44,100}, + {4.44,66.6667} +}; + +static const SFG_StrokeStrip ch39st[] = +{ + {2,ch39st0} +}; + +static const SFG_StrokeChar ch39 = {13.62,1,ch39st}; + +/* char: 0x28 */ + +static const SFG_StrokeVertex ch40st0[] = +{ + {40.9133,119.048}, + {31.3895,109.524}, + {21.8657,95.2381}, + {12.3419,76.1905}, + {7.58,52.381}, + {7.58,33.3333}, + {12.3419,9.5238}, + {21.8657,-9.5238}, + {31.3895,-23.8095}, + {40.9133,-33.3333} +}; + +static const SFG_StrokeStrip ch40st[] = +{ + {10,ch40st0} +}; + +static const SFG_StrokeChar ch40 = {47.1733,1,ch40st}; + +/* char: 0x29 */ + +static const SFG_StrokeVertex ch41st0[] = +{ + {5.28,119.048}, + {14.8038,109.524}, + {24.3276,95.2381}, + {33.8514,76.1905}, + {38.6133,52.381}, + {38.6133,33.3333}, + {33.8514,9.5238}, + {24.3276,-9.5238}, + {14.8038,-23.8095}, + {5.28,-33.3333} +}; + +static const SFG_StrokeStrip ch41st[] = +{ + {10,ch41st0} +}; + +static const SFG_StrokeChar ch41 = {47.5333,1,ch41st}; + +/* char: 0x2a */ + +static const SFG_StrokeVertex ch42st0[] = +{ + {30.7695,71.4286}, + {30.7695,14.2857} +}; + +static const SFG_StrokeVertex ch42st1[] = +{ + {6.96,57.1429}, + {54.579,28.5714} +}; + +static const SFG_StrokeVertex ch42st2[] = +{ + {54.579,57.1429}, + {6.96,28.5714} +}; + +static const SFG_StrokeStrip ch42st[] = +{ + {2,ch42st0}, + {2,ch42st1}, + {2,ch42st2} +}; + +static const SFG_StrokeChar ch42 = {59.439,3,ch42st}; + +/* char: 0x2b */ + +static const SFG_StrokeVertex ch43st0[] = +{ + {48.8371,85.7143}, + {48.8371,0} +}; + +static const SFG_StrokeVertex ch43st1[] = +{ + {5.98,42.8571}, + {91.6943,42.8571} +}; + +static const SFG_StrokeStrip ch43st[] = +{ + {2,ch43st0}, + {2,ch43st1} +}; + +static const SFG_StrokeChar ch43 = {97.2543,2,ch43st}; + +/* char: 0x2c */ + +static const SFG_StrokeVertex ch44st0[] = +{ + {18.2838,4.7619}, + {13.5219,0}, + {8.76,4.7619}, + {13.5219,9.5238}, + {18.2838,4.7619}, + {18.2838,-4.7619}, + {13.5219,-14.2857}, + {8.76,-19.0476} +}; + +static const SFG_StrokeStrip ch44st[] = +{ + {8,ch44st0} +}; + +static const SFG_StrokeChar ch44 = {26.0638,1,ch44st}; + +/* char: 0x2d */ + +static const SFG_StrokeVertex ch45st0[] = +{ + {7.38,42.8571}, + {93.0943,42.8571} +}; + +static const SFG_StrokeStrip ch45st[] = +{ + {2,ch45st0} +}; + +static const SFG_StrokeChar ch45 = {100.754,1,ch45st}; + +/* char: 0x2e */ + +static const SFG_StrokeVertex ch46st0[] = +{ + {13.1019,9.5238}, + {8.34,4.7619}, + {13.1019,0}, + {17.8638,4.7619}, + {13.1019,9.5238} +}; + +static const SFG_StrokeStrip ch46st[] = +{ + {5,ch46st0} +}; + +static const SFG_StrokeChar ch46 = {26.4838,1,ch46st}; + +/* char: 0x2f */ + +static const SFG_StrokeVertex ch47st0[] = +{ + {7.24,-14.2857}, + {73.9067,100} +}; + +static const SFG_StrokeStrip ch47st[] = +{ + {2,ch47st0} +}; + +static const SFG_StrokeChar ch47 = {82.1067,1,ch47st}; + +/* char: 0x30 */ + +static const SFG_StrokeVertex ch48st0[] = +{ + {33.5514,100}, + {19.2657,95.2381}, + {9.7419,80.9524}, + {4.98,57.1429}, + {4.98,42.8571}, + {9.7419,19.0476}, + {19.2657,4.7619}, + {33.5514,0}, + {43.0752,0}, + {57.361,4.7619}, + {66.8848,19.0476}, + {71.6467,42.8571}, + {71.6467,57.1429}, + {66.8848,80.9524}, + {57.361,95.2381}, + {43.0752,100}, + {33.5514,100} +}; + +static const SFG_StrokeStrip ch48st[] = +{ + {17,ch48st0} +}; + +static const SFG_StrokeChar ch48 = {77.0667,1,ch48st}; + +/* char: 0x31 */ + +static const SFG_StrokeVertex ch49st0[] = +{ + {11.82,80.9524}, + {21.3438,85.7143}, + {35.6295,100}, + {35.6295,0} +}; + +static const SFG_StrokeStrip ch49st[] = +{ + {4,ch49st0} +}; + +static const SFG_StrokeChar ch49 = {66.5295,1,ch49st}; + +/* char: 0x32 */ + +static const SFG_StrokeVertex ch50st0[] = +{ + {10.1819,76.1905}, + {10.1819,80.9524}, + {14.9438,90.4762}, + {19.7057,95.2381}, + {29.2295,100}, + {48.2771,100}, + {57.801,95.2381}, + {62.5629,90.4762}, + {67.3248,80.9524}, + {67.3248,71.4286}, + {62.5629,61.9048}, + {53.039,47.619}, + {5.42,0}, + {72.0867,0} +}; + +static const SFG_StrokeStrip ch50st[] = +{ + {14,ch50st0} +}; + +static const SFG_StrokeChar ch50 = {77.6467,1,ch50st}; + +/* char: 0x33 */ + +static const SFG_StrokeVertex ch51st0[] = +{ + {14.5238,100}, + {66.9048,100}, + {38.3333,61.9048}, + {52.619,61.9048}, + {62.1429,57.1429}, + {66.9048,52.381}, + {71.6667,38.0952}, + {71.6667,28.5714}, + {66.9048,14.2857}, + {57.381,4.7619}, + {43.0952,0}, + {28.8095,0}, + {14.5238,4.7619}, + {9.7619,9.5238}, + {5,19.0476} +}; + +static const SFG_StrokeStrip ch51st[] = +{ + {15,ch51st0} +}; + +static const SFG_StrokeChar ch51 = {77.0467,1,ch51st}; + +/* char: 0x34 */ + +static const SFG_StrokeVertex ch52st0[] = +{ + {51.499,100}, + {3.88,33.3333}, + {75.3086,33.3333} +}; + +static const SFG_StrokeVertex ch52st1[] = +{ + {51.499,100}, + {51.499,0} +}; + +static const SFG_StrokeStrip ch52st[] = +{ + {3,ch52st0}, + {2,ch52st1} +}; + +static const SFG_StrokeChar ch52 = {80.1686,2,ch52st}; + +/* char: 0x35 */ + +static const SFG_StrokeVertex ch53st0[] = +{ + {62.0029,100}, + {14.3838,100}, + {9.6219,57.1429}, + {14.3838,61.9048}, + {28.6695,66.6667}, + {42.9552,66.6667}, + {57.241,61.9048}, + {66.7648,52.381}, + {71.5267,38.0952}, + {71.5267,28.5714}, + {66.7648,14.2857}, + {57.241,4.7619}, + {42.9552,0}, + {28.6695,0}, + {14.3838,4.7619}, + {9.6219,9.5238}, + {4.86,19.0476} +}; + +static const SFG_StrokeStrip ch53st[] = +{ + {17,ch53st0} +}; + +static const SFG_StrokeChar ch53 = {77.6867,1,ch53st}; + +/* char: 0x36 */ + +static const SFG_StrokeVertex ch54st0[] = +{ + {62.7229,85.7143}, + {57.961,95.2381}, + {43.6752,100}, + {34.1514,100}, + {19.8657,95.2381}, + {10.3419,80.9524}, + {5.58,57.1429}, + {5.58,33.3333}, + {10.3419,14.2857}, + {19.8657,4.7619}, + {34.1514,0}, + {38.9133,0}, + {53.199,4.7619}, + {62.7229,14.2857}, + {67.4848,28.5714}, + {67.4848,33.3333}, + {62.7229,47.619}, + {53.199,57.1429}, + {38.9133,61.9048}, + {34.1514,61.9048}, + {19.8657,57.1429}, + {10.3419,47.619}, + {5.58,33.3333} +}; + +static const SFG_StrokeStrip ch54st[] = +{ + {23,ch54st0} +}; + +static const SFG_StrokeChar ch54 = {73.8048,1,ch54st}; + +/* char: 0x37 */ + +static const SFG_StrokeVertex ch55st0[] = +{ + {72.2267,100}, + {24.6076,0} +}; + +static const SFG_StrokeVertex ch55st1[] = +{ + {5.56,100}, + {72.2267,100} +}; + +static const SFG_StrokeStrip ch55st[] = +{ + {2,ch55st0}, + {2,ch55st1} +}; + +static const SFG_StrokeChar ch55 = {77.2267,2,ch55st}; + +/* char: 0x38 */ + +static const SFG_StrokeVertex ch56st0[] = +{ + {29.4095,100}, + {15.1238,95.2381}, + {10.3619,85.7143}, + {10.3619,76.1905}, + {15.1238,66.6667}, + {24.6476,61.9048}, + {43.6952,57.1429}, + {57.981,52.381}, + {67.5048,42.8571}, + {72.2667,33.3333}, + {72.2667,19.0476}, + {67.5048,9.5238}, + {62.7429,4.7619}, + {48.4571,0}, + {29.4095,0}, + {15.1238,4.7619}, + {10.3619,9.5238}, + {5.6,19.0476}, + {5.6,33.3333}, + {10.3619,42.8571}, + {19.8857,52.381}, + {34.1714,57.1429}, + {53.219,61.9048}, + {62.7429,66.6667}, + {67.5048,76.1905}, + {67.5048,85.7143}, + {62.7429,95.2381}, + {48.4571,100}, + {29.4095,100} +}; + +static const SFG_StrokeStrip ch56st[] = +{ + {29,ch56st0} +}; + +static const SFG_StrokeChar ch56 = {77.6667,1,ch56st}; + +/* char: 0x39 */ + +static const SFG_StrokeVertex ch57st0[] = +{ + {68.5048,66.6667}, + {63.7429,52.381}, + {54.219,42.8571}, + {39.9333,38.0952}, + {35.1714,38.0952}, + {20.8857,42.8571}, + {11.3619,52.381}, + {6.6,66.6667}, + {6.6,71.4286}, + {11.3619,85.7143}, + {20.8857,95.2381}, + {35.1714,100}, + {39.9333,100}, + {54.219,95.2381}, + {63.7429,85.7143}, + {68.5048,66.6667}, + {68.5048,42.8571}, + {63.7429,19.0476}, + {54.219,4.7619}, + {39.9333,0}, + {30.4095,0}, + {16.1238,4.7619}, + {11.3619,14.2857} +}; + +static const SFG_StrokeStrip ch57st[] = +{ + {23,ch57st0} +}; + +static const SFG_StrokeChar ch57 = {74.0648,1,ch57st}; + +/* char: 0x3a */ + +static const SFG_StrokeVertex ch58st0[] = +{ + {14.0819,66.6667}, + {9.32,61.9048}, + {14.0819,57.1429}, + {18.8438,61.9048}, + {14.0819,66.6667} +}; + +static const SFG_StrokeVertex ch58st1[] = +{ + {14.0819,9.5238}, + {9.32,4.7619}, + {14.0819,0}, + {18.8438,4.7619}, + {14.0819,9.5238} +}; + +static const SFG_StrokeStrip ch58st[] = +{ + {5,ch58st0}, + {5,ch58st1} +}; + +static const SFG_StrokeChar ch58 = {26.2238,2,ch58st}; + +/* char: 0x3b */ + +static const SFG_StrokeVertex ch59st0[] = +{ + {12.9619,66.6667}, + {8.2,61.9048}, + {12.9619,57.1429}, + {17.7238,61.9048}, + {12.9619,66.6667} +}; + +static const SFG_StrokeVertex ch59st1[] = +{ + {17.7238,4.7619}, + {12.9619,0}, + {8.2,4.7619}, + {12.9619,9.5238}, + {17.7238,4.7619}, + {17.7238,-4.7619}, + {12.9619,-14.2857}, + {8.2,-19.0476} +}; + +static const SFG_StrokeStrip ch59st[] = +{ + {5,ch59st0}, + {8,ch59st1} +}; + +static const SFG_StrokeChar ch59 = {26.3038,2,ch59st}; + +/* char: 0x3c */ + +static const SFG_StrokeVertex ch60st0[] = +{ + {79.2505,85.7143}, + {3.06,42.8571}, + {79.2505,0} +}; + +static const SFG_StrokeStrip ch60st[] = +{ + {3,ch60st0} +}; + +static const SFG_StrokeChar ch60 = {81.6105,1,ch60st}; + +/* char: 0x3d */ + +static const SFG_StrokeVertex ch61st0[] = +{ + {5.7,57.1429}, + {91.4143,57.1429} +}; + +static const SFG_StrokeVertex ch61st1[] = +{ + {5.7,28.5714}, + {91.4143,28.5714} +}; + +static const SFG_StrokeStrip ch61st[] = +{ + {2,ch61st0}, + {2,ch61st1} +}; + +static const SFG_StrokeChar ch61 = {97.2543,2,ch61st}; + +/* char: 0x3e */ + +static const SFG_StrokeVertex ch62st0[] = +{ + {2.78,85.7143}, + {78.9705,42.8571}, + {2.78,0} +}; + +static const SFG_StrokeStrip ch62st[] = +{ + {3,ch62st0} +}; + +static const SFG_StrokeChar ch62 = {81.6105,1,ch62st}; + +/* char: 0x3f */ + +static const SFG_StrokeVertex ch63st0[] = +{ + {8.42,76.1905}, + {8.42,80.9524}, + {13.1819,90.4762}, + {17.9438,95.2381}, + {27.4676,100}, + {46.5152,100}, + {56.039,95.2381}, + {60.801,90.4762}, + {65.5629,80.9524}, + {65.5629,71.4286}, + {60.801,61.9048}, + {56.039,57.1429}, + {36.9914,47.619}, + {36.9914,33.3333} +}; + +static const SFG_StrokeVertex ch63st1[] = +{ + {36.9914,9.5238}, + {32.2295,4.7619}, + {36.9914,0}, + {41.7533,4.7619}, + {36.9914,9.5238} +}; + +static const SFG_StrokeStrip ch63st[] = +{ + {14,ch63st0}, + {5,ch63st1} +}; + +static const SFG_StrokeChar ch63 = {73.9029,2,ch63st}; + +/* char: 0x40 */ + +static const SFG_StrokeVertex ch64st0[] = +{ + {49.2171,52.381}, + {39.6933,57.1429}, + {30.1695,57.1429}, + {25.4076,47.619}, + {25.4076,42.8571}, + {30.1695,33.3333}, + {39.6933,33.3333}, + {49.2171,38.0952} +}; + +static const SFG_StrokeVertex ch64st1[] = +{ + {49.2171,57.1429}, + {49.2171,38.0952}, + {53.979,33.3333}, + {63.5029,33.3333}, + {68.2648,42.8571}, + {68.2648,47.619}, + {63.5029,61.9048}, + {53.979,71.4286}, + {39.6933,76.1905}, + {34.9314,76.1905}, + {20.6457,71.4286}, + {11.1219,61.9048}, + {6.36,47.619}, + {6.36,42.8571}, + {11.1219,28.5714}, + {20.6457,19.0476}, + {34.9314,14.2857}, + {39.6933,14.2857}, + {53.979,19.0476} +}; + +static const SFG_StrokeStrip ch64st[] = +{ + {8,ch64st0}, + {19,ch64st1} +}; + +static const SFG_StrokeChar ch64 = {74.3648,2,ch64st}; + +/* char: 0x41 */ + +static const SFG_StrokeVertex ch65st0[] = +{ + {40.5952,100}, + {2.5,0} +}; + +static const SFG_StrokeVertex ch65st1[] = +{ + {40.5952,100}, + {78.6905,0} +}; + +static const SFG_StrokeVertex ch65st2[] = +{ + {16.7857,33.3333}, + {64.4048,33.3333} +}; + +static const SFG_StrokeStrip ch65st[] = +{ + {2,ch65st0}, + {2,ch65st1}, + {2,ch65st2} +}; + +static const SFG_StrokeChar ch65 = {80.4905,3,ch65st}; + +/* char: 0x42 */ + +static const SFG_StrokeVertex ch66st0[] = +{ + {11.42,100}, + {11.42,0} +}; + +static const SFG_StrokeVertex ch66st1[] = +{ + {11.42,100}, + {54.2771,100}, + {68.5629,95.2381}, + {73.3248,90.4762}, + {78.0867,80.9524}, + {78.0867,71.4286}, + {73.3248,61.9048}, + {68.5629,57.1429}, + {54.2771,52.381} +}; + +static const SFG_StrokeVertex ch66st2[] = +{ + {11.42,52.381}, + {54.2771,52.381}, + {68.5629,47.619}, + {73.3248,42.8571}, + {78.0867,33.3333}, + {78.0867,19.0476}, + {73.3248,9.5238}, + {68.5629,4.7619}, + {54.2771,0}, + {11.42,0} +}; + +static const SFG_StrokeStrip ch66st[] = +{ + {2,ch66st0}, + {9,ch66st1}, + {10,ch66st2} +}; + +static const SFG_StrokeChar ch66 = {83.6267,3,ch66st}; + +/* char: 0x43 */ + +static const SFG_StrokeVertex ch67st0[] = +{ + {78.0886,76.1905}, + {73.3267,85.7143}, + {63.8029,95.2381}, + {54.279,100}, + {35.2314,100}, + {25.7076,95.2381}, + {16.1838,85.7143}, + {11.4219,76.1905}, + {6.66,61.9048}, + {6.66,38.0952}, + {11.4219,23.8095}, + {16.1838,14.2857}, + {25.7076,4.7619}, + {35.2314,0}, + {54.279,0}, + {63.8029,4.7619}, + {73.3267,14.2857}, + {78.0886,23.8095} +}; + +static const SFG_StrokeStrip ch67st[] = +{ + {18,ch67st0} +}; + +static const SFG_StrokeChar ch67 = {84.4886,1,ch67st}; + +/* char: 0x44 */ + +static const SFG_StrokeVertex ch68st0[] = +{ + {11.96,100}, + {11.96,0} +}; + +static const SFG_StrokeVertex ch68st1[] = +{ + {11.96,100}, + {45.2933,100}, + {59.579,95.2381}, + {69.1029,85.7143}, + {73.8648,76.1905}, + {78.6267,61.9048}, + {78.6267,38.0952}, + {73.8648,23.8095}, + {69.1029,14.2857}, + {59.579,4.7619}, + {45.2933,0}, + {11.96,0} +}; + +static const SFG_StrokeStrip ch68st[] = +{ + {2,ch68st0}, + {12,ch68st1} +}; + +static const SFG_StrokeChar ch68 = {85.2867,2,ch68st}; + +/* char: 0x45 */ + +static const SFG_StrokeVertex ch69st0[] = +{ + {11.42,100}, + {11.42,0} +}; + +static const SFG_StrokeVertex ch69st1[] = +{ + {11.42,100}, + {73.3248,100} +}; + +static const SFG_StrokeVertex ch69st2[] = +{ + {11.42,52.381}, + {49.5152,52.381} +}; + +static const SFG_StrokeVertex ch69st3[] = +{ + {11.42,0}, + {73.3248,0} +}; + +static const SFG_StrokeStrip ch69st[] = +{ + {2,ch69st0}, + {2,ch69st1}, + {2,ch69st2}, + {2,ch69st3} +}; + +static const SFG_StrokeChar ch69 = {78.1848,4,ch69st}; + +/* char: 0x46 */ + +static const SFG_StrokeVertex ch70st0[] = +{ + {11.42,100}, + {11.42,0} +}; + +static const SFG_StrokeVertex ch70st1[] = +{ + {11.42,100}, + {73.3248,100} +}; + +static const SFG_StrokeVertex ch70st2[] = +{ + {11.42,52.381}, + {49.5152,52.381} +}; + +static const SFG_StrokeStrip ch70st[] = +{ + {2,ch70st0}, + {2,ch70st1}, + {2,ch70st2} +}; + +static const SFG_StrokeChar ch70 = {78.7448,3,ch70st}; + +/* char: 0x47 */ + +static const SFG_StrokeVertex ch71st0[] = +{ + {78.4886,76.1905}, + {73.7267,85.7143}, + {64.2029,95.2381}, + {54.679,100}, + {35.6314,100}, + {26.1076,95.2381}, + {16.5838,85.7143}, + {11.8219,76.1905}, + {7.06,61.9048}, + {7.06,38.0952}, + {11.8219,23.8095}, + {16.5838,14.2857}, + {26.1076,4.7619}, + {35.6314,0}, + {54.679,0}, + {64.2029,4.7619}, + {73.7267,14.2857}, + {78.4886,23.8095}, + {78.4886,38.0952} +}; + +static const SFG_StrokeVertex ch71st1[] = +{ + {54.679,38.0952}, + {78.4886,38.0952} +}; + +static const SFG_StrokeStrip ch71st[] = +{ + {19,ch71st0}, + {2,ch71st1} +}; + +static const SFG_StrokeChar ch71 = {89.7686,2,ch71st}; + +/* char: 0x48 */ + +static const SFG_StrokeVertex ch72st0[] = +{ + {11.42,100}, + {11.42,0} +}; + +static const SFG_StrokeVertex ch72st1[] = +{ + {78.0867,100}, + {78.0867,0} +}; + +static const SFG_StrokeVertex ch72st2[] = +{ + {11.42,52.381}, + {78.0867,52.381} +}; + +static const SFG_StrokeStrip ch72st[] = +{ + {2,ch72st0}, + {2,ch72st1}, + {2,ch72st2} +}; + +static const SFG_StrokeChar ch72 = {89.0867,3,ch72st}; + +/* char: 0x49 */ + +static const SFG_StrokeVertex ch73st0[] = +{ + {10.86,100}, + {10.86,0} +}; + +static const SFG_StrokeStrip ch73st[] = +{ + {2,ch73st0} +}; + +static const SFG_StrokeChar ch73 = {21.3,1,ch73st}; + +/* char: 0x4a */ + +static const SFG_StrokeVertex ch74st0[] = +{ + {50.119,100}, + {50.119,23.8095}, + {45.3571,9.5238}, + {40.5952,4.7619}, + {31.0714,0}, + {21.5476,0}, + {12.0238,4.7619}, + {7.2619,9.5238}, + {2.5,23.8095}, + {2.5,33.3333} +}; + +static const SFG_StrokeStrip ch74st[] = +{ + {10,ch74st0} +}; + +static const SFG_StrokeChar ch74 = {59.999,1,ch74st}; + +/* char: 0x4b */ + +static const SFG_StrokeVertex ch75st0[] = +{ + {11.28,100}, + {11.28,0} +}; + +static const SFG_StrokeVertex ch75st1[] = +{ + {77.9467,100}, + {11.28,33.3333} +}; + +static const SFG_StrokeVertex ch75st2[] = +{ + {35.0895,57.1429}, + {77.9467,0} +}; + +static const SFG_StrokeStrip ch75st[] = +{ + {2,ch75st0}, + {2,ch75st1}, + {2,ch75st2} +}; + +static const SFG_StrokeChar ch75 = {79.3267,3,ch75st}; + +/* char: 0x4c */ + +static const SFG_StrokeVertex ch76st0[] = +{ + {11.68,100}, + {11.68,0} +}; + +static const SFG_StrokeVertex ch76st1[] = +{ + {11.68,0}, + {68.8229,0} +}; + +static const SFG_StrokeStrip ch76st[] = +{ + {2,ch76st0}, + {2,ch76st1} +}; + +static const SFG_StrokeChar ch76 = {71.3229,2,ch76st}; + +/* char: 0x4d */ + +static const SFG_StrokeVertex ch77st0[] = +{ + {10.86,100}, + {10.86,0} +}; + +static const SFG_StrokeVertex ch77st1[] = +{ + {10.86,100}, + {48.9552,0} +}; + +static const SFG_StrokeVertex ch77st2[] = +{ + {87.0505,100}, + {48.9552,0} +}; + +static const SFG_StrokeVertex ch77st3[] = +{ + {87.0505,100}, + {87.0505,0} +}; + +static const SFG_StrokeStrip ch77st[] = +{ + {2,ch77st0}, + {2,ch77st1}, + {2,ch77st2}, + {2,ch77st3} +}; + +static const SFG_StrokeChar ch77 = {97.2105,4,ch77st}; + +/* char: 0x4e */ + +static const SFG_StrokeVertex ch78st0[] = +{ + {11.14,100}, + {11.14,0} +}; + +static const SFG_StrokeVertex ch78st1[] = +{ + {11.14,100}, + {77.8067,0} +}; + +static const SFG_StrokeVertex ch78st2[] = +{ + {77.8067,100}, + {77.8067,0} +}; + +static const SFG_StrokeStrip ch78st[] = +{ + {2,ch78st0}, + {2,ch78st1}, + {2,ch78st2} +}; + +static const SFG_StrokeChar ch78 = {88.8067,3,ch78st}; + +/* char: 0x4f */ + +static const SFG_StrokeVertex ch79st0[] = +{ + {34.8114,100}, + {25.2876,95.2381}, + {15.7638,85.7143}, + {11.0019,76.1905}, + {6.24,61.9048}, + {6.24,38.0952}, + {11.0019,23.8095}, + {15.7638,14.2857}, + {25.2876,4.7619}, + {34.8114,0}, + {53.859,0}, + {63.3829,4.7619}, + {72.9067,14.2857}, + {77.6686,23.8095}, + {82.4305,38.0952}, + {82.4305,61.9048}, + {77.6686,76.1905}, + {72.9067,85.7143}, + {63.3829,95.2381}, + {53.859,100}, + {34.8114,100} +}; + +static const SFG_StrokeStrip ch79st[] = +{ + {21,ch79st0} +}; + +static const SFG_StrokeChar ch79 = {88.8305,1,ch79st}; + +/* char: 0x50 */ + +static const SFG_StrokeVertex ch80st0[] = +{ + {12.1,100}, + {12.1,0} +}; + +static const SFG_StrokeVertex ch80st1[] = +{ + {12.1,100}, + {54.9571,100}, + {69.2429,95.2381}, + {74.0048,90.4762}, + {78.7667,80.9524}, + {78.7667,66.6667}, + {74.0048,57.1429}, + {69.2429,52.381}, + {54.9571,47.619}, + {12.1,47.619} +}; + +static const SFG_StrokeStrip ch80st[] = +{ + {2,ch80st0}, + {10,ch80st1} +}; + +static const SFG_StrokeChar ch80 = {85.6667,2,ch80st}; + +/* char: 0x51 */ + +static const SFG_StrokeVertex ch81st0[] = +{ + {33.8714,100}, + {24.3476,95.2381}, + {14.8238,85.7143}, + {10.0619,76.1905}, + {5.3,61.9048}, + {5.3,38.0952}, + {10.0619,23.8095}, + {14.8238,14.2857}, + {24.3476,4.7619}, + {33.8714,0}, + {52.919,0}, + {62.4429,4.7619}, + {71.9667,14.2857}, + {76.7286,23.8095}, + {81.4905,38.0952}, + {81.4905,61.9048}, + {76.7286,76.1905}, + {71.9667,85.7143}, + {62.4429,95.2381}, + {52.919,100}, + {33.8714,100} +}; + +static const SFG_StrokeVertex ch81st1[] = +{ + {48.1571,19.0476}, + {76.7286,-9.5238} +}; + +static const SFG_StrokeStrip ch81st[] = +{ + {21,ch81st0}, + {2,ch81st1} +}; + +static const SFG_StrokeChar ch81 = {88.0905,2,ch81st}; + +/* char: 0x52 */ + +static const SFG_StrokeVertex ch82st0[] = +{ + {11.68,100}, + {11.68,0} +}; + +static const SFG_StrokeVertex ch82st1[] = +{ + {11.68,100}, + {54.5371,100}, + {68.8229,95.2381}, + {73.5848,90.4762}, + {78.3467,80.9524}, + {78.3467,71.4286}, + {73.5848,61.9048}, + {68.8229,57.1429}, + {54.5371,52.381}, + {11.68,52.381} +}; + +static const SFG_StrokeVertex ch82st2[] = +{ + {45.0133,52.381}, + {78.3467,0} +}; + +static const SFG_StrokeStrip ch82st[] = +{ + {2,ch82st0}, + {10,ch82st1}, + {2,ch82st2} +}; + +static const SFG_StrokeChar ch82 = {82.3667,3,ch82st}; + +/* char: 0x53 */ + +static const SFG_StrokeVertex ch83st0[] = +{ + {74.6667,85.7143}, + {65.1429,95.2381}, + {50.8571,100}, + {31.8095,100}, + {17.5238,95.2381}, + {8,85.7143}, + {8,76.1905}, + {12.7619,66.6667}, + {17.5238,61.9048}, + {27.0476,57.1429}, + {55.619,47.619}, + {65.1429,42.8571}, + {69.9048,38.0952}, + {74.6667,28.5714}, + {74.6667,14.2857}, + {65.1429,4.7619}, + {50.8571,0}, + {31.8095,0}, + {17.5238,4.7619}, + {8,14.2857} +}; + +static const SFG_StrokeStrip ch83st[] = +{ + {20,ch83st0} +}; + +static const SFG_StrokeChar ch83 = {80.8267,1,ch83st}; + +/* char: 0x54 */ + +static const SFG_StrokeVertex ch84st0[] = +{ + {35.6933,100}, + {35.6933,0} +}; + +static const SFG_StrokeVertex ch84st1[] = +{ + {2.36,100}, + {69.0267,100} +}; + +static const SFG_StrokeStrip ch84st[] = +{ + {2,ch84st0}, + {2,ch84st1} +}; + +static const SFG_StrokeChar ch84 = {71.9467,2,ch84st}; + +/* char: 0x55 */ + +static const SFG_StrokeVertex ch85st0[] = +{ + {11.54,100}, + {11.54,28.5714}, + {16.3019,14.2857}, + {25.8257,4.7619}, + {40.1114,0}, + {49.6352,0}, + {63.921,4.7619}, + {73.4448,14.2857}, + {78.2067,28.5714}, + {78.2067,100} +}; + +static const SFG_StrokeStrip ch85st[] = +{ + {10,ch85st0} +}; + +static const SFG_StrokeChar ch85 = {89.4867,1,ch85st}; + +/* char: 0x56 */ + +static const SFG_StrokeVertex ch86st0[] = +{ + {2.36,100}, + {40.4552,0} +}; + +static const SFG_StrokeVertex ch86st1[] = +{ + {78.5505,100}, + {40.4552,0} +}; + +static const SFG_StrokeStrip ch86st[] = +{ + {2,ch86st0}, + {2,ch86st1} +}; + +static const SFG_StrokeChar ch86 = {81.6105,2,ch86st}; + +/* char: 0x57 */ + +static const SFG_StrokeVertex ch87st0[] = +{ + {2.22,100}, + {26.0295,0} +}; + +static const SFG_StrokeVertex ch87st1[] = +{ + {49.839,100}, + {26.0295,0} +}; + +static const SFG_StrokeVertex ch87st2[] = +{ + {49.839,100}, + {73.6486,0} +}; + +static const SFG_StrokeVertex ch87st3[] = +{ + {97.4581,100}, + {73.6486,0} +}; + +static const SFG_StrokeStrip ch87st[] = +{ + {2,ch87st0}, + {2,ch87st1}, + {2,ch87st2}, + {2,ch87st3} +}; + +static const SFG_StrokeChar ch87 = {100.518,4,ch87st}; + +/* char: 0x58 */ + +static const SFG_StrokeVertex ch88st0[] = +{ + {2.5,100}, + {69.1667,0} +}; + +static const SFG_StrokeVertex ch88st1[] = +{ + {69.1667,100}, + {2.5,0} +}; + +static const SFG_StrokeStrip ch88st[] = +{ + {2,ch88st0}, + {2,ch88st1} +}; + +static const SFG_StrokeChar ch88 = {72.3667,2,ch88st}; + +/* char: 0x59 */ + +static const SFG_StrokeVertex ch89st0[] = +{ + {1.52,100}, + {39.6152,52.381}, + {39.6152,0} +}; + +static const SFG_StrokeVertex ch89st1[] = +{ + {77.7105,100}, + {39.6152,52.381} +}; + +static const SFG_StrokeStrip ch89st[] = +{ + {3,ch89st0}, + {2,ch89st1} +}; + +static const SFG_StrokeChar ch89 = {79.6505,2,ch89st}; + +/* char: 0x5a */ + +static const SFG_StrokeVertex ch90st0[] = +{ + {69.1667,100}, + {2.5,0} +}; + +static const SFG_StrokeVertex ch90st1[] = +{ + {2.5,100}, + {69.1667,100} +}; + +static const SFG_StrokeVertex ch90st2[] = +{ + {2.5,0}, + {69.1667,0} +}; + +static const SFG_StrokeStrip ch90st[] = +{ + {2,ch90st0}, + {2,ch90st1}, + {2,ch90st2} +}; + +static const SFG_StrokeChar ch90 = {73.7467,3,ch90st}; + +/* char: 0x5b */ + +static const SFG_StrokeVertex ch91st0[] = +{ + {7.78,119.048}, + {7.78,-33.3333} +}; + +static const SFG_StrokeVertex ch91st1[] = +{ + {12.5419,119.048}, + {12.5419,-33.3333} +}; + +static const SFG_StrokeVertex ch91st2[] = +{ + {7.78,119.048}, + {41.1133,119.048} +}; + +static const SFG_StrokeVertex ch91st3[] = +{ + {7.78,-33.3333}, + {41.1133,-33.3333} +}; + +static const SFG_StrokeStrip ch91st[] = +{ + {2,ch91st0}, + {2,ch91st1}, + {2,ch91st2}, + {2,ch91st3} +}; + +static const SFG_StrokeChar ch91 = {46.1133,4,ch91st}; + +/* char: 0x5c */ + +static const SFG_StrokeVertex ch92st0[] = +{ + {5.84,100}, + {72.5067,-14.2857} +}; + +static const SFG_StrokeStrip ch92st[] = +{ + {2,ch92st0} +}; + +static const SFG_StrokeChar ch92 = {78.2067,1,ch92st}; + +/* char: 0x5d */ + +static const SFG_StrokeVertex ch93st0[] = +{ + {33.0114,119.048}, + {33.0114,-33.3333} +}; + +static const SFG_StrokeVertex ch93st1[] = +{ + {37.7733,119.048}, + {37.7733,-33.3333} +}; + +static const SFG_StrokeVertex ch93st2[] = +{ + {4.44,119.048}, + {37.7733,119.048} +}; + +static const SFG_StrokeVertex ch93st3[] = +{ + {4.44,-33.3333}, + {37.7733,-33.3333} +}; + +static const SFG_StrokeStrip ch93st[] = +{ + {2,ch93st0}, + {2,ch93st1}, + {2,ch93st2}, + {2,ch93st3} +}; + +static const SFG_StrokeChar ch93 = {46.3933,4,ch93st}; + +/* char: 0x5e */ + +static const SFG_StrokeVertex ch94st0[] = +{ + {44.0752,109.524}, + {5.98,42.8571} +}; + +static const SFG_StrokeVertex ch94st1[] = +{ + {44.0752,109.524}, + {82.1705,42.8571} +}; + +static const SFG_StrokeStrip ch94st[] = +{ + {2,ch94st0}, + {2,ch94st1} +}; + +static const SFG_StrokeChar ch94 = {90.2305,2,ch94st}; + +/* char: 0x5f */ + +static const SFG_StrokeVertex ch95st0[] = +{ + {-1.1,-33.3333}, + {103.662,-33.3333}, + {103.662,-28.5714}, + {-1.1,-28.5714}, + {-1.1,-33.3333} +}; + +static const SFG_StrokeStrip ch95st[] = +{ + {5,ch95st0} +}; + +static const SFG_StrokeChar ch95 = {104.062,1,ch95st}; + +/* char: 0x60 */ + +static const SFG_StrokeVertex ch96st0[] = +{ + {33.0219,100}, + {56.8314,71.4286} +}; + +static const SFG_StrokeVertex ch96st1[] = +{ + {33.0219,100}, + {28.26,95.2381}, + {56.8314,71.4286} +}; + +static const SFG_StrokeStrip ch96st[] = +{ + {2,ch96st0}, + {3,ch96st1} +}; + +static const SFG_StrokeChar ch96 = {83.5714,2,ch96st}; + +/* char: 0x61 */ + +static const SFG_StrokeVertex ch97st0[] = +{ + {63.8229,66.6667}, + {63.8229,0} +}; + +static const SFG_StrokeVertex ch97st1[] = +{ + {63.8229,52.381}, + {54.299,61.9048}, + {44.7752,66.6667}, + {30.4895,66.6667}, + {20.9657,61.9048}, + {11.4419,52.381}, + {6.68,38.0952}, + {6.68,28.5714}, + {11.4419,14.2857}, + {20.9657,4.7619}, + {30.4895,0}, + {44.7752,0}, + {54.299,4.7619}, + {63.8229,14.2857} +}; + +static const SFG_StrokeStrip ch97st[] = +{ + {2,ch97st0}, + {14,ch97st1} +}; + +static const SFG_StrokeChar ch97 = {66.6029,2,ch97st}; + +/* char: 0x62 */ + +static const SFG_StrokeVertex ch98st0[] = +{ + {8.76,100}, + {8.76,0} +}; + +static const SFG_StrokeVertex ch98st1[] = +{ + {8.76,52.381}, + {18.2838,61.9048}, + {27.8076,66.6667}, + {42.0933,66.6667}, + {51.6171,61.9048}, + {61.141,52.381}, + {65.9029,38.0952}, + {65.9029,28.5714}, + {61.141,14.2857}, + {51.6171,4.7619}, + {42.0933,0}, + {27.8076,0}, + {18.2838,4.7619}, + {8.76,14.2857} +}; + +static const SFG_StrokeStrip ch98st[] = +{ + {2,ch98st0}, + {14,ch98st1} +}; + +static const SFG_StrokeChar ch98 = {70.4629,2,ch98st}; + +/* char: 0x63 */ + +static const SFG_StrokeVertex ch99st0[] = +{ + {62.6629,52.381}, + {53.139,61.9048}, + {43.6152,66.6667}, + {29.3295,66.6667}, + {19.8057,61.9048}, + {10.2819,52.381}, + {5.52,38.0952}, + {5.52,28.5714}, + {10.2819,14.2857}, + {19.8057,4.7619}, + {29.3295,0}, + {43.6152,0}, + {53.139,4.7619}, + {62.6629,14.2857} +}; + +static const SFG_StrokeStrip ch99st[] = +{ + {14,ch99st0} +}; + +static const SFG_StrokeChar ch99 = {68.9229,1,ch99st}; + +/* char: 0x64 */ + +static const SFG_StrokeVertex ch100st0[] = +{ + {61.7829,100}, + {61.7829,0} +}; + +static const SFG_StrokeVertex ch100st1[] = +{ + {61.7829,52.381}, + {52.259,61.9048}, + {42.7352,66.6667}, + {28.4495,66.6667}, + {18.9257,61.9048}, + {9.4019,52.381}, + {4.64,38.0952}, + {4.64,28.5714}, + {9.4019,14.2857}, + {18.9257,4.7619}, + {28.4495,0}, + {42.7352,0}, + {52.259,4.7619}, + {61.7829,14.2857} +}; + +static const SFG_StrokeStrip ch100st[] = +{ + {2,ch100st0}, + {14,ch100st1} +}; + +static const SFG_StrokeChar ch100 = {70.2629,2,ch100st}; + +/* char: 0x65 */ + +static const SFG_StrokeVertex ch101st0[] = +{ + {5.72,38.0952}, + {62.8629,38.0952}, + {62.8629,47.619}, + {58.101,57.1429}, + {53.339,61.9048}, + {43.8152,66.6667}, + {29.5295,66.6667}, + {20.0057,61.9048}, + {10.4819,52.381}, + {5.72,38.0952}, + {5.72,28.5714}, + {10.4819,14.2857}, + {20.0057,4.7619}, + {29.5295,0}, + {43.8152,0}, + {53.339,4.7619}, + {62.8629,14.2857} +}; + +static const SFG_StrokeStrip ch101st[] = +{ + {17,ch101st0} +}; + +static const SFG_StrokeChar ch101 = {68.5229,1,ch101st}; + +/* char: 0x66 */ + +static const SFG_StrokeVertex ch102st0[] = +{ + {38.7752,100}, + {29.2514,100}, + {19.7276,95.2381}, + {14.9657,80.9524}, + {14.9657,0} +}; + +static const SFG_StrokeVertex ch102st1[] = +{ + {0.68,66.6667}, + {34.0133,66.6667} +}; + +static const SFG_StrokeStrip ch102st[] = +{ + {5,ch102st0}, + {2,ch102st1} +}; + +static const SFG_StrokeChar ch102 = {38.6552,2,ch102st}; + +/* char: 0x67 */ + +static const SFG_StrokeVertex ch103st0[] = +{ + {62.5029,66.6667}, + {62.5029,-9.5238}, + {57.741,-23.8095}, + {52.979,-28.5714}, + {43.4552,-33.3333}, + {29.1695,-33.3333}, + {19.6457,-28.5714} +}; + +static const SFG_StrokeVertex ch103st1[] = +{ + {62.5029,52.381}, + {52.979,61.9048}, + {43.4552,66.6667}, + {29.1695,66.6667}, + {19.6457,61.9048}, + {10.1219,52.381}, + {5.36,38.0952}, + {5.36,28.5714}, + {10.1219,14.2857}, + {19.6457,4.7619}, + {29.1695,0}, + {43.4552,0}, + {52.979,4.7619}, + {62.5029,14.2857} +}; + +static const SFG_StrokeStrip ch103st[] = +{ + {7,ch103st0}, + {14,ch103st1} +}; + +static const SFG_StrokeChar ch103 = {70.9829,2,ch103st}; + +/* char: 0x68 */ + +static const SFG_StrokeVertex ch104st0[] = +{ + {9.6,100}, + {9.6,0} +}; + +static const SFG_StrokeVertex ch104st1[] = +{ + {9.6,47.619}, + {23.8857,61.9048}, + {33.4095,66.6667}, + {47.6952,66.6667}, + {57.219,61.9048}, + {61.981,47.619}, + {61.981,0} +}; + +static const SFG_StrokeStrip ch104st[] = +{ + {2,ch104st0}, + {7,ch104st1} +}; + +static const SFG_StrokeChar ch104 = {71.021,2,ch104st}; + +/* char: 0x69 */ + +static const SFG_StrokeVertex ch105st0[] = +{ + {10.02,100}, + {14.7819,95.2381}, + {19.5438,100}, + {14.7819,104.762}, + {10.02,100} +}; + +static const SFG_StrokeVertex ch105st1[] = +{ + {14.7819,66.6667}, + {14.7819,0} +}; + +static const SFG_StrokeStrip ch105st[] = +{ + {5,ch105st0}, + {2,ch105st1} +}; + +static const SFG_StrokeChar ch105 = {28.8638,2,ch105st}; + +/* char: 0x6a */ + +static const SFG_StrokeVertex ch106st0[] = +{ + {17.3876,100}, + {22.1495,95.2381}, + {26.9114,100}, + {22.1495,104.762}, + {17.3876,100} +}; + +static const SFG_StrokeVertex ch106st1[] = +{ + {22.1495,66.6667}, + {22.1495,-14.2857}, + {17.3876,-28.5714}, + {7.8638,-33.3333}, + {-1.66,-33.3333} +}; + +static const SFG_StrokeStrip ch106st[] = +{ + {5,ch106st0}, + {5,ch106st1} +}; + +static const SFG_StrokeChar ch106 = {36.2314,2,ch106st}; + +/* char: 0x6b */ + +static const SFG_StrokeVertex ch107st0[] = +{ + {9.6,100}, + {9.6,0} +}; + +static const SFG_StrokeVertex ch107st1[] = +{ + {57.219,66.6667}, + {9.6,19.0476} +}; + +static const SFG_StrokeVertex ch107st2[] = +{ + {28.6476,38.0952}, + {61.981,0} +}; + +static const SFG_StrokeStrip ch107st[] = +{ + {2,ch107st0}, + {2,ch107st1}, + {2,ch107st2} +}; + +static const SFG_StrokeChar ch107 = {62.521,3,ch107st}; + +/* char: 0x6c */ + +static const SFG_StrokeVertex ch108st0[] = +{ + {10.02,100}, + {10.02,0} +}; + +static const SFG_StrokeStrip ch108st[] = +{ + {2,ch108st0} +}; + +static const SFG_StrokeChar ch108 = {19.34,1,ch108st}; + +/* char: 0x6d */ + +static const SFG_StrokeVertex ch109st0[] = +{ + {9.6,66.6667}, + {9.6,0} +}; + +static const SFG_StrokeVertex ch109st1[] = +{ + {9.6,47.619}, + {23.8857,61.9048}, + {33.4095,66.6667}, + {47.6952,66.6667}, + {57.219,61.9048}, + {61.981,47.619}, + {61.981,0} +}; + +static const SFG_StrokeVertex ch109st2[] = +{ + {61.981,47.619}, + {76.2667,61.9048}, + {85.7905,66.6667}, + {100.076,66.6667}, + {109.6,61.9048}, + {114.362,47.619}, + {114.362,0} +}; + +static const SFG_StrokeStrip ch109st[] = +{ + {2,ch109st0}, + {7,ch109st1}, + {7,ch109st2} +}; + +static const SFG_StrokeChar ch109 = {123.962,3,ch109st}; + +/* char: 0x6e */ + +static const SFG_StrokeVertex ch110st0[] = +{ + {9.18,66.6667}, + {9.18,0} +}; + +static const SFG_StrokeVertex ch110st1[] = +{ + {9.18,47.619}, + {23.4657,61.9048}, + {32.9895,66.6667}, + {47.2752,66.6667}, + {56.799,61.9048}, + {61.561,47.619}, + {61.561,0} +}; + +static const SFG_StrokeStrip ch110st[] = +{ + {2,ch110st0}, + {7,ch110st1} +}; + +static const SFG_StrokeChar ch110 = {70.881,2,ch110st}; + +/* char: 0x6f */ + +static const SFG_StrokeVertex ch111st0[] = +{ + {28.7895,66.6667}, + {19.2657,61.9048}, + {9.7419,52.381}, + {4.98,38.0952}, + {4.98,28.5714}, + {9.7419,14.2857}, + {19.2657,4.7619}, + {28.7895,0}, + {43.0752,0}, + {52.599,4.7619}, + {62.1229,14.2857}, + {66.8848,28.5714}, + {66.8848,38.0952}, + {62.1229,52.381}, + {52.599,61.9048}, + {43.0752,66.6667}, + {28.7895,66.6667} +}; + +static const SFG_StrokeStrip ch111st[] = +{ + {17,ch111st0} +}; + +static const SFG_StrokeChar ch111 = {71.7448,1,ch111st}; + +/* char: 0x70 */ + +static const SFG_StrokeVertex ch112st0[] = +{ + {9.46,66.6667}, + {9.46,-33.3333} +}; + +static const SFG_StrokeVertex ch112st1[] = +{ + {9.46,52.381}, + {18.9838,61.9048}, + {28.5076,66.6667}, + {42.7933,66.6667}, + {52.3171,61.9048}, + {61.841,52.381}, + {66.6029,38.0952}, + {66.6029,28.5714}, + {61.841,14.2857}, + {52.3171,4.7619}, + {42.7933,0}, + {28.5076,0}, + {18.9838,4.7619}, + {9.46,14.2857} +}; + +static const SFG_StrokeStrip ch112st[] = +{ + {2,ch112st0}, + {14,ch112st1} +}; + +static const SFG_StrokeChar ch112 = {70.8029,2,ch112st}; + +/* char: 0x71 */ + +static const SFG_StrokeVertex ch113st0[] = +{ + {61.9829,66.6667}, + {61.9829,-33.3333} +}; + +static const SFG_StrokeVertex ch113st1[] = +{ + {61.9829,52.381}, + {52.459,61.9048}, + {42.9352,66.6667}, + {28.6495,66.6667}, + {19.1257,61.9048}, + {9.6019,52.381}, + {4.84,38.0952}, + {4.84,28.5714}, + {9.6019,14.2857}, + {19.1257,4.7619}, + {28.6495,0}, + {42.9352,0}, + {52.459,4.7619}, + {61.9829,14.2857} +}; + +static const SFG_StrokeStrip ch113st[] = +{ + {2,ch113st0}, + {14,ch113st1} +}; + +static const SFG_StrokeChar ch113 = {70.7429,2,ch113st}; + +/* char: 0x72 */ + +static const SFG_StrokeVertex ch114st0[] = +{ + {9.46,66.6667}, + {9.46,0} +}; + +static const SFG_StrokeVertex ch114st1[] = +{ + {9.46,38.0952}, + {14.2219,52.381}, + {23.7457,61.9048}, + {33.2695,66.6667}, + {47.5552,66.6667} +}; + +static const SFG_StrokeStrip ch114st[] = +{ + {2,ch114st0}, + {5,ch114st1} +}; + +static const SFG_StrokeChar ch114 = {49.4952,2,ch114st}; + +/* char: 0x73 */ + +static const SFG_StrokeVertex ch115st0[] = +{ + {57.081,52.381}, + {52.319,61.9048}, + {38.0333,66.6667}, + {23.7476,66.6667}, + {9.4619,61.9048}, + {4.7,52.381}, + {9.4619,42.8571}, + {18.9857,38.0952}, + {42.7952,33.3333}, + {52.319,28.5714}, + {57.081,19.0476}, + {57.081,14.2857}, + {52.319,4.7619}, + {38.0333,0}, + {23.7476,0}, + {9.4619,4.7619}, + {4.7,14.2857} +}; + +static const SFG_StrokeStrip ch115st[] = +{ + {17,ch115st0} +}; + +static const SFG_StrokeChar ch115 = {62.321,1,ch115st}; + +/* char: 0x74 */ + +static const SFG_StrokeVertex ch116st0[] = +{ + {14.8257,100}, + {14.8257,19.0476}, + {19.5876,4.7619}, + {29.1114,0}, + {38.6352,0} +}; + +static const SFG_StrokeVertex ch116st1[] = +{ + {0.54,66.6667}, + {33.8733,66.6667} +}; + +static const SFG_StrokeStrip ch116st[] = +{ + {5,ch116st0}, + {2,ch116st1} +}; + +static const SFG_StrokeChar ch116 = {39.3152,2,ch116st}; + +/* char: 0x75 */ + +static const SFG_StrokeVertex ch117st0[] = +{ + {9.46,66.6667}, + {9.46,19.0476}, + {14.2219,4.7619}, + {23.7457,0}, + {38.0314,0}, + {47.5552,4.7619}, + {61.841,19.0476} +}; + +static const SFG_StrokeVertex ch117st1[] = +{ + {61.841,66.6667}, + {61.841,0} +}; + +static const SFG_StrokeStrip ch117st[] = +{ + {7,ch117st0}, + {2,ch117st1} +}; + +static const SFG_StrokeChar ch117 = {71.161,2,ch117st}; + +/* char: 0x76 */ + +static const SFG_StrokeVertex ch118st0[] = +{ + {1.8,66.6667}, + {30.3714,0} +}; + +static const SFG_StrokeVertex ch118st1[] = +{ + {58.9429,66.6667}, + {30.3714,0} +}; + +static const SFG_StrokeStrip ch118st[] = +{ + {2,ch118st0}, + {2,ch118st1} +}; + +static const SFG_StrokeChar ch118 = {60.6029,2,ch118st}; + +/* char: 0x77 */ + +static const SFG_StrokeVertex ch119st0[] = +{ + {2.5,66.6667}, + {21.5476,0} +}; + +static const SFG_StrokeVertex ch119st1[] = +{ + {40.5952,66.6667}, + {21.5476,0} +}; + +static const SFG_StrokeVertex ch119st2[] = +{ + {40.5952,66.6667}, + {59.6429,0} +}; + +static const SFG_StrokeVertex ch119st3[] = +{ + {78.6905,66.6667}, + {59.6429,0} +}; + +static const SFG_StrokeStrip ch119st[] = +{ + {2,ch119st0}, + {2,ch119st1}, + {2,ch119st2}, + {2,ch119st3} +}; + +static const SFG_StrokeChar ch119 = {80.4905,4,ch119st}; + +/* char: 0x78 */ + +static const SFG_StrokeVertex ch120st0[] = +{ + {1.66,66.6667}, + {54.041,0} +}; + +static const SFG_StrokeVertex ch120st1[] = +{ + {54.041,66.6667}, + {1.66,0} +}; + +static const SFG_StrokeStrip ch120st[] = +{ + {2,ch120st0}, + {2,ch120st1} +}; + +static const SFG_StrokeChar ch120 = {56.401,2,ch120st}; + +/* char: 0x79 */ + +static const SFG_StrokeVertex ch121st0[] = +{ + {6.5619,66.6667}, + {35.1333,0} +}; + +static const SFG_StrokeVertex ch121st1[] = +{ + {63.7048,66.6667}, + {35.1333,0}, + {25.6095,-19.0476}, + {16.0857,-28.5714}, + {6.5619,-33.3333}, + {1.8,-33.3333} +}; + +static const SFG_StrokeStrip ch121st[] = +{ + {2,ch121st0}, + {6,ch121st1} +}; + +static const SFG_StrokeChar ch121 = {66.0648,2,ch121st}; + +/* char: 0x7a */ + +static const SFG_StrokeVertex ch122st0[] = +{ + {56.821,66.6667}, + {4.44,0} +}; + +static const SFG_StrokeVertex ch122st1[] = +{ + {4.44,66.6667}, + {56.821,66.6667} +}; + +static const SFG_StrokeVertex ch122st2[] = +{ + {4.44,0}, + {56.821,0} +}; + +static const SFG_StrokeStrip ch122st[] = +{ + {2,ch122st0}, + {2,ch122st1}, + {2,ch122st2} +}; + +static const SFG_StrokeChar ch122 = {61.821,3,ch122st}; + +/* char: 0x7b */ + +static const SFG_StrokeVertex ch123st0[] = +{ + {31.1895,119.048}, + {21.6657,114.286}, + {16.9038,109.524}, + {12.1419,100}, + {12.1419,90.4762}, + {16.9038,80.9524}, + {21.6657,76.1905}, + {26.4276,66.6667}, + {26.4276,57.1429}, + {16.9038,47.619} +}; + +static const SFG_StrokeVertex ch123st1[] = +{ + {21.6657,114.286}, + {16.9038,104.762}, + {16.9038,95.2381}, + {21.6657,85.7143}, + {26.4276,80.9524}, + {31.1895,71.4286}, + {31.1895,61.9048}, + {26.4276,52.381}, + {7.38,42.8571}, + {26.4276,33.3333}, + {31.1895,23.8095}, + {31.1895,14.2857}, + {26.4276,4.7619}, + {21.6657,0}, + {16.9038,-9.5238}, + {16.9038,-19.0476}, + {21.6657,-28.5714} +}; + +static const SFG_StrokeVertex ch123st2[] = +{ + {16.9038,38.0952}, + {26.4276,28.5714}, + {26.4276,19.0476}, + {21.6657,9.5238}, + {16.9038,4.7619}, + {12.1419,-4.7619}, + {12.1419,-14.2857}, + {16.9038,-23.8095}, + {21.6657,-28.5714}, + {31.1895,-33.3333} +}; + +static const SFG_StrokeStrip ch123st[] = +{ + {10,ch123st0}, + {17,ch123st1}, + {10,ch123st2} +}; + +static const SFG_StrokeChar ch123 = {41.6295,3,ch123st}; + +/* char: 0x7c */ + +static const SFG_StrokeVertex ch124st0[] = +{ + {11.54,119.048}, + {11.54,-33.3333} +}; + +static const SFG_StrokeStrip ch124st[] = +{ + {2,ch124st0} +}; + +static const SFG_StrokeChar ch124 = {23.78,1,ch124st}; + +/* char: 0x7d */ + +static const SFG_StrokeVertex ch125st0[] = +{ + {9.18,119.048}, + {18.7038,114.286}, + {23.4657,109.524}, + {28.2276,100}, + {28.2276,90.4762}, + {23.4657,80.9524}, + {18.7038,76.1905}, + {13.9419,66.6667}, + {13.9419,57.1429}, + {23.4657,47.619} +}; + +static const SFG_StrokeVertex ch125st1[] = +{ + {18.7038,114.286}, + {23.4657,104.762}, + {23.4657,95.2381}, + {18.7038,85.7143}, + {13.9419,80.9524}, + {9.18,71.4286}, + {9.18,61.9048}, + {13.9419,52.381}, + {32.9895,42.8571}, + {13.9419,33.3333}, + {9.18,23.8095}, + {9.18,14.2857}, + {13.9419,4.7619}, + {18.7038,0}, + {23.4657,-9.5238}, + {23.4657,-19.0476}, + {18.7038,-28.5714} +}; + +static const SFG_StrokeVertex ch125st2[] = +{ + {23.4657,38.0952}, + {13.9419,28.5714}, + {13.9419,19.0476}, + {18.7038,9.5238}, + {23.4657,4.7619}, + {28.2276,-4.7619}, + {28.2276,-14.2857}, + {23.4657,-23.8095}, + {18.7038,-28.5714}, + {9.18,-33.3333} +}; + +static const SFG_StrokeStrip ch125st[] = +{ + {10,ch125st0}, + {17,ch125st1}, + {10,ch125st2} +}; + +static const SFG_StrokeChar ch125 = {41.4695,3,ch125st}; + +/* char: 0x7e */ + +static const SFG_StrokeVertex ch126st0[] = +{ + {2.92,28.5714}, + {2.92,38.0952}, + {7.6819,52.381}, + {17.2057,57.1429}, + {26.7295,57.1429}, + {36.2533,52.381}, + {55.301,38.0952}, + {64.8248,33.3333}, + {74.3486,33.3333}, + {83.8724,38.0952}, + {88.6343,47.619} +}; + +static const SFG_StrokeVertex ch126st1[] = +{ + {2.92,38.0952}, + {7.6819,47.619}, + {17.2057,52.381}, + {26.7295,52.381}, + {36.2533,47.619}, + {55.301,33.3333}, + {64.8248,28.5714}, + {74.3486,28.5714}, + {83.8724,33.3333}, + {88.6343,47.619}, + {88.6343,57.1429} +}; + +static const SFG_StrokeStrip ch126st[] = +{ + {11,ch126st0}, + {11,ch126st1} +}; + +static const SFG_StrokeChar ch126 = {91.2743,2,ch126st}; + +/* char: 0x7f */ + +static const SFG_StrokeVertex ch127st0[] = +{ + {52.381,100}, + {14.2857,-33.3333} +}; + +static const SFG_StrokeVertex ch127st1[] = +{ + {28.5714,66.6667}, + {14.2857,61.9048}, + {4.7619,52.381}, + {0,38.0952}, + {0,23.8095}, + {4.7619,14.2857}, + {14.2857,4.7619}, + {28.5714,0}, + {38.0952,0}, + {52.381,4.7619}, + {61.9048,14.2857}, + {66.6667,28.5714}, + {66.6667,42.8571}, + {61.9048,52.381}, + {52.381,61.9048}, + {38.0952,66.6667}, + {28.5714,66.6667} +}; + +static const SFG_StrokeStrip ch127st[] = +{ + {2,ch127st0}, + {17,ch127st1} +}; + +static const SFG_StrokeChar ch127 = {66.6667,2,ch127st}; + +static const SFG_StrokeChar *chars[] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + &ch32, &ch33, &ch34, &ch35, &ch36, &ch37, &ch38, &ch39, + &ch40, &ch41, &ch42, &ch43, &ch44, &ch45, &ch46, &ch47, + &ch48, &ch49, &ch50, &ch51, &ch52, &ch53, &ch54, &ch55, + &ch56, &ch57, &ch58, &ch59, &ch60, &ch61, &ch62, &ch63, + &ch64, &ch65, &ch66, &ch67, &ch68, &ch69, &ch70, &ch71, + &ch72, &ch73, &ch74, &ch75, &ch76, &ch77, &ch78, &ch79, + &ch80, &ch81, &ch82, &ch83, &ch84, &ch85, &ch86, &ch87, + &ch88, &ch89, &ch90, &ch91, &ch92, &ch93, &ch94, &ch95, + &ch96, &ch97, &ch98, &ch99, &ch100, &ch101, &ch102, &ch103, + &ch104, &ch105, &ch106, &ch107, &ch108, &ch109, &ch110, &ch111, + &ch112, &ch113, &ch114, &ch115, &ch116, &ch117, &ch118, &ch119, + &ch120, &ch121, &ch122, &ch123, &ch124, &ch125, &ch126, &ch127 +}; + +const SFG_StrokeFont fgStrokeRoman = {"Roman",128,152.381,chars}; diff --git a/freeglut/freeglut/genfonts/Roman_M.src b/freeglut/freeglut/genfonts/Roman_M.src index 45717a5..7fe3511 100644 --- a/freeglut/freeglut/genfonts/Roman_M.src +++ b/freeglut/freeglut/genfonts/Roman_M.src @@ -24,7 +24,7 @@ # Mono-spaced version of Roman Simplex font. - FONTNAME Roman + FONTNAME MonoRoman TOP 119.0476 BOTTOM -33.3333 NUM_CH 128 diff --git a/freeglut/freeglut/genfonts/lex.l b/freeglut/freeglut/genfonts/lex.l new file mode 100644 index 0000000..121ac37 --- /dev/null +++ b/freeglut/freeglut/genfonts/lex.l @@ -0,0 +1,143 @@ +%{ +/* $XConsortium: lex.l,v 5.9 95/01/05 19:18:40 kaleb Exp $ */ +/* $XFree86: xc/fonts/PEX/lex.l,v 3.9 1996/10/17 15:10:45 dawes Exp $ */ + +/***************************************************************** + +Copyright (c) 1989,1990, 1991 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the X Consortium. + +Copyright (c) 1989,1990, 1991 by Sun Microsystems, Inc. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Sun Microsystems, +and the X Consortium, not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. + +SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT +SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +#include +#include +#include + +int string(char *, int), res_words(char *); + +%} +%% +\'[^']*\' | +\"[^"]*\" return string(yytext, yyleng); +#.* ; +[ ,;\t\n\r]* /* natural dilimters */ ; + +[a-zA-Z][a-zA-Z0-9_.]* { + int token; + if ( (token = res_words(yytext)) ) + return token; + return string(yytext, yyleng); + } + +[+-]?[0-9]+\.?[0-9]*[eE][+-]?[0-9]+ | +[+-]?[0-9]+\.[0-9]* | +\.[0-9]+ { + yylval.dval = atof((char *)yytext); + return REAL; + } +[+-]?[0-9]+#[0-9]+ { + return INTEGER; + } +[+-]?[0-9]+ { + yylval.ival = atoi((char *)yytext); + return INTEGER; + } +[()] ; +%% + +int res_words(char *str) +{ + static struct res_strct { + char *word; + int token; + } res_table[] = { + {"BOTTOM", BOTTOM}, + {"CENTER", CENTER}, + {"PROPERTIES", PROPERTIES}, + {"CLOSE", CLOSE}, + {"FONTNAME", FONTNAME}, + {"INDEX", INDEX}, + {"MAGIC", MAGIC}, + {"OPEN", OPEN}, + {"RIGHT", RIGHT}, + {"STROKE", STROKE}, + {"TOP", TOP}, + {"VERTICES", VERTICES}, + {"BEARING", BEARING}, + {"L_SPACE", L_SPACE}, + {"WIDTH", WIDTH}, + {"R_SPACE", R_SPACE}, + {"NUM_CH", NUM_CH}, + {0, 0} + }; + + { + register struct res_strct *reserved; + + reserved = res_table; + + do + if (!strcmp(str, reserved->word)) + break; + while ((++reserved)->word != 0); + return reserved->token; + } +} + +int string(char *str, int n) +{ + if (*str == '\"' || *str == '\'') + { + str++; + n -= 2; /* one for EOL, one for end quote */ + } + if ((yylval.cval = (char *)malloc(n + 1)) != NULL) + { + strncpy(yylval.cval, str, n); + yylval.cval[n] = '\0'; + return STRING; + } + else + return 0; +} diff --git a/freeglut/freeglut/genfonts/to_stroke.y b/freeglut/freeglut/genfonts/to_stroke.y new file mode 100644 index 0000000..bd1205b --- /dev/null +++ b/freeglut/freeglut/genfonts/to_stroke.y @@ -0,0 +1,659 @@ +%{ +/* $XConsortium: to_wfont.y /main/9 1996/06/11 07:38:48 kaleb $ */ +/* $XFree86: xc/fonts/PEX/to_wfont.y,v 3.6.2.1 1998/12/22 11:23:04 hohndel Exp $ */ + +/***************************************************************** + +Copyright (c) 1989,1990, 1991 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the X Consortium. + +Copyright (c) 1989,1990, 1991 by Sun Microsystems, Inc. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Sun Microsystems, +and the X Consortium, not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. + +SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT +SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + + +#define YYMAXDEPTH 10000 +#define YY_NO_UNPUT + +#include +#include +#include +#include +#include +#ifndef L_SET +#define L_SET SEEK_SET +#endif +#include "wfont.h" + +typedef struct { + float std_left, /* NCGA standard left spacing */ + std_wide, /* character width */ + std_rght; /* Right spacing */ +} Standard; + + +char fname[80]; +Dispatch *Table; /* dispatch table */ +Standard *sp_table; /* NCGA font spacings */ +Path *strokes; /* strokes of each character */ +Property *property; /* property list */ + +struct { + int path, point, props; +} count, expect; + +Path_subpath *current_path; + +Font_header head; /* font header */ +int tableindex; /* which character */ +int yyerrno; /* error number */ + +int yylex(void); + +void yyerror(char *); +void set_num_ch(int); +void init_properties(int); +void check_num_props(void); +void add_property(char *, char *); +void check_num_ch(void); +void wf_header(char *, float, float); +void glyph_header(int, float, float, int); +void std_space(float, float, float); +void init_path(int, int); +void add_point(float, float); +void fini(void); +void freeall(void); +void check_nstroke(void); +void check_npts(void); + +%} + +%union { + int nil; /* void is reserved */ + int ival; + float dval; + char *cval; +} + +%start font + +%token REAL +%token INTEGER +%token STRING + +%token BOTTOM +%token CENTER +%token CLOSE +%token FONTNAME +%token PROPERTIES +%token NUM_CH +%token INDEX +%token L_SPACE +%token MAGIC +%token OPEN +%token RIGHT +%token R_SPACE +%token STROKE +%token TOP +%token VERTICES +%token BEARING +%token WIDTH + +%type fontname +%type top bottom center right +%type nstroke nvertice n_pts index num_ch +%type closeflag +%type counter +%type sp_left wide sp_right + +%% + +font : fontheader num_ch fontprops fontbody spacing { fini(); }| + fontheader fontbody { fini(); }; + +fontheader : fontname top bottom + { wf_header($1, $2, $3); }; + +fontname : FONTNAME STRING + { $$ = $2; }; + +top : TOP REAL { $$ = $2;}; + +bottom : BOTTOM REAL { $$ = $2;}; + +num_ch: NUM_CH INTEGER { set_num_ch($2);}; + +fontprops : /* empty */ | properties; + +properties : PROPERTIES INTEGER { init_properties ($2); } property_list + { check_num_props (); } + +property_list : /* empty */ | single_property property_list + +single_property : STRING STRING { add_property($1, $2); }; + +fontbody : /* empty */ + | glyph fontbody; + +glyph : glyph_header strokes + { check_nstroke(); }; + +glyph_header : index { tableindex = $1; } sym_headinfo; + +sym_headinfo : nstroke center right nvertice + { glyph_header($1, $2, $3, $4); }; + +index : INDEX INTEGER { check_num_ch(); $$ = $2; }; + +nstroke : STROKE INTEGER { $$ = $2; expect.path = $2; }; + +nvertice: {$$ = 0;} | VERTICES INTEGER { $$ = $2; } ; + +center : CENTER REAL{ $$ = $2; }; + +right : RIGHT REAL{ $$ = $2; }; + +strokes : /* empty */ | path strokes; + +path : closeflag n_pts { init_path($1, $2); } points + { check_npts(); } + +points : /* empty */ | coord points; + +closeflag : CLOSE { $$ = $1 == CLOSE; } | OPEN { $$ = $1 == CLOSE; } ; + +n_pts : INTEGER { $$ = $1; }; + +coord : REAL REAL { add_point($1, $2); }; + +spacing : /* empty */ + | item spacing; + +item : counter {tableindex = $1;} sp_left wide sp_right + { std_space($3, $4, $5); }; + +counter : BEARING INTEGER {$$ = $2;}; + +sp_left: L_SPACE REAL {$$ = $2;}; + +wide : WIDTH REAL {$$ = $2;}; + +sp_right: R_SPACE REAL {$$ = $2;}; + +%% + +#define BYE(err) yyerrno = (err), yyerror(NULL) + +#define ERR_BASE 1000 +#define OPEN_ERROR 1001 +#define WRITE_ERROR 1002 +#define WRONG_NAME 1003 +#define NO_MEMORY 1004 +#define EXCEED_PATH 1005 +#define EXCEED_POINT 1006 +#define PATH_MISMATCH 1007 +#define POINT_MISMATCH 1008 +#define PROP_MISMATCH 1009 +#define EXCEED_PROPS 1010 + +#include "lex.c" + +char *prog; + +int main(int argc, char **argv) +{ + /* Usage : genstroke [-o outfile] [infile] */ + char *s; + + fname[0] = 0; + tableindex = 0; + head.num_ch = -1; + + prog = *argv; + while (--argc > 0 && *++argv != NULL) + { + s = *argv; + if (*s++ == '-') + { + switch (*s) + { + case 'o': + if (*++argv != NULL) + { + --argc; + (void) strcpy(fname, *argv); + } + break; + default: /* ignore other options */ + ; + } + } + else + { + int fd; + + /* standard input redirection */ + fd = open(*argv, O_RDONLY); + if (fd > 0) + { + if (close(fileno(stdin)) < 0) + { + perror(prog); + return (1); + } + if (dup(fd) < 0) + { + perror(prog); + return (1); + } + close(fd); + } + } + } + return (yyparse()); +} + +/* set number of characters */ +void set_num_ch(int num_ch) +{ + yyerrno = 0; + head.num_ch = num_ch; + if (num_ch > 0) + { + Table = (Dispatch *) malloc(num_ch * sizeof(Dispatch)); + sp_table = (Standard *) malloc(num_ch * sizeof(Standard)); + strokes = (Path *) malloc(num_ch * sizeof(Path)); + } + + for (tableindex = 0; tableindex < num_ch; tableindex++) + { + Table[tableindex].center = 0.0; + Table[tableindex].right = 0.0; + Table[tableindex].offset = 0; + + sp_table[tableindex].std_left = 0.0; + sp_table[tableindex].std_wide = 0.0; + sp_table[tableindex].std_rght = 0.0; + + strokes[tableindex].n_subpaths = 0; + strokes[tableindex].n_vertices = 0; + strokes[tableindex].subpaths = NULL; + } +} + +/* initialize the property info in the header */ +void init_properties(int num_props) +{ + if (num_props > 0) + { + head.properties = malloc(num_props * sizeof(Property)); + head.num_props = expect.props = num_props; + } + else + { + head.properties = NULL; + head.num_props = expect.props = 0; + } + count.props = -1; + property = head.properties; /* initialize the list pointer */ +} + +void check_num_props(void) +{ + count.props++; + if (count.props != expect.props) + BYE (PROP_MISMATCH); +} + +/* add individual property info into the buffer */ +void add_property(char *name, char *value) +{ + /* check if the property exceeds allocated space */ + + if (++count.props >= head.num_props) + BYE(EXCEED_PROPS); + + /* copy the strings into the buffer */ + + (void) strcpy(property->propname, name); + (void) strcpy(property->propvalue, value); + + /* increment the property pointer */ + + property++; +} + +void check_num_ch(void) +{ + if (head.num_ch == -1) + set_num_ch(128); +} + +void yyerror(char *str) +{ +# define ERR_SIZE (sizeof(err_string) / sizeof(char *)) + static char *err_string[] = { + "Cannot open file", + "Write fails", + "Illegal font name", + "Memory allocation failure", + "Specified number of strokes exceeded", + "Specified number of points exceeded", + "Number of strokes do not match", + "Number of points do not match", + "Number of properties do not match", + "Specified number of properties exceeded", + 0}; + + if (str == NULL) + { + yyerrno -= ERR_BASE; + if (yyerrno > 0 && yyerrno < ERR_SIZE) + str = err_string[yyerrno-1]; + else + str = "Syntax error"; + } + fprintf(stderr, "%s.\n", str); + freeall(); + (void) unlink(fname); + exit(1); +} + +/* create wfont header */ +void wf_header(char *name, float top, float bottom) +{ + if (name == NULL) + BYE(WRONG_NAME); + head.top = top; + head.bottom = bottom; + head.magic = WFONT_MAGIC_PEX; + (void) strcpy(head.name, name); + free(name); +} + +/* create header for each glyph */ +void glyph_header(int npath, float center, float right, int npts) +{ + { + register Path *strk = strokes + tableindex; + + if (npath > 0) /* Don't allocate space unless the character + has strokes associated with it. */ + { + strk->subpaths = malloc(npath * sizeof(Path_subpath)); + + if (strk->subpaths == NULL) + BYE(NO_MEMORY); + + strk->type = PATH_2DF; + strk->n_subpaths = npath; + strk->n_vertices = npts; + } + else /* Just initialize the entry */ + { + strk->subpaths = NULL; + strk->type = PATH_2DF; + strk->n_subpaths = 0; + strk->n_vertices = 0; + } + } + { + register Dispatch *tbl = Table + tableindex; + + tbl->offset = 0; + tbl->center = center; + tbl->right = right; + } + count.path = -1; /* initialize path counter, not to + * exceed n_subpath */ +} + +/* create standard spacing info for each glyph */ +void std_space(float l_bear, float wide, float r_bear) +{ + register Standard *tbl = sp_table + tableindex; + tbl->std_left = l_bear; + tbl->std_wide = wide; + tbl->std_rght = r_bear; +} + +/* initialize each sub_path */ +void init_path(int close, int n) +{ + register Path_subpath *path; + + if (++count.path >= strokes[tableindex].n_subpaths) + BYE(EXCEED_PATH); + path = current_path = strokes[tableindex].subpaths + count.path; + path->n_pts = n; + path->closed = close; + if (n > 0) + path->pts.pt2df = malloc(n * sizeof(Path_point2df)); + if (path->pts.pt2df == NULL) + BYE(NO_MEMORY); + expect.point = path->n_pts; + count.point = -1; /* initialize point counter, not to + * exceed n_pts */ +} + +/* accumulating points for each sub_path */ +void add_point(float x, float y) +{ + register Path_subpath *path; + register Path_point2df *pt_ptr; + + path = current_path; + if (++count.point >= path->n_pts) + BYE(EXCEED_POINT); + pt_ptr = path->pts.pt2df + count.point; + pt_ptr->x = x; + pt_ptr->y = y; +} + +/* Path_type + n_subpaths + n_vertices */ +#define STROKE_HEAD (sizeof(Path_type) + sizeof(int) + sizeof(int)) + +/* write out file, close everything, free everything */ +void fini(void) +{ + /* pointers used to walk the arrays */ + register Path_subpath *spath; + register Dispatch *tbl_ptr; + register Path *strptr; + + FILE *fp; + int npath; + register int i, j, k; + Standard *sp_ptr; + Path_point2df *pt; + + if (fname[0] == 0) /* default output file name */ + { + (void) strcpy(fname, head.name); + (void) strcat(fname, ".c"); + } + + if ((fp = fopen(fname, "w")) == NULL) + BYE(OPEN_ERROR); + + fprintf(fp, "\n/* This file has been automatically generated by the genstroke utility. */\n"); + fprintf(fp, "\n#include \"../include/GL/freeglut_internal.h\"\n"); + +# define BY_BYE(err) fclose(fp), BYE(err) + + /* adjust the characters for spacing, note max char width */ + head.max_width = 0.0; + for (i = 0, tbl_ptr = Table, strptr = strokes, sp_ptr = sp_table; + i < head.num_ch; i++, tbl_ptr++, strptr++, sp_ptr++) + { + tbl_ptr->center += sp_ptr->std_left; + tbl_ptr->right += sp_ptr->std_left + sp_ptr->std_rght; + if (tbl_ptr->right > head.max_width) + head.max_width = tbl_ptr->right; + npath = strptr->n_subpaths; + if (npath > 0 || tbl_ptr->center != 0.0 || + tbl_ptr->right != 0.0) + { + for (j = 0, spath = strptr->subpaths; + j < npath; j++, spath++) + { + for(k=0, pt = spath->pts.pt2df; + kn_pts; k++, pt++) + { + pt->x += sp_ptr->std_left; + } + } + } + } + + /* write the stroke table */ + for (i = 0, tbl_ptr = Table, strptr = strokes; + i < head.num_ch; i++, tbl_ptr++, strptr++) + { + npath = strptr->n_subpaths; + + if (npath > 0 || tbl_ptr->center != 0.0 || + tbl_ptr->right != 0.0) + { + fprintf(fp, "\n/* char: 0x%x */\n", i); + + for (j = 0, spath = strptr->subpaths; + j < npath; j++, spath++) + { + fprintf(fp, "\nstatic const SFG_StrokeVertex ch%ust%u[] =\n{\n", i, j); + for(k = 0; k < spath->n_pts; k++) + { + fprintf(fp, " {%g,%g}%s\n", + spath->pts.pt2df[k].x, + spath->pts.pt2df[k].y, + k+1 < spath->n_pts ? "," : ""); + } + fprintf(fp, "};\n"); + } + + fprintf(fp, "\nstatic const SFG_StrokeStrip ch%ust[] =\n{\n", i); + for (j = 0, spath = strptr->subpaths; + j < npath; j++, spath++) + { + fprintf(fp, " {%u,ch%ust%u}%s\n", + spath->n_pts, i, j, + j+1 < npath ? "," : ""); + } + fprintf(fp, "};\n"); + + fprintf(fp, "\nstatic const SFG_StrokeChar ch%u = {%g,%u,ch%ust};\n", + i, tbl_ptr->right, npath, i); + } + } + + fprintf(fp, "\nstatic const SFG_StrokeChar *chars[] =\n{\n"); + + for (i = 0, tbl_ptr = Table, strptr = strokes; + i < head.num_ch; ) + { + for (j = 0; j < 8 && i < head.num_ch; + j++, i++, tbl_ptr++, strptr++) + { + fprintf(fp, " "); + npath = strptr->n_subpaths; + if (npath > 0 || tbl_ptr->center != 0.0 || + tbl_ptr->right != 0.0) + fprintf(fp, "&ch%u", i); + else + fprintf(fp, "0"); + if (i+1 < head.num_ch) + fprintf(fp, ","); + } + fprintf(fp, "\n"); + } + fprintf(fp, "};\n"); + + fprintf(fp, "\nconst SFG_StrokeFont fgStroke%s = {\"%s\",%d,%g,chars};\n", + head.name, head.name, head.num_ch, head.top - head.bottom); + + (void) fclose(fp); + freeall(); +# undef BY_BYE +} + +void freeall(void) +{ + register Path *path; + register Path_subpath *spath; + register int i, j, n; + + path = strokes; + for (i = 0; i < head.num_ch; i++, path++) + { + n = path->n_subpaths; + if (n <= 0) + continue; + spath = path->subpaths; + for (j = 0; j < n; j++, spath++) + if (spath->pts.pt2df != NULL) + free((char *) spath->pts.pt2df); + if (path->subpaths != NULL) + free((char *) path->subpaths); + } + if (Table) + free(Table); + if (sp_table) + free(sp_table); + if (strokes) + free(strokes); + if (head.properties != NULL) + free((char *) head.properties); +} + +void check_nstroke(void) +{ + count.path++; + if (expect.path != count.path) + BYE(PATH_MISMATCH); +} + +void check_npts(void) +{ + count.point++; + if (expect.point != count.point) + BYE(POINT_MISMATCH); +} diff --git a/freeglut/freeglut/genfonts/wfont.h b/freeglut/freeglut/genfonts/wfont.h new file mode 100644 index 0000000..0bcf8f6 --- /dev/null +++ b/freeglut/freeglut/genfonts/wfont.h @@ -0,0 +1,164 @@ +/* $XConsortium: wfont.h,v 5.2 94/04/17 20:10:09 rws Exp $ */ + +/***************************************************************** + +Copyright (c) 1989,1990, 1991 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the X Consortium. + +Copyright (c) 1989,1990, 1991 by Sun Microsystems, Inc. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Sun Microsystems, +and the X Consortium, not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. + +SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT +SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + + +#ifndef WFONT_INCLUDED +#define WFONT_INCLUDED + +#define WFONT_MAGIC 0x813 +#define WFONT_MAGIC_PLUS 0x715 +#define WFONT_MAGIC_PEX 0x70686e74 +#define START_PROPS 0x100 +#define START_DISPATCH(_num_props) (START_PROPS + 160 * _num_props) +#define START_PATH(_num_ch_, _num_props) (START_DISPATCH(_num_props) + sizeof(Dispatch) * _num_ch_) +#define NUM_DISPATCH 128 + +typedef struct { + unsigned short x; + unsigned short y; +} Path_point2dpx; + +typedef struct { + float x; + float y; +} Path_point2df; + +typedef struct { + int x; + int y; + int z; +} Path_point3di; + +typedef struct { + float x; + float y; + float z; +} Path_point3df; + +typedef struct { + float x; + float y; + float z; + float w; +} Path_point4df; + +typedef union { + Path_point2dpx *pt2dpx; + Path_point2df *pt2df; + Path_point3di *pt3di; + Path_point3df *pt3df; + Path_point4df *pt4df; +} Path_pt_ptr; + +typedef enum { + PATH_2DF, + PATH_2DPX, + PATH_3DF, + PATH_3DI, + PATH_4DF +} Path_type; + +typedef struct { + int n_pts; /* number of points in the subpath */ + Path_pt_ptr pts; /* pointer to them */ + int closed; /* true if the subpath is closed */ + int dcmp_flag; /* flag for pgon dcmp, pgon type + and dcmped triangle type */ +} Path_subpath; + +typedef struct { + Path_type type; /* type of vertices in this path */ + int n_subpaths; /* number of subpaths */ + int n_vertices; /* total number of vertices */ + Path_subpath *subpaths; /* array of subpaths */ +} Path; + +typedef Path *Path_handle; + +typedef struct { + char propname[80]; /* font property name */ + char propvalue[80]; /* font property value */ +}Property; + +typedef struct { + int magic; /* magic number */ + char name[80]; /* name of this font */ + float top, /* extreme values */ + bottom, + max_width; + int num_ch; /* no. of fonts in the set */ + int num_props; /* no. of font properties */ + Property *properties; /* array of properties */ +} Font_header; + +typedef struct { + float center, /* center of the character */ + right; /* right edge */ + long offset; /* offset in the file of the character + * description*/ +} Dispatch; + + +typedef struct { + float center, + right; + Path strokes; +} Ch_font; + +typedef struct { + char name[80]; + float top, + bottom, + max_width; + int num_ch; /* # characters in the font*/ + Ch_font **ch_data; +} Phg_font; + +#endif /*WFONT_INCLUDED*/ diff --git a/freeglut/freeglut/include/GL/freeglut.h b/freeglut/freeglut/include/GL/freeglut.h index 7dd8659..3a7faa3 100644 --- a/freeglut/freeglut/include/GL/freeglut.h +++ b/freeglut/freeglut/include/GL/freeglut.h @@ -447,7 +447,7 @@ FGAPI int FGAPIENTRY glutStrokeWidth( void* font, int character ); FGAPI int FGAPIENTRY glutBitmapLength( void* font, const char* string ); FGAPI int FGAPIENTRY glutStrokeLength( void* font, const char* string ); FGAPI int FGAPIENTRY glutBitmapHeight( void* font ); -FGAPI int FGAPIENTRY glutStrokeHeight( void* font ); +FGAPI GLfloat FGAPIENTRY glutStrokeHeight( void* font ); FGAPI void FGAPIENTRY glutBitmapString( void* font, const char *string ); FGAPI void FGAPIENTRY glutStrokeString( void* font, const char *string ); diff --git a/freeglut/freeglut/include/GL/freeglut_internal.h b/freeglut/freeglut/include/GL/freeglut_internal.h index f5bb1af..8c46ee0 100644 --- a/freeglut/freeglut/include/GL/freeglut_internal.h +++ b/freeglut/freeglut/include/GL/freeglut_internal.h @@ -443,6 +443,39 @@ struct tagSFG_Font const GLubyte** Characters; /* The characters mapping */ }; +/* + * The stroke font structures + */ + +typedef struct tagSFG_StrokeVertex SFG_StrokeVertex; +struct tagSFG_StrokeVertex +{ + GLfloat X, Y; +}; + +typedef struct tagSFG_StrokeStrip SFG_StrokeStrip; +struct tagSFG_StrokeStrip +{ + int Number; + const SFG_StrokeVertex* Vertices; +}; + +typedef struct tagSFG_StrokeChar SFG_StrokeChar; +struct tagSFG_StrokeChar +{ + GLfloat Right; + int Number; + const SFG_StrokeStrip* Strips; +}; + +typedef struct tagSFG_StrokeFont SFG_StrokeFont; +struct tagSFG_StrokeFont +{ + char* Name; /* The source font name */ + int Quantity; /* Number of chars in font */ + GLfloat Height; /* Height of the characters */ + const SFG_StrokeChar** Characters; /* The characters mapping */ +}; /* -- GLOBAL VARIABLES EXPORTS --------------------------------------------- */