; 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