home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V6 / usr / source / m6 / m66.c < prev    next >
Encoding:
C/C++ Source or Header  |  1975-07-17  |  2.3 KB  |  165 lines

  1. #
  2.  
  3. #include "m6.h"
  4.  
  5.  
  6. doif() {
  7.     int i;
  8.     int *p;
  9.     char *arg();
  10.     i = 1;
  11.     while(!comp(arg(i),one)) if((i =+ 2)>8) return;
  12.     p = arg(i+1) - 2;
  13.     ge = move(p,&gf->ga0,p->word+1);
  14.     setscan(dummy); 
  15. }
  16.  
  17. bindec(n) {
  18.     if(n == 0) return;
  19.     bindec(n/10);
  20.     *ge++ = (n%10) + '0'; 
  21. }
  22.  
  23. result(n) {
  24.     char *p;
  25.     setscan(dummy);
  26.     ge = 2 + (p = &gf->ga0);
  27.     if(n<0) {
  28.         *ge++ = '-'; 
  29.         n = -n; 
  30.     }
  31.     if(n==0) *ge++ = '0'; 
  32.     else bindec(n);
  33.     *ge++ = 0; 
  34.     ge = (ge+1)&0177776;
  35.     p->word = ge - p;
  36.     *ge++ = *ge++ = 0; 
  37. }
  38.  
  39. binop(code) {
  40.     int r1,r2;
  41.     int r,t;
  42.     int arg1, arg2;
  43.     arg1 = decbin(1);
  44.     arg2 = decbin(2);
  45.     if(code < 7)    /* relationals */
  46.         result((code & ((arg1<arg2)?4:(arg1==arg2)?2:1)) != 0);
  47.     else if(code < 9)     /* seq=7 sne=8 */
  48.         result((code==7)==comp(arg(1),arg(2)));
  49.     else switch (code) {
  50.     case 9: 
  51.         result(arg1+arg2); 
  52.         return;
  53.     case 10: 
  54.         result(arg1-arg2); 
  55.         return;
  56.     case 11: 
  57.         result(arg1*arg2); 
  58.         return;
  59.     case 12: 
  60.         result(arg1/arg2);
  61.         if(arg2==0) gf->ga0 = 0; 
  62.         return;
  63.     case 13:    /* exp */
  64.         r = 1;
  65.         while(arg2-->0) r =* arg1;
  66.         result(r);
  67.         if(arg2<-1) gf->ga0 = 0; 
  68.     } 
  69. }
  70.  
  71. decbin(i) {
  72.     char *s;
  73.     char t;
  74.     int n;
  75.     if(t = (*(s = arg(i))=='-')) s++;
  76.     n = 0;
  77.     while(*s>='0' && *s<='9') n = 10*n + *s++ - '0';
  78.     return(t?-n:n); 
  79. }
  80.  
  81. dnl() {
  82.     char d;
  83.     d = 0;
  84.     while(d=getchar()) if(d=='\n') return; 
  85. }
  86.  
  87. quote() {
  88.     char *p,*s;
  89.     p = finddef(1);
  90.     s = &p[p->dtext];
  91.     while(c = *s++) put(); 
  92. }
  93.  
  94. list() {
  95.     int n,i;
  96.     char *p;
  97.     if((n=decbin(1))<=0) return;
  98.     p = df;
  99.     for(i=1;;) {
  100.         if(p<=d0) return;
  101.         if(p->dswitch>=0)
  102.             if(i++>=n) break;
  103.         p =+ p->prev; 
  104.     }
  105.     for(p = &p->dident;c = *p++;)
  106.         put(); 
  107. }
  108.  
  109. copy() {
  110.     char *p;
  111.     p = finddef(1);
  112.     remove(2);
  113.     newdef(p->dswitch);
  114.     setdef(arg(2),p+p->dtext); 
  115. }
  116.  
  117. go(n) {
  118.     if(comp(arg(1),one)) {
  119.         popget();
  120.         if(lg>0)
  121.             if(n==26) popget();
  122.             else setscan(gf->mframe);    /* gobk=27 */
  123.     }  
  124. }
  125.  
  126. size() {
  127.     int i;
  128.     char *p;
  129.     i = 0;
  130.     p = arg(1);
  131.     while(*p++ != 0) i++;
  132.     result(i); 
  133. }
  134.  
  135. meta() {
  136.     char d;
  137.     int i;
  138.     char *arg();
  139.     if((d = *arg(2))!=0) {
  140.         for(i=0;i<NMETA;i++)
  141.             if(metas[i]== *arg(1)) metas[i] = d; 
  142.     }
  143. }
  144.  
  145. substr() {
  146.     char *s;
  147.     int arg2,arg3;
  148.     char *arg();
  149.     newdef(-1);
  150.     setscan(df);
  151.     s = arg(1);
  152.     arg2 = decbin(2);
  153.     arg3 = *arg(3)==0?32767:decbin(3);
  154.     if(arg2<1) { 
  155.         arg3 =+ arg2-1; 
  156.         arg2=1; 
  157.     }
  158.     while(--arg2>0 && *s!=0) s++;
  159.     while(arg3-->0) {
  160.         if((*de++ = *s++)==0) return;
  161.         if(de>dmax) diag("No room for substr"); 
  162.     }
  163.     *de++ = 0; 
  164. }
  165.