|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 15360 (0x3c00) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Test_Octet, seg_00f561
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─⟦5a81ac88f⟧ »Space Info Vol 1« └─⟦this⟧
with Octet; with Text_Io; use Octet; package body Test_Octet is -- TYPES -------------------------------------------------------------- type T_Bit_Octet is array (Num_Bit) of Boolean; -- VARIABLES ---------------------------------------------------------- Fin : Boolean := False; Octet_1, Octet_2, Flag, Num_Bit, Choix : T_Octet := 0; -- PROCEDURES --------------------------------------------------------- function Lire_Choix return T_Octet; procedure Lire_1_Octet_Bit; procedure Lire_1_Octet_Flag; procedure Lire_1_Octet; procedure Lire_2_Octets_Flag; procedure Lire_2_Octets; procedure Afficher_Resultat; function Convert_Bit (Octet_1 : T_Octet) return T_Bit_Octet; ----------------------------------------------------------------------- procedure Je_Teste_Octet is begin while not Fin loop Choix := Lire_Choix; case Choix is when 1 | 2 | 3 => Lire_1_Octet_Bit; case Choix is when 1 => if (Octet.Test_Bit (Octet_1, Num_Bit)) then Octet_1 := 1; else Octet_1 := 0; end if; when 2 => Octet.Set (Octet_1, Num_Bit); when 3 => Octet.Res (Octet_1, Num_Bit); when others => null; end case; when 4 | 5 | 6 | 8 | 9 => Lire_2_Octets; case Choix is when 4 => Octet_1 := Octet."and" (Octet_1, Octet_2); when 5 => Octet_1 := Octet."or" (Octet_1, Octet_2); when 6 => Octet_1 := Octet."xor" (Octet_1, Octet_2); when 8 => Octet_1 := Octet.Add (Octet_1, Octet_2); when 9 => Octet_1 := Octet.Sub (Octet_1, Octet_2); when others => null; end case; when 7 | 10 => Lire_1_Octet; case Choix is when 7 => Octet_1 := Octet."not" (Octet_1); when 10 => Octet_1 := Octet.Neg (Octet_1); when others => null; end case; when 11 | 12 | 16 | 22 | 23 | 24 | 25 | 26 | 27 | 28 => Lire_1_Octet_Flag; case Choix is when 11 => Octet.Inc_F (Octet_1, Flag); when 12 => Octet.Dec_F (Octet_1, Flag); when 16 => Octet.Neg_F (Octet_1, Flag); when 22 => Octet.Rl_F (Octet_1, Flag); when 23 => Octet.Rlc_F (Octet_1, Flag); when 24 => Octet.Rr_F (Octet_1, Flag); when 25 => Octet.Rrc_F (Octet_1, Flag); when 26 => Octet.Sla_F (Octet_1, Flag); when 27 => Octet.Sra_F (Octet_1, Flag); when 28 => Octet.Srl_F (Octet_1, Flag); when others => null; end case; when 13 | 14 | 15 | 17 | 18 | 19 | 20 | 21 => Lire_2_Octets_Flag; case Choix is when 13 => Octet.And_F (Octet_1, Octet_2, Flag); when 14 => Octet.Or_F (Octet_1, Octet_2, Flag); when 15 => Octet.Xor_F (Octet_1, Octet_2, Flag); when 17 => Octet.Adc_F (Octet_1, Octet_2, Flag); when 18 => Octet.Add_F (Octet_1, Octet_2, Flag); when 19 => Octet.Sbc_F (Octet_1, Octet_2, Flag); when 20 => Octet.Sub_F (Octet_1, Octet_2, Flag); when 21 => Octet.Cp_F (Octet_1, Octet_2, Flag); when others => null; end case; when others => Text_Io.Put_Line ("tu t'es plante minable !!!"); end case; Afficher_Resultat; end loop; end Je_Teste_Octet; ---------------------------------------------------------------------- function Lire_Octet_Hexa return T_Octet is Resultat : T_Octet := 0; Chaine_Lue : String (1 .. 2); begin Text_Io.Get (Chaine_Lue); case Chaine_Lue (1) is when '0' .. '9' => Resultat := Character'Pos (Chaine_Lue (1)) - Character'Pos ('0'); when 'a' .. 'f' => Resultat := Character'Pos (Chaine_Lue (1)) - Character'Pos ('a') + 10; when 'A' .. 'F' => Resultat := Character'Pos (Chaine_Lue (1)) - Character'Pos ('A') + 10; when others => Fin := True; end case; Resultat := Resultat * 16; case Chaine_Lue (2) is when '0' .. '9' => Resultat := Resultat + Character'Pos (Chaine_Lue (2)) - Character'Pos ('0'); when 'a' .. 'f' => Resultat := Resultat + Character'Pos (Chaine_Lue (2)) - Character'Pos ('a') + 10; when 'A' .. 'F' => Resultat := Resultat + Character'Pos (Chaine_Lue (2)) - Character'Pos ('A') + 10; when others => Fin := True; end case; Text_Io.Put_Line (""); return Resultat; end Lire_Octet_Hexa; ---------------------------------------------------------------------- function Lire_Octet_Binaire return T_Octet is Resultat : T_Octet := 0; Chaine_Lue : String (1 .. 8); begin Text_Io.Get (Chaine_Lue); for I in reverse 1 .. 8 loop if (Chaine_Lue (I) = '1') then Resultat := Resultat + 2 ** (8 - I); end if; end loop; return Resultat; end Lire_Octet_Binaire; ---------------------------------------------------------------------- procedure Lire_2_Octets is begin Text_Io.Put ("octet_1> "); Octet_1 := Lire_Octet_Hexa; Text_Io.Put ("octet_2> "); Octet_2 := Lire_Octet_Hexa; end Lire_2_Octets; ---------------------------------------------------------------------- procedure Lire_2_Octets_Flag is begin Lire_2_Octets; Text_Io.Put ("flag > "); Flag := Lire_Octet_Binaire; end Lire_2_Octets_Flag; ---------------------------------------------------------------------- procedure Lire_1_Octet is begin Text_Io.Put ("octet_1> "); Octet_1 := Lire_Octet_Hexa; end Lire_1_Octet; ---------------------------------------------------------------------- procedure Lire_1_Octet_Flag is begin Text_Io.Put ("octet_1> "); Octet_1 := Lire_Octet_Hexa; Text_Io.Put ("flag > "); Flag := Lire_Octet_Binaire; end Lire_1_Octet_Flag; ---------------------------------------------------------------------- procedure Lire_1_Octet_Bit is begin Text_Io.Put ("octet_1> "); Octet_1 := Lire_Octet_Hexa; Text_Io.Put ("num bit> "); Num_Bit := Lire_Octet_Hexa; end Lire_1_Octet_Bit; ---------------------------------------------------------------------- function Lire_Choix return T_Octet is begin Text_Io.Put_Line (""); Text_Io.Put_Line ("------------------------------------------"); Text_Io.Put_Line (""); Text_Io.Put ("choix > "); return Lire_Octet_Hexa; end Lire_Choix; ---------------------------------------------------------------------- procedure Afficher_Octet_Hexa (Un_Octet : T_Octet) is Tab_Hexa : constant array (Integer range 0 .. 15) of Character := ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'); begin Text_Io.Put (Tab_Hexa (Un_Octet / 16)); Text_Io.Put (Tab_Hexa (Un_Octet mod 16)); end Afficher_Octet_Hexa; ---------------------------------------------------------------------- procedure Afficher_Octet_Binaire (Un_Octet : T_Octet) is Bit_Octet : T_Bit_Octet; begin Bit_Octet := Convert_Bit (Un_Octet); for I in reverse Octet.Num_Bit loop if Bit_Octet (I) then Text_Io.Put (" 1"); else Text_Io.Put (" 0"); end if; end loop; end Afficher_Octet_Binaire; ---------------------------------------------------------------------- procedure Afficher_Resultat is begin Text_Io.Put_Line (""); Text_Io.Put ("resultat = "); Afficher_Octet_Hexa (Octet_1); Text_Io.Put_Line (""); Text_Io.Put ("flag = "); Afficher_Octet_Binaire (Flag); Text_Io.Put_Line (""); end Afficher_Resultat; -------------------------------------------------- function Convert_Bit (Octet_1 : T_Octet) return T_Bit_Octet is Bit_Oct : T_Bit_Octet; Octet : T_Octet := Octet_1; begin for I in 0 .. 7 loop Bit_Oct (I) := ((Octet mod 2) /= 0); Octet := Octet / 2; end loop; return Bit_Oct; end Convert_Bit; end Test_Octet;
nblk1=e nid=9 hdr6=18 [0x00] rec0=28 rec1=00 rec2=01 rec3=028 [0x01] rec0=17 rec1=00 rec2=03 rec3=06e [0x02] rec0=18 rec1=00 rec2=02 rec3=042 [0x03] rec0=16 rec1=00 rec2=0b rec3=024 [0x04] rec0=16 rec1=00 rec2=07 rec3=060 [0x05] rec0=27 rec1=00 rec2=04 rec3=020 [0x06] rec0=1d rec1=00 rec2=0c rec3=00c [0x07] rec0=26 rec1=00 rec2=05 rec3=018 [0x08] rec0=26 rec1=00 rec2=0e rec3=036 [0x09] rec0=1d rec1=00 rec2=0a rec3=008 [0x0a] rec0=26 rec1=00 rec2=06 rec3=028 [0x0b] rec0=05 rec1=00 rec2=0d rec3=000 [0x0c] rec0=05 rec1=00 rec2=0d rec3=000 [0x0d] rec0=00 rec1=00 rec2=00 rec3=000 tail 0x2150b56da822b501b4938 0x42a00088462060003 Free Block Chain: 0x9: 0000 00 08 00 68 80 0d 74 65 74 5f 32 2c 20 46 6c 61 ┆ h tet_2, Fla┆ 0x8: 0000 00 00 00 04 80 01 7c 01 02 03 73 05 2d 2d 2d 2d ┆ | s ----┆