Google
 

Trailing-Edge - PDP-10 Archives - BB-R775E-BM - sources/edt/chmkeywrd.bli
There are 11 other files named chmkeywrd.bli in the archive. Click here to see a list.
 %TITLE 'CHMKEYWRD - look for a keyword'
MODULE CHMKEYWRD (				! Look for a keyword
		IDENT = '3-002'			! File: CHMKEYWRD.BLI Edit: GB3002
		) =
BEGIN
!
!			  COPYRIGHT (c) 1981, 1985 BY
!	      DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
!		ALL RIGHTS RESERVED.
!
! THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND  COPIED
! ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH  LICENSE AND WITH THE
! INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR  ANY  OTHER
! COPIES  THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
! OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF  THE  SOFTWARE  IS  HEREBY
! TRANSFERRED.
!
! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE  WITHOUT  NOTICE
! AND  SHOULD  NOT  BE  CONSTRUED  AS  A COMMITMENT BY DIGITAL EQUIPMENT
! CORPORATION.
!
! DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR  RELIABILITY  OF  ITS
! SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
!

!++
! FACILITY:	EDT -- The DEC Standard Editor
!
! ABSTRACT:
!
!	This module compares the command buffer contents to a table
!	of keywords.
!
! ENVIRONMENT:	Runs at any access mode - AST reentrant
!
! AUTHOR: Bob Kushlis, CREATION DATE: Unknown
!
! MODIFIED BY:
!
! 1-001	- Original.  DJS 04-Feb-1981.  This module was created by
!	extracting the routine EDT$$KWORD  from module CHANGE.BLI.
! 1-002	- Regularize headers.  JBS 03-Mar-1981
! 1-004 - Change to a table arranged alphabetically. STS 21-Sep-1982
! 1-005	- Move the keywords here from EDT$CHMPARSE, to reduce the program
!	   size on the PDP-11.  Also, put an underscore in the entry point name.  JBS 29-Sep-1982
! 1-006	- Accept lower case letters as equivalent to upper case, and improve error
!	   checking.  JBS 01-Oct-1982
! 1-007	- Make this routine position-independent.  JBS 01-Oct-1982
! 1-008	- Add conditionals for WPS and VT220.  JBS 10-Feb-1983
! 1-009	- Don't forget the SUPPORTS library.  JBS 11-Feb-1983
! 3-002 - Remove VT220 conditional to speed up code. CJG 25-Nov-1983
!--

%SBTTL 'Declarations'
!
! TABLE OF CONTENTS:
!

REQUIRE 'EDTSRC:TRAROUNAM';

FORWARD ROUTINE
    EDT$$KEY_WORD : NOVALUE;			! Compare the command buffer contents to a table of keywords

!
! INCLUDE FILES:
!

REQUIRE 'EDTSRC:EDTREQ';

LIBRARY 'EDTSRC:TRANSLATE';

!
! MACROS:
!
!	NONE
!
! EQUATED SYMBOLS:
!

FIELD
    KEY_WORD_FIELD =
	SET
	KEY_WORD_NEXT = [0, 0, 18, 0],
	KEY_WORD_NUM = [0, 18, 9, 0],
	KEY_WORD_LEN = [0, 27, 9, 0],
	KEY_WORD_POINTER = [1, 0, 36, 0]
	TES;
LITERAL
	V_FIELD = %O'1000000',
	L_FIELD = %O'1000000000';

!
! OWN STORAGE:
!
!+
! Define the keywords used to make up change mode sub-commands.
!
! Each record in this table contains a address pointer to the next keyword
! with this alphabetic character  the value of the keyword, its length,
! and the ASCII characters which comprise it.
!
! The table is a concatenation of keyword entries.  Each
! consists of a pointer to the next keyword to examine if
! this one should fail, a keyword number byte, length byte,
! and the ASCII text for the keyword.  A 0 length byte
! marks the end of the table.  Letters in keywords are
! all upper case.
!-

