.TITLE STATSB .IDENT /V7.01/ ;************************************************************************** ; ; STATSB STATSUB.MAC ; ; THIS MODULE CONTAINS ROUTINES USED TO READ FROM AND WRITE TO THE ; ACCOUNTING SYSTEM STATISTICS FILE, LB:[0,0]STATISTIC.DAT. ALL I/O ; IS DONE ON LOGICAL UNIT 3 FOR COMPATIBILITY WITH I/O DONE ON ; LB:[0,0]ACCOUNTS.DAT. ; ; VERSION: V7 SEPTEMBER 1981 ; ; STEVE THOMPSON ; SCHOOL OF CHEMICAL ENGINEERING ; OLIN HALL ; CORNELL UNIVERSITY ; ITHACA NY 14853 ; ; REVISION HISTORY ; ---------------- ; ; SMT762 10-OCT-81 BATCH/INTERACTIVE FEATURE CAUSES NO CHANGES ; IN THE CODE OF THIS MODULE, BUT REQUIRES ITS ; REASSEMBLY AND REPLACEMENT IN V7LIB.OLB DUE ; TO A DATA STRUCTURE CHANGE IN STADF$ ; ;************************************************************************** .MCALL FDBDF$,FDAT$A,FDRC$A,FDOP$A,OPEN$A,OPEN$W .MCALL GET$,PUT$,GTIM$S,CLOSE$ .MCALL MRKT$S,WTSE$S STADF$ ; DEFINE STATISTICS BUFFER OFFSETS LUN3 = 3 ; THIS FILE ALWAYS USES THIS LUN DEFSIZ = -20. ; INITIAL SIZE = 20 BLOCKS (NONCONTIGUOUS) EXTSIZ = -10. ; EXTEND SIZE = 10 BLOCKS $SFFDB::FDBDF$ ; STATISTICS FILE FILE DESCRIPTOR BLOCK FDAT$A R.VAR,,,DEFSIZ,EXTSIZ FDRC$A ,$SFREC,S.LSTA FDOP$A LUN3,STADSP,,FO.APD,FA.ENB!FA.DLK $SFREC::.BLKB S.LSTA ; STATISTICS BUFFER .EVEN STADSP: .WORD DEVSIZ,DEVNAM ; DATASET DESCRIPTOR .WORD DIRSIZ,DIRNAM ; .WORD FILSIZ,FILNAM ; DEVNAM: .ASCII /LB0:/ ; DEVICE FOR STATISTICS FILE DEVSIZ=.-DEVNAM ; DIRNAM: .ASCII /[0,0]/ ; UFD FOR STATISTICS FILE DIRSIZ=.-DIRNAM ; FILNAM: .ASCII /STATISTIC.DAT/ ; NAME OF STATISTICS FILE FILSIZ=.-FILNAM ; .EVEN ;+ ; *** $SFOPN ; ; THIS ROUTINE IS CALLED TO OPEN (WITH APPEND) THE ACCOUNTING ; STATISTICS FILE. IF IT DOES NOT EXIST, THE FILE IS CREATED WITH ; SYSTEM OWNERSHIP AND SUITABLE ACCESS RIGHTS. IF THE FILE ; IS OPENED SUCCESSFULLY, THE CURRENT DATE AND TIME ARE INSERTED ; INTO THE BUFFER AND THE REMAINDER IS ZEROED. ; ; INPUTS: ; R2 OPEN ERROR COUNTER IF ENTRY AT $SFOP1 ; ; OUTPUTS: ; R0 STATISTICS FILE FDB ADDRESS ; R2 USED ; CC FILE OPENED OK, STATISTICS RECORD INITIALISED ; CS FILE OPEN ERROR (R0 CONTAINS FDB ADDRESS) ; ;- $SFOPN::MOV #5,R2 ; INITIALISE OPEN ERROR COUNTER $SFOP1::OPEN$A #$SFFDB ; OPEN STATISTICS FILE WITH APPEND BCC 10$ ; IF CC IT WAS SUCCESSFUL CMPB F.ERR(R0),#IE.NSF ; DID THE OPEN FAIL BECAUSE THE FILE ; DID NOT EXIST? BEQ 5$ ; IF EQ YES, TRY TO CREATE FILE DEC R2 ; FIVE OPEN FAILURES? BEQ 30$ ; IF EQ YES, SEND OPEN ERROR MRKT$S #1,#1,#2 ; MARK TIME FOR ONE SECOND BCS $SFOP1 ; JUST IN CASE WTSE$S #1 ; WAIT FOR TIME INTERVAL TO ELAPSE BR $SFOP1 ; AND TRY THE OPEN AGAIN 5$: MOV #177000,R1 ; SET PROTECTION MASK TO [RWED,RWED,R,] CALL .WDFFP ; WRITE IN $$FSR2 MOV #401,R1 ; SET FILE OWNER AS [1,1] CALL .WFOWN ; WRITE FILE OWNER WORD IN $$FSR2 OPEN$W #$SFFDB ; CREATE THE NEW FILE BCS 40$ ; IF CS, AN ERROR OCCURRED 10$: MOV #$SFREC,R0 ; SET UP STATISTICS BUFFER ADDRESS GTIM$S R0 ; FILL IN THE DATE AND TIME ADD #<8.*2>,R0 ; STEP PAST THE DATE AND TIME MOV #</2>,R1 ; GET LENGTH OF REST OF RECORD 20$: CLR (R0)+ ; ZERO A WORD DEC R1 ; DONE YET? BNE 20$ ; IF NE NO, LOOP RETURN ; RETURN TO CALLER 30$: SEC ; SET CARRY BIT TO INDICATE BAD NEWS 40$: RETURN ; AND RETURN TO THE CALLER ;+ ; *** $SFCLS ; ; THIS ROUTINE IS CALLED TO CLOSE THE ACCOUNTING STATISTICS FILE. ; ;- $SFCLS::CLOSE$ #$SFFDB ; CLOSE THE FILE RETURN ; AND RETURN TO THE CALLER ;+ ; *** $SFGET ; ; THIS ROUTINE IS CALLED TO READ A LINE OF DATA FROM THE ; ACCOUNTING RECORDS FILE. ; ;- $SFGET::GET$ #$SFFDB,#$SFREC,#S.LSTA ; READ IN THE STATISTICS RETURN ; AND RETURN TO THE CALLER ;+ ; *** $SFPUT ; ; THIS ROUTINE IS CALLED TO WRITE THE CONTENTS OF THE STATISTICS BUFFER ; TO THE STATISTICS FILE. ; ;- $SFPUT::PUT$ #$SFFDB ; WRITE THE DATA RETURN ; AND RETURN TO THE CALLER .END