Google
 

Trailing-Edge - PDP-10 Archives - bb-r775d-bm_tops20_ks_upd_4 - 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) 1981, 1985 BY
!	      DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
!		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 WHICH 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