|
|
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 Services, seg_05c1ad
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Calendar;
with Maitre;
with Gen;
package body Services is
M1 : constant := 1000;
M : constant := M1 * M1;
A : constant := 31415821;
C : constant := 1;
First_Call : Boolean := True;
type Torigine is (Non_Origine, Droite, Dessus, Gauche);
Base_Origine : Natural := Torigine'Pos (Torigine'Last);
Base_X : Natural := Gen.Max_Col;
Base_Y : Natural := Gen.Max_Col - 1;
Base_Sens : Natural := 3;
Randseed : Natural := Natural (Float (Calendar.Seconds (Calendar.Clock)) *
Float (Calendar.Day (Calendar.Clock)) *
Float (Calendar.Month (Calendar.Clock)));
function Mult (P, Q : in Natural) return Natural is
P1, P0, Q1, Q0 : Natural;
begin
P1 := P / M1;
P0 := P mod M1;
Q1 := Q / M1;
Q0 := Q mod M1;
return (((P0 * Q1 + P1 * Q0) mod M1) * M1 + P0 * Q0) mod M;
end Mult;
function Randomint (R : in Natural) return Natural is
begin
Randseed := (Mult (Randseed, A) + C) mod M;
return ((Randseed / M1) * R) / M1 + 1;
end Randomint;
function Pos_Random return Gen.Tposition is
X, Y : Natural;
Index_Sens : Natural;
Sens : Gen.Tsens;
begin
if First_Call then
Base_X := Maitre.Last_X;
Base_Y := Maitre.Last_Y - 1;
Randseed := Natural (Float (Calendar.Seconds (Calendar.Clock)) *
Float (Calendar.Day (Calendar.Clock)) *
Float (Calendar.Month (Calendar.Clock)));
First_Call := False;
end if;
Index_Sens := Randomint (Base_Sens) - 1;
case Torigine'Val (Randomint (Base_Origine)) is
when Gauche =>
X := 1;
Y := Randomint (Base_Y);
case Index_Sens is
when 1 =>
Sens := Gen.Nord_Est;
when 2 =>
Sens := Gen.Est;
when 0 =>
Sens := Gen.Sud_Est;
when others =>
Sens := Gen.Non_Sens;
end case;
when Dessus =>
X := Randomint (Base_X);
Y := 1;
case Index_Sens is
when 1 =>
Sens := Gen.Sud_Est;
when 2 =>
Sens := Gen.Sud;
when 0 =>
Sens := Gen.Sud_Ouest;
when others =>
Sens := Gen.Non_Sens;
end case;
when Droite =>
X := Gen.Max_Col;
Y := Randomint (Base_Y);
case Index_Sens is
when 1 =>
Sens := Gen.Sud_Ouest;
when 2 =>
Sens := Gen.Ouest;
when 0 =>
Sens := Gen.Nord_Ouest;
when others =>
Sens := Gen.Non_Sens;
end case;
when Non_Origine =>
Sens := Gen.Non_Sens;
end case;
return Gen.Tposition'(X => X, Y => Y, Sens => Sens);
end Pos_Random;
function Traduire (Ordre : in Character) return Gen.Tordre is
begin
case Ordre is
when ' ' =>
return Gen.Feu;
when 'e' | 'r' | 't' | 'd' | 'g' | 'c' | 'v' | 'b' =>
return Gen.Deplacement;
when others =>
return Gen.Non_Ordre;
end case;
end Traduire;
function Sens (Ordre : in Character) return Gen.Tsens is
begin
case Ordre is
when 'e' =>
return Gen.Nord_Ouest;
when 'r' =>
return Gen.Nord;
when 't' =>
return Gen.Nord_Est;
when 'd' =>
return Gen.Ouest;
when 'g' =>
return Gen.Est;
when 'c' =>
return Gen.Sud_Ouest;
when 'v' =>
return Gen.Sud;
when 'b' =>
return Gen.Sud_Est;
when others =>
return Gen.Non_Sens;
end case;
end Sens;
function To_Char (N : in Integer) return Character is
begin
case N is
when 1 =>
return '1';
when 2 =>
return '2';
when 3 =>
return '3';
when 4 =>
return '4';
when 5 =>
return '5';
when 6 =>
return '6';
when 7 =>
return '7';
when 8 =>
return '8';
when others =>
return '0';
end case;
end To_Char;
procedure Bouger_Nord (X, Y : in out Gen.Tcoordonnees;
Signal : in out Boolean) is
begin
if Y = 1 then
Y := Maitre.Last_Y - 1;
Signal := True;
else
Y := Y - 1;
end if;
end Bouger_Nord;
procedure Bouger_Sud (X, Y : in out Gen.Tcoordonnees;
Signal : in out Boolean) is
begin
if Y = Maitre.Last_Y - 1 then
Y := 1;
Signal := True;
else
Y := Y + 1;
end if;
end Bouger_Sud;
procedure Bouger_Est (X, Y : in out Gen.Tcoordonnees;
Signal : in out Boolean) is
begin
if X = Maitre.Last_X then
X := 1;
Signal := True;
else
X := X + 1;
end if;
end Bouger_Est;
procedure Bouger_Ouest (X, Y : in out Gen.Tcoordonnees;
Signal : in out Boolean) is
begin
if X = 1 then
X := Maitre.Last_X;
Signal := True;
else
X := X - 1;
end if;
end Bouger_Ouest;
procedure Calculer (Position : in out Gen.Tposition;
Sens : in Gen.Tsens;
Hors_Ecran : out Boolean) is
Signal : Boolean := False;
X : Gen.Tcoordonnees renames Position.X;
Y : Gen.Tcoordonnees renames Position.Y;
begin
case Sens is
when Gen.Sud =>
Bouger_Sud (X, Y, Signal);
when Gen.Nord =>
Bouger_Nord (X, Y, Signal);
when Gen.Est =>
Bouger_Est (X, Y, Signal);
when Gen.Ouest =>
Bouger_Ouest (X, Y, Signal);
when Gen.Sud_Est =>
Bouger_Sud (X, Y, Signal);
Bouger_Est (X, Y, Signal);
when Gen.Sud_Ouest =>
Bouger_Sud (X, Y, Signal);
Bouger_Ouest (X, Y, Signal);
when Gen.Nord_Est =>
Bouger_Nord (X, Y, Signal);
Bouger_Est (X, Y, Signal);
when Gen.Nord_Ouest =>
Bouger_Nord (X, Y, Signal);
Bouger_Ouest (X, Y, Signal);
when Gen.Non_Sens =>
null;
end case;
Hors_Ecran := Signal;
end Calculer;
end Services;
nblk1=b
nid=8
hdr6=12
[0x00] rec0=22 rec1=00 rec2=01 rec3=00a
[0x01] rec0=00 rec1=00 rec2=0a rec3=046
[0x02] rec0=1b rec1=00 rec2=03 rec3=048
[0x03] rec0=1b rec1=00 rec2=05 rec3=036
[0x04] rec0=1f rec1=00 rec2=02 rec3=014
[0x05] rec0=24 rec1=00 rec2=04 rec3=016
[0x06] rec0=23 rec1=00 rec2=0b rec3=01a
[0x07] rec0=1d rec1=00 rec2=06 rec3=02e
[0x08] rec0=12 rec1=00 rec2=07 rec3=000
[0x09] rec0=08 rec1=00 rec2=0a rec3=000
[0x0a] rec0=4b rec1=ad rec2=70 rec3=001
tail 0x2176b688a8959420de9de 0x42a00088462060003
Free Block Chain:
0x8: 0000 00 09 03 fc 80 11 72 65 74 75 72 6e 20 4e 61 74 ┆ return Nat┆
0x9: 0000 00 00 00 04 80 01 3b 01 5f 4f 75 65 73 74 20 28 ┆ ; _Ouest (┆