         skipsymbol
            pending action = pending action + 1
            com(pending action) = s; par(pending action) = p
          %finish
        %finish
      %finish
    %finish
done:
  %repeat
  %if files remaining > 0 %start
    b(nl);b(nl)
   = char record length * fount size + 1024 { spillage }

%external %byte %array buffer(0:buffsize)

%predicate load fount(%string(255) file, %integer address)
%external %integer %fn %spec LoadFile(%string(255) File, %integer a, b)
  %if LoadFile(file, buffsize, address) >= 0 %then %start
    curfount = file
    %true
  %finish %else %false
%end

%external %integerfn %spec XOsByte(%integername y,c, %integer a,x,yin)

%routine pch(%byte ch)
  *movb_ch,1
  *svc_1
%end

%external %integer cur dest = 0

%routine oswrch(%byte ch); ! To vdu
  %if curdest # 0 %then pch(3) %and curdest = 0
  pch(ch)
%end

%external %integer verbosity level

%external %routine pv(%integer minlev, %string(255) s)
%integer i
  %if verbosity level < minlev %then %return
  %for i = 1, 1, length(s) %cycle; oswrch(charno(s,i)); %repeat;
  oswrch(13);oswrch(10)
%end

%external %routine start printer
%integer y, c, x = XOsByte(Y, C, 3, 0, 0)
  oswrch(2); curdest = 1 ;!------------------------------------- ON
%end

%external %routine stop printen formatting utility V1.0.0",
                Proc ID(Help))
  %if result < 0 %then Stop(result)

%external %routine %spec start printer; start printer

  verbosity level = Verbosity Required(handle)

  %if XGetPresence("Serial", handle) # 0 %then %start
 t
    x = XOsByte(Y, C, 6, 255, 0)
    pr(1); pr(i)
    x = XOsByte(Y, C, 6, 0, 0)
  %else
    pr(1); pr(i)
  %finish
%end

%external %routine esc(%integer i)
  b(27); b(i)
%end

%routine send char(%integer index)
%integer i
  b(buffer(index*char record leom !Config)")
  %finish

  initialise printer
  %if XGetPresence("ff", handle) # 0 %then b(12)
  %if XGetPresence("NoPerfSkip", handle) # 0 %then %start
    esc('O')
  %finish

  count = XGetNumberOfValues("Input", handle)
  %for i = 1, 1, count %cycle
   eger char
  esc('&');b(0);b(low);b(high)
  %for char = low, 1, high %cycle
    send char(char)
  %repeat
%end

%external %routine litchar(%byte i)
%const %integer %c
  usa=0,fr=1,ger=2,uk=3,den=4,swe=5,it=6,sp=7,jap=8
%const %byte %array lang(0:31) = %c
  it,it,it,it,it,it,uk,sp,
  sp,sp,sp,swe,sp,swe,it,fr,
  fr,ger,den,den,den,den,sp,swe,
  ger,swe,swe,swe,swe,swe,fr,jap
  %const %byte %integer %array trtab(0:31)=%c
  '{','}','`','|','~','[','#','[',']','\','|','$','#',']','{','\',
  ']','~','[','{','\','|','{','[','\','^','{','|','~','@','{','\'

  i = 255 %if i = 127
  %if i >= 32 %start
    esc('6');esc('I');b(1);b(i);esc('I');b(0)
  %else
    !select language
    esc('R');b(lang(i))
    b(trtab(i))
    esc('R');b(0)
    !reselect language USA
  %finish
%end

%external %routine initialise printer
  ! Don't do esc @ because it fucks up the forms!!!
  b(17)
  esc('!');b(0)
  esc('('); ! nlq
  esc('%');b(1);b(0)
  esc(':');b(0);b(0);b(0) {Copy high-res rom -> ram}
  esc('%');b(0);b(0)
  esc('P'); ! pica
  esc(':');b(0);b(0);b(0) {Copy low-res rom -> ram}
  esc('2'); {default 1/6" line spacing}
  esc('C');b(0);b(12)
  esc('N');b(2);
  esc('D');b(0)
  esc('B');b(0)
  esc('b');b(0)
  esc('/');b(0)
  esc('Q');b(80)
  esc('l');b(0)
  esc('I');b(0)
  esc('6')
  esoswrch(%byte ch); ! To vdu
  %if curdest # 0 %then pch(3) %and curdest = 0
  pch(ch)
%end

%external %integer verbosity level

%external %routine pv(%integer minlev, %string(255) s)
%integer i
  %if verbosity level < minlev %then %return
  %for i = 1, 1, ln 32016 - NO I/O!
  %if p = "std.pica" %then %start { fast load }
    esc('(')
    esc('%');b(1);b(0)
    esc('R');b(0)
    esc(':');b(0);b(0);b(127)      
  %else %if load fount("adfs::0.$.founts.".p, addr(buffer(0)))
    esc('P');b(32);b(8); ! Force output out to allow change within line
    esc('(')
    esc('%');b(1);b(0)
    esc('R');b(0)
    %unless p -> base fount.(".pica") %then esc('p') %and b(1)
  %else
    ! Copy std fount to ram as emergency measure!
    esc('(')
    esc('%');b(1);b(0)
    esc('R');b(0)
    esc(':');b(0);b(0);b(127)      
    %finish
%end

%external %routine def char(%integer from index, to index)
  esc('&');b(0);b(to index);b(to index)
  send char(from index)
%end

%endoffile
