Trailing-Edge
-
PDP-10 Archives
-
BB-H138F-BM_1988
-
7-sources/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) DIGITAL EQUIPMENT CORPORATION 1981, 1988. 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 THAT 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