ASMB,R,L,C
      HED (FMGR) CO..: COPY COMMAND 
*     NAME:    CO.. 
*     SOURCE:  92071-18015
*     RELOC:   92071-16015
*     PGMR:    E.D.B. 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
*  ***************************************************************
* 
      NAM CO..,7 92071-1X015 REV.2041 800728
* 
      ENT CO..
* 
      EXT IF.ER, CK.NM, CLR.C, CR.LU, MSC.
      EXT F.SET, F.GET, FM.ER 
      EXT I.BUF, O.BUF, N.OPL, G0.. 
      EXT ECREA, PURGE, COPYF 
      EXT .ENTR, IFBRK
      SUP 
      SKP 
* 
*     DESCRIPTION 
* 
*     THIS IS THE COPY COMMAND OF THE RTE-L FMGR
*     SEE ERS FOR DETAILS.
* 
*     PROCESSES:
* 
*     CO,SLU,DLU,OPT,FIRST,LAST,MSC 
* 
*     WHERE:
* 
*     SLU IS A NAMR OR CRN OF THE SOURCE CARTRIDGE
* 
*     DLU IS THE DESTINATION CARTRIDGE
* 
*     OPT IS THE OPTIONS
* 
*     FIRST IS THE FIRST FILE TO BE TRANSFERRED 
* 
*     LAST IS THE LAST FILE TO BE TRANSFERRED 
* 
*     MSC IS THE MASTER SECURITY CODE (MAY BE REQUIRED TO PURGE)
* 
*     POSSIBLE ERRORS:
* 
*     -6     FILE NOT FOUND 
*     -14*   DIRECTORY FULL 
*     -32    CARTRIDGE NOT FOUND
*     -33*   CARTRIDGE OUT OF ROOM
*     -49*   COPY VERIFY FAILED 
*     -50    NO FILES MATCHED WILDCARD SPECIFICATION
*      21    ILLEGAL LU 
*      22*   COPY TERMINATED
*      51    BAD MASTER SECURITY CODE 
*      56    BAD PARAMETER
* 
*      * INDICATES THAT THE FILE NAME CAUSING THE ERROR IS PLACED 
*        INTO THE 10G GLOBAL PARAMETER
* 
*     COPY OPTIONS: 
* 
*      C     CLEAR DESTINATION CARTRIDGE BEFORE COPY
*            (REQUIRES MASTER SECURITY CODE)
*      D     DUMP FILE EVEN IF EXISTING 
*      E     ELIMINATE EXTENTS
*      P     PURGE SOURCE FILE AFTER COPY 
*            (MAY REQUIRE MASTER SECURITY CODE) 
*      V     VERIFY COPY
      SKP 
* 
*     ENTRY 
* 
N     NOP 
LIST  NOP 
ER    NOP 
* 
CO..  NOP           ENTRY POINT 
      JSB .ENTR 
      DEF N 
* 
*     PROCESS REQUEST 
* 
      CLA           ZERO OUT SOME VARIABLES 
      STA CLRSW 
      STA DMPSW 
      STA ELISW 
      STA PURSW 
      STA VERSW 
      STA FRST? 
      STA FOUND 
      STA ENTRY 
* 
*     PARSE FIRST PARAMETER (SOURCE)
* 
      LDA LIST,I    GET TYPE OF FIRST PARAMETER 
      ISZ LIST
      SZA,RSS       IF NULL,
      JMP CO..1      THEN CONTINUE
* 
      CPA .1        IF NUMERIC, 
      JMP CO..2      THEN CONTINUE
* 
      LDA LIST      GET REQUESTED MASK ADDRESS
      LDB N.OPL+1   GET CRN 
      JMP CO..3     CONTINUE
* 
CO..1 LDA DDFLT     GET DEFAULT MASK ADDRESS
      LDB N.OPL+1   GET CRN 
      JMP CO..3     CONTINUE
