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: 17439 (0x441f) 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 Text_Io; with Constant_String, Text_Float; package body Slot is function Value (I : Integer) return Object is begin return Object'(Kind => Integer_Value, I_Val => I); end Value; function Value (F : Float) return Object is begin return Object'(Kind => Float_Value, F_Val => F); end Value; function Value (B : Boolean) return Object is begin return Object'(Kind => Boolean_Value, B_Val => B); end Value; function Value (C : Character) return Object is begin return (Object'(Kind => Character_Value, C_Val => C)); end Value; function Value (S : String) return Object is begin return (Object'(Kind => String_Value, S_Val => Constant_String.Value (S))); end Value; function Value (O : Instance.Reference) return Object is begin return (Kind => Class_Value, O_Val => O); end Value; ------------------------------------------------------------ function Get (O : Object) return Integer is begin case O.Kind is when Integer_Value => return O.I_Val; when Boolean_Value => return Boolean'Pos (O.B_Val); when Unchecked_Enumeration_Value => return O.Ue_Val; when Float_Value => return Integer (O.F_Val); when others => raise Integer_Object_Waited_Error; end case; end Get; function Get (O : Object) return Boolean is begin case O.Kind is when Boolean_Value => return O.B_Val; when others => raise Boolean_Object_Waited_Error; end case; end Get; function Get (O : Object) return Float is begin case O.Kind is when Float_Value => return O.F_Val; when Integer_Value => return Float (O.I_Val); when Boolean_Value => return Float (Boolean'Pos (O.B_Val)); when Unchecked_Enumeration_Value => return Float (O.Ue_Val); when others => raise Float_Object_Waited_Error; end case; end Get; function Get (O : Object) return Character is begin case O.Kind is when Character_Value => return O.C_Val; when String_Value => if Constant_String.Image (O.S_Val)'Length = 1 then return Constant_String.Image (O.S_Val) (1); else raise Char_Object_Waited_Error; end if; when others => raise Char_Object_Waited_Error; end case; end Get; function Get (O : Object) return String is begin case O.Kind is when String_Value => return Constant_String.Image (O.S_Val); when Character_Value => return ("" & O.C_Val); when Integer_Value => return Integer'Image (O.I_Val); when Unchecked_Enumeration_Value => return Integer'Image (O.Ue_Val); when Checked_Enumeration_Value => return Constant_String.Image (O.S_Val); when Boolean_Value => return Boolean'Image (O.B_Val); when others => raise String_Object_Waited_Error; end case; end Get; function Get (O : Object) return Instance.Reference is begin if O.Kind = Class_Value then return O.O_Val; else raise Reference_Object_Waited_Error; end if; end Get; ------------------------------------------------------------ procedure Set (O : in out Object; To : Integer; Is_Mutable : Boolean := False) is Done : Boolean := False; begin case O.Kind is when Integer_Value => O.I_Val := To; Done := True; when Unchecked_Enumeration_Value => O.Ue_Val := To; when others => null; end case; if not Done and then Is_Mutable then O := Object'(Kind => Integer_Value, I_Val => To); Done := True; end if; if not Done then raise Incompatible_Integer_And_Object; end if; end Set; ---------- procedure Set (O : in out Object; To : Boolean; Is_Mutable : Boolean := False) is begin if O.Kind = Boolean_Value then O.B_Val := To; elsif Is_Mutable then O := Object'(Kind => Boolean_Value, B_Val => To); else raise Incompatible_Boolean_And_Object; end if; end Set; ---------- procedure Set (O : in out Object; To : Float; Is_Mutable : Boolean := False) is begin if O.Kind = Float_Value then O.F_Val := To; elsif Is_Mutable then O := Object'(Kind => Float_Value, F_Val => To); else raise Incompatible_Float_And_Object; end if; end Set; ---------- procedure Set (O : in out Object; To : Character; Is_Mutable : Boolean := False) is begin if O.Kind = Character_Value then O.C_Val := To; elsif O.Kind = String_Value then O.S_Val := Constant_String.Value ("" & To); elsif Is_Mutable then O := Object'(Kind => Character_Value, C_Val => To); else raise Incompatible_Char_And_Object; end if; end Set; ---------- procedure Set (O : in out Object; To : String; Is_Mutable : Boolean := False) is begin if O.Kind = String_Value then O.S_Val := Constant_String.Value (To); elsif Is_Mutable then O := Object'(Kind => String_Value, S_Val => Constant_String.Value (To)); else raise Incompatible_String_And_Object; end if; end Set; ---------- procedure Set (O : in out Object; To : Instance.Reference; Is_Mutable : Boolean := False) is begin if O.Kind = Class_Value then O.O_Val := To; elsif Is_Mutable then O := Object'(Kind => Class_Value, O_Val => To); else raise Incompatible_Reference_And_Object; end if; end Set; function Is_Same_Type (Left, Right : Object) return Boolean is begin return Left.Kind = Right.Kind; end Is_Same_Type; --============================================================ package body Operators is package String_Operators renames Constant_String.Operators; function "<" (Left, Right : Object) return Boolean is begin if Left.Kind = Right.Kind then case Left.Kind is when Integer_Value => return Left.I_Val < Right.I_Val; when Boolean_Value => return Left.B_Val < Right.B_Val; when Float_Value => return Left.F_Val < Right.F_Val; when Character_Value => return Left.C_Val < Right.C_Val; when String_Value => return String_Operators."<" (Left.S_Val, Right.S_Val); when Unchecked_Enumeration_Value => return Left.C_Val < Right.C_Val; when others => raise Less_Operator_Error; end case; else raise Less_Operator_Error; end if; end "<"; --------------------- function "<=" (Left, Right : Object) return Boolean is begin if Left.Kind = Right.Kind then case Left.Kind is when Integer_Value => return Left.I_Val <= Right.I_Val; when Boolean_Value => return Left.B_Val <= Right.B_Val; when Float_Value => return Left.F_Val <= Right.F_Val; when Character_Value => return Left.C_Val <= Right.C_Val; when String_Value => return String_Operators."<=" (Left.S_Val, Right.S_Val); when Unchecked_Enumeration_Value => return Left.C_Val <= Right.C_Val; when others => raise Less_Equal_Operator_Error; end case; else raise Less_Equal_Operator_Error; end if; end "<="; --------------------- function ">" (Left, Right : Object) return Boolean is begin if Left.Kind = Right.Kind then case Left.Kind is when Integer_Value => return Left.I_Val > Right.I_Val; when Boolean_Value => return Left.B_Val > Right.B_Val; when Float_Value => return Left.F_Val > Right.F_Val; when Character_Value => return Left.C_Val > Right.C_Val; when String_Value => return String_Operators.">" (Left.S_Val, Right.S_Val); when Unchecked_Enumeration_Value => return Left.C_Val > Right.C_Val; when others => raise Great_Operator_Error; end case; else raise Great_Operator_Error; end if; end ">"; --------------------- function ">=" (Left, Right : Object) return Boolean is begin if Left.Kind = Right.Kind then case Left.Kind is when Integer_Value => return Left.I_Val >= Right.I_Val; when Boolean_Value => return Left.B_Val >= Right.B_Val; when Float_Value => return Left.F_Val >= Right.F_Val; when Character_Value => return Left.C_Val >= Right.C_Val; when String_Value => return String_Operators.">=" (Left.S_Val, Right.S_Val); when Unchecked_Enumeration_Value => return Left.C_Val >= Right.C_Val; when others => raise Great_Equal_Operator_Error; end case; else raise Great_Equal_Operator_Error; end if; end ">="; end Operators; --============================================================ function Image (O : Object) return String is begin case O.Kind is when Integer_Value => return Integer'Image (O.I_Val); when Float_Value => return Text_Float (O.F_Val); when Boolean_Value => return Boolean'Image (O.B_Val); when Character_Value => return Character'Image (O.C_Val); when String_Value => return Constant_String.Image (O.S_Val); when Class_Value => return Instance.Image (O.O_Val); when Checked_Enumeration_Value => return Constant_String.Image (O.S_Val); when Unchecked_Enumeration_Value => return Integer'Image (O.Ue_Val); end case; end Image; --============================================================ package body Enumeration_Facilities is function Value (E : Values) return Object is begin if Checked then return Object'(Kind => Checked_Enumeration_Value, Ce_Val => Constant_String.Value (Values'Image (E))); else return Object'(Kind => Unchecked_Enumeration_Value, Ue_Val => Values'Pos (E)); end if; end Value; function Image (E : Values) return String is begin return Constant_String.Image (Constant_String.Value (Values'Image (E))); end Image; function Get (O : Object) return Values is begin if O.Kind = Checked_Enumeration_Value then return Values'Value (Constant_String.Image (O.Ce_Val)); elsif O.Kind = Unchecked_Enumeration_Value then return Values'Val (O.Ue_Val); else raise Illegal_Enumeration_Object; end if; end Get; function Image (O : Object) return String is begin return Constant_String.Image (Constant_String.Value (Values'Image (Enumeration_Facilities.Get (O)))); end Image; procedure Set (O : in out Object; To : Values; Is_Mutable : Boolean := False) is begin if Checked then begin if O.Kind = Checked_Enumeration_Value then O.Ce_Val := Constant_String.Value (Values'Image (To)); elsif Is_Mutable then O := Object'(Kind => Checked_Enumeration_Value, Ce_Val => Constant_String.Value (Values'Image (To))); else raise Enumeration_Object_Error; end if; end; else begin if O.Kind = Unchecked_Enumeration_Value then O.Ue_Val := Values'Pos (To); elsif Is_Mutable then O := Object'(Kind => Unchecked_Enumeration_Value, Ue_Val => Values'Pos (To)); else raise Enumeration_Object_Error; end if; end; end if; end Set; function "<" (Left, Right : Object) return Boolean is begin if Left.Kind = Right.Kind then case Left.Kind is when Unchecked_Enumeration_Value => return Left.C_Val < Right.C_Val; when Checked_Enumeration_Value => return Values'Pos (Get (Left)) < Values'Pos (Get (Right)); when others => raise Enumeration_Less_Error; end case; else raise Enumeration_Less_Error; end if; end "<"; --------------------- function "<=" (Left, Right : Object) return Boolean is begin if Left.Kind = Right.Kind then case Left.Kind is when Unchecked_Enumeration_Value => return Left.C_Val <= Right.C_Val; when Checked_Enumeration_Value => return Values'Pos (Get (Left)) <= Values'Pos (Get (Right)); when others => raise Enumeration_Less_Equal_Error; end case; else raise Enumeration_Less_Equal_Error; end if; end "<="; --------------------- function ">" (Left, Right : Object) return Boolean is begin if Left.Kind = Right.Kind then case Left.Kind is when Unchecked_Enumeration_Value => return Left.C_Val > Right.C_Val; when Checked_Enumeration_Value => return Values'Pos (Get (Left)) > Values'Pos (Get (Right)); when others => raise Enumeration_Great_Error; end case; else raise Enumeration_Great_Error; end if; end ">"; --------------------- function ">=" (Left, Right : Object) return Boolean is begin if Left.Kind = Right.Kind then case Left.Kind is when Unchecked_Enumeration_Value => return Left.C_Val >= Right.C_Val; when Checked_Enumeration_Value => return Values'Pos (Get (Left)) >= Values'Pos (Get (Right)); when others => raise Enumeration_Great_Equal_Error; end case; else raise Enumeration_Great_Equal_Error; end if; end ">="; end Enumeration_Facilities; end Slot;