DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ B T ┃
Length: 18937 (0x49f9) Types: TextFile Names: »B«
└─⟦149519bd4⟧ Bits:30000546 8mm tape, Rational 1000, !projects 93-07-13 └─ ⟦124ff5788⟧ »DATA« └─⟦this⟧ └─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11 └─ ⟦129cab021⟧ »DATA« └─⟦this⟧ └─⟦f64eaa120⟧ Bits:30000752 8mm tape, Rational 1000, !projects 93 02 16 └─ ⟦6f12a12be⟧ »DATA« └─⟦this⟧ └─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04 └─ ⟦d65440be7⟧ »DATA« └─⟦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; ------------------------------------------------------------------------------