Trailing-Edge
-
PDP-10 Archives
-
bb-h138f-bm
-
7-sources/lxcom.bli
There are 10 other files named lxcom.bli in the archive. Click here to see a list.
%TITLE 'LXCOM - execute a line-mode command'
MODULE LXCOM ( ! Execute a line-mode command
IDENT = '3-008' ! File: LXCOM.BLI Edit: CJG3008
) =
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:
!
! Execute a line-mode command. Most of the work is done by external routines.
!
! ENVIRONMENT: User mode
!
! AUTHOR: Bob Kushlis, CREATION DATE: February 3, 1978
!
! MODIFIED BY:
!
! 1-001 - Original. DJS 10-MAR-81. This module was created by
! extracting the routine EDT$$LNM_CMD from EXEC.BLI.
! 1-002 - Fix module name. JBS 23-Mar-1981
! 1-003 - Make sure the routine names start with EDT$$. JBS 31-Mar-1981
! 1-004 - Use the ASSERT macro. JBS 01-Jun-1981
! 1-005 - Use the new message codes. JBS 04-Aug-1981
! 1-006 - Add a synonym for the entry point name, so the overlay analyzer
! can be told to ignore it, and make sure the EXTEND module
! is in memory before returning. JBS 12-Mar-1982
! 1-007 - Revise the overlay structure, since the method outlined above
! can cause an undefined symbol. JBS 15-Mar-1982
! 1-008 - Remove the reference to EDT$$LOAD_EXTEND. JBS 18-Mar-1982
! 1-009 - Set stay flag if command is a write. STS 10-May-1982
! 1-010 - Bypass EDT$$LNM_HLP by calling EDT$$OUT_HLP directly. JBS 03-Jun-1982
! 1-011 - Set TXT_ONSCR for commands that don't. SMB 11-Jun-1982
! 1-012 - Set stay flag if command is a print. STS 10-May-1982
! 1-013 - Modify the setting of message flags. SMB 23-Jun-1982
! 1-014 - Use EDT$$FMT_CRLF instead of EDT$$OUT_FMTBUF. This means we don't have
! to set MSGFLG or TXT_ONSCR in most cases. JBS 05-Jul-1982
! 1-015 - Move setting of SCR_CHGD to the routines called. JBS 07-Jul-1982
! 1-016 - Set SCR_CHG in FIND only if it succeeds. JBS 07-Jul-1982
! 1-017 - Remove EDT$$G_SCR_CHGD, the new screen logic does not need it. JBS 09-Oct-1982
! 1-018 - Put code for edt$$rng_posfrst in line. STS 11-Oct-1982
! 1-019 - Remove forced setting of G_TXT_ONSCR for insert and replace. SMB 14-Dec-1982
! 3-001 - Modify for use with the TOPS-20 parser. CJG 14-Mar-1983
! 3-002 - Don't need overlay code. CJG 17-Apr-1983
! 3-003 - Add updates from V3 sources. GB 03-May-1983
! 3-004 - Add PUSH command and make rest more readable. CJG 20-Sep-1983
! 3-005 - Fix line-mode help used in change-mode to get good display. CJG 25-Sep-1983
! 3-006 - Add TRACE and XDDT commands. CJG 10-Oct-1983
! 3-007 - Modify the coding of the XDDT command. CJG 9-Dec-1983
! 3-008 - Modify ASSERT macro to include error code. CJG 30-Jan-1984
!--
%SBTTL 'Declarations'
!
! TABLE OF CONTENTS:
!
REQUIRE 'EDTSRC:TRAROUNAM';
FORWARD ROUTINE
EDT$$LNM_CMD : NOVALUE; ! Execute the last parsed command
!
! INCLUDE FILES:
!
REQUIRE 'EDTSRC:EDTREQ';
!
! MACROS:
!
! NONE
!
! EQUATED SYMBOLS:
!
! NONE
!
! OWN STORAGE:
!
! NONE
!
! EXTERNAL REFERENCES:
!
! In the routines
%SBTTL 'EDT$$LNM_CMD - execute a line-mode command'
GLOBAL ROUTINE EDT$$LNM_CMD ( ! Execute a line-mode command
COM_START ! Command to execute
) : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
! This routine executes the command which was last parsed.
! It is assumed that the command is described in the first
! node on the parsing stack.
!
! FORMAL PARAMETERS:
!
! COM_START Node block containing the command to execute
!
! IMPLICIT INPUTS:
!
! RCOV_MOD
! PA_STK The semantic stack containing the command to be executed
!
! IMPLICIT OUTPUTS:
!
! EDIT_MOD
! EXE_CURCMD
! EXE_SBLK
! EXE_SBITS
! EXE_QRYQUIT
! EXITD
! TXT_ONSCR
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS:
!
! MANY
!
!--
BEGIN
EXTERNAL ROUTINE
EDT$$SC_NONREVID, ! Turn off reverse video
EDT$$STOP_WKINGMSG, ! Turn off timer AST
EDT$$CLR_CMD : NOVALUE, ! Process the CLEAR command
EDT$$DEFK_CMD : NOVALUE, ! Process the DEFINE KEY command
EDT$$DEFM_CMD : NOVALUE, ! Process the DEFINE MACRO command
EDT$$DEL_CMD : NOVALUE, ! Process the DELETE command
EDT$$MAC_CALL, ! Invoke a macro
EDT$$EXI_CMD : NOVALUE, ! Process the EXIT command
EDT$$FILL_CMD : NOVALUE, ! Process the FILL command
EDT$$FMT_CRLF, ! Terminate a line
EDT$$FMT_MSG, ! Put the text of a message in the format buffer
EDT$$OUT_FMTBUF : NOVALUE, ! Output the buffer
EDT$$OUT_HLP, ! Get help
EDT$$INCL_CMD : NOVALUE, ! Process the INCLUDE command
EDT$$INS_CMD : NOVALUE, ! Process the INSERT command
EDT$$DEL_LNS, ! Delete a range of lines
EDT$$INS_TXT : NOVALUE, ! Insert text
EDT$$MOVCPY_CMD : NOVALUE, ! Process the MOVE and COPY commands
EDT$$NULL_CMD : NOVALUE, ! Process the null command
EDT$$PUSH_CMD : NOVALUE, ! Process the PUSH command
EDT$$XDDT_CMD : NOVALUE, ! Process the XDDT command
EDT$$PRNT_CMD : NOVALUE, ! Process the PRINT command
EDT$$RNG_REPOS,
EDT$$RSEQ_CMD : NOVALUE, ! Process the RESEQUENCE command
EDT$$SET_CMD : NOVALUE, ! Process the SET command
EDT$$SHW_CMD : NOVALUE, ! Process the SHOW command
EDT$$LN_SUBCMD : NOVALUE, ! Process the SUBSTITUTE command
EDT$$SUB_NXTCMD : NOVALUE, ! Process the SUBSTITUTE NEXT command
EDT$$TSADJ_CMD : NOVALUE, ! Process the TABS ADJUST command
EDT$$TY_CMD : NOVALUE, ! Process the TYPE command
EDT$$WR_CMD : NOVALUE, ! Process the WRITE command
$TRACE; ! Process the TRACE command
EXTERNAL
EDIT_MOD,
RCOV_MOD,
TXT_ONSCR, ! Use "Press return to continue" after this command is done
EXITD,
EXE_CURCMD : REF NODE_BLOCK, ! Pointer to the current command.
EXE_QRYQUIT, ! Quit flag for /EDT$$PROC_QRYQAL operations.
RNG_FRSTLN,
CUR_BUF : REF TBCB_BLOCK,
RNG_ORIGPOS : POS_BLOCK,
EXE_SBITS, ! The options switches.
EXE_SBLK : REF NODE_BLOCK; ! The option switch value block.
MESSAGES ((NODDTAVL));
EXE_CURCMD = .COM_START;
!+
! The top level had better be a command code. Ignore it if first word is -1.
!-
IF (.EXE_CURCMD [COM_NUM] EQL %O'777777') THEN RETURN;
ASSERT (17, .EXE_CURCMD [NODE_TYPE] EQL COM_NODE);
EXE_SBLK = .EXE_CURCMD [SWITS];
IF (.EXE_SBLK NEQ 0)
THEN
EXE_SBITS = .EXE_SBLK [SW_BITS]
ELSE
EXE_SBITS = 0;
EXE_QRYQUIT = 0;
CASE .EXE_CURCMD [COM_NUM] FROM COM_NULL TO LAST_COM OF
SET
[COM_CHANGE] :
BEGIN
!+
! Position to the first line of the specified range
! and set the current mode to change mode.
!-
RNG_FRSTLN = 1;
EDT$$CPY_MEM(POS_SIZE, .CUR_BUF, RNG_ORIGPOS);
IF EDT$$RNG_REPOS (.EXE_CURCMD [RANGE1]) THEN EDIT_MOD = CHANGE_MODE;
END;
[COM_CLEAR] :
BEGIN
EDT$$CLR_CMD ();
END;
[COM_COPY] :
BEGIN
EDT$$MOVCPY_CMD (0);
END;
[COM_DEFINE] :
BEGIN
EDT$$DEFK_CMD ();
END;
[COM_DEF_MAC] :
BEGIN
EDT$$DEFM_CMD ();
END;
[COM_DELETE] :
BEGIN
EDT$$DEL_CMD ();
END;
[COM_EXIT] :
BEGIN
EDT$$EXI_CMD ();
END;
[COM_FILL] :
BEGIN
EDT$$FILL_CMD ();
END;
[COM_FIND] :
BEGIN
RNG_FRSTLN = 1;
EDT$$CPY_MEM(POS_SIZE, .CUR_BUF, RNG_ORIGPOS);
EDT$$RNG_REPOS (.EXE_CURCMD [RANGE1]);
END;
[COM_HELP] :
BEGIN
EDT$$SC_NONREVID ();
EDT$$OUT_FMTBUF ();
EDT$$OUT_HLP (.EXE_CURCMD [FILSPEC], .EXE_CURCMD [FSPCLEN], 1);
TXT_ONSCR = 1;
END;
[COM_INCLUDE] :
BEGIN
EDT$$INCL_CMD ();
END;
[COM_INSERT] :
BEGIN
EDT$$INS_CMD ();
END;
[COM_MAC_CALL] :
BEGIN
EDT$$MAC_CALL (.EXE_CURCMD [RANGE1]);
END;
[COM_MOVE] :
BEGIN
EDT$$MOVCPY_CMD (1);
END;
[COM_NULL] :
BEGIN
EDT$$STOP_WKINGMSG ();
EDT$$NULL_CMD ();
END;
[COM_PRINT] :
BEGIN
EXE_SBITS<OPB_STAY> = 1; ! print never changes the position
EDT$$PRNT_CMD ();
END;
[COM_PUSH] :
BEGIN
EDT$$STOP_WKINGMSG ();
EDT$$SC_NONREVID ();
EDT$$OUT_FMTBUF (); ! Force screen cleanup
EDT$$PUSH_CMD ();
END;
[COM_QUIT] :
BEGIN
EXITD = 1;
EDT$$FMT_CRLF ();
END;
[COM_REPLACE] :
BEGIN
IF EDT$$DEL_LNS () THEN EDT$$INS_TXT ();
END;
[COM_RESEQ] :
BEGIN
EDT$$RSEQ_CMD ();
END;
[COM_SET] :
BEGIN
EDT$$SET_CMD ();
END;
[COM_SHOW] :
BEGIN
EDT$$SHW_CMD ();
END;
[COM_SUBS] :
BEGIN
EDT$$LN_SUBCMD ();
END;
[COM_SUBS_NEXT] :
BEGIN
EDT$$SUB_NXTCMD ();
END;
[COM_TADJ] :
BEGIN
EDT$$TSADJ_CMD ();
END;
[COM_TRACE] :
BEGIN
BIND
SWITCH = .EXE_CURCMD [SWITS] : NODE_BLOCK;
IF (.EXE_CURCMD [AS_STR] NEQ 0)
THEN
CH$WCHAR (0, CH$PLUS (.EXE_CURCMD [AS_STR], .EXE_CURCMD [AS_LEN]));
IF (.SWITCH NEQ 0)
THEN
BEGIN
IF (.SWITCH [AS_STR] NEQ 0)
THEN
CH$WCHAR (0, CH$PLUS (.SWITCH [AS_STR], .SWITCH [AS_LEN]));
$TRACE (.EXE_CURCMD [SET_TYPE], .EXE_CURCMD [AS_STR],
.SWITCH [SW_VAL2], .SWITCH [AS_STR]);
END
ELSE
$TRACE (.EXE_CURCMD [SET_TYPE], .EXE_CURCMD [AS_STR], 0, 0);
END;
[COM_TYPE] :
BEGIN
EDT$$STOP_WKINGMSG ();
EDT$$SC_NONREVID ();
EDT$$TY_CMD ();
END;
[COM_XDDT] :
BEGIN
EDT$$SC_NONREVID ();
EDT$$XDDT_CMD ();
END;
[COM_WRITE] :
BEGIN
EXE_SBITS<OPB_STAY> = 1; ! write never changes the position
EDT$$WR_CMD ();
END;
[OUTRANGE] :
BEGIN
ASSERT (17, 0);
END;
TES;
IF .EXITD
THEN
IF .EXE_SBITS<OPB_SAVE> THEN EXITD = 3;
IF .RCOV_MOD THEN EXITD = 0;
END; ! of routine EDT$$LNM_CMD
END
ELUDOM