BIND
    ADDR_BASE = UPLIT (0),
    END_VERBS = UPLIT (0, 0),

    ASC_VERB = UPLIT (
	END_VERBS - ADDR_BASE + V_FIELD * (VERB_K_ASC) + L_FIELD * (3), CH$PTR (UPLIT ('ASC'))),
    ADV_VERB = UPLIT (
	ASC_VERB - ADDR_BASE + V_FIELD * (VERB_K_ADV) + L_FIELD * (3), CH$PTR (UPLIT ('ADV'))),
    A_VERBS = UPLIT (
	ADV_VERB - ADDR_BASE + V_FIELD * (VERB_K_APPEND) + L_FIELD * (6), CH$PTR (UPLIT ('APPEND'))),
    BELL_VERB = UPLIT (
	END_VERBS - ADDR_BASE + V_FIELD * (VERB_K_BELL) + L_FIELD * (4), CH$PTR (UPLIT ('BELL'))),
    B_VERBS = UPLIT (
	BELL_VERB - ADDR_BASE + V_FIELD * (VERB_K_BACK) + L_FIELD * (4), CH$PTR (UPLIT ('BACK'))),
    CUT_VERB = UPLIT (
	END_VERBS - ADDR_BASE + V_FIELD * (VERB_K_CUT) + L_FIELD * (3), CH$PTR (UPLIT ('CUT'))),
    CLSS_VERB = UPLIT (
	CUT_VERB - ADDR_BASE + V_FIELD * (VERB_K_CLSS) + L_FIELD * (4), CH$PTR (UPLIT ('CLSS'))),
    CHGL_VERB = UPLIT (
	CLSS_VERB - ADDR_BASE + V_FIELD * (VERB_K_CHGL) + L_FIELD * (4), CH$PTR (UPLIT ('CHGL'))),
    CHGU_VERB = UPLIT (
	CHGL_VERB - ADDR_BASE + V_FIELD * (VERB_K_CHGU) + L_FIELD * (4), CH$PTR (UPLIT ('CHGU'))),
    C_VERBS = UPLIT (
	CHGU_VERB - ADDR_BASE + V_FIELD * (VERB_K_CHGC) + L_FIELD * (4), CH$PTR (UPLIT ('CHGC'))),
    D_VERB = UPLIT (
	END_VERBS - ADDR_BASE + V_FIELD * (VERB_K_DELETE) + L_FIELD * (1), CH$PTR (UPLIT ('D'))),
    DUPC_VERB = UPLIT (
	D_VERB - ADDR_BASE + V_FIELD * (VERB_K_DUPC) + L_FIELD * (4), CH$PTR (UPLIT ('DUPC'))),
    DMOV_VERB = UPLIT (
	DUPC_VERB - ADDR_BASE + V_FIELD * (VERB_K_DMOV) + L_FIELD * (4), CH$PTR (UPLIT ('DMOV'))),
    DLWC_VERB = UPLIT (
	DMOV_VERB - ADDR_BASE + V_FIELD * (VERB_K_DLWC) + L_FIELD * (4), CH$PTR (UPLIT ('DLWC'))),
    DEFK_VERB = UPLIT (
	DLWC_VERB - ADDR_BASE + V_FIELD * (VERB_K_DEFK) + L_FIELD * (4), CH$PTR (UPLIT ('DEFK'))),
    DATE_VERB = UPLIT (
	DEFK_VERB - ADDR_BASE + V_FIELD * (VERB_K_DATE) + L_FIELD * (4), CH$PTR (UPLIT ('DATE'))),
    D_VERBS = UPLIT (
	DATE_VERB - ADDR_BASE + V_FIELD * (VERB_K_DESEL) + L_FIELD * (5), CH$PTR (UPLIT ('DESEL'))),
    EX_VERB = UPLIT (
	END_VERBS - ADDR_BASE + V_FIELD * (VERB_K_EXIT) + L_FIELD * (2), CH$PTR (UPLIT ('EX'))),
    E_VERBS = UPLIT (
	EX_VERB - ADDR_BASE + V_FIELD * (VERB_K_EXT) + L_FIELD * (3), CH$PTR (UPLIT ('EXT'))),
    F_VERBS = UPLIT (
	END_VERBS - ADDR_BASE + V_FIELD * (VERB_K_FILL) + L_FIELD * (4), CH$PTR (UPLIT ('FILL'))),
    H_VERBS = UPLIT (
	END_VERBS - ADDR_BASE + V_FIELD * (VERB_K_HELP) + L_FIELD * (4), CH$PTR (UPLIT ('HELP'))),
    I_VERBS = UPLIT (
	END_VERBS - ADDR_BASE + V_FIELD * (VERB_K_INSERT) + L_FIELD * (1), CH$PTR (UPLIT ('I'))),
    K_VERBS = UPLIT (
	END_VERBS - ADDR_BASE + V_FIELD * (VERB_K_KS) + L_FIELD * (2), CH$PTR (UPLIT ('KS'))),
    P_VERBS = UPLIT (
	END_VERBS - ADDR_BASE + V_FIELD * (VERB_K_PASTE) + L_FIELD * (5), CH$PTR (UPLIT ('PASTE'))),
    Q_VERBS = UPLIT (
	END_VERBS - ADDR_BASE + V_FIELD * (VERB_K_QUIT) + L_FIELD * (4), CH$PTR (UPLIT ('QUIT'))),
    R_VERB = UPLIT (
	END_VERBS - ADDR_BASE + V_FIELD * (VERB_K_REPLACE) + L_FIELD * (1), CH$PTR (UPLIT ('R'))),
    R_VERBS = UPLIT (
	R_VERB - ADDR_BASE + V_FIELD * (VERB_K_REF) + L_FIELD * (3), CH$PTR (UPLIT ('REF'))),
    S_VERB = UPLIT (
	END_VERBS - ADDR_BASE + V_FIELD * (VERB_K_SUBS) + L_FIELD * (1), CH$PTR (UPLIT ('S'))),
    SN_VERB = UPLIT (
	S_VERB - ADDR_BASE + V_FIELD * (VERB_K_SN) + L_FIELD * (2), CH$PTR (UPLIT ('SN'))),
    SHR_VERB = UPLIT (
	SN_VERB - ADDR_BASE + V_FIELD * (VERB_K_SHR) + L_FIELD * (3), CH$PTR (UPLIT ('SHR'))),
    SHL_VERB = UPLIT (
	SHR_VERB - ADDR_BASE + V_FIELD * (VERB_K_SHL) + L_FIELD * (3), CH$PTR (UPLIT ('SHL'))),
    SEL_VERB = UPLIT (
	SHL_VERB - ADDR_BASE + V_FIELD * (VERB_K_SEL) + L_FIELD * (3), CH$PTR (UPLIT ('SEL'))),
    S_VERBS = UPLIT (
	SEL_VERB - ADDR_BASE + V_FIELD * (VERB_K_SSEL) + L_FIELD * (4), CH$PTR (UPLIT ('SSEL'))),
    TI_VERB = UPLIT (
	END_VERBS - ADDR_BASE + V_FIELD * (VERB_K_TI) + L_FIELD * (2), CH$PTR (UPLIT ('TI'))),
    TD_VERB = UPLIT (
	TI_VERB - ADDR_BASE + V_FIELD * (VERB_K_TD) + L_FIELD * (2), CH$PTR (UPLIT ('TD'))),
    TC_VERB = UPLIT (
	TD_VERB - ADDR_BASE + V_FIELD * (VERB_K_TC) + L_FIELD * (2), CH$PTR (UPLIT ('TC'))),
    TOP_VERB = UPLIT (
	TC_VERB - ADDR_BASE + V_FIELD * (VERB_K_TOP) + L_FIELD * (3), CH$PTR (UPLIT ('TOP'))),
    TAB_VERB = UPLIT (
	TOP_VERB - ADDR_BASE + V_FIELD * (VERB_K_TAB) + L_FIELD * (3), CH$PTR (UPLIT ('TAB'))),
    TADJ_VERB = UPLIT (
	TAB_VERB - ADDR_BASE + V_FIELD * (VERB_K_TADJ) + L_FIELD * (4), CH$PTR (UPLIT ('TADJ'))),
    T_VERBS = UPLIT (
	TADJ_VERB - ADDR_BASE + V_FIELD * (VERB_K_TGSEL) + L_FIELD * (5), CH$PTR (UPLIT ('TGSEL'))),
    UNDW_VERB = UPLIT (
	END_VERBS - ADDR_BASE + V_FIELD * (VERB_K_UNDW) + L_FIELD * (4), CH$PTR (UPLIT ('UNDW'))),
    UNDL_VERB = UPLIT (
  	UNDW_VERB - ADDR_BASE + V_FIELD * (VERB_K_UNDL) + L_FIELD * (4), CH$PTR (UPLIT ('UNDL'))),
    U_VERBS = UPLIT (
	UNDL_VERB - ADDR_BASE + V_FIELD * (VERB_K_UNDC) + L_FIELD * (4), CH$PTR (UPLIT ('UNDC'))),
    X_VERBS = UPLIT (
	END_VERBS - ADDR_BASE + V_FIELD * (VERB_K_XLATE) + L_FIELD * (5), CH$PTR (UPLIT ('XLATE'))),
    CARET_VERB = UPLIT (
	END_VERBS - ADDR_BASE + V_FIELD * (VERB_K_CC) + L_FIELD * (1), CH$PTR (UPLIT ('^')));

