; CONT.SBR ; SUBROUTINE TO CONVERT SEQUENTIAL FILES TO RANDOM ; 05/15/85 - D. EICHBAUER ; ; ; PROPRIETARY PROGRAM MATERIAL ; ; THIS MATERIAL IS THE PROPERTY OF DALE A. EICHBAUER, ; 692 E. FREELAND ROAD, MERRILL, MICHIGAN, 48637. PERMISSION ; TO COPY & USE IS GRANTED FOR NON-PROFIT USES ONLY. ; ; ; ; ; SEARCH SYS SEARCH SYSSYM SEARCH TRM AUTOEXTERN OBJNAM CONT.SBR VMAJOR=1. VMINOR=0. VSUB=0. VEDIT=100. VWHO=1. DDB1.L= 0 DDB2.L= 4 PHDR -1,PV$RPD,PH$REE!PH$REU BR START ASCII / COPYRIGHT (C) 1985 DALE A. EICHBAUER / EVEN START: MOV #1,D1 ; THE FILE CHANNEL # FOR RANDOM CALL $FLSET ; FIND ITS DDB JNE BASIC ; IF NOT FOUND, THEN ERROR MOV A2,DDB1.L(A4) ; SAVE THE DDB ADDRESS MOV #2,D1 ; NOW THE SEQUENTIAL FILE CALL $FLSET ; FIND ITS DDB JNE BASIC ; AGAIN, ERROR IF NOT FOUND MOV A2,DDB2.L(A4) ; SAVE THIS DDB ADDRESS MOV DDB1.L(A4),A1 ; GET THE CONTIGUOUS DDB ADDRESS CLR D.REC(A1) ; CLEAR THE RECORD COUNTER L1: MOV #512.,D0 ; OUR BLOCKS ARE 512 BYTES LONG MOV DDB1.L(A4),A1 ; GET ADDRESS AGAIN IN CASE LOST CLR D.IDX(A1) ; WE'RE AT BEGINNING OF BUFFER LOOP: MOV DDB2.L(A4),A1 ; POINT TO SEQUENTIAL FILINB @A1 ; GET ONE BYTE TST D.SIZ(A1) ; SEE IF AT END OF FILE BEQ BASIC ; IF SO, CLOSE UP SHOP MOV DDB1.L(A4),A1 ; NOW POINT TO CONTIGUOUS MOV D.BUF(A1),A2 ; POINT TO ITS BUFFER ADD D.IDX(A1),A2 ; AND CURRENT LOCATION IN BUFFER MOVB D1,@A2 ; PUT THE DATA INTO CONTIGUOUS INC D.IDX(A1) ; AND BUMP THE POINTER SOB D0,LOOP ; LOOP TILL BUFFER FULL MOV DDB1.L(A4),A1 ; GET DDB ADDRESS FOR CONTIGUOUS TRAP: OUTPUT @A1 ; OUTPUT THE BLOCK INC D.REC(A1) ; AND POINT TO NEXT RECORD BR L1 ; NOW LOOP BACK TILL DONE BASIC: RTN ; BACK TO BASIC ASCII / COPYRIGHT (C) 1985 DALE A. EICHBAUER / END .