1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199
|
------------------------------------------------------------------------------
-- --
-- FLORIST (FSU Implementation of POSIX.5) COMPONENTS --
-- --
-- P O S I X . T E R M I N A L _ F U N C T I O N S --
-- --
-- S p e c --
-- --
-- --
-- This file is a component of FLORIST, an implementation of the POSIX --
-- Ada bindings for use with the GNAT Ada compiler and the FSU Gnu Ada --
-- Runtime Library (GNARL). --
-- --
-- This package specification contains some text extracted from IEEE STD --
-- 1003.5: 1990, Information Technology -- POSIX Ada Language Interfaces --
-- Part 1: Binding for System Application Program Interface, as amended --
-- by IEEE STD 1003.5b: 1996, Amendment 1: Realtime Extensions, copyright --
-- 1996 by the Institute of Electrical and Electronics Engineers, Inc. --
-- --
-- The package specifications in the IEEE standards cited above represent --
-- only a portion of the documents and are not to be interpreteted --
-- outside the context of the documents. The standards must be used in --
-- conjunction with the package specifications in order to claim --
-- conformance. The IEEE takes no responsibility for and will assume no --
-- liability for damages resulting from the reader's misinterpretation of --
-- said information resulting from its out-of-context nature. To order --
-- copies of the IEEE standards, please contact the IEEE Service Center --
-- at 445 Hoes Lane, PO Box 1331, Piscataway, NJ 08855-1331; via phone at --
-- 1-800-678-IEEE, 908-981-1393; or via fax at 908-981-9667. --
-- --
-- These package specifications are distributed in the hope that they --
-- will be useful, but WITHOUT ANY WARRANTY; without even the implied --
-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. --
-- --
------------------------------------------------------------------------------
with POSIX.C,
POSIX.IO,
POSIX.Process_Identification;
package POSIX.Terminal_Functions is
-- Special Characters used in terminal input
Null_POSIX_Character : constant POSIX.POSIX_Character
:= POSIX.POSIX_Character'Val (0);
Flag_POSIX_Character : constant POSIX.POSIX_Character
:= POSIX.POSIX_Character'Val (0);
-- Get and Define Terminal operating characteristics
type Terminal_Characteristics is private;
Invalid_Terminal_Characteristics : constant Terminal_Characteristics;
function Get_Terminal_Characteristics (File : POSIX.IO.File_Descriptor)
return Terminal_Characteristics;
type Terminal_Action_Times is
(Immediately, After_Output, After_Output_And_Input);
procedure Set_Terminal_Characteristics
(File : POSIX.IO.File_Descriptor;
Characteristics : Terminal_Characteristics;
Apply : Terminal_Action_Times := Immediately;
Masked_Signals : POSIX.Signal_Masking
:= POSIX.RTS_Signals);
type Terminal_Modes is
-- Subtype Input_Modes:
(Interrupt_On_Break, Map_CR_To_LF, Ignore_Break,
Ignore_CR, Ignore_Parity_Errors, Map_LF_To_CR,
Enable_Parity_Check, Strip_Character, Enable_Start_Stop_Input,
Enable_Start_Stop_Output, Mark_Parity_Errors,
-- Subtype Output_Modes :
Perform_Output_Processing,
-- Subtype Control_Modes :
Ignore_Modem_Status, Enable_Receiver, Send_Two_Stop_Bits,
Hang_Up_On_Last_Close, Parity_Enable, Odd_Parity,
-- Subtype Local_Modes:
Echo, Echo_Erase, Echo_Kill, Echo_LF, Canonical_Input,
Extended_Functions, Enable_Signals, No_Flush,
Send_Signal_For_BG_Output);
subtype Input_Modes is Terminal_Modes
range Interrupt_On_Break .. Mark_Parity_Errors;
subtype Output_Modes is Terminal_Modes
range Perform_Output_Processing .. Perform_Output_Processing;
subtype Control_Modes is Terminal_Modes
range Ignore_Modem_Status .. Odd_Parity;
subtype Local_Modes is Terminal_Modes
range Echo .. Send_Signal_For_BG_Output;
type Terminal_Modes_Set is array (Terminal_Modes) of Boolean;
subtype Bits_Per_Character is Positive range 5 .. 8;
type Baud_Rate is
(B0, B50, B75, B110, B134, B150, B200, B300, B600,
B1200, B1800, B2400, B4800, B9600, B19200, B38400,
B57600, B115200, B230400, B460800);
function Terminal_Modes_Of (Characteristics : Terminal_Characteristics)
return Terminal_Modes_Set;
procedure Define_Terminal_Modes
(Characteristics : in out Terminal_Characteristics;
Modes : Terminal_Modes_Set);
function Bits_Per_Character_Of
(Characteristics : Terminal_Characteristics)
return Bits_Per_Character;
procedure Define_Bits_Per_Character
(Characteristics : in out Terminal_Characteristics;
Bits : Bits_Per_Character);
function Input_Baud_Rate_Of
(Characteristics : Terminal_Characteristics)
return Baud_Rate;
procedure Define_Input_Baud_Rate
(Characteristics : in out Terminal_Characteristics;
Input_Baud_Rate : Baud_Rate);
function Output_Baud_Rate_Of
(Characteristics : Terminal_Characteristics)
return Baud_Rate;
procedure Define_Output_Baud_Rate
(Characteristics : in out Terminal_Characteristics;
Output_Baud_Rate : Baud_Rate);
type Control_Character_Selector is
(EOF_Char, EOL_Char, Erase_Char, Interrupt_Char,
Kill_Char, Quit_Char, Suspend_Char, Start_Char, Stop_Char);
function Special_Control_Character_Of
(Characteristics : Terminal_Characteristics;
Selector : Control_Character_Selector)
return POSIX.POSIX_Character;
procedure Define_Special_Control_Character
(Characteristics : in out Terminal_Characteristics;
Selector : Control_Character_Selector;
Char : POSIX.POSIX_Character);
procedure Disable_Control_Character
(Characteristics : in out Terminal_Characteristics;
Selector : Control_Character_Selector);
function Input_Time_Of (Characteristics : Terminal_Characteristics)
return Duration;
procedure Define_Input_Time
(Characteristics : in out Terminal_Characteristics;
Input_Time : Duration);
function Minimum_Input_Count_Of
(Characteristics : Terminal_Characteristics)
return Natural;
procedure Define_Minimum_Input_Count
(Characteristics : in out Terminal_Characteristics;
Minimum_Input_Count : Natural);
-- Line Control Operations
procedure Send_Break
(File : POSIX.IO.File_Descriptor;
The_Duration : Duration := 0.0);
procedure Drain
(File : POSIX.IO.File_Descriptor;
Masked_Signals : POSIX.Signal_Masking := POSIX.RTS_Signals);
type Queue_Selector is
(Received_But_Not_Read, Written_But_Not_Transmitted, Both);
procedure Discard_Data
(File : POSIX.IO.File_Descriptor;
Selector : Queue_Selector);
type Flow_Action is
(Suspend_Output, Restart_Output, Transmit_Stop, Transmit_Start);
procedure Flow
(File : POSIX.IO.File_Descriptor;
Action : Flow_Action);
-- Foreground Process Group ID
function Get_Process_Group_ID
(File : POSIX.IO.File_Descriptor)
return POSIX.Process_Identification.Process_Group_ID;
procedure Set_Process_Group_ID
(File : POSIX.IO.File_Descriptor;
Group_ID : POSIX.Process_Identification.Process_Group_ID);
-- Get pathname of current controlling terminal for the current process
function Get_Controlling_Terminal_Name return POSIX.Pathname;
private
-- .... Change POSIX.5?
-- This is a terrible choice of interface.
-- The type Terminal_Characteristics should have been a
-- limited private type, but is is declared private here!
-- We are forced to do strange contortions to provide:
-- (1) implicit initialization of objects of this type to
-- a recognizable "undefined" value
-- (2) a constant to stand for this undefined value
-- (3) no use of "access types" -- i.e. heap allocation
-- Were it not for the latter, we could easily map the type
-- Terminal_Characteristics to the C type struct termios *.
type Terminal_Characteristics is
record
Valid : Boolean := False;
termios : aliased POSIX.C.struct_termios;
end record;
Dummy : Terminal_Characteristics;
-- provides a default initial value, without depending on
-- internal structure of type POSIX.C.struct_termios
Invalid_Terminal_Characteristics : constant Terminal_Characteristics
:= Dummy;
end POSIX.Terminal_Functions;
|