|
|
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: 14336 (0x3800)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body File, package body Info, procedure Engine, seg_0046bc, separate Spreadsheet_Generic
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Editor;
with Debug_Tools;
with What;
separate (Spreadsheet_Generic)
procedure Engine (Window_Name : String := Default_Name;
Initial_File_To_Load : String := No_File_Name) is
procedure Show_Selection is new Screen.Refresh_And_Highlight
(Is_Selected => Is_Selected);
procedure Protected_Compute is
begin
if Committing_Also_Computes then
Compute; --<< provided by application
else
Screen.Banner (Status, " ...computing");
Compute; --<< provided by application
Screen.Banner (Status);
end if;
exception
when others =>
Alert ("Exception during Computation: " &
Debug_Tools.Get_Raise_Location (False, False));
Screen.Banner (Status);
end Protected_Compute;
package File is
procedure Read (Name : String);
procedure Write (Nae : String);
end File;
package Info is
procedure Display;
end Info;
procedure Process_Key (K : Keyboard.Logical_Key);
procedure Set_Up is
W : Positive;
Offset : Natural := 0;
begin
for C in Column_Type loop
W := Column_Width (C);
Actual_Column_Width (Col (C)) := W;
for L in Line_Number loop
Display (L, Col (C)) := new String'(W * ' ');
end loop;
Column_Offset (Col (C)) := Offset;
Offset := Offset + W;
end loop;
Initialize; --< provided by application
Process_Key (Keyboard.Home);
Screen.Refresh;
Screen.Mark;
end Set_Up;
procedure Commit is
Valid : Boolean := False;
Buf : constant String := Buffer.Get;
begin
if Buffer.Is_Untouched then
return;
elsif Buf'Length > 0 then
begin --< provided by application
Feed (The_Current_Line, The_Current_Column, Buf, Valid);
exception
when others =>
Valid := False;
end;
if Valid then
if Committing_Also_Computes then
Protected_Compute;
end if;
else
declare
M : constant String := Diagnosis;
begin
if M = No_Message then
Alert ("Invalid entry:" & Buf);
else
Alert (M);
end if;
end;
end if;
end if;
Screen.Refresh_End_Of_Line;
Buffer.Clear;
end Commit;
procedure Process_Key (K : Keyboard.Logical_Key) is
subtype Moves is Keyboard.Movement_Key;
use Keyboard;
Char : Character;
begin
case K is
when Help =>
Info.Display;
when Definition =>
declare
Text : constant String :=
Definition (The_Current_Line, The_Current_Column);
begin
if Text'Length > 0 then
Echo_Line (Text);
end if;
end;
when Object =>
Echo_Line ("OBJECT. ? (G to abandon, U to reset)");
if Get_Key = Ascii_Char then
Char := Get_Char;
if Char = 'g' or Char = 'G' then
raise Keyboard.Quit;
elsif Char = 'u' or Char = 'U' then
Set_Up;
end if;
end if;
when Reset =>
Beep ("Press again to confirm reset");
if Get_Key = Reset then
Set_Up;
end if;
when Edit =>
if Is_Modifiable (The_Current_Line, The_Current_Column) then
Buffer.Put (Screen.Prompt_For
(Edit_Prompt (The_Current_Line,
The_Current_Column)));
Commit;
Screen.Mark;
else
Beep;
end if;
when Window =>
Editor.Window.Join;
when Save =>
Screen.Banner (Status, "...saving");
File.Write (Save_File_Name);
Screen.Banner (Status);
when Load =>
Screen.Banner (Status, "...loading");
File.Read (Load_File_Name);
Screen.Banner (Status);
when Command =>
Command; --< application dependent command
when Show =>
Show_Selection;
when Compute =>
Commit;
Protected_Compute;
if Computing_Also_Reformats then
Screen.Refresh;
end if;
when Enter =>
Commit;
Screen.Mark;
when Time =>
What.Time;
when Format =>
Buffer.Clear;
Screen.Refresh;
Screen.Mark;
when Moves =>
declare
Next_L : Line_Type := The_Current_Line;
Next_C : Column_Type := The_Current_Column;
begin
case Moves'(K) is
when Up =>
Next_L := Line_Type'Pred (The_Current_Line);
when Down =>
Next_L := Line_Type'Succ (The_Current_Line);
when Left =>
Next_C := Column_Type'Pred (The_Current_Column);
when Right =>
Next_C := Column_Type'Succ (The_Current_Column);
when Begin_Of =>
Next_C := Column_Type'First;
when End_Of =>
Next_C := Column_Type'Last;
when Home =>
Home_Position (Next_L, Next_C);
when Bottom =>
Next_L := Line_Type'Last;
end case;
if Moving_Cursor_Also_Commits then
Commit;
else
Buffer.Clear;
end if;
Screen.Unmark;
The_Current_Line := Next_L;
The_Current_Column := Next_C;
Screen.Cursor;
Screen.Mark;
Screen.Banner (Cursor_Location);
exception
when Constraint_Error => -- illegal move
Beep;
end;
when Numeric | Ascii_Char =>
Char := Keyboard.Get_Char;
if Char = Ascii.Cr then
Process_Key (Down);
elsif Is_Modifiable (The_Current_Line, The_Current_Column) then
Buffer.Append (Char);
else
Beep;
end if;
when Erase =>
Buffer.Erase;
when Del =>
Buffer.Del;
when others =>
Beep;
end case;
end Process_Key;
package body File is separate;
package body Info is separate;
begin
Screen.Open (Window_Name);
Set_Up;
if Initial_File_To_Load /= No_File_Name then
File.Read (Initial_File_To_Load);
end if;
loop
begin
Process_Key (Keyboard.Get_Key);
exception
when Keyboard.Quit =>
Echo_Line ("Exit from " & Capitalize (Default_Name));
Screen.Unmark;
exit;
when others =>
Echo_Line ("Fatal exception in Spreadsheet.Engine " &
Debug_Tools.Get_Exception_Name);
exit;
end;
end loop;
Screen.Close;
end Engine;
nblk1=d
nid=0
hdr6=1a
[0x00] rec0=1e rec1=00 rec2=01 rec3=036
[0x01] rec0=00 rec1=00 rec2=0d rec3=002
[0x02] rec0=26 rec1=00 rec2=02 rec3=03c
[0x03] rec0=01 rec1=00 rec2=0c rec3=012
[0x04] rec0=1f rec1=00 rec2=03 rec3=004
[0x05] rec0=19 rec1=00 rec2=04 rec3=028
[0x06] rec0=19 rec1=00 rec2=05 rec3=012
[0x07] rec0=1a rec1=00 rec2=06 rec3=048
[0x08] rec0=01 rec1=00 rec2=0b rec3=004
[0x09] rec0=15 rec1=00 rec2=07 rec3=030
[0x0a] rec0=00 rec1=00 rec2=0a rec3=004
[0x0b] rec0=1d rec1=00 rec2=08 rec3=04c
[0x0c] rec0=12 rec1=00 rec2=09 rec3=000
tail 0x217002a00815c66f5f36b 0x42a00088462061e03