.TITLE READ UNLABLED MAGNETIC TAPE .IDENT /01/ ; ; P. A. NIDD ; 30-AUG-78 ; ; THIS PROGRAM IS ACTIVATED BY A RUN COMMAND ISSUED BY A TERMINAL. ; THE PROGRAM THEN PROMPTS THE INITIATING TERMINAL FOR THE FOLLOWING ; INFORMATION: ; OUTPUT FILE VARIABLE LENGTH (IE TRAILING BLANKS TRUNCATED), ; MAXIMUM 1 CHARACTER, DEFAULT YES ; LOGICAL RECORD SIZE, DEFAULT 80., MAXIMUM 3 CHARACTERS ; WHETHER OR NOT FIRST BYTE OF EACH RECORD CONTAINS A CARRIAGE ; CONTROL CHARACTER, DEFAULT NO, MAXIMUM 1 CHARACTER ; OUTPUT DEVICE, DEFAULT DK1:, MAXIMUM 4 CHARACTERS ; OUTPUT UIC, DEFAULT [200,200], MAXIMUM 9. CHARACTERS ; OUTPUT FILE, DEFAULT GARBAGE.DAT, MAXIMUM 13. CHARACTERS ; ; BLOCKS OF DATA ARE THEN READ IN FROM THE UNLABELLED MAG TAPE AND ; LOGICAL RECORDS ARE PUT$ TO THE OUTPUT DEVICE. THERE MUST BE AN ; EXACT NUMBER OF LOGICAL RECORDS IN EVERY BLOCK READ IN FROM THE ; MAG TAPE. ; ; THE COMMAND FILE TO BUILD THIS TASK IS: ; ; ; ; RDUNLMT,RDUNLMT=RDUNLMT ; / ; UNITS=3 ; ASG=T1:1,DK1:2,MM:3 ; ACTFIL=1 ; STACK=60 ; RESLIB=DK0:[1,1]FCSRES/RO ; TASK=...RUT ; // ; ; ; .MCALL FCSMC$,QIOW$C,EXIT$S FCSMC$ FSRSZ$ 1 FDBOUT: FDBDF$ FDAT$A R.VAR,FD.CR,80. FDOP$A 2,DATAST,,FO.WRT DATAST: .WORD 4,DEV,9.,UIC,11.,FILOUT DEV: .ASCII /DK1:/ UIC: .ASCII /[200,200]/ FILOUT: .ASCII /GARBAGE.DAT / .EVEN START: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 2$ MOV IOST,R4 HALT 2$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 4$ MOV IOST,R4 HALT 4$: TST IOST+2 BEQ CONT0 CMPB #'Y,BUFF BEQ CONT0 CMPB #'N,BUFF BNE START MOVB #R.FIX,FDBOUT+F.RTYP ; ; ; CONT0: MOV FDBOUT+F.RSIZ,LORL QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 6$ MOV IOST,R4 HALT 6$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 8$ MOV IOST,R4 HALT 8$: TST IOST+2 ;IF 0 CHARACTERS INPUT THEN USE DEFAULT BEQ CONT1 CLR R3 ;ELSE CONVERT VALUE READ IN TO BINARY MOV #BUFF,R0 ; AND REPLACE DEFAULT VALUE IN LOCATION MOV IOST+2,R1 ; FDBOUT+F.RSIZ LOOP1: MOVB (R0)+,R2 ; SUB #'0,R2 ; CMPB #10.,R2 ; BLOS CONT0 ;NON NUMERIC CHAR IN INPUT, ASK AGAIN MUL #10.,R3 ; ADD R2,R3 ; SOB R1,LOOP1 ; ; MOV R3,LORL CMPB #R.FIX,FDBOUT+F.RTYP BNE CONT1 MOV R3,FDBOUT+F.RSIZ ; ; ; CONT1: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 10$ MOV IOST,R4 HALT 10$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST ; BEQ 12$ ; MOV IOST,R4 HALT 12$: TST IOST+2 ; BEQ CONT2 ; CMPB #'N,BUFF ; BEQ CONT2 CMPB #'Y,BUFF ; BNE CONT1 ; MOVB #FD.FTN,FDBOUT+F.RATT ; ; ; ; CONT2: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 14$ MOV IOST,R4 HALT 14$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 16$ MOV IOST,R4 HALT 16$: TST IOST+2 BEQ CONT3 ; MOV IOST+2,DATAST ; ; ; ; CONT3: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 18$ MOV IOST,R4 HALT 18$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 20$ MOV IOST,R4 HALT 20$: TST IOST+2 ; BEQ CONT4 ; MOV IOST+2,DATAST+4 ; ; ; ; CONT4: QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST BEQ 22$ MOV IOST,R4 HALT 22$: QIOW$C IO.RLB,1,1,,IOST,, CMPB #IS.SUC,IOST ; BEQ 24$ MOV IOST,R4 HALT 24$: TST IOST+2 ; BEQ CONT5 ; MOV IOST+2,DATAST+8. ; ; ; CONT5: OPEN$W #FDBOUT,,,,,,ERR6 ; ; MORE: MOV #BUFF,R4 ; QIOW$C IO.RLB,3,1,,IOST,, CMPB #IS.SUC,IOST ; BNE CLOSE ; MOV IOST+2,R2 ; ADD #BUFF,R2 ; ; LOOP2: MOV R4,R3 ; ADD LORL,R3 ; CMP R3,R2 ; BLOS PUT ; CMP R4,R2 ; BEQ MORE ; QIOW$C IO.WLB,1,1,,IOST,, CMPB #IS.SUC,IOST ; BEQ 26$ MOV IOST,R4 HALT 26$: MOV IOST+2,R4 HALT ; PUT: MOV LORL,R5 CMPB FDBOUT+F.RTYP,#R.VAR BNE OUT ; ; ; LOOP3: CMPB #' ,-(R3) BNE CONT6 SOB R5,LOOP3 ; MOV #1,R5 ; CONT6: MOV R4,R3 ADD LORL,R3 ; ; ; OUT: PUT$ #FDBOUT,R4,R5,ERR8 ; MOV R3,R4 JMP LOOP2 ; ; ; ; CLOSE: CLOSE$ #FDBOUT,ERR9 ; EXIT$S ; ; ; ; ERR6: MOV FDBOUT+F.ERR,R4 HALT ERR8: MOV FDBOUT+F.ERR,R4 HALT ERR9: MOV FDBOUT+F.ERR,R4 HALT ; ; ; ; .NLIST BEX PBUF0: .ASCII <15>/TRUNCATE TRAILING BLANKS TO GIVE VARIABLE LENGTH OUTPUT? / .ASCII /(Y OR N, DEFAULT Y): / PBUF0S=.-PBUF0 PBUF1: .ASCII <15>/LOGICAL RECORD SIZE (DEFAULT 80): / PBUF1S=.-PBUF1 PBUF2: .ASCII <15>/FIRST BYTE OF EACH RECORD CARRIAGE CONTROL? / .ASCII /(Y OR N, DEFAULT N): / PBUF2S=.-PBUF2 PBUF3: .ASCII <15>/OUTPUT DEVICE? (DEFAULT DK1:): / PBUF3S=.-PBUF3 PBUF4: .ASCII <15>/OUTPUT UIC? (DEFAULT [200,200]): / PBUF4S=.-PBUF4 PBUF5: .ASCII <15>/OUTPUT FILE? (DEFAULT GARBAGE.DAT): / PBUF5S=.-PBUF5 BUF6: .ASCII /RECSIZE DOES NOT EVENLY DIVIDE BLOCKSIZE/ BUF6S=.-BUF6 ; ; ; .EVEN IOST: .BLKW 2 LORL: .BLKW 1 BUFF: .BLKB 10000. .END START