DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ B T

⟦57fd26758⟧ TextFile

    Length: 5801 (0x16a9)
    Types: TextFile
    Names: »B«

Derivation

└─⟦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⟧ 

TextFile

separate (Pool)
task body Manager is
    Ptr     : Pool.Object_Ptr;
    Success : Boolean;
begin
    loop
        select
            accept Control (Object :     Directory.Object;
                            Status : out Pool.Status) do
                begin
                    String_Map.Define (The_Map        => Map,
                                       D              => Full_Name (Object),
                                       R              => Nil (Object),
                                       Trap_Multiples => True);
                    Status := Ok;
                exception
                    when String_Map.Multiply_Defined =>
                        Status := Object_Already_In_The_Pool;
                    when others =>
                        raise;
                end;
            end Control;
        or
            accept Uncontrol (Object :     Directory.Object;
                              Status : out Pool.Status) do
                begin
                    String_Map.Find (The_Map => Map,
                                     D       => Full_Name (Object),
                                     R       => Ptr,
                                     Success => Success);

                    if not Success then
                        Status := Object_Not_In_The_Pool;
                        return;
                    end if;

                    if not Reader.Is_Empty (Ptr.Readers) then
                        Status := Object_Has_Readers;
                        return;
                    end if;

                    if not Object_Editor.Same_Editor
                              (Ptr.Updater, Object_Editor.Nil) then
                        Status := Object_Has_Updater;
                        return;
                    end if;

                    String_Map.Undefine (The_Map => Map,
                                         D       => Full_Name (Object));
                    Status := Ok;
                exception
                    when String_Map.Undefined =>
                        Status := Object_Not_In_The_Pool;
                    when others =>
                        raise;
                end;
            end Uncontrol;
        or
            accept Abandon (Object :     Directory.Object;
                            Editor :     Object_Editor.Instance;
                            Status : out Pool.Status) do
                String_Map.Find (The_Map => Map,
                                 D       => Full_Name (Object),
                                 R       => Ptr,
                                 Success => Success);

                if not Success then
                    Status := Object_Not_In_The_Pool;
                    return;
                end if;

                if Object_Editor.Same_Editor (Ptr.Updater, Editor) then
                    Ptr.Updater := Object_Editor.Nil;
                end if;

                Reader.Delete (S => Ptr.Readers, X => Editor);

                Status := Ok;
            end Abandon;
        or
            accept Read (Object :     Directory.Object;
                         Editor :     Object_Editor.Instance;
                         Status : out Pool.Status) do
                String_Map.Find (The_Map => Map,
                                 D       => Full_Name (Object),
                                 R       => Ptr,
                                 Success => Success);

                if not Success then
                    Status := Object_Not_In_The_Pool;
                    return;
                end if;

                Reader.Add (S => Ptr.Readers, X => Editor);

                Status := Ok;
            end Read;
        or
            accept Update (Object :     Directory.Object;
                           Editor :     Object_Editor.Instance;
                           Status : out Pool.Status) do
                String_Map.Find (The_Map => Map,
                                 D       => Full_Name (Object),
                                 R       => Ptr,
                                 Success => Success);

                if not Success then
                    Status := Object_Not_In_The_Pool;
                    return;
                end if;

                if Object_Editor.Is_Nil (Ptr.Updater) then
                    Ptr.Updater := Editor;
                    Status      := Ok;
                else
                    Status := Object_Has_Updater;
                end if;
            end Update;
        or
            accept Abandon_Update (Object :     Directory.Object;
                                   Editor :     Object_Editor.Instance;
                                   Status : out Pool.Status) do
                String_Map.Find (The_Map => Map,
                                 D       => Full_Name (Object),
                                 R       => Ptr,
                                 Success => Success);

                if not Success then
                    Status := Object_Not_In_The_Pool;
                    return;
                end if;

                if Object_Editor.Same_Editor (Ptr.Updater, Editor) then
                    Ptr.Updater := Object_Editor.Nil;
                    Status      := Ok;
                else
                    Status := Bad_Updater;
                end if;

            end Abandon_Update;
        or
            accept Is_Controlled (Object :     Directory.Object;
                                  Status : out Boolean) do
                String_Map.Find (The_Map => Map,
                                 D       => Full_Name (Object),
                                 R       => Ptr,
                                 Success => Status);
            end Is_Controlled;
        or
            terminate;
        end select;
    end loop;
end Manager;