Google
 

Trailing-Edge - PDP-10 Archives - BB-R775E-BM - sources/edt/chmgbuf.bli
There are 11 other files named chmgbuf.bli in the archive. Click here to see a list.
 %TITLE 'CHMGBUF - look for a buffer name'
MODULE CHMGBUF (				! Look for a buffer name
		IDENT = '3-003'			! File: CHMGBUF.BLI Edit: GB3003
		) =
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 scans the command buffer for a buffer name.
!
! 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$$GET_BUF  from the module CHANGE.BLI.
! 1-002	- Regularize headers.  JBS 02-Mar-1981
! 1-003	- Use new message codes.  JBS 04-Aug-1981
! 1-004 - Check first to see if there are more characters on command line. 
!	    STS 21-Jun-1982
! 1-005	- Change alphabetic test.  JBS 19-Jul-1982
! 1-006	- Add conditional for VT220 support.  JBS 11-Feb-1983
! 3-001 - Change lots of occurences of CMD_BUF to CMD_PTR.  GB 07-Apr-1983
! 3-002 - Add updates from V3 source kit.  GB 27-Apr-1983
! 3-003 - Remove VT220 conditional to speed up code. CJG 25-Nov-1983
!--

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

REQUIRE 'EDTSRC:TRAROUNAM';

FORWARD ROUTINE
    EDT$$GET_BUF : NOVALUE;	! Look for a buffer specification for the cut, paste, and append commands

!
! INCLUDE FILES:
!

REQUIRE 'EDTSRC:EDTREQ';

LIBRARY 'EDTSRC:TRANSLATE';

!
! MACROS:
!
!	NONE
!
! EQUATED SYMBOLS:
!
!	NONE
!
! OWN STORAGE:
!
!	NONE
!
! EXTERNAL REFERENCES:
!
!	In the routine
%SBTTL 'EDT$$GET_BUF  - look for a buffer name'

GLOBAL ROUTINE EDT$$GET_BUF 			! Look for a buffer name
    : NOVALUE =

!++
! FUNCTIONAL DESCRIPTION:
!
!	This routine looks for a buffer spec for use by cut paste and append.
!	If an '=' is seen, an explicit buffer spec is there, otherwise, use
!	the paste buffer.  The routine places the address of the buffer in
!	ALT_BUF , with a zero indicating failure.
!
! FORMAL PARAMETERS:
!
!	NONE
!
! IMPLICIT INPUTS:
!
!	CMD_END
!	CMD_PTR
!	PST_BUF
!	CUR_BUF
!
! IMPLICIT OUTPUTS:
!
!	ALT_BUF
!	CMD_PTR
!
! ROUTINE VALUE:
!
!	1 = buffer spec seen, 0 = no buffer spec seen
!
! SIDE EFFECTS:
!
!	Uses EDT$$FND_BUF  to create the buffer if necessary.  If it fails,
!	gives an error message.
!
!--

    BEGIN

    EXTERNAL ROUTINE
	EDT$$MSG_BELL : NOVALUE,		! Output a message to the terminal with a warning bell
	EDT$$CNV_UPC,				! Convert string to upper case
	EDT$$FND_BUF,				! Search for a text buffer
	EDT$$RD_CURLN;				! Get the current line

    EXTERNAL
	CMD_END,				! End of command pointer
	CMD_PTR,				! Command string pointer
	ALT_BUF : REF TBCB_BLOCK,		! Alternate buffer used for cut/paste.
	PST_BUF : REF TBCB_BLOCK,		! The paste buffer tbcb
	CUR_BUF : REF TBCB_BLOCK,		! The current buffer tbcb
	CHAR_INFO : BLOCKVECTOR [256, 1];	! Information about characters

    MESSAGES ((INVBUFNAM, INSMEM));

    LOCAL
	SAVE_TBCB,
	NEW,
	NAME_LEN,
	NAME_START,
	CHAR;

    NAME_LEN = 0;
    CHAR = CH$RCHAR (.CMD_PTR);

    IF (.CHAR EQL %C'=') AND CH$PTR_LSS (.CMD_PTR, .CMD_END)
    THEN
	BEGIN
	CMD_PTR = CH$PLUS (.CMD_PTR, 1);
	NAME_START = .CMD_PTR;

	WHILE CH$PTR_LSS (.CMD_PTR, .CMD_END) DO
	    BEGIN

	    CHAR = CH$RCHAR (.CMD_PTR);

	    IF (NOT .CHAR_INFO [.CHAR, CI_LET]		! Not alphabetic
		AND NOT .CHAR_INFO [.CHAR, CI_DIG]	! Not numeric
		AND (.CHAR NEQ %C'_'))			! Not an underscore
	    THEN
		EXITLOOP;

	    NAME_LEN = .NAME_LEN + 1;
	    CMD_PTR = CH$PLUS (.CMD_PTR, 1);
	    END;

	CHAR = CH$RCHAR (.NAME_START);

	IF ((.NAME_LEN EQL 0) OR NOT .CHAR_INFO [.CHAR, CI_LET])
	THEN
		BEGIN
		EDT$$MSG_BELL (EDT$_INVBUFNAM);
		RETURN;
		END;

	EDT$$CNV_UPC (.NAME_START, .NAME_LEN);
	SAVE_TBCB = .CUR_BUF;

	IF EDT$$FND_BUF (.NAME_START, .NAME_LEN)
	THEN
	    ALT_BUF = .CUR_BUF
	ELSE
	    EDT$$MSG_BELL (EDT$_INSMEM);

	CUR_BUF = .SAVE_TBCB;
	EDT$$RD_CURLN ();
	END
    ELSE
	ALT_BUF = .PST_BUF;

    END;					! of routine EDT$$GET_BUF

END						! of module EDT$CHMGBUF
ELUDOM