      JSB CKPNT     ENTRY FOUND ? 
      JMP CKDPN     NO
      LDA CPFPO     GET OPEN TABLE ENTRY ADDR 
      ADA D2        INCREMENT TO PACK NO. OFFSET FIELD
      LDB A,I       GET PACK NO. OFFSET 
      STB PNOFF     SAVE IT 
      ADA MD2       START OF OPEN TABLE ENTRY 
      JSB STPNO     STORE NEW PACK NO. OFFSET 
      LDA PNOFF     GET OLD OFFSET
      JSB MVPNT     UPDATE PACK NO. TABLE 
      CLA,INA       SEARCH FOR EXISTING ENTRY 
      CLB           PN000 
      JSB CKPNT     UPDATE 'PNEAD' FOR PN000
      JSB ER16      BRANCH NEVER OCCURS 
      JMP MOVDA     MOVE DATA 
CKDPN EQU * 
      LDA CPFPO     GET OPEN TABLE ADDR 
      ADA D10       INCREMENT OT PACK NO. FIELD 
      LDB A,I       GET PACK NO.
      STB PNOFF     SAVE PACK NO. 
      CLB           NEW PACK NO. IS 0 
      STB A,I       STORE NEW PACK NO.
      CLA,INA       SEARCH FOR EXISTING ENTRY 
      LDB PNOFF     GET OLD PACK NO.
      JSB CKPNT     CAN OLD PACK NO. ENTRY BE USED FOR PN000? 
      RSS           YES 
      JMP GPNE      NO
      CLA,INA       SEARCH FOR EXISTING ENTRY 
      CLB           PN000 
      JSB CKPNT     UPDATE 'PNEAD' FOR PN000
      JSB ER16      ERROR NEVER OCCURS
      JMP MVPNE     INIT REAL PACK NO. ENTRY
GPNE  EQU * 
      CLA           SEARCH FOR AVAILABLE ENTRY
      JSB CKPNT     ENTRY AVAILABLE ? 
      JMP NENTA     NO
      CLA,INA       SET PACK NO. USED SWITCH
      STA PNESW     STORE SWITCH
MVPNE EQU * 
      LDA MD4       SIZE OF PACK NO. ENTRY(-) 
      STA MOVCT 
      LDA ADPNE     ADDR OF SOURCE(DUMMY PACK NO. ENTRY)
      LDB PNEAD     ADDR OF REAL PACK NO. ENTRY 
      JSB MOVE      MOVE PACK NO. ENTRY 
      JMP MOVDA     GO MOVE DATA
NENTA EQU * 
      LDA CPFPO     GET OPEN TABLE ENTRY ADDR 
      ADA D10       INCREMENT TO PACK NO. FIELD 
      LDB PNOFF     GET OLD PACK NO.
      STB A,I       RESTORE ORIGINAL PACK NO. 
      JSB ER16      NO
SPN00 EQU * 
      JSB GPN00 
      JMP CONTU     CONTINUE
GPN00 NOP 
      CLA,INA       SEARCH FOR EXISTING ENTRY 
      CLB           PN000 
      JSB CKPNT     ENTRY FOR PN000 EXIST ? 
      RSS           NO
      JMP SUWAP     YES 
      LDA ADPNE     GET ADDR OF DUMMY PACK NO. ENTRY
      STA PNEAD     USE DUMMY ENTRY 
      LDA SYSSC     GET SYSTEM SUBCHANNEL 
      STA PAKSC     STORE SUBCHANNEL
      JSB SETD2     SET UP FOR DOS-M SEARCH 
      LDB APN00     GET ADDR OF NAME
      JSB SRCD1     PN000 EXIST ? 
      JMP CPN00     NO
      ADB D3        INCREMENT TO STARTING T/S FIELD 
      LDA B,I       GET STARTING T/S
      STB SVAEN     SAVE DIREC ENTRY ADDR 
      LDB PNEAD     GET PACK NO. ENTRY ADDR 
      STA B,I       STORE STARTING T/S IN PACK NO. ENTRY
      STA STSWA     STORE STARTING T/S
      LDB SVAEN     RESTORE DIREC ENTRY ADDR
      INB           INCREMENT TO FILE SIZE FIELD
      LDA B,I       GET FILE SIZE 
      LDB PNEAD     GET PACK NO. ENTRY ADDR 
      INB           INCREMENT TO FILE SIZE FIELD
      STA B,I       STORE FILE SIZE 
      LDA SECTR     GET DIRECTORY SIZE
      ADA MD1 
      INB           INCREMENT TO DIREC SIZE FIELD 
      STA B,I       STORE DIRECTORY SIZE
      CLA           LSA 
      INB           INCREMENT TO LSA FIELD
      STA B,I       STORE LSA IN PACK NO. ENTRY 
      CLA           SET NO. SECT. USED TO 0 
      STA NSUWA 
      JMP SUWAP 
