Google
 

Trailing-Edge - PDP-10 Archives - BB-R775E-BM - sources/edt/keycom.bli
There are 10 other files named keycom.bli in the archive. Click here to see a list.
 %TITLE 'KEYCOM - get a keypad command'
MODULE KEYCOM (				! Get a keypad command
		IDENT = '3-002'			! File: KEYCOM.BLI Edit: CJG3002
		) =
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:
!
!	Get a keypad command.
!
! ENVIRONMENT:	Runs at any access mode - AST reentrant
!
! AUTHOR: Bob Kushlis, CREATION DATE: April 7, 1979
!
! MODIFIED BY:
!
! 1-001	- Original.  DJS 24-Feb-1981.  This module was created by
!	extracting routine EDT$$GET_KPADCMD  from module KEYTRAN.
! 1-002	- Regularize headers.  JBS 09-Mar-1981
! 1-003	- Add return values.  JBS 02-Oct-1981
! 1-004 - Check one more return value, and add a variable to call to
!	   EDT$$KPAD_INP. STS 21-Oct-1981
! 1-005	- Set a flag if control C actually aborts something.  JBS 25-May-1982
! 1-006	- In NOKEYPAD mode copy control characters into the buffer.  JBS 07-Jun-1982
! 1-007 - Pass flag to EDT$$NXT_CMDCH so that it will accept repeat counts. STS 16-Jun-1982
! 1-008 - Add reverse video to nokeypad command input.  SMB 24-Jun-1982
! 1-009	- New implementation of defined keys.  JBS 12-Aug-1982
! 1-010 - Add another control C check since a control C can occur
!	   in edt$$trn_kstr. STS 24-Nov-1982
! 1-011	- Don't call EDT$$ERA_MSGLN unnecessarily.  JBS 20-Jan-1983
! 3-001 - Add updates from V3 sources.  GB 29-Apr-1983
! 3-002 - Call EDT$$TI_RDCMDLN directly. CJG 3-Jan-1983
!--

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

REQUIRE 'EDTSRC:TRAROUNAM';

FORWARD ROUTINE
    EDT$$GET_KPADCMD;				! Get a keypad command

!
! INCLUDE FILES:
!

REQUIRE 'EDTSRC:EDTREQ';

LIBRARY 'EDTSRC:KEYPADDEF';

!
! MACROS:
!
!	NONE
!
! EQUATED SYMBOLS:
!
!	NONE
!
! OWN STORAGE:
!
!	NONE
!
! EXTERNAL REFERENCES:
!
!	In the routine
%SBTTL 'EDT$$GET_KPADCMD  - get a keypad command'

GLOBAL ROUTINE EDT$$GET_KPADCMD 		! Get a keypad command
    =

!++
! FUNCTIONAL DESCRIPTION:
!
!	Get a keypad command.  Characters are read and translated until a complete
!	command is seen.  The characters are handled as follows:
!
!		Keypad and control characters are translated, and if they end in a '.' then the
!		command is complete
!
!		Other characters are treated as insertions and always complete.
!
! FORMAL PARAMETERS:
!
!	NONE
!
! IMPLICIT INPUTS:
!
!	CMD_BUF
!	CMD_PTR
!	TIN_ECHOFLG
!	MSGFLG
!	KPAD
!
! IMPLICIT OUTPUTS:
!
!	CMD_END
!	CC_DONE
!
! ROUTINE VALUE:
!
!	1 = ok, 0 = control C, 2 = end of journal file
!
! SIDE EFFECTS:
!
!	NONE
!
!--

    BEGIN

    EXTERNAL ROUTINE
	EDT$$SC_REVID,			! Turn on reverse video for nokeypad commands
	EDT$$CHK_CC,			! Check for control C
	EDT$$ERA_MSGLN : NOVALUE,	! Erase the message line
	EDT$$NXT_CMDCH,			! Get the next command character
	EDT$$TRN_KSTR,			! Build the command buffer
	EDT$$PUT_CMDCH : NOVALUE,	! Put a character in the command buffer
	EDT$$TI_RDCMDLN,
	EDT$$SC_NONREVID : NOVALUE;	! Make sure we are not in reverse video

    EXTERNAL
	CMD_BUF,			! Command buffer
	CMD_PTR,			! Pointer to next char in command buffer
	CMD_END,			! Pointer to end of info in command buffer
	KPAD,				! Keypad mode flag
	CC_DONE,			! Set to 1 if control C actually aborts something
	TIN_ECHOFLG,
	MSGFLG;

    LOCAL
	C,
	RES_TERM,
	SUCCEED,
	KEYS_SEEN;

    KEYS_SEEN = 0;