* 
CO..2 LDA DDFLT     GET DEFAULT MASK ADDRESS
      LDB LIST,I    GET CRN 
* 
CO..3 STA MASK      SAVE MASK ADDRESS 
      STB SLU       SAVE SOURCE LU/CRN
* 
      JSB F.SET     SET UP MASK 
      DEF *+3 
      DEF MASK,I
      DEF N.OPL 
* 
      STA MSKFL     SAVE WILDCARD MASK FLAG 
* 
      JSB CR.LU     TEST FOR LEGAL ID 
      DEF *+2 
      DEF SLU 
* 
      SZA,RSS       IF NOT LEGAL ID,
      JMP ER32       THEN TAKE ERROR RETURN 
* 
      CMA,INA       NEGATE LU 
      STA SLU        AND SAVE 
      SKP 
* 
*     PARSE SECOND PARAMETER (DESTINATION)
* 
      LDB LIST      GET LIST ADDRESS
      ADB .3        BUMP TO DESTINATION ID
      LDA B,I       GET TYPE
      CPA .3        IF ASCII
      JMP ER56       THEN TAKE ERROR EXIT 
* 
      INB           BUMP TO ID
      LDA B,I        GET IT 
      STA DLU         SAVE IT 
* 
      JSB CR.LU     TEST FOR LEGAL ID 
      DEF *+2 
      DEF DLU 
* 
      SZA,RSS       IF NOT LEGAL ID,
      JMP ER32       THEN TAKE ERROR EXIT 
* 
      CMA,INA       NEGATE LU 
      STA DLU        AND SAVE 
      CPA SLU       IF SAME AS SOURCE LU, 
      JMP ER21       THEN TAKE ERROR EXIT 
      SKP 
* 
*     PARSE THIRD PARAMETER (OPTIONS) 
* 
      LDB LIST      GET LIST ADDRESS
      ADB .7         BUMP TO OPTIONS
      LDA B,I       GET TYPE
      SZA,RSS       IF NOT SUPPLIED,
      JMP CONT       THEN CONTINUE
* 
      INB           BUMP TO INFO
      CLE,ELB        CONVERT INTO BYTE COUNTER
      LDA N6        GET LOOP COUNTER
      STA COUNT      SAVE 
* 
PARSE CLE,ERB       GET ADDRESS AND SET E TO BYTE 
      LDA B,I       GET 2 CHARACTERS
      ELB,SLB       IF LOW BYTE,
      ALF,ALF        THEN SHIFT TO HIGH BYTE
      AND NB400     ISOLATE HIGH BYTE 
      ADA .32        PUT SPACE INTO LOW BYTE
* 
      CPA .SP       IF SPACE, 
      JMP PARS1      THEN IGNORE
* 
      CPA .C        IF OPTION C,
      JMP SET.C      THEN SET CLEAR SWITCH
* 
      CPA .D        IF OPTION D,
      JMP SET.D      THEN SET DUMP SWITCH 
* 
      CPA .E        IF OPTION E,
      JMP SET.E      THEN SET ELIMINATE SWITCH
* 
      CPA .P        IF OPTION P,
      JMP SET.P      THEN SET PURGE SWITCH
* 
      CPA .V        IF OPTION V,
      JMP SET.V      THEN SET VERIFY SWITCH 
* 
      JMP ER56      ELSE TAKE ERROR EXIT
* 
SET.C ISZ CLRSW     SET CLEAR SWITCH
      JMP PARS1      AND CONTINUE 
* 
SET.D ISZ DMPSW     SET DUMP SWITCH 
      JMP PARS1      AND CONTINUE 
* 
SET.E ISZ ELISW     SET ELIMINATE SWITCH
      JMP PARS1      AND CONTINUE 
* 
SET.P ISZ PURSW     SET PURGE SWITCH
      JMP PARS1      AND CONTINUE 
