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