C VREADW---JOHN CORMACK,R. FULTON---RPAH---28-APR-80 C THIS FUNCTION ALLOWS DATA TRANSFER FROM DISK C (OR ANY OTHER SPECIFIED DEVICE) TO A VIRTUAL ARRAY C USING A BUFFER IN LOWER MEMORY C INTEGER FUNCTION VREADW(A,BUF,BUFSIZ,SIZE,CHAN,SBLOCK) C C A; VIRTUAL ARRAY C BUF; VARIABLE DIMENSION BUFFER ARRAY C BUFSIZ; SIZE OF BUFFER IN WORDS(MUST BE MULTIPLE OF 256) C SIZE; VIRTUAL ARRAY DIMENSIONS(LINEAR) C CHAN; CHANNEL NUMBER C SBLOCK; STARTING BLOCK C VIRTUAL A(SIZE) INTEGER A,BUFSIZ,ST INTEGER SIZE,CHAN,SBLOCK INTEGER BUF(BUFSIZ) !READ BUFFER C C HOW MANY BLOCKS PER BUFFER? C RBUFSZ=FLOAT(BUFSIZ) REM=AMOD(RBUFSZ,256.) IF(REM.GT.0.000001) STOP 'BUFFER SIZE NOT MULTIPLE OF 256' IBLPBF=BUFSIZ/256 !# OF BLOCKS PER BUFFER ST=1 K=SBLOCK NWORDS=BUFSIZ 100 CALL RDERR(IREADW(NWORDS,BUF,K,CHAN),IRD,0) !TRACE ON ERROR C IF(IRD.LT.0)GO TO 400 !READ ERROR? IF(ST+NWORDS.GT.SIZE) NWORDS=SIZE-ST+1 CALL LOWVIR(A,BUF,NWORDS,ST) ST=ST+NWORDS IF(ST.GT.SIZE) GO TO 300 K=K+IBLPBF GO TO 100 300 VREADW=ST !SIZE RETURN 400 VREADW=IRE RETURN END