|
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: 12288 (0x3000) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Display_Environment, package body Visual_System_1, seg_04b7a0
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦this⟧
package body Visual_System_1 is Max_X : Integer := 12; Min_X : Integer := 1; Max_Y : Integer := 6; Min_Y : Integer := 1; The_Model_Marker, The_Selected_Block_Marker, The_Top_Block_Marker, The_Top_Copied_Model_Marker, The_On_Table_Marker : Marker := Marker'(Position => Positions'(X => Min_X, Y => Min_Y)); The_Markers : array (Marker_Ids) of Marker := (Model_Marker_Id => The_Model_Marker, Selected_Block_Marker_Id => The_Selected_Block_Marker, Top_Block_Marker_Id => The_Top_Block_Marker, Top_Copied_Model_Marker_Id => The_Top_Copied_Model_Marker, On_Table_Marker_Id => The_On_Table_Marker); type States is (Protected, Free); type The_Environment_Labels is array (Min_X .. Max_X, Min_Y .. Max_Y) of Labels; type The_Environment_States is array (Min_X .. Max_X, Min_Y .. Max_Y) of States; type Environments is record The_Label : The_Environment_Labels; The_State : The_Environment_States; end record; Environment : Environments; procedure Protecte_Column (Marker_Id_In_Column : in Marker_Ids) is begin for J in Min_Y .. Max_Y loop Environment.The_State ((The_Markers (Marker_Id_In_Column).Position.X), J) := Protected; end loop; end Protecte_Column; procedure Unprotecte_Column (Marker_Id_In_Column : in Marker_Ids) is begin for J in Min_Y .. Max_Y loop Environment.The_State ((The_Markers (Marker_Id_In_Column).Position.X), J) := Free; end loop; end Unprotecte_Column; function Get_Label_In_Position (I, J : Integer) return Labels is begin return (Environment.The_Label (I, J)); end Get_Label_In_Position; -------------------------------------------------------------------------------- package Display_Environment is procedure Initialize; procedure Print_All; procedure Print_One_Block (X, Y : Integer; What_Label : Labels); end Display_Environment; package body Display_Environment is separate; -------------------------------------------------------------------------------- procedure Put_Label_In_Position (What_Label : Labels; X : Integer; Y : Integer) is begin Environment.The_Label (X, Y) := What_Label; Display_Environment.Print_One_Block (X, Y, What_Label); end Put_Label_In_Position; function Move (What_Id : in Marker_Ids; In_Direction : in Directions) return Boolean is begin case In_Direction is when Right => if The_Markers (What_Id).Position.X = Max_X then return (False); else The_Markers (What_Id).Position.X := The_Markers (What_Id).Position.X + 1; end if; when Left => if The_Markers (What_Id).Position.X = Min_X then return (False); else The_Markers (What_Id).Position.X := The_Markers (What_Id).Position.X - 1; end if; when Up => if The_Markers (What_Id).Position.Y = Max_Y then return (False); else The_Markers (What_Id).Position.Y := The_Markers (What_Id).Position.Y + 1; end if; when Down => if The_Markers (What_Id).Position.Y = Min_Y then return (False); else The_Markers (What_Id).Position.Y := The_Markers (What_Id).Position.Y - 1; end if; end case; return (True); end Move; function Get_Label (The_Marker_Id : in Marker_Ids) return Labels is begin return (Get_Label_In_Position (The_Markers (The_Marker_Id).Position.X, The_Markers (The_Marker_Id).Position.Y)); end Get_Label; function Is_Same (One_Marker_Id : in Marker_Ids; Other_Marker_Id : in Marker_Ids) return Boolean is begin return ((The_Markers (One_Marker_Id).Position.X = The_Markers (Other_Marker_Id).Position.X) and (The_Markers (One_Marker_Id).Position.Y = The_Markers (Other_Marker_Id).Position.Y)); end Is_Same; function Find (What_Label : in Labels; The_Marker_Id : in Marker_Ids) return Boolean is begin for I in Min_X .. Max_X loop for J in Min_Y .. Max_Y loop if Environment.The_State (I, J) /= Protected then if (Get_Label_In_Position (I, J) = What_Label) then The_Markers (The_Marker_Id).Position.X := I; The_Markers (The_Marker_Id).Position.Y := J; return True; end if; end if; end loop; end loop; return False; end Find; procedure Make_Coincided (What_Id : in Marker_Ids; With_What_Id : in Marker_Ids) is begin The_Markers (What_Id).Position.X := The_Markers (With_What_Id).Position.X; The_Markers (What_Id).Position.Y := The_Markers (With_What_Id).Position.Y; end Make_Coincided; procedure Put_Block (Block_Marked_With_Id : in Marker_Ids; On_Marked_Place_With_Id : in Marker_Ids) is The_Label : Labels; begin The_Label := Get_Label_In_Position (The_Markers (Block_Marked_With_Id).Position.X, The_Markers (Block_Marked_With_Id).Position.Y); Put_Label_In_Position (Null_Label, The_Markers (Block_Marked_With_Id).Position.X, The_Markers (Block_Marked_With_Id).Position.Y); Put_Label_In_Position (The_Label, The_Markers (On_Marked_Place_With_Id).Position.X, The_Markers (On_Marked_Place_With_Id).Position.Y); The_Markers (Block_Marked_With_Id).Position.X := The_Markers (On_Marked_Place_With_Id).Position.X; The_Markers (Block_Marked_With_Id).Position.Y := The_Markers (On_Marked_Place_With_Id).Position.Y; end Put_Block; procedure Load_Initial is begin for I in Min_X .. Max_X loop for J in Min_Y .. Max_Y loop Environment.The_Label (I, J) := Null_Label; Environment.The_State (I, J) := Free; end loop; end loop; --The Model to Copy Environment.The_Label (Max_X, Min_Y) := 'U'; Environment.The_Label (Max_X, Min_Y + 1) := 'O'; Environment.The_Label (Max_X, Min_Y + 2) := 'C'; Environment.The_Label (Max_X, Min_Y + 3) := 'U'; Environment.The_Label (Max_X, Min_Y + 4) := 'O'; Environment.The_Label (Max_X, Min_Y + 5) := 'C'; -- les cubes disponibles Environment.The_Label (Min_X + 1, Min_Y) := 'T'; Environment.The_Label (Min_X + 1, Min_Y + 1) := 'A'; Environment.The_Label (Min_X + 2, Min_Y) := 'O'; Environment.The_Label (Min_X + 2, Min_Y + 1) := 'E'; Environment.The_Label (Min_X + 3, Min_Y) := 'T'; Environment.The_Label (Min_X + 3, Min_Y + 1) := 'B'; Environment.The_Label (Min_X + 3, Min_Y + 2) := 'C'; Environment.The_Label (Min_X + 3, Min_Y + 3) := 'O'; Environment.The_Label (Min_X + 4, Min_Y) := 'E'; Environment.The_Label (Min_X + 4, Min_Y + 1) := 'U'; Environment.The_Label (Min_X + 4, Min_Y + 2) := 'G'; Environment.The_Label (Min_X + 4, Min_Y + 3) := 'C'; Environment.The_Label (Min_X + 4, Min_Y + 4) := 'N'; Environment.The_Label (Min_X + 4, Min_Y + 5) := 'M'; Environment.The_Label (Min_X + 10, Min_Y) := 'U'; end Load_Initial; begin Display_Environment.Initialize; Load_Initial; Display_Environment.Print_All; end Visual_System_1;
nblk1=b nid=0 hdr6=16 [0x00] rec0=1d rec1=00 rec2=01 rec3=026 [0x01] rec0=01 rec1=00 rec2=0a rec3=010 [0x02] rec0=27 rec1=00 rec2=09 rec3=074 [0x03] rec0=1d rec1=00 rec2=08 rec3=048 [0x04] rec0=18 rec1=00 rec2=07 rec3=004 [0x05] rec0=1b rec1=00 rec2=06 rec3=060 [0x06] rec0=1d rec1=00 rec2=05 rec3=048 [0x07] rec0=1a rec1=00 rec2=0b rec3=00a [0x08] rec0=00 rec1=00 rec2=04 rec3=008 [0x09] rec0=14 rec1=00 rec2=03 rec3=078 [0x0a] rec0=11 rec1=00 rec2=02 rec3=000 tail 0x21750a2e086835cf369d7 0x42a00088462063c03