* 
SET.V ISZ VERSW     SET VERIFY SWITCH 
* 
PARS1 INB           INCREMENT BYTE COUNT
      ISZ COUNT     IF NOT DONE,
      JMP PARSE      THEN CONTINUE PARSE
      SKP 
* 
*     PARSE FOURTH PARAMETER (FIRST FILE) 
* 
CONT  LDB LIST      GET LIST ADDRESS
      ADB .11        BUMP TO FOURTH PARAMETER 
* 
      LDA B,I       GET THE TYPE
      CPA .1        IF NUMERIC, 
      JMP ER56       THEN INDICATE BAD PARAMETER
* 
      SZA,RSS       IF NOT SUPPLIED,
      ISZ FRST?      THEN SET FIRST-FLAG
* 
      INB           BUMP TO 2 CHARS 
      LDA B,I        GET THEM 
      STA FIRST       AND SAVE THEM 
* 
      INB           BUMP TO NEXT 4 CHARS
      DLD B,I        GET THEM 
      DST FIRST+1     AND SAVE THEM 
* 
*     PARSE FIFTH PARAMETER (LAST FILE) 
* 
      LDB LIST      GET LIST ADDRESS
      ADB .15        BUMP TO FIFTH PARAMETER
      LDA B,I       GET THE TYPE
      CPA .1        IF NUMERIC, 
      JMP ER56       THEN INDICATE BAD PARAMETER
* 
      INB           BUMP TO 2 CHARS 
      LDA B,I        GET THEM 
      STA LAST        AND SAVE THEM 
* 
      INB           BUMP TO NEXT 2 CHARS
      DLD B,I        GET THEM 
      DST LAST+1      AND SAVE THEM 
* 
*     PARSE SIXTH PARAMETER (MSC) 
* 
      LDB LIST      GET LIST ADDRESS
      ADB .19        BUMP TO SIXTH PARAMETER
* 
      LDA B,I       GET THE TYPE
      SZA,RSS       IF NOT SUPPLIED,
      JMP MSC1       THEN CLEAR MSC STATUS FLAG 
* 
      STB MSECU     SAVE P.RAM ADDRESS FOR MSC
      JSB MSC.      TEST PASSED MASTER SECURITY CODE
      DEF *+2 
      DEF MSECU,I 
* 
      SZA,RSS       IF BAD MSC, 
      JMP ER51       TAKE ERROR EXIT
* 
MSC1  STA MSECU     SAVE STATUS WORD (0 = BAD MSC)
      SKP 
* 
*     MAKE COPYF OPTION WORD
* 
      LDA DOPT      START WITH DEFAULT REQUEST
      LDB VERSW     GET VERIFY-SWITCH 
      SZB,RSS       IF NOT SET, 
      RAR,CLE,ELA    THEN CLEAR VERIFY-BIT
      LDB ELISW     GET ELIMINATE-SWITCH
      SZB,RSS       IF NOT SET, 
      RAL,CLE,ERA    THEN CLEAR TRUNCATE-BIT
      STA IOPT      SAVE FOR COPYF
* 
*     CLEAR DESTINATION IF REQUESTED
* 
      LDA CLRSW     GET CLEAR SWITCH
      SZA,RSS       IF NOT REQUESTED, 
      JMP NEXTF      THEN CONTINUE
* 
      LDA MSECU     GET MSC STATUS FLAG 
      SZA,RSS       IF BAD MSC, 
      JMP ER51       THEN TAKE ERROR EXIT 
* 
      JSB CLR.C     CLEAR DESTINATION 
      DEF *+2 
      DEF DLU 
* 
      CPA .60       IF CLEAR NOT PERMITTED, 
      JMP EXIT       THEN TAKE GOOD EXIT
* 
      SZA           IF ANY OTHER ERROR, 
      JMP EREX       THEN TAKE EXIT RETURN
      SKP 
* 
*     START TRANSFER LOOP 
* 
NEXTF JSB F.GET     GET A FILE ENTRY
      DEF *+3 
      DEF FNAME 
      DEF SLU 
