-- -- I/O System Dependencies Package for MV 10000, ROLM Ada Development -- Environment, AOS Operating System -- -- This visible section is derived from SYSDEP_SPEC.ADA by Stewart French, TI -- Derivation by Richard Conn, TI -- package SYSDEP is -- -- Open the console for binary I/O, no echo -- procedure OPEN_CONSOLE; pragma INLINE (OPEN_CONSOLE); -- -- Close the console, resetting parameters to their original condition -- procedure CLOSE_CONSOLE; pragma INLINE (CLOSE_CONSOLE); -- -- Put a character to the terminal. There should be no translation of the -- characters. There may be exceptions to this rule (like CTRL-S and -- CTRL-Q for flow control), and these exceptions must be identified in -- IS_VALID_CHARACTER below. -- procedure PUT (CHAR : CHARACTER); pragma INLINE (PUT); -- -- Get a character from the terminal keyboard with no echo and no -- translations. -- procedure GET (CHAR : out CHARACTER); pragma INLINE (GET); -- -- Returns a boolean indicating whether the character is safe to use in the -- environment. Suspicious characters may be CTRL-S, CTRL-Q, CTRL-C, CTRL-Y. -- function IS_VALID_CHARACTER (CHAR : CHARACTER) return BOOLEAN; pragma INLINE (IS_VALID_CHARACTER); end SYSDEP; with TTY_IO, SYS_CALLS, FILE_DEFINITIONS, FILE_IO, BIT_OPS; package body SYSDEP is BUFFER_BYTE_PTR : INTEGER; BUFFER : INTEGER; INVALID_CHARS_ARRAY : array (1 .. 8) of CHARACTER; TERMINAL : FILE_DEFINITIONS.CHANNEL_NUMBER; TTY : TTY_IO.FILE_TYPE; -- procedure OPEN_CONSOLE is CONSOLE_CHARACTERISTICS : FILE_IO.DEVICE_CHARACTERISTICS; ERROR_CODE : INTEGER; AC0, AC1, AC2 : INTEGER; NAME : SYS_CALLS.CALL_NAME; ERROR_ID : SYS_CALLS.ERROR_CODE; begin TTY_IO.OPEN (TTY, TTY_IO.INOUT_FILE, "@console"); -- turn off the keyboard interrupt capabilities AC0 := 0; AC1 := 0; AC2 := 0; NAME := SYS_CALLS.KIOFF; SYS_CALLS.LONG_SYS (NAME, AC0, AC1, AC2, ERROR_ID); FILE_IO.OPEN ("@console", TERMINAL, ERROR_CODE, FILE_DEFINITIONS.OPEN_FOR_INPUT_OUTPUT + FILE_DEFINITIONS.BINARY_IO + FILE_DEFINITIONS.VARIABLE_LENGTH); FILE_IO.GET_CHARACTERISTICS (TERMINAL, CONSOLE_CHARACTERISTICS, ERROR_CODE); CONSOLE_CHARACTERISTICS.ECHO := FILE_IO.NO_ECHO; CONSOLE_CHARACTERISTICS.CHARACTERISTICS (FILE_IO.NON_ANSI_STANDARD_DEVICE) := FALSE; FILE_IO.SET_CHARACTERISTICS (TERMINAL, CONSOLE_CHARACTERISTICS, ERROR_CODE); BUFFER_BYTE_PTR := INTEGER'VAL (BUFFER'ADDRESS); BUFFER_BYTE_PTR := BIT_OPS.LEFT_SHIFT_BY_1 (BUFFER_BYTE_PTR); end OPEN_CONSOLE; -- pragma inline (OPEN_CONSOLE); -- procedure CLOSE_CONSOLE is ERROR_CODE : INTEGER; begin FILE_IO.CLOSE (TERMINAL, ERROR_CODE); end CLOSE_CONSOLE; -- pragma inline (CLOSE_CONSOLE); -- procedure PUT (CHAR : CHARACTER) is DATA : STRING (1 .. 1); begin DATA (1) := CHAR; TTY_IO.PUT (TTY, DATA); end PUT; -- pragma inline (PUT); -- procedure GET (CHAR : out CHARACTER) is BYTES_READ : INTEGER; ERROR_CODE : INTEGER; begin FILE_IO.READ (TERMINAL, ERROR_CODE, BYTES_READ, BUFFER_BYTE_PTR, FILE_DEFINITIONS.BINARY_IO, 1); BUFFER := BIT_OPS.LOGICAL_RIGHT_SHIFT (BUFFER, 24); CHAR := CHARACTER'VAL (BUFFER); end GET; -- pragma inline (GET); -- function IS_VALID_CHARACTER (CHAR : CHARACTER) return BOOLEAN is VALID_FLAG : BOOLEAN; begin VALID_FLAG := TRUE; for I in 1 .. 8 loop if INVALID_CHARS_ARRAY (I) = CHAR then VALID_FLAG := FALSE; end if; end loop; return VALID_FLAG; end IS_VALID_CHARACTER; -- pragma inline (IS_VALID_CHARACTER); begin -- please refer to AOS/VS Programmer's Manual, Volume 1, System Concepts -- page 5-20 for a description of these character codes. INVALID_CHARS_ARRAY (4) := ASCII.DC3; -- CTRL-S INVALID_CHARS_ARRAY (5) := ASCII.DC1; -- CTRL-Q end SYSDEP;