home *** CD-ROM | disk | FTP | other *** search
- #
-
- #include "m6.h"
-
-
- doif() {
- int i;
- int *p;
- char *arg();
- i = 1;
- while(!comp(arg(i),one)) if((i =+ 2)>8) return;
- p = arg(i+1) - 2;
- ge = move(p,&gf->ga0,p->word+1);
- setscan(dummy);
- }
-
- bindec(n) {
- if(n == 0) return;
- bindec(n/10);
- *ge++ = (n%10) + '0';
- }
-
- result(n) {
- char *p;
- setscan(dummy);
- ge = 2 + (p = &gf->ga0);
- if(n<0) {
- *ge++ = '-';
- n = -n;
- }
- if(n==0) *ge++ = '0';
- else bindec(n);
- *ge++ = 0;
- ge = (ge+1)&0177776;
- p->word = ge - p;
- *ge++ = *ge++ = 0;
- }
-
- binop(code) {
- int r1,r2;
- int r,t;
- int arg1, arg2;
- arg1 = decbin(1);
- arg2 = decbin(2);
- if(code < 7) /* relationals */
- result((code & ((arg1<arg2)?4:(arg1==arg2)?2:1)) != 0);
- else if(code < 9) /* seq=7 sne=8 */
- result((code==7)==comp(arg(1),arg(2)));
- else switch (code) {
- case 9:
- result(arg1+arg2);
- return;
- case 10:
- result(arg1-arg2);
- return;
- case 11:
- result(arg1*arg2);
- return;
- case 12:
- result(arg1/arg2);
- if(arg2==0) gf->ga0 = 0;
- return;
- case 13: /* exp */
- r = 1;
- while(arg2-->0) r =* arg1;
- result(r);
- if(arg2<-1) gf->ga0 = 0;
- }
- }
-
- decbin(i) {
- char *s;
- char t;
- int n;
- if(t = (*(s = arg(i))=='-')) s++;
- n = 0;
- while(*s>='0' && *s<='9') n = 10*n + *s++ - '0';
- return(t?-n:n);
- }
-
- dnl() {
- char d;
- d = 0;
- while(d=getchar()) if(d=='\n') return;
- }
-
- quote() {
- char *p,*s;
- p = finddef(1);
- s = &p[p->dtext];
- while(c = *s++) put();
- }
-
- list() {
- int n,i;
- char *p;
- if((n=decbin(1))<=0) return;
- p = df;
- for(i=1;;) {
- if(p<=d0) return;
- if(p->dswitch>=0)
- if(i++>=n) break;
- p =+ p->prev;
- }
- for(p = &p->dident;c = *p++;)
- put();
- }
-
- copy() {
- char *p;
- p = finddef(1);
- remove(2);
- newdef(p->dswitch);
- setdef(arg(2),p+p->dtext);
- }
-
- go(n) {
- if(comp(arg(1),one)) {
- popget();
- if(lg>0)
- if(n==26) popget();
- else setscan(gf->mframe); /* gobk=27 */
- }
- }
-
- size() {
- int i;
- char *p;
- i = 0;
- p = arg(1);
- while(*p++ != 0) i++;
- result(i);
- }
-
- meta() {
- char d;
- int i;
- char *arg();
- if((d = *arg(2))!=0) {
- for(i=0;i<NMETA;i++)
- if(metas[i]== *arg(1)) metas[i] = d;
- }
- }
-
- substr() {
- char *s;
- int arg2,arg3;
- char *arg();
- newdef(-1);
- setscan(df);
- s = arg(1);
- arg2 = decbin(2);
- arg3 = *arg(3)==0?32767:decbin(3);
- if(arg2<1) {
- arg3 =+ arg2-1;
- arg2=1;
- }
- while(--arg2>0 && *s!=0) s++;
- while(arg3-->0) {
- if((*de++ = *s++)==0) return;
- if(de>dmax) diag("No room for substr");
- }
- *de++ = 0;
- }
-