1*219b2ee8SDavid du Colombier # 2*219b2ee8SDavid du Colombier /* 3*219b2ee8SDavid du Colombier * sed -- stream editor 4*219b2ee8SDavid du Colombier * 5*219b2ee8SDavid du Colombier * 6*219b2ee8SDavid du Colombier */ 7*219b2ee8SDavid du Colombier 8*219b2ee8SDavid du Colombier #define CBRA 1 9*219b2ee8SDavid du Colombier #define CCHR 2 10*219b2ee8SDavid du Colombier #define CDOT 4 11*219b2ee8SDavid du Colombier #define CCL 6 12*219b2ee8SDavid du Colombier #define CNL 8 13*219b2ee8SDavid du Colombier #define CDOL 10 14*219b2ee8SDavid du Colombier #define CEOF 11 15*219b2ee8SDavid du Colombier #define CKET 12 16*219b2ee8SDavid du Colombier #define CNULL 13 17*219b2ee8SDavid du Colombier #define CLNUM 14 18*219b2ee8SDavid du Colombier #define CEND 16 19*219b2ee8SDavid du Colombier #define CDONT 17 20*219b2ee8SDavid du Colombier #define CBACK 18 21*219b2ee8SDavid du Colombier 22*219b2ee8SDavid du Colombier #define STAR 01 23*219b2ee8SDavid du Colombier 24*219b2ee8SDavid du Colombier #define NLINES 256 25*219b2ee8SDavid du Colombier #define DEPTH 20 26*219b2ee8SDavid du Colombier #define PTRSIZE 1024 27*219b2ee8SDavid du Colombier #define RESIZE 20000 28*219b2ee8SDavid du Colombier #define ABUFSIZE 20 29*219b2ee8SDavid du Colombier #define LBSIZE 4000 30*219b2ee8SDavid du Colombier #define LABSIZE 50 31*219b2ee8SDavid du Colombier #define NBRA 9 32*219b2ee8SDavid du Colombier 33*219b2ee8SDavid du Colombier typedef unsigned char uchar; 34*219b2ee8SDavid du Colombier 35*219b2ee8SDavid du Colombier FILE *fin; 36*219b2ee8SDavid du Colombier union reptr *abuf[ABUFSIZE]; 37*219b2ee8SDavid du Colombier union reptr **aptr; 38*219b2ee8SDavid du Colombier uchar *lastre; 39*219b2ee8SDavid du Colombier uchar ibuf[512]; 40*219b2ee8SDavid du Colombier uchar *cbp; 41*219b2ee8SDavid du Colombier uchar *ebp; 42*219b2ee8SDavid du Colombier uchar genbuf[LBSIZE]; 43*219b2ee8SDavid du Colombier uchar *loc1; 44*219b2ee8SDavid du Colombier uchar *loc2; 45*219b2ee8SDavid du Colombier uchar *locs; 46*219b2ee8SDavid du Colombier uchar seof; 47*219b2ee8SDavid du Colombier uchar *reend; 48*219b2ee8SDavid du Colombier uchar *lbend; 49*219b2ee8SDavid du Colombier uchar *hend; 50*219b2ee8SDavid du Colombier uchar *lcomend; 51*219b2ee8SDavid du Colombier union reptr *ptrend; 52*219b2ee8SDavid du Colombier int eflag; 53*219b2ee8SDavid du Colombier int dolflag; 54*219b2ee8SDavid du Colombier int sflag; 55*219b2ee8SDavid du Colombier int jflag; 56*219b2ee8SDavid du Colombier int numbra; 57*219b2ee8SDavid du Colombier int delflag; 58*219b2ee8SDavid du Colombier long lnum; 59*219b2ee8SDavid du Colombier uchar linebuf[LBSIZE+1]; 60*219b2ee8SDavid du Colombier uchar holdsp[LBSIZE+1]; 61*219b2ee8SDavid du Colombier uchar *spend; 62*219b2ee8SDavid du Colombier uchar *hspend; 63*219b2ee8SDavid du Colombier int nflag; 64*219b2ee8SDavid du Colombier int gflag; 65*219b2ee8SDavid du Colombier uchar *braelist[NBRA]; 66*219b2ee8SDavid du Colombier uchar *braslist[NBRA]; 67*219b2ee8SDavid du Colombier long tlno[NLINES]; 68*219b2ee8SDavid du Colombier int nlno; 69*219b2ee8SDavid du Colombier #define MAXFILES 120 70*219b2ee8SDavid du Colombier char fname[MAXFILES][40]; 71*219b2ee8SDavid du Colombier FILE *fcode[MAXFILES]; 72*219b2ee8SDavid du Colombier int nfiles; 73*219b2ee8SDavid du Colombier 74*219b2ee8SDavid du Colombier #define ACOM 01 75*219b2ee8SDavid du Colombier #define BCOM 020 76*219b2ee8SDavid du Colombier #define CCOM 02 77*219b2ee8SDavid du Colombier #define CDCOM 025 78*219b2ee8SDavid du Colombier #define CNCOM 022 79*219b2ee8SDavid du Colombier #define COCOM 017 80*219b2ee8SDavid du Colombier #define CPCOM 023 81*219b2ee8SDavid du Colombier #define DCOM 03 82*219b2ee8SDavid du Colombier #define ECOM 015 83*219b2ee8SDavid du Colombier #define EQCOM 013 84*219b2ee8SDavid du Colombier #define FCOM 016 85*219b2ee8SDavid du Colombier #define GCOM 027 86*219b2ee8SDavid du Colombier #define CGCOM 030 87*219b2ee8SDavid du Colombier #define HCOM 031 88*219b2ee8SDavid du Colombier #define CHCOM 032 89*219b2ee8SDavid du Colombier #define ICOM 04 90*219b2ee8SDavid du Colombier #define LCOM 05 91*219b2ee8SDavid du Colombier #define NCOM 012 92*219b2ee8SDavid du Colombier #define PCOM 010 93*219b2ee8SDavid du Colombier #define QCOM 011 94*219b2ee8SDavid du Colombier #define RCOM 06 95*219b2ee8SDavid du Colombier #define SCOM 07 96*219b2ee8SDavid du Colombier #define TCOM 021 97*219b2ee8SDavid du Colombier #define WCOM 014 98*219b2ee8SDavid du Colombier #define CWCOM 024 99*219b2ee8SDavid du Colombier #define YCOM 026 100*219b2ee8SDavid du Colombier #define XCOM 033 101*219b2ee8SDavid du Colombier 102*219b2ee8SDavid du Colombier uchar *cp; 103*219b2ee8SDavid du Colombier uchar *reend; 104*219b2ee8SDavid du Colombier uchar *lbend; 105*219b2ee8SDavid du Colombier 106*219b2ee8SDavid du Colombier union reptr { 107*219b2ee8SDavid du Colombier struct reptr1 { 108*219b2ee8SDavid du Colombier uchar *ad1; 109*219b2ee8SDavid du Colombier uchar *ad2; 110*219b2ee8SDavid du Colombier uchar *re1; 111*219b2ee8SDavid du Colombier uchar *rhs; 112*219b2ee8SDavid du Colombier FILE *fcode; 113*219b2ee8SDavid du Colombier uchar command; 114*219b2ee8SDavid du Colombier uchar gfl; 115*219b2ee8SDavid du Colombier uchar pfl; 116*219b2ee8SDavid du Colombier uchar inar; 117*219b2ee8SDavid du Colombier uchar negfl; 118*219b2ee8SDavid du Colombier } r1; 119*219b2ee8SDavid du Colombier struct reptr2 { 120*219b2ee8SDavid du Colombier uchar *ad1; 121*219b2ee8SDavid du Colombier uchar *ad2; 122*219b2ee8SDavid du Colombier union reptr *lb1; 123*219b2ee8SDavid du Colombier uchar *rhs; 124*219b2ee8SDavid du Colombier FILE *fcode; 125*219b2ee8SDavid du Colombier uchar command; 126*219b2ee8SDavid du Colombier uchar gfl; 127*219b2ee8SDavid du Colombier uchar pfl; 128*219b2ee8SDavid du Colombier uchar inar; 129*219b2ee8SDavid du Colombier uchar negfl; 130*219b2ee8SDavid du Colombier } r2; 131*219b2ee8SDavid du Colombier } ptrspace[PTRSIZE], *rep; 132*219b2ee8SDavid du Colombier 133*219b2ee8SDavid du Colombier 134*219b2ee8SDavid du Colombier uchar respace[RESIZE]; 135*219b2ee8SDavid du Colombier 136*219b2ee8SDavid du Colombier struct label { 137*219b2ee8SDavid du Colombier uchar asc[9]; 138*219b2ee8SDavid du Colombier union reptr *chain; 139*219b2ee8SDavid du Colombier union reptr *address; 140*219b2ee8SDavid du Colombier } ltab[LABSIZE]; 141*219b2ee8SDavid du Colombier 142*219b2ee8SDavid du Colombier struct label *lab; 143*219b2ee8SDavid du Colombier struct label *labend; 144*219b2ee8SDavid du Colombier 145*219b2ee8SDavid du Colombier int f; 146*219b2ee8SDavid du Colombier int depth; 147*219b2ee8SDavid du Colombier 148*219b2ee8SDavid du Colombier int eargc; 149*219b2ee8SDavid du Colombier uchar **eargv; 150*219b2ee8SDavid du Colombier 151*219b2ee8SDavid du Colombier uchar *address(uchar *); 152*219b2ee8SDavid du Colombier int advance(uchar *, uchar *); 153*219b2ee8SDavid du Colombier void arout(void); 154*219b2ee8SDavid du Colombier extern uchar bittab[]; 155*219b2ee8SDavid du Colombier uchar bad; 156*219b2ee8SDavid du Colombier uchar *badp; 157*219b2ee8SDavid du Colombier int cmp(uchar *, uchar *); 158*219b2ee8SDavid du Colombier union reptr **cmpend[DEPTH]; 159*219b2ee8SDavid du Colombier void command(union reptr *); 160*219b2ee8SDavid du Colombier uchar compfl; 161*219b2ee8SDavid du Colombier uchar *compile(uchar *); 162*219b2ee8SDavid du Colombier uchar *compsub(uchar *); 163*219b2ee8SDavid du Colombier void dechain(void); 164*219b2ee8SDavid du Colombier int depth; 165*219b2ee8SDavid du Colombier void dosub(uchar *); 166*219b2ee8SDavid du Colombier int ecmp(uchar *, uchar *, int); 167*219b2ee8SDavid du Colombier void execute(uchar *); 168*219b2ee8SDavid du Colombier void fcomp(void); 169*219b2ee8SDavid du Colombier uchar *gline(uchar *); 170*219b2ee8SDavid du Colombier uchar *lformat(int, uchar *); 171*219b2ee8SDavid du Colombier int match(uchar *, int); 172*219b2ee8SDavid du Colombier union reptr *pending; 173*219b2ee8SDavid du Colombier uchar *place(uchar *, uchar *, uchar *); 174*219b2ee8SDavid du Colombier int rline(uchar *); 175*219b2ee8SDavid du Colombier struct label *search(struct label *); 176*219b2ee8SDavid du Colombier int substitute(union reptr *); 177*219b2ee8SDavid du Colombier uchar *text(uchar *); 178*219b2ee8SDavid du Colombier uchar *ycomp(uchar *); 179