|
|
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: 18432 (0x4800)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, procedure Dtia, seg_02597b
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with System;
with Text_Io;
with Unchecked_Conversion;
with Mac_Types;
use Mac_Types;
with Quickdraw;
use Quickdraw;
with Desk, Dialogs, Dtia_Server, Events, Fonts, Memory, Menus,
Osutils, Resources, Segload, Toolutils, Textedit, Traps, Windows;
procedure Dtia is
Ksysenvironsversion : constant := 1;
Kosevent : constant := Events.App4evt;
Ksuspendresumemessage : constant := 1;
Kresumemask : constant := 1;
Kminheap : constant := 256 * 1024;
Kminspace : constant := 16 * 1024;
Kextremeneg : constant := -32768;
Kextremepos : constant := 32767 - 1;
Rmenubar : constant := 128;
Raboutalert : constant := 128;
Ruseralert : constant := 129;
Rwindow : constant := 128;
Mapple : constant := 128;
Iabout : constant := 1;
Mfile : constant := 129;
Inew : constant := 1;
Iclose : constant := 4;
Iquit : constant := 12;
Medit : constant := 130;
Iundo : constant := 1;
Icut : constant := 3;
Icopy : constant := 4;
Ipaste : constant := 5;
Iclear : constant := 6;
type Rectptr is access Rect;
type Recthnd is access Rectptr;
Gmac : Osutils.Sysenvrec;
Ghaswaitnextevent : Boolean;
Ginbackground : Boolean;
function Windowptr_To_Peek is
new Unchecked_Conversion (Source => Windowptr,
Target => Windows.Windowpeek);
function Windowptr_To_Ptr is new Unchecked_Conversion
(Source => Windowptr, Target => Ptr);
function Windowptr_To_Grafptr is
new Unchecked_Conversion (Source => Windowptr, Target => Grafptr);
function Longint_To_Windowptr is
new Unchecked_Conversion (Source => Longint, Target => Windowptr);
function Handle_To_Recthnd is new Unchecked_Conversion
(Source => Handle, Target => Recthnd);
function Address_To_Ptr is new Unchecked_Conversion
(Source => System.Address, Target => Ptr);
function Address_To_Varwindowptr is
new Unchecked_Conversion
(Source => System.Address, Target => Varwindowptr);
function Ptr_To_Longint is new Unchecked_Conversion
(Source => Ptr, Target => Longint);
function Ptr_To_Windowptr is new Unchecked_Conversion
(Source => Ptr, Target => Windowptr);
function Thz_To_Longint is new Unchecked_Conversion
(Source => Memory.Thz, Target => Longint);
function Array_To_Restype is
new Unchecked_Conversion (Source => Restypearray, Target => Restype);
function Array_To_Ostype is
new Unchecked_Conversion (Source => Ostypearray, Target => Ostype);
function Trapavailable
(Tnumber : Mac_Types.Integer; Ttype : Osutils.Traptype)
return Boolean is
begin
return Osutils.Ngettrapaddress (Tnumber, Ttype) /=
Osutils.Gettrapaddress (Mac_Types.Integer
(Traps.Unimplemented));
end Trapavailable;
procedure Alertuser is
Itemhit : Mac_Types.Integer;
begin
Setcursor (Qd.Arrow);
Itemhit := Dialogs.Alert (Ruseralert, null);
Segload.Exittoshell;
end Alertuser;
procedure Initialize is
Menubar : Handle;
Window : Windowptr;
Ignoreerror : Oserr;
Total, Contig : Longint;
Ignoreresult : Boolean;
Event : Events.Eventrecord;
Count : Mac_Types.Integer;
begin
Ghaswaitnextevent :=
Trapavailable (Mac_Types.Integer (Traps.Waitnextevent),
Osutils.Tooltrap);
Ginbackground := False;
Quickdraw.Initgraf (Address_To_Ptr (Qd.Theport'Address));
Fonts.Initfonts;
Windows.Initwindows;
Menus.Initmenus;
Textedit.Teinit;
Dialogs.Initdialogs (null);
Quickdraw.Initcursor;
for Count in 1 .. 3 loop
Ignoreresult := Events.Getnextevent (Events.Everyevent, Event);
end loop;
Ignoreerror := Osutils.Sysenvirons (Ksysenvironsversion, Gmac);
if Gmac.Machinetype < 0 then
Alertuser;
end if;
if Ptr_To_Longint (Memory.Getappllimit) -
Thz_To_Longint (Memory.Appliczone) < Kminheap then
Alertuser;
end if;
Memory.Purgespace (Total, Contig);
if Total < Kminspace then
Alertuser;
end if;
Window := Ptr_To_Windowptr (Memory.Newptr
(Windows.Windowrecord'Size / 8));
if Window = null then
Alertuser;
end if;
Window := Windows.Getnewwindow (Rwindow, Windowptr_To_Ptr (Window),
Longint_To_Windowptr (-1));
Menubar := Menus.Getnewmbar (Rmenubar);
if Menubar = null then
Alertuser;
end if;
Menus.Setmenubar (Menubar);
Memory.Disposhandle (Menubar);
Menus.Addresmenu (Menus.Getmhandle (Mapple),
Array_To_Restype (('D', 'R', 'V', 'R')));
Menus.Drawmenubar;
end Initialize;
function Isdawindow (Window : Windowptr) return Boolean is
begin
if Window = null then
return False;
else
return Windowptr_To_Peek (Window).Windowkind < 0;
end if;
end Isdawindow;
function Isappwindow (Window : Windowptr) return Boolean is
begin
if Window = null then
return False;
else
return (Windowptr_To_Peek (Window).Windowkind >=
Windows.Userkind) or
(Windowptr_To_Peek (Window).Windowkind = Windows.Dialogkind);
end if;
end Isappwindow;
function Doclosewindow (Window : Windowptr) return Boolean is
begin
if Isdawindow (Window) then
Desk.Closedeskacc (Windowptr_To_Peek (Window).Windowkind);
end if;
if Isappwindow (Window) then
Windows.Closewindow (Window);
end if;
return True;
end Doclosewindow;
procedure Macterminate is
Awindow : Windowptr;
Closed : Boolean;
begin
Closed := True;
loop
Awindow := Windows.Frontwindow;
if Awindow /= null then
Closed := Doclosewindow (Awindow);
end if;
exit when (not Closed) or (Awindow = null);
end loop;
if Closed then
Segload.Exittoshell;
end if;
end Macterminate;
procedure Adjustmenus is
Window : Windowptr;
Menu : Menus.Menuhandle;
begin
Window := Windows.Frontwindow;
Menu := Menus.Getmhandle (Mfile);
if Isdawindow (Window) then
Menus.Enableitem (Menu, Iclose);
else
Menus.Disableitem (Menu, Iclose);
end if;
Menu := Menus.Getmhandle (Medit);
if Isdawindow (Window) then
Menus.Enableitem (Menu, Iundo);
Menus.Enableitem (Menu, Icut);
Menus.Enableitem (Menu, Icopy);
Menus.Enableitem (Menu, Ipaste);
Menus.Enableitem (Menu, Iclear);
else
Menus.Disableitem (Menu, Iundo);
Menus.Disableitem (Menu, Icut);
Menus.Disableitem (Menu, Icopy);
Menus.Disableitem (Menu, Iclear);
Menus.Disableitem (Menu, Ipaste);
end if;
end Adjustmenus;
procedure Domenucommand (Menuresult : Longint) is
Menuid : Mac_Types.Integer;
Menuitem : Mac_Types.Integer;
Itemhit : Mac_Types.Integer;
Daname : Str255;
Darefnum : Mac_Types.Integer;
Handledbyda : Boolean;
Ignore : Boolean;
begin
Menuid := Toolutils.Hiword (Menuresult);
Menuitem := Toolutils.Loword (Menuresult);
case Menuid is
when Mapple =>
case Menuitem is
when Iabout =>
Itemhit := Dialogs.Alert (Raboutalert, null);
when others =>
Menus.Getitem (Menus.Getmhandle (Mapple),
Menuitem, Daname);
Darefnum := Desk.Opendeskacc (Daname);
end case;
when Mfile =>
case Menuitem is
when Iclose =>
Ignore := Doclosewindow (Windows.Frontwindow);
when Iquit =>
Macterminate;
when others =>
null;
end case;
when Medit =>
Handledbyda := Desk.Systemedit (Menuitem - 1);
when others =>
null;
end case;
Menus.Hilitemenu (0);
end Domenucommand;
procedure Drawwindow (Window : Windowptr) is
begin
Setport (Windowptr_To_Grafptr (Window));
Eraserect (Window.Portrect);
Forecolor (Blackcolor);
Forecolor (Blackcolor);
end Drawwindow;
procedure Docontentclick (Window : Windowptr; Event : Events.Eventrecord) is
begin
null;
end Docontentclick;
procedure Doupdate (Window : Windowptr) is
begin
if Isappwindow (Window) then
Windows.Beginupdate (Window);
if not Emptyrgn (Window.Visrgn) then
Drawwindow (Window);
end if;
Windows.Endupdate (Window);
end if;
end Doupdate;
procedure Doactivate (Window : Windowptr; Becomingactive : Boolean) is
begin
if Isappwindow (Window) then
if Becomingactive then
null; --do whatever you need to at activation
else
null; --do whatever you need to at deactivation
end if;
end if;
end Doactivate;
procedure Adjustcursor (Mouse : Point; Region : Rgnhandle) is
Window : Windowptr;
Arrowrgn : Rgnhandle;
Plusrgn : Rgnhandle;
Globalportrect : Rect;
begin
Window := Windows.Frontwindow;
if (not Ginbackground) and (not Isdawindow (Window)) then
Arrowrgn := Newrgn;
Plusrgn := Newrgn;
Setrectrgn (Arrowrgn, Kextremeneg, Kextremeneg,
Kextremepos, Kextremepos);
if Isappwindow (Window) then
Setport (Windowptr_To_Grafptr (Window));
Setorigin (-Window.Portbits.Bounds.Left,
-Window.Portbits.Bounds.Top);
Globalportrect := Window.Portrect;
Rectrgn (Plusrgn, Globalportrect);
Sectrgn (Plusrgn, Window.Visrgn, Plusrgn);
Setorigin (0, 0);
end if;
Diffrgn (Arrowrgn, Plusrgn, Arrowrgn);
if Ptinrgn (Mouse, Plusrgn) then
Setcursor (Toolutils.Getcursor (Toolutils.Pluscursor).all.all);
Copyrgn (Plusrgn, Region);
else
Setcursor (Qd.Arrow);
Copyrgn (Arrowrgn, Region);
end if;
Disposergn (Arrowrgn);
Disposergn (Plusrgn);
end if;
end Adjustcursor;
procedure Doevent (Event : Events.Eventrecord) is
Part : Mac_Types.Integer;
Window : Windowptr;
Hit : Boolean;
Key : Char;
begin
case Event.What is
when Events.Mousedown =>
Part := Windows.Findwindow (Event.Where, Address_To_Varwindowptr
(Window'Address));
case Part is
when Windows.Inmenubar =>
Adjustmenus;
Domenucommand (Menus.Menuselect (Event.Where));
when Windows.Insyswindow =>
Desk.Systemclick (Event, Window);
when Windows.Incontent =>
if Window /= Windows.Frontwindow then
Windows.Selectwindow (Window);
--DoEvent(event);
else
Docontentclick (Window, Event);
end if;
when Windows.Indrag =>
Windows.Dragwindow (Window, Event.Where,
Qd.Screenbits.Bounds);
when Windows.Ingrow =>
null;
when Windows.Inzoomin | Windows.Inzoomout =>
null;
when others =>
null;
end case;
when Events.Keydown | Events.Autokey =>
Key := Char'Val (Toolutils.Bitand
(Event.Message, Events.Charcodemask));
if Toolutils.Bitand
(Longint (Event.Modifiers), Events.Cmdkey) /= 0 then
if Event.What = Events.Keydown then
Adjustmenus;
Domenucommand (Menus.Menukey
(Charword (Char'Pos (Key))));
end if;
end if;
when Events.Activateevt =>
Doactivate (Longint_To_Windowptr (Event.Message),
Toolutils.Bitand
(Mac_Types.Longint (Event.Modifiers),
Events.Activeflag) /= 0);
when Events.Updateevt =>
Doupdate (Longint_To_Windowptr (Event.Message));
when Kosevent =>
case Toolutils.Bitand
(Toolutils.Bitshift (Event.Message, 8), 255) is
when Ksuspendresumemessage =>
Ginbackground := Toolutils.Bitand
(Event.Message, Kresumemask) = 0;
Doactivate (Windows.Frontwindow, not Ginbackground);
when others =>
null;
end case;
when others =>
null;
end case;
end Doevent;
procedure Eventloop is
Cursorrgn : Rgnhandle;
Gotevent : Boolean;
Event : Events.Eventrecord;
begin
Dtia_Server.Launch_Server;
Cursorrgn := Newrgn;
loop -- forever, or at least until SegLoad.ExitToShell
delay 0.1;
if Ghaswaitnextevent then
Adjustcursor (Event.Where, Cursorrgn);
Gotevent := Events.Waitnextevent
(Events.Everyevent, Event, 30, Cursorrgn);
else
Desk.Systemtask;
Gotevent := Events.Getnextevent (Events.Everyevent, Event);
end if;
if Gotevent then
Adjustcursor (Event.Where, Cursorrgn);
Doevent (Event);
end if;
end loop;
end Eventloop;
begin -- dtia
Memory.Maxapplzone;
Initialize;
Eventloop;
end Dtia;
nblk1=11
nid=0
hdr6=22
[0x00] rec0=21 rec1=00 rec2=01 rec3=012
[0x01] rec0=00 rec1=00 rec2=11 rec3=01a
[0x02] rec0=1c rec1=00 rec2=02 rec3=06e
[0x03] rec0=19 rec1=00 rec2=03 rec3=02e
[0x04] rec0=1f rec1=00 rec2=04 rec3=024
[0x05] rec0=20 rec1=00 rec2=05 rec3=07a
[0x06] rec0=1e rec1=00 rec2=06 rec3=032
[0x07] rec0=22 rec1=00 rec2=07 rec3=00e
[0x08] rec0=1d rec1=00 rec2=08 rec3=024
[0x09] rec0=19 rec1=00 rec2=09 rec3=00e
[0x0a] rec0=21 rec1=00 rec2=0a rec3=01c
[0x0b] rec0=1e rec1=00 rec2=0b rec3=008
[0x0c] rec0=1d rec1=00 rec2=0c rec3=020
[0x0d] rec0=13 rec1=00 rec2=0d rec3=04e
[0x0e] rec0=15 rec1=00 rec2=0e rec3=02e
[0x0f] rec0=19 rec1=00 rec2=0f rec3=004
[0x10] rec0=1a rec1=00 rec2=10 rec3=001
tail 0x2172078d883a35cb6547b 0x42a00088462060003