* 
      SZA           IF NO ERROR,
      JMP FIN        THEN FINISHED
* 
      LDA FNAME     GET FIRST WORD OF FILE NAME 
      SSA           IF CARTRIDGE ENTRY
      JMP IGNOR      THEN IGNORE
* 
      LDA FTYPE     GET FILE TYPE 
      SZA,RSS       IF NON-DISC FILE, 
      JMP IGNOR      THEN IGNORE IT 
* 
      LDA FEXTN     GET FILE EXTENT NUMBER
      AND NB400      ISOLATE IT 
      SZA           IF ENTRY IS FOR EXTENT
      JMP IGNOR      THEN IGNORE IT 
* 
      JSB CK.NM     CHECK IF FILE IS BOOTEX 
      DEF *+3 
      DEF FNAME 
      DEF "BOOT 
* 
      SEZ,RSS       IF FILE WAS "BOOTEX", 
      JMP IGNOR      THEN IGNORE IT 
* 
      LDA FRST?     GET FIRST-FLAG
      SZA           IF ALREADY SET, 
      JMP CO..4      THEN CONTINUE
* 
      JSB CK.NM     CHECK IF FILE IS FIRST
      DEF *+3 
      DEF FNAME 
      DEF FIRST 
* 
      SEZ           IF FILE WAS NOT FIRST,
      JMP IGNOR      THEN IGNORE IT 
* 
      ISZ FRST?     SET FIRST-FLAG
* 
CO..4 JSB FM.ER     PRINT OUT FILE NAME 
      DEF *+4 
      DEF .1
      DEF FNAME 
      DEF .3
* 
      ISZ FOUND     SET FOUND FLAG
* 
      JSB IFBRK     TEST FOR BREAK
      DEF *+1 
      SSA,RSS       IF NO BREAK,
      JMP CO..5      THEN CONTINUE
* 
      LDA .22       INDICATE COPY TERMINATED
      JMP ABEND 
* 
CO..5 LDA ELISW     GET ELIMINATE-SWITCH
      LDB FSIZE     GET FILE SIZE 
      BRS            CONVERT TO BLOCKS
      SZA           IF ELIMINATE EXTENTS, 
      CCB            THEN USE -1 FOR FILE SIZE
      ASR 16        EXTEND SIGN 
      SWP            ALIGN FOR DOUBLE STORE 
      DST SZ          SAVE FILE SIZE FOR ECREA
* 
      CLA           CLEAR HIGH WORD 
      LDB FRECL     GET FILE RECORD LENGTH
      DST SZ+2      SAVE FOR ECREA
      SKP 
* 
*     CREATE DESTINATION FILE 
* 
CRIT  JSB ECREA     TRY CREATING DESTINATION FILE 
      DEF *+8 
      DEF O.BUF 
      DEF IERR
      DEF FNAME 
      DEF SZ
      DEF FTYPE 
      DEF FSEC
      DEF DLU 
* 
      CPA N2        IF DUPLICATE FILE ERROR,
      JMP DMPIT      THEN TEST FOR DUMP-MODE
* 
      CPA N33       IF NOT ENOUGH ROOM, 
      JMP ABEND      THEN ABEND 
* 
      CPA N14       IF DIRECTORY FULL,
      JMP ABEND      THEN ABEND 
* 
CRIT1 JSB IF.ER     IF ANY OTHER ERROR, 
      DEF *+3        THEN PRINT MESSAGE 
      DEF IERR
      DEF IGNOR       AND IGNORE
      JMP CPYIT     OTHERWISE GO COPY FILE
* 
*     PURGE DESTINATION FILE (IF DUMP MODE) 
* 
DMPIT LDB DMPSW     GET DUMP SWITCH 
      SZB,RSS       IF NOT DUMP-MODE, 
      JMP CRIT1      THEN PRINT MESSAGE 
