Trailing-Edge
-
PDP-10 Archives
-
BB-H138F-BM_1988
-
7-sources/chmcmblin.bli
There are 11 other files named chmcmblin.bli in the archive. Click here to see a list.
%TITLE 'CHMCMBLIN - combine lines'
MODULE CHMCMBLIN ( ! Combine lines
IDENT = '3-002' ! File: CHMCMBLIN.BLI Edit: GB3002
) =
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:
!
! This module combines the current line with the one
! immediately above it.
!
! 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$$COMB_LN from module CHANGE.BLI.
! 1-002 - Regularize headers. JBS 25-Feb-1981
! 1-003 - Fix module name. JBS 02-Mar-1981
! 1-004 - Use the ASSERT macro. JBS 01-Jun-1981
! 1-005 - EDT$$SEL_RNGPOS can have values -1, 0 and 1. JBS 02-Jun-1981
! 1-006 - Use new message codes. JBS 04-Aug-1981
! 1-007 - Fix bug where you cannot combine lines because length >255.
! STS 23-Oct-1981
! 1-008 - New screen update logic. JBS 13-Sep-1982
! 1-009 - Make call to edt$$tst_eob in line. STS 22-Sep-1982
! 1-010 - Remove EDT$$G_LN_NO for new screen update logic. JBS 29-Sep-1982
! 1-011 - Move call to EDT$$MRK_LNCHG. JBS 27-Oct-1982
! 1-012 - Change order of operations to improve screen updating. JBS 01-Dec-1982
! 1-013 - Change call to EDT$$MRK_LNCHG. JBS 27-Dec-1982
! 1-014 - Add special cases for empty lines, to improve screen updating. JBS 28-Dec-1982
! 1-015 - Add parameter to suppress special cases. JBS 28-Dec-1982
! 1-016 - Don't delete the current line if it is of zero length. JBS 29-Dec-1982
! 3-001 - Replace CPY_MEM with CPY_STR and allow big bytes. GB 3-Mar-1983
! 3-002 - Add updates from V3 sources. GB 04-May-1983
!--
%SBTTL 'Declarations'
!
! TABLE OF CONTENTS:
!
REQUIRE 'EDTSRC:TRAROUNAM';
FORWARD ROUTINE
EDT$$COMB_LN : NOVALUE; ! Combine the current line with the one immediately above it
!
! INCLUDE FILES:
!
REQUIRE 'EDTSRC:EDTREQ';
!
! MACROS:
!
! NONE
!
! EQUATED SYMBOLS:
!
! NONE
!
! OWN STORAGE:
!
! NONE
!
! EXTERNAL REFERENCES:
!
! In the routine
%SBTTL 'EDT$$COMB_LN - combine lines'
GLOBAL ROUTINE EDT$$COMB_LN ( ! Combine lines
LEN_OPT) : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
! This routine combines the current line with the one immediately
! above it.
!
! FORMAL PARAMETERS:
!
! LEN_OPT 1 = do optimizations based on line lengths
!
! IMPLICIT INPUTS:
!
! LNO0
! LN_BUF
! LN_END
! LN_LEN
! WK_LN
!
! IMPLICIT OUTPUTS:
!
! LN_PTR
! SEL_POS
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS:
!
! NONE
!
!--
BEGIN
EXTERNAL ROUTINE
EDT$$MSG_BELL : NOVALUE, ! Output a message to the terminal with a warning bell
EDT$$MRK_LNCHG : NOVALUE, ! Record line updates
EDT$$UPD_LNLEN : NOVALUE, ! Update the length of the current line
EDT$$DEL_CURLN, ! Delete a line from buffer
EDT$$RD_PRVLN, ! Move backward a line
EDT$$RD_NXTLN, ! Move forward a line
EDT$$RPL_CHGDLN : NOVALUE; ! Replace a changed line
EXTERNAL
LN_BUF, ! Current line buffer
LN_PTR, ! Current character pointer
LN_END, ! End of current line pointer
LN_LEN, ! Length of current line
EOB_LN,
WK_LN : REF LIN_BLOCK; ! Current line pointer
!+
! Declare the message codes to be used.
!-
MESSAGES ((LINEXC255));
LOCAL
EOB,
LEN;
!+
! Remember if we are at the end of the buffer.
!-
EOB = (.WK_LN EQLA EOB_LN);
!+
! Move back a line, give up if it fails.
!-
IF ( NOT EDT$$RD_PRVLN ()) THEN RETURN;
!+
! Get length of add on line.
!-
LEN = .WK_LN [LIN_LENGTH];
!+
! Make sure the two do not exceed 255 characters.
!-
IF ((.LN_LEN + .LEN) GTR 255)
THEN
BEGIN
EDT$$MSG_BELL (EDT$_LINEXC255);
EDT$$RD_NXTLN ();
RETURN;
END;
!+
! If the add-on line is empty, just delete it.
!-
IF ((.LEN EQL 0) AND .LEN_OPT)
THEN
BEGIN
EDT$$DEL_CURLN ();
RETURN;
END;
!+
! The add-on line is not empty, or length optimization is not permitted. Move the current line over.
!-
LN_PTR = CH$PTR (LN_BUF, .LEN, BYTE_SIZE);
EDT$$CPY_STR (.LN_LEN, CH$PTR (LN_BUF, 0, BYTE_SIZE), .LN_PTR);
!+
!+
! Move in the text from the previous line.
!-
EDT$$CPY_STR (.LEN, CH$PTR (WK_LN [LIN_TEXT], 0, BYTE_SIZE), CH$PTR (LN_BUF, 0, BYTE_SIZE));
EDT$$MRK_LNCHG (SCR_EDIT_MODIFY, .LEN);
!+
! Update the length field.
!-
EDT$$UPD_LNLEN (.LEN);
EDT$$RPL_CHGDLN ();
!+
! Delete the first line unless it is just before EOB.
!-
IF (( NOT .EOB) OR (.LN_LEN EQL 0))
THEN
BEGIN
IF ( NOT .EOB) THEN EDT$$RD_NXTLN ();
EDT$$DEL_CURLN ();
IF ( NOT .EOB) THEN EDT$$RD_PRVLN ();
END;
END; ! of routine EDT$$COMB_LN
!<BLF/PAGE>
END ! of module EDT$CHMCMBLIN
ELUDOM