86 lines
1.1 KiB
C
86 lines
1.1 KiB
C
#
|
|
|
|
#include "m6.h"
|
|
|
|
define() {
|
|
remove(1);
|
|
newdef(decbin(3));
|
|
setdef(arg(1),arg(2));
|
|
}
|
|
|
|
newdef(n) {
|
|
pushdef();
|
|
de = &df[df->dtext = dend];
|
|
if((df->dswitch = n)<0) trashflag++;
|
|
}
|
|
|
|
setdef(s1,s2) {
|
|
copydef(s1);
|
|
df->dtext = de -df;
|
|
copydef(s2);
|
|
}
|
|
|
|
copydef(s)
|
|
char *s;
|
|
{
|
|
while(*de++ = *s++)
|
|
if(de>dmax) diag("Definition table overflow");
|
|
}
|
|
|
|
char *
|
|
arg(n) {
|
|
char *p;
|
|
p = &gf->ga0;
|
|
while(--n>=0 && p->word!=0) p =+ p->word;
|
|
return(p->word!=0?p+2:p);
|
|
}
|
|
|
|
function(n) {
|
|
if(n==0) ;
|
|
else if(1<=n && n<=13) binop(n);
|
|
else {
|
|
switch(n) {
|
|
case 20:
|
|
doif();
|
|
return;
|
|
case 21:
|
|
define();
|
|
return;
|
|
case 22:
|
|
copy();
|
|
return;
|
|
case 23:
|
|
meta();
|
|
return;
|
|
case 24:
|
|
size();
|
|
return;
|
|
case 25:
|
|
substr();
|
|
return;
|
|
case 26:
|
|
case 27:
|
|
go(n);
|
|
return;
|
|
case 28:
|
|
remove(1);
|
|
return;
|
|
case 29:
|
|
dnl();
|
|
return;
|
|
case 32:
|
|
quote();
|
|
return;
|
|
case 33:
|
|
result(finddef(1)->dswitch);
|
|
return;
|
|
case 34:
|
|
list();
|
|
return;
|
|
case 35:
|
|
traceflag = comp(arg(1),one);
|
|
return;
|
|
}
|
|
}
|
|
}
|