%recordformat parmfm(%shortinteger dsno, dact, ssno, sact, %C
                     %integer p1, p2, p3, p4, p5, p6)
%externalinteger tape error = 0
%externalinteger bytes transferred
%externalinteger TM = 0

   %externalroutine claim tape
      %record(parmfm) p
      p_dact = 1;  svc(105, p)
      tape error = p_p6
   %end
   %externalroutine release tape
      %record(parmfm) p
      p_dact = 10;  p_p1 = 3;  svc(105, p)
      p_dact = 2;  svc(105, p)
   %end
   %integerfn function(%integer n)
      %record(parmfm) p
      p_dact = 10;  p_p1 = n;  svc(105, p)
      %result = p_p6
   %end
   %externalroutine rewind
      tape error = function(3)
   %end
   %externalroutine tape mark
      tape error = function(2)
   %end
   %externalroutine skip forward
      tape error = function(4)
   %end
   %externalroutine skip reverse
      tape error = function(5)
   %end
   %externalroutine read tape(%integer buffer, size)
      %record(parmfm) p
      p_dact = 8;  p_p2 = buffer;  p_p4 = size
      svc(105, p)
      P_p3 = P_p3 - 1 %if P_p3 # size;     !system horror
      bytes transferred = P_p3
      tape error = p_p6
      tape error = tape error!128 %if p_p4 # 0;      !tape mark
      TM = P_p4
   %end
   %externalroutine write tape(%integer buffer, size)
      %record(parmfm) p
      p_dact = 9;  p_p2 = buffer;  p_p4 = size
      svc(105, p)
      tape error = p_p6
   %end
   %externalroutine clear
      tape error = function(1)
   %end
   %externalroutine backspace
      tape error = function(6)
   %end

%endoffile
