|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 29696 (0x7400)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Database, seg_026cce, seg_027f4b
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
-------------------------------------------------------------------------------
with Direct_Io;
with Text_Io;
with Request;
with Notice;
package body Database is
File_Request_Name : constant String := "requests";
File_Notice_Name : constant String := "notices";
Request_File : Request_Io.File_Type;
Notice_File : Notice_Io.File_Type;
--------------------------------------------------------------------------
procedure Succ (Count : in out Request_Io.Count) is
begin
if (Natural (Count) < Natural (Request_Io.Count'Last)) then
Count := Request_Io.Count'Succ (Count);
end if;
end Succ;
--------------------------------------------------------------------------
procedure Pred (Count : in out Request_Io.Count) is
begin
if (Natural (Count) > Natural (Request_Io.Count'First)) then
Count := Request_Io.Count'Pred (Count);
end if;
end Pred;
--------------------------------------------------------------------------
procedure Succ (Count : in out Notice_Io.Count) is
begin
if (Natural (Count) < Natural (Notice_Io.Count'Last)) then
Count := Notice_Io.Count'Succ (Count);
end if;
end Succ;
--------------------------------------------------------------------------
procedure Pred (Count : in out Notice_Io.Count) is
begin
if (Natural (Count) > Natural (Notice_Io.Count'First)) then
Count := Notice_Io.Count'Pred (Count);
end if;
end Pred;
--------------------------------------------------------------------------
procedure Put (The_Element : Request.Element;
Action : Actions := Performed;
Status : States := Unlock) is
Count : Request_Io.Count;
R_Data : Request_Data;
begin
R_Data.The_Element := The_Element; Request.Add_Handler (Umps_Defs.Any_Behaviors, R_Data.The_Element);
R_Data.State := Status;
R_Data.Action := Action;
Count := Request_Io.Size (Request_File);
Succ (Count);
Request_Io.Write (Request_File, R_Data, Count);
exception
when Request_Io.Use_Error =>
raise Too_Many_Requests_Error;
when Request_Io.Mode_Error =>
raise Internal_Error;
when Request_Io.Device_Error =>
raise Device_Error;
end Put;
--------------------------------------------------------------------------
procedure Put (The_Element : Notice.Element) is
Count : Notice_Io.Count;
N_Data : Notice_Data;
begin
N_Data.The_Element := The_Element;
Notice.Add_Handler (Umps_Defs.Any_Behaviors, N_Data.The_Element);
Count := Notice_Io.Size (Notice_File);
Succ (Count);
Notice_Io.Write (Notice_File, N_Data, Count);
exception
when Notice_Io.Use_Error =>
raise Too_Many_Requests_Error;
when Notice_Io.Mode_Error =>
raise Internal_Error;
when Notice_Io.Device_Error =>
raise Device_Error;
end Put;
--------------------------------------------------------------------------
procedure Next (Iter : in out Iter_Request) is
Element : Request.Element;
R_Data : Request_Data;
function Is_Field_Equal is new Request.Is_Equal (Field => Iter.Field);
begin
Succ (Iter.Count);
Request_Io.Set_Index (Request_File, Iter.Count);
Search_Next_Element:
while (not Request_Io.End_Of_File (Request_File)) loop
Request_Io.Read (Request_File, R_Data);
if ((Iter.State = States'(Both) or else
R_Data.State = Iter.State) and then
(Iter.Action = Actions'(Both) or else
R_Data.Action = Iter.Action)) then
Element := Iter.Condition_Data;
if (Request.Sender (Element) = Umps_Defs.Any_Behaviors) then
Request.Add_Sender
(Request.Sender (R_Data.The_Element), Element);
end if;
exit Search_Next_Element when
Is_Field_Equal (R_Data.The_Element, Element);
end if;
Succ (Iter.Count);
end loop Search_Next_Element;
exception
when Notice_Io.End_Error =>
raise Internal_Error;
when Notice_Io.Data_Error =>
raise Integrity_Error;
when Notice_Io.Mode_Error =>
raise Internal_Error;
when Notice_Io.Device_Error =>
raise Device_Error;
end Next;
--------------------------------------------------------------------------
procedure Next (Iter : in out Iter_Notice) is
Element : Notice.Element;
N_Data : Notice_Data;
function Is_Field_Equal is new Notice.Is_Equal (Field => Iter.Field);
begin
Succ (Iter.Count);
Notice_Io.Set_Index (Notice_File, Iter.Count);
Search_Next_Element:
while (not Notice_Io.End_Of_File (Notice_File)) loop
Notice_Io.Read (Notice_File, N_Data);
Element := Iter.Condition_Data;
if (Notice.Sender (Element) = Umps_Defs.Any_Behaviors) then
Notice.Add_Sender
(Notice.Sender (N_Data.The_Element), Element);
end if; -- They must have the same behavior number
exit Search_Next_Element when Is_Field_Equal
(N_Data.The_Element, Element);
Succ (Iter.Count);
end loop Search_Next_Element;
exception
when Notice_Io.End_Error =>
raise Internal_Error;
when Notice_Io.Data_Error =>
raise Integrity_Error;
when Notice_Io.Mode_Error =>
raise Internal_Error;
when Notice_Io.Device_Error =>
raise Device_Error;
end Next;
--------------------------------------------------------------------------
procedure Init (Iter : in out Iter_Request;
On : Request.Element;
Field : Slot.Fields := Slot.On_Value;
Action : Actions := Interested;
State : States := Unlock;
Behavior : Umps_Defs.Behavior_Number :=
Umps_Defs.Any_Behaviors) is
begin
Iter.Condition_Data := On;
Request.Add_Sender (Behavior, Into => Iter.Condition_Data);
Request.Add_Handler (Umps_Defs.Any_Behaviors,
Into => Iter.Condition_Data);
Iter.Count := Request_Io.Count'First;
Iter.Field := Field;
Iter.State := State;
Iter.Action := Action;
Next (Iter);
end Init;
--------------------------------------------------------------------------
procedure Init (Iter : in out Iter_Notice;
On : Notice.Element;
Field : Slot.Fields := Slot.On_Value;
Behavior : Umps_Defs.Behavior_Number :=
Umps_Defs.Any_Behaviors
) is
begin
Iter.Condition_Data := On;
Notice.Add_Sender (Behavior, Into => Iter.Condition_Data);
Notice.Add_Handler (Umps_Defs.Any_Behaviors,
Into => Iter.Condition_Data);
Iter.Count := Notice_Io.Count'First;
Iter.Field := Field;
Next (Iter);
end Init;
--------------------------------------------------------------------------
function Done (Iter : Iter_Request) return Boolean is
begin
return (Natural (Iter.Count) > Natural
(Request_Io.Size (Request_File)));
end Done;
--------------------------------------------------------------------------
function Done (Iter : Iter_Notice) return Boolean is
begin
return (Natural (Iter.Count) > Natural (Notice_Io.Size (Notice_File)));
end Done;
--------------------------------------------------------------------------
procedure Value (Iter : Iter_Request;
The_Element : out Request.Element;
Action : out Actions;
State : out States) is
R_Data : Request_Data;
begin
if (not Done (Iter)) then
Request_Io.Read (Request_File, R_Data, Iter.Count);
The_Element := R_Data.The_Element;
Action := R_Data.Action;
State := R_Data.State;
else
raise Iterator_Error;
end if;
exception
when Request_Io.End_Error =>
raise Internal_Error;
when Request_Io.Data_Error =>
raise Integrity_Error;
when Request_Io.Mode_Error =>
raise Internal_Error;
when Request_Io.Device_Error =>
raise Device_Error;
end Value;
--------------------------------------------------------------------------
procedure Value (Iter : Iter_Notice; The_Element : out Notice.Element) is
N_Data : Notice_Data;
begin
if (not Done (Iter)) then
Notice_Io.Read (Notice_File, N_Data, Iter.Count);
The_Element := N_Data.The_Element;
else
raise Iterator_Error;
end if;
exception
when Notice_Io.End_Error =>
raise Internal_Error;
when Notice_Io.Data_Error =>
raise Integrity_Error;
when Notice_Io.Mode_Error =>
raise Internal_Error;
when Notice_Io.Device_Error =>
raise Device_Error;
end Value;
--------------------------------------------------------------------------
procedure Replace (Iter : Iter_Request;
The_Element : Request.Element;
With_Action : Actions := Performed;
With_State : States := Unlock) is
R_Data : Request_Data;
begin
R_Data.The_Element := The_Element;
R_Data.Action := With_Action;
R_Data.State := With_State;
Request_Io.Write (Request_File, R_Data, Iter.Count);
exception
when Request_Io.Use_Error =>
raise Internal_Error;
-- It's a rewrite
when Request_Io.Mode_Error =>
raise Internal_Error;
when Request_Io.Device_Error =>
raise Device_Error;
end Replace;
--------------------------------------------------------------------------
procedure Replace (Iter : Iter_Notice; The_Element : Notice.Element) is
N_Data : Notice_Data;
begin
N_Data.The_Element := The_Element;
Notice_Io.Write (File => Notice_File, Item => N_Data, To => Iter.Count);
exception
when Notice_Io.Use_Error =>
raise Internal_Error;
-- It's a rewrite
when Notice_Io.Mode_Error =>
raise Internal_Error;
when Notice_Io.Device_Error =>
raise Device_Error;
end Replace;
--------------------------------------------------------------------------
procedure Display (R_Data : Request_Data; String_Before : String := "") is
begin
Text_Io.Put_Line (String_Before & "State => " &
States'Image (R_Data.State));
Text_Io.Put_Line (String_Before & "Action => " &
Actions'Image (R_Data.Action));
Request.Display (R_Data.The_Element, String_Before & " ");
end Display;
--------------------------------------------------------------------------
procedure Display (N_Data : Notice_Data; String_Before : String := "") is
begin
Notice.Display (N_Data.The_Element, String_Before);
end Display;
--------------------------------------------------------------------------
procedure Display_Requests (String_Before : String := "") is
begin
if (Natural (Request_Io.Size (Request_File)) = 0) then
Text_Io.Put_Line (String_Before & "<empty>");
return;
end if;
Display_All:
declare
R_Data : Request_Data;
begin
Request_Io.Set_Index (Request_File,
Request_Io.Positive_Count'First);
Read_And_Display_All:
while (not Request_Io.End_Of_File (Request_File)) loop
Request_Io.Read (Request_File, R_Data);
Display (R_Data, String_Before);
end loop Read_And_Display_All;
exception
when Request_Io.End_Error =>
raise Internal_Error;
when Request_Io.Data_Error =>
raise Integrity_Error;
when Request_Io.Mode_Error =>
raise Internal_Error;
when Request_Io.Device_Error =>
raise Device_Error;
end Display_All;
end Display_Requests;
--------------------------------------------------------------------------
procedure Display_Notices (String_Before : String := "") is
begin
if (Natural (Notice_Io.Size (Notice_File)) = 0) then
Text_Io.Put_Line (String_Before & "<empty>");
return;
end if;
Display_All:
declare
Element : Notice_Data;
begin
Notice_Io.Set_Index (Notice_File,
Notice_Io.Positive_Count'First);
Read_And_Display_All:
while (not Notice_Io.End_Of_File (Notice_File)) loop
Notice_Io.Read (Notice_File, Element);
Display (Element, String_Before);
end loop Read_And_Display_All;
exception
when Notice_Io.End_Error =>
raise Internal_Error;
when Notice_Io.Data_Error =>
raise Integrity_Error;
when Notice_Io.Mode_Error =>
raise Internal_Error;
when Notice_Io.Device_Error =>
raise Device_Error;
end Display_All;
end Display_Notices;
--------------------------------------------------------------------------
procedure Display is
begin
Text_Io.New_Line;
Text_Io.New_Line;
Text_Io.Put_Line ("-- Requests :");
Display_Requests (" ");
Text_Io.Put_Line ("-- End Requests");
Text_Io.New_Line;
Text_Io.New_Line;
Text_Io.Put_Line ("-- Notices : ");
Display_Notices (" ");
Text_Io.Put_Line ("-- End Notices");
end Display;
--------------------------------------------------------------------------
procedure Open_Anyway_Request_File is
begin
Request_Io.Open (File => Request_File,
Mode => Request_Io.Inout_File,
Name => File_Request_Name);
exception
when Request_Io.Name_Error =>
Creating_Files:
declare
begin
Request_Io.Create (File => Request_File,
Mode => Request_Io.Inout_File,
Name => File_Request_Name);
exception
when Request_Io.Status_Error =>
raise Already_Open_Error;
when Request_Io.Name_Error | Request_Io.Use_Error =>
raise Internal_Error;
end Creating_Files;
when Request_Io.Status_Error =>
raise Already_Open_Error;
when Request_Io.Use_Error =>
raise Internal_Error;
end Open_Anyway_Request_File;
--------------------------------------------------------------------------
procedure Open_Anyway_Notice_File is
begin
Notice_Io.Open (File => Notice_File,
Mode => Notice_Io.Inout_File,
Name => File_Notice_Name);
exception
when Notice_Io.Name_Error =>
Creating_Files:
declare
begin
Notice_Io.Create (File => Notice_File,
Mode => Notice_Io.Inout_File,
Name => File_Notice_Name);
exception
when Notice_Io.Status_Error =>
raise Already_Open_Error;
when Notice_Io.Name_Error | Notice_Io.Use_Error =>
raise Internal_Error;
end Creating_Files;
when Notice_Io.Status_Error =>
raise Already_Open_Error;
when Notice_Io.Use_Error =>
raise Internal_Error;
end Open_Anyway_Notice_File;
--------------------------------------------------------------------------
procedure Destroy is
begin
Request_Io.Open (File => Request_File,
Mode => Request_Io.Inout_File,
Name => File_Request_Name);
Notice_Io.Open (File => Notice_File,
Mode => Notice_Io.Inout_File,
Name => File_Notice_Name);
raise Already_Open_Error;
exception
when Already_Open_Error | Request_Io.Status_Error =>
Deleting_Files:
declare
begin
Request_Io.Delete (Request_File);
Notice_Io.Delete (Notice_File);
exception
when Request_Io.Status_Error =>
null;
when Request_Io.Use_Error =>
raise Internal_Error;
end Deleting_Files;
when Request_Io.Device_Error =>
raise Device_Error;
when Request_Io.Name_Error | Request_Io.Use_Error =>
null;
end Destroy;
--------------------------------------------------------------------------
procedure Open is
begin
Open_Anyway_Request_File;
Open_Anyway_Notice_File;
end Open;
--------------------------------------------------------------------------
procedure Close is
begin
Open_Anyway_Request_File;
Open_Anyway_Notice_File;
raise Already_Open_Error;
exception
when Already_Open_Error =>
Request_Io.Close (Request_File);
Notice_Io.Close (Notice_File);
end Close;
end Database;
------------------------------------------------------------------------------
nblk1=1c
nid=18
hdr6=2e
[0x00] rec0=21 rec1=00 rec2=01 rec3=012
[0x01] rec0=00 rec1=00 rec2=1c rec3=004
[0x02] rec0=1d rec1=00 rec2=0e rec3=002
[0x03] rec0=00 rec1=00 rec2=03 rec3=002
[0x04] rec0=1a rec1=00 rec2=05 rec3=04c
[0x05] rec0=00 rec1=00 rec2=17 rec3=014
[0x06] rec0=1c rec1=00 rec2=11 rec3=00a
[0x07] rec0=1c rec1=00 rec2=0d rec3=018
[0x08] rec0=16 rec1=00 rec2=02 rec3=03a
[0x09] rec0=19 rec1=00 rec2=08 rec3=086
[0x0a] rec0=18 rec1=00 rec2=0a rec3=028
[0x0b] rec0=1c rec1=00 rec2=14 rec3=02e
[0x0c] rec0=1d rec1=00 rec2=15 rec3=01c
[0x0d] rec0=1c rec1=00 rec2=16 rec3=040
[0x0e] rec0=1d rec1=00 rec2=04 rec3=012
[0x0f] rec0=1a rec1=00 rec2=19 rec3=00a
[0x10] rec0=16 rec1=00 rec2=06 rec3=052
[0x11] rec0=1a rec1=00 rec2=0f rec3=040
[0x12] rec0=1f rec1=00 rec2=07 rec3=008
[0x13] rec0=18 rec1=00 rec2=1b rec3=028
[0x14] rec0=19 rec1=00 rec2=10 rec3=02e
[0x15] rec0=1a rec1=00 rec2=1a rec3=05a
[0x16] rec0=1e rec1=00 rec2=12 rec3=000
[0x17] rec0=19 rec1=00 rec2=10 rec3=02e
[0x18] rec0=1a rec1=00 rec2=1a rec3=05a
[0x19] rec0=1e rec1=00 rec2=12 rec3=000
[0x1a] rec0=1e rec1=00 rec2=12 rec3=000
[0x1b] rec0=1e rec1=00 rec2=12 rec3=000
tail 0x21520431883aa67618714 0x42a00088462063c03
Free Block Chain:
0x18: 0000 00 0b 00 0e 80 0b 65 72 6e 61 6c 5f 45 72 72 6f ┆ ernal_Erro┆
0xb: 0000 00 09 00 0e 80 0b 20 20 20 20 20 20 20 20 20 72 ┆ r┆
0x9: 0000 00 0c 03 f9 80 05 69 65 6c 64 3b 05 00 14 20 20 ┆ ield; ┆
0xc: 0000 00 13 00 04 80 01 6f 01 44 61 74 61 2c 20 43 6f ┆ o Data, Co┆
0x13: 0000 00 00 03 fc 80 31 20 20 20 20 20 20 20 20 20 20 ┆ 1 ┆