Trailing-Edge
-
PDP-10 Archives
-
bb-h138e-bm_tops20_v6_1_distr
-
6-1-sources/chmbegwrd.bli
There are 11 other files named chmbegwrd.bli in the archive.  Click here to see a list.
%TITLE 'CHMBEGWRD - search for beginning of word'
MODULE CHMBEGWRD (				! Search for beginning of word
		IDENT = '1-005'			! File: CHMBEGWRD.BLI Edit: STS1005
		) =
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 moves backward to the beginning of a word.
!
! 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$$FND_BWD  from module CHANGE.BLI.
! 1-002	- Regularize headers.  JBS 27-Feb-1981
! 1-003	- Fix module name.  JBS 02-Mar-1981
! 1-004 - Add handling of new word type. STS 23-Oct-1981
! 1-005 - Return if we're at the beginning of the buffer. STS 21-Jun-1982
!--
%SBTTL 'Declarations'
!
! TABLE OF CONTENTS:
!
REQUIRE 'EDTSRC:TRAROUNAM';
FORWARD ROUTINE
	EDT$$FND_BWD;			! Move backwards to the beginning of a word
!
! INCLUDE FILES:
!
REQUIRE 'EDTSRC:EDTREQ';
!
! MACROS:
!
!	NONE
!
! EQUATED SYMBOLS:
!
!	NONE
!
!OWN STORAGE:
!
!	NONE
!
! EXTERNAL REFERENCES:
!
!	In the routine
%SBTTL 'EDT$$FND_BWD  - search for the beginning of a word'
GLOBAL ROUTINE EDT$$FND_BWD (			! Search for the beginning of a word
	L_FLAG					! 1 = stop at start of line
	) =
!++
! FUNCTIONAL DESCRIPTION:
!
!	Move backwards to the beginning of a word.
!
! FORMAL PARAMETERS:
!
!  L_FLAG		1 = do not go beyond the beginning of a line
!
! IMPLICIT INPUTS:
!
!	US_ENT
!	LN_BUF
!	WRDTYP
!	LN_PTR
!
! IMPLICIT OUTPUTS:
!
!	NONE
!
! ROUTINE VALUE:
!
!	The length of the word
!
! SIDE EFFECTS:
!
!	NONE
!
!--
BEGIN
EXTERNAL ROUTINE
	EDT$$TST_ENTDELIM,		! Determine if the current character is an entity delimiter
	EDT$$CS_LEFT,			! Move left a character
	EDT$$CS_RIGHT;			! Move right a character
EXTERNAL
	US_ENT : VECTOR,		! Pointers to user defined entities
	LN_BUF,				! Current line buffer
	WRDTYP,				! indicate whether or not to include delimiters
	LN_PTR;				! Current character pointer
LOCAL
	SIZE;
    SIZE = 0;
!+
! Go past all spaces to the left first. If nodelimiters set, also go past
! all delimiters.
!-
    IF .WRDTYP EQL NOT_DELIMITED
    THEN
	WHILE (EDT$$TST_ENTDELIM(.US_ENT[0]))DO
	    IF EDT$$CS_LEFT() THEN SIZE = .SIZE + 1 ELSE RETURN (.SIZE)
    ELSE
	WHILE (CH$RCHAR (.LN_PTR) EQL %C' ') DO
	    IF EDT$$CS_LEFT () THEN SIZE = .SIZE + 1 ELSE RETURN (.SIZE);
!+
! Keep moving left until we hit a terminator or beginning of file.
!-
    WHILE ( NOT EDT$$TST_ENTDELIM (.US_ENT [0])) DO
	BEGIN
!+
! If L_FLAG is 1, do not go beyond the beginning of line.
!-
	IF ((.L_FLAG EQL 1) AND CH$PTR_EQL (.LN_PTR, CH$PTR (LN_BUF,, BYTE_SIZE)))
	    THEN EXITLOOP;
!+
! Do not go beyond the beginning of file.
!-
	IF ( NOT EDT$$CS_LEFT ()) THEN EXITLOOP;
!+
! Continue search.
!-
	SIZE = .SIZE + 1;
	END;
!+
! If we moved across any characters before finding a delimiter, then do
! not include the delimiter in the word, otherwise, the word is the delimiter
! character.
!-
    IF ((.SIZE GTR 0) AND EDT$$TST_ENTDELIM (.US_ENT [0]))
    THEN
	BEGIN
	SIZE = .SIZE - 1;
	EDT$$CS_RIGHT ();
	END;
    RETURN (.SIZE);
    END;
END
ELUDOM