# #include "m6.h" control() { while(1) { get(); if(c==0 && lg>0) { popget(); trash(); rescan = 1; } else { if(!rescan) put(); else if(lq>0) { if(c==lquote) { lq++; put(); } else if(c==rquote || c==0) { lq--; if(lq>0 || l9>0) put (rquote); } else put(); } else if(l9>0) if(c==colon||c==0||c==semi) if(--l9<=0) endcall(); else put(); else { if(c==sharp) l9++; else if(c==lquote) lq++; put(); } else { if(c==sharp) begincall(); else if(c==lquote) lq++; else if(lp>0) { if(c==colon||c==0||c==semi) endcall(); else if(c==comma) newarg(); else put(); } else if(c==0) return; /* lg=lp=lq=0 */ else put(); } } } } endcall() { char *pt, *p; rescan = c!=semi; newarg(); pushget(); pt = &pf->pa0; ge = move(pt,&gf->ga0,pe-pt); if(ge>gmax) diag("Call stack overflow"); if(traceflag) dotrace(); p = finddef(0); setscan(p); popput(); lp--; function(p->dswitch); } begincall() { lp++; pushput(); pe = pf+pend; pf->pan = pf->pa0 = 0; } newarg() { char *p; if(++pf->pan>=9) if(c==comma) l9++; *pe++ = 0; pe = (pe+1)&0177776; p = &pf->pa0; while(p->word!=0) p =+ p->word; p->word = pe - p; *pe++ = *pe++ = 0; } setscan(p) char *p; { gf->mchar = (gf->mframe = p)->dtext; gf->marg = 0; }