Add original unix v6
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
#
|
||||
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user