% === RSX:COPY === %  16.09.88 VERSION 8
GLOBAL (LOCATION=&0) (START=&0)
%----   -------%
.   RSET
.   BR   MAIN
. DAT ABZAC0,&00E0          *   
. DAT ABZAC1,&00E0          *   
%---------------------------------%

  EQUALS MTOFF=&1,MTREAD=&3,MTWRIT=&5             % 
  EQUALS MTMARK=&7,MTFORW=&9
  EQUALS MTBACK=&B,MTLGAP=&D,MTREV=&F

LOCALS LDEVIA
  BYTES TXEBUS=RN.LF."<< EBUS   >>".0
  BYTES TXEINS=RN.LF."<< EINSTR >>".0

PROGRAM ABZAC0()
  CALL DPC 'TXEBUS'
  GOTO $
PROGRAM ABZAC1()
  CALL DPC 'TXEINS'
  GOTO $

LOCALS LMAIN
  BYTES TXBEG=RN.LF."*COPY*".0
  BYTES TXBAD=RN.LF." BAD RECORD".0
  BYTES TXEND=RN.LF." END".0

  EQUALS NBREC=100                      % 100. 
  EQUALS RCLEN=48                       %  48. 
  EQUALS BLSIZE=&200                    %   512. 

%    .  
  EQUALS MTBUFF=&200                    % 
  EQUALS LNREAD=RCLEN*BLSIZE
  DATA   READ=MTBUFF.0-LNREAD.&6000+MTREAD
  DATA REVIND=MTBUFF.0-LNREAD.&6000+MTREV

%    .  
  DATA ADBLCK,=MTBUFF.RCLEN
  EQUALS DWRITE=ADBLCK

  DATA EFLAG

  DATA [3],STACK=
PROGRAM MAIN()
  SP='STACK'
  CALL DPC 'TXBEG'

  EFLAG=0
  (WHILE
    ADBLCK=0
    (DCYCLE(R4) 'NBREC'
      CALL MTHAN 'READ'         %  
      (IF NOT IS CARRY          % ?
        CALL RKHAN 'DWRITE'
      ELSE
        CALL DPC 'TXBAD'        %
        EFLAG=1
      )IF
      ADBLCK=+'RCLEN'
    )DCYCLE
  WHILE EFLAG<>0
    CALL MTHAN 'REVIND'
  )WHILE

  CALL DPC 'TXEND'
  GOTO $

%======================%
%=   =%
%======================%
LOCALS LHANDL
  EQUALS MTADDR=&F558
PROGRAM MTHAN()
  R5='MTADDR'
  _R5=^R0 ; _R5=^R0 ; _R5=^R0
  REPEAT WHILE @R5:>=0
. CCL C
  (IF @R5<0
.    CST C
  )IF
  RETURN

LOCALS LDSK
  EQUALS RKDAR=&FF0A
  EQUALS RKCART=&2000   %
  EQUALS RKMASK=&3FFF
  EQUALS RKWRIT=1,RKGO=1
% INP: 0_R0- , 2_R0- , 4_R0-  
PROGRAM RKHAN()
  R2=0 ; R3=^R0 ; R2=/12            % #  -> R2,  -> R3
  R2=.ASL..ASL..ASL..ASL.           % #.,  .
  R2=.BIS.R3                        %'  .  
  R2=.BIS.'RKCART'                  % 
  R5='RKDAR'
  @R5=R2(.BIC.'RKMASK')
  _R5=^R0                           % 
  _R5=R1(^R0.SWAB..NEG.)            %   ->   
  _R5='RKWRIT*2+RKGO'
  REPEAT WHILE @R5:>=0
  RETURN

LOCALS LDP
  EQUALS COIST=&FF70,COOST=&FF74
PROGRAM DPC()
  (WHILE @R0:<>0
    REPEAT WHILE @'COOST':>=0
    @'COOST+2':=^R0
  )WHILE
  RETURN