!+
! Loop until command is complete.
!-

    WHILE 1 DO
	BEGIN
!+
! Get the next command character. If the command was aborted, return.
!-
	SUCCEED = EDT$$NXT_CMDCH (C, 1);

	IF (.SUCCEED NEQ 1) THEN RETURN (.SUCCEED);

!+
! Check for control C and abort the command.
!-

	IF EDT$$CHK_CC ()
	THEN
	    BEGIN
	    CMD_END = CH$PTR (CMD_BUF,, BYTE_SIZE);

	    IF .KEYS_SEEN THEN CC_DONE = 1;

	    RETURN (0);
	    END;

	KEYS_SEEN = 1;
!+
! Erase the message line and make sure we are in reverse video mode
! if this is a nokeypad command
!-

	IF ((.MSGFLG NEQ 0) OR .TIN_ECHOFLG) THEN EDT$$ERA_MSGLN ();

	IF ( NOT .KPAD) THEN EDT$$SC_REVID ();

	SELECTONE .C OF
	    SET

	    [0 TO 31] :
!+
! Control character: if in keypad mode, translate it.
!-
		IF .KPAD
		THEN
		    BEGIN

		    IF EDT$$TRN_KSTR (.C, 1, 0) THEN RETURN (1);

		    END
		ELSE
		    BEGIN
!+
! In nokeypad mode, copy characters into the buffer.
!-

		    IF (EDT$$TI_RDCMDLN (.C, .CMD_PTR, CMD_PTR, ASC_K_CR, RES_TERM) EQL 2)
			THEN RETURN (2);

		    CMD_END = .CMD_PTR;
		    RETURN (1);
		    END;

	    [ASC_K_DEL, K_KPAD_BASE TO K_KEY_MAX] :
!+
! DEL, keypad or function key: always translate.
!-

		IF EDT$$TRN_KSTR (.C, 1, 0) THEN RETURN (1);

	    [OTHERWISE] :
!+
! Insertion character: make the command Ic^Z.
!-

		IF .KPAD
		THEN
		    BEGIN
		    EDT$$PUT_CMDCH (%C'I', 0);
		    EDT$$PUT_CMDCH (.C, 0);
		    EDT$$PUT_CMDCH (ASC_K_CTRL_Z, 0);
		    CMD_END = .CMD_PTR;
		    RETURN (1);
		    END
		ELSE
		    BEGIN
!+
! In nokeypad mode, copy characters into the buffer.
!-

		    IF (EDT$$TI_RDCMDLN (.C, .CMD_PTR, CMD_PTR, ASC_K_CR, RES_TERM) EQL 2)
			THEN RETURN (2);

		    CMD_END = .CMD_PTR;
		    RETURN (1);
		    END;

	    TES;

!+
! Check for control C and abort the command.
!-

	IF EDT$$CHK_CC ()
	THEN
	    BEGIN
	    CMD_END = CH$PTR (CMD_BUF,, BYTE_SIZE);

	    IF .KEYS_SEEN THEN CC_DONE = 1;

	    RETURN (0);
	    END;

	END;

    RETURN (1);
    END;					! of routine EDT$$GET_KPADCMD


END
ELUDOM