	SUBROUTINE ENABLE_LOGFILE
C
C	Character string for questions and log file name.
C
	INCLUDE 'COM.INC/NOLIST'

	CHARACTER*(*) OPENQ, LOGQ
	CHARACTER*10 DUMMY

	PARAMETER (OPENQ = 
	1 'The log file is already open, open a new file (Yes) ? ')
	PARAMETER (LOGQ = 'Enter the name of the log file (VAXNET.LOG): ')

50	CALL LOCAL_LOGFILE		! Check for local logging.
	IF (BACKUP) RETURN
C
C	See if log file is already open.  If it is, ask if new file desired.
C
	IF (.NOT. LOGFILE) GO TO 150
100	CALL PROMPT_USER(OPENQ,%REF(DUMMY),LEN(DUMMY))
	IF (BACKUP) GO TO 50
	IF (WANTS_HELP) THEN
		CALL GET_HELP('LOG_FILE OPEN')
		GO TO 100
	ENDIF
	IF (LBYTE_COUNT .EQ. 0 .OR. DUMMY(1:1) .EQ. 'Y') THEN
		CALL FLUSH_LOGFILE()		! Flush it first.
		CLOSE (UNIT=LOG_UNIT)		! Now close it.
		LOGFILE = .FALSE.		! Show no log file open.
	ELSE
		RETURN
	ENDIF
C
C	If starting up, check for log file symbol.
C
150	IF (STARTUP) THEN
		IF (GET_SYMBOL('LOG_FILE',LOG_FILE,LBYTE_COUNT)) THEN
			GO TO 210
		ENDIF
	ENDIF
C
C	Ask for log file name.
C
200	CALL PROMPT_USER(LOGQ,%REF(LOG_FILE),LEN(LOG_FILE))
	IF (BACKUP) GO TO 50
	IF (WANTS_HELP) THEN
		CALL GET_HELP('LOG_FILE')
		GO TO 200
	ENDIF
210	IF (LBYTE_COUNT .EQ. 0) THEN
		LOG_FILE = 'VAXNET.LOG'	! Default log file name.
		LBYTE_COUNT = 10
	ENDIF
	LOGFILE_SIZE = LBYTE_COUNT
	OPEN (UNIT=LOG_UNIT, TYPE='NEW', NAME=LOG_FILE(1:LOGFILE_SIZE),
	1	FORM='FORMATTED', RECORDTYPE='VARIABLE',
	1	RECORDSIZE=LOGBUF_SIZE, CARRIAGECONTROL='NONE',
	1	ORGANIZATION='SEQUENTIAL', BUFFERCOUNT=2)
	LOGFILE = .TRUE.
	RETURN
	END

	SUBROUTINE LOCAL_LOGFILE
C
C	Determine if local output to the logfile is desired.
C
	INCLUDE 'COM.INC/NOLIST'

	CHARACTER*(*) LOCALQ
	CHARACTER*10 DUMMY

	PARAMETER (LOCALQ = 
	1 'Do you want local output in the logfile (Yes) ? ')

	IF (STARTUP) THEN
		IF (GET_SYMBOL('LOG_LOCAL',DUMMY,LBYTE_COUNT)) THEN
			GO TO 110
		ENDIF
	ENDIF
100	CALL PROMPT_USER(LOCALQ,%REF(DUMMY),LEN(DUMMY))
	IF (BACKUP) RETURN
	IF (WANTS_HELP) THEN
		CALL GET_HELP('LOCAL')
		GO TO 100
	ENDIF
110	LOG_LOCAL = .FALSE.		! Presume no local logging.
	IF (LBYTE_COUNT .EQ. 0 .OR. DUMMY(1:1) .EQ. 'Y') THEN
		LOG_LOCAL = .TRUE.	! Log local output.
	ENDIF
	RETURN
	END

	SUBROUTINE WRITE_LOGFILE(BUFFER,NBYTES)
C
C	Copy characters read from remote to the logfile buffer and
C	write it to disk if is full.
C
	INCLUDE 'COM.INC/NOLIST'
	LOGICAL*1 BUFFER(1)

	IF (.NOT. LOGFILE) RETURN	! No logfile open.
	DO 100 I = 1,NBYTES
	RINDEX = RINDEX+1		! Index into buffer.
	TBUFFER(RINDEX) = BUFFER(I) .AND. "177 ! Strip parity.
	IF (RINDEX .EQ. LOGBUF_SIZE) CALL FLUSH_LOGFILE
100	CONTINUE
	RETURN
	END

	SUBROUTINE FLUSH_LOGFILE
C
C	This routine writes the logfile buffer to the disk when the
C	buffer is either full or to flush the buffer when exiting.
C
	INCLUDE 'COM.INC/NOLIST'

	IF (LOGFILE) THEN
		WRITE (LOG_UNIT,100) (TBUFFER(I),I=1,RINDEX)
100		FORMAT(<RINDEX>A1)
		RINDEX = 0
	ENDIF
	RETURN
	END
