commit 2c7cc0faaf79742d021f72e103b4d828a581df4e from: wkj date: Wed Apr 21 05:56:24 2004 UTC Document recent changes. Make lex really compile in rsc's world. commit - 7ac9b0e140bed0b34dc88674b3098caa5e193acf commit + 2c7cc0faaf79742d021f72e103b4d828a581df4e blob - e9a518ab1b925a1eee967cda4ac645930e9f9131 blob + dcea66fed2602c7d96b27189f0f369dfda581dd0 --- CHANGES +++ CHANGES @@ -1,3 +1,13 @@ +April 21, 2004 + import assembler routines for libmp and libsec + on x86 from william josephson's tree + + add truerand which uses /dev/random to seed PRG + + add aescbc, astro, lex, and tcs + + import man9 from william josephson's version of the port + April 19, 2004 lots of man page updates. blob - /dev/null blob + a87030b354bd5195e1dec34b27d92e48ed0065d1 (mode 644) --- /dev/null +++ lib/lex/ncform @@ -0,0 +1,184 @@ +#pragma lib "libl.a" +int yylineno =1; +# define YYU(x) x +char yytext[YYLMAX]; +struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp; +Uchar yysbuf[YYLMAX]; +Uchar *yysptr = yysbuf; +int *yyfnd; +extern struct yysvf *yyestate; +int yyprevious = YYNEWLINE; +# ifdef LEXDEBUG +extern void allprint(char); +# endif +yylook(void){ + struct yysvf *yystate, **lsp; + struct yywork *yyt; + struct yysvf *yyz; + int yych; + struct yywork *yyr; +# ifdef LEXDEBUG + int debug; +# endif + Uchar *yylastch; + /* start off machines */ +# ifdef LEXDEBUG + debug = 0; +# endif + if (!yymorfg) + yylastch = (Uchar*)yytext; + else { + yymorfg=0; + yylastch = (Uchar*)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){ /* may not be any transitions */ + yyz = yystate->yyother; + if(yyz == 0)break; + if(yyz->yystoff == yycrank)break; + } + *yylastch++ = yych = input(); + tryagain: +# ifdef LEXDEBUG + if(debug){ + fprintf(yyout,"char "); + allprint(yych); + putchar('\n'); + } +# endif + yyr = yyt; + if ( (int)yyt > (int)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; + goto contin; + } + } +# ifdef YYOPTIM + else if((int)yyt < (int)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; + 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; + 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 = yylastch-(Uchar*)yytext+1; + yytext[yyleng] = 0; +# ifdef LEXDEBUG + if(debug){ + fprintf(yyout,"\nmatch '%s'", yytext); + fprintf(yyout," action %d\n",*yyfnd); + } +# endif + return(*yyfnd++); + } + unput(*yylastch); + } + if (yytext[0] == 0 /* && feof(yyin) */) + { + yysptr=yysbuf; + return(0); + } + yyprevious = input(); + yytext[0] = yyprevious; + if (yyprevious>0) + output(yyprevious); + yylastch = (Uchar*)yytext; +# ifdef LEXDEBUG + if(debug)putchar('\n'); +# endif + } + return(0); /* shut up the compiler; i have no idea what should be returned */ + } +yyback(int *p, int m) +{ +if (p==0) return(0); +while (*p) + { + if (*p++ == m) + return(1); + } +return(0); +} + /* the following are only used in the lex library */ +yyinput(void){ + return(input()); +} +void +yyoutput(int c) +{ + output(c); +} +void +yyunput(int c) +{ + unput(c); +} blob - ec43869a2e8f4ed597dff5be54d4d3393269c0b2 blob + a98978c6e43db3d59b1f2dbd9ff75dfa703174fc --- src/cmd/lex/lmain.c +++ src/cmd/lex/lmain.c @@ -14,7 +14,7 @@ int peek = '\n'; /* next input character */ uchar *pushptr = pushc; uchar *slptr = slist; -char *cname = SYS9 "/sys/lib/lex/ncform"; +char *cname; int nine; int ccount = 1; @@ -95,6 +95,8 @@ main(int argc, char **argv) { int i; + cname = unsharp("#9/lib/lex/ncform"); + ARGBEGIN { # ifdef DEBUG case 'd': debug++; break; blob - a748409ff42d632958e40e11a00664bf8199fda3 blob + ffcf875d5e5e0306348a428a4bdc2467b01cc7d7 --- src/cmd/lex/mkfile +++ src/cmd/lex/mkfile @@ -1,7 +1,6 @@ <$PLAN9/src/mkhdr -#TARG=lex -TARG=lex.9 +TARG=9lex OFILES=lmain.$O\ y.tab.$O\ sub1.$O\ blob - 350769ef07462b0a44b9dfc0abfbb84cb21d7bf1 blob + 477ca474b498ab081372bd7052a4bb6c0ab337f4 --- src/cmd/mkfile +++ src/cmd/mkfile @@ -6,7 +6,7 @@ SHORTLIB=sec fs mux regexp9 draw thread bio 9 <$PLAN9/src/mkmany -BUGGERED='CVS|faces|factotum|mailfs|mk|upas|vac|venti|lex' +BUGGERED='CVS|faces|factotum|mailfs|mk|upas|vac|venti' DIRS=`ls -l |sed -n 's/^d.* //p' |egrep -v "^($BUGGERED)$"` <$PLAN9/src/mkdirs