Trailing-Edge
-
PDP-10 Archives
-
decuslib20-07
-
decus/20-0172/msgmod.bli
There is 1 other file named msgmod.bli in the archive. Click here to see a list.
MODULE msgmod (IDENT = '002' ,
%IF
%BLISS(BLISS32)
%THEN
LANGUAGE(BLISS32),
ADDRESSING_MODE(EXTERNAL = LONG_RELATIVE ,
NONEXTERNAL = LONG_RELATIVE)
%ELSE
LANGUAGE(COMMON)
%FI
%TITLE 'PRETTY - MSGMOD module'
) =
BEGIN
!++
! FACILITY: PRETTY
!
!
! ABSTRACT:
! This facility is used to print messages. The interface to this facility
! is through the keyword macro $BLF_MESSAGE. The require file MISC.REQ
! contains the macro declaration and other declarations that any module
! needs to be able to call the macro.
!
! The only action that the macro $BLF_MESSAGE takes is to call the routine
! BLF$_MSG. This module contains that routine. For more details, see the
! documentation file MSGDOC.MEM.
!
! ENVIRONMENT:
! VAX/VMS V2.3. Most of the module is transportable; however, the code
! that deals with a message of Type = Standard Message makes use of the
! standard error message facility supplied by VAX/VMS.
!
! CREATION DATE: 09-JUL-81
!
! MODIFIED BY:
! 01 SD 04-AUG-81 Incorporate the XCODE parameter to allow for
! two line messages.
!
! 02 MCC 17-AUG-81 -TO WORK ON THE INTERFACE FOR ERROR MESSAGES.
!
! 21-Dec-81 TT Took what I needed and changed the names to BLF.
!
!--
!
! TABLE OF CONTENTS:
!
FORWARD ROUTINE
BLF$_MSG : NOVALUE ; ! The message writing routine.
!
! INCLUDE FILES:
!
LIBRARY 'SYS$LIBRARY:XPORT'; ! All I/O uses XPORT.
REQUIRE 'BLFIOB.REQ' ;
REQUIRE 'MSGMAC.REQ' ;
!
! MACROS: None
!
!
! EQUATED SYMBOLS: None
!
!
! OWN STORAGE: None
!
%SBTTL 'blf$_msg'
GLOBAL ROUTINE blf$_msg (type ,
code ,
xcode ,
str_desc ,
fao1 ,
fao2 ) : NOVALUE =
!++
!
! FUNCTIONAL DESCRIPTION:
!
! This routine implements the message writing facility.
!
! FORMAL PARAMETERS:
!
! type = Contains an integer code that specifies the type of message to
! be printed. It can have one of four values:
! 1 ==> Output
! 2 ==> Debug *** commented out ***
! 3 ==> Xport *** commented out ***
! 4 ==> Standard Message
! code = Contains an integer code that specifies a message in a message
! file.
! xcode = Contains the integer code that specifies a secondary message to
! be included along with the main message specified by "code".
! str_desc = Contains the address of a string descriptor for the string
! that the user specified in the macro call.
! fao1 = Contains the address of a string descriptor of a string
! that the caller wants to use as an FAO argument of a
! standard message.
! fao2 = Same as FAO1.
!
! ***** NOTE: None of the actual parameters are modified.
!
!
! IMPLICIT INPUTS:
!
! This routine makes use of the debug flag blf$k_debug and the terminal
! I/O control block used by XPORT. These data segments are declared
! as EXTERNAL in MISC.REQ. It is assumed that these variables are declared
! as global in some other module.
!
! IMPLICIT OUTPUTS:
!
! Messages get printed to SYS$OUTPUT and/or SYS$ERROR.
!
! ROUTINE VALUE: None
! COMPLETION CODES:
!
! None
!
! SIDE EFFECTS:
!
! None
!
!--
BEGIN
! OWN
! severity_bits ; ! Needed for the severity check of
! messages of TYPE = Standard Message.
!+
! The body of the routine is one CASE statement. Depending on the
! type of message indicated by the parameter "type" one of the
! sections of code is executed.
!-
CASE .type FROM 1 TO 4 OF
SET
!+
! Note that ypes Xport and Debug have been commented out because they
! aren't used at the present time. They do work, however.
!-
[1]: !+
! Type = Output
!
! The user calls this type to have a character string written to the
! terminal.
!-
IF (.str_desc EQL -1) THEN
!+
! The caller did not specify the STRING parameter; Therefore,
! write out a default message.
!-
$XPO_PUT (IOB = tty_iob,
STRING = 'Default $BLF_MESSAGE Message')
ELSE
!+
! The caller specified STRING. Write out the string.
!-
$XPO_PUT (IOB = tty_iob,
STRING = .str_desc ) ;
[2,3]: 0;
! [2]: !+
! ! Type = Debug
! !
! ! This type of message is similar to the "output" type.
! !
! ! The main difference is that the message is written only if
! ! the debug flag "blf$k_debug" is set. The string gets prefixed
! ! with the string "DEBUG: ".
! !-
!
! IF (.blf$k_debug) THEN
! IF (.str_desc EQL -1) THEN
! !+
! ! The caller did not specify the STRING parameter.
! ! Print out the default message.
! !-
! $XPO_PUT (IOB = tty_iob ,
! STRING = $STR_CONCAT ('DEBUG: ' ,
! 'Default $blf_MESSAGE Message'))
! ELSE
! !+
! ! The caller specified STRING. Write out the string.
! !-
! $XPO_PUT (IOB = tty_iob ,
! STRING = $STR_CONCAT ('DEBUG: ', .str_desc ) ) ;
!
!
! [3]: !+
! ! Type = Xport
! !
! ! The XPORT package provides the macro $XPO_PUT_MSG to deal with
! ! XPORT errors. That facility is made use of here. If such an
! ! error occurs, $XPO_PUT_MSG is called to signal the error.
! !
! ! NOTE: The severity of any errors signalled in this way is forced
! ! to be WARNING so that calling TYPE = XPORT never results in
! ! automatic termination of the program.
! !-
!
! IF (.str_desc EQL -1) THEN
! !+
! ! The caller did not specify the STRING parameter.
! !-
! $XPO_PUT_MSG (CODE = .code ,
! SEVERITY = WARNING)
! ELSE
! !+
! ! The caller specified STRING. Write it out along with the
! ! standard XPORT message specified by CODE.
! !-
! $XPO_PUT_MSG (CODE = .code ,
! STRING = .str_desc ,
! SEVERITY = WARNING) ;
!
!
[4]: !+
! Type = Standard Message
!
! This is the type of message that the caller requests in order to
! print out a BLF message in the host system's standard message
! format.
!
! *** IMPORTANT NOTE ***
!
! This is the section that is specific to the VAX. When BLF is
! installed on other host systems it will be necessary to expand
! this section. More specifically, it is the call to SIGNAL that
! may operate differently on other host systems.
!-
BEGIN
!+
! Signaling a severe error automatically terminates the program.
! It is usually necessary to call a cleanup routine before allowing
! the program to terminate. Therefore, if the error being signalled
! is severe, the CLEANUP parameter is checked before signaling the
! error. If the CLEANUP parameter is set, the cleanup routine
! is called.
!-
! Mask out all bits except the severity level bits.
! severity_bits = .code AND 7 ;
! IF (.severity_bits GEQ 4) AND (.cleanup) THEN
! BEGIN
! IF (.blf$k_debug) THEN
! $XPO_PUT (IOB = tty_iob ,
! STRING = 'DEBUG: Calling rec$_clean_db') ;
! rec$_clean_db () ;
! END ;
!+
! Signal the message. The parameters to be included in the call
! to SIGNAL depend on the FAO arguments that the
! caller specified, and whether or not XCODE was specified.
!-
IF (.xcode EQL -1)
THEN
! The XCODE parameter was not specified.
BEGIN
! If FAO1 is unspecified, then FAO2 is also unspecified.
IF (.fao1 EQL -1) THEN
SIGNAL (.code, 0) ;
IF (.fao1 GTR -1) AND (.fao2 EQL -1) THEN
! Only FAO1 is specified.
SIGNAL (.code , 1, .fao1) ;
IF (.fao2 GTR -1) THEN
! If FAO2 is specified, then so must be FAO1.
SIGNAL (.code, 2, .fao1, .fao2) ;
END
ELSE
! The XCODE parameter was specified.
BEGIN
IF (.fao1 EQL -1) THEN
! If FAO1 is unspecified, then FAO2 is also unspecified.
SIGNAL (.code, 0, .xcode, 0) ;
IF (.fao1 GTR -1) AND (.fao2 EQL -1) THEN
! Only FAO1 is specified.
SIGNAL (.code , 1, .fao1, .xcode, 0) ;
IF (.fao2 GTR -1) THEN
! If FAO2 is specified, then so must be FAO1.
SIGNAL (.code, 2, .fao1, .fao2, .xcode, 0) ;
END ;
END ; ! Standard Message
[OUTRANGE]: ! The programmer has specified an invalid TYPE.
BEGIN
$XPO_PUT (IOB = tty_iob ,
STRING = 'Invalid TYPE specified in call to $BLF_MESSAGE.') ;
END ;
TES ;
END; ! End of routine
END ! End of module
ELUDOM