%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) 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 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