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