.TITLE SOLO .ENABL LC ; ; THIS PROGRAM IS TO REMOVE CREATE A NEW FILE WITN NO DUPLICATES ; FOR A GIVEN INPUT FILE ; .SBTTL MCALLS ; .MCALL ALUN$C,QIOW$C,QIO$C,EXIT$S .MCALL FSRSZ$,FDBDF$,FDBK$A,FDOP$R,FDAT$A .MCALL OPEN$R,OPEN$W .MCALL GET$,PUT$,CLOSE$ ; .NLIST BEX ; .SBTTL FILES ; ; R1 - LOCATION OF CURRENT BUFFER ; R2 - NUMBER OF CHARACTERS IN THIS BUFFER ; R3 - OFFSET FOR NEW BUFFER IN COMPARISON USED WITH R4 & R5 ; R4 - OFFSET FOR COMPARING OLD BUFFER - USED WITH R5 ; R5 - NUMBER OF WORDS TO COMPARE - USED WITH R4 & R5 ; FSRSZ$ 2 INFILE: FDBDF$ ;MY INPUT INFILE FDBK$A ,,,,FILEIO ; OUTFLE: FDBDF$ ;THE OUTPUT FILE FDAT$A R.VAR,FD.CR ; ; .SBTTL SOURCE ; START: NOP TI==1 ALUN$C TI,TI,0 QIO$C IO.ATT,TI ; ; LETS GET THIS SHOW ON THE ROAD!!! ; MOV #1,HITEOF QIOW$C IO.RPR,TI,1,,TISTAT,, MOV TISTAT+2,LEN1 FDOP$R #INFILE,#2,#FLEIN,,#FO.RD OPEN$R #INFILE,,,,,#80.,OPERR TST HITEOF ;If the file could not be opened BLE DUNPRG ;HITEOF would be zero or negative ; ;HITEOF is GLOBAL and found in the ;OPERR subroutine MOV #1,HITEOF QIOW$C IO.RPR,TI,1,,TISTAT,, MOV TISTAT+2,LEN2 FDOP$R #OUTFLE,#3,#FLEOUT,,#FO.WRT OPEN$W #OUTFLE,,,,,#80.,OPERR TST HITEOF ;If the file could not be opened BLE DUNPRG ;HITEOF would be zero or negative ; MOV #BUFF1,R1 ;INITIALIZE BUFFER ; NEXREC: MOV R1,CURBUF ;STORE THE CURRENT BUFFER LOCATION ADD #2,R1 ;MOV LOCATION TO CORRECT OFFSET ANOREC: INC TOTLNE GET$ #INFILE,R1,,OPERR TST HITEOF BLE DUNPRG MOV F.BKST(R0),R2 MOV R2,R3 MOV R2,CURLEN ADD R1,R3 MOV R3,CUREND MOVB #' ,(R3) ; MOV #34.,R5 ;Number of words to compare MOV R1,R3 MOV @CURBUF,R4 ADD #2,R4 10$: CMP (R3)+,(R4)+ BNE DIFSNG SOB R5,10$ ; ; No differences found, same artist and title, maybe ; we can combine: Must check how long that would make ; the output record. ; MOV CURLEN,R0 SUB #68.,R0 ADD #4,R0 MOV OLDLEN,R1 ADD R0,R1 CMP #132.,R1 BLT DIFSNG BR ANOREC ; DIFSNG: MOV OLDLEN,R2 ;Size of the current record PUT$ #OUTFLE,R1,R2,OPERR ;OUTPUT THE RECORD MOV @CURBUF,R1 MOV R2,OLDLEN ; BR NEXREC ;SAME LINE, GET NEW RECORD ; ; ; Close the files and detach the terminal ; DUNPRG: NOP ; QIOW$C IO.DET,TI,1 CLOSE$ #INFILE CLOSE$ #OUTFLE ; ; EXIT$S ; ; .PAGE .SBTTL DATA ; BUFFER STRUCTURE ; ; ; LABEL:POINTER TO NEXT LABEL ; 136 BYTE BUFFER (134 BYTES FOR DATA AND 2 FOR BLANK PADDING) ; BUFF1: .WORD BUFF2 .BLKB 162. BUFF2: .WORD BUFF1 .BLKB 162. OLDLEN: .BLKW 1 CURLEN: .BLKW 1 CUREND: .BLKW 1 CURBUF: .BLKW 1 ; ; INPMSG: .ASCII /Name of input file:/ INPLEN=.-INPMSG .EVEN OUTMSG: .ASCII /Name of output file:/ OUTLEN=.-OUTMSG .EVEN ; TISTAT: .BLKW 2 FILEIO: .BLKW 2 ;FILE I/O STATUS BLOCK TOTLNE: .BLKW 1 KPTLNE: .BLKW 1 ; ; FILE AREAS ; FLEIN: .WORD 0,0,0,0 LEN1: .WORD 2 .WORD NAME1 NAME1: .BLKB 16. .EVEN FLEOUT: .WORD 0,0,0,0 LEN2: .WORD 3 .WORD NAME2 NAME2: .BLKB 16. .EVEN ; ; ; ANYTHING ELSE I MIGHT THINK I NEED .END START