Trailing-Edge
-
PDP-10 Archives
-
bb-r775d-bm_tops20_ks_upd_4
-
sources/wfreainp.bli
There are 10 other files named wfreainp.bli in the archive. Click here to see a list.
%TITLE 'WFREAINP - read a line from the input file'
MODULE WFREAINP ( ! Read a line from the input file
IDENT = '3-003' ! File: WFREAINP.BLI Edit: CJG3003
) =
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:
!
! Read a line from the input file.
!
! ENVIRONMENT: Runs at any access mode - AST reentrant
!
! AUTHOR: Bob Kushlis, CREATION DATE: October 16, 1978
!
! MODIFIED BY:
!
! 1-001 - Original. DJS 23-Feb-1981. This module was created by
! extracting routine READ_INPUT from module EDTWF.
! 1-002 - Regularize headers. JBS 19-Mar-1981
! 1-003 - Change EOB_LINE to EOB_LN . JBS 31-Mar-1981
! 1-004 - Remove division from line number calculations. SMB 14-Jan-1982
! 1-005 - Convert i/o to use edt$fileio. STS 15-Jan-1982
! 1-006 - Add capability for 15 digit line numbers. SMB 19-Jan-1982
! 1-007 - pass header info by descriptor. STS 20-Jan-1982
! 1-008 - fix bugs related to 15-digit line numbers. SMB 22-Jan-1982
! 1-009 - check for zero length descriptor. STS 22-Jan-1982
! 1-010 - Remove a MOVELINE for original line numbers. SMB 26-Jan-1982
! 1-011 - Remove original line numbers. SMB 28-Jan-1982
! 1-012 - Fix bug in line number assignment for sequenced files. SMB 30-Jan-1982
! 1-013 - Add a range check for line number too large. SMB 1-Feb-1982
! 1-014 - Pass address of io_rhb to file routines. STS 03-Feb-1982
! 1-015 - Close input file if line numbers get too large. SMB 06-Feb-1982
! 1-016 - Deallocate dynamic descriptors. STS 10-Feb-1982
! 1-017 - Add literals for callable parameters. STS 08-mar-1982
! 1-018 - Remove reference to EDT$$RD_IFI. JBS 15-Mar-1982
! 1-019 - Clear input file open flag when closing. STS 07-Apr-1982
! 1-020 - Print a message on a CLOSE error. JBS 12-Apr-1982
! 1-021 - Check for records longer than 255 bytes. JBS 02-Jun-1982
! 1-022 - Close the input file on EOF. JBS 11-Jun-1982
! 1-023 - Close the input file on reaching the end of the MAIN buffer only! JBS 14-Jun-1982
! 1-024 - Print a message on Get errors and try again. STS 21-Jul-1982
! 1-025 - Don't check RMS status on 11's since error message has already
! gone out. STS 22-Jul-1982
! 1-026 - Print out the full RMS message rather than just 1 liner. STS 23-Jul-1982
! 1-027 - Set the text on screen flag for RMS errors. SMB 28-Jul-1982
! 1-028 - Change the flags set for error messages (again). SMB 17-Aug-1982
! 1-029 - Modify to use new 48 bit macro. STS 01-Oct-1982
! 1-030 - Don't clear EDT$$G_MSGFLG; setting EDT$$G_SCR_CHGD is sufficient. JBS 06-Oct-1982
! 1-031 - Modify to use new compare macro. STS 20-Oct-1982
! 1-032 - Use a different scrolling routine. SMB 21-Oct-1982
! 1-033 - Set EDT$$G_SCR_REBUILD if we insert a line in the work file. JBS 01-Nov-1982
! 1-034 - Modify edit 1-033 so we don't disturb the screen data base but don't
! have to rebuild the screen. JBS 01-Dec-1982
! 1-035 - Note new value for EDT$$G_SCR_CHGD. JBS 02-Mar-1983
! 3-001 - Simplify for TOPS20. CJG 20-Apr-1983
! 3-002 - Fix return from EDT$$CALLFIO. CJG 8-Jun-1983
! 3-003 - Remove call to EDT$$CALLFIO. CJG 10-Jun-1983
!--
%SBTTL 'Declarations'
!
! TABLE OF CONTENTS:
!
REQUIRE 'EDTSRC:TRAROUNAM';
FORWARD ROUTINE
EDT$$RD_ILN;
!
! INCLUDE FILES:
!
REQUIRE 'EDTSRC:EDTREQ';
REQUIRE 'SYS:JSYS';
!
! MACROS:
!
! NONE
!
! EQUATED SYMBOLS:
!
EXTERNAL LITERAL
EDT$K_INPUT_FILE,
EDT$K_GET,
EDT$K_CLOSE;
!
! OWN STORAGE:
!
! NONE
!
! EXTERNAL REFERENCES:
!
! In the routine
%SBTTL 'EDT$$RD_ILN - read a line from the input file'
GLOBAL ROUTINE EDT$$RD_ILN ! Read a line from the input file
=
!++
! FUNCTIONAL DESCRIPTION:
!
! This routine attempts to read a new line from the input file. If the
! INPUT_RAB field is zero, or if the read fails return 0 to indicate that
! there is no more input. If the read succeeds, give the line the next
! sequential number, and insert it at the end of the text buffer.
!
! FORMAL PARAMETERS:
!
! NONE
!
! IMPLICIT INPUTS:
!
! SCR_LNS
! CUR_BUF
! WK_INSCNT
! WK_LN
! EOB_LN
! LNO0 - L_LNO14
! LNO_ZERO
! LNO_BIG
!
! IMPLICIT OUTPUTS:
!
! SCR_CHGD
! CUR_BUF
! WK_INSCNT
! IO_VFCHD
!
! ROUTINE VALUE:
!
! 1 = a line was read
! 0 = no more input
!
! SIDE EFFECTS:
!
! NONE
!
!--
BEGIN
EXTERNAL ROUTINE
EDT$$FIOPN_ERR,
EDT$$OUT_FMTBUF,
EDT$$SC_SETSCLLREG,
EDT$$SC_FULLSCLL,
EDT$$STOP_WKINGMSG,
EDT$$MSG_TOSTR,
EDT$$TI_INPCH,
EDT$$SC_NONREVID,
EDT$$FMT_MSG,
EDT$FILEIO,
EDT$$CMP_LNO,
EDT$$INS_LN : NOVALUE,
EDT$$RD_PRVLN;
EXTERNAL
SCR_LNS, ! Number of screen lines
CUR_BUF : REF TBCB_BLOCK, ! Current text buffer control block
WK_INSCNT : LN_BLOCK, ! The count of inserted lines
INPUT_OPN, ! input file open flag
LNO_ZERO : LN_BLOCK, ! Zero in 48-bit repr.
LNO_BIG : LN_BLOCK, ! 2814749767.00000
WK_LN : REF LIN_BLOCK, ! Pointer to current line
EOB_LN,
IO_VFCHD, ! Record header buffer for fixed line nos.
LN_PREV, ! Previous VFC line number
LN_INCR : LN_BLOCK, ! Input line number increment
LNO0 : LNOVECTOR [14],
IO_FNAM,
EDIT_MOD,
SCR_CHGD,
SCR_REBUILD; ! 1 = rebuild screen data base from the work file
MESSAGES ((MAXINPLIN, PRERETCON, ERRINPFIL, INPFILCLO, RECTOOBIG));
LOCAL
FILE_DESC : BLOCK [1],
MAX_LNO,
GET,
LINNO : LN_BLOCK,
I,
NEW_BUKT,
SAVE_REBUILD;
FILE_DESC [DSC$A_POINTER] = 0;
FILE_DESC [DSC$W_LENGTH] = 0;
MAX_LNO = 0; ! assume good
!+
! Try to read a record from input.
!-
IF (.CUR_BUF [TBCB_INPUT_RAB] NEQ 0)
THEN
BEGIN
GET = EDT$FILEIO (EDT$K_GET, EDT$K_INPUT_FILE, FILE_DESC);
!+
! If the get failed but it was not end of file then print out an error
! message.
!-
IF (.GET LSS 0)
THEN
IF (.EDIT_MOD EQL CHANGE_MODE)
THEN
BEGIN
EDT$$SC_FULLSCLL ();
EDT$$STOP_WKINGMSG ();
EDT$$FIOPN_ERR (EDT$_ERRINPFIL, .IO_FNAM);
!+
! Output the "Press return to continue"
! message and wait for ANY key to be pressed before
! refreshing the screen and returning to change mode
!-
EDT$$MSG_TOSTR (EDT$_PRERETCON);
EDT$$OUT_FMTBUF ();
EDT$$TI_INPCH (I);
EDT$$SC_NONREVID ();
SCR_CHGD = 1; ! repaint the screen
EDT$$SC_SETSCLLREG (0, .SCR_LNS);
END
ELSE
EDT$$FIOPN_ERR (EDT$_ERRINPFIL, .IO_FNAM);
IF (.GET EQL 1)
THEN
BEGIN
!+
! Determine the next line number
!-
MAX_LNO = ADDLINE (CUR_BUF [TBCB_INPUT_LINE], LNO0 [5],
CUR_BUF [TBCB_INPUT_LINE]);
!+
! If the next line number is greater than the maximum allowed, stop reading
! records and jump to code which displays end of buffer
!_
IF ((EDT$$CMP_LNO (LNO_BIG, CUR_BUF [TBCB_INPUT_LINE]) GEQ 0) AND (.MAX_LNO EQL 0))
THEN
BEGIN
!+
! The read suceeded and the line number is good. Insert the record at the end
! of the buffer.
! Do not disturb the screen data base.
!-
SAVE_REBUILD = .SCR_REBUILD;
SCR_REBUILD = 1;
IF (.FILE_DESC [DSC$W_LENGTH] GTR 255) THEN
EDT$$FMT_MSG (EDT$_RECTOOBIG);
EDT$$INS_LN (CH$PTR (.FILE_DESC [DSC$A_POINTER]),
MIN (.FILE_DESC [DSC$W_LENGTH], 255));
SCR_REBUILD = .SAVE_REBUILD;
!+
! In case we are doing an insert on another buffer (as in the
! case of a CUT command), do not screw up the insert count.
!-
SUBLINE (LNO0, WK_INSCNT, WK_INSCNT);
EDT$$RD_PRVLN ();
WK_LN [LIN_NUM] = .CUR_BUF [TBCB_INPUT_LINE];
WK_LN [LIN_NUMM] = .CUR_BUF [TBCB_INPUT_LINM];
WK_LN [LIN_NUMH] = .CUR_BUF [TBCB_INPUT_LINH];
!+
! And return success
!-
RETURN (1);
END
ELSE
BEGIN
EDT$$FMT_MSG (EDT$_MAXINPLIN);
IF ( NOT EDT$FILEIO (EDT$K_CLOSE, EDT$K_INPUT_FILE, FILE_DESC))
THEN
EDT$$FMT_MSG (EDT$_INPFILCLO);
INPUT_OPN = 0;
END
END;
!+
! The read failed, close the file and indicate end of buffer.
!-
END;
IF (.INPUT_OPN AND (.CUR_BUF [TBCB_INPUT_RAB] NEQ 0))
THEN
BEGIN
IF ( NOT EDT$FILEIO (EDT$K_CLOSE, EDT$K_INPUT_FILE, FILE_DESC))
THEN
EDT$$FMT_MSG (EDT$_INPFILCLO);
INPUT_OPN = 0;
END;
WK_LN = EOB_LN;
CUR_BUF [TBCB_CHAR_POS] = 0;
CUR_BUF [TBCB_INPUT_RAB] = 0;
!+
! And return failure
!-
RETURN (0);
END; ! of routine EDT$$RD_ILN
END
ELUDOM