# #include "m6.h" pushget() { ge = (ge+1)&0177776; ge->word = gf-ge; gf = ge; ge =+2; ++lg; } dotrace() { char *arg(); int i,j; printf("\n%d %c%s",lg,sharp,arg(0)); for(j=9;j>0&&*arg(j)==0;j--); for(i=1;i<=j;i++) printf("%c%c%s%c",comma,lquote,arg(i),rquote); printf("%c\n",c); } popget() { ge = gf; gf =+ gf->word; --lg; if(gfprev =| 1; pe++; } pe->word = pf-pe; pf = pe; pe =+2; } popput() { pe = pf; pf =+ pf->word; if(pf->prev&1) { pe--; pf->prev =& 0177776; } if(pfword = df-de; df = de; de =+2; } put() { if(lp>0) { *pe++ = c; if(pe>pmax) diag("Arg collection overflow"); } else putchar(c); } get() { char *p; int n; if(lg==0) c = getchar(); else while(1) { if(gf->marg!=0) { if((c = gf[gf->marg++])==0) gf->marg = 0; else return; } c = (p = gf->mframe)[gf->mchar++]; if(c!=dollar) return; n = p[gf->mchar] - '0'; if(n<0 || n>9) return; ++gf->mchar; gf->marg = arg(n) - gf; } }