TPC.MAC;2/-AU/-BF=TPC.MAC;1 -3,7 .IDENT /V01.1/ .MCALL GCMLB$,GCML$,CSI$,CSI$1,CSI$2,CSI$SW,CSI$ND,DIR$,PUT$ .MCALL FDBDF$,FDAT$R,NMBLK$,WTSE$S,GET$,EXIT$S .MCALL QIOW$,OFNB$,CSI$SV,FSRSZ$ .MCALL QIOW$S,ASTX$S,FDOP$R,QIO$S,CLEF$S,SETF$S -16,16 ; G H COHEN, 21-AUG-78 ; INSERT A DEFAULT VALUE FOR FILE ALLOCATION SIZE ; USE .TRNCL IN PLACE OF .CLOSE ; PROVIDE A MEANS FOR FILE EXTENSION ; ATTACH TO MAGTAPE UNIT AND SET DENSITY TO 800BPI -70,71 INDFN: NMBLK$ ,DOS ; DEFAULT FILENAME: '.DOS' OUTDFN: NMBLK$ ,DOS ; " " '.DOS' -88,97 BLKMSK= 2 ; /BL - ALLOCATE BLOCKS SALMSK= 4 ; /SA - SECONDARY ALLOCATION (BLOCKS) CONMSK= 10 ; /CO - CONTIGUOUS FILE CSISW: CSI$SW HE,HLPMSK,CSIFLG CSI$SW BL,BLKMSK,CSIFLG,,,ALCTAB CSI$SW SA,SALMSK,CSIFLG,,,SALTAB CSI$SW CO,CONMSK,CSIFLG CSI$ND ALCTAB: CSI$SV DECIMAL,ALLOC,2 SALTAB: CSI$SV DECIMAL,SALOC,2 CSI$ND ALLOC: .WORD -100. ; ALLOCATION VALUE [+/-] SALOC: .WORD -50. ; SECONDARY ALLOCATION VALUE [+/-] -116,116 .ASCIZ ' FILES AND RECORD THEM IN A SPECIAL IMAGE MODE' -122,126 .ASCIZ ' TPC>OUTFILE=INFILE[/BL:NNNN][/SA:MMMM][/CO][/HE]' .ASCIZ ' WHERE:' .ASCIZ ' -ONE "FILE" MUST BE A MAGTAPE DEVICE' .ASCIZ ' /BL:NNNN = AN OPTIONAL ALLOCATION SPECIFICATION' .ASCIZ ' IF DISK IS THE OUTPUT DEVICE' .ASCIZ ' /SA:MMMM = AN OPTIONAL SECONDARY ALLOCATION AMOUNT' .ASCIZ ' IF DISK IS THE OUTPUT DEVICE' .ASCIZ ' /CO = DISK FILE TO BE CONTIGUOUS' -230,230 MOV #-100.,ALLOC ; RESET THE ALLOCATION AMOUNT MOV #-50.,SALOC ; RESET THE SECONDARY ALLOCATION -255,258 BEQ 161$ ; NO - CONTINUE JMP HELP ; GIVE HIM HELP 161$: BIT #CONMSK,CSIFLG ; IS FILE TO BE CONTIGUOUS BNE 162$ ; IF NE, YES TST ALLOC ; IS ALLOC NEGATIVE BMI 163$ ; IF YES SKIP NEG ALLOC ; NEGATE IT BR 163$ 162$: TST ALLOC ; IS ALLOC POSITIVE BPL 163$ ; IF YES SKIP NEG ALLOC ; NEGATE IT 163$: TST SALOC ; BUT NEVER LET SALOC REMAIN NEGATIVE BPL 164$ ; IF POSITIVE, SKIP NEG SALOC ; NEGATE IT 164$: FDAT$R #FDBOUT,#R.VAR,#FD.CR,,ALLOC,SALOC ; INIT THE FDB -276,280 170$: MOV #1002,F.RSIZ(R0) ; INIT THE RECORD SIZE IN FDB CLR F.FFBY(R0) ; INDICATE NEXT BLOCK EMPTY CSI$2 #CSI,INPUT,#CSISW ; PARSE INPUT FILE & SWITCHES BCC 171$ ; NO ERROR IF CARRY CLEAR JMP 150$ ; REPORT SWITCH ERROR 171$: BITB #,C.STAT(R0) ; NO WILDCARDS, ETC ALLOWED -334,346 ; ; CLOSE - CLOSE FILES AT END OF RUN ; CLOSE: MOV #FDBINP,R0 ; POINT TO INPUT FDB CALL .TRNCL ; TRUNCATE AND CLOSE IT MOV #FDBOUT,R0 ; POINT TO OUTPUT FDB CALL .TRNCL ; TRUNCATE AND CLOSE IT RETURN ; ; HELP - LIST OUT THE HELP TEXT ON TI: ; -386,386 MOV MTERR,-(SP) ; & ERROR CODE -420,420 QIOW$S #IO.ATT,#INLUN,#1 ; ATTACH TO TAPE UNIT QIOW$S #IO.RWD,#INLUN,#1 ; REWIND THE MAGTAPE QIOW$S #IO.STC,#INLUN,#1,,,,<0> ; SET TO 800BPI -600 MOV R2,-(SP) ; SAVE R2 MOV #FDBOUT,R4 ; GET FDB ADDRESS 76$: MOV N.LEN(R0),R2 ; COPY BUFFER LENGTH ASH #-9.,R2 ; CHANGE IT TO BLOCKS INC R2 ; AND ROUND UP CLR R3 ; CLEAR HIGH ORDER ADD F.EFBK+2(R4),R2 ; ADD LOW ORDER CURRENT BLOCK ADC R3 ; ADD CARRY INTO HIGH ORDER ADD F.EFBK(R4),R3 ; ADD HIGH ORDER CURRENT BLOCK CMP R3,F.HIBK(R4) ; COMPARE ULTIMATE HIGH ORDER TO ; AMOUT ALLOCATED ALREADY BHI 71$ ; IF HIGH, MUST EXTEND CMP R2,F.HIBK+2(R4) ; COMPARE ULTIMATE LOW ORDER BLO 75$ ; IF LOW, THERE IS ROOM 71$: MOV R0,-(SP) ; PUSH NODE ADDRESS ON STACK MOV R4,R0 ; COPY FDB ADDRESS MOV SALOC,R1 ; GET SECONDARY ALLOCATION VALUE MOV #203,R2 ; SET CONTROL BITS FOR ENABLE, CONTIGUOUS ; (BUT FILE IS NOW NON-CONTIGUOUS) BIT #CONMSK,CSIFLG ; IS /CO SET? BNE 73$ ; YES, HENCE WANTED CONTIGUOUS BIC #7,R2 ; CHANGE CONTROL INDICATORS TO NON-CONTIGUOUS 73$: CALL .EXTND ; DO THE EXTEND BCC 74$ ; IF NO ERROR FROM EXTEND, GO ON MOV #ERR,FLAGS ; FLAG AN ERROR TST (SP)+ ; POP STACK BR 100$ ; GET OUT 74$: MOV (SP)+,R0 ; RESTORE NODE ADDRESS IN R0 BR 76$ ; GO BACK TO CHECK THAT INCREMENT WAS ENOUGH 75$: MOV (SP)+,R2 ; RESTORE R2 -609,609 ADD DSKFCT,F.BKVB+2(R3) ; UPDATE BLOCK NUMBER TO NEXT WRITE -619,620 BEQ 81$ ; NO JMP TPDKDQ ; TRY TO DEQUEUE MORE WORK 81$: BIT #EOV,FLAGS ; DONE? -629,629 BEQ 100$ ; GO RESUME MAIN TASK & EXIT -664,664 QIOW$S #IO.ATT,#OUTLUN,#1 ; ATTACH TO TAPE UNIT QIOW$S #IO.RWD,#OUTLUN,#1 ; REWIND TAPE QIOW$S #IO.STC,#OUTLUN,#1,,,,<0> ; SET TO 800BPI /