Trailing-Edge
-
PDP-10 Archives
-
BB-AE97C-BM
-
sources/maccal.bli
There are 10 other files named maccal.bli in the archive. Click here to see a list.
%TITLE 'MACCAL - macro call'
MODULE MACCAL ( ! Macro call
IDENT = '3-003' ! File: MACCAL.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:
!
! Macro call
!
! ENVIRONMENT: Runs at any access mode - AST reentrant
!
! AUTHOR: Bob Kushlis, CREATION DATE: 6-AUG-1979
!
! MODIFIED BY:
!
! 1-001 - Original. DJS 18-FEB-1981. This module was created by
! extracting routine EDT$$MAC_CALL from module EDTCTR.
! 1-002 - Regularize headers and fix file and module name. JBS 04-Mar-1981
! 1-003 - Remove L_LINE. JBS 01-Oct-1981
! 1-004 - Replace L_LINE. TMV 7-Dec-81
! 1-005 - Add an entry point so that EDT$$EXE_CMD_NOOVERLAY can
! get this mdoule back into memory after a macro has been executed. JBS 10-Mar-1982
! 1-006 - Save and restore the command line over a macro call, so another
! command can be after the macro name. JBS 03-Jun-1982
! 1-005 - Add an entry point so that EDT$$EXE_CMD_NOOVERLAY cat
! get this mdoule back into memory after a macro has been executed. JBS 10-Mar-1982
! 1-006 - Save and restore the command line over a macro call, so another
! command can be after the macro name. JBS 03-Jun-1982
! 1-007 - See if a control C was found and reset command buffer. STS 16-Jul-1982
! 3-001 - Make a proper string ptr to CMD_TEXT. GB 3-Mar-1983
! 3-002 - Don't need overlay code. CJG 17-Apr-1983
! 3-003 - Add updates from V3 sources. GB 03-May-1983
!--
%SBTTL 'Declarations'
!
! TABLE OF CONTENTS:
!
REQUIRE 'EDTSRC:TRAROUNAM';
FORWARD ROUTINE
EDT$$MAC_CALL : NOVALUE;
!
! INCLUDE FILES:
!
REQUIRE 'EDTSRC:EDTREQ';
!
! MACROS:
!
! NONE
!
! EQUATED SYMBOLS:
!
! NONE
!
! OWN STORAGE:
!
! NONE
!
! EXTERNAL REFERENCES:
!
! In the routine
%SBTTL 'EDT$$MAC_CALL - macro call'
GLOBAL ROUTINE EDT$$MAC_CALL ( ! Macro call
MAC ! Address of the macro
) : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
! Call a macro. A macro is a buffer which contains line-mode
! commands.
!
! FORMAL PARAMETERS:
!
! MAC Address of the macro
!
! IMPLICIT INPUTS:
!
! CUR_BUF
! MAC_BUF
! CMD_BUF
! CMD_LEN
! CMD_PTR
! CMD_END
!
! IMPLICIT OUTPUTS:
!
! CUR_BUF
! MAC_BUF
! CMD_BUF
! CMD_END
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS:
!
! Saves and restores the command line.
!
!--
BEGIN
EXTERNAL ROUTINE
EDT$$EXE_CMD,
EDT$$RD_CURLN : NOVALUE,
EDT$$TOP_BUF : NOVALUE,
EDT$$ALO_HEAP, ! Allocate heap storage
EDT$$DEA_HEAP : NOVALUE, ! Deallocate heap storage
EDT$$FMT_MSG : NOVALUE; ! Format a message
EXTERNAL
CC_DONE,
CUR_BUF, ! Current tbcb
CMD_LEN,
CMD_BUF,
MAC_BUF, ! Current macro buffer pointer
CMD_PTR, ! Pointer to the current command
CMD_END; ! End of the current command
LOCAL
STATUS,
SAVE_TBCB,
SAVE_MACRO,
SAVE_CMD_BUF,
SAVE_CMD_END,
CMD_TEXT : REF VECTOR,
CMD_LENGTH;
MESSAGES ((INSMEM));
!+
! Save the current command line.
!-
SAVE_CMD_BUF = .CMD_PTR;
SAVE_CMD_END = .CMD_END;
CMD_LENGTH = CH$DIFF (CH$PLUS (.SAVE_CMD_END, 1), .SAVE_CMD_BUF);
IF (.CMD_LENGTH GTR 0)
THEN
BEGIN
IF EDT$$ALO_HEAP (CMD_LENGTH, CMD_TEXT)
THEN
CH$MOVE (.CMD_LENGTH, .SAVE_CMD_BUF, CH$PTR (.CMD_TEXT,, BYTE_SIZE))
ELSE
BEGIN
EDT$$FMT_MSG (EDT$_INSMEM);
RETURN;
END;
END;
!+
! Point the command processor to the macro without destorying
! the current buffer or the current macro.
!-
SAVE_TBCB = .CUR_BUF;
CUR_BUF = .MAC;
EDT$$TOP_BUF ();
CUR_BUF = .SAVE_TBCB;
EDT$$RD_CURLN ();
SAVE_MACRO = .MAC_BUF;
MAC_BUF = .MAC;
!+
! Execute the commands in the specified buffer.
!-
STATUS = EDT$$EXE_CMD (INP_MACRO);
!+
! Restore the former macro.
!-
MAC_BUF = .SAVE_MACRO;
!+
! Restore the former command line contents, if any.
!-
CMD_BUF = .SAVE_CMD_BUF;
CMD_END = .SAVE_CMD_END;
IF (.CMD_LENGTH GTR 0)
THEN
BEGIN
CH$MOVE (.CMD_LENGTH, CH$PTR (.CMD_TEXT,, BYTE_SIZE), .SAVE_CMD_BUF);
EDT$$DEA_HEAP (CMD_LENGTH, CMD_TEXT);
END;
IF (.STATUS EQL 2) ! if we saw a control C
THEN
BEGIN
IF (CH$PTR_NEQ (.CMD_END, .CMD_PTR))
THEN
CC_DONE = 1;
CMD_PTR = CH$PTR (CMD_BUF,, BYTE_SIZE);
CMD_END = .CMD_PTR;
END;
END; ! of routine EDT$MAC_CALL
END ! of module EDT$MACCAL
ELUDOM