Google
 

Trailing-Edge - PDP-10 Archives - bb-h138f-bm - 7-sources/lincl.bli
There are 10 other files named lincl.bli in the archive. Click here to see a list.
 %TITLE 'LINCL - INCLUDE line-mode command'
MODULE LINCL (				! Line-mode INCLUDE command
		IDENT = '3-004'			! File: LINCL.BLI Edit: CJG3004
		) =
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 executes the line mode INCLUDE command.
!
! ENVIRONMENT:	Runs at any access mode - AST reentrant
!
! AUTHOR: Bob Kushlis, CREATION DATE: February 3, 1978
!
! MODIFIED BY:
!
! 1-001	- Original.  DJS 30-JAN-1981.  This module was created by
!	extracting the routine EDT$$INCL_CMD  from the module EXEC.BLI.
! 1-002	- Change from IO_STS and IO_FNF to IOFI_NFND .
!	   JBS 19-Feb-1981
! 1-003	- Fix module name.  JBS 20-Mar-1981
! 1-004	- Use new message codes.  JBS 04-Aug-1981
! 1-005 - Change I/O calls to use EDT$FILEIO. STS 26-Dec-1981
! 1-006 - Change call to fileio to callfio. STS 06-Jan-1982
! 1-007 - Fix DSC$A_POINTER macro. STS 14-Jan-1982
! 1-008 - Add rhb descr. definitions. STS 22-Jan-1982
! 1-009 - Add a return value for line insertion success.  SMB 3-Feb-1982
! 1-010 - Deallocate dynamic descriptors. STS 10-Feb-1982
! 1-011 - Pass filename to edt$$fiopn_err. STS 25-Feb-1982
! 1-012 - Add literals for callable parameters. STS 08-Mar-1982
! 1-013	- File I/O routines return a status.  JBS 26-Mar-1982
! 1-014	- Correct a typo in edit 1-013.  JBS 29-Mar-1982
! 1-015	- Print a message on a CLOSE error.  JBS 12-Apr-1982
! 1-016 - Change PDP-11 filenames to uppercase.  SMB 19-Apr-1982
! 1-017 - Add error message for no filename.  SMB 21-Apr-1982
! 1-018	- Check for record too long.  JBS 02-Jun-1982
! 1-019	- Pass default name in RHB parameter.  JBS 15-Jun-1982
! 1-020 - Add control C checking.  SMB 30-Jun-1982
! 1-021 - Stop processing on bad select range.  SMB 01-Jul-1982
! 1-022	- Set SCR_CHGD if the screen is changed.  JBS 07-Jul-1982
! 1-023 - Change names of include file messages.  SMB 13-Jul-1982
! 1-024 - Print out error messages on GETs. STS 20-Jul-1982
! 1-025 - Don't check RMS status on 11's since error message has
!	   already been printed. STS 22-Jul-1982
! 1-026	- Don't set EDT$$G_SCR_CHGD, new screen logic doesn't need it.  JBS 09-Oct-1982
! 1-027 - Put edt$$rng_posfrst in line. STS 11-Oct-1982
! 3-001 - Don't need RHB code on TOPS20. CJG 19-Apr-1983
! 3-002 - Remove call to EDT$$CALLFIO. CJG 10-Jun-1983
! 3-003 - Change the way that filespecs are handled. CJG 23-Jun-1983
! 3-004 - Fix loss of filespec length. CJG 8-Jul-1983
!--

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

REQUIRE 'EDTSRC:TRAROUNAM';

FORWARD ROUTINE
    EDT$$INCL_CMD : NOVALUE;			! Process the INCLUDE command

!
! INCLUDE FILES:
!

REQUIRE 'EDTSRC:EDTREQ';

!
! MACROS:
!
!
! EQUATED SYMBOLS:
!
!	NONE
!
! LITERALS
!

EXTERNAL LITERAL
    EDT$K_OPEN_INPUT,
    EDT$K_CLOSE,
    EDT$K_GET,
    EDT$K_INCLUDE_FILE;

!
! OWN STORAGE:
!
!	NONE
!
! EXTERNAL REFERENCES:
!
!	In the routine
%SBTTL 'EDT$$INCL_CMD  - Line mode INCLUDE command'

GLOBAL ROUTINE EDT$$INCL_CMD 			! Line mode INCLUDE command
    : NOVALUE =