* 
      JSB PURGE     TRY TO PURGE OLD DESTINATION FILE 
      DEF *+6 
      DEF O.BUF 
      DEF IERR
      DEF FNAME 
      DEF FSEC
      DEF DLU 
* 
      JSB IF.ER     IF ERROR, 
      DEF *+3        THEN PRINT MESSAGE 
      DEF IERR
      DEF IGNOR       AND IGNORE
      JMP CRIT       ELSE GO CREATE IT
      SKP 
* 
*     COPY A FILE 
* 
CPYIT JSB COPYF     USE COPYF ROUTINE 
      DEF *+11
      DEF I.BUF 
      DEF IERR
      DEF FNAME 
      DEF FSEC
      DEF SLU 
      DEF O.BUF 
      DEF FNAME 
      DEF FSEC
      DEF DLU 
      DEF IOPT
* 
      SZA,RSS       IF NO ERROR,
      JMP PRGIT      THEN CONTINUE
* 
*     PURGE DESTINATION FILE (IF NOT FULLY COPIED)
* 
      JSB PURGE     TRY TO PURGE DESTINATION FILE 
      DEF *+6 
      DEF O.BUF 
      DEF SZ        USE FOR DUMMY ERROR CODE
      DEF FNAME 
      DEF FSEC
      DEF DLU 
* 
      LDA IERR      GET ERROR CODE AGAIN
      CPA N33       IF NOT ENOUGH ROOM, 
      JMP ABEND      THEN TERMINATE ABNORMALLY
* 
      CPA N14       IF DIRECTORY FULL,
      JMP ABEND      THEN TERMINATE ABNORMALLY
* 
      CPA N49       IF VERIFY FAILED, 
      JMP ABEND      THEN TERMINATE ABNORMALLY
* 
      JSB IF.ER     IF ANY OTHER ERROR, 
      DEF *+3        THEN PRINT MESSAGE 
      DEF IERR
      DEF IGNOR     AND IGNORE IT 
      SKP 
* 
*     PURGE SOURCE FILE (IF REQUESTED)
* 
PRGIT LDA PURSW     GET PURGE SWITCH
      SZA,RSS       IF NOT REQUESTED, 
      JMP IGNOR      THEN IGNORE PURGE REQUEST
* 
      LDB N.OPL     GET PASSED SECURITY CODE
      LDA MSECU     GET MSC STATUS FLAG 
      SZA,RSS       IF BAD MSC, 
      STB FSEC       THEN JUST USE PASSED SECURITY CODE 
* 
      JSB PURGE     TRY TO PURGE SOURCE FILE
      DEF *+6 
      DEF I.BUF 
      DEF IERR
      DEF FNAME 
      DEF FSEC
      DEF SLU 
* 
      JSB IF.ER     IF ERROR, 
      DEF *+3        THEN PRINT MESSAGE 
      DEF IERR
      DEF IGNOR       AND IGNORE PURGE REQUEST
* 
*     CHECK FOR LAST FILE 
* 
IGNOR JSB CK.NM     CHECK IF FILE IS LAST 
      DEF *+3 
      DEF FNAME 
      DEF LAST
* 
      SEZ           IF FILE WAS NOT LAST, 
      JMP NEXTF      THEN DO ANOTHER FILE 
      SKP 
* 
*     FINISHED WITH FILES WITHOUT ANY ERRORS, 
*     SET 1P TO 0 AND RETURN
* 
FIN   CLB           SET 1P PARAMETER TO ZERO
      STB G0..+41 
* 
      LDA FOUND     GET FILE FOUND FLAG 
      SZA           IF FILE FOUND,
      JMP EXIT       THEN TAKE NORMAL EXIT
* 
      LDA MSKFL     GET MASK FLAG 
      SZA           IF WILDCARD SPECIFICATION,
      JMP ER50       THEN TAKE WILDCARD ERROR EXIT
      JMP ER6        ELSE TAKE FILE NOT FOUND EXIT
      SKP 