BIND
    VERB_TABLE = UPLIT (
	A_VERBS - ADDR_BASE,
	B_VERBS - ADDR_BASE,
	C_VERBS - ADDR_BASE,
	D_VERBS - ADDR_BASE,
	E_VERBS - ADDR_BASE,
	F_VERBS - ADDR_BASE,
	END_VERBS - ADDR_BASE,
	H_VERBS - ADDR_BASE,
	I_VERBS - ADDR_BASE,
	END_VERBS - ADDR_BASE,
	K_VERBS - ADDR_BASE,
	END_VERBS - ADDR_BASE,
	END_VERBS - ADDR_BASE,
	END_VERBS - ADDR_BASE,
	END_VERBS - ADDR_BASE,
	P_VERBS - ADDR_BASE,
	Q_VERBS - ADDR_BASE,
	R_VERBS - ADDR_BASE,
	S_VERBS - ADDR_BASE,
	T_VERBS - ADDR_BASE,
	U_VERBS - ADDR_BASE,
	END_VERBS - ADDR_BASE,
	END_VERBS - ADDR_BASE,
	X_VERBS - ADDR_BASE,
	END_VERBS - ADDR_BASE,
	END_VERBS - ADDR_BASE,
	END_VERBS - ADDR_BASE,
	END_VERBS - ADDR_BASE,
	END_VERBS - ADDR_BASE,
	CARET_VERB - ADDR_BASE);

