SUBROUTINE DATA_LOG_CHECK(LOG_RECORDING, & LOG_INTERVAL, WRITE_INTERVAL, LOG_ROUTINE, WRITE_ROUTINE, & LOG_LUN, LOG_COUNTDOWN, WRITE_COUNTDOWN ) C---------------------------------------------------------------------- C- C- Purpose and Methods : Check to see if it is time to write to a log file. C- If it is time to record information, CALL LOG_ROUTINE C- If it is time to write information, CALL WRITE_ROUTINE(LOG_LUN) C- C- Inputs : LOG_RECORDING Are we currently recording? C- C- LOG_INTERVAL The number of calls between recording log C- information. C- C- WRITE_INTERVAL The number of calls between writing log C- information. C- C- LOG_ROUTINE The routine to call to actually record log C- information. C- C- WRITE_ROUTINE The routine to call to actuall write log C- information. C- C- LOG_LUN The unit number to write on. C- C- LOG_COUNTDOWN How many calls left before recording log C- information. *MODIFIED* C- C- WRITE_COUNTDOWN How many calls left before writing log C- information. *MODIFIED* C- C- C- Outputs : none C- Controls: none C- C- Created 30-JUN-1992 Philippe Laurens, Steven Klocek C- C---------------------------------------------------------------------- IMPLICIT NONE INCLUDE 'LV1_MON_SCREEN.INC' INCLUDE 'LV1_MPOOL.PARAMS' INCLUDE 'TRGMON_RBUF.INC' C LOGICAL LOG_RECORDING INTEGER LOG_COUNTDOWN, LOG_INTERVAL INTEGER WRITE_COUNTDOWN, WRITE_INTERVAL EXTERNAL LOG_ROUTINE EXTERNAL WRITE_ROUTINE INTEGER LOG_LUN C LOGICAL FIRST SAVE FIRST DATA FIRST /.TRUE./ C C The special case identified below allows proper operation of the TRGMON C process that refreshes the WWW entry and paints the hallway display at MSU. C This process uses an INP input command file, which doesn't allow chosing a C the number of refreshes before exiting (only choices are 1 or infinite). C To get a 1 mn integration time, the refresh rate is also picked at 1 mn; C thus we need 2 refreshes (RING_SIZE=2) to get the correct data. This special C case completely skips the first screenful which still has only 5s integration, C and wait for the next screenful with full requested integration. C (The other half of this kludgy feature is in TRGMON_DRIVER/TIME_LIMIT_INPUT) C IF ( FIRST .EQV. .TRUE. ) THEN FIRST = .FALSE. IF ( RING_SIZE .EQ. 2 ) THEN GOTO 999 ENDIF ENDIF C C Do nothing if not recording C IF (LOG_RECORDING .EQV. .FALSE.) GOTO 999 C C Check to see if it is time to do something C LOG_COUNTDOWN = LOG_COUNTDOWN -1 IF (LOG_COUNTDOWN .LE. 0) THEN LOG_COUNTDOWN = LOG_INTERVAL CALL LOG_ROUTINE ENDIF C WRITE_COUNTDOWN = WRITE_COUNTDOWN - 1 IF (WRITE_COUNTDOWN .LE. 0) THEN WRITE_COUNTDOWN = WRITE_INTERVAL CALL WRITE_ROUTINE(LOG_LUN) ENDIF C C---------------------------------------------------------------------- 999 RETURN END C C C SUBROUTINE DATA_LOG_RESET(LOG_RECORDING, & LOG_COUNTDOWN, WRITE_COUNTDOWN) C---------------------------------------------------------------------- C- C- Purpose and Methods : Set countdown so that the next screen is added to C- the log. C- C- Inputs : LOG_RECORDING Is recording being performed? C- Outputs : LOG_COUNTDOWN The number of refreshes before logging again. C- WRITE_COUNTDOWN The number of refreshes before writing to log C- file again. C- Controls: none C- C- Created 1-JUL-1992 Philippe Laurens, Steven Klocek C- C---------------------------------------------------------------------- IMPLICIT NONE LOGICAL LOG_RECORDING INTEGER LOG_COUNTDOWN INTEGER WRITE_COUNTDOWN C IF (LOG_RECORDING .EQV. .TRUE.) THEN LOG_COUNTDOWN = 1 WRITE_COUNTDOWN = 1 ENDIF C---------------------------------------------------------------------- 999 RETURN END C C C SUBROUTINE DATA_LOG_END(LOG_RECORDING, LOG_FINISH, & LOG_LUN, LOG_COUNTDOWN, WRITE_COUNTDOWN ) C---------------------------------------------------------------------- C- C- Purpose and Methods : Stop logging data. CALL LOG_FINISH(LOG_LUN) C- C- Inputs : LOG_RECORDING Is recording being performed? C- *Modified* C- C- LOG_FINISH Routine to call before closing file. C- C- LOG_LUN The unit number to write logging data on. C- C- Outputs : LOG_COUNTDOWN The number of refreshes before next logging. C- C- WRITE_COUNTDOWN The number of refreshes before writing to log C- file. C- C- Controls: none C- C- Created 1-JUL-1992 Philippe Laurens, Steven Klocek C- C---------------------------------------------------------------------- IMPLICIT NONE C LOGICAL LOG_RECORDING EXTERNAL LOG_FINISH INTEGER LOG_LUN INTEGER LOG_COUNTDOWN INTEGER WRITE_COUNTDOWN C C Is recording actually being done? C IF (LOG_RECORDING .EQV. .FALSE.) GOTO 999 C C Reset the countdown C CALL DATA_LOG_RESET(LOG_RECORDING, LOG_COUNTDOWN, & WRITE_COUNTDOWN) C C Give user routine chance to finish up C This routine should close the file if necessary. C CALL LOG_FINISH(LOG_LUN) C C Stop recording C LOG_RECORDING = .FALSE. C---------------------------------------------------------------------- 999 RETURN END C C C SUBROUTINE DATA_LOG_BEGIN(LOG_RECORDING, LOG_START, LOG_FINISH, & LOG_LUN, LOG_INTERVAL, WRITE_INTERVAL, LOG_FNAME, LOG_COUNTDOWN, & WRITE_COUNTDOWN) C---------------------------------------------------------------------- C- C- Purpose and Methods : Begin logging data. Interactively request necessary C- information. Prompt for File name. Allocate Logical Unit number if C- necessary. CALL LOG_START(LOG_FNAME, LOG_LUN, SUCCESS), which should C- prompt for application specific parameters and open the log file. C- C- Inputs : LOG_RECORDING Is recording currently occuring. C- *Modified* C- C- LOG_START The application routine to call to open the C- file. C- C- LOG_FINISH Routine to call if current file must be closed C- first. C- C- LOG_LUN The unit number to use. If 0, allocate one C- using GTUNIT. C- *Modified* C- C- LOG_INTERVAL The default number of refreshes between C- logging. C- *Modified* C- C- WRITE_INTERVAL The default number of refreshes between writing C- to log file. C- *Modified* C- C- LOG_FNAME The default file name to use for output file. C- *Modified* C- C- C- Outputs : LOG_COUNTDOWN The number of refreshes before the next log. C- C- WRITE_COUNTDOWN The number of refreshes before writing to the C- log file. C- C- Controls: none C- C- Created 1-JUL-1992 Philippe Laurens, Steven Klocek C- Updated 8-SEP-1992 Philippe Laurens, Steven Klocek C- Say 'Capturing Log Information' and 'Updating Log File'. C- C---------------------------------------------------------------------- IMPLICIT NONE C LOGICAL LOG_RECORDING EXTERNAL LOG_START EXTERNAL LOG_FINISH INTEGER LOG_LUN INTEGER LOG_INTERVAL INTEGER WRITE_INTERVAL CHARACTER*(*) LOG_FNAME INTEGER LOG_COUNTDOWN INTEGER WRITE_COUNTDOWN C CHARACTER*132 TEMP_CHAR INTEGER DATA_LOG_USER_NUM PARAMETER (DATA_LOG_USER_NUM = 562) INTEGER GTUNIT_ERR C INTEGER READPF INTEGER TRULEN INTEGER PFNUM C C Are we currently recording? C IF (LOG_RECORDING .EQV. .TRUE.) THEN CALL OUTMSG(' WARNING: Logging already being performed.') CALL OUTMSG( &' Hit PF1 to confirm closing current file and opening new file') CALL PFLABL('CONFIRM', ' ', ' ', 'BACK') IF (READPF() .NE. 1) GOTO 999 C CALL PFLABL(' ', ' ', ' ', ' ') CALL DATA_LOG_END(LOG_RECORDING, LOG_FINISH, LOG_LUN, & LOG_COUNTDOWN, WRITE_COUNTDOWN) C ENDIF C C Get file name C CALL OUTMSG(' Default log file name:' & // LOG_FNAME(1:TRULEN(LOG_FNAME)) ) TEMP_CHAR = ' ' CALL GETPAR(1, 'Log file name:', 'U', TEMP_CHAR) IF (PFNUM() .NE. 0) GOTO 999 IF (TEMP_CHAR .NE. ' ') LOG_FNAME = TEMP_CHAR C CALL INTTOSTR(LOG_INTERVAL, TEMP_CHAR(1:3), 1) CALL GETPAR(1, & 'Number of screen refreshes between capturing log information [' & // TEMP_CHAR(1:3) // '] > ', & 'I', LOG_INTERVAL ) IF (PFNUM() .NE. 0) GOTO 999 C CALL INTTOSTR(WRITE_INTERVAL, TEMP_CHAR(1:3), 1) CALL GETPAR(1, & 'Number of screen refreshes between updating log file ' & // '(Max 60) [' & // TEMP_CHAR(1:3) // '] >', & 'I', WRITE_INTERVAL ) IF (PFNUM() .NE. 0) GOTO 999 IF (WRITE_INTERVAL .GT. 60) THEN CALL ERRMSG('WRITE_INTERVAL', 'DATA_LOG_BEGIN', & 'Write Interval value out of range', 'W') CALL ERRMSG('NO LOGGING', 'DATA_LOG_BEGIN', & 'Logging not turned on', 'W') WRITE_INTERVAL = 1 GOTO 999 ENDIF C C Allocate a unit number C IF (LOG_LUN .EQ. 0) THEN CALL GTUNIT(DATA_LOG_USER_NUM, LOG_LUN, GTUNIT_ERR) IF (GTUNIT_ERR .NE. 0) THEN CALL ERRMSG('GTUNIT', 'DATA_LOG_CHECK', & 'Error allocating unit number', 'F') ENDIF ENDIF C LOG_COUNTDOWN = 1 WRITE_COUNTDOWN = 1 C CALL LOG_START(LOG_FNAME, LOG_LUN, LOG_RECORDING) C C---------------------------------------------------------------------- 999 RETURN END