C C ************************* C * [311,77]ACTWRTTSK.FTN * C ************************* C C------- WRITE ACCOUNTING FILE RECORD C C THIS ROUTINE RECEIVES A VARIABLE LENGTH MESSAGE FROM C A TASK THAT WANTS TO WRITE AN ACCOUNTING RECORD. C THIS MESSAGE HAS THE FOLLOWING FORMAT: C 1 TOTAL LENGTH OF DATA C 2-LEN-5 DATA TO BE WRITTEN C LEN-4 UIC C LEN-3 TASK NAME RAD50 WORD 1 C LEN-2 TASK NAME RAD50 WORD 2 C LEN-1 TYPE OF ACCOUNTING RECORD C LEN DATA TO BE USED IN (1) C DIMENSION IDATA(255),JDATA(261),KDATA(259) C EQUIVALENCE (IDATA,JDATA(5)) , (KDATA,IDATA(3)) C C------- RECEIVE DATA OR STOP 10 NWORD = 253 CALL VRECST (,IDATA,NWORD,,,IDS) C C------- IF WE GOT THE DATA GO USE IT IF (IDS .NE. 2) GO TO 100 C C------- RECEIVE THE DATA AFTER STOP CALL VRECEV (,IDATA,NWORD,,,IDS) C 100 CONTINUE C C------- GET RECORD LENGTH NUMB = IDATA(3) - 1 IDATA(3) = IDATA(NUMB+3) C C------- SET UP ACCOUNTING RECORD C C------- UIC JDATA(1) = KDATA(NUMB-3) C C------- TASK NAME JDATA(4) = KDATA(NUMB-2) JDATA(5) = KDATA(NUMB-1) C C------- TYPE OF RECORD JDATA(6) = KDATA(NUMB) C C------- STORE DATE AND TIME CALL DTSTOR (JDATA(2)) C C------- OPEN ACCOUNTING FILE CALL OPNACT (1,IERR) IF (IERR .NE. 0) GO TO 300 C C------- COMPUTE THE CHECKSUM N = NUMB + 3 JDATA(N) = 0 DO 150 I=1,NUMB+2 JDATA(N) = JDATA(N) + JDATA(I) 150 CONTINUE WRITE (1,200) (JDATA(I),I=1,N) 200 FORMAT(100A2,100A2,100A2) C C------- CLOSE THE ACCOUNTING FILE CLOSE (UNIT=1) C C------- GO TRY FOR MORE C 300 GO TO 10 300 CALL EXIT C END SUBROUTINE OPNACT (LUN,IERR) C C------- OPEN THE ACCOUNTING FILE C C------- ARGUMENTS: C C LUN - AVAILABLE LUN C IERR - ERROR INDICATOR: C 0=ALL OK C 1=OPEN ERROR C IERR = 0 C C------- DISABLE OPEN ERROR MESSAGE CALL ERRSET (30,.TRUE.,.FALSE.,.TRUE.,.FALSE.) C C------- OPEN THE ACCOUNTING FILE 100 OPEN (UNIT=LUN,NAME='LB0:[1,100]PDSACT.ACT',TYPE='UNKNOWN', 1 CARRIAGECONTROL='LIST',ACCESS='APPEND',ERR=200) C C------- SUCCESSFUL OPEN RETURN C C------- FILE OPEN ERROR 200 CALL ERRSNS (IF4P,IFCS) C C------- TRY AGAIN TESTS C C------- WRITE ACCESSED IF (IFCS .EQ. -29) GO TO 250 C C------- LOCKED FROM READ/WRITE IF (IFCS .EQ. -27) GO TO 250 C C------- ALREADY OPEN IF (IFCS .EQ. -53) GO TO 250 C C------- ERROR TO TERMINAL AND OPERATOR 220 TYPE 230,IFCS 230 FORMAT(' ACCOUNTING FILE FAILURE CODE =',I4) CALL ASSIGN (LUN,'TT0:') WRITE(LUN,230) IFCS CLOSE (UNIT=LUN) C C------- SET ERROR 240 IERR = 1 RETURN C C------- WAIT A SECOND AND TRY AGAIN 250 CALL WAIT (1000,1,M) GO TO 100 C END