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

⟦04f574d34⟧ TextFile

    Length: 10363 (0x287b)
    Types: TextFile
    Notes: R1k Text-file segment

Derivation

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

TextFile

with Feuille;

-- evalue une instruction 
procedure evalue(tree : in Pcell ; success : in out boolean) is
iteratt : Struct_Component.Liste_Attribut.ListIter;
attrib : Struct_Component.Attribut;
iterstruc : Struct_Component.Liste_Structure.ListIter;
Struc : Struct_Component.Structure;
ok : boolean;
A_Bool : Boolean;
N_Nbr : Natural;
A_str : String_Table.I_String;

begin
  case Tree.Kind is
    when egal =>
        success := false;
        consulte(Tree.Left,Iteratt,ok);
        if not ok then
          raise Illegal_Test;
        else
          Attrib := Struct_Component.Liste_Attribut.CellValue(Iteratt);
          Consulte(Tree.Right,Iterstruc,ok);
          if ok then
            Struc := Struct_Component.Liste_Structure.CellValue(Itersrtuc);
            if Bounded_String.Image(Struct_Component.Get_Value(Attrib))=
               Bounded_String.Image(Struc.Name) then Success = true;
            else 
              success = False;
            end if;
          else
            Consulte(Tree.Right,A_Bool,ok);
            if ok then
              if Struct_Component.Get_Value(Attrib) = A_Bool then
                Success := True;
              else 
                Success := False;
              end if;
            else
              Consulte(Tree.Right,A_Nbr,ok);
              if ok then
                if Struct_Component.Get_Value(Attrib) = A_Nbr then
                  Success := True;
                else 
                  Success := False;
                end if;
              else
                Consulte(Tree.Right,A_Str,ok);
                if ok then
                  if Bounded_String.Image(Struct_Component.Get_Value(Attrib))=
                    Bounded_String.Image(A_Str) then Success = true;
                  else 
                    success = False;
                  end if;
                else 
                  raise illegal_Test;
                end if;
              end if;
            end if;
          end if;
        end if;
    when Et => evalue(Tree.left,ok);
               if ok then 
                 evalue(Tree.Left,ok);
                 if ok then
                   success := true;
                 else 
                   success := false;
                 end if;
               else
                 success := False;
               end if;

    when verbe => null;

    when vaut => Affecte(Tree,Success);

    when alors => Evalue(Tree.Left,ok);
                  if ok then
                    Execute(Tree.Right);
                    Success := True;
                  else 
                    Success := False;
                  end if;

    when others => raise Illegal_Expression;
  end case;
end evalue;