!++
! FUNCTIONAL DESCRIPTION:
!
!	Command processing routing for the INCLUDE command.  Attempt to open the file.
!	If it succeeds then position as indicated by the range and read the file
!	into the buffer in front of that line.
!
! FORMAL PARAMETERS:
!
!	NONE
!
! IMPLICIT INPUTS:
!
!	EXE_CURCMD
!
! IMPLICIT OUTPUTS:
!
!	TXT_ONSCR
!
! ROUTINE VALUE:
!
!	NONE
!
! SIDE EFFECTS:
!
!	Reads a text file into the work file system, or prints an error message.
!
!--

    BEGIN

    EXTERNAL ROUTINE
	EDT$FILEIO,
	EDT$$STOP_WKINGMSG,
	EDT$$CHK_CC,
	EDT$$FMT_MSG,
	EDT$$RNG_REPOS,
	EDT$$END_INS,
	EDT$$INS_LN,
	EDT$$START_INS,
	EDT$$FIOPN_ERR;

    EXTERNAL
    	RNG_FRSTLN,
    	CUR_BUF : REF TBCB_BLOCK,
    	RNG_ORIGPOS : POS_BLOCK,
	IO_FNAM,
	INC_NAM : BLOCK,		! Include file descriptor block
	CC_DONE,			! CNTRL/C aborted the command
	IOFI_NFND,			! File not found flag
	EXE_CURCMD : REF NODE_BLOCK,	! Pointer to the current command.
	TXT_ONSCR;			! Force "press return to continue" if under EXT

    MESSAGES ((INCFILNEX, ERRINPFIL, INCFILOPN, INCFILCLO, NOFILSPC, RECTOOBIG));

    LOCAL
	FILE_DESC : BLOCK [1],
	GET,
	STATUS,
	RECORD_TOO_BIG;


    RECORD_TOO_BIG = 0;
!+
! File specification must be given for INCLUDE
!-

    IF (.EXE_CURCMD [FSPCLEN] EQL 0)
    THEN
	BEGIN
	EDT$$FMT_MSG (EDT$_NOFILSPC);
	RETURN (0);
	END;
!+
! Open the file.
!-

    INC_NAM [DSC$A_POINTER] = .EXE_CURCMD [FILSPEC];
    INC_NAM [DSC$W_LENGTH]  = .EXE_CURCMD [FSPCLEN];
    STATUS = EDT$FILEIO (EDT$K_OPEN_INPUT, EDT$K_INCLUDE_FILE, INC_NAM);

    IF .STATUS
    THEN
	BEGIN
!+
! File was opened.  Position to start of the range.
!-

    	RNG_FRSTLN = 1;
    	EDT$$CPY_MEM( POS_SIZE, .CUR_BUF, RNG_ORIGPOS);
	IF ( NOT EDT$$RNG_REPOS (.EXE_CURCMD [RANGE1])) THEN RETURN (0);

!+
! Insert all the lines from the file at the current position.
!-
	EDT$$START_INS ();
	STATUS = 1;

	WHILE (.STATUS NEQ 0) DO
	    BEGIN
	    GET = EDT$FILEIO (EDT$K_GET, EDT$K_INCLUDE_FILE, FILE_DESC);

	    IF ( NOT .GET) THEN EXITLOOP;

	    IF (EDT$$CHK_CC ())
	    THEN
		BEGIN
		STATUS = EDT$FILEIO (EDT$K_CLOSE, EDT$K_INCLUDE_FILE, 0);

		IF ( NOT .STATUS) THEN EDT$$FIOPN_ERR (EDT$_INCFILCLO, INC_NAM);

		CC_DONE = 1;
		RETURN (0);
		END;

	    IF (.FILE_DESC [DSC$W_LENGTH] GTR 255) THEN RECORD_TOO_BIG = 1;

	    STATUS = EDT$$INS_LN (CH$PTR (.FILE_DESC [DSC$A_POINTER],, BYTE_SIZE),
		 MIN (.FILE_DESC [DSC$W_LENGTH], 255));
	    END;

	EDT$$END_INS ();
!+
! And close the file.
!-
	EDT$$STOP_WKINGMSG ();
	STATUS = EDT$FILEIO (EDT$K_CLOSE, EDT$K_INCLUDE_FILE, 0);

	IF ( NOT .STATUS) THEN EDT$$FIOPN_ERR (EDT$_INCFILCLO, INC_NAM);

	END
    ELSE
	BEGIN
!+
! The open failed, put out an error message.
!-
	EDT$$FIOPN_ERR (

	    IF .IOFI_NFND THEN EDT$_INCFILNEX ELSE EDT$_INCFILOPN, INC_NAM);

	END;

!+
! If we print the message "record too big" then force "press return to continue",
! since the message would otherwise be lost in the update of the screen that we
! must do.
!-

    IF .RECORD_TOO_BIG
    THEN
	BEGIN
	EDT$$FMT_MSG (EDT$_RECTOOBIG);
	TXT_ONSCR = 1;
	END;


    END;					! of routine EDT$$INCL_CMD


END
ELUDOM