PROGRAM LOGTSK C+ C .IDENT /3/ C C Logtsk is a simple FORTRAN program to receive data sent from SYSLOG C and to store in in a file LB:[1,4]SYSLOG.DAT. It is written in f4p to C simplify life. Substantial core and savings could result by writing C this in macro. This would be important only if a lot of rapid sampling C was done and logtsk had to be in core most of the time. C C LOG... initially assumes that it will be asked to stop after C recieving data(ie it will hang out in core). If in the startup C packet, or change delta (sampling interval packet) sent from SYSLOG C the delta value is less than or equal to 5 minutes, LOG... will not exit C after receiving data. Rather it will stop itself and wait for the next C packet. This saves the overhead in opening and closing files. Normally, C however, LOG... will open a file, write data to it, close it, and then do C a recieve data or exit. C C At a bit past midnight, SYSLOG sends out a NEWDAY packet. At this point C will read the current SYSLOG.DAT and append it to a monthly file C SYSmmmyyy.LOG;1. (This will also happen if a START packet is received) C In this way the accounting system will automatically maintain a container C file by month/year of accounting data. If this feature is not desired, C comment out the CALL NEWDAY C C MODIFIED: C 20-AUG-81 Accept packets from ...LOG which occurs if C the DCL LOGOUT command is used. C C- INTEGER*2 ISNDBF(15) INTEGER*2 ISTORE(13) LOGICAL*1 LTSKNM(6) EQUIVALENCE (TSKNAM,ISNDBF(1)) EQUIVALENCE (ITSK1,ISNDBF(1)) EQUIVALENCE (ITSK2,ISNDBF(2)) EQUIVALENCE (ISTORE(1),ISNDBF(3)) DATA SYSLOG /6RSYSLOG/ DATA TSKLOG /6RTSKLOG/ DATA IBYE /3RBYE/ DATA IHEL /3RHEL/ DATA IUPD /3RUPD/ DATA LOGOUT /3RLOG/ DATA TTP1 /4RTTP1/ ! NAME OF SPOOLER TASK TO TT1: DATA TT1SP/5RTT1SP/ ! NAME OF SPOOLER TASK TO TT1: DATA RLPP0 /4RLPP0/ ! SPOOLER TO LP0: DATA RLPP1 /4RLPP1/ ! SPOOLER TO LP1: C .... NO ERROR MESSAGES ARE TO BE DISPLAYED FOR TRAPABLE ERRORS C .... BY THE OPEN AND WRITE ERR= TRANSFER. CALL ERRSET(29,.TRUE.,.FALSE.,.TRUE.,.FALSE.,) ! NO SUCH FILE CALL ERRSET(30,.TRUE.,.FALSE.,.TRUE.,.FALSE.,) ! OPEN FAILURE IOPEN=0 ! SHOW LOG FILE NOT OPEN YET IDLTA=30 ! ASSUME 30 MIN SAMPLE TIME ISTOP=1 ! ASSUME WE WILL STOP OPEN(UNIT=5,NAME='CO:') ! OUTPUT ERROR MESSAGES TO CO: 100 CONTINUE IF(ISTOP.EQ.1) CALL RCST(,ISNDBF,IDSW) ! RECIEVE DATA OR STOP IF(ISTOP.EQ.0) CALL RECOEX(,ISNDBF,,IDSW) ! RECEIVE DATA OR EXIT IF((ISNDBF(3).EQ.0 .OR. ! IF A NEWDAY OR START PACKET - ISNDBF(3).EQ.1) .AND. ! AND SYSLOG SENT IT - (TSKNAM.EQ.SYSLOG .AND. ! AND DATA EXISTS IN PACKET - IDSW .EQ.1)) CALL NEWDAY(IOPEN,IER)! TRANSFER DATA TO MONTH LOG IF(IOPEN.EQ.1) GOTO 140 ! DON'T TRY TO OPEN FILE OPEN(UNIT =1, ! OPEN LOGFILE FOR APPEND - NAME ='LB:[1,4]SYSLOG.DAT;1',! ON LB:[1,4]SYSLOG.DAT;1 - ACCESS ='APPEND', ! AS A SEQUENTIAL - FORM ='UNFORMATTED', ! UNFORMATTED FILE. - ERR =120, ! - EXTENDSIZE =1, ! EXTEND ONE BLOCK AT A TIME - TYPE ='OLD') ! AS AN OLD FILE. GOTO 140 ! IF NO ERRORS SKIP OVER 120 OPEN(UNIT =1, ! WE HAVE TO CREATE THE FILE - NAME ='LB:[1,4]SYSLOG.DAT;1',! ON LB:[1,4]SYSLOG.DAT;1 - ACCESS ='SEQUENTIAL', ! MAKE IT A SEQUENTIAL FILE - FORM ='UNFORMATTED', ! UNFORMATTED - TYPE ='NEW', ! A NEW FILE - EXTENDSIZE =1, ! EXTEND FILE 1 BLK AT A TIME - INITIALSIZE=5, ! START OUT 5 BLOCKS LONG - ERR =9000) ! VERY BAD PROBLEM--HELP 140 IOPEN=1 ! FILE NOW OPEN IF(IDSW.NE.1 ) GOTO 100 ! IF UNSTOPPED BUT NO DATA, ! GET SOME DATA IF(TSKNAM.EQ.SYSLOG .OR. ! IF SENDER'S NAME IS SYSLOG - TSKNAM.EQ.TSKLOG .OR. ! OR IF IT IS 'TSKLOG' - ITSK1.EQ.IHEL .OR. ! HELXYZ OR - ITSK2.EQ.IHEL .OR. ! ...HEL OR - ITSK1.EQ.IBYE .OR. ! BYEXYZ OR - ITSK2.EQ.IBYE .OR. ! ...BYE OR - ITSK1.EQ.IUPD .OR. ! UPDXYZ OR - ITSK2.EQ.IUPD .OR. ! ...UPD OR - ITSK1.EQ.LOGOUT .OR. ! ...LOG OR - ITSK2.EQ.LOGOUT .OR. ! LOGXYZ OR - TSKNAM.EQ.TTP1 .OR. ! TTP1 (OLD SPOOLER) - TSKNAM.EQ.TT1SP .OR. ! TT1SP (NEW SPOOLER) - TSKNAM.EQ.RLPP0 .OR. ! LPP0 - TSKNAM.EQ.RLPP1) ! LPP1 - GOTO 200 ! THEN GO LOG DATA CALL R50ASC(6,TSKNAM,LTSKNM) ! CONVERT TO ASCII WRITE(5,150)LTSKNM 150 FORMAT(' LOG... -- Unsolicited data sent from ',6A1) GOTO 400 ! ELSE TRY AGAIN 200 CONTINUE IF(ISNDBF(3).EQ.1 .OR. ! IF START PACKET - ISNDBF(3).EQ.0 .OR. ! IF NEWDAY PACKET - ISNDBF(3).EQ.4) ! OR CHANGE DELTA PACKET - IDLTA=ISNDBF(12)! THEN SET A NEW IDELTA WRITE(1,ERR=9020) ISTORE ! WRITE IT OUT D IF(ISNDBF(3).LT.5 .OR. ISNDBF(3) .GE.8) D - WRITE(5,210)LTSKNM,(ISNDBF(I),I=3,15) D210 FORMAT(' LOG... -- Data received from ',6A1,' :',/,' ',13I8) D IF(ISNDBF(3).EQ.5) WRITE(5,220) (ISNDBF(I),I=4,10) D220 FORMAT(' HELLO: 'I2,'/'I2,'/',I2,4X,O8,I4,O8,I4) D IF(ISNDBF(3).EQ.6)WRITE(5,230) (ISNDBF(I), I=4,13) D230 FORMAT(' BYE: ',I2,'/',I2,'/',I2, 4X,O8,I4,O8,4(O8)) 400 IF(IDLTA.LE.5)ISTOP=1 ! IF SAMPLES MORE OFTEN THAN ! EVERY 5 MIN, STOP IF(IDLTA.GT.5)ISTOP=0 ! ELSE EXIT IF(ISNDBF(3).EQ.-1) GOTO 9999 ! EXIT IF SYSLOG EXITS IF(ISTOP.EQ.0)CLOSE(UNIT=1) ! CLOSE/ IF RCV DATA OR EXIT IF(ISTOP.EQ.0)IOPEN=0 ! SHOW FILE CLOSED GOTO 100 9000 WRITE(5,9010) 9010 FORMAT(' LOG... -- LB:[1,4]SYSLOG.DAT can not be opened') GOTO 9999 9020 WRITE(5,9030) 9030 FORMAT(' LOG... -- Write error to log file') GOTO 9999 9999 WRITE(5,999) 999 FORMAT(' LOG... -- Exiting',/,' >') CALL EXIT END SUBROUTINE NEWDAY(IOPEN,IER) C+ C If it is a newday, get the date and time. Open LB:[1,4]SYSmmmyyy.LOG;1. C If it doesn't exist, create it. Then read in SYSLOG.DAT write it back out C to SYSmmmyy.LOG;1. When done delete LB:[1,4]SYSLOG.DAT if there were no C errors. If errors occur, close files politely, output error to CO: C The only hooker hear is that if IOPEN=1 C then SYSLOG.DAT is already open so we must close it first and C then set IOPEN=0 so that the mainline code will recreate it. C- LOGICAL*1 LMONTH(36),MONFIL(27) LOGICAL*1 LMTH(3) DIMENSION RMONTH(9),ISTORE(13) EQUIVALENCE (RMONTH(1),LMONTH(1)) DATA RMONTH /'JANF','EBMA','RAPR','MAYJ', - 'UNJU','LAUG','SEPO','CTNO','VDEC'/ IER=1 ! ASSUME FAILURE IF(IOPEN.EQ.1)CLOSE(UNIT=1) ! SYSLOG.DAT IS OPEN,CLOSE IT CALL IDATE(IMON,IDAY,IYEAR) ! GET TODAY'S DATE INDX=(IMON*3-2) ! INDEX INTO LMONTH IF(IDAY.EQ.1) INDX=INDX-3 ! USE PREVIOUS MONTH FILE ! ..UNLESS.. IF(IMON.EQ.1 .AND. ! IF JAN 1, MOVE BACK TO DEC - IDAY.EQ.1) INDX=34 ! IF(IMON.EQ.1 .AND. ! - IDAY.EQ.1) IYEAR=IYEAR-1! AND BACK ONE YEAR LMTH(1)=LMONTH(INDX) ! TRANSFER THE MONTH LMTH(2)=LMONTH(INDX+1) ! LMTH(3)=LMONTH(INDX+2) ! ENCODE(26,50,MONFIL,ERR=720) LMTH,IYEAR ! ENCODE THE FILE NAME 50 FORMAT('LB:[001,004]SYS',3A1,I2,'.LOG;1')! OPEN(UNIT =1, ! OPEN LOGFILE FOR APPEND - NAME =MONFIL, ! LB:[1,4]SYSmmmyy.LOG;1 - ACCESS ='APPEND', ! AS A SEQUENTIAL - FORM ='UNFORMATTED', ! UNFORMATTED FILE. - ERR =120, ! - EXTENDSIZE =1, ! EXTEND ONE BLOCK AT A TIME - TYPE ='OLD') ! AS AN OLD FILE. GOTO 140 ! IF NO ERRORS SKIP OVER 120 OPEN(UNIT =1, ! WE HAVE TO CREATE THE FILE - NAME =MONFIL, ! ON LB:[1,4]SYSmmmyy.LOG;1 - ACCESS ='SEQUENTIAL', ! MAKE IT A SEQUENTIAL FILE - FORM ='UNFORMATTED', ! UNFORMATTED - TYPE ='NEW', ! A NEW FILE - EXTENDSIZE =1, ! EXTEND FILE 1 BLK AT A TIME - INITIALSIZE=5, ! START OUT 5 BLOCKS LONG - ERR =730) ! VERY BAD PROBLEM--HELP 140 CONTINUE ! OPEN(UNIT =2, ! OPEN LOGFILE FOR - NAME ='LB:[1,4]SYSLOG.DAT;1',! ON LB:[1,4]SYSLOG.DAT;1 - FORM ='UNFORMATTED', ! UNFORMATTED FILE. - ERR =700, ! cannot open SYSLOG.DAT - EXTENDSIZE =1, ! EXTEND ONE BLOCK AT A TIME - SHARED, ! ****FOR NOW - TYPE ='OLD') ! AS AN OLD FILE. WRITE(5,180)MONFIL 180 FORMAT(' LOGTSK -- Transfering SYSLOG.DAT to month file: ',27A1) 200 READ(2,END=800,ERR=750)ISTORE ! READ IN A RECORD WRITE(1,ERR=770)ISTORE ! AND WRITE IT OUT GOTO 200 ! AND AGAIN C -- deal with file errors politely, always save all files if errors C 700 WRITE(5,710) MONFIL ! 710 FORMAT(' LOG... -- Can not open SYSLOG.DAT to append to ',27A1) GOTO 790 ! JOIN COMMON CODE 720 WRITE(5,725)MONFIL ! 725 FORMAT(' LOG... -- Error encoding filename:',26A1) GOTO 790 ! JOIN COMMON CODE 730 WRITE(5,735)MONFIL ! 735 FORMAT(' LOG... -- Can not open ',27A1) ! GOTO 790 ! JOIN COMMON CODE 750 WRITE(5,760) ! ERROR READING SYSLOG.DAT 760 FORMAT(' LOG... -- Warning, error reading SYSLOG.DAT') GOTO 790 ! JOIN COMMON CODE 770 WRITE(5,780)MONFIL 780 FORMAT(' LOG... -- Warning, error writing ',27A1) 790 CLOSE(UNIT=2) ! SAVE SYSLOG.DAT GOTO 820 ! JOIN COMMON CODE C C -- common exit code C 800 CLOSE(UNIT=2,DISPOSE='DELETE') ! DELETE SYSLOG.DAT IER=0 ! SHOW SUCCESS 820 CLOSE(UNIT=1) ! SAVE SYSmmmyy.LOG;1 IOPEN=0 ! MARK FILE NOT OPEN 850 RETURN ! DONE END