--- affecte un vaut
procedure affecte(Tree : in Pcell; Success : in out boolean) is
iteratt : Struct_Component.Liste_Attribut.ListIter;
attrib : Struct_Component.Attribut;
iteratt2 : Struct_Component.Liste_Attribut.ListIter;
attrib2 : Struct_Component.Attribut;
iterstruc : Struct_Component.Liste_Structure.ListIter;
Struc : Struct_Component.Structure;
ok : boolean;
A_Bool : Boolean;
N_Nbr : Natural;
A_str : String_Table.I_String;
begin
  Consulte(Tree.Left,iteratt,ok);
  if ok then
    Attrib := Struct_Component.Get_Value(Iteratt);
    Consulte(Tree.Right,iteratt2,ok);
    if ok then 
      Struct_Component.Liste_Attribut.Modify(iteratt,Struct_Component.Get_Value(Iteratt2));
      Success := true;
    else
      Consulte(Tree.Right,Iterstruc,ok);
      if ok then
        Struct_Component.Set_Value(Attrib,Struct_Component.Get_Name(Iterstruc));
        Struct_Component.Modify(Iteratt,Attrib);
        Success := True;
      else
        Consulte(Tree.Right,A_Bool,ok);
        if ok then
          Struct_Component.Set_Value(Attrib,A_Bool);
          Struct_Component.Modify(Iteratt,Attrib);
          Success := True;             
        else
          Consulte(Tree.Right,A_Nbr,ok);
          if ok then
            Struct_Component.Set_Value(Attrib,A_Nbr);
            Struct_Component.Modify(Iteratt,Attrib);
            Success := True;
          else
            Consulte(Tree.Right,A_Str,ok);
            if ok then
              if Tree.Right.Kind = Enum then
                if String_Table.Int_List.Isinside(Attrib.Data.List_Of_Enum,A_Str) then
                  Struct_Component.Set_Value(Attrib,A_Str);
                  Struct_Component.Liste_Attribut.Modify(iteratt,Attrib);
                  Success := True;
                else
                  raise illegal_Assignement;
                end if;
              else
                Struct_Component.Set_Value(Attrib,A_Str);
                Struct_Component.Liste_Attribut.Modify(iteratt,Attrib);
                Success := True;
              end if;
            else
              Consulte(Tree.Right,oper,nbr,ok);
              if ok then
                Success := True;
                case oper is 
                  when plus => 
                    Struct_Component.Set_Value(attrib,Struct_Component.Get_Value(Attrib)+nbr);
                  when moins => 
                    Struct_Component.Set_Value(attrib,Struct_Component.Get_Value(Attrib)-nbr);
                  when mult => 
                    Struct_Component.Set_Value(attrib,Struct_Component.Get_Value(Attrib)*nbr);
                  when div => 
                    Struct_Component.Set_Value(attrib,Struct_Component.Get_Value(Attrib)/nbr);
                  when others => 
                    Success := False;
                end case;
                if success then
                  Struct_Component.Liste_Attribut.Modify(iteratt,Attrib);
                else 
                  raise illegal_Operator;
                end if;
              else 
                raise Illegal_Assignement;
              end if;
            end if;
          end if; 
        end if; 
      end if;
    end if;
  else 
    Consulte(Tree.Left,Iterstruc,ok);
    if ok then 
      if Tree.Left.Kind = Piece_Courante then
        Consulte(Tree.Left,IterStruc2,ok);
        if ok then
          Struct_Component.Is_inside(Bounded_String.Image(Struct_Component.Get_Name(IterStruct2),Pieces.Liste,Piece.Piece_Courante,ok);   
          if ok then
            Success := True;
          else 
            raise Illegal_Assignement;
          end if;
        else
          Consulte(Tree.Left,IterAtt,ok);
          if ok then
            Struct_Component.Is_inside(Bounded_String.Image(Struct_Component.Get_Value(IterAtt),Pieces.Liste,Piece.Piece_Courante,ok);   
            if ok then
              success := true;
            else
              raise illegal_Assignement;
            end if;
          else 
           raise Illegal_Assignement;
          end if;
        end if;
      else 
        raise Illegal_Assignement;
      end if;
    else
      raise illegal_Assignement;
    end if;
  end if;
end affecte;

--- retourne element ( iterateur sur un attribut)
procedure Consulte(tree : in Pcell; iterAtt : in out Struct_Component.Liste_Attribut.ListIter; success : in out boolean);
Tmp_String : String_Table.I_String;
begin
  if tree.kind /= iter then
     if Bounded_String.Image(tree.Idattrib) = "" then
        Success = False;
     else 
       case tree.kind is
         when objet|hero|pnj|piece_courante =>
             Bounded_String.Copy(tmp_String,Tree.IdAttrib);
             case Tree.Kind is
               when Piece_Courante =>
                    Struct_Component.Is_Inside(Bounded_String.Image(Tmp_String),
                                               Struct_Component.Liste_Attribut.CellValue(Pieces.Piece_Courante).Attribut),iterAttrib,Success);
               when Hero =>
                    Struct_Component.Is_Inside(Bounded_String.Image(Tmp_String),
                                               Struct_Component.Liste_Attribut.CellValue(Pnjs.Hero).Attribut),iterAttrib,Success);          
               when Objet =>
                    Struct_Component.Is_Inside(Bounded_String.Image(Tmp_String),
                                               Struct_Component.Liste_Attribut.CellValue(Objets.Objet_Courant).Attribut),iterAttrib,Success);
               when Pnj =>
                    Struct_Component.Is_Inside(Bounded_String.Image(Tmp_String),
                                               Struct_Component.Liste_Attribut.CellValue(Pnjs.Pnj_Courant).Attribut),iterAttrib,Success);
               when others => success := false;
             end case;
         when others => success := false;
       end case;
     end if;
  else 
    iteratt := tree.Aiter;
    Success := True;
  end if;
end consulte;

--- retourne element_Global ou ident 
procedure Consulte(Tree : in Pcell; IterStruc : in out Struct_Component.Liste_Structure.ListIter; Success : in out Boolean) is
begin
  success := True;
  if tree.kind := Iter_s then
    IterStruc := Tree.AIter_s;
  else
    case Tree.kind is
      when Piece_Courante => iterstruc := Pieces.Piece_Courante;
      when hero => iterStruc := Pnjs.Hero;
      when Pnj => iterStruc := Pnjs.Pnjs_Courant;
      when Objet => iterStruc := Objets.Objet_Courant;
      when Direction => IterStruc := Directions.Direction_Courante;
      when others => Success := False;
    end case;
  end if
end consulte;  

--- retourne un booleen
Procedure Consulte(Tree : Pcell; A_Bool : in out Boolean; Success : In out Boolean) is
begin
  if tree.Kind = Bool then
    A_Bool := Tree.Booleen;
    Success := true;
  else 
    Success := False;
  end if;
end Consulte;

--- retourne un entier
Procedure Consulte(Tree : Pcell; A_Nbr : in out Natural; Success : In out Boolean) is
begin
  if tree.Kind = Number then
    A_Nbr := Tree.Nbr;
    Success := true;
  else 
    Success := False;
  end if;
end Consulte;

--- retourne une chaine ou un enum
Procedure Consulte(Tree : Pcell; A_Str : in out String_Table.I_String; Success : In out Boolean) is
begin
  if ((tree.Kind = chaine) or (Tree.Kind = enum ))then
    A_Str := Tree.IdAttrib;
    Success := true;
  else 
    Success := False;
  end if;
end Consulte;

--- retourne operateur plus valeur 
Procedure Consulte(Tree : in Pcell; op : in out Tcell; Nbr : in out Natural ; success : in out Boolean) is
begin
  case tree.Kind is
    when plus,moins,div,mult =>
      Consulte(Tree.Right,Nbr,success);
      if Success then 
        op := tree.Kind;
      end if;
    when others => success := False;
  end case;
end consulte