CPN00 EQU * 
      JSB CRPN0     CREATE PN00 
SUWAP EQU * 
      JSB CLWAP     CALC. WORK AREA PARAMETERS
      JMP GPN00,I   RETURN
CONTU EQU * 
      LDA NSUWA     NO. SECT. USED IN W/A 
      CMA,INA 
      ADA FLNGH     CALC. NO. AVAILABLE SECT. 
      CMA 
      ADA CPNSF     NO. SECT. IN FILE 
      SSA,RSS       W/A .GE. FILE SIZE? 
      JSB ER17      NO
      JMP CKPN0     GO CHECK FOR A PACK NO. ENTRY 
MOVDA EQU * 
      LDA SYSSC     SYST. SUB CH. 
      STA CPDSC     DESIRED SUB CH. 
      JSB CPMOV     MOVE SECTORS
      LDA CPFPO     GET OPEN TABLE ENTRY ADDR 
      JSB STPNO     STORE NEW PACK NO. OFFSET 
      LDB CPFPO     FILE POSITION IN O.T. 
      ADB D3
      LDA BWATS     BEGINNING WORK AREA "T/S" 
      JSB STT.S     CONV. TO T/S
      STA B,I       NEW T/S 
      ADB D6
      CLA 
      STA B,I       CLEAR DIRECTORY ENTRY T/S FIELD 
      INB 
      STA B,I       NEW PACK NO.
      ADB D3
      STA B,I       FORCE CUR. T/S TO ZERO
      ADB MD1 
      LDA SYSSC     SYST. SUB CH. 
      STA B,I       NEW SUB CH. 
      LDA NSUWA     NO. SECT. USED IN W/A 
      ADA CPNSF     NO. SECT. IN FILE 
      STA NSUWA     UPDATE NEW NO.
      LDB PNEAD     GET PACK NO. ENTRY ADDR 
      ADB D3        INCREMENT TO LSA FIELD
      STA B,I       STORE NEW LSA 
      LDA PNESW     GET PACK NO. ENTRY USED SWITCH
      SZA,RSS       NEW ENTRY USED ?
      JMP EFCON     NO
      LDA NXPTL     UPDATE ADDR OF NEXT PACK NO. ENTRY
      ADA D4
      STA NXPTL 
      JMP EFCON     RETURN TO MAIN
      SPC 1 
GOCPY EQU *         COPY PACK TO PACK 
      LDA PAKSC     GET SOURCE FILE SUBCHANNEL
      STA CPCSC     SET UP SUBCHANNEL FOR COPY
      LDA CPCTS+1   GET DISC ADR. OF SOURCE 
      STA CPCTS     SET UP DISC ADR FOR COPY
      LDA CPNSF     NO. OF SECT. IN THIS FILE 
      STA NOSTM     NO. OF SECT. TO MOVE
      JSB CPMOV     MOVE
      JMP EFCON     RETURN TO MAIN
      SPC 1 
CPYT  EQU *         COPY TERMINATE
      LDA DPNO      DESIRED PACK NO.
      JSB GETPN     GET SPECIAL PACK NO.
      JSB ER22
      ADB D3        INCREMENT TO STARTING T/S FIELD 
      LDA B,I       GET STARTING T/S
      STA DPNE      STORE STARTING T/S
      LDA ADPNE     GET ADDR OF DUMMY PACK NO. ENTRY
      STA PNEAD     STORE ADDR
      JSB SETD1     SET UP FOR EFMP DIR 
      LDB CPFPO     ADDR. OF FILE NAME
      JSB SRCD1     SEARCH DIRECTORY
      JSB ER22
      ADB D8
      CLA 
      STA B,I       "HRA" ON DISC 
      CLA,INA       WRITE 
      LDB PAKSC     SUBCHANNEL
      JSB PRWIO     UPDATE DIRECTORY ENTRY
      JSB ER22
      SKP 