!+
! The following are keywords which are entities.
!
! The values must be separated by two so we can add the direction to
! the entity for use as a case index.
!-

BIND
    END_ENTITY = UPLIT (0, 0),

    BW_ENT = UPLIT (
    	END_ENTITY - ADDR_BASE + V_FIELD * (ENT_K_BW) + L_FIELD * (2), CH$PTR (UPLIT ('BW'))),
    BR_ENT = UPLIT (
    	BW_ENT - ADDR_BASE + V_FIELD * (ENT_K_BR) + L_FIELD * (2), CH$PTR (UPLIT ('BR'))),
    BL_ENT = UPLIT (
    	BR_ENT - ADDR_BASE + V_FIELD * (ENT_K_BL) + L_FIELD * (2), CH$PTR (UPLIT ('BL'))),
    BPAR_ENT = UPLIT (
    	BL_ENT - ADDR_BASE + V_FIELD * (ENT_K_BPAR) + L_FIELD * (4), CH$PTR (UPLIT ('BPAR'))),
    BSEN_ENT = UPLIT (
    	BPAR_ENT - ADDR_BASE + V_FIELD * (ENT_K_BSEN) + L_FIELD * (4), CH$PTR (UPLIT ('BSEN'))),
    B_ENTS = UPLIT (
    	BSEN_ENT - ADDR_BASE + V_FIELD * (ENT_K_BPAGE) + L_FIELD * (5), CH$PTR (UPLIT ('BPAGE'))),
    C_ENTS = UPLIT (
    	END_ENTITY - ADDR_BASE + V_FIELD * (ENT_K_CHAR) + L_FIELD * (1), CH$PTR (UPLIT ('C'))),
    EW_ENT = UPLIT (
        END_ENTITY - ADDR_BASE + V_FIELD * (ENT_K_EW) + L_FIELD * (2), CH$PTR (UPLIT ('EW'))),
    EL_ENT = UPLIT (
    	EW_ENT - ADDR_BASE + V_FIELD * (ENT_K_EL) + L_FIELD * (2), CH$PTR (UPLIT ('EL'))),
    ER_ENT = UPLIT (
    	EL_ENT - ADDR_BASE + V_FIELD * (ENT_K_ER) + L_FIELD * (2), CH$PTR (UPLIT ('ER'))),
    EPAR_ENT = UPLIT (
    	ER_ENT - ADDR_BASE + V_FIELD * (ENT_K_EPAR) + L_FIELD * (4), CH$PTR (UPLIT ('EPAR'))),
    ESEN_ENT = UPLIT (
    	EPAR_ENT - ADDR_BASE + V_FIELD * (ENT_K_ESEN) + L_FIELD * (4), CH$PTR (UPLIT ('ESEN'))),
    E_ENTS = UPLIT (
        ESEN_ENT - ADDR_BASE + V_FIELD * (ENT_K_EPAGE) + L_FIELD * (5), CH$PTR (UPLIT ('EPAGE'))),
    L_ENTS = UPLIT (
    	END_ENTITY - ADDR_BASE + V_FIELD * (ENT_K_LINE) + L_FIELD * (1), CH$PTR (UPLIT ('L'))),
    N_ENTS = UPLIT (
    	END_ENTITY - ADDR_BASE + V_FIELD * (ENT_K_NL) + L_FIELD * (2), CH$PTR (UPLIT ('NL'))),
    PAR_ENT = UPLIT (
    	END_ENTITY - ADDR_BASE + V_FIELD * (ENT_K_PAR) + L_FIELD * (3), CH$PTR (UPLIT ('PAR'))),
    P_ENTS = UPLIT (
    	PAR_ENT - ADDR_BASE + V_FIELD * (ENT_K_PAGE) + L_FIELD * (4), CH$PTR (UPLIT ('PAGE'))),
    SR_ENT = UPLIT (
    	END_ENTITY - ADDR_BASE + V_FIELD * (ENT_K_SR) + L_FIELD * (2), CH$PTR (UPLIT ('SR'))),
    S_ENTS = UPLIT (
    	SR_ENT - ADDR_BASE + V_FIELD * (ENT_K_SEN) + L_FIELD * (3), CH$PTR (UPLIT ('SEN'))),
    V_ENTS = UPLIT (
    	END_ENTITY - ADDR_BASE + V_FIELD * (ENT_K_VERT) + L_FIELD * (1), CH$PTR (UPLIT ('V'))),
    W_ENTS = UPLIT (
    	END_ENTITY - ADDR_BASE + V_FIELD * (ENT_K_WORD) + L_FIELD * (1), CH$PTR (UPLIT ('W')));

