1: #
   2: 
   3: #include "m6.h"
   4: 
   5: control() {
   6: 
   7:     while(1) {
   8:         get();
   9:         if(c==0 && lg>0)  {
  10:             popget();
  11:             trash();
  12:             rescan = 1;
  13:         }
  14:         else {
  15:             if(!rescan) put();
  16:             else if(lq>0) {
  17:                 if(c==lquote) {
  18:                     lq++;
  19:                     put();
  20:                 }
  21:                 else if(c==rquote || c==0)  {
  22:                     lq--;
  23:                     if(lq>0 || l9>0) put (rquote);
  24:                 }
  25:                 else put();
  26:             }
  27:             else if(l9>0)
  28:                 if(c==colon||c==0||c==semi)
  29:                     if(--l9<=0) endcall();
  30:                     else put();
  31:                 else {
  32:                     if(c==sharp) l9++;
  33:                     else if(c==lquote) lq++;
  34:                     put();
  35:                 }
  36:             else {
  37:                 if(c==sharp) begincall();
  38:                 else if(c==lquote) lq++;
  39:                 else if(lp>0) {
  40:                     if(c==colon||c==0||c==semi) endcall();
  41:                     else if(c==comma) newarg();
  42:                     else put();
  43:                 }
  44:                 else if(c==0) return;   /* lg=lp=lq=0 */
  45:                 else put();
  46:             }
  47:         }
  48:     }
  49: }
  50: 
  51: endcall() {
  52:     char *pt, *p;
  53:     rescan = c!=semi;
  54:     newarg();
  55:     pushget();
  56:     pt = &pf->pa0;
  57:     ge = move(pt,&gf->ga0,pe-pt);
  58:     if(ge>gmax) diag("Call stack overflow");
  59:     if(traceflag) dotrace();
  60:     p = finddef(0);
  61:     setscan(p);
  62:     popput();
  63:     lp--;
  64:     function(p->dswitch);
  65: }
  66: 
  67: begincall() {
  68:     lp++;
  69:     pushput();
  70:     pe = pf+pend;
  71:     pf->pan = pf->pa0 = 0;
  72: }
  73: 
  74: newarg() {
  75:     char *p;
  76:     if(++pf->pan>=9) if(c==comma) l9++;
  77:     *pe++ = 0;
  78:     pe = (pe+1)&0177776;
  79:     p = &pf->pa0;
  80:     while(p->word!=0) p =+ p->word;
  81:     p->word = pe - p;
  82:     *pe++ = *pe++ = 0;
  83: }
  84: 
  85: setscan(p)
  86: char *p;
  87: {
  88:     gf->mchar = (gf->mframe = p)->dtext;
  89:     gf->marg = 0;
  90: }

Defined functions

begincall defined in line 67; used 1 times
  • in line 37
control defined in line 5; used 2 times
endcall defined in line 51; used 2 times
newarg defined in line 74; used 2 times
setscan defined in line 85; used 5 times
Last modified: 1975-07-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 606
Valid CSS Valid XHTML 1.0 Strict