home *** CD-ROM | disk | FTP | other *** search
- # include "stdio.h"
- # define U(x) ((unsigned char)(x))
- # define NLSTATE yyprevious=YYNEWLINE
- # define BEGIN yybgin = yysvec + 1 +
- # define INITIAL 0
- # define YYLERR yysvec
- # define YYSTATE (yyestate-yysvec-1)
- # define YYOPTIM 1
- # define YYLMAX 2048
- # define output(c) (void)putc(c,yyout)
- #if defined(__cplusplus) || defined(__STDC__)
-
- #ifdef __cplusplus
- extern "C" {
- #endif
- int yylex(void);
- int yyback(int *, int);
- int yyinput(void);
- int yylook(void);
- void yyoutput(int);
- int yyracc(int);
- int yyreject(void);
- void yyunput(int);
- #ifndef yyless
- void yyless(long int);
- #endif
- #ifndef yywrap
- int yywrap(void);
- #endif
- #ifdef __cplusplus
- }
- #endif
-
- #endif
-
- # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
- # define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
- # define yymore() (yymorfg=1)
- # define ECHO (void)fprintf(yyout, "%s",yytext)
- # define REJECT { nstr = yyreject(); goto yyfussy;}
- int yyleng; extern char yytext[];
- int yymorfg;
- extern char *yysptr, yysbuf[];
- int yytchar;
- FILE *yyin = {stdin}, *yyout = {stdout};
- extern int yylineno;
- struct yysvf {
- struct yywork *yystoff;
- struct yysvf *yyother;
- int *yystops;};
- struct yysvf *yyestate;
- extern struct yysvf yysvec[], *yybgin;
-
- # line 2 "strokelex.l"
-
- # line 3 "strokelex.l"
- /* $XConsortium: lex.l,v 5.4 91/08/26 10:55:26 gildea Exp $ */
-
-
- # line 5 "strokelex.l"
- /*****************************************************************
- Copyright (c) 1989,1990, 1991 by Sun Microsystems, Inc. and the X Consortium.
-
- 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,
- the X Consortium, and MIT 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 <stdlib.h>
- #include <ctype.h>
- #include <math.h>
- #include "strokegen.h"
-
- #if defined(ISC) && defined(SYSV) && defined(SYSV386) && __STDC__
- extern double atof(char *);
- #endif
-
- #ifdef FLEX_SCANNER
- int yylineno;
- #endif
-
- # define YYNEWLINE 10
- yylex(void){
- int nstr; extern int yyprevious;
- while((nstr = yylook()) >= 0)
- yyfussy: switch(nstr){
- case 0:
- if(yywrap()) return(0); break;
- case 1:
-
- # line 44 "strokelex.l"
- case 2:
-
- # line 45 "strokelex.l"
- return string(yytext, yyleng);
- break;
- case 3:
-
- # line 46 "strokelex.l"
- ;
- break;
- case 4:
-
- # line 47 "strokelex.l"
- /* natural dilimters */ ;
- break;
- case 5:
-
- # line 49 "strokelex.l"
- {
- int token;
- if (token = res_words(yytext))
- return token;
- return string(yytext, yyleng);
- }
- break;
- case 6:
-
- # line 56 "strokelex.l"
- case 7:
-
- # line 57 "strokelex.l"
- case 8:
-
- # line 58 "strokelex.l"
- {
- yylval.dval = atof(yytext);
- return REAL;
- }
- break;
- case 9:
-
- # line 62 "strokelex.l"
- {
- return INTEGER;
- }
- break;
- case 10:
-
- # line 65 "strokelex.l"
- {
- yylval.ival = atoi(yytext);
- return INTEGER;
- }
- break;
- case 11:
-
- # line 69 "strokelex.l"
- ;
- break;
- case -1:
- break;
- default:
- (void)fprintf(yyout,"bad switch yylook %d",nstr);
- } return(0); }
- /* end of yylex */
-
- # line 71 "strokelex.l"
-
- int
- res_words(str)
- 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(str, n)
- 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;
- }
- int yyvstop[] = {
- 0,
-
- 4,
- 0,
-
- 4,
- 0,
-
- 4,
- 0,
-
- 3,
- 0,
-
- 11,
- 0,
-
- 10,
- 0,
-
- 5,
- 0,
-
- 2,
- 0,
-
- 1,
- 0,
-
- 8,
- 0,
-
- 7,
- 0,
-
- 9,
- 0,
-
- 6,
- 0,
- 0};
- # define YYTYPE unsigned char
- struct yywork { YYTYPE verify, advance; } yycrank[] = {
- 0,0, 0,0, 0,0, 0,0,
- 0,0, 0,0, 0,0, 0,0,
- 0,0, 0,0, 1,3, 1,3,
- 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,
- 0,0, 0,0, 0,0, 0,0,
- 0,0, 1,3, 0,0, 1,4,
- 1,5, 0,0, 0,0, 0,0,
- 1,6, 1,7, 1,7, 0,0,
- 1,8, 1,3, 1,8, 1,9,
- 0,0, 1,10, 1,10, 1,10,
- 1,10, 1,10, 1,10, 1,10,
- 1,10, 1,10, 1,10, 0,0,
- 1,3, 0,0, 0,0, 0,0,
- 0,0, 0,0, 1,11, 1,11,
- 1,11, 1,11, 1,11, 1,11,
- 1,11, 1,11, 1,11, 1,11,
- 1,11, 1,11, 1,11, 1,11,
- 1,11, 1,11, 1,11, 1,11,
- 1,11, 1,11, 1,11, 1,11,
- 1,11, 1,11, 1,11, 1,11,
- 0,0, 0,0, 0,0, 0,0,
- 0,0, 0,0, 1,11, 1,11,
- 1,11, 1,11, 1,11, 1,11,
- 1,11, 1,11, 1,11, 1,11,
- 1,11, 1,11, 1,11, 1,11,
- 1,11, 1,11, 1,11, 1,11,
- 1,11, 1,11, 1,11, 1,11,
- 1,11, 1,11, 1,11, 1,11,
- 3,3, 3,3, 0,0, 0,0,
- 4,4, 0,0, 0,0, 0,0,
- 0,0, 0,0, 10,15, 0,0,
- 4,4, 4,4, 0,0, 0,0,
- 0,0, 0,0, 0,0, 5,5,
- 0,0, 10,16, 0,0, 3,3,
- 0,0, 0,0, 0,0, 5,5,
- 5,0, 0,0, 0,0, 0,0,
- 6,6, 0,0, 0,0, 3,3,
- 0,0, 4,12, 0,0, 0,0,
- 6,6, 6,6, 4,4, 4,4,
- 10,17, 0,0, 4,4, 0,0,
- 0,0, 4,4, 3,3, 4,4,
- 5,5, 0,0, 0,0, 0,0,
- 0,0, 5,5, 5,5, 0,0,
- 0,0, 5,5, 0,0, 0,0,
- 5,5, 6,6, 5,5, 0,0,
- 4,4, 0,0, 6,13, 6,6,
- 4,4, 0,0, 6,6, 0,0,
- 10,17, 6,6, 0,0, 6,6,
- 0,0, 0,0, 0,0, 5,5,
- 0,0, 0,0, 0,0, 5,5,
- 0,0, 0,0, 0,0, 0,0,
- 0,0, 0,0, 0,0, 0,0,
- 6,6, 0,0, 0,0, 0,0,
- 6,6, 8,10, 8,10, 8,10,
- 8,10, 8,10, 8,10, 8,10,
- 8,10, 8,10, 8,10, 9,14,
- 9,14, 9,14, 9,14, 9,14,
- 9,14, 9,14, 9,14, 9,14,
- 9,14, 11,11, 0,0, 11,11,
- 11,11, 11,11, 11,11, 11,11,
- 11,11, 11,11, 11,11, 11,11,
- 11,11, 0,0, 0,0, 0,0,
- 0,0, 0,0, 0,0, 0,0,
- 11,11, 11,11, 11,11, 11,11,
- 11,11, 11,11, 11,11, 11,11,
- 11,11, 11,11, 11,11, 11,11,
- 11,11, 11,11, 11,11, 11,11,
- 11,11, 11,11, 11,11, 11,11,
- 11,11, 11,11, 11,11, 11,11,
- 11,11, 11,11, 0,0, 0,0,
- 0,0, 0,0, 11,11, 0,0,
- 11,11, 11,11, 11,11, 11,11,
- 11,11, 11,11, 11,11, 11,11,
- 11,11, 11,11, 11,11, 11,11,
- 11,11, 11,11, 11,11, 11,11,
- 11,11, 11,11, 11,11, 11,11,
- 11,11, 11,11, 11,11, 11,11,
- 11,11, 11,11, 15,18, 15,18,
- 15,18, 15,18, 15,18, 15,18,
- 15,18, 15,18, 15,18, 15,18,
- 16,16, 16,16, 16,16, 16,16,
- 16,16, 16,16, 16,16, 16,16,
- 16,16, 16,16, 0,0, 0,0,
- 0,0, 0,0, 0,0, 0,0,
- 0,0, 17,19, 0,0, 17,19,
- 0,0, 16,17, 17,20, 17,20,
- 17,20, 17,20, 17,20, 17,20,
- 17,20, 17,20, 17,20, 17,20,
- 19,20, 19,20, 19,20, 19,20,
- 19,20, 19,20, 19,20, 19,20,
- 19,20, 19,20, 0,0, 0,0,
- 0,0, 0,0, 0,0, 0,0,
- 0,0, 0,0, 0,0, 0,0,
- 0,0, 16,17, 0,0, 0,0,
- 0,0};
- struct yysvf yysvec[] = {
- 0, 0, 0,
- yycrank+1, 0, yyvstop+1,
- yycrank+0, yysvec+1, yyvstop+3,
- yycrank+115, 0, yyvstop+5,
- yycrank+-127, 0, 0,
- yycrank+-142, 0, yyvstop+7,
- yycrank+-155, 0, 0,
- yycrank+0, 0, yyvstop+9,
- yycrank+177, 0, 0,
- yycrank+187, 0, 0,
- yycrank+99, yysvec+8, yyvstop+11,
- yycrank+199, 0, yyvstop+13,
- yycrank+0, 0, yyvstop+15,
- yycrank+0, 0, yyvstop+17,
- yycrank+0, yysvec+9, yyvstop+19,
- yycrank+274, 0, 0,
- yycrank+284, 0, yyvstop+21,
- yycrank+306, 0, 0,
- yycrank+0, yysvec+15, yyvstop+23,
- yycrank+316, 0, 0,
- yycrank+0, yysvec+19, yyvstop+25,
- 0, 0, 0};
- struct yywork *yytop = yycrank+385;
- struct yysvf *yybgin = yysvec+1;
- unsigned char yymatch[] = {
- 00 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,011 ,012 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 011 ,01 ,'"' ,01 ,01 ,01 ,01 ,047 ,
- '(' ,'(' ,01 ,'+' ,011 ,'+' ,'.' ,01 ,
- '0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,
- '0' ,'0' ,01 ,011 ,01 ,01 ,01 ,01 ,
- 01 ,'A' ,'A' ,'A' ,'A' ,'E' ,'A' ,'A' ,
- 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
- 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
- 'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,'.' ,
- 01 ,'A' ,'A' ,'A' ,'A' ,'E' ,'A' ,'A' ,
- 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
- 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
- 'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
- 0};
- char yyextra[] = {
- 0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,
- 0};
- #ident "$Revision: 1.9 $"
-
- int yylineno =1;
- # define YYU(x) x
- # define NLSTATE yyprevious=YYNEWLINE
- char yytext[YYLMAX];
- struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
- char yysbuf[YYLMAX];
- char *yysptr = yysbuf;
- int *yyfnd;
- extern struct yysvf *yyestate;
- int yyprevious = YYNEWLINE;
- #if defined(__cplusplus) || defined(__STDC__)
- int yylook(void)
- #else
- yylook()
- #endif
- {
- register struct yysvf *yystate, **lsp;
- register struct yywork *yyt;
- struct yysvf *yyz;
- int yych, yyfirst;
- struct yywork *yyr;
- # ifdef LEXDEBUG
- int debug;
- # endif
- char *yylastch;
- /* start off machines */
- # ifdef LEXDEBUG
- debug = 0;
- # endif
- yyfirst=1;
- if (!yymorfg)
- yylastch = yytext;
- else {
- yymorfg=0;
- yylastch = yytext+yyleng;
- }
- for(;;){
- lsp = yylstate;
- yyestate = yystate = yybgin;
- if (yyprevious==YYNEWLINE) yystate++;
- for (;;){
- # ifdef LEXDEBUG
- if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
- # endif
- yyt = yystate->yystoff;
- if(yyt == yycrank && !yyfirst){ /* may not be any transitions */
- yyz = yystate->yyother;
- if(yyz == 0)break;
- if(yyz->yystoff == yycrank)break;
- }
- *yylastch++ = yych = input();
- #ifndef LONGLINES
- if(yylastch > &yytext[YYLMAX]) {
- fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
- exit(1);
- }
- #endif
- yyfirst=0;
- tryagain:
- # ifdef LEXDEBUG
- if(debug){
- fprintf(yyout,"char ");
- allprint(yych);
- putchar('\n');
- }
- # endif
- yyr = yyt;
- if ( (void *)yyt > (void *)yycrank){
- yyt = yyr + yych;
- if (yyt <= yytop && yyt->verify+yysvec == yystate){
- if(yyt->advance+yysvec == YYLERR) /* error transitions */
- {unput(*--yylastch);break;}
- *lsp++ = yystate = yyt->advance+yysvec;
- #ifndef LONGLINES
- if(lsp > &yylstate[YYLMAX]) {
- fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
- exit(1);
- }
- #endif
- goto contin;
- }
- }
- # ifdef YYOPTIM
- else if((void *)yyt < (void *)yycrank) { /* r < yycrank */
- yyt = yyr = yycrank+(yycrank-yyt);
- # ifdef LEXDEBUG
- if(debug)fprintf(yyout,"compressed state\n");
- # endif
- yyt = yyt + yych;
- if(yyt <= yytop && yyt->verify+yysvec == yystate){
- if(yyt->advance+yysvec == YYLERR) /* error transitions */
- {unput(*--yylastch);break;}
- *lsp++ = yystate = yyt->advance+yysvec;
- #ifndef LONGLINES
- if(lsp > &yylstate[YYLMAX]) {
- fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
- exit(1);
- }
- #endif
- goto contin;
- }
- yyt = yyr + YYU(yymatch[yych]);
- # ifdef LEXDEBUG
- if(debug){
- fprintf(yyout,"try fall back character ");
- allprint(YYU(yymatch[yych]));
- putchar('\n');
- }
- # endif
- if(yyt <= yytop && yyt->verify+yysvec == yystate){
- if(yyt->advance+yysvec == YYLERR) /* error transition */
- {unput(*--yylastch);break;}
- *lsp++ = yystate = yyt->advance+yysvec;
- #ifndef LONGLINES
- if(lsp > &yylstate[YYLMAX]) {
- fprintf(yyout,"Input string too long, limit %d\n",YYLMAX);
- exit(1);
- }
- #endif
- goto contin;
- }
- }
- if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
- # ifdef LEXDEBUG
- if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
- # endif
- goto tryagain;
- }
- # endif
- else
- {unput(*--yylastch);break;}
- contin:
- # ifdef LEXDEBUG
- if(debug){
- fprintf(yyout,"state %d char ",yystate-yysvec-1);
- allprint(yych);
- putchar('\n');
- }
- # endif
- ;
- }
- # ifdef LEXDEBUG
- if(debug){
- fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
- allprint(yych);
- putchar('\n');
- }
- # endif
- while (lsp-- > yylstate){
- *yylastch-- = 0;
- if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
- yyolsp = lsp;
- if(yyextra[*yyfnd]){ /* must backup */
- while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
- lsp--;
- unput(*yylastch--);
- }
- }
- yyprevious = YYU(*yylastch);
- yylsp = lsp;
- yyleng = (int)(yylastch-yytext+1);
- yytext[yyleng] = 0;
- # ifdef LEXDEBUG
- if(debug){
- fprintf(yyout,"\nmatch ");
- sprint(yytext);
- fprintf(yyout," action %d\n",*yyfnd);
- }
- # endif
- return(*yyfnd++);
- }
- unput(*yylastch);
- }
- if (yytext[0] == 0 /* && feof(yyin) */)
- {
- yysptr=yysbuf;
- return(0);
- }
- yyprevious = yytext[0] = input();
- if (yyprevious>0)
- output(yyprevious);
- yylastch=yytext;
- # ifdef LEXDEBUG
- if(debug)putchar('\n');
- # endif
- }
- }
- #if defined(__cplusplus) || defined(__STDC__)
- int yyback(int *p, int m)
- #else
- yyback(p, m)
- int *p;
- #endif
- {
- if (p==0) return(0);
- while (*p) {
- if (*p++ == m)
- return(1);
- }
- return(0);
- }
- /* the following are only used in the lex library */
- #if defined(__cplusplus) || defined(__STDC__)
- int yyinput(void)
- #else
- yyinput()
- #endif
- {
- return(input());
- }
- #if defined(__cplusplus) || defined(__STDC__)
- void yyoutput(int c)
- #else
- yyoutput(c)
- int c;
- #endif
- {
- output(c);
- }
- #if defined(__cplusplus) || defined(__STDC__)
- void yyunput(int c)
- #else
- yyunput(c)
- int c;
- #endif
- {
- unput(c);
- }
-