BIND
    ENTITY_TABLE = UPLIT (
	B_ENTS - ADDR_BASE,
	C_ENTS - ADDR_BASE,
	END_ENTITY - ADDR_BASE,
	E_ENTS - ADDR_BASE,
	END_ENTITY - ADDR_BASE,
	END_ENTITY - ADDR_BASE,
	END_ENTITY - ADDR_BASE,
	END_ENTITY - ADDR_BASE,
	END_ENTITY - ADDR_BASE,
	END_ENTITY - ADDR_BASE,
	L_ENTS - ADDR_BASE,
	END_ENTITY - ADDR_BASE,
	N_ENTS - ADDR_BASE,
	END_ENTITY - ADDR_BASE,
	P_ENTS - ADDR_BASE,
	END_ENTITY - ADDR_BASE,
	END_ENTITY - ADDR_BASE,
	S_ENTS - ADDR_BASE,
	END_ENTITY - ADDR_BASE,
	END_ENTITY - ADDR_BASE,
	V_ENTS - ADDR_BASE,
	W_ENTS - ADDR_BASE);
!
! EXTERNAL REFERENCES:
!
!	In the routine
%SBTTL 'EDT$$KEY_WORD  - look for a key word'

GLOBAL ROUTINE EDT$$KEY_WORD (			! Look for a key word
    TABLE_NO, 					! 1 = verb table, 2 = entity table
    KEY_NUM					! Key number
    ) : NOVALUE =