* 
*     ABNORMAL TERMINATION OF COPY (BY BR, INTERNAL ERROR, VERIFY 
*     OR DESTINATION FULL), ERROR CODE IS IN A-REG, 
*     SET 10G TO CURRENT FILE AND EXIT
* 
ABEND LDB FNAME     SET 10G PARAMETER TO CURRENT NAME 
      STB G0..+41 
* 
      LDB FNAME+1 
      STB G0..+42 
* 
      LDB FNAME+2 
      STB G0..+43 
      JMP EREX
      SKP 
* 
*     EXIT
* 
EXIT  CLA           NO ERROR
      JMP EREX
* 
ER6   LDA N6        FILE NOT FOUND
      JMP EREX
* 
ER21  LDA .21       ILLEGAL LU
      JMP EREX
* 
ER32  LDA N32       CARTRIDGE NOT FOUND 
      JMP EREX
* 
ER50  LDA N50       NO FILE MATCHED WILDCARD SPEC 
      JMP EREX
* 
ER51  LDA .51       BAD MASTER SECURITY CODE
      JMP EREX
* 
ER56  LDA .56       BAD PARAMETER 
* 
EREX  STA ER,I      SAVE ERROR
      JMP CO..,I     AND RETURN 
      SKP 
* 
*     STORAGE AREA
* 
.1    DEC 1 
.3    DEC 3 
.7    DEC 7 
.11   DEC 11
.15   DEC 15
.19   DEC 19
.21   DEC 21
.22   DEC 22
.32   DEC 32
.51   DEC 51
.56   DEC 56
.60   DEC 60
* 
N2    DEC -2
N6    DEC -6
N12   DEC -12 
N14   DEC -14 
N32   DEC -32 
N33   DEC -33 
N49   DEC -49 
N50   DEC -50 
* 
NB400 OCT -400
* 
.C    ASC 1,C 
.D    ASC 1,D 
.E    ASC 1,E 
.P    ASC 1,P 
.V    ASC 1,V 
.SP   ASC 1,
* 
DOPT  OCT 100003
* 
"BOOT ASC 3,BOOTEX
DFALT ASC 3,------
* 
DDFLT DEF DFALT 
* 
FNAME NOP           - 
      NOP           ! LOCAL COPY
      NOP           !  OF CURRENT 
FTYPE NOP           !   FILE
      NOP           !    ENTRY
FEXTN NOP           ! 
FSIZE NOP           ! 
FRECL NOP           ! 
FSEC  NOP           ! 
      NOP           ! 
      NOP           ! 
      NOP           ! 
      NOP           ! 
      NOP           ! 
      NOP           ! 
      NOP           - 
* 
CLRSW NOP           CLEAR-OPTION SWITCH 
DMPSW NOP           DUMP-OPTION SWITCH
ELISW NOP           ELIMINATE-OPTION SWITCH 
PURSW NOP           PURGE-OPTION SWITCH 
VERSW NOP           VERIFY-OPTION SWITCH
FRST? NOP           FIRST-FILE FLAG 
FOUND NOP           FILE-FOUND FLAG 
MSKFL NOP           WILDCARD-MASK FLAG
MSECU NOP           MSC-STATUS FLAG 
* 
SLU   NOP           - SOURCE LU 
ENTRY NOP           - SOURCE FILE ENTRY NUMBER
* 
DLU   NOP           DESTINATION LU
* 
COUNT NOP           COUNTER 
IERR  NOP           ERROR RETURN CODE 
IOPT  NOP           COPYF OPTION WORD 
MASK  NOP           MASK ADDRESS
SZ    BSS 4         SIZE ARRAY FOR ECREA (AND DUMMY ERROR)
* 
FIRST BSS 3         FIRST FILE TO BE TRANSFERRED
LAST  BSS 3         LAST FILE TO BE TRANSFERRED 
* 
A     EQU 0 
B     EQU 1 
* 
END   EQU * 
* 
      END 
                                                            