Add original unix v6
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
#
|
||||
|
||||
#include "m6.h"
|
||||
|
||||
char *
|
||||
finddef(n) {
|
||||
char *p;
|
||||
if((p = lookup(arg(n)))==0)
|
||||
if((p = lookup(""))==0) diag("Software error");
|
||||
return(p);
|
||||
}
|
||||
|
||||
char *
|
||||
lookup(s) {
|
||||
char *dt;
|
||||
dt = df;
|
||||
while(dt>d0) {
|
||||
if(dt->dswitch>=0 && comp(s,&dt->dident)) return(dt);
|
||||
dt =+ dt->prev;
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
comp(s,t)
|
||||
char *s, *t;
|
||||
{
|
||||
for(;*s++ == *t;t++)
|
||||
if(*t==0) return(1);
|
||||
return(0);
|
||||
}
|
||||
|
||||
remove(n) {
|
||||
char *p;
|
||||
if(p = lookup(arg(n))) if(p>d0+2) {
|
||||
trashflag++;
|
||||
p->dswitch = -1;
|
||||
}
|
||||
}
|
||||
|
||||
trash() {
|
||||
char *p,*q,*r;
|
||||
if(lg>0) return;
|
||||
while(df->dswitch<0) {
|
||||
de = df;
|
||||
df =+ df->prev;
|
||||
trashflag--;
|
||||
}
|
||||
if(trashflag<=0) return;
|
||||
de = (de+1)&0177776;
|
||||
revptr(de,df,&p,&q);
|
||||
q = p;
|
||||
for(;p->word!=0;p=+r->word) {
|
||||
r = p;
|
||||
if(p->dswitch>=0) {
|
||||
r = q;
|
||||
q = move(p,q,p->word);
|
||||
}
|
||||
}
|
||||
q->word = 0;
|
||||
revptr(d0,d0+2,&df,&de);
|
||||
}
|
||||
|
||||
|
||||
revptr(p,q,np,nq)
|
||||
char *p, *q, **np, **nq;
|
||||
{
|
||||
int t;
|
||||
p->word = 0;
|
||||
while((t = q->word)!=0) {
|
||||
q->word = p-q;
|
||||
p = q;
|
||||
q =+ t;
|
||||
if(q<d0 || q>dmax) diag("Software error");
|
||||
}
|
||||
*np = p;
|
||||
*nq = q;
|
||||
}
|
||||
|
||||
char *
|
||||
move(from,to,count)
|
||||
char *from, *to;
|
||||
{
|
||||
while(count-->0) *to++ = *from++;
|
||||
return(to);
|
||||
}
|
||||
Reference in New Issue
Block a user