Google
 

Trailing-Edge - PDP-10 Archives - CFS_TSU04_19910205_1of1 - update/t20src/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) 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 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