1 ------------------------------------------------------------------------------
3 -- GNAT RUN-TIME COMPONENTS --
5 -- S Y S T E M . P A R T I T I O N _ I N T E R F A C E --
8 -- (Dummy body for non-distributed case) --
10 -- Copyright (C) 1995-2001 Free Software Foundation, Inc. --
12 -- GNARL is free software; you can redistribute it and/or modify it under --
13 -- terms of the GNU General Public License as published by the Free Soft- --
14 -- ware Foundation; either version 2, or (at your option) any later ver- --
15 -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
16 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
17 -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
18 -- for more details. You should have received a copy of the GNU General --
19 -- Public License distributed with GNARL; see file COPYING. If not, write --
20 -- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
21 -- MA 02111-1307, USA. --
23 -- As a special exception, if other files instantiate generics from this --
24 -- unit, or you link this unit with other files to produce an executable, --
25 -- this unit does not by itself cause the resulting executable to be --
26 -- covered by the GNU General Public License. This exception does not --
27 -- however invalidate any other reasons why the executable file might be --
28 -- covered by the GNU Public License. --
30 -- GNAT was originally developed by the GNAT team at New York University. --
31 -- Extensive contributions were provided by Ada Core Technologies Inc. --
33 ------------------------------------------------------------------------------
35 package body System
.Partition_Interface
is
37 pragma Warnings
(Off
); -- supress warnings for unreferenced formals
41 type String_Access
is access String;
43 -- To have a minimal implementation of U'Partition_ID.
46 type Pkg_List
is access Pkg_Node
;
47 type Pkg_Node
is record
55 function getpid
return Integer;
56 pragma Import
(C
, getpid
);
58 PID
: constant Integer := getpid
;
60 function Lower
(S
: String) return String;
62 Passive_Prefix
: constant String := "SP__";
63 -- String prepended in top of shared passive packages
68 RCI
: in Boolean := True)
74 -----------------------------
75 -- Get_Active_Partition_Id --
76 -----------------------------
78 function Get_Active_Partition_ID
80 return System
.RPC
.Partition_ID
82 P
: Pkg_List
:= Pkg_Head
;
83 N
: String := Lower
(Name
);
87 if P
.Name
.all = N
then
88 return Get_Local_Partition_ID
;
95 end Get_Active_Partition_ID
;
97 ------------------------
98 -- Get_Active_Version --
99 ------------------------
101 function Get_Active_Version
107 end Get_Active_Version
;
109 ----------------------------
110 -- Get_Local_Partition_Id --
111 ----------------------------
113 function Get_Local_Partition_ID
return System
.RPC
.Partition_ID
is
115 return System
.RPC
.Partition_ID
(PID
mod M
);
116 end Get_Local_Partition_ID
;
118 ------------------------------
119 -- Get_Passive_Partition_ID --
120 ------------------------------
122 function Get_Passive_Partition_ID
124 return System
.RPC
.Partition_ID
127 return Get_Local_Partition_ID
;
128 end Get_Passive_Partition_ID
;
130 -------------------------
131 -- Get_Passive_Version --
132 -------------------------
134 function Get_Passive_Version
140 end Get_Passive_Version
;
142 ------------------------------
143 -- Get_RCI_Package_Receiver --
144 ------------------------------
146 function Get_RCI_Package_Receiver
148 return Interfaces
.Unsigned_64
152 end Get_RCI_Package_Receiver
;
154 -------------------------------
155 -- Get_Unique_Remote_Pointer --
156 -------------------------------
158 procedure Get_Unique_Remote_Pointer
159 (Handler
: in out RACW_Stub_Type_Access
)
163 end Get_Unique_Remote_Pointer
;
170 (Rsh_Command
: in String;
171 Name_Is_Host
: in Boolean;
172 General_Name
: in String;
173 Command_Line
: in String)
183 function Lower
(S
: String) return String is
187 for J
in T
'Range loop
188 if T
(J
) in 'A' .. 'Z' then
189 T
(J
) := Character'Val (Character'Pos (T
(J
)) -
190 Character'Pos ('A') +
191 Character'Pos ('a'));
198 ------------------------------------
199 -- Raise_Program_Error_For_E_4_18 --
200 ------------------------------------
202 procedure Raise_Program_Error_For_E_4_18
is
204 Ada
.Exceptions
.Raise_Exception
205 (Program_Error
'Identity,
206 "Illegal usage of remote access to class-wide type. See RM E.4(18)");
207 end Raise_Program_Error_For_E_4_18
;
209 -------------------------------------
210 -- Raise_Program_Error_Unknown_Tag --
211 -------------------------------------
213 procedure Raise_Program_Error_Unknown_Tag
214 (E
: in Ada
.Exceptions
.Exception_Occurrence
)
217 Ada
.Exceptions
.Raise_Exception
218 (Program_Error
'Identity, Ada
.Exceptions
.Exception_Message
(E
));
219 end Raise_Program_Error_Unknown_Tag
;
225 package body RCI_Info
is
227 -----------------------------
228 -- Get_Active_Partition_ID --
229 -----------------------------
231 function Get_Active_Partition_ID
return System
.RPC
.Partition_ID
is
232 P
: Pkg_List
:= Pkg_Head
;
233 N
: String := Lower
(RCI_Name
);
237 if P
.Name
.all = N
then
238 return Get_Local_Partition_ID
;
245 end Get_Active_Partition_ID
;
247 ------------------------------
248 -- Get_RCI_Package_Receiver --
249 ------------------------------
251 function Get_RCI_Package_Receiver
return Interfaces
.Unsigned_64
is
254 end Get_RCI_Package_Receiver
;
258 ------------------------------
259 -- Register_Passive_Package --
260 ------------------------------
262 procedure Register_Passive_Package
263 (Name
: in Unit_Name
;
264 Version
: in String := "")
267 Register_Receiving_Stub
(Passive_Prefix
& Name
, null, Version
);
268 end Register_Passive_Package
;
270 -----------------------------
271 -- Register_Receiving_Stub --
272 -----------------------------
274 procedure Register_Receiving_Stub
275 (Name
: in Unit_Name
;
276 Receiver
: in RPC
.RPC_Receiver
;
277 Version
: in String := "")
280 if Pkg_Tail
= null then
281 Pkg_Head
:= new Pkg_Node
'(new String'(Lower
(Name
)), null);
282 Pkg_Tail
:= Pkg_Head
;
285 Pkg_Tail
.Next
:= new Pkg_Node
'(new String'(Lower
(Name
)), null);
286 Pkg_Tail
:= Pkg_Tail
.Next
;
288 end Register_Receiving_Stub
;
295 (Main
: in Main_Subprogram_Type
:= null)
303 end System
.Partition_Interface
;