Trailing-Edge
-
PDP-10 Archives
-
BB-H138F-BM_1988
-
7-sources/extend.bli
There are 10 other files named extend.bli in the archive. Click here to see a list.
%TITLE 'EXTEND - EXTEND change-mode command'MODULE EXTEND ( ! EXTEND change-mode command
IDENT = '3-004' ! File: EXTEND.BLI Edit: CJG3004
) =
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:
!
! Do the EXTEND change-mode command, which allows a line-mode
! command to be executed from change mode.
!
! ENVIRONMENT: Runs at any access mode - AST reentrant
!
! AUTHOR: Bob Kushlis, CREATION DATE: 6-AUG-1979
!
! MODIFIED BY:
!
! 1-001 - Original. DJS 18-FEB-1981. This module was created by
! extracting routine EDT$$EXT_CMD from module EDTCTR.
! 1-002 - Regularize headers. JBS 04-Mar-1981
! 1-003 - Do prompting from a global and remove LLINE and LCHANGE. JBS 23-Oct-1981
! 1-004 - Replace L_LINE and L_CHANGE 7-Dec-81
! 1-005 - Add EDT$$LOAD_EXTEND, so that EDT$LNM_CMD can reload this routine into
! memory prior to returning to it. Also, use a different symbol
! for EDT$$LNM_CMD, so the overlay analyzer can be told to ignore it.
! JBS 12-Mar-1982
! 1-006 - Do the same for EDT$$PA_CMD. JBS 16-Mar-1982
! 1-007 - Remove L_LINE and L_CHANGE. JBS 03-Jun-1982
! 1-008 - Allow any key to terminate the "Continue" message. SMB 10-Jun-1982
! 1-009 - Fix bug in /RECOVER associated with above change. SMB 16-Jun-1982
! 1-010 - Position the cursor better when waiting for a command to execute.
! SMB 28-Jun-1982
! 1-011 - We can't use TI_WRSTR unless this is a VT100/52. SMB 02-Jul-1982
! 1-012 - Use new formatting flags to control output at the bottom
! of the screen. JBS 05-Jul-1982
! 1-013 - Fix up response to PRTC when reading the journal file. JBS 06-Jul-1982
! 1-014 - Check for control C. STS 15-Jul-1982
! 1-015 - Write out the journal buffer before asking for input. JBS 03-Aug-1982
! 1-016 - Force a cursor positioning sequence and reverse video. SMB 30-Aug-1982
! 1-017 - Output the format buffer after turning off reverse video. SMB 01-Sept-1982
! 1-018 - Don't destory EDT$$G_PRV_COL, it is now being maintained accurately. JBS 05-Oct-1982
! 1-019 - Force a write to the journal file after return is pressed. STS 07-Oct-1982
! 1-020 - Don't clear EDT$$G_SCR_CHGD. JBS 09-Oct-1982
! 1-021 - Check for hardcopy terminal. STS 02-Dec-198_
! 1-022 - Also check for terminal type unknown. STS 03-Dec-1982
! 1-023 - Don't permit a long response to destroy the stack. JBS 13-Dec-1982
! 3-001 - Don't need overlay code. CJG 17-Apr-1983
! 3-002 - Add updates from V3 sources. GB 27-Apr-1983
! 3-003 - Add some checking for PUSH command. CJG 22-Nov-1983
! 3-004 - Clear TIN_ECHOFLG is TXT_ONSCR is set so that <GOLD>repeat will
! always display the count on the message line. CJG 4-Jan-1983
!--
%SBTTL 'Declarations'
!
! TABLE OF CONTENTS:
!
REQUIRE 'EDTSRC:TRAROUNAM';
FORWARD ROUTINE
EDT$$EXT_CMD : NOVALUE;
!
! INCLUDE FILES:
!
REQUIRE 'EDTSRC:EDTREQ';
REQUIRE 'SYS:JSYS';
!
! MACROS:
!
! NONE
!
! EQUATED SYMBOLS:
!
! NONE
!
! OWN STORAGE:
!
! NONE
!
! EXTERNAL REFERENCES:
!
! In the routine
%SBTTL 'EDT$$EXT_CMD - EXTEND change-mode command'
GLOBAL ROUTINE EDT$$EXT_CMD ! EXTEND change-mode command
: NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
! Do the EXTEND change-mode command. This allows a line-mode
! command to be executed from change mode.
!
! FORMAL PARAMETERS:
!
! NONE
!
! IMPLICIT INPUTS:
!
! MESSAGE_LINE
! EXI
! CMD_BUF
! CMD_PTR
! CMD_END
! EXITD
! RCOV_MOD
! PA_STK
!
! IMPLICIT OUTPUTS:
!
! SCR_CHGD
! TXT_ONSCR
! FMT_LNPOS
! LASTMSG
! TIN_ECHOFLG
! TIN_ECHOPOS
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS:
!
! MANY
!
!--
BEGIN
EXTERNAL ROUTINE
EDT$$SC_REVID,
EDT$$SC_NONREVID,
EDT$$SC_POSCSIF,
EDT$$FMT_CRLF,
EDT$$STOP_WKINGMSG,
EDT$$RD_JOUTXT,
EDT$$TI_WRSTR,
EDT$$TI_RDCMDLN,
EDT$$TI_INPCH,
EDT$$CHK_CC,
EDT$$MSG_TOSTR,
EDT$$OUT_FMTBUF, ! Output the format buffer
EDT$$PA_CMD, ! Parse a command
EDT$$LNM_CMD, ! Execute a line mode command
EDT$$TI_FLUSHJOUFI : NOVALUE, ! Write out the journal file's buffer
EDT$$FMT_MSG : NOVALUE, ! Output a message
EDT$$ALO_HEAP, ! Allocate heap storage
EDT$$DEA_HEAP : NOVALUE; ! Deallocate heap storage
EXTERNAL
PUT_JOU, ! force a write to journal file
MESSAGE_LINE, ! Message lines are this + 1
EXI, ! Change mode has been exited
FMT_WRRUT, ! Output format routine
TEMP_BUFFER, ! Temporary storage
CMD_BUF, ! Command line buffer
CMD_PTR, ! Pointer into command line buffer
CMD_END, ! End of current command
EXITD, ! Did we exit with the last command?
EDIT_MOD, ! Current editing mode
RCOV_MOD, ! Are we in recovery mode?
SCR_CHGD, ! screen changed
PUSH_FLAG, ! Last command was PUSH
TI_TYP, ! kind of terminal
FMT_LNPOS, ! Position on the output line
TXT_ONSCR, ! Text was written to screen
TIN_ECHOFLG, ! Echo status
TIN_ECHOPOS, ! Echo position
PA_STK, ! Parser semantic stack
PA_MORE, ! More data on command line
FMT_BOT, ! 1 = messages at bottom of screen
FMT_LCNT,
CC_DONE, ! Control-c flag
LASTMSG; ! The last message printed. 1 = None
MESSAGES ((PRERETCON, INSMEM));
LOCAL
CONT_RESP : REF BLOCK [CH$ALLOCATION (256)],
C,
TERM,
LEN;
TXT_ONSCR = 0;
EDIT_MOD = LINE_MODE;
!+
! Position the cursor to the message line.
!-
IF ((.TI_TYP NEQ TERM_HCPY) AND (.TI_TYP NEQ TERM_UNKNOWN))
THEN
BEGIN
EDT$$SC_POSCSIF (.MESSAGE_LINE + 1, 0);
FMT_LNPOS = 0;
FMT_BOT = 1;
FMT_LCNT = 0;
EDT$$SC_REVID ();
END;
!+
! Copy the remainder of the command and append <CR><LF><NUL>
! Then place the command in the rescan buffer and make it available.
!-
C = CH$MOVE (CH$DIFF (.CMD_END, .CMD_PTR), .CMD_PTR, CH$PTR (TEMP_BUFFER));
CH$MOVE (3, CH$PTR (UPLIT (%STRING (%CHAR (ASC_K_CR), %CHAR (ASC_K_LF),
%CHAR (0)))), .C);
CMD_PTR = .CMD_END;
_RSCAN (CH$PTR (TEMP_BUFFER)); ! Put command in rescan buffer
_RSCAN ($RSINI);
DO
BEGIN
IF EDT$$PA_CMD (0,0) THEN EDT$$LNM_CMD (PA_STK) ELSE TXT_ONSCR = 1;
END
UNTIL ((.PA_MORE EQL 0) OR (.EDIT_MOD EQL CHANGE_MODE) OR (EDT$$CHK_CC ()));
!+
! See if the reason we are exiting is because of a control C seen.
!-
IF ( NOT (.PA_MORE EQL 0) OR (.EDIT_MOD EQL CHANGE_MODE))
THEN
CC_DONE = 1;
!+
! Text on the screen means we have more than 2 lines of messages and that
! we need to issue the Press return to continue message.
!-
IF ((.TXT_ONSCR NEQ 0) AND (.FMT_WRRUT EQL EDT$$TI_WRSTR))
THEN
BEGIN
!+
! Allocate heap storage for the response, even though we use so much space only in /RECOVER mode,
! so that if we run out of storage during /RECOVER we will also run out in the original session.
!-
IF ( NOT EDT$$ALO_HEAP (%REF (256), CONT_RESP))
THEN
BEGIN
EDT$$FMT_MSG (EDT$_INSMEM);
END
ELSE
BEGIN
IF (.RCOV_MOD EQL 0)
THEN
BEGIN
EDT$$STOP_WKINGMSG ();
!+
! Output the "Press return to continue" message and wait for ANY key
! to be pressed before refreshing the screen and returning to change mode.
!-
EDT$$FMT_CRLF ();
!+
! Don't call FMT_MSG because we don't want the bell to ring.
!-
EDT$$SC_REVID ();
EDT$$MSG_TOSTR (EDT$_PRERETCON);
EDT$$OUT_FMTBUF ();
!+
! Make sure the journal buffer has been written to the journal file,
! since we are about to wait for terminal input.
!-
EDT$$TI_FLUSHJOUFI (%C'T');
!+
! Get the next character of input, including any characters generated by
! striking a keypad key.
!-
EDT$$TI_INPCH (C);
EDT$$TI_RDCMDLN (.C, .CMD_PTR, CMD_PTR, .C, TERM);
!+
! Make sure that the echo flag and position are clear
!-
TIN_ECHOFLG = 0;
TIN_ECHOPOS = 0;
END
ELSE
EDT$$RD_JOUTXT (.CONT_RESP, LEN);
EDT$$DEA_HEAP (%REF (256), CONT_RESP);
END;
LASTMSG = 1;
IF (.PUSH_FLAG EQL 0) THEN SCR_CHGD = 1;
END;
IF (.EXITD NEQ 0) THEN EXI = 1;
PUT_JOU = 1; ! make sure the response gets written out alone
EDT$$SC_NONREVID ();
EDT$$OUT_FMTBUF ();
PUSH_FLAG = 0; ! No last command now
FMT_BOT = 0;
EDIT_MOD = CHANGE_MODE;
END; ! of routine EDT$$EXT_CMD
END
ELUDOM