CPMOV NOP           COPY MOVE 
      LDA NOTRB     NO. OF TRB'S
      LDB TRBSZ 
      JSB MPY 
      STA MTRBS     MAX. TRB SIZE 
CPYMR EQU *         COPY MORE 
      CLB 
      STB NOSTM+1   INITIALIZE NO. SECT. MOVED THIS TIME
      CMA,INA 
      ADA NOSTM     NO. SECT LEFT TO MOVE 
      LDB NOSTM 
      STA NOSTM     UPDATE NO. LEFT TO MOVE 
      SSA,RSS 
      LDB MTRBS     GET SMALLER OF TWO
      SZB,RSS       FINISHED? 
      JMP CPMOV,I   YES 
      STB GNS       NO. SECT. TO XFER 
      LDA CPCSC     CURRENT SUB CH. 
      STA GSC 
      LDA CPCTS     CURRENT T/S 
      JSB STT.S     CONV. TO T/S
      LDB TRBUF     START OF I/O AREA 
      JSB GRTXX     READ SECTORS
      LDA CPDSC     DESIRED DISC
      STA GSC 
      LDA CPNXS     NEXT "T/S"
      JSB STT.S     CONV. TO T/S
      LDB TRBUF     START OF I/O AREA 
      JSB GWTXX     WRITE DESIRED SECTORS 
      LDA CPCTS     CURRENT T/S 
      ADA GNS       NO. SECT. MOVED 
      STA CPCTS     UPDATE CURRENT T/S
      LDA CPNXS     NEXT "T/S"
      ADA GNS       NO. SECT. MOVED 
      STA CPNXS     UPDATE NEXT "T/S" 
      LDA NOSTM+1   NO. OF SECT. MOVED THIS TIME
      ADA GNS       NO. SECT. MOVED 
      STA NOSTM+1 
      LDA MTRBS     MAX. TRB SECTORS
      LDB NOSTM     NO. SECT. LEFT TO MOVE
      SSB,RSS       FINISHED? 
      JMP CPYMR+2   NO, COPY MORE 
      JMP CPMOV,I   RETURN
      SPC 3 
* CALFS - CALCULATE FILE SIZE (IN SECTORS)
* ENTER:
*         B = STARTING ADDR. OF FILE
* EXIT: 
*         A = FILE SIZE (IN SECTORS)
* 
CALFS NOP           CALC. FILE SIZE 
      ADB D4
      LDA B,I       FILE LENGTH (IN RECORDS)
      INB 
      LDB B,I       RECORD LENGTH (IN WORDS)
      JSB MPY 
      JSB DIV 
      DEF D128
      SOC           OVERFLOW? 
      JSB ER23      YES, ERROR SHOULD NOT OCCUR 
      SZB           OVERFLOW? 
      INA           YES, ADD 1 FULL SECTOR
      JMP CALFS,I   RETURN
      SPC 1 
