DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

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

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦f95943496⟧ Ada Source

    Length: 8192 (0x2000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, seg_00f182, separate Pool

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



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;



E3 Meta Data

    nblk1=7
    nid=0
    hdr6=e
        [0x00] rec0=1b rec1=00 rec2=01 rec3=014
        [0x01] rec0=18 rec1=00 rec2=06 rec3=02c
        [0x02] rec0=1a rec1=00 rec2=07 rec3=006
        [0x03] rec0=1a rec1=00 rec2=02 rec3=008
        [0x04] rec0=17 rec1=00 rec2=03 rec3=03a
        [0x05] rec0=1c rec1=00 rec2=04 rec3=010
        [0x06] rec0=03 rec1=00 rec2=05 rec3=001
    tail 0x2170ba9048229522daeaf 0x42a00088462062803