!++
! FUNCTIONAL DESCRIPTION:
!
!	This routine scans a table of keywords, attempting to find a match
!	in the current command buffer pointed to by CMD_PTR .
!	The comparison is case blind.
!
! FORMAL PARAMETERS:
!
!  TABLE_NO		The number of the keyword table to use.  1 = use the
!			verb table, 2 = use the entity table.
!
!  KEY_NUM		The returned value for the number of the entity or
!			verb which matched from the table.  Zero indicates
!			no match.
!
!
! IMPLICIT INPUTS:
!
!	CMD_END
!	CMD_PTR
!
! IMPLICIT OUTPUTS:
!
!	CMD_PTR
!
! ROUTINE VALUE:
!
!	NONE
!
! SIDE EFFECTS:
!
!	NONE
!
!--

    BEGIN

    EXTERNAL
	CHAR_INFO : BLOCKVECTOR [256, 1],	!Information about each character
	CMD_END,				! End of command pointer
	CMD_PTR;				! Command string pointer

    LOCAL
	KW_POINTER,
	FIRST_CHAR,
	TABLE_OFFSET,
	FOUND,
	TABLE,
	TABLE_PTR : REF BLOCK [ ] FIELD (KEY_WORD_FIELD),
	C_POINTER;

    .KEY_NUM = 0;
    C_POINTER = .CMD_PTR;
    FIRST_CHAR = CH$RCHAR_A (C_POINTER);

    IF .CHAR_INFO [.FIRST_CHAR, CI_LC] THEN FIRST_CHAR = .FIRST_CHAR - %C'a' + %C'A';

    CASE .TABLE_NO FROM 1 TO 2 OF
	SET

	[1] :
	    BEGIN

	    IF ((.FIRST_CHAR LSS %C'A') OR (.FIRST_CHAR GTR %C'^')) THEN RETURN;

	    TABLE = VERB_TABLE;
	    TABLE_OFFSET = (.FIRST_CHAR - %C'A');
	    TABLE_PTR = .(.TABLE + .TABLE_OFFSET) + ADDR_BASE;
	    END;

	[2] :
	    BEGIN

	    IF ((.FIRST_CHAR LSS %C'B') OR (.FIRST_CHAR GTR %C'W')) THEN RETURN;

	    TABLE = ENTITY_TABLE;
	    TABLE_OFFSET = (.FIRST_CHAR - %C'B');
	    TABLE_PTR = .(.TABLE + .TABLE_OFFSET) + ADDR_BASE;
	    END;

	[OUTRANGE] :
	    ASSERT (0);
	TES;

    WHILE (.TABLE_PTR [KEY_WORD_LEN] NEQ 0) DO
	BEGIN
	KW_POINTER = .TABLE_PTR [KEY_WORD_POINTER];
	C_POINTER = .CMD_PTR;
	FOUND = 1;

	IF CH$PTR_LEQ (CH$PLUS (.C_POINTER, .TABLE_PTR [KEY_WORD_LEN]), .CMD_END)
	THEN
	    BEGIN

	    INCR I FROM 1 TO .TABLE_PTR [KEY_WORD_LEN] DO
		BEGIN

		LOCAL
		    CHAR;

		CHAR = CH$RCHAR_A (C_POINTER);

		IF .CHAR_INFO [.CHAR, CI_LC] THEN CHAR = .CHAR - %C'a' + %C'A';

		IF (.CHAR NEQ CH$RCHAR_A (KW_POINTER)) THEN FOUND = 0;

		END;

	    IF .FOUND
	    THEN
		BEGIN
		.KEY_NUM = .TABLE_PTR [KEY_WORD_NUM];

!+
! Skip over the keyword.
!-
		CMD_PTR = CH$PLUS (.CMD_PTR, .TABLE_PTR [KEY_WORD_LEN]);
		RETURN;
		END;
	    END;
	TABLE_PTR = .TABLE_PTR [KEY_WORD_NEXT] + ADDR_BASE;
	END;
    RETURN;
    END;

END
ELUDOM