--*- Fonts: CPTFONTB -*- -- $Header: /ct/interp/textiop.ada,v 1.17 84/09/27 22:12:11 alex Exp $ -- -- Specification of the Package Text_IO -- with IO_EXCEPTIONS; package TEXT_IO is type FILE_TYPE is limited private; type FILE_MODE is (IN_FILE,OUT_FILE); type COUNT is range 0 .. 132; subtype POSITIVE_COUNT is COUNT range 1 .. COUNT'LAST; UNBOUNDED : constant COUNT := 0; -- LINE AND PAGE LENGTH subtype FIELD is INTEGER range 0 .. 32; subtype NUMBER_BASE is INTEGER range 2 .. 16; type TYPE_SET is (LOWER_CASE, UPPER_CASE); -- FILE MANAGEMENT procedure CREATE (FILE : in out FILE_type; MODE : in FILE_mode := OUT_FILE; NAME : in STRING := ""; FORM : in STRING := ""); procedure OPEN (FILE : in out FILE_TYPE; MODE : in FILE_MODE := OUT_FILE; NAME : in STRING := ""; FORM : in STRING := "") ; procedure CLOSE (FILE : in out FILE_TYPE); procedure DELETE (FILE : in out FILE_TYPE); procedure RESET (FILE : in out FILE_TYPE; MODE : in FILE_MODE); procedure RESET (file : in out FILE_TYPE); function MODE (FILE : in FILE_TYPE) return FILE_MODE; function NAME (FILE : in FILE_TYPE) return STRING; function FORM (FILE : in FILE_TYPE) return STRING; function IS_OPEN (FILE : in FILE_TYPE) return BOOLEAN; -- Control of default input and output files procedure SET_INPUT (FILE : in FILE_TYPE); procedure SET_OUTPUT (FILE : in FILE_TYPE); function STANDARD_INPUT return FILE_TYPE; function STANDARD_OUTPUT return FILE_TYPE; function CURRENT_INPUT return FILE_TYPE; function CURRENT_OUTPUT return FILE_TYPE; -- Specification of line and page length procedure SET_LINE_LENGTH (FILE : in FILE_TYPE; TO : in COUNT); procedure SET_LINE_LENGTH (TO : in COUNT); procedure SET_PAGE_LENGTH (FILE : in FILE_TYPE; TO : in COUNT); procedure SET_PAGE_LENGTH (TO : in COUNT); function LINE_LENGTH (FILE : in FILE_TYPE) return COUNT; function LINE_LENGTH return COUNT; function PAGE_LENGTH (FILE : in FILE_TYPE) return COUNT; function PAGE_LENGTH return COUNT; -- Column , Line and Page Control procedure NEW_LINE (FILE : in FILE_TYPE; SPACING : POSITIVE_COUNT :=1 ); procedure NEW_LINE (SPACING : POSITIVE_COUNT :=1); procedure SKIP_LINE (FILE : in FILE_TYPE; SPACING : POSITIVE_COUNT :=1); procedure SKIP_LINE (SPACING : POSITIVE_COUNT :=1); function END_OF_LINE (FILE : in FILE_TYPE) return BOOLEAN; function END_OF_LINE return BOOLEAN; procedure NEW_PAGE (FILE : in FILE_TYPE); procedure NEW_PAGE; procedure SKIP_PAGE (FILE : in FILE_TYPE); procedure SKIP_PAGE; function END_OF_page (FILE : in FILE_TYPE) return BOOLEAN; function END_OF_PAGE return BOOLEAN; function END_OF_FILE (FILE : in FILE_TYPE) return BOOLEAN; function END_OF_FILE RETURN BOOLEAN; procedure SET_COL (FILE : in FILE_TYPE; TO : POSITIVE_COUNT); procedure SET_COL (TO : POSITIVE_COUNT); procedure SET_LINE (FILE : in FILE_TYPE; TO : POSITIVE_COUNT); procedure SET_LINE (TO : POSITIVE_COUNT); function COL (FILE : in FILE_TYPE) RETURN POSITIVE_COUNT; function COL RETURN POSITIVE_COUNT; function LINE (FILE : IN FILE_TYPE) RETURN POSITIVE_COUNT; function LINE RETURN POSITIVE_COUNT; function PAGE (FILE : in FILE_TYPE) return POSITIVE_COUNT; function PAGE return POSITIVE_COUNT; -- Character Input-Output procedure GET (FILE : in FILE_TYPE; ITEM : out CHARACTER); procedure GET (ITEM : out CHARACTER); procedure PUT (FILE : in FILE_TYPE; ITEM : in CHARACTER); procedure PUT (ITEM : in CHARACTER); -- String Input-Output procedure GET (FILE : in FILE_TYPE; ITEM : out STRING); procedure GET (ITEM : out STRING); procedure PUT (FILE : in FILE_TYPE; ITEM : in STRING); procedure PUT (ITEM : in STRING); procedure GET_line (FILE : in FILE_TYPE; ITEM : out STRING; LAST : out NATURAL); procedure GET_line (ITEM : out STRING; LAST : out NATURAL); procedure PUT_line (FILE : in FILE_TYPE; ITEM : in STRING); procedure PUT_line (ITEM : in STRING); -- Generic package for Input-Output of Integer type generic type NUM is range <>; package INTEGER_IO is DEFAULT_WIDTH : FIELD := NUM'WIDTH; DEFAULT_BASE : NUMBER_BASE := 10; procedure GET (FILE : in FILE_TYPE; ITEM : out NUM; WIDTH : in FIELD := 0); procedure GET (ITEM : out NUM; WIDTH : in FIELD := 0); procedure PUT (FILE : in FILE_TYPE; ITEM : in NUM; WIDTH : in FIELD := 0; BASE : in NUMber_BASE := DEFAULT_BASE); procedure PUT (ITEM : in NUM; WIDTH : in FIELD := 0; BASE : in NUMber_BASE := DEFAULT_BASE); procedure GET (from : in STRING; ITEM : out NUM; LAST : out POSITIVE); procedure PUT (TO : out STRING; ITEM : in NUM; BASE : in NUMber_BASE := DEFAULT_BASE); end INTEGER_IO; -- Generic package for Input-Output for Real Types generic type NUMF is digits <>; package FLOAT_IO is DEFAULT_FORE : constant := 2; --FIELD := 2; DEFAULT_AFT : constant := 6; -- NUMF'DIGITS-1; --FIELD DEFAULT_EXP : constant := 3; --FIELD procedure GET (FILE : in FILE_TYPE; ITEM : out NUMF; WIDTH : in FIELD := 0); procedure GET (ITEM : out NUMF; WIDTH : in FIELD := 0); procedure PUT (FILE : in FILE_TYPE; ITEM : in NUMF; FORE : in FIELD := DEFAULT_FORE; AFT : in FIELD := DEFAULT_AFT; EXP : in FIELD := DEFAULT_EXP); procedure PUT (ITEM : in NUMF; FORE : in FIELD := DEFAULT_FORE; AFT : in FIELD := DEFAULT_AFT; EXP : in FIELD := DEFAULT_EXP); procedure GET (from : in STRING; ITEM : out NUMF; LAST : out POSITIVE); procedure PUT (TO : out STRING; ITEM : in NUMF; AFT : in FIELD := DEFAULT_AFT; EXP : in FIELD := DEFAULT_EXP); end FLOAT_IO; generic type NUMFI is private ; --digits <>; package FIXED_IO is DEFAULT_FORE : constant := 2; --NUMFI'FORE; --FIELD := NUMFI'FORE; DEFAULT_AFT : constant := 6; --NUMFI'AFT; --FIELD := NUMFI'AFT; DEFAULT_EXP : constant := 0; --FIELD procedure GET (FILE : in FILE_TYPE; ITEM : out NUMFI; WIDTH : in FIELD := 0); procedure GET (ITEM : out NUMFI; WIDTH : in FIELD := 0); procedure PUT (FILE : in FILE_TYPE; ITEM : in NUMFI; FORE : in FIELD := DEFAULT_FORE; AFT : in FIELD := DEFAULT_AFT; EXP : in FIELD := DEFAULT_EXP); procedure PUT (ITEM : in NUMFI; FORE : in FIELD := DEFAULT_FORE; AFT : in FIELD := DEFAULT_AFT; EXP : in FIELD := DEFAULT_EXP); procedure GET (from : in STRING; ITEM : out NUMFI; LAST : out POSITIVE); procedure PUT (TO : out STRING; ITEM : in NUMFI; AFT : in FIELD := DEFAULT_AFT; EXP : in FIELD := DEFAULT_EXP); end FIXED_IO; -- Generic package for Input-Output of Enumeration Types generic type ENUM is private; package ENUMERATION_IO is DEFAULT_WIDTH : constant := 0 ; -- FIELD := 0; DEFAULT_SETTING : TYPE_SET := UPPER_CASE; procedure GET (FILE : in FILE_TYPE; ITEM : out ENUM); procedure GET (ITEM : out ENUM); procedure PUT (FILE : in FILE_TYPE; ITEM : in ENUM; WIDTH : in FIELD := DEFAULT_WIDTH; SET : in TYPE_SET := UPPER_CASE); --DEFAULT_SETTING); procedure PUT (ITEM : in ENUM; WIDTH : in FIELD := DEFAULT_WIDTH; SET : in TYPE_SET := UPPER_CASE); --DEFAULT_SETTING); procedure GET (FROM : in STRING; ITEM : out ENUM; LAST : out POSITIVE); procedure PUT (TO : out STRING; ITEM : in ENUM; SET : in TYPE_SET := UPPER_CASE); --DEFAULT_SETTING); end ENUMERATION_IO; -- Exceptions STATUS_ERROR : exception renames IO_EXCEPTIONS.STATUS_ERROR; MODE_ERROR : exception renames IO_EXCEPTIONS.MODE_ERROR; NAME_ERROR : exception renames IO_EXCEPTIONS.NAME_ERROR; USE_ERROR : exception renames IO_EXCEPTIONS.USE_ERROR; DEVICE_ERROR : exception renames IO_EXCEPTIONS.DEVICE_ERROR; END_ERROR : exception renames IO_EXCEPTIONS.END_ERROR; DATA_ERROR : exception renames IO_EXCEPTIONS.DATA_ERROR; private type FILE_TYPE is RECORD FILE_POS : COUNT := 0; end RECORD; end TEXT_IO; package body TEXT_IO is function STANDARD_INPUT return FILE_TYPE is STD_IN : FILE_TYPE; begin STD_IN:= (FILE_POS => 1); return STD_IN; end STANDARD_INPUT; function STANDARD_OUTPUT return FILE_TYPE is STD_OUT : FILE_TYPE; begin STD_OUT:= (FILE_POS => 2); return STD_OUT; end STANDARD_OUTPUT; end TEXT_IO;