IMD 1.17: 24/11/2010 20:10:49  e, isse; complex max; struct { int hi, lo; } ; if((flag=atoi(*++argv)) == 0) return; n = abs(flag); if(n<2 || (n&(n-1)) `   Ce Ԥ!e  N   " et ZEWue ed); for(i=n; --i >= 0; ) { a[i].re = random(); if(flag < 0) a[i].im = random(); } if(printing&1) print("first:\n"); fft(a, n, -1); if(printing&2) print("second:\n"); fft(a, n, 0); if(printing&4) print("third:\n"); rsse = isse = 0; max.re = mm += v.im; } k = i; if(++i >= hs) break; k ^= i; /* find changed bits */ p = q = rbase; while((k >>= 1) != 0)mplex wvec[15], rvec[15]; shrunk = 0; k = 0; plim = &a[n-2]; /* permute into reverse-binary order */ for(p = &a[0]; p <= t)) max.re = abs(t); t = a[i].im; if(flag < 0) t -= random(); isse += smul(t, t); if(max.im < abs(t)) max.im = abs(t); } t = n; for(i = 0; (t >>= 1) != 0; i++) ; /* printf("sse: (%s,", locv(rsse.hi, rsse.lo)); */ /* printf("%s)\n", locv(isse.hi,Z[\]^_`abcdeP0A3P0'/012P 0P )*+,-.P0s(P0?#P0P0P0P0Plook to see if anything needs scaling down */ /* this takes a lot of code, but not much time */ maxa = AMAX-1; for(p = &a[= AMAX) { shrunk++; if(maxa >= AMAX*2) { shrunk++; for(p = &a[0]; p < plim; p++) { p->re /= 4; p->im 0XP0^=P04P0A3P0'/012P 0P )*+,-.P0s(P0?#P0P0P0P0P  /= 4; } } else { for(p = &a[0]; p < plim; p++) { p->re /= 2; p->im /= 2; } } } for(i=0; ; ) #define complex struct cx #define cmove(a, b) (b)->re = (a)->re; (b)->im = (a)->im; #define AMAX (32767/3) /* if all element{ for(p = &a[i]; p < plim; p += s) { q = p + hs; v.re = smul(q->re,rbase->re) - smul(q->im,rbase->im); v.ims are < AMAX, overflow can't occur */ struct cx { int re, im; }; int scale; int oflow; fft(a, n, conjug) complex a[]; { sta = smul(q->re,rbase->im) + smul(q->im,rbase->re); q->re = p->re - v.re; q->im = p->im - v.im; p->re += v.re; p->itic complex v; int i, j, k; int s, hs; int t, maxa; int shrunk; register complex *p, *q; complex *plim, *rbase; static com += v.im; } k = i; if(++i >= hs) break; k ^= i; /* find changed bits */ p = q = rbase; while((k >>= 1) != 0)mplex wvec[15], rvec[15]; shrunk = 0; k = 0; plim = &a[n-2]; /* permute into reverse-binary order */ for(p = &a[0]; p <=  p--; cmul(p+(wvec-rvec), p); while(p < q) { cmove(p, q); q--; } } rbase++; hs = s; } while(s < n); plim; p++) { q = &a[k]; if(pre; p->re = q->re; q->re = t; t = p->im; p->im = q->im; q->im = t if(oflow>0) { printf("%d overflows\n", oflow); oflow = 0; } return(shrunk); } ...efft[ed.cunix; } j = n; while(k >= (j /= 2)) k -= j; k += j; } i = n; p = &wvec[0]; v.re = -scale; v.im = 0; /* build wvec[0..logn] : table of 2**k'th roots of unity */ /* wvec[k] = exp(+- i * pi / (2**k)) */ do { cmove(&v, p); p++; v.im = ssqrt((scale - v.re)/2); if(conjug < 0) v.im = -v.im; v.re = ssqrt((scale + v.re)/2); } while((i /= 2) != 0); rbase = &rvec[0]; plim = &a[n]; hs = 1; do { s = hs*2; p = rbase; do { p->re = scale; p->im = 0; } while(--p >= &rvec[0]); /* e...dwft.ccfts3.cbwfts.caarths.s`wft.diff_wfts.olook to see if anything needs scaling down */ /* this takes a lot of code, but not much time */ maxa = AMAX-1; for(p = &a[^scale.s]try\erfle0]; p < plim; p++) { if((t = abs(p->re)) > maxa) maxa = t; if((t = abs(p->im)) > maxa) maxa = t; } if(maxa >= AMAX) { shrunk++; if(maxa >= AMAX*2) { shrunk++; for(p = &a[0]; p < plim; p++) { p->re /= 4; p->im e, isse; complex max; struct { int hi, lo; } ; if((flag=atoi(*++argv)) == 0) return; n = abs(flag); if(n<2 || (n&(n-1)) != 0) return; a = alloc(n * sizeof(*a)); if(argc > 2) printing = atoi(*++argv); if(argc > 3) seed = atoi(*++argv); srand(sei++) ; logn = i; if(argc > 2) printing = atoi(*++argv); if(argc > 3) seed = atoi(*++argv); srand(seed); for(i=n; --i >= 0; ed); for(i=n; --i >= 0; ) { a[i].re = random(); if(flag < 0) a[i].im = random(); } if(printing&1) print("first:\n"); ff) { a[i].re = random(); a[i].im = (flag < 0) ? random() : 0; } if(printing&1) print("first:\n"); i = fft(a, n, -1); if(t(a, n, -1); if(printing&2) print("second:\n"); fft(a, n, 0); if(printing&4) print("third:\n"); rsse = isse = 0; max.re = mprinting&2) print("second:\n"); t = fft(a, n, 0); printf("shrunk %d + %d\n", i, t); shrink = logn - (i + t); if(printing&4) ax.im = 0; scale = 16; srand(seed); for(i=n; --i >= 0; ) { t = a[i].re - random(); rsse += smul(t, t); if(max.re < abs(print("third:\n"); rsse = isse = 0; max.re = max.im = 0; scale = 16; srand(seed); for(i=n; --i >= 0; ) { t = (a[i].re >> t)) max.re = abs(t); t = a[i].im; if(flag < 0) t -= random(); isse += smul(t, t); if(max.im < abs(t)) max.im = abs(t); shrink) - random(); rsse += smul(t, t); if(max.re < abs(t)) max.re = abs(t); t = (a[i].im >> shrink); if(flag < 0) t -= } t = n; for(i = 0; (t >>= 1) != 0; i++) ; /* printf("sse: (%s,", locv(rsse.hi, rsse.lo)); */ /* printf("%s)\n", locv(isse.hi,random(); isse += smul(t, t); if(max.im < abs(t)) max.im = abs(t); } /* printf("sse: (%s,", locv(rsse.hi, rsse.lo)); */ /*  isse.lo)); */ scale = 4; t = rsse >> i; printf("rms (%d,", ssqrt(t)); t = isse >> i; printf("%d)\n", ssqrt(t)); printf("mprintf("%s)\n", locv(isse.hi, isse.lo)); */ scale = 4; t = rsse >> logn; printf("rms (%d,", ssqrt(t)); t = isse >> logn; prax (%d,%d)\n", max.re, max.im); if(oflow > 0) printf("overflows:\n%d\n", oflow); } print(s) char s[]; { register int i; priintf("%d)\n", ssqrt(t)); printf("max (%d,%d)\n", max.re, max.im); if(oflow > 0) printf("overflows:\n%d\n", oflow); } print(s)ntf(s); for(i=0; i> 5); } #define complex struct cx #define pi 3.1415926 #define rads .01745 struct cx { int re, im; }; int scale 16384; int scale2 14;#define complex struct cx #define pi 3.1415926 #define rads .01745 struct cx { int re, im; }; int scale 1000; int seed 1254;  int seed 1254; int n; int oflow; complex *a; float atof(); main(argc, argv) char **argv; { register int i, t; int shrink, lint n; int oflow; complex *a; float atof(); main(argc, argv) char **argv; { register int i, t; int flag, printing; long rssogn; int flag, printing; long rsse, isse; complex max; struct { int hi, lo; } ; flag = atoi(*++argv); n = abs(flag);  nd() >> 5); } et mov r2,-(sp) mov r3,-(sp) mov r4,-(sp) mov $4,r4 mov _scale,r1 cmp r0,r1 ble 1f 2: asr r0 asl r1 cmp r0,r1 bhi 2b  br 3f 1: asl r0 asr r1 cmp r0,r1 blo 1b mov r1,r0 3: mov 10(sp),r2 mul _scale,r2 div r0,r2 / N * scale / x bvc 4f inc _oflow 4: add r2,r0 ror r0 / ((N*scale/x) + x) / 2 sob r4,3b ret4: mov (sp)+,r4 ret3: mov (sp)+,r3 ret2: mov (sp)+,r2 .globl _smul, _sdiv, _ssqrt .globl _cadd, _csub, _cmul .globl _itoatn, _atntoi, _rotate, _polar .globl _rand, _srand .comm _scaret: rts pc _itoatn: / convert scaled int angle to atn representation mov r2,-(sp) mov 4(sp),r2 / r2 = angle mov $atans,r1le, 2 .globl _scale .comm _oflow, 2 .globl _oflow .text _smul: mov 2(sp),r0 mul 4(sp),r0 div _scale,r0 bvc 1f ovf: clr r0 / table of arctans sub (r1),r2 / subtract 90 degrees mov $1,r0 / prepare to loop 16 times 1: / (until the 1 is shifted in inc _oflow 1: rts pc _sdiv: mov 2(sp),r0 mul _scale,r0 div 4(sp),r0 bvs ovf rts pc _cadd: / cadd(a, b); struct cx *a,to carry) tst r2 / compare angle to zero bpl 2f add (r1)+,r2 / < 0 : add angle asl r0 / shift in 0 bit bcc 1b / loop bac *b; adds a to b mov 2(sp),r0 mov 4(sp),r1 add (r0)+,(r1)+ bvc 1f inc _oflow 1: add (r0),(r1) 3: bvc 2f inc _oflow 2: k br ret2 / unless all 16 done 2: sub (r1)+,r2 / > 0 : subtract angle sec rol r0 / shift in 1 bit bcc 1b / loop 3: mov rts pc _csub: / csub(a, b) mov 2(sp),r0 mov 4(sp),r1 sub (r0)+,(r1)+ bvc 1f inc _oflow 1: sub (r0),(r1) br 3b _cmul: (sp)+,r2 / yes, return rts pc _atntoi: mov $-18182.,r0 / 18182 = sum of all arctans, / so -18182 = sum of values of all 0 / cmul(a, b); multiplies a into b jsr r5,csv mov 4(r5),r4 mov 6(r5),r3 / dest mov (r3)+,-(sp) / save b.re mov (r3),-(sp) /bits mov $atans,r1 mov r2,-(sp) 1: mov (r1)+,r2 asl 2(sp) / test bit in atn representation bcc 2f / if off, leave angle s multiply b.im mov 2(r4),-(sp) / by a.im jsr pc,_smul mov r0,r2 mov -(r3),(sp) / and b.re mov (r4)+,-(sp) / by a.re jsr pcubtracted; asl r2 / else add it in (twice, add r2,r0 / to correct for subtraction) br 1b 2: bne 1b / if anything's left, ,_smul cmp (sp)+,(sp)+ sub r2,r0 / b.re*a.re - b.im*a.im bvc 1f inc _oflow 1: mov r0,(r3)+ / set b.re / now mult b.re (continue mov (sp)+,r2 rts pc / else return .data atans: / table of arctangents. / table[0] = 90 degrees, / table[i+1] left on stack) mov (r4),(sp) / by a.im jsr pc,_smul mov r0,r2 mov (r3),(sp) / mult b.im mov -(r4),-(sp) / by a.re jsr pc,_= arctan(1 / 2**i), / with angles scaled so 360 degrees = 65536. 16384. / 90. degrees 8192. / 1 : 45.00000 degrees 4836.  char s[]; { register int i; printf(s); for(i=0; i> n tst r2 bmi 1f neg r4 / negate unless sign negative 1: add r0,r4 / new x ),r3 mov r0,(r3)+ / put in new x, y mov r2,(r3) br ret4 _polar: / polar(xy, rtheta); struct cx *xy, *rtheta; mov r4,-(sp) in r4 ash r3,r0 / x >> n tst r2 bpl 2f neg r0 / negate if sign negative 2: add r0,r1 / new y mov r4,r0 / new x rts pc/ also returns r as func value mov r3,-(sp) mov r2,-(sp) mov 10(sp),r3 / r3 = xy mov $2,-(sp) / prepare theta for 15 shifts  / multiply x and/or y by .60723, which is / the product of the cosines of all those arctangents. xyshrink: mov r1,r2 mul $ mov 2(r3),r1 / r1 = y mov (r3),r0 / r0 = x bpl 1f / if x < 0, neg r0 / negate x and y neg r1 inc (sp) / and add 180 de39797.,r2 / multiply by (39797/65536) add r1,r2 / correct for signed multiply / leave y in r2 xshrink: mov r0,r3 mul $39 !"$%&'797.,r0 add r3,r0 / as above -- leave x in r0 rts pc _srand: / srand(seed); seeds random number generator mov r2,-(sp) m bw _eN 5N 7%_ =_t 7  5% e_scale#_scale2#_seed#_n _oflN 5% eN 7fb Z  8WtmH   " Wtm.15 ow _a _main"~maincsv argcargvL1L2it %5    %& %@`@55#  u55u 55shrinklognflagprintingrsseissemax_atoi _abs L3_sbrk  R d&tmrA t  5`u`u  @- 5tm*A t   L4ZL5bL6^L7L8_srand L9L10_random"L10000L100  5`u`u  @- 5A@B vC + A@B vC 4 01L11L12_print"_fft L13 L14 L15_printf L16JL17# mov r3,-(sp) 3: mov r1,r3 bic $!204,r3 / isolate bits 19 and 24 add $200-4,r3 / xor them aslb r3 / shift (19 xor 24) to cNf9 % ztF wf_w ZN  -Jtm>tm0&U % ww  arry rol r0 / rotate it rolb r1 / through the shift register sob r2,3b mov r0,lseed mov r1,hseed mov (sp)+,r3 mov (sp)+tw@first: second: shrunk %d + %d third: rms (%d,%d) max (%d,%d) overflows: %d (%d,%d) ,r2 rts pc .data lseed: 31415. hseed: .byte 271. .even .text hx99999Y9hh9YY9Y994,98c q = p + hs; cmove(q, &v); cmul(rbase, &v); cmove(p, q); csub(&v, q); cadd(&v, p); . Y9YxxYxxXXII9YY 1,r3 bic $!204,r3 / isolate bits 19 and 24 add $200-4,r3 / xor them aslb r3 / shift (19 xor 24) to carry rol r0 / rotate i.globl _smul, _ssqrt, _cmul .globl _srand, _rand .globl _cmul .globl _scale2 .text _smul: mov 2(sp),r0 mul 4(sp),r0 mov _st rolb r1 / through the shift register sob r2,3b mov r0,lseed mov r1,hseed mov (sp)+,r3 mov (sp)+,r2 rts pc .data lseedcale2,-(sp) neg (sp) ashc (sp)+,r0 mov r1,r0 rts pc _cmul: / cmul(a, b); multiplies a into b jsr r5,csv mov 4(r5),r4 m: 31415. hseed: .byte 271. .even .text ov 6(r5),r3 / dest mov (r3)+,-(sp) / save b.re mov (r3),-(sp) / multiply b.im mov 2(r4),-(sp) / by a.im jsr pc,_smul mov r0,r2 mov -(r3),(sp) / and b.re mov (r4)+,-(sp) / by a.re jsr pc,_smul cmp (sp)+,(sp)+ sub r2,r0 / b.re*a.re - b.im*a.im moecho >>tries wfts $1 $2 $3 erfle /bin/time wfts $1 $2 $3 >>tries v r0,(r3)+ / set b.re / now mult b.re (left on stack) mov (r4),(sp) / by a.im jsr pc,_smul mov r0,r2 mov (r3),(sp) / mult b.im mov -(r4),-(sp) / by a.re jsr pc,_smul add r2,r0 / b.im*a.re + b.re*a.im mov r0,(r3) / set b.im jmp cret _ssqrt: mov 2(sp),r0 ble ret mov r2,-(sp) mov r3,-(sp) mov r4,-(sp) mov $3,r4 mov $1,r1 ash _scale2,r1 cmp r0,r1 ble 1f 2: asrL18zL19"_smul L20L21L22 _ssqrt L23+L244L259L26 r0 asl r1 cmp r0,r1 bhi 2b br 3f 1: asl r0 asr r1 cmp r0,r1 blo 1b mov r1,r0 3: mov 10(sp),r3 clr r2 ashc _scale2,rL27Fcret ~printsL28L29iL31L32L34UL332 div r0,r2 / N * scale / x add r2,r0 ror r0 / ((N*scale/x) + x) / 2 sob r4,3b ret4: mov (sp)+,r4 ret3: mov (sp)+,r3 reL30~randomL35L36_rand L37t2: mov (sp)+,r2 ret: rts pc _srand: / srand(seed); seeds random number generator mov r2,-(sp) mov $103.,r2 mov 4(sp),r1 mov r1,r0 bne 1f mov $31415.,r0 movb $271.,r1 br 2f _rand: / rand(); returns random signed int / uses a 24-bit pseudorandom bit sequence mov r2,-(sp) mov lseed,r0 movb hseed,r1 2: mov $10.,r2 / ten shifts per call 1: mov r3,-(sp) 3: mov r of string file -- next free spot */ char tsname[12]; /* name of string file */ int *after; int *oldol; char syntax[] "syntax error"; char big[] "too large"; char delimiter[] "delimiter"; char tmperr[] "temp file error"; char range[] ""; char # /* * Editor */ #define SIGINTR 2 #define SIGQUIT 3 #define FNSIZE 64 #define LBSIZE 512 #define ESIZE 128 #define GBSIZE 2prompt[9] ": \0 "; main(argc, argv) char **argv; { register char *p1, *p2; extern int onintr(); int flags; onquit = si56 #define NBRA 5 #define EOF -1 #define CBRA 1 #define CCHR 2 #define CDOT 4 #define CCL 6 #define NCCL 8 #define CDOL 10 #defgnal(SIGQUIT, 1); flags = 0; while(--argc) { p1 = *++argv; if(*p1 == '-') { p1++; if(*p1 == 's') if(argc>1 && *aine CEOF 11 #define CKET 12 #define STAR 01 #define READ 0 #define WRITE 1 int peekc; int lastc; char savedfile[FNSIZE]; charrgv[1] != '-') { setup = *++argv; argc--; } else { p1 = "\2\5\21\1\17\3\23\22\0"; p2 = patn; while( file[FNSIZE]; char linebuf[LBSIZE]; char rhsbuf[LBSIZE/2]; char expbuf[ESIZE+4]; int circfl; int *zero; int *dot; int *dol; int*p2++ = *p1++); } else if(*p1 == 'q') signal(SIGQUIT, 0); else if (*p1 == 'c') flags =| 02; else vflag = 0; } els *endcore; int *fendcore; int *addr1; int *addr2; char genbuf[LBSIZE]; int count[2]; char *nextip; char *linebp; int ninbuf; inte { p2 = savedfile; while(*p2++ = *p1++); flags =| 01; } } fendcore = sbrk(0); init(); if ((signal(SIGINTR, 1) &  io; int pflag; int onquit; int vflag 1; int listf; int col; char *globp; int tfile -1; int tline; char *tfname; char *loc1; cha01) == 0) signal(SIGINTR, onintr); setexit(); if(setup && (inf=open(setup,0))>0) { setup = 0; commands(); /* do setup ifr *loc2; char *locs; char ibuff[512]; int iblock -1; char obuff[512]; int oblock -1; int ichanged; int nleft; char TMPERR[] "TMP possible */ } inf = 0; if(flags==1) globp = "r"; else { puts("Input"); globp = "a"; } setexit(); commands(); unlink"; int names[26]; char *braslist[NBRA]; char *braelist[NBRA]; int changed; int mode; int inf 0; /* current input file (normally (tfname); } commands() { int getfile(), gettty(); register *a1, c; register char *p; int r; for (;;) { if (pflag) { pf0) */ int caps; /* upper case flag for commands */ char patn[10] "\2\5\21\1\17\3\23\22\0"; /* pattern chrs: ^$.*[]&\(\)- */ chalag = r = 0; addr1 = addr2 = dot; goto print; } if (globp==0 && inf==0 && lastc!=';') putst(prompt); cmdflg = 1; addr1 = & 6 % w  X n@ @m Ne@& wnf@wl fr cmdflg 1; /* enables use of micro-strings -- on during command input */ char *strp; /* ptr to current char of micro-string */ @)wVfwZwV Tw*f @@& BF7F char *setup ".edset"; /* file of ed commands for setup */ int strings[26]; int strf; /* file of strings */ int eostrf; /* end  tchar())); *--p = 0; inf = open(genbuf,0); if(inf<0) { inf = 0; putst("Cannot open "); err(genbuf); } command addr2 = 0; do { addr1 = addr2; if ((a1 = address())==0) { c = getchar(); break; } addr2 = a1; if ((c=getchar()) == ';') { c = ','; dot = a1; } } while (c==','); if (addr1==0) addr1 = addr2; caps = (c<='Z') && (c>='A'); if (case '\n': if (addr2==0) addr2 = dot+1; if(addr1==0) addr1 = addr2; r = 0; goto print; case 'l': listf++; case 'paps) c =| 040; switch(c) { case 'a': setdot(); append(gettty, addr2, getlimit()); continue; case 'c': setdot(); n': r = getlimit(); print: setdot(); a1 = addr1; if(r) { addr2 = a1 + (r-1); if(addr2 > dol) addr2 = dol; } nonzero(); r = append(gettty, addr1-1, getlimit()); addr1 =+ r; addr2 =+ r; delete(); if (r) dot--; continue; case onzero(); do { if (caps) { count[1] = a1-zero; putd(); putchar(':'); putchar(' '); } puts(getline(*a1++))'d': setdot(); if(r=getlimit()) addr2 = addr1 + (r-1); nonzero(); delete(); continue; case 'e': setnoaddr(); if ; } while (a1 <= addr2); dot = addr2; listf = 0; continue; case 'q': setnoaddr(); newline(); if (caps) goto wrt;((peekc = getchar()) != ' ') err(syntax); checkw(); filename(); for(p=file; savedfile[p-file] = *p; p++); init(); a checkw(); /* if file changed, ask 'write? ' */ unlink(tfname); exit(0); case 'r': filename(); caseread: if ((io =ddr2 = zero; goto caseread; case 'f': setnoaddr(); if ((c = getchar()) != '\n') { peekc = c; savedfile[0] = 0;  open(file, 0)) < 0) { lastc = '\n'; putst(file); err(": Cannot open"); } setall(); ninbuf = 0; append(getfile,filename(); } puts(savedfile); continue; case 'g': global(1); continue; case 'i': setdot(); nonzero(); r = a addr2, 0); exfile(); continue; case 's': setdot(); nonzero(); substitute(globp); dot = addr2; continue; case ppend(gettty, addr2-1, getlimit()); if(r==0) dot++; continue; case 'k': if ((c = getchar()) < 'a' || c > 'z') err("ba't': move(1); continue; case 'v': global(0); continue; case 'w': setall(); nonzero(); wrt: filename(); ifd name"); newline(); setdot(); nonzero(); names[c-'a'] = *addr2 | 01; continue; case 'm': move(0); continue; c ((io = creat(file, mode)) < 0) { putst(file); err(": Cannot create"); } putfile(); changed = 0; exfile(); if(ca56789:;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeps) { unlink(tfname); exit(0); } continue; case ':': if (eoln(getchar())) { setdot(); goto out; } spcl(); continue; case '<': /* get input from specified file */ if(inf) err("Nested input files"); p = genbuf; while(!eoln(*p++ = ge   a1 = dol; break; case '.': a1 = dot; break; case '\'': if ((c = getchar()) < 'a' || c > 'z') err("bad nhar('\n'); } else { if (lastc != ' ') peekc = lastc; while(!eoln(getchar())) { if(p=26) err("Bad string name"); if(getchar()==':' || lastc == '='(a1==0) return(0); a1 =+ minus; if (a1dol) err(range); return(a1); } } } setdot() { if (addr2 ) { newline(); if(strings[c]==0) err("Non-existent string"); seek(strf,strings[c]-1,0); if(read(strf,genbuf,LBSIZE)<=0) == 0) addr1 = addr2 = dot; if (addr1 > addr2) err("range error"); } setall() { if (addr2==0) { addr1 = zero+1; addr2 err(tmperr); puts(genbuf); } else { if(lastc==' ') getchar(); p = linebuf; while(lastc!='\n') { *p++ = lastc; gets(); continue; case '=': setall(); newline(); out: count[1] = (addr2-zero)&077777; putd(); putchar('\n'); conti= dol; if (dol==zero) addr1 = zero; } setdot(); } setnoaddr() { if (addr2) err(syntax); } nonzero() { if (addr1<=zenue; case '!': unix(); continue; case EOF: return; } err("Unknown command"); } } address() { register *a1, minusro || addr2>dol) err(range); } getlimit() { register c,n; n = 0; while((c=getchar())>='0' && c<='9') n = n*10 + c-'0'; if, c; int n; minus = 0; a1 = 0; for (;;) { c = getchar(); if ('0'<=c && c<='9') { n = 0; do { n =* 10; n =(n == 0 && (c == '*' || c == '$')) n = dol-zero; else peekc = c; newline(); return(n); } newline() { register c; if (+ c - '0'; } while ((c = getchar())>='0' && c<='9'); peekc = c; if (a1==0) a1 = zero; if (minus<0) n = -n; eoln(c=getchar())) return; if(c <= 'Z') { caps++; c =+ 'a'-'A'; } if (c=='p' || c=='l') { pflag++; if (c=='l') l a1 =+ n; minus = 0; continue; } switch(c) { case ' ': case '\t': continue; case '+': minus++; if (aistf++; if (eoln(getchar())) return; } err(syntax); } spcl() { register char *p; register c; static note; if(lastc 1==0) a1 = dot; continue; case '-': case '^': minus--; if (a1==0) a1 = dot; continue; case '?': c== 'P') { p = prompt; while(!eoln(*p=getchar())) if (p dol) a1 = zero; } else { a1--; if (a1 < zero) note; do { if(*p>' ') { putchar(' '); putchar(*p); } else { putchar('^'); putchar(*p | 0100);  a1 = dol; } if (execute(0, a1)) break; if (a1==dot) err("not found"); } break; case '$':  note = 1; } putchar(' '); p++; } while(p= &li pflag = 0; if (globp) lastc = '\n'; globp = 0; peekc = lastc; while(!eoln(c=getchar()) && c != EOF); if (io > 0) { clnebuf[LBSIZE-2]) err(big); } *p++ = 0; if (linebuf[0]=='.' && linebuf[1]==0) return(EOF); return(0); } getfile() /* read aose(io); io = -1; } reset(); } /* * see if user wants to write out file. If user answers * n just quit. Otherwise go line from the current file into linebuf */ { register c; register char *lp, *fp; lp = linebuf; fp = nextip; do { if (--char(); } *p = 0; if(p==linebuf) strings[c] = 0; else strings[c] = putstrf(); } } putstrf() { register char *p, *q;  back into editor */ checkw() { register c; if(changed == 0) return; putst("write? "); if ((c = getchar()) == EOF) return if(strf == 0) { p = tfname; q = tsname; while(*q++ = *p++); tsname[5] = 's'; close(creat(tsname,0644)); if((strf = o; if(c != '\n') while(getchar() != '\n'); if(c == 'y') { putfile(); changed = 0; } else if(c != 'n') { puts("edit\7")pen(tsname,2)) < 0) err(tmperr); unlink(tsname); eostrf = 1; } p = linebuf; while(*p++); seek(strf,eostrf-1,0); write(s; reset(); } } getchar() { register char c, bsflag; register int index; static int oldinf; bsflag = 0; again: if((c trf,linebuf,p-linebuf); q = eostrf; eostrf =+ p-linebuf; return(q); } filename() { register char *p1, *p2; register c; c= peekc) != 0) { peekc = 0; } else if(globp) { if((c = *globp++) == 0) { globp = 0; c = EOF; } } else { readc: ount[1] = 0; c = getchar(); if (eoln(c)) { p1 = savedfile; if (*p1==0) err("no file name"); p2 = file; while (*p2++ if(read(inf, &lastc, 1) <= 0 || (c = (lastc&0177))==0) { if(inf == strf) { inf = oldinf; goto readc; } else {  = *p1++); return; } if (c!=' ') err(syntax); while ((c = getchar()) == ' '); if (eoln(c)) err(syntax); p1 = file; d close(inf); inf = 0; c = EOF; } } } if(bsflag) { if(c >= 'a' && c <= 'z') { /* micro string */ if((index =   = genbuf; a1 = addr1; do { lp = getline(*a1++); for (;;) { if (--nib < 0) { write(io, genbuf, fp-genbuf); nib ); } putline() { register char *bp, *lp; register nl; int tl; lp = linebuf; tl = tline; bp = getblock(tl, WRITE); nl = = 511; fp = genbuf; } if (++count[1] == 0) ++count[0]; if ((*fp++ = *lp++) == 0) { fp[-1] = '\n'; break; nleft; tl =& ~0377; while (*bp = *lp++) { if (*bp++ == '\n') { *--bp = 0; linebp = lp; break; } if (--nl == 0)  } } } while (a1 <= addr2); write(io, genbuf, fp-genbuf); changed = 0; } append(f, a, limit) /* append lines returned by f{ bp = getblock(tl=+0400, WRITE); nl = nleft; } } nl = tline; tline =+ (((lp-linebuf)+03)>>1)&077776; return(nl); } () after line a */ int (*f)(); int *a; { struct { int integer; }; register could; dot = after = a; could = (dol>zero); old getblock(atl, iof) { extern read(), write(); register bno, off; bno = (atl>>8)&0377; off = (atl<<1)&0774; if (bno >= 255ol = dol; while ((*f)() == 0) { if (dol >= endcore) { if (sbrk(1024) == -1) err(big); endcore.integer =+ 1024; } *+) err(tmperr); nleft = 512 - off; if (bno==iblock) { ichanged =| iof; return(ibuff+off); } if (bno==oblock) return(obuff+dol = putline(); dot++; if(could) changed++; if (--limit == 0) break; } endapp(); return(dol-oldol); /* return line co+off); if (iof==READ) { if (ichanged) blkio(iblock, ibuff, write); ichanged = 0; iblock = bno; blkio(bno, ibuff, reaunt */ } endapp() { register old; if(dol>oldol) { old = oldol+1; after++; reverse(after,old); reverse(old,dol+1); d); return(ibuff+off); } if (oblock>=0) blkio(oblock, obuff, write); oblock = bno; return(obuff+off); } blkio(b, buf, ireverse(after,dol+1); } after = 0; } unix() { register savint, pid, rpid; int retcode; setnoaddr(); if ((pid = fork()) =ofcn) int (*iofcn)(); { seek(tfile, b, 3); if ((*iofcn)(tfile, buf, 512) != 512) { err(tmperr); } } init() { register cha= 0) { signal(SIGQUIT, onquit); execl("/bin/sh", "sh", "-t", 0); exit(0); } savint = signal(SIGINTR, 1); while ((rpid =r *p; register pid; close(tfile); tline = 0; iblock = -1; oblock = -1; tfname = "/tmp/exxxxx"; ichanged = changed = 0;  wait(&retcode)) != pid && rpid != -1); signal(SIGINTR, savint); puts("!"); } delete() { register *a1, *a2, *a3; changed++pid = getpid(); for (p = &tfname[11]; p > &tfname[6];) { *--p = (pid&07) + '0'; pid =>> 3; } close(creat(tfname, 0600)); ninbuf < 0) { if ((ninbuf = read(io, genbuf, LBSIZE)-1) < 0) return(EOF); fp = genbuf; } if (lp >= &linebuf[LBSIZE; a1 = addr1; a2 = addr2+1; a3 = dol; dol =- a2 - a1; do *a1++ = *a2++; while (a2 <= a3); a1 = addr1; if (a1 > dol) ]) err(big); if ((*lp++ = c = *fp++ & 0177) == 0) { lp--; continue; } if (++count[1] == 0) count[0]++; } while (c !a1 = dol; dot = a1; } getline(tl) { register char *bp, *lp; register nl; lp = linebuf; bp = getblock(tl, READ); nl = nle= '\n'); *--lp = 0; nextip = fp; return(0); } putfile() { int *a1; register char *fp, *lp; register nib; nib = 512; fpft; tl =& ~0377; while (*lp++ = *bp++) if (--nl == 0) { bp = getblock(tl=+0400, READ); nl = nleft; } return(linebuf   tfile = open(tfname, 2); unlink(tfname); brk(fendcore); dot = zero = dol = fendcore; endcore = fendcore - 2; mode = (getgiar()) == 'g') { peekc = 0; newline(); return(1); } newline(); return(0); } getsub() { register char *p1, *p2; p1 = d()&0377) == 1 ?0644 :0664; /* if (ttyn(0) == 'x') prompt[0] = 0; */ } global(k) { register char *gp; register c; register ilinebuf; if ((p2 = linebp) == 0) return(EOF); while (*p1++ = *p2++); linebp = 0; return(0); } dosub() { register char *lnt *a1; char globuf[GBSIZE]; if (globp) err("recursive global"); setall(); nonzero(); if ((c=getchar())=='\n') err(synp, *sp, *rp; int c; lp = linebuf; sp = genbuf; rp = rhsbuf; while (lp < loc1) *sp++ = *lp++; while (c = *rp++) { if (tax); compile(c); gp = globuf; while ((c = getchar()) != '\n') { if (c==EOF) err("EOF"); if (c=='\\') { c = getcharc==patn[6]) { /* '&' */ sp = place(sp, loc1, loc2); continue; } else if (c<0 && (c =& 0177) >='1' && c < NBRA+'1') { (); if (c!='\n') *gp++ = '\\'; } *gp++ = c; if (gp >= &globuf[GBSIZE-2]) err(big); } *gp++ = '\n'; *gp++ = 0; sp = place(sp, braslist[c-'1'], braelist[c-'1']); continue; } *sp++ = c&0177; if (sp >= &genbuf[LBSIZE]) err(big);  for (a1=zero; a1<=dol; a1++) { *a1 =& ~01; if (a1>=addr1 && a1<=addr2 && execute(0, a1)==k) *a1 =| 01; } for (a1=zero } lp = loc2; loc2 = sp + linebuf - genbuf; while (*sp++ = *lp++) if (sp >= &genbuf[LBSIZE]) err(big); lp = linebuf; s; a1<=dol; a1++) { if (*a1 & 01) { *a1 =& ~01; dot = a1; globp = globuf; commands(); a1 = zero; } } } substp = genbuf; while (*lp++ = *sp++); } place(asp, al1, al2) { register char *sp, *l1, *l2; sp = asp; l1 = al1; l2 = al2; witute(inglob) { register gsubf, *a1, nl; int getsub(); gsubf = compsub(); for (a1 = addr1; a1 <= addr2; a1++) { if (execuhile (l1 < l2) { *sp++ = *l1++; if (sp >= &genbuf[LBSIZE]) err(big); } return(sp); } move(cflag) { register int *adt,te(0, a1)==0) continue; inglob =| 01; dosub(); if (gsubf) { while (*loc2) { if (execute(1)==0) break; d *ad1, *ad2; int getcopy(); setdot(); nonzero(); if ((adt = address())==0) err("no line to move to"); newline(); changeosub(); } } *a1 = putline(); nl = append(getsub, a1); a1 =+ nl; addr2 =+ nl; } if (inglob==0) err("not found");d++; ad1 = addr1; ad2 = addr2; if (cflag) { ad1 = dol; append(getcopy, ad1++, 0); ad2 = dol; } ad2++; if (adt= ad2) { dot = adt++; reverse(ad1, ad2); reverse(ad2, adt); reverse(ad1, adt); } else err("move to line in mOF); break; } if (c==seof) break; *p++ = c; if (p >= &rhsbuf[LBSIZE/2]) err(big); } *p++ = 0; if ((peekc = getchove range"); } reverse(aa1, aa2) { register int *a1, *a2, t; a1 = aa1; a2 = aa2; for (;;) { t = *--a2; if (a2 <= a1)  OL; continue; case 4: /* '[' */ *ep++ = CCL; *ep++ = 0; cclcnt = 1; if ((c=getchar()) == patn[0]) { /* '^' */+ == *lp++) continue; return(0); case CDOT: if (*lp++) continue; return(0); case CDOL: if (*lp==0) continue c = getchar(); ep[-2] = NCCL; } do { if (c=='\n') cerr("no ]"); if(c == patn[7] && ep[-1]) { c ; return(0); case CEOF: loc2 = lp; return(1); case CCL: if (cclass(ep, *lp++, 1)) { ep =+ *ep; continue; } = ep[-1]; getchar(); while(ep<&expbuf[ESIZE] && lastc>c) { *ep++ = ++c; cclcnt++; } } else {  return(0); case NCCL: if (cclass(ep, *lp++, 0)) { ep =+ *ep; continue; } return(0); case CBRA: braslist[*ep++ return; *a2 = *a1; *a1++ = t; } } getcopy() { if (addr1 > addr2) return(EOF); getline(*addr1++); return(0); } comp *ep++ = c; cclcnt++; } if (ep >= &expbuf[ESIZE]) cerr(big); } while ((c=getchar()) != patn[5]); /* ']' */ile(aeof) { register eof, c; register char *ep; char *lastep; char bracket[NBRA], *bracketp; int nbra; int cclcnt; int ic lastep[1] = cclcnt; continue; defchar: default: if (c == '\n') { delim(ep,0); return; } *ep++ = CCH; ep = expbuf; eof = aeof; bracketp = bracket; nbra = 0; if ((c = getchar()) == eof) { if (*ep==0) err("empty"); reR; *ep++ = c; } } } delim(ep, value) char *ep; { register ok; /* if(inf) cerr(delimiter); putst("delimiter: ok? "); oturn; } if (!(circfl=(c==patn[0]))) peekc = c; for (;;) { if (ep >= &expbuf[ESIZE]) cerr(big); c = getchar(); if (c=k = (getchar() == 'y'); while(!eoln(lastc)) getchar(); if(ok) *ep = value; else */ cerr(delimiter); } execute(gf, addr) int =eof) { *ep++ = CEOF; return; } if (c != patn[3]) /* '*' */ lastep = ep; for(ic=1; ic<10 && c != patn[ic]; ic++);*addr; { register char *p1, *p2, c; if (gf) { if (circfl) return(0); p1 = linebuf; p2 = genbuf; while (*p1++ = *p2 if (c == '\\') { if((c=getchar()) == '(') goto lbra; if(c == ')') goto rbra; goto defchar; } switch (ic) { cas++); locs = p1 = loc2; } else { if (addr==zero) return(0); p1 = getline(*addr); locs = 0; } p2 = expbuf; if (circe 8: lbra: if (nbra >= NBRA) cerr("too many \('s"); *bracketp++ = nbra; *ep++ = CBRA; *ep++ = nbra++; contifl) { loc1 = p1; return(advance(p1, p2)); } /* fast check for first character */ if (*p2==CCHR) { c = p2[1]; do { nue; case 9: rbra: if (bracketp <= bracket) cerr("too many \)'s"); *ep++ = CKET; *ep++ = *--bracketp; continif (*p1!=c) continue; if (advance(p1, p2)) { loc1 = p1; return(1); } } while (*p1++); return(0); } /* reue; case 2: /* '.' */ *ep++ = CDOT; continue; case 3: /* '*' */ if (*lastep==CBRA || *lastep==CKET) err("* gular algorithm */ do { if (advance(p1, p2)) { loc1 = p1; return(1); } } while (*p1++); return(0); } advance(alp, error"); *lastep =| STAR; continue; case 1: /* '$' */ if ((peekc=getchar()) != eof) goto defchar; *ep++ = CDaep) { register char *lp, *ep, *curlp; char *nextep; lp = alp; ep = aep; for (;;) switch (*ep++) { case CCHR: if (*ep+  *as; { register char *sp; sp = as; while(*sp++); write(1, as, sp-as); } puts(as) { register char *sp; sp = as; col G7P7 ~77R77w7z75R7PPR`0  ȋ ` 7 = 0; while (*sp) putchar(*sp++); putchar('\n'); } char line[70]; char *linp line; putchar(ac) { register char *lp; regis sEtEe  e t55F n enwf W  W 4Eter c; lp = linp; c = ac; if (listf) { col++; if (col >= 72) { col = 0; *lp++ = '\\'; *lp++ = '\n'; } if (c wtEmnj  0 L"& B B2B.B*B7@B=='\t') { c = '>'; goto esc; } if (c=='\b') { c = '<'; esc: *lp++ = '-'; *lp++ = '\b'; *lp++ = c; got-6>6>v 6>6>~ 2xxzy pF 6>6> svttt.u6>6>wx(>2xx{{V|p|"6>6>Nuu(>(>(>(>(>(>| }}D}~(>(>(>(>(>ڂo out; } if (c<' ' && c!= '\n') { *lp++ = '\\'; *lp++ = (c>>3)+'0'; *lp++ = (c&07)+'0'; col =+ 2; goto out; (>(>(>(>(>(>(>(>(>(>ڌ^(>6>6>̖(>(>(>(>(>(>(>(>(>(>(>(>(>(>(>(>   /etc/initU of M SICL Unix  } } *lp++ = c; out: if(c == '\n' || lp >= &line[64]) { linp = line; write(1, line, lp-line); return; } linp = lp; } mem = %l no clockiinitno spacebad blockOut of inodesbad countno fsno imtInode table overflow panic: %s %s on dev %] = lp; continue; case CKET: braelist[*ep++] = lp; continue; case CDOT|STAR: curlp = lp; while (*lp++); goto sta /* * Get process ID routine if system call is unavailable. getpid() { register f; int b[1]; f = open("/dev/kmem", 0); if(r; case CCHR|STAR: curlp = lp; while (*lp++ == *ep); ep++; goto star; case CCL|STAR: case NCCL|STAR: curlp = lp; f < 0) return(-1); seek(f, 0140074, 0); read(f, b, 2); seek(f, b[0]+8, 0); read(f, b, 2); close(f); return(b[0]); } */  while (cclass(ep, *lp++, ep[-1]==(CCL|STAR))); ep =+ *ep; goto star; star: do { lp--; if (lp==locs) break;  if (advance(lp, ep)) return(1); } while (lp > curlp); return(0); default: err("?"); } } cclass(aset, ac, af) { register char *set, c; register n; set = aset; if ((c = ac) == 0) return(0); n = *set++; while (--n) if (*set++ == c)  return(af); return(!af); } eoln(c) { return( c=='\n' || c==';' || c==EOF ); } putd() { register r; extern ldivr; counnw x;48888888w@w8t[1] = ldiv(count[0], count[1], 10); count[0] = 0; r = ldivr; if (count[1]) putd(); putchar(r + '0'); } putst(as) char  8887$t7t7 no file out of swapUNIX halted. [[[[[unlink -- igetblkdevdevtab|#`{}n"& >ݞ^""X"&P"&݇F"  4P ~ (P~  & ~ &~" !& @~ABCDEFGHIJKLMNOPQRSTUVWXYZ4r6rqqrPr^r({)}!|^~'`` (@H`h|||| B#!!ܘ܇PII\ܷзJ||Offline or needs ringHard error   P~2܇,ܷ  & C~܇mH   W W @  Floppy not readyReset timeoutFlopp 6r 6r@@A6v@@& ADCBFw 7 e #  L% y timeout#.6:4rDʆ*>PbtЈވ(6DRz:::::::։  ! %F  Wt p 0 e%>^ 0:WpWtNp 0  4 7&$ L%>*JT^hr|Š؊$4ԋ^tDN򏤏Statos already in use Statos not ready err on Statos st%o `f J"%` J"%z 16 M I D  "- 7`` ``RlzOffline or needs ringHard error``^`(`(`(M`(<@@@ "- 7z   : & & x&e& H #% (wbw R,%(N`#@d@.@`(` k "*%fFE50   fghijklmopqrstuvwxyz{|}~ U0 %  2pv Er b$ $I 2 $ $7 $ZT5l/%l errbn%l er%o %o swap errorno procsout of swap spaceswap errorout of textout of swap spacejB@@@@@@U0D 7޷6 xX$ ߦBE   5 e Eއ1 އ@0AXAvA|A@AA@|BBka6 = %o aps = %o trap type %o trap^D^D^D^D^D^DnD^D^D^DFG(GBGbGGGGcoreBBUnWZYjYZަB rl  5 ZT  zއnއ# #  `x# *[RV8Z\aQ(b`\~bbW]N[^a^_` a`EB]BBmmB|a\pa.cf EAX `E E v EE \&v  E H&v `BB^OccB$aFabBBBBBBBBBBBBBXB `JJJ `J"K.K v   ݞ"""I .ݞ"""I#  Tݞt"" %d%d N 1 4 4  e%& ڂ 1ww Q  *#  h%%( #5 %ww %(N (%N (&f p e% 4ߜߞ& >>% jge%& ΂̵  & .  Qe %7  kwHw 8 & }_(N (&f F &f : ee%@@m@me-. je%  @t 6  5-(5-$̵̵ 2!e%&  1 0 w e eU   %ze% @teUDm  %z   %Dm%ɂtt̕fe 4$ f nf 5 g N.fe @$ tl5eS#%  @tU"e# jz%z% wPw @@etw>% g7~v44477ww L ,Ee5f 4$  nf 5f @$ tA@lee ʵ`^eʵ N ,e 6  I  `5?Nf H*%  !Nf nf deTeTN jgww D5 pe5[ U5HN& nf e5 1e@-%& nf >>% g2e 6Nf h  jw2 N 1  w N ,&e 6  5e5  N& ) @p- g& ) ,ȃ gN& ) = e@-Nf& H*% ; 4 %d#Nf h d&e >>%4  jg4e 6 E4 4 w w  ~* w@U4  0w @7ZHԔ%Vapw"w DCe - N 1 w w N ,&e 6 *  |X~ 3 N.ww Ce 1 1@ %%B %d%l%o %o  J1 %sa5Nf "-  e e wx  N. 5 5 KNef nf 5 @ 1ew w Nf 4$ N& J1 Nf @$ e0 1ww D x 5t t tv%  ` %5 @tp-@tp- %d ap%de% g%d 5#4 1 1 1 1tww w2 N 0 Tw ^@@&f 0ewJw :D  1e 6 N 1 a_*w N ,%d  apwXw H L- I 6 E%̥.̥+e%%6 E%̥̥ 5e%%D R4w $w,w DCB~ww D 5et zL  1 @ f& ke  & V>%_F7@ && ke +m D&& ke et& . 1  f L%4D7>* 6wrw b<$0  @54 e Nf& 0eww B ލ_3E% Wp  _3B N$ 55E5L%4_F7 1ww T 6 L  \#T r#74 7 0 2e%6 ʥ   N 4 E%`#lf &E #eH 4 N p; 59@ 7 ڀ @-    ӎ r#  j#ww 5 7 ӷ 6 ̋ 5- e%Df& f%N& nf 5rff 4eN g ww BE% Wp  1x̕:  4%@ & \#D7  _4 ~_4B N$ hE5XN 4 5E%`  p; X%& hC zL 5˕t \# & & V>%˕ wt N f # w & nf 5 fff 4e݋N g 5؋N gN g &E #e 5 򝔋 5tu- NmfN L%? \#N zL  \#N& V>% 5  y |ww u-@w@w vu-@wr@w \C@Dm% 1%  Nm # u-f L% r# ww @55S@5/5LN (C=   / = ' Ҋ?]Ҋ59%6 E& "E& #%jwE5 @ @m@ @m0  %@0 g@U@t55@ @mBN (7`EB # E7lE`E     = w F %   dt0 w,@ @mN ( g@ @m7 %@ @m7Ѐ@ @m0f nf̕t @7( 6 x  j#w "t̕t Hw C6 2  6e~ %4@tEe5 `N (5 g@ `AH g  gf nf 5D@Eww D4 ̕`R 7F* 6wzw jDEted`% w>w . 5 `N (5@ `N g g g7 %@ `7σw   ( 6 L6 ̥  5e%%*  D m zL w@v " j_ w | ZğL J J B :Ew\$& !jw 2w  6w*w |Ĝ   Ĝ  w 5w  6˕ F  |% 6 ,  e   !tt_wnw ^C % wN v w 4D̵e% ww l|2 57Q|%% 0 }e HE}&e " |& " |Ee 6e 6 E& rJ ww DE7D yfWp %0|E| x7f|  e|tQ7L| ww 7{{O VM  {I J0 N.wft vw DE7 y-fWp ft t%-l uw8w C 2K 55`1h{d{- R/7 b{7 `{T{P{@{ 3<{e & && x&e7 "{t7{7 { 3 (DC% ,t%t!̵ t %@5I 7 tt7 tt0 tww  N.z w(w { t@-@@ & 4$ b{e X{R{`J{D{ x&e  wz` :zO VM   7 lt   N. ww xNtwv=t w \  ?uwR؄ %tw . t& L%  N.ww  p_@  e % t-0a9 14 tz@l{ & #   # `zw d z8zR6 ̥ -z z0- e%e?tEet zL E 1e : & & x&eƀ:87 .N R2  e& ky: 8$ 6 7 zhzE7^z  68$ 6 ~z y7 8$ 6we3C  :  \# \#  V>% J ww D  &w y-x  wl7 h8$ 6 _G xH !%_G6 J"70( !%e T"]%Z L%ww @E%U@e 7.@  xbn 0 Ne 0 N 0  1  7  " K "   " ; "܃ e%%6   % "X mhy  C   |~ 6wNe J"%  |7~ENe J"Ete%)N`ye UzEtp_Ffxd_F r L_Fw hM4 2  e  5# j d  J"e T"E?%?Ete "e T" 1  N J" 1e "~,~ B &  e   3ee3@E%  x x f P  vxw %<~}d}}_@AU}5 _@A _4A} C _TA_4AC~ !  HE _@A _4Aw l~_I5f<÷  -ð-æ 65 66 ʋE%  r2 \# 7\~ww de}ww ww |6 t-N& C e%wbw R%D t̥d̕d̥d 6e%ۂ7( 6@E%@e 7w  Dv 6ww B  e  4$ & p; & nf 5X@&\qE` >>%eJq Bq Vq 6qHZH` %V N 6 Fw(w kt7vk ww j%   &Je%j N. \ zL   g% & 2K _Mw 5 N.pf "- _M_Mw pE pww p p !%1 h  >>% jg\j& L%̕6 , L 6 66 ,  ʥ 6ejpww x ~*# X(:q J,q(q qʕ2˕3̕wP3@ 0  N.w *% e%ڂ w  6 i, n ʥL j¬ nf  L% 2 2 22 2lD( 4 3 5Ee 6 Q oUe 6  Q ,  o Qw7 Zj #   # l4j #   # j g1ʥ   iiWtUpo7o c~o Qw D`o Q  Q7 Fo  Q /o ,o C wP% U 0 6e% (h 6 _XV hww h6 ˋ e% h ? xi7 pi7 ni7 bi7 `i7 ^i7 Qe 6 7 n nn 4 7nn 4 7n @e Q5Ee 6w DN&Ti  XiPi1`ww he?tE hh (t  hhe`hhh`h x&e `h  6 ̵ww D̵ 6ww r O VM  _>U 6 %l f h5@ 2Kh`hh& #  N :w :g`Th & #     #w . _U5`_U@5 5 $ %_UeZnN !%_U %m_U "n T"55 O ( 6 b \bgL   & C e% h  L ̋   @0 e%  04 4 w!e%8$ 0sw CK-smK ewe xmtm7 tm7 nm\m R27RmOm_U5 %mNmmm7 mme?tE5mmme?tE5N  w BD e D-m tm@m-*4c &e44@m- tLm ff x&e _U7 m  : R?De$ :$ Lm˵ l_U% ,m%$ml_Ul Leww r %/& "-  %/   rr N. _\Oa # % & f& x&e7 blle7\llRl R2wlwllwlllll x&e@@ Ar _ZOE%@@& 2K H  Kr %VҐ %/%V %/r7 r7 rr5  @e5lpNf " @ ef " & " ҋ@ fe " k5& 4$ 7q5 q$ N g% & 2K 7q @e7q5q N gq zk rk 5 _k5 e% X ml %^ l0  %6 N.N g%T w2w "O VM erfE J0 & ~Z%ww CB%5 2K 5 ww L`F`7 6ww xğ,`7L_ 7<_<_072_w^w N&_`__wFw 6ğ_7 _ 2K E%@kege'  R/ Q DE fE J 'e @ 0  N.w@w 0e  7^7^w$w ^__^w w ^? _ww ww _%  L  ^0ww OIe 0  &Jww e ID̵d=Ve%Jet 5>et5%E $e5   VM 3 Q^ "-   1E%@ J^X>^:^7 N^ 3 N. N.wBw 2 O   x5mfe # ttw| E5` w R O VM A d6EVM E%@] N.@& 2K ] N.7] Qww &E]E.^*^E4P N.w%@ +d dO VM c N.cc0- N.c 0 N.ww 8 w $   ] ]  N.ww v]%% 7] ? ^ ]"]!]0w>%22,aE2 gE%`  p; O%& h& nf 5 fff 4e'ZN gN gZZ g%7 ( 0 "ww  zYww  zYww Cg I>̰ f8*gf&gf7f̵ % Qw 5g`; " e%& E`* 5-+`e %& f@t v% 0P  P7xf7pf% R2 3fNf&e # f:f? gw\w L O VM   f f& ~Z% N.3  gww  O VM E%`_-_ N.ww xx`ww ޫj`f`֫  _mTeE5 T5 tEB-_mmStEAmTT@ JT _m U@& 6 5@  &5"e %EP4 Er I%w`w PD  Bo   e&E #e 5 Y Y Y Yww Nf h 5wܽU &@t x  iw U t E4 TWt @`E@`t4`tE4B N$ 4"S E 4 4 SB N ^h N h 5 U &@t x 'N ^h % N h 5 g U&  R& 6 5R5@ 6 EH 7R mjRwֶw ƶD57RRw @t x N nf w  iw DE & t x 5 i g5 mww w Ce 4nkRR& " e& " e& " wnw ^R T"7Re T"7Re T"7R 4nw6D tz% %t@ gU gww rDU jgwlw \D5@ 65@E@޸ 65 w &R IE% Q fWp %ww D  @&e 6  n ڴww ! VEH0  w w D@tz s-3! w޻  w »@-0 1 v@eEe%C  e 7wzw jDe e  6e 6 f  ޺% F<U@8 6 @tz7 1 t-t-  5U@& ` iw84w(w  C B  w   6   6& 0! @5 '\ %   Jķ i5U jg0003t tw ƺD & 6 5%>> 5\> %  %5 eD-w DBCE% 5 ι mww D Ĺ00Uwxw hDU5 gE@ 6wPw @@ ~w8w  5 %%% B  n>%5%A%Ze  0! 5 % %  6 0!(  7ƶ777 WpDe Wpe@$t 07z g % t @ 5 p   p  rw~w n CDE%5 _Lr% 5  p _ e ̴ww DCL @ tEWt@PUA5UUwVw F\@ vU@& 6 5Lr5ҋ !\ p %a%ze% 5 p e & 0! Ze5 E B @ U  @t 4 t@t4@tE4&ėtt x & 6 55@ 6 ҷxʋ=ʊ;tE5%ʋt&e 4 % tE5% U@% EHEww %5- U i jg 5%  w`w P D&T5_m5T_mm T e &U 0! w5@tE5%% w ұD rwʱw B & 2%5 U77 i zwvw ffDv lewVw F fDv lew8w 8@ EtWt@P"Wt@P t @PP  UA ww ڥ7  & 2%U7(D%G,FD&FD 0 HD JD4 tP5@ 5 4FDN 1 Gwƫw D%7 i ww Aww |D R U i$4  Ȋ7Š07 `  Z<& l IG4FD  Ī& x & x  & x wpw ` F 6 I% 6 5R%  Bw"w    1 Tl EtU x5 x5z:  wʤw "+7@eVT@tA @\@]UARLD 6 Pww D eJD - - U j i!555x#xzx& 2% 2 U7ۉ7ډ i Hwf5 ΁bhķ f `,Z w   = w"w D# 4 r@&e 6 %2   p H rwưw DC 4  ʩ 707  wxw h U7֏ i7 >ȏV 5 HD@FD5R 33w xn w j7L8CteC*L sDueptEWt@PA @\U@-r-U U TRF TV5' eeH3 #@UCU@ww DueC xn4w֯w Ư@teC sww @PRww E@RLD 6gd R5Z5@P%.DUƎD7 HD77 iteC Hsww DueC r % e 6wpw `BteCU53& p wJB # wZB N$  JE JB N$  HD  JDw  C%C ND  x@ :D p wʧ x @ TtE mE@` ! __ w ƭ D e5A x 5@eC  x 5@w l z9Cjw`w P7 ^wTw DR@7NfXDWp-U i4  707ܒВ t wlw \D e5 5N @$ 5n} lew&w 7 &@7" fXDn} leww D4   707  w¦w eN 4$  r f r tUAWt @Pww TH & ~ & & jewԬw Ĭ"("7 &6 I%& 6 5 5 5 "&6 I%& 6 5 &6 I%& 6   E=e7rn Wt@P,* ( UA,   <(" I%u@ z@lzww D t%Wp1- ww ֢D WtWpewBE7  ( 6  E@, U8(Uwzw jE@,( 6wdw T _D8 1 x.8Et7rpw7ww xe% ӗz z wNw >xZeT%7xw,8Et7fv8Et7Vd8Et7F@<F88D *  F: z  z ww \-¶   1 $ <& l I%7 w88ֻ һһ@λ7ʻ7ƻ D@77w U7 77 iww  D * %)=wXw H7 wLw <7҄ y~zplb^j7Et\7E@P7F:6_* &_@_  1 4  & & 4e E 4 4U C1 F1wjw ZH 6 ʵ F5H5H1@$  4$ mA1 rWtP@A1@0  ttwlt @,, @,, 3 x1Jwx1  x5H@HZ1xH0H Z%H7 NH01 @s t  ww t7 tE5sEtP 5T"=e T"A1e T"A1@7x y@Hw \D%%0,E&E 0 E E4sUww  s5s7s 5@& 2%as [sU7Qs7Ps4  tE5 x5@ 5 4EN 1 /ww D%/4E  & Ɛ & Ɛ  i_ ww N " f E lewrw bN "  f E lewHw 8B N$  & Ɛ Ēww 8 6 I% 6 x5@e@tA @\@]UA)e 4$ `@Et0!, ( wtrap#8start#ddump#"call" _klrint"t_klxint" E 6 w$w D eE - - U j i!55 4  Lx7FxBx07:x.x t_clock"G_vaintr"P_dmintr"~_rtintr"_smintr"R_ntintr"_rkintr"w_tmintr"z_rxintr"_end$4E_edata ̑ww U7x i7 0xV 5 E@E5tEWt@PA @\U@-w-# _etext"n_main"|$_cputype#p_u!_trap"@nofault$$Essr$&E_runrun$ _swtch"8_savfp"N _iU U w 5ew Pwڑw ʑ rE@ E 6g6wd ncupc"P _display" _getc" _putc"0!_cfreeli$ _backup"!_regloc#X_fubyte"!_subyte" "_fuword"T"_suword" 55@%DUwvD7v E7v7v i7v& 2%5  1 %"_fuibyte"!_suibyte"!_fuiword"J"_suiword""_copyin""_copyout"#_copyiin""_copyiou"#_idle"N#_savu"\#_retuDE5vv v E7vv 0E Fww ސN fDF leZ 7,ww "r#_aretu"j#_spl0"#_spl1"#_spl4"#_spl5"#_spl6"#_spl7"#_copyseg"#_clearse"#_dpadd"#_d 6 5 H5HHw w H 6 l5H5HH7 TwԖw ĖD4  872N  fDF le7 d,ww zD%C, wpB N$  E  Ew 8 C%.07&  ww  H 645H5H5H 5H Զ4H5H5HH5+ P,  x@ n, p w Ɛ @ Ɛ 5@+  Ɛ 5@HEHL Nww 7z5(H H 0 U]7Y7X i H 8wΕw 1+ hEw @ Eue, t%@ E%@0#SN id@ &` 4$ m &`  pcmp"#_ldiv"4$_lrem"@$_lshift"N$csv"^$cret"j$_haltins"x$_ka6#n_bdevsw#t_nulldev"6>_rkstrat"!_issig"@C_setrun"6_setpri"6_malloc"zL_xswap"V>_swap"k_xccdec"@_xfree">_xalloc"R?_sysent#_psignv_rktab$ _rxstrat"~_rxtab$ _tmopen"2x_tmclose"x_tmstrat"zy_tmtab$ _ntopen"_ntclose"p_ntstrat"F_nttabal"C_psig"C_trap1"B_grow"HE_nosys"B_nullsys"B_ipc$8$_signal"B_stop"zC_procxmt"F_exit"ZU_c$ _smstrat"_smtab$ _cdevsw#_klopen"s_klclose"vt_klread"t_klwrite"t_klsgtty".u_rkread"w_rkwrite"x_nore"D_schar"O_namei"VM_access"2K_ptrace"E_rexit"BU_fork"nW_read"ZY_write"jY_open"Z_close"odev"(>_tmread"{_tmwrite"{_tmspeci"V|_ntread"|_ntwrite"_ntspeci""_mmread"Nu_mmwrite"u_dmopn"|_dmcls"*[_wait"RV_creat"8Z_link"\_unlink"a_exec"Q_chdir"(b_gtime"`_mknod"\_chmod"~b_chown"b_sbrea }_dmread"}_dmwrite"D}_dmspeci"~_rtopen"ڂ_rtclose"_rtread"_rtwrite"_rtspeci"_vaopen"ڌ_vaclose"^_vawrik"W_stat"]_seek"N[_getpid"^a_smount"^_sumount"__setuid"`_getuid" a_stime"`_fstat"]_stty"m_gte"_vaspeci"_smread"̖_smwrite"_rootdev#@_swapdev#B_swplo#D_nswap#F_canonb$ _coremap$ _swapmap$ _rtty"m_nice"|a_sslep"\_sync"pa_kill".c_getswit"`_dup"^_pipe"O_times"c_profil"c_setgid"ootdir$ _execnt$ _lbolt$ _time$ _tout$ _callout$ _mount$ _mpid$& _runin$( _runout$* _curpri$$a_getgid"Fa_ssig"b_halt"X_timeout"I_getf"I_closef"&J_closei"rJ_openi"J_owner"K_uchar"O_suser, _maxmem$. _lks$0 _updlock$2 _rablock$4 _proc$6 _text$_inode$_icode#H_mfree"L_printf"0_min"K_ufalloc"K_falloc",L_readp"0P_plock"Q_preadi"c_writep"P_pwritei"@e_rdwr"zY_open1"~Z_stat1"]_g"4_panic"1_cinit"n_binit"2j_iinit".(_iget""-_newproc"v9_expand":_estabur"x&_sched",7_sureg"&_netmdev"L`_buffers$@$_swbuf$\@_httab$t@_iowait"i_incore"^h_geterro"m_notavai"i_iodone"i_devstar"j_physio"seg"(_nblkdev$_nchrdev$_buf$_bfreeli$ _bread"nf_getblk"h_bcopy">>_brelse"g_alloc"(_getfs" l_partab#_maptab#>_cfree$v@_sgtty"4n_wflusht"xn_flushtt"n_canon"Bo_ttyinpu"p_ttyoutp"p_ttstart"r_ttrst,_sleep"6_badbloc"H*_wakeup"6_clrbuf"j_prdev"1_free")_bwrite"jg_ialloc"~*_iput"N._ifree"+_updatrt"r_ttread" s_ttwrite"Hs_ttystty"s_kl11$C_rrkbuf$D_rkstart"jw_rkaddr"v_rtmbuf$.D_tm_open$FD_tm_blkn$HD_te"r,_iupdat"._prele"Q_bflush"k_itrunc"R/_maknode"J0_wdir"0_writei"3_panicst$!_putchar"1_printn"J1_dm_nxre$JD_tmdens#_tm_nocl#_tmdcons#_tmspf$LD_tmcomma"x_tmstart"y_tmphys"|_dmtab$ND_rdmbuf$XD_dm11$everro" 2_readi"R2_bmap"p;_breada"f_iomove"4_bawrite"g_bdwrite"g_max"4_cpass"=_passc"=_file$pD_dmstrat"n}_dmstart"}_rxtypes#_rxstat$xD_rxok"R_rxtimeo"l_rxstart"H_rxabtbu"_rxsetup"_rxregs"_rxres yyL19 L20L21L22L23(L24+L253L267L27>_main"I~maincsv argcargvL28$L29spiipL31 L32(Y(F_error _exit _open _fin L33PL34P_fcreat L10000|L35L36^L37et"2_rxempty"΁_rxfill"_rttab$D_rrtbuf$D_rt11$D_rtdefau"ދ_rtkwrit"*_rtstart"Z_rttime""_rtkread"_ryytkio"B_vatab$D_va11$D_vastrat"_vastart"Ѝ_rntbuf$D_nt_open$E_nt_blkn$E_nt_nxre$E_ntdens#_nt_nocl#_ntdcons#_ntspf$ E_ntcomma"Ɛ_ntstart"_ntphys"_sm_size#, _smbuf$ E_smstart"֕_smphys""_cvtab _filenam @_opdope _ctab _symbuf _hshused _hshtab _cp _isn#_swtab _swp _contlab _brklab _retlab _deflab _autolen _peeksym#_peekc _eof _line#_funcbas _curbase _coremax _maxdecl _maxauto _defsym _funcsym e?e@e-^  __ %_ _8  ?e % _proflg _csym _cval _lcval _nchstr _nerror _paraml _parame _strflg _mosflg _ini_ %[d_ _ eZ _U % O  %/#$B  z%etflg _inhdr _obuf _sbuf _loregse _hiregse _bitoffs _funcblk#_cvntab _numbuf @_memlist d 1 _, $ %(%1 Ce  r eA! y6 _  tE5_nmems _structh _blklev _kwtab#L1L2L3L4L5L6L7 % %%Zuu- u-3 5-% R7 y @e@-r  L8L9L10L11L12L13L14L15L16L17L18 L86L87L88L89L90_mapch" L91L92L93L94L95labamaxL178V L179cmaxL181L182L183 L184L185L96&L972L98@L99JL100NL101VL102`_subseq"L103tL104_spn L1864 L1872 L188L189F L190L191L180R ~getccX L192 L193^ extc L105L106L10003L107L108L10004L10005L109FL1108L10006(cccrealcL195d L196 L197 L198 L199L200 L194 ~mapchL111L112RL113lL114L115L116L117L118L119L120L121 acL201 L202 acnL204mpeekL205 L206 L207L122 L123 L124LL125JL126JL127L128^L129^_getnum"@L130hL131 L208 L203 L210 L211 L212 L213L214 L216t L217 L218 x_getcc"X L132~L133L10007L134L135L136L137L138L139L219 L220 L221" L222" L223" L224" L225" L226" L227" L228" L229L38L39L41L42L40_sbrk L43L44_extdef L45pL140L141L142L143L822L10010L10009*L10016FL10011L10012 L10013_outcode L46r_fflush L10001L10002L30 cret _lookup"(~lookup(L47L48(L100142L10015>~getnum@L144L145Hnpcbaseexpseensymndig.ihashrpspnpL506L51HL52r_findkw"L53rL49L54itnsynL147L148|L149|L10018L10017L152BL10020L10019L153rL55L56L57L58L59L60L61tL62L63~findkwL154L155L156L157L158*L159&L160*L151L161hL10021VL162L64TL65 kpp1p2wpfirstcL67"L68FL70*L71^L163xL150(L10022L164L165L10023L166L10024L167L10025L168@L72>L66PL69@_symbol"Z~symbolZL73<L74bcsptlineL76L169L10026L170L171L172HL146L173L10027L10028lL10029fL77|L758L78L79L80_getchar L81L83L84L85L10030~subseqcabL174L175L177L176_putstr"~putstr ]L245-L248V _nblock L249 L250h _copnum"V_fblock L251 _gblock L252 _cblock L253 _block L254& L255^L256L2576 _xprtype"L258 L259\ L260n w _%( $@ 55  %[   ? L261 L262 L263 L264 L265 L266 L267 L268 L269 L270 L271e_%#  %d 5 5 @_"E%E% _<*e$_%  L272 L273 L274 L275 L276 L277 L278 L279 L280 L281 Z % _u& & ff ^ e ?e_ _<E%0 & &d ^ e ?L238R L282 L2834 L10046L10045J L10054L10047L10048L10049L10050L10051e_%#zet_E%E & L &$ ^ e?8e2_%$"e_%L10052 L10053L284 L10055 L285 L10056 L286 L288 L289 L290 L287d&%$#"!       L291 L292 L293 L10058RL10059\L10060 L294 L295rL297L298"_build L236L2998L300FL296L301HL302ZL303lL304lL305lL306lL307L308L10063jL10062L10066L10064pL10065~L309_errflus ~xprtypeatyb& L230N L231V L232\ L233f L215 L10033zL10032 L10037L10034L10035L100L310PL311tybtyperscmdfbscp_getkeyw _decl1 36L209 L10039L10040L10041 _tree" ~tree L234L235 opopstL312L~copnumVlenL313L314\s1s2s3L316tL317zL315ppprstandflgocsppsoscmstPlcpNL237~ L2398 L240 L2416 L242V _nextcha L243 L244V L10042. L246ML100432 L247 N 5  f t% f( ^ e ?.e($      Disallowed conversionIllegal conditionalCall of non-functionIllegal indirectionIllegal lvalueIllegal & &  ^ e ?e_  r en A! y"5 5  5  structure refUnimplemented structure operationIllegal conversionIllegal conversionIllegal type of operand%s:%d: Out of  5(%3%4  f % &f ^ e?@e:_5 %%~ 5Nyy YYiYIY yyyyyyyyyyyyyyyy yy &&  te5@tE5E @5 % %%5% 15%P    %  x ?ew_ w  % wx % %% 55%  5 u5 P%%]%_%D-5 &  &f ^ e?e_Y _<e# %  h e_     <z6<  <0D <(  L R X b l v ~       w~w x@%%D-%E% w8w 2@     @ 4?e_0 _0  % _0 @@_ `_ _ BpC_  rX  x ww +   Nff f fff e  ww $ < LrCS@ @OPMxI E@ At? t;  3  +  #    % %% .5*%>%%%% %%e%%5 %ttt t @ 5t 4 wTw ND&&& ^ ew(w " < 4 5 %)5 D-%  4  5%%D-  Nff e  Yyyff e55 %%5 % !r % & & & m ^ ee)yy Y YEf %  5@&@&ff ^ e ?@e: % ($ &   Y 89888 e?ew_w 0@ 5  N f& & f& ^ e N& & f& ^ ew Y( Y w &DBC%#  %$ %(w:w 4"DE%% &&Y Y YYYiY8i Y Yyyyyyyyy yy Y( Y( Y4 4 tww  < t4 4 tww wm- %    &# ^ eww 4CE% % % ee& & t%# eww zD% %%$ wRw L_4 D% _0 %Z*@%!@%  @  L12L13 _error" L9<L14L15L16L17 _fold" L18L19L92~chkfunapL100L101ptL103 L102~disarraap L20 L21 _block"^ L220L236L24JL250 _decref L26zL27L28L104L105tpL10028BL10029<L107FL106~~chkwpL29E L30L31L32_incref L33Y L34(L35DL10001RL36hoktL108L109tL111L10030L112 L110~lintyptL113L37h L38_chkw"_setype"tL39L10004n L100034L10009 L10005x L10006 L10007L114L117L118L119L120L115L121L122L123L124L116 L10008 L40J_chklval" L41^L42rL43L44L45L46L47L100L10032 ~error sp1p2p3 p4 p5p6L125\ _cvtab _filenam @_opdope _ctab _symbuf _hsh10L48L49~ _lintyp"L10011.L100120L10013BL50VL10014PL10015fL51used _hshtab _cp _isn _swtab _swp _contlab _brklab _retlab _deflab _autolen L10016zL52L10017L53L54L55L56L57L58L59hL10018_peeksym _peekc _eof _line _funcbas _curbase _coremax _maxdecl _maxauto _defsym _funcsymL60 L61L62 L10019L63hL64hL65TL10020NL100218L10022NL100 _proflg _csym _cval _lcval _nchstr _nerror _paraml _parame _strflg _mosflg _ini23dL66hL67L68L69L10024L70L71_plength L10025L72tflg _inhdr _obuf _sbuf _loregse _hiregse _bitoffs _funcblk _cvntab _numbuf @_memlist L73 L74L75_convert" L76L77L78 L79,L80vL81jL82_nmems _structh _blklev _build"~buildcsv opL1L2t1t2L10026L10027L83cret ~convert ptcvnlen L84rL85tp1p2p3dopeleftccvnpcvnL4L5N_disopL87VL884L89 L86n~setypetapatanewpL90arra"_chkfun"L6z_length _cblock" L3L7L8L10"L11L10000L91zpnewptL93L96L97L98L99L94L95! lval apL152 L153 pL155 L156 L157 L154 ~fold opw _ _%_75 7 Nefe  %_x5 %  % ap1ap2L1584 L159 p1v1v2L161 L1600 L162$ L163% %  7 t7 p7 l%  & fe e_b & fe e0_&E%: 7 L10033 L10034 L164@ L1658 L167 L168L L166 L169R L170X L171b L172% %%"  7 p% e -* % d_ . _b % %57l L173v L174~ L175 L176 L177 L178 L179 L180 L10035 L10036   E%  pe qOG e e P eE%P7 p% L181 L10037 L10038 L182 L10039 L10040 L183 L10041 L10042 L184 L10043 m  m! it eww _0  %e5 ] -X̥  " L10044 L185 L10045 L10046 L186 L10048 _conexp"8 ~conexp8 L187l L188> t@ ̋e x  4 bP& 0 %`2  40!4 $œ E_tree L190X L191X L192L189h 3P  ˥  %eD-w w %D      x &e  ew|w v D% f7^wZF F F F F Jbj  & J B ^ L126 L128 L129 _printf L130 L131 L127X ~block^ optsubsstr p1 p2L132 L133d p_gblock"< L135 L136 L134 _nblock" ~nblock adsL137 L138 dsL139 ~cblock vL140 L141 pL142 _fblock" ~fblock tstringL143: L144 pL1456 ~gblock< nL146 L147B pL149x _sbrk L150r L151 _exit L148| ~chk" h) e-|v7p7lwhw b_pZ JHN& 55 @E% 5  5   Hh HH HY HHIHyyIh hYHHY)H) h _   _l   _l   5 F  %xx xxh%f |& %p h_l _x \ V%_x F _% 2 " exxx _ 5f N& & & n e _   % hxhh_x 7 | _plhf b^\ X dL D@b  [  x F x h hhxxhe T ee qX eN %5\ w-w % _h8Yx tchMore than 1 'default'Inappropriate 'else'Unknown keywordStatement syntaxStatement syntaxBNNNN0Not an argument: %.8s%%^ 7 v k   w^_w RtL HDe r e ( "  %BNNBNN%.8s undefinedBSNY )  77  % 7 7% Lp e# ))hY8 HY( y h hY  h x8 hhY  h   9I%:+7 ˋ  3  _˕ @   _7 y 7  HHyyIYYI( YI8 %/  wv _w j_ b%_ P%D @ 6%_ $ %hh   & % %Q 7%  t ? 5 %* .   h  N wp-ld@7Z7V wH_ w < 6%  * $% @ x  Y Yh( y%   % )N 4e   Ne   5Nf& %u5  YhYh)7%  %p  f5%_wR%#%%  , '& m H h5_d%N& x YE%%N& & %F 57   ?eehxhxP % %nj ^Z & & &h e 65%  _ _ _h  hYI99xh 9yyIYY 8 h hhhHhYx9Y)HY)hh)HHHxY)$  HhIY_cvtab _filenam @_opdope _ctab _symbuf _hshused _hshtab _cpYh  h _isn _swtab _swp _contlab _brklab _retlab _deflab _autolen _peeksym _peekc HHH_eof _line _funcbas _curbase _coremax _maxdecl _maxauto _defsym _funcsym _proflg _csym@mm@ Nfi eww _ 7 j _ _   _l _l R5 _cval _lcval _nchstr _nerror _paraml _parame _strflg _mosflg _initflg _inhdr _obu %w %  upN %    Ne  @77up@w %c|X v0 l ff % X * L%;B : 4f % & _w _n@_8  \% L H%.< [ N&  %N& & % f % %_x %%__   x  f % : %% { e %   % % @@} % % w%    _ 7b _ TPL7H B  874& . & %   w D e  wdw ^_ V_N  _ >82  (. "%#w@HTNBIllegal storage classBSInappropriate parametersBSBBSBNBSNBBSBBSBToo many }'sExter  ww R 75 7 b N Q enal definition syntaxBBSBNBNCompound statement requiredBNBBNNNo auto. aggregate initialization0-length row: %.8sNo stri- &U %eX h w^ZwVw L_ @i:0 2.7(% 5ngs in automaticNo field initializationBNToo many initializers: %.8sUndefined structure initializationToo many structure in%@ 5@m3@@m`E%e˥& 7  5@e7˕ PitializersBBNB%s multiply definedUnexpected EOFBNNMissing '}'Case not in switchSwitch table overflowDefault not in swi N r˕˕  4% ˥˥e Z e62ip ew_w yyy8 yyh yy h % it"L32NL33\L34\L10rL35L36^L37k_errflus"_stateme"cret npsautosreglsreghL114L116N L117L118L119L113 L120~cfuncL38L39cbslocL41L42L43_declist L44L45_blockhe"L121L1226L123,L124L125_blkend",L126L127BL129 L130NL46L47L48L49L40~cinitanpflexsclassL50pL51J_simpleg L131Z_branch L132^_dogoto L133l L134b_doret L135j_pexpr" npnelninitwidthisarrayobracerealtypecbsL136F L1386 L139L140_cbranch _label L141 L142_nextcha L143L144_gblock _cpysymb L53L54L55L10004 L56L57L58jL59HL60L145_chconbr L146x L10014, L137F L10016L147 L148 L149 L150 L151_ldiv L61L10005L64L63L65L66L67L10006L10007_put& L152 L153 _conexp L154 L155L156 L157L158 L159 _chkw str L68L69_strinit"xL70L10008(L718L72_tree L73XL74_pswitch"L160J L161X L162L163f L164L165 _forstmt" L166 L167 L128f _sbuf _loregse _hiregse _bitoffs _funcblk _cvntab _numbuf @_memlist _nmems _structh _nblock _build L10009L75_rcexpr L76_block L62L10010L10011L77_blklev _extdef"~extdefcsv L1L2osclassscflagcbtyperL78*L79L80VL81VL82BL83TL84L52l~strinitxnpsclads_symbol L3_getkeyw L4RL5xL6hL7L8_error L11ssL85nL86mlpL88zerlocobraceL89L908L91L12_decl1 L9bL13\L10000L14J_decref _setinit"pL100010L100024L92L95L94L96L97[L98L99L100{L93L10012L101L16-L15*_outcode _cfunc"L17XL18.L19bL10003nL20_length L21\L102NL103}L104L10013fL105jL87j~setinitpanpL106L107vnpL23OL22GL24L25L26PL27bL28L29 L30TL31X_cinL109L110L108~statemeL111 L112oo1o2o3& ` L186 ~pexpr L187 L188 otL190 L189 L191@~pswitchL192Lw % DNefe V fef %5 & %`ww _(5  5 @0 L193cswpsswpdlswlabL195L196XL197QL198pL199@0 @0 D% % 5   7H D5% 2 (@p@L201UL200L202XL194_hreg#_areg#_funchea"~funcheaL203L204plp %_ -%% _ _ _@% fcsbstacknudgesizeL206L207L208L10023L10024L2096L210 0 A1|  lCwd  ?   L    %  _goodreg L211_prste"4L212L213L214L10025L215L216ZL217p     L205~blockheL218*L219rL221&L222tL220&~blkend,L2230L2244csncsendcsiL226<L227NL228HL231RL232L229L10026nL233L10027|L234L235xL236L237L238L239L240_lookup L241L10028L242L10029 L10030$L230,L225,~prste4acsL243L244eld too longBad type for fieldDeclaration syntax%.8s redeclaredY:csnkindL247XL248BL246hL249HL250NL251TL245L10032 L252)YIY L10018L168L169 L170L L171 L172 _pushdec L173 _redec L174@ L115~errflusaoL253L254oL256L257L255^ L10020L10021L10022V L175/~forstmt L176 L177 loslinesline1ssstL179 L178 L180 L181 L182 L183 L1846 L185' 8rning: structure redeclarationToo many structure membersBBNBBBNBNBRank too largeNull dimensionType is too complicatedFi8 )H  =@   x _w_^w _ %/w % - )Y) ʋʕ 2vt: 0 ʥ  5FD= @0 7 4% _ʥ- t7 @e77  ww e F =? eAe@@ r  A1rp  @ae-`@ @` AaH wL217 _findreg"dL218 L219 L214\L220 L221 L222 L223_cinit L133 L134 L135 L136_outcode L137 L138L139 L140L141 L215JL224L225L226L10034~findregdavailsetL227L228jregbitL142 L143 _prste ~pushdec aspL144B L145 spnsp_cpysymb"D L146L230|L229L231L232L233> ~cpysymbD s1s2L147 L148J rs1rs2L149~ ~getype adimpabsnameL150h L151 L1534argtype4typeodsdimpL155H L156 L157 L152d L158 L159 L10025 _nextcha L160* L161 L162X L163N L1642 w D5  tEE@Pww @EtAE@PUww N * L165B L154X L166F L168, L169X L170 L171 L172 L173 L174 ffg( ewtw n;D%h(%$% - %  % 2 % elsizeskwtypedsymtptrdimfldpdpisinitL10018L175L176 L177 L178 L179L180 L167< L10027L10029L10030L10031L10019L10020L81L80 L820_conexp _getype" L83RL84L85bL86P ~typovn L181 L182t L184L183| ~align typeoffsetaflenL185T L186L87L88L89L90_typov"n L91 L92L93*L94L95DL96 atflenftlL188L189 L190 L191 _decref L192 L98L97L99L100L101L102VL103"L10022L10021L10023L193 L194H L10032 L195 L196 L197 L198H L199@ L200, L201> L202+  W  Y  n& &&&[ "e `&&` eT&&d eH& h Z&U ]& ]@ ʋ &E & ] ]codeYYY9& ]~    7R ywB* *******2*TZ^nvY9fT01BFNSt` $Illegal indirectionBNNNB1N0BNBNBIllegal use of type nameBNNSNBNNNBNNBNFBNNNBNNYNIllegal use of typeBNBNBNUndefined structureCompiler error (length)Break/continue errorWrite error on tempBotch in out(((e9   &&&m e%r   5 & %    xw_(w No %wrw l Np %wTw NB 5  2 2ww \B5 E% A lfVpCE% 4%t-E &$t t_cvtt Dp@   x wV w N N  Ew8w 2: ,7(%/ d%;*  ̋ @  ̥̋ % ww  % 7 ww )(Y % %  %  f `7 \% P 7Hw@w :   w&w % ?eYYY$ & & & & f e ww 1 %;& e?eP Ap n ~z r rwjw d@E5fe %w> w 6_ *De7 5 @  5 %ww _nD 8  _j_Z˥ : ˋ &S e˥ eYY9 x , ror _paraml _parame _strflg _mosflg _initflg _inhdr _obuf _sbuf _loregse _hiregse L73L74TL75TL76ZL77^L78fL79nL80vL81L82L72_bitoffs _funcblk _cvntab _numbuf @_memlist _nmems _structh _blklev _decref"~decrefcsvL10007L83_rlength"~rlengthcsL84L85L86_simpleg"~simplegL87 YY  atL14L2tL4L5_error L30cret _incref"6~inci9iiYYyyref6tL6\L7<L8X_cbranch"^~cbranch^tlblcondL9yy(YyyyyyyL10d_treeout" L12(_outcode"L11_rcexpr"~rcexpratpL13 L14tpyyYYx9L16L17L18-L15L19L10000L20L212L225~treeout atp !"#$%&L23nL24tphpL26,L278L25jL29ZL302L31DL32:L10001RL10002VL33SL34~L35WL36L37YL38L39[L40L41`L42L43dL44L45hL46L47mL48 L49rL50*L51FL52L28jL10004_branch"r~branchrlabL53L54xL56L55ab _filenam @_opdope _ctab _symbuf _hshused _hshtab _cp _isn _swtab _swp _label"~labellL57L58L60L59_plength"~plengthapL61_contlab _brklab _retlab _deflab _autolen _peeksym _peekc _eof _line _funcbas _curbaseL62tlpL10005L64L63_length"~lengthacsL65 _coremax _maxdecl _maxauto _defsym _funcsym _proflg _csym _cval _lcval _nchstr _nerL66tncsndL68L69.L70>L67L71L-  rt Te %TҔ7owD w D%T@5ŀTGCҢ Ӌ7o e} wD|d<>8888888888 e&& %_R Z+7 n%=<_R% P_R%<%> (+!DL88csp_symbol L90<_nextcha"FL91_pushdec L92L93L10008({{{0&L94<L89@~nextchaFL95fL96LL98L_spnextc"hL99\L97b~spnextchL100L101ncL103z_getchar L10009L104L105L106L107L108L109L102_chconbr"~chconbrlL110L111L113L114L112_dogoto"_cvtab#_filenam @_opdope#_ctab#_symbuf _hshused _hshtab _cp _isn _swtab ~dogotoL115,L116np_tree _build _chkw _block L117(_doret".~doret_swp _contlab _brklab _retlab _deflab _autolen _peeksym _peekc _eof _line _funcbas.L118L1194tL121L120_putchar"~putcharcL122L123sc _curbase _coremax _maxdecl _maxauto _defsym _funcsym _proflg _csym _cval _lcval _nchd~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLstr _nerror _paraml _parame _strflg _mosflg _initflg _inhdr _obuf _sbuf _loregse#xKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('_hiregse#z_bitoffs _funcblk _cvntab#_numbuf @_memlist _nmems _structh _blklev .  v5 5 (%0Ԑ%0%9%Y%a%f%AP%FM% "kkv7kwk% kkvB  z%e8:d 1 _, d$ %(%1 Ce  r eHA! y6 mjmj@ v7jwj jjv7jwj%0%90 %a%fW7 7`jw`jw j _8%.%%_  OtE5 nd % %%Zuu- u-3 5O-% I72; y N _8 '_B%e%E   %N  =Ԑ%+ %-%06%93-%x%X% @e@-0K  Fee}_ @5>9 Z`V`O%da8%;N  i i%N %l%L % .= =_i% 4v7i'% ~i_ ? .`e(`d& x?`e`%_ % _  r e(IA! yN _ DK  B  xi-ri% di^iv W Fi@i@wL>_bw 4> L&@-@7 h@w >w >D7 iCw 8_ w 74Dbb_bbNefe b 4 & fefe ebbwH_ w7  hfpJ p0e'J p0 "  h  hEJ p0  h hJ p0J p07 hw=w 7@ E vwd7w R7_%( $@ 5O5^^  fw ~=-7 nh '  %Rhet7Fh%J %,h@7"hw.= w =_ Cn_ 7 n2*+,-./03456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab_ `; ]QJ 7gR :;5 J GD A  %%0 %7 te` :7 n'P7NCP_R7 m%<LK_R(P!1P *% %-%&%*\J  mPe_R7pmP_R $ g <7 zg :  r e8HA! y"H7= yw><w ,<_gg@e5@e5@eP7c& & % ._R>?= %_R& & % -_R@A= %_R="= %_R& /  r_R fʥ _P ʋ* ' #%(ʕ ʕ f KKfe e J e f f% ]_R_& \ % __R * % +_R )7 l%*  )%/7 zl ?_ llzJ  L?,ce&cQdf p  ? cecA 2f.f beb+f x?beb! f   _R7Xl hAbl A` ]T{P|P%T ?%T 0lՀO7 $l7k d%%[k ʕ e& q e?beb@e-xbK  F __ %_ _: [.5/& %$60| %J  .?_  r eGA! y4Pw@_|w @_J7 k7 ~k ?,be&b %_ %[d_ _ eZ _U % O  %/#$/ @GR $ & 6 % Fw F_>%J  F @& E 7v @J   Fr@]%_%D-5 % %% .5*%>%%%% %%e& E t@& E J  F% 4qTG ̋` r,WpTe |F7p7p7p%%5 %5 %)5 D-%  4 X- X-5%%D-L   p t0 .J p0 p 0J p0 r 8Ft 8F p  FwE_"w Ei5 T%TE5`A r,Wp Nff e ff e55 %%5 % !r %DeT Ee ʋT%TҤ7>p3e%nT S%,S2J  F 4 4 4 4 4  & & & m eXeXEf N%  5@&@&ff e ?HXeBX % ^^%[  - x?^e^_%#  %d f5 5 @_E%E%K _0X,X X-&  e?XeXw^0_w F00@P 5O L N xf& & f& e2^e,^_%L Z N% _u& & ff e ?]e]_ _E%L  N& & f& ew/w /&DBC%# * %$ *%(w/w /"D&  &d e ?]e]_%#]e|]_E%-L & X &$ e?@]e:]_E%% && J &# ewP/w >/4CE% % % eVe%$*]e$]_%& D &f e?\e\_AL _\e\# \\%  V&  & %# VVw.w .@%%D-%E%L w.w .@PL \e\_ N *5 " f % xf( e ?6\      xKwd.w R.+ JY;TL C .L C Nff f fff Ce e0\$ \ \& &  e ?[e[_  r eVKA! y"5 5L Cw.w -$ Lttt t @ 5Ot 4 w-w -D&&& e " 5  " 5(%3%4  f N% &f e?H[eB[_5 %w-w x- 4 4 4 twZ-w H- t4 4 tw(-w -WwmW-WW%fL  5N h&&  teP5@tE5E @5 % %%5% 15%P% %% 55%  5 u5 P%%0 w ' _Dw &UC % Q T7 '% N -D-5 & ff e  & (%`  wr w ` _t(FKB5 _T(N & 5%@_p(5` 5 @tU_p( |F%L  FeWw,w ,D% %%$L w,w ,_D% _%Z*@D-55a % % %% d)@wR&w @&_%DB5 %  7$Q5 7b&%%V&%!@%  @@ 4?SeS_ _  % _@@_`_  _%%B&% 4& 5Nf (%5wmT@_%N fe & 5% _% &5 5_BpC_ rX rCS@ @OPMxI E@ At? t;  3  +  @E%@ @aA lp@t5E555`  55@tAE@P5#        %  xK?ReRw.+_Vw + V %@t5E5P w OO -FT & 3 ?@  5OO5 u-+@ @mA AaAHL  VUUw*w *% DNefe b fef %5 & (%`w*w *_45  @5E%@ l @ lH-  s@E%%  %  M ˋ%%%5 @0 @0 @0 D% % 5   76U 5% U U@T˥% ˥ s-% ˥ s- V_%ˋE%@E% ,M  Ns p@Tp %T_ -T%%TTDM T_( _( _(@%|T% ˕ _%  _%% ZNTNPNHN _%5 % _$ -5 7n#%=5 ^# 5N f < A1ZT ^M JTCw)  ?   X   iM  %ff (%5 -Q{- \  3MMQ{wmQ  ff (%5um  ~M =@   xM _w(_jw (_S $%/SwS %um Q%Q M @QQ RvQeQ s- sQeQ% )3 5 5% -W &ʋʕ 2DS@S: 0 ʥ  5SS= @0 7 "S% _ʥM % %Pw6"% L X.7`L-LLLL  &  5%S% C! !! !p N  L(tR7 RW@WN 5%5Q p0 w->>w> % _1%%Q  %)N & 5%@_p(J L%_d(7 CJ5 _d(JJ j O N  *2 -2wlw Z\B5 E% *A lfVpCE% 4%pJ xx %\J N %f5` 5 @tU5%N  %7h 7JI %t-E &$t ttaO Dp@   xNuO  w w  N - Ew8 )N 7 I `I5` Z5 @tU5  xM7@$M7$ y d)w |: 7%/ d%;*RC  &̋ @  z̥̋ %d ww _&w v8N wtw b_`)BDCPN \Me r`7 LME% *% ED-7 M 2w   % 7 BBww )B 6% %  %  B 7 B% B 7rBww  %%N mL%7 Le%%N mL%7 L _N @w w  rN   O w|w j% 4??e ?$ >>& " & & & f e 8+w*w 1 %;& N Bww p XHe N  wdw Rd']'@J''A @@U p*=p'Pj'Pb'eNNeP=NHG>e>?>e>P >>Ap n z>v> 8+A -ww @E5fe F%w  -%3 p*"@E% QU p* P  x4MP&P&N@mw w _h1r xAtDe7 G5 @ Z&U E ]G& E ]G@ ʋ &Ew M%  0 7MwXw FD5N  tEE@Pw"w @Et F & F ]lG E ]XG& E ]FG O  FO N7z yww AE@PUww N +,ffgN p0eww ;D%h(%$% N p0% _4 _ 4%_ 475 7 DNefe b  %_35 %  % % % 2 %77 8+77 & & &h e 8+ <5%  _6 _6 _6 %w  &3 \4 _9˕ @    :-_9nQ7 y 7t  8+ %S  %  upNR p0%    Ne R  @7 :7 :up@w"_5w _8@ Bw _9w _&? h%_"? V%  8+ <%_"?3 :- "% h3 \& +%_ 8xR  b% " N%. R N& HG 5%N& & 5%%Rv S p0 %Q 7%  t.3 - ?"33  5 %*332 .d^2 :- e %   % % @@S p0%S p0 % lw$w D N 8+wH-22@7272 - w_>w  <%   *% S  B ww e S  w w _= \_=2S _=8   8. (%#wx8@@mm@ NRP2 J2n7@25  -027 *2 b2 -N :- 22 2|2S p0e-1 &S fiAS p0eww _=7 jES _=68_@=  - _= _= R5 %cp0%eS p01 :-w11ww _PA 1i10 1171% -5%@7X |0 @  : f +% p :-* %;7    f +%  :- v7n7 l/f + 5@m3@@m`E%e˥& )7 Q L5@e7-˕ P N 8+ 7 L R  B w_v1w t  =e r"R p0e =  &R p0%x=77% %_= %%V7_9 _=  xDQ    ~ f +% : %%7X T ^=f=A )R p0%0= 7 A 7%,R  L=pHR p0e=LR p0e- - :-  :-_=78  :-_=66 76  :-  76&  & +% v6 -p6 :-f6d6_=\6<<7<76 -_=2606 (6  6  5 :- F6 :-5 %%6f %PR  )N *4e   Ne rR   -5Nf& G%u5 7`%  & +%5 :-5_=_=  \%_= 5QS _9%q5dS  z5v5el5 :-_9\5%F  l5%_^7w(%#%% R  '&  m; 5_^7d% V5 5f " N& & & n e 8+ 5_= 5zS  5S  %_=Z 74 N& 7 YE%%N& & 5%F R; 57 F;R  L?7e77e7P % P :-_944< 4 6 2 4 , d4 :-44bS  [  xVQS F %:+7 l4|4ˋ3  ˥  %neTD-wb w N%D      xQ&e #T p0ewl $ l  l  P l  !d .I8igitnsyn~subseqcab~putstrlabamaxcmax888888888lspnsp~cpysymbP&s1s2rs1rs2~getype&adimpabsnamearoslinesline1ssst~pexpr.?ot~pswitchn?cswpgtypexxtypeodsdimp~typovz(~align(typeoffsetaflenasswpdlswlab~funchea@plcsbstacknudgesize~blockheXArtflenftl~decsynd)o~redec)~goodreg)hpwordgotleng~blkendAcsncsendcsi~prsteBacscsnkind~errflusBao6 p0_fflush"8Fcret"G_lookup"B_findkw"_symbol"t_getchar"XE_mapch" _subseq"_spnextc"/_getnum"Z_getccaayzaaazzaabzzaaczzaadzzaaezzaafzzaagzza"r _putstr"_tree" _nextcha"._nblock"L_copnum"p_fblock"_gblock"_cblock"x_block"_xprtype"_bahzzaaizzaajzzaakzzaalzzaamzzaanzzaaozzauild"_errflus"B_getkeyw"b_decl1" _disarra"_chkfun"f_length"-_fold"N_decref"*_incref"*_chkw"apzzaaqzzaarzzaaszzaatzzaauzzaavzzaawzza"_setype"_chklval" _lintyp"h_plength"X-_convert"_printf"C_conexp"_declist" _declare"_align"(_strdeaxzzaayzzaazzzabzzzaczzzadzzzaezzzafzzzac"<_pushdec"&_redec")_decsyn"d)_getype"&_typov"z(_goodreg")_rlength"X._cinit"5_prste"B_cpysymb"P&_fgzzzahzzzaizzzajzzzakzzzalzzzamzzzanzzzaree_re$px_findreg"p*_cbranch"+_treeout"+_rcexpr"8+_branch"-_label":-_simpleg"t._chconbr"l/_dogoto"/_doret"ozzzapzzzaqzzzarzzzaszzzatzzzauzzzavzzzadretpFgoodrettFflFFsbrk.o|FndTwrite.oFexit.oFcsv.oFcleanup.Gcerror.oGldiv.o/_putchar"B0_write"F_errno$rx_putw"E_putc"F_setinit"8_cfunc"4_stateme" 9_ldiv"G_strinit"7_blockGsavr5$tx_exit"Fstart"_main"_cvtab#P_filenam$T_opdope#O_ctab#P_symbuf$T_hshused$T_hshtahe"XA_blkend"A_pexpr".?_pswitch"n?_forstmt">_hreg#Q_areg#Q_funchea"@pfloat"NEpscien"NEcerror"G_eb$T_cp$n_isn#BG_swtab$n_swp$q_contlab$q_brklab$q_retlab$q_deflab$q_autolen$q_peeksym#DG_pnd$x_brk"F__cleanu"G_ldivr$x_lrem"0Geekc$q_eof$q_line#FG_funcbas$q_curbase$q_coremax$q_maxdecl$q_maxauto$q_defsym$q_funcsym$q_proflg$aaaraaaasaaaataaaauaaaavaaaawaaaaxaaaayaq_csym$q_cval$q_lcval$q_nchstr$q_nerror$q_paraml$q_parame$q_strflg$q_mosflg$q_initflg$q_inhdraaazaaabzaaaczaaadzaaaezaaafzaaagzaaahza$q_obuf$r_sbuf$t_loregse#@Q_hiregse#BQ_bitoffs$ v_funcblk#HG_cvntab#P_numbuf$v_memlist$Nv_nmems$Pv_saaizaaajzaaakzaaalzaaamzaaanzaaaozaaapzatructh$Rv_blklev$hv_kwtab#TGcsv"F_error"_open"E_fin$jv_fcreat"E_sbrk"|F_extdef"n1_outcode"aaqzaaarzaaaszaaatzaaauzaaavzaaawzaaaxza7 = AMAX) { shrunk++; if(maxa >= AMAX*2) { shrunk++; for(p = &a[0]; p < plim; p++) { p->re /= 4; p->im /= 4; } } else { for(p = &a[0]; p < plim; p++) { p->re /= 2; p->im /= 2; } } } for(i=0; ; ) #define complex struct cx #define cmove(a, b) (b)->re = (a)->re; (b)->im = (a)->im; #define AMAX (32767/3) /* if all element{ for(p = &a[i]; p < plim; p += s) { q = p + hs; v.re = smul(q->re,rbase->re) - smul(q->im,rbase->im); v.ims are < AMAX, overflow can't occur */ struct cx { int re, im; }; int scale; int oflow; fft(a, n, conjug) complex a[]; { sta = smul(q->re,rbase->im) + smul(q->im,rbase->re); q->re = p->re - v.re; q->im = p->im - v.im; p->re += v.re; p->itic complex v; int i, j, k; int s, hs; int t, maxa; int shrunk; register complex *p, *q; complex *plim, *rbase; static com += v.im; } k = i; if(++i >= hs) break; k ^= i; /* find changed bits */ p = q = rbase; while((k >>= 1) != 0)mplex wvec[15], rvec[15]; shrunk = 0; k = 0; plim = &a[n-2]; /* permute into reverse-binary order */ for(p = &a[0]; p <=  p--; cmul(p+(wvec-rvec), p); while(p < q) { cmove(p, q); q--; } } rbase++; hs = s; } while(s < n); plim; p++) { q = &a[k]; if(pre; p->re = q->re; q->re = t; t = p->im; p->im = q->im; q->im = t if(oflow>0) { printf("%d overflows\n", oflow); oflow = 0; } return(shrunk); } ; } j = n; while(k >= (j /= 2)) k -= j; k += j; } i = n; p = &wvec[0]; v.re = -scale; v.im = 0; /* build wvec[0..logn] : table of 2**k'th roots of unity */ /* wvec[k] = exp(+- i * pi / (2**k)) */ do { cmove(&v, p); p++; v.im = ssqwzzzart((scale - v.re)/2); if(conjug < 0) v.im = -v.im; v.re = ssqrt((scale + v.re)/2); } while((i /= 2) != 0); rbase = &rvec[0]; plim = &a[n]; hs = 1; do { s = hs*2; p = rbase; do { p->re = scale; p->im = 0; } while(--p >= &rvec[0]); /* f...Awft.cBfts3.cCwfts.cDarths.sEwft.diffFwfts.olook to see if anything needs scaling down */ /* this takes a lot of code, but not much time */ maxa = AMAX-1; for(p = &a[Gscale.sHtryIerfle0]; p < plim; p++) { if((t = abs(p->re)) > maxa) maxa = t; if((t = abs(p->im)) > maxa) maxa = t; } if(maxa >8 int n; int oflow; complex *a; float atof(); main(argc, argv) char **argv; { register int i, t; int flag, printing; long rssogn; int flag, printing; long rsse, isse; complex max; struct { int hi, lo; } ; flag = atoi(*++argv); n = abs(flag); e, isse; complex max; struct { int hi, lo; } ; if((flag=atoi(*++argv)) == 0) return; n = abs(flag); if(n<2 || (n&(n-1))if(n<2 || (n&(n-1)) != 0) return; a = sbrk(n * sizeof(*a)); /* allocate space for array */ t = n; for(i = 0; (t >>= 1) != 0;  != 0) return; a = alloc(n * sizeof(*a)); if(argc > 2) printing = atoi(*++argv); if(argc > 3) seed = atoi(*++argv); srand(sei++) ; logn = i; if(argc > 2) printing = atoi(*++argv); if(argc > 3) seed = atoi(*++argv); srand(seed); for(i=n; --i >= 0; ed); for(i=n; --i >= 0; ) { a[i].re = random(); if(flag < 0) a[i].im = random(); } if(printing&1) print("first:\n"); ff) { a[i].re = random(); a[i].im = (flag < 0) ? random() : 0; } if(printing&1) print("first:\n"); i = fft(a, n, -1); if(t(a, n, -1); if(printing&2) print("second:\n"); fft(a, n, 0); if(printing&4) print("third:\n"); rsse = isse = 0; max.re = mprinting&2) print("second:\n"); t = fft(a, n, 0); printf("shrunk %d + %d\n", i, t); shrink = logn - (i + t); if(printing&4) ax.im = 0; scale = 16; srand(seed); for(i=n; --i >= 0; ) { t = a[i].re - random(); rsse += smul(t, t); if(max.re < abs(print("third:\n"); rsse = isse = 0; max.re = max.im = 0; scale = 16; srand(seed); for(i=n; --i >= 0; ) { t = (a[i].re >> t)) max.re = abs(t); t = a[i].im; if(flag < 0) t -= random(); isse += smul(t, t); if(max.im < abs(t)) max.im = abs(t); shrink) - random(); rsse += smul(t, t); if(max.re < abs(t)) max.re = abs(t); t = (a[i].im >> shrink); if(flag < 0) t -= } t = n; for(i = 0; (t >>= 1) != 0; i++) ; /* printf("sse: (%s,", locv(rsse.hi, rsse.lo)); */ /* printf("%s)\n", locv(isse.hi,random(); isse += smul(t, t); if(max.im < abs(t)) max.im = abs(t); } /* printf("sse: (%s,", locv(rsse.hi, rsse.lo)); */ /*  isse.lo)); */ scale = 4; t = rsse >> i; printf("rms (%d,", ssqrt(t)); t = isse >> i; printf("%d)\n", ssqrt(t)); printf("mprintf("%s)\n", locv(isse.hi, isse.lo)); */ scale = 4; t = rsse >> logn; printf("rms (%d,", ssqrt(t)); t = isse >> logn; prax (%d,%d)\n", max.re, max.im); if(oflow > 0) printf("overflows:\n%d\n", oflow); } print(s) char s[]; { register int i; priintf("%d)\n", ssqrt(t)); printf("max (%d,%d)\n", max.re, max.im); if(oflow > 0) printf("overflows:\n%d\n", oflow); } print(s)ntf(s); for(i=0; i> 5); }  char s[]; { register int i; printf(s); for(i=0; i> 5); } #define complex struct cx #define pi 3.1415926 #define rads .01745 struct cx { int re, im; }; int scale 1000; int seed 1254;  int seed 1254; int n; int oflow; complex *a; float atof(); main(argc, argv) char **argv; { register int i, t; int shrink, l9 smul add r2,r0 / b.im*a.re + b.re*a.im bvc 2f inc _oflow 2: mov r0,(r3) / set b.im jmp cret _ssqrt: mov 2(sp),r0 ble r/ 1/2 : 26.56505 2555. / 1/4 : 14.03624 1297. / 1/8 : 7.12502 651. / 1/16 : 3.56733 326. / 1/32 : 1.78991 163. / 1/64 : .et mov r2,-(sp) mov r3,-(sp) mov r4,-(sp) mov $4,r4 mov _scale,r1 cmp r0,r1 ble 1f 2: asr r0 asl r1 cmp r0,r1 bhi 2b 895173 81. / 1/128 : .447614 41. / 1/256 : .223810 20. / 1/512 : .111906 10. / 1/1024: .0559528 5. / 1/2048: .0279764 3. / br 3f 1: asl r0 asr r1 cmp r0,r1 blo 1b mov r1,r0 3: mov 10(sp),r2 mul _scale,r2 div r0,r2 / N * scale / x bvc 4f inc _oflow 4: add r2,r0 ror r0 / ((N*scale/x) + x) / 2 sob r4,3b ret4: mov (sp)+,r4 ret3: mov (sp)+,r3 ret2: mov (sp)+,r2 .globl _smul, _sdiv, _ssqrt .globl _cadd, _csub, _cmul .globl _itoatn, _atntoi, _rotate, _polar .globl _rand, _srand .comm _scaret: rts pc _itoatn: / convert scaled int angle to atn representation mov r2,-(sp) mov 4(sp),r2 / r2 = angle mov $atans,r1le, 2 .globl _scale .comm _oflow, 2 .globl _oflow .text _smul: mov 2(sp),r0 mul 4(sp),r0 div _scale,r0 bvc 1f ovf: clr r0 / table of arctans sub (r1),r2 / subtract 90 degrees mov $1,r0 / prepare to loop 16 times 1: / (until the 1 is shifted in inc _oflow 1: rts pc _sdiv: mov 2(sp),r0 mul _scale,r0 div 4(sp),r0 bvs ovf rts pc _cadd: / cadd(a, b); struct cx *a,to carry) tst r2 / compare angle to zero bpl 2f add (r1)+,r2 / < 0 : add angle asl r0 / shift in 0 bit bcc 1b / loop bac *b; adds a to b mov 2(sp),r0 mov 4(sp),r1 add (r0)+,(r1)+ bvc 1f inc _oflow 1: add (r0),(r1) 3: bvc 2f inc _oflow 2: k br ret2 / unless all 16 done 2: sub (r1)+,r2 / > 0 : subtract angle sec rol r0 / shift in 1 bit bcc 1b / loop 3: mov rts pc _csub: / csub(a, b) mov 2(sp),r0 mov 4(sp),r1 sub (r0)+,(r1)+ bvc 1f inc _oflow 1: sub (r0),(r1) br 3b _cmul: (sp)+,r2 / yes, return rts pc _atntoi: mov $-18182.,r0 / 18182 = sum of all arctans, / so -18182 = sum of values of all 0 / cmul(a, b); multiplies a into b jsr r5,csv mov 4(r5),r4 mov 6(r5),r3 / dest mov (r3)+,-(sp) / save b.re mov (r3),-(sp) /bits mov $atans,r1 mov r2,-(sp) 1: mov (r1)+,r2 asl 2(sp) / test bit in atn representation bcc 2f / if off, leave angle s multiply b.im mov 2(r4),-(sp) / by a.im jsr pc,_smul mov r0,r2 mov -(r3),(sp) / and b.re mov (r4)+,-(sp) / by a.re jsr pcubtracted; asl r2 / else add it in (twice, add r2,r0 / to correct for subtraction) br 1b 2: bne 1b / if anything's left, ,_smul cmp (sp)+,(sp)+ sub r2,r0 / b.re*a.re - b.im*a.im bvc 1f inc _oflow 1: mov r0,(r3)+ / set b.re / now mult b.re (continue mov (sp)+,r2 rts pc / else return .data atans: / table of arctangents. / table[0] = 90 degrees, / table[i+1] left on stack) mov (r4),(sp) / by a.im jsr pc,_smul mov r0,r2 mov (r3),(sp) / mult b.im mov -(r4),-(sp) / by a.re jsr pc,_= arctan(1 / 2**i), / with angles scaled so 360 degrees = 65536. 16384. / 90. degrees 8192. / 1 : 45.00000 degrees 4836. : stuvwxyz|}~797.,r0 add r3,r0 / as above -- leave x in r0 rts pc _srand: / srand(seed); seeds random number generator mov r2,-(sp) mov $103.,r2 mov 4(sp),r1 mov r1,r0 bne 1f mov $31415.,r0 movb $271.,r1 br 2f _rand: / rand(); returns random signed int  / uses a 24-bit pseudorandom bit sequence mov r2,-(sp) mov lseed,r0 movb hseed,r1 2: mov $10.,r2 / ten shifts per call 1: mov r3,-(sp) 3: mov r1,r3 bic $!204,r3 / isolate bits 19 and 24 add $200-4,r3 / xor them aslb r3 / shift (19 xor 24) to cgrees to theta 1: clr r3 / n = 0 2: mov r1,r2 com r2 / use complement of y's sign jsr pc,stepxy / step by +/- atan(1/2**n)arry rol r0 / rotate it rolb r1 / through the shift register sob r2,3b mov r0,lseed mov r1,hseed mov (sp)+,r3 mov (sp)+ 1/4096: .0139881 1. / 1/8192: .0069940 1. / 1/16384 : .0034970 (not very significant) .text _rotate: / rotate(xy, theta);  dec r3 / bump n asl r2 / shift sign bit rol (sp) / into theta bcc 2b / loop 15 times jsr pc,xshrink mov 12(sp),r3 / rstruct cx *xy; int theta; mov r4,-(sp) / expects theta in atn form mov r3,-(sp) / alters xy in place mov r2,-(sp) / also retu3 = rtheta mov r0,(r3)+ / set r mov (sp)+,(r3) / and theta (in atn form) br ret4 stepxy: / x in r0, y in r1, sign in r2, (-rns x as func value mov 10(sp),r3 / r3 = xy mov (r3)+,r0 / r0 = x mov (r3),r1 / r1 = y mov 12(sp),r2 / r2 = theta bpl 1f n) in r3 / implements / x = x - sign * y * (2 ** (-n)) / y = y + sign * x * (2 ** (-n)) / thus rotating (x,y) by the angle +/ 180 degree bit set? neg r0 / yes, negate x & y neg r1 1: clr r3 / n = 0 2: asl r2 / next bit of theta for sign jsr pc, or - arctan(1 / 2**n) / Unfortunately, it also scales (x,y) up by cos(atan(1/2**n)) / -- routines xshrink and xyshrink correcstepxy / rotate (x,y) by +/-atn(1/2**n) dec r3 / bump n cmp r3,$-16. / loop while n <= 15 bne 2b jsr pc,xyshrink mov 10(spt for this. mov r1,r4 / y ash r3,r4 / y >> n tst r2 bmi 1f neg r4 / negate unless sign negative 1: add r0,r4 / new x ),r3 mov r0,(r3)+ / put in new x, y mov r2,(r3) br ret4 _polar: / polar(xy, rtheta); struct cx *xy, *rtheta; mov r4,-(sp) in r4 ash r3,r0 / x >> n tst r2 bpl 2f neg r0 / negate if sign negative 2: add r0,r1 / new y mov r4,r0 / new x rts pc/ also returns r as func value mov r3,-(sp) mov r2,-(sp) mov 10(sp),r3 / r3 = xy mov $2,-(sp) / prepare theta for 15 shifts  / multiply x and/or y by .60723, which is / the product of the cosines of all those arctangents. xyshrink: mov r1,r2 mul $ mov 2(r3),r1 / r1 = y mov (r3),r0 / r0 = x bpl 1f / if x < 0, neg r0 / negate x and y neg r1 inc (sp) / and add 180 de39797.,r2 / multiply by (39797/65536) add r1,r2 / correct for signed multiply / leave y in r2 xshrink: mov r0,r3 mul $39; 9YYbw _eN 5N 7%_ =_t 7  5% e_scale#_scale2#_seed#_n _oflN 5% eN 7fb Z  8WtmH   " Wtm.15 ow _a _main"~maincsv argcargvL1L2it %5    %& %@`@55#  u55u 55shrinklognflagprintingrsseissemax_atoi _abs L3_sbrk  R d&tmrA t  5`u`u  @- 5tm*A t   L4ZL5bL6^L7L8_srand L9L10_random"L10000L100  5`u`u  @- 5A@B vC + A@B vC 4 01L11L12_print"_fft L13 L14 L15_printf L16JL17#Nf9 % ztF wf_w ZN  -Jtm>tm0&U % ww  L18zL19"_smul L20L21L22 _ssqrt L23+L244L259L26tw@first: second: shrunk %d + %d third: rms (%d,%d) max (%d,%d) overflows: %d (%d,%d) L27Fcret ~printsL28L29iL31L32L34UL33,r2 rts pc .data lseed: 31415. hseed: .byte 271. .even .text hx99999Y9hh9YY9Y994,98c q = p + hs; cmove(q, &v); cmul(rbase, &v); cmove(p, q); csub(&v, q); cadd(&v, p); . Y9YxxYxxXXII< random bit sequence mov r2,-(sp) mov lseed,r0 movb hseed,r1 2: mov $10.,r2 / ten shifts per call 1: mov r3,-(sp) 3: mov rd.globl _smul, _ssqrt, _cmul .globl _srand, _rand .globl _cmul .globl _scale2 .text _smul: mov 2(sp),r0 mul 4(sp),r0 mov _scale2,-(sp) neg (sp) ashc (sp)+,r0 mov r1,r0 rts pc _cmul: / cmul(a, b); multiplies a into b jsr r5,csv mov 4(r5),r4 mov 6(r5),r3 / dest mov (r3)+,-(sp) / save b.re mov (r3),-(sp) / multiply b.im mov 2(r4),-(sp) / by a.im jsr pc,_smul mov r0,r2 mov -(r3),(sp) / and b.re mov (r4)+,-(sp) / by a.re jsr pc,_smul cmp (sp)+,(sp)+ sub r2,r0 / b.re*a.re - b.im*a.im moecho >>tries wfts $1 $2 $3 erfle /bin/time wfts $1 $2 $3 >>tries v r0,(r3)+ / set b.re / now mult b.re (left on stack) mov (r4),(sp) / by a.im jsr pc,_smul mov r0,r2 mov (r3),(sp) / mult b.im mov -(r4),-(sp) / by a.re jsr pc,_smul add r2,r0 / b.im*a.re + b.re*a.im mov r0,(r3) / set b.im jmp cret _ssqrt: mov 2(sp),r0 ble ret mov r2,-(sp) mov r3,-(sp) mov r4,-(sp) mov $3,r4 mov $1,r1 ash _scale2,r1 cmp r0,r1 ble 1f 2: asr r0 asl r1 cmp r0,r1 bhi 2b br 3f 1: asl r0 asr r1 cmp r0,r1 blo 1b mov r1,r0 3: mov 10(sp),r3 clr r2 ashc _scale2,r & 6 % w  X n@ @m Ne@& wnf@wl f2 div r0,r2 / N * scale / x add r2,r0 ror r0 / ((N*scale/x) + x) / 2 sob r4,3b ret4: mov (sp)+,r4 ret3: mov (sp)+,r3 re@)wVfwZwV Tw*f @@& BF7F L30~randomL35L36_rand L37t2: mov (sp)+,r2 ret: rts pc _srand: / srand(seed); seeds random number generator mov r2,-(sp) mov $103.,r2 mov 4(sp),r1 mov r1,r0 bne 1f mov $31415.,r0 movb $271.,r1 br 2f _rand: / rand(); returns random signed int / uses a 24-bit pseudo= et screen ptr bne 1$ ; failed to allocate? .print #unable ; yes, print a message trap ; and give Fortran an error trapturns a pointer to it cmp r0,#20000 blo 1$ rts pc 1$: mov #9600.,r1 mov #20000,abase br allocb marg: ; function marg(i) mov @2(r5),r0 ; allows access to storage at address i sub #mem-2,r0 ; as though it were a asr r0 ; Fortran idmainrmainpni FCg )  " et ZEWue nop   N  printf$ d T!e 5 &     f r f rvr t@P 1 ($1n oip! ɋp ȋ?E A Ze   ?    7?on /time/ dt, df, dtwant common /logger/ nrun, thresh, intrvl(8) common /header/ lhead, header(80) byte header common /graph/ nslots common /data/ mdata common /memory/ mem(1) byte cd(9) integer ivec(8) data dtwant/2000e-6/, thresh/.05/, nrun/0/, lhead/80/ * intrvl(1),intrvl(2),intrvl(3)/ 1, 1, 64/, * cd(1),cd(2),cd(3),cd(4),cd(5),cd(6),cd(7), * cd(8),cd(9)/'H','R','G','F','I','T','D','L','Q'/ 310 type 315 315 format(' Enter name of logging file') accept 20, (header(i), i=1,80) 325 call assign(3, header, 0, 'NEW', 'NC') c let header initially be whatever they type for file name. c command loop c ; and leave. remain: .word linep: .word cstep: .word getscrn: ; if scrnp not set yet, allocate a screen area for  .limit ; limit, limit+2 contain respectively the ; low and high memory limits. abase: 0 ; allocation base -- zero if it; mov scrnp,r0 ; in any case, return pointer to it in r0. bne 1$ jsr pc,newscrn ; allocate screen mov r0,scrnp ; and snot computed yet newscrn: ; FUNCTION NEWSCRN mov #9600.,r1 ; allocates a screen buffer for you jsr pc,allocb ; and re>  less important, e.g. calibration, channels, only a few c points need be kept. c For the K'th channel in the recorded bunch, ichans fast = (period .lt. 180) if(fast) period = 200 dt = period*nchans*1e-6 if(fast) type 8, 1./dt 8 format(' Sampling46 continue 15 type 17 17 format(' H)eader R)ate G)ather I)ntervals T)hreshold Q)uit ?help') 20 format(80a1) 18 accept 20,(cntrvl(K) tells c how many points to skip between each saved point. c Thus, since 512 points are recorded for every channel, cline(i), i=1,80) do 30 lengc=80,1,-1 if(cline(lengc) .ne. "40) goto 40 30 continue c if we got here, they didn't type adnything goto 18 40 lengc = lengc+1 do 45 icmd=1,9 if(cline(1) .eq. cd(icmd)) goto 50 45 continue c unknown command  " et ZEWue , perhaps '?' -- give help c46 type 47 c47 format(' Commands have the form:'/ c *' Letter [arguments]'/ c *' whereT!e 5 &     f r f rvr t@P  the arguments, depending on the command, may be:'/ c *' nothing, or a single real number, or one or more'/ c *' integers s! ɋp ȋ?E A Ze   ?    7?eparated by commas, or a string of text.'/ c *' The command letters are:'/ c *) c47 format(' No help') c goto 15 50 icurs file 180 if(icurs .ge. lengc) goto 15 call close(3) call assign(3, cline(icurs), lengc-icurs, 'NEW', 'NC') goto 15 c  = 3 goto (110,120,130,46,150,160,46,180,190) icmd c H -- set header for logging data 110 lhead = lengc-icurs do 112 i= Q -- quit 190 call close(3) call exit end subroutine gather integer nchans,nsampl,period,ichan(8),struct(11) e1,lhead 112 header(i) = cline(i+icurs-1) goto 15 c R -- set sampling rate-per-channel (in freq or period) 120 v = 0. quivalence (nchans,struct(1)), (nsampl,struct(2)), * (period,struct(3)), (ichan(1),struct(4)) logical fast common /header/ call getrea(v) if(v.eq.0.) goto 124 c normally expect frequency (in Hz) if(v.gt.0.) goto 122 c but if minus sign, then  lhead, header(80) byte header common /time/ dt, df, dtwant common /logger/ nrun, thresh, intrvl(8) common /graph/ nslotit's period in microseconds dtwant = -1e-6 * v goto 124 122 dtwant = 1./v 124 type 126, ifix(dtwant*1e6), 1./dtwant 126 fs common /data/ idata(1032) common /memory/ mem(1) data nchans/0/ c get channel numbers -- if none, use previous set ormat(' Sampling every',i6,' microseconds =',f8.2,' Hz') goto 15 c G -- gather data 130 call gather goto 15 c I --  call numbrs(ichan, i, 8) if(i .gt. 0) nchans = i if(nchans .eq. 0) return if(nchans .le. 2) goto 7 type 6 nchans = 2 set intervals for logging data for each channel c For important channels, every data point is saved in the log file; c but for 6 format(' Gathering only first two channels') c set up structure for collect routine 7 nsampl = 1 period = dtwant*1e6/n? f(cline(icurs).ge."60 .and. cline(icurs).le."71) goto 25 n = n+1 ivec(n) = k*sign if(cline(icurs).eq."54) icurs = icurs+1 chance of confusing names, ; a hash function combining all of the ; characters in the name is computed. ; Comparing names inv if(n .lt. maxn) goto 10 99 nnums = n return end subroutine getreal(x) common /cmd/ icurs, lengc, cline(80) byte colves testing both the four name bytes ; (with both name and length encoded in them) and ; the hash byte. .macro dent name,line if(lengc .le. icurs) return decode (lengc-icurs, 10, cline(icurs)) x 10 format(e12.8) return end  flags, code .nchr $leng, $pos = 0 $hash = 0 $leng = $leng*200 .irpc $c, $lastc = ''$c $pos = $posr0 = %0 r1 = %1 r2 = %2 r3 = %3 r4 = %4 r5 = %5 dsp = %5 ic = %4 sp = %6 pc = %7 thread = 4437 ; "jsr ic,@(pc)+" ne + 1 .if le, $pos-3 .byte <$leng&200> + $lastc $leng = $leng/2 .endc $hash = <<$hash*2> + <$hash/200> + $lastc> too fast -- rate reduced to ',f7.0,' Hz') call collec(idata, nchans*513+6, struct) nrun = nrun+1 c put out a form feed,xt = 12407 ; "mov (ic)+,pc" -- like jmp @(ic)+, but slightly faster hsize = 16. ; size of hash table for root vocabulary  run number, header; then date&time write(3,10) "14, nrun, (header(i), i=1,lhead) 10 format(a1,'Run',i3,2x,80a1) write(3,11 ; macro to generate a dictionary entry header, ; which has the form: ; [-8] NAME (four bytes) ; [-4] hash code byte ; [) 11 format('Write out date and time here') do 20 i=1,nchans if(intrvl(i).eq.0 .or. intrvl(i).ge.512) goto 20 istep =-3] flag byte ; [-2] link word ; [0] executable code begins here ; ; The fields, respectively, contain: ; name: ; The l intrvl(i) icount = 512/iabs(istep) if(istep .lt. 0) istep = 1 write(3, 25) ichan(i), dt*istep, icount istep = iength of the name is stored in the most-significant bits ; of these four bytes, with the LSB of the length ; in the first bytestep*nchans ipos = idata(2) + i - 1 write(3, 27) (idata(j), j=ipos,ipos+(icount-1)*istep,istep) 20 continue return 2. ; The remaining seven bits of each byte hold ASCII characters ; from the name. ; For names with <= 4 characters, the entire5 format(i4,' Data'/f9.6,' Seconds between points'/i4,' Points') 27 format(10i6) end subroutine numbrs(ivec, nnums, maxn) name is stored; ; otherwise, the first three bytes hold the first three ; characters of the name, and the fourth byte contain integer ivec(1) common /cmd/ icurs, lengc, cline(80) byte cline integer sign n = 0 10 if(cline(icurs) .ne. "40) gos the FINAL ; character. This unusual arrangement makes it convenient to ; use names which differ only in the last character,to 20 icurs = icurs+1 if(icurs.lt.lengc) goto 10 20 sign = 1 if(cline(icurs).ne."55) goto 22 sign = -1 icurs = icur e.g., ; "drop1" and "drop2". Also, in this system at least, ; many words have "suffixes" of one character such as #, !, or (s+1 22 if(cline(icurs).lt."60 .or. cline(icurs).gt."71) goto 99 k = 0 25 k = k*10 + cline(icurs) - "60 icurs = icurs+1 i, ; and this scheme allows this feature to show up on human-readable ; dictionary dumps. ; ; hash: ; To further reduce the @  ; graphic random walk program .mcall .regdef, .ttinr, .ttyin, .exit .regdef .globl screen, rand, ndots, dotlistcc estep ror r3 tst -(r2) br estep right: rol r3 bcc estep rol r3 tst (r2)+ estep: .iff ; if hurtle is , tkplot vcr = 177744 ; graphic control reg var = 177740 ; graphic address reg screen = 22000 ; address of screen buffer tundefinded, jmp @ytable(r0) ytable: .word noy,up,down,noy up: sub #40.,r2 cmp r2,#screen bhi noy down: add #40.ictime = 10. ; number of steps between sounds of the tick dots = 50. ; number of dots in motion jsw = 44 rawtty = 10100 reeo,r2 cmp r2,#screen+9600. bhis up noy: bic #^c14,r1 asr r1 jmp @xtable(r1) xtable: .word nox,left,right,nox left: k = 20000 hurtle = 1 ; if defined, every dot moves orthogonally at each step; ; if commented out, dots move independently in ror r3 bcc nox ror r3 tst -(r2) br nox right: rol r3 bcc nox rol r3 tst (r2)+ nox: .endc mov r2,-2(r5 X and Y, ; and need not move at each step. .csect walk br reent ; reentry point walker: mov #dotlist,r5 mov #2) mov r3,(r5)+ bis r3,(r2) sob r4,back mov fast,r0 add time,r0 10$: cmp r0,time ; wait for the clock to tick beq000,r4 ; initialize an awful lot of dots 1$: mov #screen+4820.,(r5)+ mov #1,(r5)+ sob r4,1$ reent: bis #rawtty+reeok 10$ ; but only if 'fast' flag was off 9$: dec (pc)+ ccount: tictime bgt again mov #tictime,ccount mov #400,r0 xor , @#jsw mov @#100,oldint mov #screen,r0 mov #4800.,r1 ; 4800 words in screen mov r0,@#var 2$: clr (r0)+ sob r1,2$ r0,@#vcr ; twiddle tick bit in vcr .ttinr bcs again bic #40,r0 ; capitalize ASCII letter cmpb r0,#'F ; "fast" bne 11 & 377 .endr .if lt, $pos-4 ; zero-fill name if < 4 chars .rept 4-$pos .byte 0 .endr .iff ; else stick final  again: mov #76,@#vcr ; turn on graphics ; mov #dotlist,r5 ; mov ndots,r4 ;1$: ; mov (r5)+,r0 ; bic (r5)+,(r0) ; sob r4char into name[4] .byte <$leng&200> + $lastc .endc .byte $hash ; hash byte .if nb, ; flag byte .byte flag,1$ ; mov #dotlist,r5 mov (pc)+,r4 ndots: dots back: movb rand,r1 movb r1,r0 bis #^c204,r0 add #4,r0 rolb r0 s .iff .byte 0 .endc $hash = & $hash .linkup \$hash ; link word (on whichever hash list) .iif nb,, jmp @#code .endm .macro .linkup hash .word ha$'hash ha$'hash = .-8. .endm .macro .linit hash ha$'hash = 0 .e^c3,r0 ; take low 2 bits as y motion asl r0 mov (r5)+,r2 ; fetch this dot's word address mov (r5),r3 ; and its mask bicndm $hash = 0 .rept hsize .linit \$hash $hash = $hash + 1 .endr  r3,(r2) ; clear the old bit .if df, hurtle jmp @table(r0) table: .word up, down, right, left up: sub #40.,r2 cmp r2,#screen ; too far up? bhi estep down: add #40.,r2 cmp r2,#screen+9600. blo estep br up left: ror r3 bA mdots: clr r1 1$: .ttyin sub #'0,r0 bmi 2$ mul #10.,r1 add r0,r1 br 1$ 2$: bic #176000,r1 beq 3$ mov r1, ; Terak screen dumper ; writes current contents of Terak screen onto Printronix. .mcall .regdef, ..v2.., .exit, .print, .ndots jmp reent 3$: jmp again rand: .word 12345, 65437 ; any nonzero numbers may go here clkint: inc (pc)+ time:csigen, .writw .regdef ..v2.. .csect tkplo .globl tkplot, dumprog txcs = 177524 ; if defined, this is serial out 0 jmp @(pc)+ oldint: .word fast: -1 dotlist: .blkw 200.*2 .blkb 21000 + 9600. ; allow space for screen buffer .eput to plotter .iif df,txcs, txdb = txcs+2 var = 177740 ; video address register high = 240. ; dimensions of screen -- hend walker ight (in rows) wide = 40. ; and width (in 8-bit bytes) outsize = /6. + 1 plotchn = 2 ; RT-11 channel on which plotter file is open. ; if necessary, this routine opens KB: on it. dumprog: ; if routine is started here, it acts as a 4et jk zj hk //b !b expands tabs, from . to z! dump jsr pc,tkplot ; program -- writes data to Printronix .exit ; and exits. tkplot: .if df, txcs ; if appropriate,  //c <.-z;8xu8k.utzxtzkguqtj zjzutgtqtj> !c converts upper to lower case, from . to z! //l [u0uu<-s ;%u>qu] ; write directly to serial port mov #lfs,r0 mov #2,r1 jsr pc,serio .iff ; otherwise, use KB: via RT-11 channelu !l returns line number of . ! //p 9i g* 10i13i10i10i j [b]m my zj12i ewkb:hpwef !p print buf on kb:, expanding tab .writw #area, #plotchn, #lfs, #1 bcc doplot mov sp,r1 .csigen #area,#ext,#kb mov r1,sp bcc tkplot .print #noopes! //v <-z;j8xu8khxthkgujmmhpwhkgt> !v write buf, executing mm, clear buf! //w 0utzj<-z;-8xt-8k%t> qt //x 0utn rts pc ; (if open failed, give up) doplot: .endc mov @#var,r2 mov #high,r5 ; r5 counts lines of screen 4$: mzj<-z;-8xt-8k%t> qt //y <.-z;8xu8k.utzxtzkguqtjmmzjzutgtqtj> !y executes mm on whole buffer! ov #buf,r1 mov #wide,r4 ; r4 counts bytes across screen mov #1,r0 ; r0 is input bit movb #100,(r1) ; set up first output $ mov r0,fast mov oldint,@#100 11$: cmpb r0,#'S ; "slow" bne 12$ clr fast mov #clkint,@#100 12$: cmpb r0,#'N beq numdots cmpb r0,#'Q ; quit, but do not blank screen beq 14$ cmpb r0,#15 ; return -- quit and blank screen beq 13$ cmpb r0,#'D bne again jsr pc,tkplot br again 13$: mov #7,@#vcr 14$: bic #rawtty,@#jsw mov oldint,@#100 .exit nuB byte mov #1,r3 ; r3 is output bit 3$: bitb r0,(r2) beq 1$ bisb r3,(r1) 1$: asl r3 bitb r3,(r1) ; has r3 reached hannel movb #15,(r1)+ ; add a pad byte, since ".writw" writes sub #plotxt,r1 ; whole words, not bytes asr r1 ; compute 100 yet? beq 2$ inc r1 ; yes, next output byte movb #100,(r1) mov #1,r3 2$: aslb r0 ; has r0 passed 200? bcc 3$ number of words .writw #area,#plotchn,#plotxt,r1 bcs 10$ ; die if error .endc sob r5,4$ rts pc lfs: .byte 12,12plotter file is open. ; if necessary, this routine opens KB: on it. dumprog: ; if routine is started here, it acts as a  ; two line feeds for header .if ndf, txcs 10$: .print #wfail ; die if error .exit ext: .word 0,0,0,0 kb: .asciz /,dump jsr pc,tkplot ; program -- writes data to Printronix .exit ; and exits. tkplot: .if df, txcs ; if appropriate, ,kb:=/ ; open KB: on channel 2 noopen: .asciz /cannot open kb:/ wfail: .asciz /error in writing/ .even area: .blkw 7  ; write directly to serial port mov #lfs,r0 mov #2,r1 jsr pc,serio .iff ; otherwise, use KB: via RT-11 channel .iff ; if direct output, here's the routine to do it serio: ; output string to Terak unit 1 (rxcs=177520) tstb @#txcs  .writw #area, #plotchn, #lfs, #1 bcc doplot mov sp,r1 .csigen #area,#ext,#kb mov r1,sp bcc tkplot .print #noope bpl serio 1$: tst @#txcs ; if device indicates not ready, wait bpl 1$ ; ("modem ready" bit) movb (r0)+,@#txdb bgt 4$ n rts pc ; (if open failed, give up) doplot: .endc mov @#var,r2 mov #high,r5 ; r5 counts lines of screen 4$: m tst r1 ; let string be terminated either by ble 2$ ; zero or negative byte or by 4$: ; byte counter reaching zero. sob ov #buf,r1 mov #wide,r4 ; r4 counts bytes across screen mov #1,r0 ; r0 is input bit movb #100,(r1) ; set up first output r1,serio 2$: ; Thus, to let a string be terminated by rts pc ; a special character, call with r1 = 0; ; if r1 > 0, exacbyte mov #1,r3 ; r3 is output bit 3$: bitb r0,(r2) beq 1$ bisb r3,(r1) 1$: asl r3 bitb r3,(r1) ; has r3 reached tly r1 bytes will be printed ; regardless of their contents. .endc plotxt: ; string of bytes to plot one line .b100 yet? beq 2$ inc r1 ; yes, next output byte movb #100,(r1) mov #1,r3 2$: aslb r0 ; has r0 passed 200? bcc 3$ yte 5 ; 005 is Printronix plot mode character buf: .blkb outsize+2 .even .end  rol r0 ; yes, set r0 = 1 inc r2 ; and next input byte sob r4,3$ inc r1 11$: ; search for last nonempty byte on line bitb #77,-(r1) beq 11$ inc r1 movb #12,(r1)+ ; stick line feed after it .if df, txcs ; if direct output, do it now movb #15,(r1)+ mov #plotxt,r0 ; r0 -> string sub r0,r1 ; r1 = length jsr pc,serio .iff ; otherwise write on cC  byte mov #1,r3 ; r3 is output bit 3$: bitb r0,(r2) beq 1$ bisb r3,(r1) 1$: asl r3 bitb r3,(r1) ; has r3 reached 100 yet? beq 2$ inc r1 ; yes, next output byte movb #100,(r1) mov #1,r3 2$: aslb r0 ; has r0 passed 200? bcc 3$  .mcall .regdef, ..v2.., .readw, .csigen, .gtim, .ttyin .mcall .print, .exit .globl start, time ..v2.. .regdef start:N .csigen #area, #default, #disk bcs die 1$: .print #prompt jsr pc,nin mov r1,r2 ; input starting block number jsr p. :(~XM(Ufh~lMh~XM. n ^() n .&ɕ@  ɰ ɕ@@ .L ? ѕ ѕ  i ߋ L!rT TV L~ n ^(ɕ@  ɰ ɕ@@  ? ѕ ѕ  i ߋT TV L~er .if ndf, txcs 10$: .print #wfail ; die if error 6U@0$@0$ B~>2@U{e@w Aw@E BC@x.6@VL( $e( I   C C P3m7   xE F7zt@S7 j@NQ  D 8E@$4@ 0Wp `Ewwwk _byte count. 2$: tstb @#txcs bpl 2$ movb (r0)+,@#txdb sob r1,2$ 1$: rts pc .endc plotxt n ^(ɕ@  ɰ ɕ@@  ? ѕ ѕ  i ߋT TV: ; string of bytes to plot one line .byte 5 ; 005 is Printronix plot mode character buf: .blkb outsize+2 .even .en L~ mov #wide,r4 ; r4 counts bytes across screen mov #1,r0 ; r0 is input bit movb #100,(r1) ; set up first outputd D  ; call with value in r1 mov #eos,r5 1$: clr r0 div #10.,r0 add #'0,r1 movb r1,-(r5) mov r0,r1 bne 1$ .print r5ond clr r0 mov (sp)+,r1 div (sp)+,r0 mov r0,r1 jsr pc,nout ; PRINT milliseconds per block .print #msg br 1$ di rts pc .blkb 5 eos: .byte ' ,200 prompt: .ascii /bno, bcount ? /<200> msg: .asciz * : ms total, bytes/sec, ms/blk* e: .exit time: default: 0, 0, 0, 0 area: .blkw 7 nin: clr r1 1$: .ttyin sub #'0,r0 bmi 2$ mul #10.,r1 adddisk: .asciz /dk:/ .even bufsiz = 40 * 512. buffer: .blkb bufsiz .end start  r0,r1 br 1$ 2$: cmpb r0,#15-'0 bne 3$ .ttyin ; if cr, skip inevitable lf 3$: rts pc ; return value in r1 nout: wwk _byte count. 2$: tstb @#txcs bpl 2$ movb (r0)+,@#txdb sob r1,2$ 1$: rts pc .endc plotxt ; call with value in r1 mov #eos,r5 1$: clr r0 div #10.,r0 add #'0,r1 movb r1,-(r5) mov r0,r1 bne 1$ .print r5: ; string of bytes to plot one line .byte 5 ; 005 is Printronix plot mode character buf: .blkb outsize+2 .even .en rts pc .blkb 5 eos: .byte ' ,200 prompt: .ascii /bno, bcount ? /<200> msg: .asciz * : ms total, bytes/sec, ms/blk* d disk: .asciz /dk:/ .even bufsiz = 40 * 512. buffer: .blkb bufsiz .end start c,nin ; and block count mov r1,-(sp) mov r1,r3 swab r3 ; convert to word count cmp r1,#bufsiz/512 bhi die ; die if bigger than buffer size .gtim #area,#time mov time+2,-(sp) .readw #area,#3,#buffer,r3,r2 bcs die .gtim #area,#time mov  .mcall .regdef, ..v2.., .readw, .csigen, .gtim, .ttyin .mcall .print, .exit .globl start, time ..v2.. .regdef start:time+2,r0 sub (sp)+,r0 ; delta t mov r3,r2 mul #120.,r2 div r0,r2 mul #1000.,r0 div #60.,r0 mov r0,-(sp) ; total m .csigen #area, #default, #disk bcs die 1$: .print #prompt jsr pc,nin mov r1,r2 ; input starting block number jsr pilliseconds for transfer mov r0,r1 jsr pc,nout ; PRINT transfer time in ms mov r2,r1 jsr pc,nout ; PRINT bytes per secc,nin ; and block count mov r1,-(sp) mov r1,r3 swab r3 ; convert to word count cmp r1,#bufsiz/512 bhi die ; die if bigond clr r0 mov (sp)+,r1 div (sp)+,r0 mov r0,r1 jsr pc,nout ; PRINT milliseconds per block .print #msg br 1$ diger than buffer size .gtim #area,#time mov time+2,-(sp) .readw #area,#3,#buffer,r3,r2 bcs die .gtim #area,#time mov e: .exit time: default: 0, 0, 0, 0 area: .blkw 7 nin: clr r1 1$: .ttyin sub #'0,r0 bmi 2$ mul #10.,r1 addtime+2,r0 sub (sp)+,r0 ; delta t mov r3,r2 mul #120.,r2 div r0,r2 mul #1000.,r0 div #60.,r0 mov r0,-(sp) ; total m r0,r1 br 1$ 2$: cmpb r0,#15-'0 bne 3$ .ttyin ; if cr, skip inevitable lf 3$: rts pc ; return value in r1 nout: illiseconds for transfer mov r0,r1 jsr pc,nout ; PRINT transfer time in ms mov r2,r1 jsr pc,nout ; PRINT bytes per secE  .mcall .regdef, ..v2.., .readw, .csigen, .gtim, .ttyin .mcall .print, .exit .globl start, time ..v2.. .regdef start: mov #eos,r5 1$: clr r0 div #10.,r0 add #'0,r1 movb r1,-(r5) mov r0,r1 bne 1$ .print r5 rts pc .blkb 5 eos .csigen #area, #default, #disk bcs die 1$: .print #prompt jsr pc,nin mov r1,r2 ; input starting block number jsr p: .byte ' ,200 prompt: .ascii /bno, bcount ? /<200> msg: .asciz * : ms total, bytes/sec, ms/blk* disk: .asciz /dk:/ .evc,nin ; and block count mov r1,-(sp) mov r1,r3 swab r3 ; convert to word count cmp r1,#bufsiz/512 bhi die ; die if bigen bufsiz = 512. buffer: .blkb bufsiz .end start ger than buffer size .gtim #area,#time mov time+2,-(sp) .readw #area,#3,#buffer,r3,r2 bcs die .gtim #area,#time mov . :(Dyshu~@h3(.?T B fCtime+2,r0 sub (sp)+,r0 ; delta t mov r3,r2 mul #120.,r2 div r0,r2 mul #1000.,r0 div #60.,r0 mov r0,-(sp) ; total m> ?.&~ȕ p.LD(illiseconds for transfer mov r0,r1 jsr pc,nout ; PRINT transfer time in ms mov r2,r1 jsr pc,nout ; PRINT bytes per sec  D&.r8pxrpr<&H  *. R L r @ 鈬ond clr r0 mov (sp)+,r1 div (sp)+,r0 mov r0,r1 jsr pc,nout ; PRINT milliseconds per block .print #msg br 1$ di   2 . 0Wp `  &r e0e@鈇 e: .exit time: default: 0, 0, 0, 0 area: .blkw 7 nin: clr r1 1$: .ttyin sub #'0,r0 bmi 2$ mul #10.,r1 add. BNO, BCOUNT ? : MS TOTAL, BYTES/SE5C, MS/BLKDK: r0,r1 br 1$ 2$: cmpb r0,#15-'0 bne 3$ .ttyin ; if cr, skip inevitable lf 3$: rts pc ; return value in r1 nout: wwk _byte count. 2$: tstb @#txcs bpl 2$ movb (r0)+,@#txdb sob r1,2$ 1$: rts pc .endc plotxt ; call with value in r1 mov #eos,r5 1$: clr r0 div #10.,r0 add #'0,r1 movb r1,-(r5) mov r0,r1 bne 1$ .print r5: ; string of bytes to plot one line .byte 5 ; 005 is Printronix plot mode character buf: .blkb outsize+2 .even .en rts pc .blkb 5 eos: .byte ' ,200 prompt: .ascii /bno, bcount ? /<200> msg: .asciz * : ms total, bytes/sec, ms/blk* d disk: .asciz /dk:/ .even bufsiz = 40 * 512. buffer: .blkb bufsiz .end start  r0,#15-'0 bne 3$ .ttyin ; if cr, skip inevitable lf 3$: rts pc ; return value in r1 nout: ; call with value in r1 F . :(@yshu~@h;(.;R  B f .mcall .regdef, ..v2.., .readw, .csigen, .gtim, .ttyin .mcall .print, .exit .globl start, time ..v2.. .regdef start: ; (.&~Dȕ'M.L@(  .csigen #area, #default, #disk bcs die 1$: .print #prompt jsr pc,nin mov r1,r2 ; input starting block number jsr p@".r8Bpxrpr<&  2.R L r @鈮c,nin ; and block count mov r1,-(sp) .gtim #area,#time mov time+2,-(sp) mov r1,r4 2$: .readw #area,#3,#buffer,#256.,r . 0Wp `   & r e0e@鈇  .  BN2 bcs die inc r2 sob r4,2$ .gtim #area,#time mov time+2,r0 sub (sp)+,r0 ; delta t mov r1,r2 mul #120.,r2 div rO, BCOUNT ? : MS TOTAL, BYTES/SE1C, MS/BLKDK:0,r2 mul #1000.,r0 div #60.,r0 mov r0,-(sp) ; total milliseconds for transfer mov r0,r1 jsr pc,nout ; PRINT transfer time in ms mov r2,r1 jsr pc,nout ; PRINT bytes per second clr r0 mov (sp)+,r1 div (sp)+,r0 mov r0,r1 jsr pc,nout  ; PRINT milliseconds per block .print #msg br 1$ die: .exit time: default: 0, 0, 0, 0 area: .blkw 7 nin: clr r1 1$: .ttyin sub #'0,r0 bmi 2$ mul #10.,r1 add r0,r1 br 1$ 2$: cmpb r0,#15-'0 bne 3$ .ttyin ; if cr, skip=S B fCW 1EvȕB& inevitable lf 3$: rts pc ; return value in r1 nout: ; call with value in r1 mov #eos,r5 1$: clr r0 div #10.,r0 8 pxrpr<& R L r @鈭 0Wp `  r e0eadd #'0,r1 movb r1,-(r5) mov r0,r1 bne 1$ .print r5 rts pc .blkb 5 eos: .byte ' ,200 prompt: .ascii /bno, bcou@鈇 BNO, BCOUNT ? : MS TOTAL, BYTES/SEC, MS/BLKDK:nt ? /<200> msg: .asciz * : ms total, bytes/sec, ms/blk* disk: .asciz /dk:/ .even bufsiz = 512. buffer: .blkb bufsiz .end start G blk* disk: .asciz /dk:/ .even bufsiz = 40 * 512. buffer: .blkb bufsiz .end start ?T B fCW 1FxȕD'. :(DAyshu~@h(.?T B fC: pxr pr<& R L r @ 鈬 0Wp ` r e0e .mcall .regdef, ..v2.., .readw, .csigen, .gtim, .ttyin .mcall .print, .exit .globl start, time ..v2.. .regdef start:> ?.&W 1Fx $`.LȕD .csigen #area, #default, #disk bcs die 1$: .print #prompt jsr pc,nin mov r1,r2 ; input starting block number jsr p'D$.r: pxr pr<&  ,. R L r @ 鈬c,nin ; and block count mov r1,-(sp) mov r1,r3 swab r3 ; convert to word count cmp r1,#bufsiz/512 bhi die ; die if big   2 . 0Wp `  &r e0e@鈇 ger than buffer size .gtim #area,#time mov time+2,-(sp) .readw #area,#3,#buffer,r3,r2 bcs die .gtim #area,#time mov . BNO, BCOUNT ? : MS TOTAL, BYTES/SE5C, MS/BLKDK:time+2,r1 sub (sp)+,r1 ; delta t clr r2 mul #120.,r2 div r1,r2 clr r0 mul #1000.,r0 div #60.,r0 mov r0,-(sp) ; total milliseconds for transfer mov r0,r1 jsr pc,nout ; PRINT transfer time in ms mov r2,r1 jsr pc,nout ; PRINT bytes per second clr r0 mov (sp)+,r1 div (sp)+,r0 mov r0,r1 jsr pc,nout ; PRINT milliseconds per block .print #msg br 1$ die: .exit time: default: 0, 0, 0, 0 area: .blkw 7 nin: clr r1 1$: .ttyin sub #'0,r0 bmi 2$ mul #10.,r1DC add r0,r1 br 1$ 2$: cmpb r0,#15-'0 bne 3$ .ttyin ; if cr, skip inevitable lf 3$: rts pc ; return value in r1 nout: ; call with value in r1 mov #eos,r5 1$: clr r0 div #10.,r0 add #'0,r1 movb r1,-(r5) mov r0,r1 bne 1$ .print r5 rts pc .blkb 5 eos: .byte ' ,200 prompt: .ascii /bno, bcount ? /<200> msg: .asciz * : ms total, bytes/sec, ms/H  C C P; tl7 .h  xE F.7 B:@S72 @D  &~lM*   $@k _V R3,(R5)+ BIS R3,(R2) SOB R4,BACK TST FAST BEQ 9$ MOV TIME,R0 10$: CMP R0,TIME BEQ 10$ ; WAIT FOR THE CLOCK TO TICK 9$: DEC (PC)+ CCOUNT: TICTIME BGT AGAIN MOV #TICTIME,CCOUNT MOV #400,R0 XOR R0,@#VCR ; TWIDDLE TICK BIT IN VCR  .TTINR BCS AGAIN BIC #40,R0 CMPB R0,#'F ; "FAST" BNE 11$ CLR FAST MOV OLDINT,@#100 11$: CMPB R0,#'S BNE 12$ @鈇 BNO, BCOUNT ? : MS TOTAL, BYTES/SEC, MS/BLKDK:MOV R0,FAST MOV #CLKINT,@#100 12$: CMPB R0,#'D ; DUMP TERAK SCREEN TO PRINTRONIX BNE 13$ JSR PC,TKPLOT BR AGAIN 13$: CMPB R0,#15 ; RETURN -- QUIT BNE AGAIN CLR @#44 MOV OLDINT,@#100 .EXIT RAND: .WORD 12345, 65437 ; ANY OLD TRASH HERE S. :(BAyshu~@h(.=S B fCO LONG AS IT'S NONZERO CLKINT: INC TIME JMP @(PC)+ OLDINT: .WORD TIME: .WORD 0 FAST: .WORD 0 DOTLIST: .BLKW 200.*K =.&W 1Ev $f.LȕB2 .BLKB 21000 + 9600. ; ALLOW SPACE FOR SCREEN BUFFER .END WALKER &B$.r8pxrpr<&J  .. R L r @鈭   4 . 0Wp `   & r e0e@鈇 . :Jw H$~lM@(!.D(Kl{Lh,/XhphD(<D_.2 .  BNO, BCOUNT ? : MS TOTAL, BYTES/SE3C, MS/BLKDK:@$@,6$ ,.& B~>,@U{e@p ,.Lw Aw@E BC@xhpzKh "p$z&.r( $e( IE y f "$&.I e ; low and high memory limits. abase: 0 ; allocation base -- zero if not computed yet newscrn: ; FUNCTION NEWSCR:  X RJ ? J鈇& e:   낃 ( N mov #9600.,r1 ; allocates a screen buffer for you jsr pc,allocb ; and returns a pointer to it cmp r0,#20000 blo 1$ r I %@"IwI?ERR 60 STACK OVERFLOWED ABCDEFGHIJKLMNOPQRSTUVWXYZ$. 0123456789FROMINts pc 1$: mov #9600.,r1 mov #20000,abase br allocb marg: ; function marg(i) mov @2(r5),r0 ; allows access to st ROUTINE "" LINE ?ERR ||| 11 FLOATING UNDERFLOW6 OUTPorage at address i sub #mem-2,r0 ; as though it were a asr r0 ; Fortran integer variable. rts pc ; common /memory/ meUT CONVERSION ERROR4 COMPUTED GOTO OUT OF RANGE 12 FLOATING ZERO DIVIDE2 INTEGER ZERO DIVIDE3 COMPILER GENERATED ERROR1m(1) ; Then mem(marg(i)) refers to the word ; at address i. It may be used in an expression, ; assigned to, or pa6 WRONG NUMBER OF ARGUMENTS 13 SQRT OF NEGATIVE NUMBER1 INTEGER OVERFLOW 10 FLOATING OVERFLOW5 INPUT CONVERSION ERROR14 ssed as a parameter. .csect memory mem: .end UNDEFINED EXPONENTIATION OPERATION15 LOG OF NEGATIVE NUMBER=61 ILLEGAL MEMORY REFERENCE20 INVALID LOGICAL UNIT NUMBER21 OUT OF AVAILABLE LOGICAL UNITS22 INPUT RECORD TOO LONG23 HARDWARE I/O ERROR?63 ILLEGAL INSTRUCTION TRAP24 ATTEMPT TO READ/&fEA$͉" e@ & f& f& f xFYދ< I w)J J AD PAST END OF RECORD"34 UNFMTD I/O TO TTY OR LPT%37 RANDOM ACCESS READ/WRITE BEFORE DEFINE FILE&38 RANDOM I/O NOT ALLOWED TO     D  6c6#m       # 6  TTY OR LPT'39 RECORD LARGER THAN RECORD SIZE IN DEFINE FILE(40 REQUEST FOR BLOCK LARGER THAN 65535)41 DEFINE FILE ATTEMPTED ඌ cmc ` ҕ- 9 f XE@ e0Ґ (   ( ON OPEN UNIT#35 ATTEMPT TO OUTPUT TO READ ONLY FILE30 NO ROOM FOR BUFFERS*42 MEMORY OVERFLOW COMPILING OBJECT TIME FORMAT.4eC Hҕ  %% ҕ0ҕ. ҕ0 Ґ+-  Ґʕ/ e:rC e e 6 INFINITE FORMAT LOOP+43 SYNTAX ERROR IN OBJECT TIME FORMAT149 ENDFILE ON RANDOM FILE048 UNIT ALREADY OPEN0 NON-FORTRAN ERҕ*  N A f C%v   \  \effff& & & &&ROR CALL & & & & & D&&D&& @% xFJP  IA e e@ e YV   YYV YV YYVee\&&& & & & & D&&e #@  @6  xFP6 6 #?%-0 @  \6 6 &  f 6A  v  6N\effffeffff& & & & & & & & ׳f&& @׳@f& YYrQYxF:Qf&f& Y|QYYYYYYYYYYYQYQnQ   \ee  6 YW  YWN&\D& &&@ YWD& && 6 Qf& \ e\>:L]L?ƪ@\\  p Cp f\ \ A xFNXXYXXNXXbXYhXNXNXYXYYYYYYYYY@X e\ \S\ e& @ YX   \e  \Ή\&f$&  h % % U@     < .`D A @ 耎  $Xe\Xf& \:יc&>X4%]@D C  %  v v f&   e xS    e &f  ”E   CPQCQBm\ &ff&&z\ &&fz\&ffz\ff& &     v   &   5@%PeE T  <5eN N (E D A @  ebz\& &ff&&z\ &&z\&&ffz\& &z\ffz\& &z\27 ATTEMPT TO USE DEVICE NOT IN SYSTEM31 NO AVAILABLE I/O CHANNEL28 OPEN FAILED FOR FILE29 NO ROOM FOR DEVICE HANDLER$36" b"    D A @ &f&f eD A @ eA @ e@ e&f&f   C r &@r&@r BAD FILE SPECIFICATION STRING,44 2ND RECORD REQUEST IN ENCODE/DECODE 32 FMTD-UNFMTD-RANDOM I/O TO SAME FILE!33 ATTEMPT TO RE(&DsPA r C wA `t E ED &f& @ &   6&CK  .csect wdio ; common /wdio/ ifile, ihigh, ilow file: .word ; RT-11 channel number (returned by ILUN) fhigh: .word ; hiuffer bpl eofchk ; else if moving forward, test for eof br rbuf ; else just read without checking 1$: cmp r1,bwords ; iffz\&&& r‰ \‰ \ffz\&&& r‰ \gh-order file position pointer flow: .word ; low-order file position pointer ; (note: file pointer is in WORDS, not bytes!) .csect wxfer ; information about the contents of the buffer bfile: -1 ; which file it is loaded from bwords: 0  ; how many valid words it contains bloaded:0 ; flag, nonzero if buffer has been loaded at all ; (if loaded and not full, we know that ; we are at end of file.) bhigh: 0 ; buffer pointers, indicating from where in the blow: 0 ; file the buffe ; FORTRAN SUBROUTINE ; FREAD(bufferarray, nwords, offset, highorder) ; all arguments are integers ; ; bufferarray -- (nr is loaded .globl fread ; entry point to FREAD routine fread: cmp file,bfile ; changed file since last time? beq pareed not really be an array) ; place into which the file data is read ; nwords -- ; number of 16-bit (two byte) words to bems frinit: mov file,bfile ; yes -- initialize all buffer info clr bwords clr bloaded clr fhigh ; also reset file point read ; (an integer occupies one word, a real two, and ; a character half a word) ; offset -or- loworder [optional] ; er clr flow parms: cmpb (r5),#3 ; how many parameters? blt doit ; (buffer,nwords) -- use current file pos'n beq 3$ ; if not used, data is r 6U@$@0$ B~>2@U{e@w Aw@E BC@xN(buffer,nwords,offset) -- offset from cur pos'n mov @high(r5),r2 ; all four -- absolute file pos'n bmi 4$ ; unless high<0, NN(NN( $e( I   C C P3m7   xE F7zt@S7 jin which case offset mov @low(r5),flow mov r2,fhigh br doit 4$: mov @offset(r5),r1 br 5$ 3$: mov @offset(r5),r1 N@NQ  D E@$4@ 0Wp `Ewwwk _ beginning of the filesxt r2 5$: add @offset(r5),flow adc r2 add r2,fhigh doit: mov ubuf(r5),r3 ; r3 points to user's buffer mov @nwords(r) .mcall ..v2.., .regdef, .readw, .writw ..v2.. .regdef ; parameter offsets (from r5) ubuf = 2 nwords = 4 offse5),r4 ; r4 is number of words left to read ble done ; if <= 0, don't try to read any mov flow,r1 ; compute (file pos - buft = 6 low = 6 high = 10 error = 52 ; RT-11 error code byte bufsiz = 4*256. ; buffer size in words (1 block = 256 words) fer pos) mov fhigh,r0 ; in double precision sub blow,r1 sbc r0 sub bhigh,r0 beq 1$ ; if high order = 0, might be in bL d transfer into user's buffer mov (r1)+,(r3)+ sob r2,1$ tst r4 ; do we need more? bgt eofchk ; yes -- go check for eof, refill buffer done: clr r4 eof: mov @nwords(r5),r0 ; return the number of sub r4,r0 ; words successfully read rts pc ; as function value area: .blkw 7 ; RT-11 i/o parameter area buffer: .blkw bufsiz ; file buffer .csect files .globl ilun ilun: ; given a Fortran logical unit number, ; returns its RT-11 channel number. .globl $AOTS, $FCHNs (file-buffer) > words available? blo readem ; no, there's something usable in buffer eofchk: ; else think about reading L mov @2(r5),r2 mov $AOTS,r3 jsr pc,$FCHNL mov r0,r1 mov #-1,r0 bit #4000,(r1) beq 1$ dec r0 tstb (r1) bmi tst bloaded beq rbuf cmp bwords,#bufsiz ; buffer loaded and not full? blt eof ; yes, hit end of file already rbuf:  2$ movb 21(r1),r0 br 2$ 1$: mov 4(r3),r1 3$: cmpb r2,(r1)+ bne 3$ clrb -(r1) 2$: rts pc .end  ; otherwise, fill the buffer mov fhigh,r2 ; compute which block to read bmi frinit ; (if < 0, reinitialize and try again)  mov r2,bhigh ; set new bpointers while we're at it swab r2 clrb r2 bisb flow+1,r2 movb r2,blow+1 clrb blow .readw #area,file,#buffer,#bufsiz,r2 mov r0,bwords ; # words successfully read bcc 1$ movb @#error,r0 ; if an error (1 or 2) beq 1$ neg r0 ; then return function value rts pc ; of -1 or -2 1$: mov sp,bloaded ; set 'bloaded' flag nonzero mov flow,r1 sub blow,r1 ; ensure r1 is offset within buffer readem: mov bwords,r2 beq eof sub r2,r4 ; update #-words-left-to-transfer bge 2$ add r4,r2 ; also r2 := r2 min r4 2$: ; so r2 is # words to xfer within buffer add r2,flow ; use it to update file pointer adc fhigh asl r1 ; convert r1 from buffer offset add #buffer,r1 ; to absolute address 1$: ; an