. . COPY COMMAND ACTIVITY . . . (C) Copyright 1972-1978 John Walker . . This software is in the public domain . AXR$ DEFUNCT$ FANG PURE CODE . COPY* LX X5,CDBPC,X8 LOAD LINK TO FIRST PARAMETER LA A1,PBVAL,X5 LOAD FDT POINTER FOR INPUT FILE LMJ A2,IOGET BUILD AN I/O FCT LX,U X10,,A0 SAVE INPUT FCT ADDRESS IN X10 LX X5,PBLINK,X5 LINK TO SECOND PARAMETER (OUTPUT FILE) LA A1,PBVAL,X5 GET OUTPUT FDT POINTER LMJ A2,IOGET BUILD AN FCT FOR IT LX,U X9,,A0 SAVE OUTPUT FCT ADDRESS IN X9 LA,U A3,0377777 GET TENATIVE BLOCK COUNT LX X5,PBLINK,X5 LINK TO FINAL PARAMETER (COUNT) TZ X5 NULL PARAMETER ? LA A3,PBVAL,X5 NO. LOAD THE PARAMETER SA A3,IOCOUNT,X10 STORE THE COUNT INTO THE INPUT FCT OPTOOG LA A14,CDOPTS,X8 LOAD COMMAND OPTIONS TOP A14,(OPTION('G')) IS 'G' OPTION SET ? J NOGOP NO. SKIP 'G' SETUP LA A0,IOMASS,X10 LOAD MASS STORAGE ATTRIBUTE OF INPUT TNE A0,IOMASS,X9 ARE INPUT AND OUTPUT DIFFERENT ? J NOOD NO. IGNORE 'G' OPTION LA,U A0,'G' LOAD 'G' OUTPUT MODE SA A0,IOOPT,X9 PUT IN OUTPUT FCT TNZ IOMASS,X10 IS INPUT FROM TAPE ? SA A0,IOOPT,X10 YES. SET 'G' FORMAT INPUT TAPE LA,U A0,1792 GET INPUT BLOCK SIZE TNZ IOMASS,X10 UNLESS INPUT IS TAPE LA,U A0,1794 IN WHICH CASE THEY'RE BIGGER SA A0,IOBLEN,X10 SET READ BLOCK LENGTH LA,U A0,0377777 LOAD MANY BLOCKS EXPECTED IN SA A0,IOCOUNT,X10 SET INPUT FCT TZ IOMASS,X9 IS OUTPUT FILE TAPE ? J OPTELS NO. DON'T NEED PREFIX BLOCK . . Build the label block for @COPY,G format output tapes. . BGET IBDATA+28 ALLOCATE AN OUTPUT BUFFER la a2,iofdt,x10 load input FDT dl a3,fdqual,a2 load qualifier of input file ds a3,cghqual,a0 store in file label dl a3,fdfn,a2 load file name ds a3,cghfn,a0 copy to file label sa a0,a3 save label block from DATE$ date$ . get time and date in useless format ds a0,cghtd,a3 ...useless except for compatibility ?? la a0,fdeqt,a2 load equipment type of file sa a0,cgheqt,a3 place in file label la a0,fdhitrk,a2 load highest track referenced sa a0,cghitrk,a3 place in label la a0,('BLKSEQ') load new format sentinel sa a0,cghblks,a3 set in label block snonz a0 get spaces in A0 la a4,fdin+6,a2 load absolute F-cycle for file and,u a4,07777 isolate from bottom third la,u a4 clear lower register opghde di,u a4,10 extract next digit ssl a0,6 move over accumulator aa,u a5,'0' convert to Fieldata ssc a5,6 move to upper sixth aa a0,a5 add into final number dsl a4,36 move down for next divide jnz a5,opghde continue if more to edit opgckr and,u a0,077 extract low character te,u a1,' ' right justified yet ? j opgrjd yes. all done ssc a0,6 no. shift over one character j opgckr keep on testing . opgrjd sa a0,cghafcyc,a3 set absolute cycle in label block la a0,a3 restore address of label block la,u a1,('>FANG<') load fang was here sentinel lr,u r1,(ibdata+28)-cghfang get number of words to fill la,u a3,cghfang,a3 get first word address lxi,u a3,1 load increment to fill file bt a3,,*a1 fill label with fangs LA A1,('COPYG ') LOAD FORMAT SENTINEL TZ IOWAD,X10 CHECK INPUT FILE FORMAT LA A1,('COPYGD') SENTINEL FOR WAD COPY,G sa a1,cghsentl,a0 set file type sentinel in block LNA,U A1 GET SENTINEL FOR FIRST BLOCK SA A1,IBMSAD,A0 SET 'DON'T TREAD ON ME' FLAG SZ IBSTAT,A0 SET READ STATUS NORMAL SX X10,IBIOP,A0 SET I/O PACKET BACKPOINTER SZ IBLAST,A0 HOPE THIS ISN'T LAST ! LA,U A1,IBQ,A0 LOAD ADDRESS OF DATA HEADER PUT IOBB,X10 PUT ON READER BOUNDED BUFFER J OPTELS GO AND PROCESS THE COPY . NOGOP TOP,U A14,OPTION('M') IS THE 'M' OPTION ON ? J NOMOP NO. CHECK OTHER OPTIONS LA A3,IOCOUNT,X10 LOAD CURRENT I/O COUNT TNZ X5 WAS COUNT IMPLIED BY MISSING PARAMETER ? LA,U A3,1 YES. IMPLIED COUNT FOR 'M' COPY IS 1 SA A3,IOCOUNT,X10 REPLACE COUNT IN INPUT FCT LA,U A0,'M' LOAD BY FILES OPTION CODE SA A0,IOOPT,X10 SET INPUT TO COUNT FILES SA A0,IOOPT,X9 SET OUTPUT TO COPY EOF MARKS J OPTELS PROCESS THE COPY NOMOP . TEP,U A14,OPTION('Q') TAPE SIMULATION MODE ? J OPTELS YES. TREAT FILE AS A TAPE . . NO OPTIONS SET: . . TAPE => TAPE STOP AT EOF, DON'T COPY EOF MARK . TAPE => FILE DO A COPY,G . FILE => TAPE DO A COPY,G . FILE => FILE DUPLICATE FILE. 'D' OPTION OUTPUT . NOOD LA,U A14 CLEAR ALL OPTIONS SZ CDOPTS,X8 ALSO IN COMMAND WORD LA A0,IOMASS,X10 LOAD MASS STORAGE FLAG TNE A0,IOMASS,X9 DIFFERENT FROM THAT OF INPUT ? J NOSAME NO. THEY'RE THE SAME MEDIA LA A0,CDOPTS,X8 LOAD OPTION BITS OR A0,(OPTION('G')) TURN ON THE 'G' OPTION SA A1,CDOPTS,X8 RESTORE OPTIONS IN PACKET J OPTOOG LOOK AGAIN NOSAME TNZ IOMASS,X9 TAPE COPY ? J OPTELS YES. NO OPTIONS REQUIRED LA,U A0,1792 LOAD TRACK LENGTH BLOCKS FOR COPY SA A0,IOBLEN,X10 MAKE IT GO FASTER ! SZ IODRAD,X10 START COPY AT ADDRESS ZERO LA,U A0,0377777 LOAD MANY TRACK COUNT SA A0,IOCOUNT,X10 PUT COUNT IN FCT LA A0,CDOPTS,X8 LOAD COMMAND OPTIONS OR,U A0,OPTION('R') SET THE 'R' OPTION SA A1,CDOPTS,X8 SO ADDRESS ISN'T CHANGED LA,U A0,'D' LOAD DUPLICATE ADDRESS MODE SA A0,IOOPT,X9 SET OPTION ON OUTPUT J OPTELS PERFORM COPY . OPTELS LMJ A2,INPUT START READER TNZ IOMASS,X10 IS INPUT MASS STORAGE ? TOP A14,(OPTION('G')) IS 'G' OPTION SET ? J GOSEW NO. SKIP FIRST TAPE BLOCK IGNORE GET IOBB,X10 LOAD FIRST TAPE BLOCK TZ IBSTAT,A1 NORMAL COMPLETION ? J GOBUM NO. 'G' OPTION BUMMER LA A0,IBLEN,A1 LOAD LENGTH READ TE,U A0,28 SHOULD BE 28 WORDS LONG J GOBUM IF NOT. IT'S NOT COPY,G LA A0,IBDATA,A1 LOAD SENTINEL READ TNE A0,('COPYGD') DOES SENTINEL INDICATE W.A.D. ? SNONZ IOWAD,X10 YES. SET INPUT FILE W.A.D. FORMAT TE A0,('COPYG ') COPY,G ? TNE A0,('COPYGD') OR COPY,G OF WAD FILE ? J GOREL YES. THIS IS A VALID SENTINEL J GOBUM NO. ERROR OUT THIS OPERATION GOREL BRELP A1 RELEASE THE BLOCK BUFFER GOSEW . LMJ A2,OUTPUT START WRITER GOXEL P IOBB+QL,X9 WAIT FOR WRITER TO COMPLETE BRELP X9 RELEASE OUTPUT FCT BRELP X10 RELEASE INPUT FCT COMPLETE . DONE WITH THIS COMMAND . . 'G' OPTION SENTINEL CHECK FAILED . GOBUM BRELP A1 RELEASE THE BAD BLOCK BUFFER R$DIT . ENTER EDITING MODE E$MSG INVLBL EDIT INVALID LABEL SENTINEL MESSAGE LA A0,IOFDT,X10 LOAD FDT POINTER LMJ X11,FIST EDIT FILE AND STATEMENT NUMBER ZAP . MARK FAILURE OF COMMAND SZ IOCOUNT,X10 BRING READER TO A HALT LMJ A2,SINK DISPOSE OF INPUT BLOCKS J GOXEL WAIT FOR SINK TO STOP . PURE DATA INVLBL 'INVALID LABEL FOR TAPE TO FILE COPY READ FROM !' END