CLSTM NOP           CAL. NO. SECT. TO MOVE
      LDA NOTRB     NO. OF TRB'S
      LDB TRBSZ 
      JSB MPY 
      STA MTRBS     MAX. TRB SECTORS
      LDA NSUWA     NO. SECT. USED IN W/A 
      CMA,INA 
      ADA FLNGH     DOS-M FILE LENGTH (OF W/A 
      STA B 
      CMA 
      ADA MTRBS     CALC. LENGTH OF WORK AREA LEFT
      SSA,RSS       FILE LENGTH .LT. MAX. SECTORS.
      STB MTRBS     SAVE SMALLEST NO. SECT. TO WRITE
      LDA B         WORK AREA LEFT
      CMA 
      ADA CPNSF     NO. OF SECT. IN FILE TO COPY
      SSA,RSS       W/A .GE. FILE LENGTH
      STB NOSTM     NO. OF SECT. TO MOVE AT 1 TIME
      STA CPALF     COPY-ALL FLAG 
* CPALF = (-), ALL RECORDS COPIED 
*       = (+), NO. OF RECORDS YET TO COPIED-1 
      LDA SYSSC     SYST. SUB CH
      STA CPDSC     PACK DESIRED SUB CH.
      JMP CLSTM,I   RETURN
      SPC 3 
CLWAP NOP           CALC. WORK AREA PARAMETERS
      LDB PNEAD     GET PACK NO. ENTRY ADDR 
      LDA B,I       GET STARTING T/S
      JSB T.STS     CONV. TO SECT.
      ADA NSUWA     NO. SECT. USED IN W/A 
      STA CPNXS     STARTING "T/S" IN W/A 
      STA BWATS     BEGINNING FREE W/A "T/S"
      INB 
      LDA B,I       FILE LENGTH(IN SECTORS) 
      STA FLNGH 
      LDB CPFPO     FILE POSITION IN W/A
      JSB CALFS     CALC. FILE SIZE (IN SECT.)
      STA CPNSF     SAVE NO. SECT. IN FILE
      STA NOSTM     NO. SECT. TO MOVE 
      JMP CLWAP,I   RETURN
      SPC 1 
GETDP NOP           GET DESTINATION PACK
      LDA DPNO      DESIRED PACK NO.
      JSB GETPN     GET PACK NO.
      JMP *+3       PACK NOT AVAILABLE
      ISZ GETDP     P+2, PACK AVAILABLE 
      JMP GETDP,I   RETURN
      JSB $SYIO 
      DEC 2         WRITE 
      OCT 1         L.U.
      DEF MS1       INSERT DESTINATION PACK 
      ABS LM1 
      DEF *+2 
      JMP $WAIT 
      HLT 76B 
      JSB RCORT     READ C OR T 
      JMP GETDP,I   P+1, TERMINATE
      JMP GETDP+1   CONTINUE
      SPC 1 
GETSP NOP           GET SOURCE PACK 
      LDA CPCPN 
      JSB GETPN     GET PACK NO.
      JMP *+3       PACK NOT AVAILABLE
      ISZ GETSP     P+2, PACK AVAILABLE 
      JMP GETSP,I   RETURN
      JSB $SYIO 
      DEC 2         WRITE 
      OCT 1         L.U.
      DEF MS2       INSERT SOURCE PACK
      ABS LM2       NO. WORDS 
      DEF *+2 
      JMP $WAIT 
      HLT 76B 
      JSB RCORT     READ C OR T 
      JMP GETSP,I   P+1, TERMINATE
      JMP GETSP+1   CONTINUE
      SPC 1 
RCORT NOP           READ C OR T 
      JSB $SYIO 
      DEC 2         WRITE 
      OCT 1         L.U.
      DEF MS3       ENTER C OR T
      ABS LM3 
      DEF *+2 
      JMP $WAIT 
      JSB $SYIO 
      DEC 1         READ
      OCT 401 
      DEF MS4 
      ABS LM4 
      DEF *+2 
      JMP $WAIT 
      LDA MS4       C OR T
      AND H8BT
      CPA T 
      JMP RCORT,I   P+1, TERMINATE
      CPA C 
      RSS 
      JMP RCORT+1   INVALID, REPEAT 
      ISZ RCORT     P+2 
      JMP RCORT,I   CONTINUE
C     OCT 041400
T     OCT 052000
MS1   ASC 19,INSERT DESTINATION PACK AND PRESS RUN. 
LM1   EQU *-MS1 
MS2   ASC 17,INSERT SOURCE PACK AND PRESS RUN.
LM2   EQU *-MS2 
MS3   ASC  7,ENTER C OR T.
LM3   EQU *-MS3 
MS4   OCT 0 
LM4   EQU *-MS4 
CPCSC OCT 0         CURRENT SUB CH. 
CPCTS OCT 0,0       CURRENT "T/S" (IN SECTORS)
CPDSC OCT 0         DESIRED SUB CH. 
CPNXS OCT 0,0       NEXT FILE SECT. 
MTRBS OCT 0         MAX. TRB SECTORS
NOSTM OCT 0,0       NO. SECT. LEFT TO MOVE
      SPC 1 
BWATS OCT 0         BEGINNING FREE W/A "T/S"
CPALF OCT 0         COPY-ALL FLAG,(-)FIN,(+)SEC.LF-1
CPCPN OCT 0         CURRENT PACK NO.
CPFPO OCT 0         COPY-FILE POSITION IN O.T.
CPNSF OCT 0,0       NO. OF SECT. IN THIS FILE 
SCODE OCT 0         SECURITY CODE 
PNOFF OCT 0         PACK NO. OFFSET 
PNSAV BSS 1         PACK NO. ENTRY ADDR 
PNESW BSS 1         PACK NO. ENTRY USED SWITCH
      HED MISCEL. 
MOVE  NOP 
      JSB MASUB 
      DEC 1 
POST  NOP 
      JSB MASUB 
      DEC 2 
CKVSU NOP 
      JSB MASUB 
      DEC 4 
NAM0? NOP 
      JSB MASUB 
      DEC 5 
CRPN0 NOP 
      JSB MASUB 
      DEC 6 
CKPN  NOP 
      JSB MASUB 
      DEC 7 
SVPNS NOP 
      JSB MASUB 
      DEC 8 
SETD1 NOP 
      JSB MASUB 
      DEC 10
SETD2 NOP 
      JSB MASUB 
      DEC 11
REPNS NOP 
      JSB MASUB 
      DEC 13
MVPNT NOP 
      JSB MASUB 
      DEC 16
GETPN NOP 
      JSB MASUB 
      DEC 17
CKOPN NOP 
      JSB MASUB 
      DEC 18
SRCD1 NOP 
      JSB MASUB 
      DEC 19
GTNPN NOP 
      JSB MASUB 
      DEC 20
CKDSP NOP 
      JSB MASUB 
      DEC 21
CMPAR NOP 
      JSB MASUB 
      DEC 23
CKPNT NOP 
      JSB MASUB 
      DEC 24
T.STS NOP 
      JSB MASUB 
      DEC 26
STT.S NOP 
      JSB MASUB 
      DEC 27
GRTXX NOP 
      JSB MASUB 
      DEC 29
GWTXX NOP 
      JSB MASUB 
      DEC 30
CKSPC NOP 
      JSB MASUB 
      DEC 31
STPNO NOP 
      JSB MASUB 
      DEC 32
PRETS NOP 
      JSB MASUB 
      DEC 34
PRWIO NOP 
      JSB MASUB 
      DEC 35
MPY   NOP 
      JSB MASUB 
      DEC 36
DIV   NOP 
      JSB MASUB 
      DEC 37
      SKP 
ER2   EQU * 
      OCT 0 
      LDA D2
      JSB ERR 
ER3   EQU * 
      OCT 0 
      LDA D3
      JSB ERR 
ER4   EQU * 
      OCT 0 
      LDA D4
      JSB ERR 
ER6   EQU * 
      OCT 0 
      LDA D6
      JSB ERR 
ER11  EQU * 
      OCT 0 
      LDA D11 
      JSB ERR 
ER15  EQU * 
      OCT 0 
      LDA D15 
      JSB ERR 
ER16  EQU * 
      OCT 0 
      LDA D16 
      JSB ERR 
ER17  EQU * 
      OCT 0 
      LDA D17 
      JSB ERR 
ER22  EQU * 
      OCT 0 
      LDA D22 
      JSB ERR 
ER23  EQU * 
      OCT 0 
      LDA D23 
      JSB ERR 
ER24  EQU * 
      OCT 0 
      LDA D24 
      JSB ERR 
ERR   NOP 
      LDB ERR 
      ADB MD3 
      LDB B,I       PICK UP LOC OF ERROR
      JMP ERROR 
      HED CONSTANTS AND VARIABLES 
A     EQU 0 
B     EQU 1 
.     EQU 53B 
L8BT  EQU 74B 
H8BT  EQU 75B 
SECTR EQU 116B
SYSSC EQU 155B
MD10  EQU .-10
MD9   EQU .-9 
MD8   EQU .-8 
MD7   EQU .-7 
MD4   EQU .-4 
MD3   EQU .-3 
MD2   EQU .-2 
MD1   EQU .-1 
D1    EQU .+1 
D2    EQU .+2 
D3    EQU .+3 
D4    EQU .+4 
D6    EQU .+6 
D7    EQU .+7 
D8    EQU .+8 
D10   EQU .+10
D11   DEC 11
D12   DEC 12
D15   DEC 15
D16  DEC 16 
D17   DEC 17
D22   DEC 22
D23   DEC 23
D24   DEC 24
D128  DEC 128 
D999  DEC 999 
MXWPE DEC 9 
AARG1 DEF ARG1
ARG1  OCT 0 
ARG2  OCT 0 
ARG3  OCT 0 
ARG4  OCT 0 
ARG5  OCT 0 
ARG6  OCT 0 
ARG7  OCT 0 
ARG8  OCT 0 
      END 
                                                                                                                                