%externalstring(31)%fnspec ITOS (%integer I,places) %externalintegerfnspec IN POS %external %routine %spec SEEKINPUT(%integer byte) %external %routine %spec TO UPPER (%string(*)%name s) %external %predicate %spec EXISTS (%string(31) filename) %external %routine %spec ALIAS (%string(*)%name s) %system %routine %spec LET (%string(63) old, new) %system %integer %spec SKIPPING {Set nonzero to turn off BCI} %system %integer %spec ECHO OBEY %own %integer level = 0 { $IF nesting level } %own %integer active level { level of last cond tested } !Batch command processor procedures, ADC %integer %fn StoI (%string(31) s) %integer j, k = 0, d %for j = 1,1,length(s) %cycle d = char no(s,j) k = 10*k + (d-'0') %if d # ' ' %repeat %result = k %end %predicate true cond (%string(63)%name cond) %string(63) x cond = x.cond %while cond -> x.(" ").cond To upper (cond) %if cond -> ("EXISTS").cond %start %true %if exists(cond) %false %finish %if cond -> x.(".EQ.").cond %start %true %if x = cond %false %finish Print string (cond." Syntax?") %false %end %system %routine EXIT (%string(63) parm) %signal 9 {Simulate end of obeyfile} %end %System %routine IF (%string(63) parm) %if skipping = 0 %start skipping = -1 %unless true cond(parm) active level = level %finish level = level + 1 %end %System %routine UNLESS (%string(63) parm) %if skipping = 0 %start skipping = -1 %if true cond(parm) active level = level %finish level = level + 1 %end %System %routine ELSE (%string(63) parm) skipping = ~skipping %if active level = level-1 %end %System %routine FINISH (%string(63) parm) level = level - 1 skipping = 0 %if level = active level %end %System %routine INC (%string(63) parm) %string(63) var To upper(parm) var = parm Alias(parm) parm = ItoS(StoI(parm)+1,0) Let (var,parm) %end %System %routine DEC (%string(63) parm) %string(63) var To upper(parm) var = parm Alias(parm) parm = ItoS(StoI(parm)-1,0) Let (var,parm) %end %System %routine REPORT (%string(63) parm) Print string (parm) Newline %end %System %routine VERIFY (%string(63) parm) To upper (parm) ECHO OBEY = 0 ECHO OBEY = 1 %if parm = "ON" %end %const %integer max label = 50 %own %integer %array lab def(1:max label) = -1(*) %own %string(7) %array lab text(1:max label) = ""(*) %own %integer defined = 0 %own %integer pend jump = 0 %integer %map lookup (%string(63)%name L) %integer j To upper (L) %for j = 1,1,defined %cycle %result == lab def(j) %if lab text(j) = L %repeat defined = defined + 1 lab text(defined) = L %result == lab def(defined) %end %System %routine LABEL (%string(63) parm) %integer %name L == look up(parm) %if L < 0 %start L = in pos {Define L as here in command stream} SKIPPING = 0 %if addr(L) = pend jump {Got there} %else Print string (parm." already defined") Newline %signal 9 %finish %end %System %routine GOTO (%string(63) parm) %integer %name L == look up(parm) %if L < 0 %start {Undefined as yet} SKIPPING = 1 {Till we hit it} pend jump = addr(L) %else {Jump backwards} Seek input (L) %finish %end %end %of %file