.TITLE ACFSUB ACCOUNT FILE ROUTINES .IDENT /V7.01/ ;************************************************************************ ; ; ACFSUB THIS MODULE CONTAINS A SELECTION OF ROUTINES THAT ARE ; USED TO OPEN, CLOSE, READ AND WRITE TO THE SYSTEM ; ACCOUNT FILE IN VERSION 7 OF THE ACCOUNTING PACKAGE. ; ; VERSION: V7 APRIL 6, 1981. ; ; STEVE THOMPSON SCHOOL OF CHEMICAL ENGINEERING ; OLIN HALL ; CORNELL UNIVERSITY ; ITHACA NY 14853 ; ;************************************************************************* .MCALL OPEN$M,MRKT$S,QIOW$,CLOSE$,WTSE$S,DIR$ ; ; ACCOUNT FILE I/O DIRECTIVE PARAMETER BLOCK ; $AFDPB::QIOW$ IO.RVB,LUN2,2,,$AFIOS,,<$ACTBF,$BFLEN,,0,1> ; DIRECTIVE PARAMETER BLOCK (LUN2 IS ; GLOBALLY DEFINED IN ACTFIL.MAC) $AFIOS::.BLKW 2 ; I/O STATUS BLOCK $ASUBR::.WORD 0 ; ADDRESS OF $ASCAN ACCEPTANCE ROUTINE ;+ ; ; *** $AFOPN ; ; THIS ROUTINE IS CALLED TO OPEN THE RSX ACCOUNT FILE. ; THE MODULE ACTFIL.MAC IS REQUIRED, AS IT CONTAINS THE ; NECESSARY DATA STRUCTURES. ; FIVE ATTEMPTS ARE MADE AT ONE SECOND INTERVALS IF AN ERROR ; IS DETECTED. ; ; INPUT: ; R2 OPEN ERROR COUNTER IF ENTRY AT $AFOP1 ; ; OUTPUT: ; R0,R2 USED ; CC OPEN SUCCESSFUL ; CS OPEN FAILURE 5 TIMES ; ;- $AFOPN::MOV #5,R2 ; INITIALISE OPEN ERROR COUNTER $AFOP1::OPEN$M #$ACTFL,#LUN2,,#FD.RWM ; OPEN ACCOUNT FILE BCC 20$ ; OPEN SUCCESSFUL DEC R2 ; FIVE FAILURES? BEQ 10$ ; IF EQ YES MRKT$S #1,#1,#2 ; MARK TIME FOR ONE SECOND BCS $AFOP1 ; IF CS ERROR WTSE$S #1 ; WAIT FOR TIME BR $AFOP1 ; TRY AGAIN 10$: SEC ; SET OPEN FAILURE RETURN ; 20$: ; FALL THROUGH TO $AFBLK ;+ ; ; *** $AFBLK ; ; THIS ROUTINE SETS THE VIRTUAL BLOCK NUMBER, AS STORED IN ; THE ACCOUNT FILE DIRECTIVE PARAMETER BLOCK, TO UNITY SO ; THAT FILE SCANS MAY START AT THE BEGINNING OF THE FILE. ; ; NO REGISTERS ARE USED. ; ;- $AFBLK::MOV #1,$AFDPB+Q.IOPL+10 ; SET TO START AT VBN #1 CLR $AFDPB+Q.IOPL+6 ; RETURN ; RETURN TO CALLER ;+ ; ; *** $ASCAN ; ; THIS ROUTINE SCANS THE ACCOUNT FILE ENTRY BY ENTRY, CALLING THE ; "ACCEPTANCE ROUTINE", WHOSE ADDRESS IS CONTAINED IN $ASUBR, AT ; EACH ENTRY. THE SCAN IS TERMINATED AND THE ENTRY ADDRESS IS ; RETURNED IN R0 IF THE ACCEPTANCE ROUTINE RETURNS WITH THE CARRY ; BIT CLEAR. THE ACCEPTANCE ROUTINE MUST SAVE AND RESTORE ANY ; REGISTERS IT USES. ; ;- $ASCAN::CALL $AFBLK ; SET VBN TO START OF FILE 5$: CALL $AFGET ; READ DATA FROM THE ACCOUNT FILE BEQ 30$ ; IF EQ THERE WAS NONE 10$: CMPB A.GRP(R0),#'0 ; VALID UIC? BLO 20$ ; IF NO LO, SLOT IS AVAILABLE CMPB A.GRP(R0),#'3 ; MAYBE BHI 20$ ; IF HI NO CALL @$ASUBR ; CALL ACCEPTANCE ROUTINE BCC 40$ ; IF CC RETURN WITH THIS ENTRY 20$: ADD #A.LEN,R0 ; POINT TO NEXT ENTRY SUB #A.LEN,R2 ; GET BYTES LEFT BHI 10$ ; GO IF THERE ARE ANY 30$: CMPB #IE.EOF,$AFIOS ; END OF FILE? BEQ 35$ ; YES TSTB $AFIOS ; ANY ERRORS? BMI 35$ ; YES CALL $AFNXB ; UPDATE VBN TO NEXT BLOCK BR 5$ ; DO NEXT BLOCK 35$: SEC ; SET CARRY TO INDICATE A/C NOT FOUND 40$: RETURN ; RETURN TO CALLER ;+ ; ; *** $AFGET READ A BUFFER FULL FROM THE ACCOUNT FILE ; ; INPUT: ; DPB SHOULD BE SET UP WITH VIRTUAL BLOCK NUMBER ; ; OUTPUT: ; R0 ADDRESS OF ACCOUNT DATA BUFFER ; R2 NUMBER OF BYTES READ (CAN BE TESTED, BEQ, BNE ETC) ; ;- $AFGET::MOV #IO.RVB,$AFDPB+Q.IOFN ; MAKE SURE FUNCTION CODE IS RIGHT DIR$ #$AFDPB ; READ THE DATA MOV #$ACTBF,R0 ; SET ADDRESS OF DATA BUFFER MOV $AFIOS+2,R2 ; GET COUNT OF BYTES READ RETURN ; AND RETURN TO CALLER ;+ ; ; *** $AFPUT REWRITE THE BUFFER CONTENTS TO THE ACCOUNT FILE. ; ; INPUT: ; DPB SHOULD BE SET UP WITH VIRTUAL BLOCK NUMBER ; ; OUTPUTS: ; VBN IS UPDATED ; ;- $AFPUT::MOV #IO.WVB,$AFDPB+Q.IOFN ; MAKE SURE FUNCTUON CODE IS RIGHT DIR$ #$AFDPB ; WRITE THE DATA ; FALL THROUGH TO $AFNXB ;+ ; ; *** $AFNXB UPDATE A/C FILE VIRTUAL BLOCK POINTER ; ; INPUTS: ; NONE ; ; OUTPUTS: ; VBN IS UPDATED IN $AFDPB ; ;- $AFNXB::ADD #<$BFLEN/512.>,$AFDPB+Q.IOPL+10 ; UPDATE VBN ADC $AFDPB+Q.IOPL+6 ; DON'T FORGET THE CARRY MOV #$BFLEN,$AFDPB+Q.IOPL+2 ; RESET BUFFER LENGTH PARAMETER RETURN ; AND RETURN TO CALLER ;+ ; ; *** $AFCLS CLOSE ACCOUNT FILE ; ; INPUT: ; NONE ; ; OUTPUT: ; RSX ACCOUNT FILE IS CLOSED ; ;- $AFCLS::CLOSE$ #$ACTFL ; CLOSE THE ACCOUNT FILE RETURN ; AND RETURN TO CALLER .END