	SUBROUTINE PHONE_LOG (ENTRY_TYPE)
C
C	This routine is used to log phone numbers to a disk file so the
C	user and/or system manager can track autodial modem usage.  The
C	logical name VAXNET$PHONE_LOG is translated at the process, group,
C	and system level to find the name of the phone log file.  Entrys
C	are made in each phone log if they exist.
C
C	Inputs:
C		ENTRY_TYPE = The modem entry type (string).
C
C	All other inputs to this routine are explicit since all information
C	needed to write to the phone log file is stored within global
C	common areas.
C
	INCLUDE 'COM.INC/NOLIST'
	INCLUDE 'TRNLNM.INC/NOLIST'

	CHARACTER*(*) LOG_NAME, ENTRY_TYPE
	CHARACTER*128 FILE_NAME
	PARAMETER (LOG_NAME = 'VAXNET$PHONE_LOG')
	LOGICAL TRNLNM, PHONE_ENTRY
	LOGICAL DO_PROCESS, DO_GROUP, DO_SYSTEM
	INTEGER FILE_SIZE
	DATA DO_PROCESS, DO_GROUP, DO_SYSTEM /.TRUE.,.TRUE.,.TRUE./

	IF (DO_PROCESS) THEN
	  IF (TRNLNM (LOG_NAME, FILE_NAME, FILE_SIZE, TRN$M_PROCESS)) THEN
	    DO_PROCESS = PHONE_ENTRY (FILE_NAME(1:FILE_SIZE), ENTRY_TYPE)
	  ENDIF
	ENDIF

	IF (DO_GROUP) THEN
	  IF (TRNLNM (LOG_NAME, FILE_NAME, FILE_SIZE, TRN$M_GROUP)) THEN
	    DO_GROUP = PHONE_ENTRY (FILE_NAME(1:FILE_SIZE), ENTRY_TYPE)
	  ENDIF
	ENDIF

	IF (DO_SYSTEM) THEN
	  IF (TRNLNM (LOG_NAME, FILE_NAME, FILE_SIZE, TRN$M_SYSTEM)) THEN
	    DO_SYSTEM = PHONE_ENTRY (FILE_NAME(1:FILE_SIZE), ENTRY_TYPE)
	  ENDIF
	ENDIF
	RETURN
	END

	LOGICAL FUNCTION PHONE_ENTRY (FILE_NAME, ENTRY_TYPE)
C
C	This routine is used to open the phone log file and log the
C	phone number entry.
C
C	Inputs:
C		FILE_NAME   = The file name to open.
C		ENTRY_TYPE  = The modem entry type.
C
C	Outputs:
C		Returns .TRUE./.FALSE. = File Success/Failure.
C
	INCLUDE 'COM.INC/NOLIST'
	INCLUDE '($RMSDEF)/NOLIST'

	CHARACTER*(*) FILE_NAME, ENTRY_TYPE, MODULE_NAME
	PARAMETER (MODULE_NAME = 'PHONE_ENTRY')

	CHARACTER*23 CURRENT_DATE
	CHARACTER*7 MODEM_STATE
	LOGICAL CHECK_MODEM, FILE_OPEN
	INTEGER LIB$DATE_TIME, STATUS
	INTEGER ERROR, FERR, RMSSTS, RMSSTV, FLUN

	PHONE_ENTRY = .TRUE.			! Presume success.
C
C	Get the date and time, format:  dd-mmm-yyyy hh:mm:ss.tt
C
	STATUS = LIB$DATE_TIME (CURRENT_DATE)	! Get the current date.
	IF (.NOT. STATUS) THEN
	    CALL CHECK_STATUS (MODULE_NAME, STATUS) ! Report the error.
	    GO TO 9999				! Use common error return.
	ENDIF
C
C	Open the file for append.
C
	OPEN (UNIT=PHONE_UNIT, TYPE='OLD', NAME=FILE_NAME, ACCESS='APPEND',
	1	RECORDSIZE=PHONELOG_SIZE, CARRIAGECONTROL='LIST',
	2	IOSTAT=STATUS)
C
C	The STATUS return equals zero if the file was open, otherwise
C	it contains a positive error code.  On failure, we get the last
C	FORTRAN error information and check for the RMS error code
C	"File Not Found" which is the only expected error return.
C
	IF (STATUS .NE. 0) THEN
	  CALL ERRSNS (FERR, RMSSTS, RMSSTV, FLUN, )
	  IF (RMSSTS .EQ. RMS$_FNF) THEN
	    CALL WRITE_USER (SS//'*** Create new phone log file - '//
	1			FILE_NAME//' ***'//SS)
	    OPEN (UNIT=PHONE_UNIT, TYPE='NEW', NAME=FILE_NAME,
	1	RECORDSIZE=PHONELOG_SIZE, CARRIAGECONTROL='LIST',
	2	ERR=9900)
	  ELSE
	    ERROR = RMSSTS		! Copy the RMS error code.
	    IF (ERROR .EQ. 0) THEN
	      ERROR = FERR		! No RMS error, copy FORTRAN.
	    ENDIF
	    CALL CHECK_STATUS (MODULE_NAME, ERROR)
	  ENDIF
	ENDIF
	FILE_OPEN = .TRUE.		! Show the log file is open.
C
C	The modem state is based upon the status of the modem carrier
C	signal returned by the CHECK_MODEM function.  If asserted, then
C	we'll display "ONLINE" otherwise we'll display "OFFLINE".
C
	IF (REMOTE_ASSIGNED) THEN
	    IF (CHECK_MODEM()) THEN
		MODEM_STATE = 'ONLINE '	! Show modem is online.
	    ELSE
		MODEM_STATE = 'OFFLINE'	! Show modem is offline.
	    ENDIF
	ELSE
	    MODEM_STATE = '       '	! Blank fill the field.
	ENDIF
C
C	Format the phone entry as follows:
C
C	Field Name	Size	Start
C	----------	----	-----
C	username	 12       1
C	date/time	 20      14
C	modem_type	 10	 35
C	modem_port	  8	 46
C	modem_speed	  4	 55
C	entry_type	  9	 60
C	modem_state	  7	 70
C	phone_number	 25	 78
C	phone_comment	 ??	104
C
C	The T format edit descriptor is used to get the field widths
C	correct since the An width specifier right justifies the field.
C
	WRITE (PHONE_UNIT, 100, ERR=9900) USER_NAME(1:USER_SIZE),
	1	CURRENT_DATE(1:20), MODEM_TYPE(1:MODEM_SIZE),
	2	REMOTE_DEVICE(1:REMOTE_SIZE), REMOTE_BAUD(1:SPEED_SIZE),
	3	ENTRY_TYPE, MODEM_STATE, PHONE_NUMBER(1:PHONE_SIZE),
	4	PHONE_NUMBER(PHOCOM_START:PHOCOM_END)
100	FORMAT (A, T14, A, T35, A, T46, A, T55, A4, T60, A,
	1	T70, A, T78, A, T104, A)
	CLOSE (UNIT=PHONE_UNIT)			! Close the log file.
	RETURN
C
C	We come here to report an error when we can't create the new
C	phone log file.
C
9900	CALL RMS_ERROR (MODULE_NAME)		! Report the RMS error.
	CALL WRITE_USER (SS//
	1 '*** The phone log file name is "'//FILE_NAME//'" ***'
	2 //SS)
9999	PHONE_ENTRY = .FALSE.			! Return failure status.
	IF (FILE_OPEN) THEN
	    CLOSE (UNIT=PHONE_UNIT)		! Close the log file.
	ENDIF
	RETURN
	END
