Google
 

Trailing-Edge - PDP-10 Archives - BB-H138F-BM_1988 - 7-sources/chmdellin.bli
There are 11 other files named chmdellin.bli in the archive. Click here to see a list.
 %TITLE 'CHMDELLIN - delete lines'
MODULE CHMDELLIN (				! Delete lines
		IDENT = '3-001'			! File: CHMDELLIN.BLI Edit: GB3001
		) =
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 deletes lines of text (change mode).
!
! ENVIRONMENT:	Runs at any access mode - AST reentrant
!
! AUTHOR: Bob Kushlis, CREATION DATE: Unknown
!
! MODIFIED BY:
!
! 1-001	- Original.  DJS 04-Feb-1981.  This routine was created by
!	extracting the routine DELETE_LINES from module CHANGE.BLI.
! 1-002	- Regularize headers.  JBS 25-Feb-1981
! 1-003	- Fix module name.  JBS 03-Mar-1981
! 1-004	- Use the ASSERT macro.  JBS 01-Jun-1981
! 1-005	- EDT$$SEL_RNGPOS has 3 values.  JBS 02-Jun-1981
! 1-006	- Put in a check for control C so the 'working' message will flash
!	   during a long CUT command.  JBS 13-Jan-1982
! 1-007	- New screen update logic.  JBS 13-Sep-1982
! 1-008	- Remove the unused reference to EDT$$MRK_LNCHG.  JBS 27-Dec-1982
! 1-009	- Add a parameter to EDT$$COMB_LN.  JBS 28-Dec-1982
!
! 3-001 - Add updates from V3 sources.  GB 26-Apr-1983
!--

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

REQUIRE 'EDTSRC:TRAROUNAM';

FORWARD ROUTINE
    EDT$$DEL_TXTLN : NOVALUE;			! Delete whole lines of text

!
! INCLUDE FILES:
!

REQUIRE 'EDTSRC:EDTREQ';

!
! MACROS:
!
!	NONE
!
! EQUATED SYMBOLS:
!
!	NONE
!
! OWN STORAGE:
!
!	NONE
!
! EXTERNAL REFERENCES:
!
!	In the routine
%SBTTL 'EDT$$DEL_TXTLN  - delete lines'

GLOBAL ROUTINE EDT$$DEL_TXTLN (			! Delete lines
    NUM_LINES, 					! Number of lines to delete
    END_POS					! Place to stop
    ) : NOVALUE =

!++
! FUNCTIONAL DESCRIPTION:
!
!	This routine deletes text on NUM_LINES lines starting on the
!	current line at LN_PTR  and going to the END_POS
!	on the last line.
!
! FORMAL PARAMETERS:
!
!  NUM_LINES		Number of lines to delete
!
!  END_POS		Place to stop on last line
!
! IMPLICIT INPUTS:
!
!	LN_PTR
!	SEL_LN
!	LN_BUF
!	LN_END
!	LN_LEN
!	LNO0
!
! IMPLICIT OUTPUTS:
!
!	NONE
!
! ROUTINE VALUE:
!
!	NONE
!
! SIDE EFFECTS:
!
!	NONE
!
!--

    BEGIN

    EXTERNAL ROUTINE
	EDT$$DEL_CHS : NOVALUE,			! Delete part of the current line
	EDT$$COMB_LN : NOVALUE,			! Combine the current line with the one immediately above it
	EDT$$CS_DWN,				! Move down a line
	EDT$$GET_TXTLN,				! Get current line in line buffer
	EDT$$SAV_LN : NOVALUE,			! Save a line in the auxiliary buffer
	EDT$$SC_DELLN,				! Delete lines from screen
	EDT$$DEL_CURLN,				! Delete a line from buffer
	EDT$$CHK_CC;				! Check for a control C

    EXTERNAL
	LN_BUF,					! Current line buffer
	LN_END,					! End of current line pointer
	LN_LEN,					! Length of current line
	LN_PTR;					! Current character pointer

    LOCAL
	LC;

!+
! Handle the first line.
!-
    LC = .LN_END;

    IF (.NUM_LINES EQL 1) THEN LC = .END_POS;

    EDT$$DEL_CHS (.LN_PTR, .LC);
!+
! Now, if there are more, loop though the middle ones.
!-

    IF (.NUM_LINES GTR 1)
    THEN
	BEGIN
	EDT$$CS_DWN ();

	INCR I FROM 3 TO .NUM_LINES DO
	    BEGIN
!+
! We check for a control C here, not because we wish to terminate
! the process if a control C is typed but only to make sure the
! 'working' message flashes during a long CUT command.
!-
	    EDT$$CHK_CC ();
!+
! Delete the entire line.
!-
	    EDT$$SAV_LN (CH$PTR (LN_BUF, 0, BYTE_SIZE), .LN_LEN);
	    EDT$$DEL_CURLN ();

    	    EDT$$GET_TXTLN ();
	    END;

!+
! Handle the last line.
!-
	EDT$$DEL_CHS (.LN_PTR, .END_POS);
!+
! And combine the various fragments.
!-
	EDT$$COMB_LN (1);
	END;

    END;

END
ELUDOM