home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-07-23 | 39.9 KB | 1,277 lines |
- { MaxonPascal3-Anpassung / Test: Falk Zühlsdorff (PackMAN) 1994 }
-
- { Himpelsoft & Maxon präsentieren: }
-
- PROGRAM SystemMonitor;
-
- { benötigt mindestens 150 KByte Workspace }
-
- USES GRAPHICS,INTUITION;
-
- CONST
- MaxStruct = 100; { maximale Anzahl von Einträgen in Strukturen }
- MaxRem =20 ; { Anzahl der gemerkten (und mit "B" zurück-
- verfolgbaren) "Jump"'s }
- ChH = 8; { CharHeight: Höhe eines Zeichens }
-
- EscKey = chr($1b);
-
- CrsrUKey = chr($81); { Die PROCEDURE "ReadFromKeyboard" }
- CrsrDKey = chr($82); { wandelt die Escapsequenzen der }
- CrsrLKey = chr($83); { Cursortasten in diese Codes. }
- CrsrRKey = chr($84);
-
- TYPE
- Modes = { Modi: }
- (ByteDump,WordDump,LongDump,Asciidump, { verschiedene Dump-Arten }
- Structure, { Struktur-Modus, z. B. "ExecBase" }
- Nix { Text, z. B. "Help" oder "About" }
- );
- Typus = { EintragsTYPEn von Strukturen: }
- (t_S, { Short }
- t_I, { integer }
- t_L, { Long }
- t_W, { Word }
- t_B, { Byte }
- t_str, { Zeiger auf String }
- t_sub { Unterstruktur }
- );
- Bild32 = Array[1..16] of Long; { Typ für Images }
- IntArrMod = Array[ByteDump..Asciidump] Of integer;
- Feld = Record { Typ für Struktur-eintrag: }
- name: str; { Feldbezeichner }
- Offset: Long; { Adressdistanz zur Basis }
- typ: Typus; { Eintragstyp, s. o. }
- SubNum: integer { Typnummer einer Unterstruktur }
- END;
- Remem = Record { "Remember"-Struktur für "B"-Sprünge }
- Adr: Long; { alle relevanten Daten }
- Zeile,Spalte,StrNum: integer; { werden in einem solchen }
- Mode: Modes { Record aufbewahrt. }
- END;
-
- VAR
- Breite,Hoehe: integer; { Screengröße }
- MyScreen: ^Screen; { Screenhandle }
- MyWindow: ^Window; { Windowhandle }
- Con: Ptr; { Zeiger auf Console-Device }
- Sig: Long; { Signalmaske }
- MyRast,MyUPt: Ptr; { " " RastPort und Userport }
- Mess: ^IntuiMessage; { empfangene Message }
- Klasse: Long; { "Class" der Message }
- Mode: Modes; { aktueller Modus, s. o. }
- Struct: Array[1..maxstruct] of Feld; { Speicher für Einträge der aktuellen Struktur }
- Remembers: Array[1..maxrem] of Remem; { Remember-Buffer }
- Adr,CursorAdr: Long; { Startadresse des Dumps/der Struktur und Adresse der Cursorposition }
- ENDe: Boolean; { Flag für Programmende }
- ch: Char; { zuletzt von Tastatur gelesenes Zeichen }
- Zeile,Spalte: integer; { Cursorposition im Dump bzw. in Struktur }
- Zeile0: integer; { erste dargestellte Zeile einer Struct }
- FeldAnz: integer; { Anzahl der Felder einer Struktur }
- StrNum: integer; { Nummer der Struktur (z.B. 1=ExecBase, 2=Node...}
- RemAnz: integer; { ENDe des belegten Teils des Remember-Buffers }
- TextPage: integer; { Nummer der Textseite (0=About, 1=Help) }
- LineSize,Fieldsize: IntArrMod; { Umfang einer Zeile/eines Feldes im entsprechENDen Dumpmodus }
-
- { Intuition-Strukturen für Menüs: }
- Menu0,Menu1,Menu2: Menu;
-
- Men00,Men01,Men02,Men10,Men11,Men12,Men13,
- Men14,Men140,Men141,Men142,Men143,Men144,Men145,Men146,
- Men15,Men150,Men151,Men152,
- Men20,Men21,Men22: MenuItem;
-
- Men00t,Men01t,Men02t,Men10t,Men11t,Men12t,Men13t,
- Men14t,Men140t,Men141t,Men142t,Men143t,Men144t,Men145t,Men146t,
- Men15t,Men150t,Men151t,Men152t,
- Men20t,Men21t,Men22t: IntuiText;
- Setit:boolean;
-
- { Strukturen für Gadgets und zugehörige Images: }
- Knopf1,Knopf2,Knopf3,Knopf4,Knopf5,Knopf6: Gadget;
- Image1,Image2,Image3,Image4,Image5,Image6: Image;
- Bild1,Bild2,Bild3,Bild4,Bild5,Bild6: ^Bild32;
- AddG:word;
-
- { PEEK dürfte jeder Ex-BASIC-Programmierer wohl kennen...}
-
- FUNCTION PeekB(a:Long):Byte;
- { Byte aus Speicher lesen }
- VAR p:^Byte;
- BEGIN
- p:=ptr(a);
- PeekB:=p^
- END;
-
-
- FUNCTION PeekW(a:Long):integer;
- VAR p:^integer;
- BEGIN
- p:=ptr(a);
- PeekW:=p^
- END;
-
-
- FUNCTION PeekL(a:Long):Long;
- VAR p:^Long;
- BEGIN
- p:=ptr(a);
- PeekL:=p^
- END;
-
-
- PROCEDURE Clear;
- { Bildschirm löschen }
- BEGIN
- SetAPen(MyRast,0);
- RectFill(MyRast,0,0,Breite,17*8)
- END;
-
-
- PROCEDURE CreateStruct(s:integer);
- { Jeder dem Monitor bekannten Amiga-Struktur ist eine Nummer zugeordnet
- (z.B. ExecBase=1, Node=2, ... ). Diese Prozedur initialisiert das
- Feld "Struct" mit den Einträgen der Struktur Nr. "s". }
-
- PROCEDURE a(Off:Long; Nam:str; T:typus; Sub:integer);
- { "FeldAnz um 1 erhöhen und das entsprechENDe Felg von "Struct" mit
- den Parametern initialisieren }
- BEGIN
- Feldanz:=Feldanz+1;
- With Struct[Feldanz] Do
- BEGIN
- Offset:=Off;
- Name:=Nam;
- Typ:=T;
- SubNum:=Sub
- END;
- IF CursorAdr>=Adr+Off THEN Zeile:=FeldAnz
- END;
-
- BEGIN { Createstruct }
- FeldAnz:=0;
- Zeile:=1;
- StrNum:=s;
- Case s Of { Achtung, sehr langes "Case"! }
- 1: BEGIN { 1: ExecBase }
- a( 0,'LibNode', t_sub,3);
- a(34,'SoftVer', t_W,0);
- a(36,'LowMemChkSum',t_I,0);
- a(38,'ChkBase', t_L,0);
- a(42,'ColdCapture', t_L,0);
- a(46,'CoolCapture', t_L,0);
- a(50,'WarmCapture', t_L,0);
- a(54,'SysStkUpper', t_L,0);
- a(58,'SysStkLower', t_L,0);
- a(62,'MaxLocMem', t_L,0);
- a(66,'DebugEntry', t_L,0);
- a(70,'DebugData', t_L,0);
- a(74,'AlertData', t_L,0);
- a(78,'MaxExtMem', t_L,0);
- a(82,'ChkSum', t_W,0);
- a(84,'IntVects[0]', t_sub,7);
- a(96,'IntVects[1]', t_sub,7);
- a(108,'IntVects[2]', t_sub,7);
- a(120,'IntVects[3]', t_sub,7);
- a(132,'IntVects[4]', t_sub,7);
- a(144,'IntVects[5]', t_sub,7);
- a(156,'IntVects[6]', t_sub,7);
- a(168,'IntVects[7]', t_sub,7);
- a(180,'IntVects[8]', t_sub,7);
- a(192,'IntVects[9]', t_sub,7);
- a(204,'IntVects[10]',t_sub,7);
- a(216,'IntVects[11]',t_sub,7);
- a(228,'IntVects[12]',t_sub,7);
- a(240,'IntVects[13]',t_sub,7);
- a(252,'IntVects[14]',t_sub,7);
- a(264,'IntVects[15]',t_sub,7);
- a(276,'ThisTask', t_L,5);
- a(280,'IdleCount', t_L,0);
- a(284,'DispCount', t_L,0);
- a(288,'Quantum', t_W,0);
- a(290,'Elapsed', t_W,0);
- a(292,'SysFlags', t_W,0);
- a(294,'IDNestCnt', t_S,0);
- a(295,'TDNestCnt', t_S,0);
- a(296,'AttnFlags', t_W,0);
- a(298,'AttnResched',t_W,0);
- a(300,'ResModules', t_L,0);
- a(304,'TaskTrapCode',t_L,0);
- a(308,'TaskExceptCode',t_L,0);
- a(312,'TaskExitCode',t_L,0);
- a(316,'TaskSigAlloc',t_L,0);
- a(320,'TaskTrapAlloc',t_W,0);
- a(322,'MemList', t_Sub,4);
- a(336,'ResourceList',t_Sub,4);
- a(350,'DeviceList', t_Sub,4);
- a(364,'IntrList', t_Sub,4);
- a(378,'LibList', t_Sub,4);
- a(392,'PortList', t_Sub,4);
- a(406,'TaskReady', t_Sub,4);
- a(420,'TaskWait', t_Sub,4);
- a(434,'SoftInts', t_Sub,0);
- a(514,'LastAlert[0]',t_L,0);
- a(518,'LastAlert[1]',t_L,0);
- a(522,'LastAlert[2]',t_L,0);
- a(526,'LastAlert[3]',t_L,0);
- a(530,'VBlankFrequency',t_B,0);
- a(531,'PowerSupplyFrequency',t_B,0);
- a(532,'SemaphoreList',t_Sub,4);
- a(546,'KickMemPtr', t_L,0);
- a(550,'KickTagPtr', t_L,0);
- a(554,'KickCheckSum',t_L,0);
- a(558,'ExecBaseReserved',t_Sub,0);
- a(568,'ExecBaseNewReserved',t_Sub,0)
- END;
- 2: BEGIN { 2: Node }
- a( 0,'Succ', t_L,2);
- a( 4,'Pred', t_L,2);
- a( 8,'TYPE', t_B,0);
- a( 9,'Pri', t_S,0);
- a(10,'Name', t_str,0)
- END;
- 3: BEGIN { 3: Library }
- a( 0,'-Next', t_L,3);
- a( 0,'Node', t_Sub,2);
- a(14,'Flags', t_B,0);
- a(15,'pad', t_B,0);
- a(16,'NegSize', t_W,0);
- a(18,'PosSize', t_W,0);
- a(20,'Version', t_W,0);
- a(22,'Revision', t_W,0);
- a(24,'IdString', t_Str,0);
- a(28,'Sum', t_L,0);
- a(32,'OpenCnt', t_W,0)
- END
- 4: BEGIN { 4: List }
- a( 0,'Head', t_L,2);
- a( 4,'Tail', t_L,2);
- a( 8,'TailPred', t_L,2);
- a(12,'TYPE', t_B,0);
- a(13,'pad', t_B,0)
- END;
- 5: BEGIN { 5: Task }
- a( 0,'-Next', t_L,5);
- a( 0,'Node', t_Sub,2);
- a(14,'Flags', t_B,0);
- a(15,"State", t_B,0);
- a(16,"IDNestCnt", t_S,0);
- a(17,"TDNestCnt", t_S,0);
- a(18,"SigAlloc", t_L,0);
- a(22,"SigWait", t_L,0);
- a(26,"SigRecvd", t_L,0);
- a(30,"SigExcept", t_L,0);
- a(34,"TrapAlloc", t_W,0);
- a(36,"TrapAble", t_W,0);
- a(38,"ExceptData", t_L,0);
- a(42,"ExceptCode", t_L,0);
- a(46,"TrapData", t_L,0);
- a(50,"TrapCode", t_L,0);
- a(54,"SPReg", t_L,0);
- a(58,"SPLower", t_L,0);
- a(62,"SPUpper", t_L,0);
- a(66,"Switch", t_L,0);
- a(70,"Launch", t_L,0);
- a(74,"MemEntry", t_Sub,4);
- a(88,"UserData", t_L,0)
- END;
-
- 7: BEGIN { 7: IntVector }
- a( 0,'iv_Data', t_L,0);
- a( 4,'iv_Code', t_L,0);
- a( 8,'iv_Node', t_L,2)
- END;
-
- 100:BEGIN { 100: IntuitionBase }
- a( 0,'Libnode', t_S,3);
- a(34,'ViewLord', t_S,0);
- a(52,'ActiveWindow',t_L,101);
- a(56,'ActiveScreen',t_L,102);
- a(60,'FirstScreen', t_L,102);
- a(64,'Flags', t_L,0);
- a(68,'MouseY', t_I,0);
- a(70,'MouseX', t_I,0);
- a(72,'Seconds', t_L,0);
- a(76,'Micros', t_L,0)
- END;
- 101:BEGIN { 101: Window }
- a( 0,'NextWindow', t_L,101);
- a( 4,'LeftEdge', t_I,0);
- a( 6,'TopEdge', t_I,0);
- a( 8,'Width', t_W,0);
- a(10,'Height', t_W,0);
- a(12,'MouseX', t_I,0);
- a(14,'MouseY', t_I,0);
- a(16,"MinWidth", t_W,0);
- a(18,"MinHeight", t_W,0);
- a(20,"MaxWidth", t_W,0);
- a(22,"MaxHeight", t_W,0);
- a(24,"Flags", t_L,0);
- a(28,"MenuStrip", t_L,0);
- a(32,"Title", t_str,0);
- a(36,"FirstRequest",t_L,0);
- a(40,"DMRequest", t_L,0);
- a(44,"ReqCount", t_I,0);
- a(46,"WScreen", t_L,102);
- a(50,"RPort", t_L,0);
- a(54,"BorderLeft", t_S,0);
- a(55,"BorderTop", t_S,0);
- a(56,"BorderRight", t_S,0);
- a(57,"BorderBottom",t_S,0);
- a(58,"BorderRPort", t_L,0);
- a(62,"FirstGadget", t_L,0);
- a(66,"Parent", t_L,0);
- a(70,"DescENDent", t_L,0);
- a(74,"Pointer", t_L,0);
- a(78,"PtrHeight", t_B,0);
- a(79,"PtrWidth", t_B,0);
- a(80,"XOffset", t_B,0);
- a(81,"YOffset", t_B,0);
- a(82,"IDCMPFlags", t_L,0);
- a(86,"UserPort", t_L,0);
- a(90,"WindowPort", t_L,0);
- a(94,"MessageKey", t_L,0);
- a(98,"DetailPen", t_B,0);
- a(99,"BlockPen", t_B,0);
- a(100,"CheckMark", t_L,0);
- a(104,"ScreenTitle",t_str,0);
- a(108,"GZZMouseX", t_I,0);
- a(110,"GZZMouseY", t_I,0);
- a(112,"GZZWidth", t_I,0);
- a(114,"GZZHeight", t_I,0);
- a(116,"ExtData", t_L,0);
- a(120,"UserData", t_L,0);
- a(124,"WLayer", t_L,0);
- a(128,"IFont", t_L,0)
- END;
- 102:BEGIN { 102: Screen }
- a( 0,"NextScreen", t_L,102);
- a( 4,"FirstWindow", t_L,101);
- a( 8,"LeftEdge", t_I,0);
- a(10,"TopEdge", t_I,0);
- a(12,"Width", t_W,0);
- a(14,"Height", t_W,0);
- a(16,"MouseY", t_I,0);
- a(18,"MouseX", t_I,0);
- a(20,"Flags", t_W,0);
- a(22,"Title", t_str,0);
- a(26,"DefaultTitle",t_str,0);
- a(30,"BarHeight", t_B,0);
- a(31,"BarVBorder", t_B,0);
- a(32,"BarHBorder", t_B,0);
- a(33,"MenuVBorder", t_B,0);
- a(34,"MenuHBorder", t_B,0);
- a(35,"WBorTop", t_B,0);
- a(36,"WBorLeft", t_B,0);
- a(37,"WBorRight", t_B,0);
- a(38,"WBorBottom", t_B,0);
- a(39,"KludgeFill00",t_B,0);
- a(40,"Font", t_L,0);
- a(44,"ViewPort", t_S,0);
- a(84,"RastPort", t_S,0);
- a(184,"BitMap", t_S,0);
- a(224,"LayerInfo", t_S,0);
- a(326,"FirstGadget",t_L,0);
- a(330,"DetailPen", t_B,0);
- a(331,"BlockPen", t_B,0);
- a(332,"SaveColor0", t_W,0);
- a(334,"BarLayer", t_L,0);
- a(338,"ExtData", t_L,0);
- a(342,"UserData", t_L,0)
- END;
- Otherwise { of CASE }
- a(0,'Ungültig', t_B,0) { Default für den Notfall }
- END
- END; { PROCEDURE CreateStruct }
-
- FUNCTION FindWBScreen:Ptr;
- { liefert Zeiger auf den Workbench-Screen }
- VAR scr: ^Screen;
- BEGIN
- scr:=Ptr(PeekL(Long(IntuitionBase)+60));
- { Das ist der Melmac-Trick: Auf diese Weise bekommt man den Zeiger
- "FirstScreen" der IntuitionBase-Struktur, ohne dazu das include-
- File "intuition/intuitionbase.h" laden zu müssen- spart immerhin
- 17 KByte Includes und ca. 1.5 Sekunden Compilezeit. }
- While (scr^.Title<>'Workbench Screen')and(scr^.NextScreen<>Nil) Do
- scr:=scr^.NextScreen; { WB-Screen aus Liste suchen }
- FindWBScreen:=scr
- END;
-
- PROCEDURE Initialise;
- { Window öffen und so weiter }
- VAR WBscr: ^Screen;
- BEGIN
- { Am Anfang "ExecBase" }
- Adr:=Long(SysBase); CursorAdr:=Adr;
- LineSize:=IntArrMod(16,16,16,64);
- Fieldsize:=IntArrMod(1,2,4,1);
- Zeile:=0; Spalte:=0; RemAnz:=0;
- Mode:=Structure; CreateStruct(1);
- WBscr:=FindWBscreen;
- { Speicher (CHIP-MEM!) für Images anfordern }
- Bild1:=ptr(Alloc_mem(sizeof(Bild32),2));
- Bild2:=ptr(Alloc_mem(sizeof(Bild32),2));
- Bild3:=ptr(Alloc_mem(sizeof(Bild32),2));
- Bild4:=ptr(Alloc_mem(sizeof(Bild32),2));
- Bild5:=ptr(Alloc_mem(sizeof(Bild32),2));
- Bild6:=ptr(Alloc_mem(sizeof(Bild32),2));
- { Dimensionen vom "ActiveScreen" (im allg. der Workbench-Screen) übernehmen }
- Breite:= WBscr^.Width;
- Hoehe := WBscr^.Height;
- { Screen und Window öffnen, Initialisierungen }
- MyScreen:=Open_Screen(0,0,Breite,Hoehe,2,0,1,HIRES or GENLOCK_VIDEO,'Himpelmon');
- MyWindow:=Open_Window(0,10,Breite,Hoehe-10,1,MOUSEBUTTONS or GADGETDOWN or
- GADGETUP or MENUPICK, ACTIVATE or BORDERLESS,Nil,MyScreen,100,100,640,200);
- MyRast:=MyWindow^.RPort;
- MyUPt:=MyWindow^.UserPort;
- Con:=OpenConsole(MyWindow);
- WriteCon(Con,''\e'0 p'); { Cursor unsichtbar }
- { Menüs initialisieren und setzen }
- Menu0:=Menu(^Menu1,10,0,63,10,1,'Project',^Men00,0,0,0,0);
- Men00:=MenuItem(^Men01,0, 0,80,12,ITEMTEXT or HIGHCOMP or ITEMENABLED,0,^Men00t,Nil,' ',Nil,0);
- Men01:=MenuItem(^Men02,0,12,80,12,ITEMTEXT or HIGHCOMP or ITEMENABLED,0,^Men01t,Nil,' ',Nil,0);
- Men02:=MenuItem( Nil, 0,24,80,12,ITEMTEXT or HIGHCOMP or ITEMENABLED,0,^Men02t,Nil,' ',Nil,0);
- Men00t:=IntuiText(0,1,1,5,3,Nil,'About',Nil);
- Men01t:=IntuiText(0,1,1,5,3,Nil,'Help',Nil);
- Men02t:=IntuiText(0,1,1,5,3,Nil,'Quit',Nil);
- Menu1:=Menu(^Menu2,100,0,39,10,1,'Mode',^Men10,0,0,0,0);
- Men10:=MenuItem(^Men11,0, 0,120,12,ITEMTEXT+HIGHCOMP+ITEMENABLED+COMMSEQ,0,^Men10t,Nil,'B',Nil,0);
- Men11:=MenuItem(^Men12,0,12,120,12,ITEMTEXT+HIGHCOMP+ITEMENABLED+COMMSEQ,0,^Men11t,Nil,'W',Nil,0);
- Men12:=MenuItem(^Men13,0,24,120,12,ITEMTEXT+HIGHCOMP+ITEMENABLED+COMMSEQ,0,^Men12t,Nil,'L',Nil,0);
- Men13:=MenuItem(^Men14,0,36,120,12,ITEMTEXT+HIGHCOMP+ITEMENABLED+COMMSEQ,0,^Men13t,Nil,'A',Nil,0);
- Men14:=MenuItem(^Men15,0,48,120,12,ITEMTEXT+HIGHCOMP+ITEMENABLED ,0,^Men14t,Nil,' ',^Men140,0);
- Men140:=MenuItem(^Men141,100, 0,120,10,ITEMTEXT+HIGHCOMP+ITEMENABLED,0,^Men140t,Nil,' ',Nil,0);
- Men141:=MenuItem(^Men142,100,10,120,10,ITEMTEXT+HIGHCOMP+ITEMENABLED,0,^Men141t,Nil,' ',Nil,0);
- Men142:=MenuItem(^Men143,100,20,120,10,ITEMTEXT+HIGHCOMP+ITEMENABLED,0,^Men142t,Nil,' ',Nil,0);
- Men143:=MenuItem(^Men144,100,30,120,10,ITEMTEXT+HIGHCOMP+ITEMENABLED,0,^Men143t,Nil,' ',Nil,0);
- Men144:=MenuItem(^Men145,100,40,120,10,ITEMTEXT+HIGHCOMP+ITEMENABLED,0,^Men144t,Nil,' ',Nil,0);
- Men145:=MenuItem(^Men146,100,50,120,10,ITEMTEXT+HIGHCOMP+ITEMENABLED,0,^Men145t,Nil,' ',Nil,0);
- Men146:=MenuItem( Nil ,100,60,120,10,ITEMTEXT+HIGHCOMP+ITEMENABLED,0,^Men146t,Nil,' ',Nil,0);
- Men15:=MenuItem( Nil, 0,60,120,12,ITEMTEXT+HIGHCOMP+ITEMENABLED ,0,^Men15t,Nil,' ',^Men150,0);
- Men150:=MenuItem(^Men151,100, 0,120,10,ITEMTEXT+HIGHCOMP+ITEMENABLED,0,^Men150t,Nil,' ',Nil,0);
- Men151:=MenuItem(^Men152,100,10,120,10,ITEMTEXT+HIGHCOMP+ITEMENABLED,0,^Men151t,Nil,' ',Nil,0);
- Men152:=MenuItem( Nil ,100,20,120,10,ITEMTEXT+HIGHCOMP+ITEMENABLED,0,^Men152t,Nil,' ',Nil,0);
- Men10t:=IntuiText(0,1,1,4,2,Nil,'Bytes',Nil);
- Men11t:=IntuiText(0,1,1,4,2,Nil,'Words',Nil);
- Men12t:=IntuiText(0,1,1,4,2,Nil,'Longwords',Nil);
- Men13t:=IntuiText(0,1,1,4,2,Nil,'Ascii',Nil);
- Men14t:=IntuiText(0,1,1,4,2,Nil,'Exec',Nil);
- Men140t:=IntuiText(0,1,1,4,1,Nil,'ExecBase',Nil);
- Men141t:=IntuiText(0,1,1,4,1,Nil,'Node',Nil);
- Men142t:=IntuiText(0,1,1,4,1,Nil,'Library',Nil);
- Men143t:=IntuiText(0,1,1,4,1,Nil,'List',Nil);
- Men144t:=IntuiText(0,1,1,4,1,Nil,'Task',Nil)
- Men145t:=Intuitext(0,1,1,4,1,Nil,'?',Nil);
- Men146t:=Intuitext(0,1,1,4,1,Nil,'IntVector',Nil);
- Men15t:=IntuiText(0,1,1,4,2,Nil,'Intuition',Nil);
- Men150t:=IntuiText(0,1,1,4,1,Nil,'IntuitionBase',Nil);
- Men151t:=IntuiText(0,1,1,4,1,Nil,'Window',Nil);
- Men152t:=IntuiText(0,1,1,4,1,Nil,'Screen',Nil);
- Menu2:=Menu(Nil,200,0,63,10,1,'Address',^Men20,0,0,0,0);
- Men20:=MenuItem(^Men21,0, 0,120,12,ITEMTEXT+HIGHCOMP+ITEMENABLED,0,^Men20t,Nil,' ',Nil,0);
- Men21:=MenuItem(^Men22,0,12,120,12,ITEMTEXT+HIGHCOMP+ITEMENABLED,0,^Men21t,Nil,' ',Nil,0);
- Men22:=MenuItem( Nil, 0,24,120,12,ITEMTEXT+HIGHCOMP+ITEMENABLED,0,^Men22t,Nil,' ',Nil,0);
- Men20t:=IntuiText(0,1,1,4,2,Nil,'MemBase',Nil);
- Men21t:=IntuiText(0,1,1,4,2,Nil,'SysBase',Nil);
- Men22t:=IntuiText(0,1,1,4,2,Nil,'IntuitionBase',Nil);
- SetIt:=SetMenuStrip(MyWindow,^Menu0);
- { Gadgets und deren Images initialisieren }
- Bild1^:=Bild32(
- %00011111111111111111111111111000,
- %01110000000000000000000000001110,
- %11100000000000111100000000000111,
- %11000000000001111110000000000011,
- %11000000000011100111000000000011,
- %11000000000111000011100000000011,
- %11000000001110000001110000000011,
- %11000000011100000000111000000011,
- %11000000111000000000011100000011,
- %11000001110000000000001110000011,
- %11000011100000000000000111000011,
- %11000011100000000000000111000011,
- %11000001111111111111111110000011,
- %11100000000000000000000000000111,
- %01110000000000000000000000001110,
- %00011111111111111111111111111000);
- Bild2^:=Bild32(
- %00011111111111111111111111111000,
- %01110000000000000000000000001110,
- %11100000000000000000000000000111,
- %11000001111111111111111110000011,
- %11000011100000000000000111000011,
- %11000011100000000000000111000011,
- %11000001110000000000001110000011,
- %11000000111000000000011100000011,
- %11000000011100000000111000000011,
- %11000000001110000001110000000011,
- %11000000000111000011100000000011,
- %11000000000011100111000000000011,
- %11000000000001111110000000000011,
- %11100000000000111100000000000111,
- %01110000000000000000000000001110,
- %00011111111111111111111111111000);
- Bild3^:=Bild32(
- %00011111111111111111111111111000,
- %01110000000000000000000000001110,
- %11100000000001111110000000000111,
- %11000000000111100111100000000011,
- %11000000011110000001111000000011,
- %11000001111000000000011110000011,
- %11000011111111111111111111000011,
- %11000000000000000000000000000011,
- %11000000000001111110000000000011,
- %11000000000111100111100000000011,
- %11000000011110000001111000000011,
- %11000001111000000000011110000011,
- %11000011111111111111111111000011,
- %11100000000000000000000000000111,
- %01110000000000000000000000001110,
- %00011111111111111111111111111000);
- Bild4^:=Bild32(
- %00011111111111111111111111111000,
- %01110000000000000000000000001110,
- %11100000000000000000000000000111,
- %11000011111111111111111111000011,
- %11000001111000000000011110000011,
- %11000000011110000001111000000011,
- %11000000000111100111100000000011,
- %11000000000001111110000000000011,
- %11000000000000000000000000000011,
- %11000011111111111111111111000011,
- %11000001111000000000011110000011,
- %11000000011110000001111000000011,
- %11000000000111100111100000000011,
- %11100000000001111110000000000111,
- %01110000000000000000000000001110,
- %00011111111111111111111111111000);
- Bild5^:=Bild32(
- %00011111111111111111111111111000,
- %01110000000000000000000000001110,
- %11100000000000000000111100000111,
- %11000000000000000111111110000011,
- %11000000000000111110000110000011,
- %11000000000111110000000110000011,
- %11000000111110000000000110000011,
- %11000111110000000000000110000011,
- %11000111110000000000000110000011,
- %11000000111110000000000110000011,
- %11000000000111110000000110000011,
- %11000000000000111110000110000011,
- %11000000000000000111111110000011,
- %11100000000000000000111100000111,
- %01110000000000000000000000001110,
- %00011111111111111111111111111000);
- Bild6^:=Bild32(
- %00011111111111111111111111111000,
- %01110000000000000000000000001110,
- %11100000111100000000000000000111,
- %11000001111111100000000000000011,
- %11000001100001111100000000000011,
- %11000001100000001111100000000011,
- %11000001100000000001111100000011,
- %11000001100000000000001111100011,
- %11000001100000000000001111100011,
- %11000001100000000001111100000011,
- %11000001100000001111100000000011,
- %11000001100001111100000000000011,
- %11000001111111100000000000000011,
- %11100000111100000000000000000111,
- %01110000000000000000000000001110,
- %00011111111111111111111111111000);
- Image1:=Image(0,0,32,16,1,Bild1,1,0,Nil);
- Image2:=Image(0,0,32,16,1,Bild2,1,0,Nil);
- Image3:=Image(0,0,32,16,1,Bild3,1,0,Nil);
- Image4:=Image(0,0,32,16,1,Bild4,1,0,Nil);
- Image5:=Image(0,0,32,16,1,Bild5,1,0,Nil);
- Image6:=Image(0,0,32,16,1,Bild6,1,0,Nil);
- Knopf1:=Gadget(Nil, 40,140,32,12,GADGHNONE+GADGIMAGE,GADGIMMEDIATE,BOOLGADGET,^Image1,Nil,Nil,0,Nil,1,NIL);
- Knopf2:=Gadget(Nil, 40,160,32,12,GADGHNONE+GADGIMAGE,GADGIMMEDIATE,BOOLGADGET,^Image2,Nil,Nil,0,Nil,2,NIL);
- Knopf3:=Gadget(Nil, 80,140,32,12,GADGHNONE+GADGIMAGE,GADGIMMEDIATE,BOOLGADGET,^Image3,Nil,Nil,0,Nil,3,NIL);
- Knopf4:=Gadget(Nil, 80,160,32,12,GADGHNONE+GADGIMAGE,GADGIMMEDIATE,BOOLGADGET,^Image4,Nil,Nil,0,Nil,4,NIL);
- Knopf5:=Gadget(Nil, 0,150,32,12,GADGHNONE+GADGIMAGE,GADGIMMEDIATE,BOOLGADGET,^Image5,Nil,Nil,0,Nil,5,NIL);
- Knopf6:=Gadget(Nil,120,150,32,12,GADGHNONE+GADGIMAGE,GADGIMMEDIATE,BOOLGADGET,^Image6,Nil,Nil,0,Nil,6,NIL);
- AddG:=AddGadget(MyWindow,^Knopf1,0);
- AddG:=AddGadget(MyWindow,^Knopf2,1);
- AddG:=AddGadget(MyWindow,^Knopf3,2);
- AddG:=AddGadget(MyWindow,^Knopf4,3);
- AddG:=AddGadget(MyWindow,^Knopf5,4);
- AddG:=AddGadget(MyWindow,^Knopf6,5);
- RefreshGadgets(MyWindow^.FirstGadget,MyWindow,Nil);
- END;
-
- PROCEDURE CloseEverything;
- { alles schließen }
- BEGIN
- CloseConsole(Con);
- Close_Window(MyWindow);
- Close_Screen(MyScreen);
- CloseLib(intuitionbase);
- CloseLib(gfxbase)
- END;
-
- PROCEDURE Erinnere;
- { Daten in Remember-buffer übernehmen }
- VAR i:Integer;
- BEGIN
- IF RemAnz=MaxRem THEN { Array ist voll, also "scrollen" }
- BEGIN
- For i:=1 to MaxRem-1 Do
- Remembers[i]:=Remembers[i+1]
- END
- ELSE
- RemAnz:=RemAnz+1; { noch nicht voll, also ein Element hinzufügen }
- Remembers[RemAnz]:=Remem(Adr,Zeile,Spalte,StrNum,Mode);
- END;
-
- PROCEDURE CalcZ0;
- { "Zeile0" berechnen }
- BEGIN
- IF Zeile<=8 THEN Zeile0:=1 Else
- IF Zeile>=FeldAnz-8 THEN
- BEGIN
- IF FeldAnz>=16 THEN Zeile0:=Feldanz-15
- Else Zeile0:=1
- END
- Else Zeile0:=Zeile-7;
- END;
-
- PROCEDURE SetCursor;
- VAR Cursort: Intuitext;
- BEGIN
- Case Mode of
- ByteDump:BEGIN
- Cursort:=Intuitext(2,0,6,0,0,Nil,' ',Nil);
- PrintIText(MyRast,^Cursort,8*(8+3*Spalte),2+8*Zeile) END;
- WordDump:BEGIN
- Cursort:=IntuiText(2,0,6,0,0,Nil,' ',Nil);
- PrintIText(MyRast,^Cursort,8*(8+5*(Spalte div 2)),2+8*Zeile) END;
- LongDump:BEGIN
- Cursort:=IntuiText(2,0,6,0,0,Nil,' ',Nil);
- PrintIText(MyRast,^Cursort,8*(8+9*(Spalte div 4)),2+8*Zeile) END;
- AsciiDump:BEGIN
- Cursort:=IntuiText(2,0,6,0,0,Nil,' ',Nil);
- PrintIText(MyRast,^Cursort,8*(8+Spalte),2+8*Zeile) END;
- Structure:BEGIN
- CalcZ0;
- Cursort:=IntuiText(2,0,6,0,0,Nil,' ',Nil);
- PrintIText(MyRast,^Cursort,8*31,2+8*(Zeile-Zeile0))
- END;
- Else; END
- END;
-
-
- PROCEDURE DecodeHex(p:ptr; Zahl:Long; Len:integer);
- { "Zahl" als hex in String p ablegen, Länge "Len" }
- VAR i,z:integer;
- pp:^Array[0..7] of char;
- BEGIN
- pp:=p;
- For i:=Len-1 Downto 0 Do
- BEGIN
- z:=Zahl and 15;
- IF Zahl>=0 THEN Zahl:= Zahl div 16
- Else Zahl:=(Zahl and $7fffffff) div 16 + $8000000;
- IF z<10 THEN pp^[i]:=chr(ord('0')+z)
- Else pp^[i]:=chr(ord('A')+z-10)
- END
- END;
-
-
- PROCEDURE StructZeileAus(i,z: integer);
- { Zeile i einer Struktur in NBildschirmzeile z ausgeben }
- VAR j: integer;
- nam: ^String[80];
- a: Long;
- Buffer: string[80];
- Outputt: Intuitext;
- BEGIN
- Outputt:=Intuitext(1,0,1,0,0,Nil,^Buffer,Nil);
- For j:=1 to 76 do Buffer[j]:=' ';
- Buffer[77]:=chr(0)
- IF i<=FeldAnz THEN
- BEGIN
- a:=Adr+Struct[i].Offset;
- DecodeHex(^Buffer[1],a,6);
- Buffer[7]:=' ';
- j:=1;
- nam:=Struct[i].Name;
- While (j<20)and(nam^[j]<>chr(0)) Do
- BEGIN
- Buffer[10+j]:=nam^[j]; j:=j+1
- END;
- Case Struct[i].typ Of
- t_L:BEGIN
- Buffer[9]:='L';
- DecodeHex(^Buffer[32],PeekL(a),8)
- END;
- t_W:BEGIN
- Buffer[9]:='W';
- DecodeHex(^Buffer[32],PeekW(a),4)
- END;
- t_I:BEGIN
- Buffer[9]:='I';
- IF PeekW(a)>=0 THEN
- DecodeHex(^Buffer[32],PeekW(a),4)
- Else
- BEGIN
- Buffer[32]:='-';
- DecodeHex(^Buffer[33],-PeekW(a),4)
- END;
- END;
- t_S:BEGIN
- Buffer[9]:='S';
- IF Short(PeekB(a))>=0 THEN
- DecodeHex(^Buffer[32],PeekB(a),2)
- Else
- BEGIN
- Buffer[32]:='-';
- DecodeHex(^Buffer[33],-Short(PeekB(a)),2)
- END
- END;
- t_B:BEGIN
- Buffer[9]:='B';
- DecodeHex(^Buffer[32],PeekB(a),2)
- END;
- t_str:BEGIN
- Buffer[9]:='"';
- DecodeHex(^Buffer[32],a,6);
- j:=1;
- nam:=ptr(PeekL(a));
- While (j<25)and(nam^[j]<>chr(0)) Do
- BEGIN
- Buffer[40+j]:=nam^[j]; j:=j+1
- END
- END;
- t_Sub:BEGIN
- IF Struct[i].SubNum=0 THEN Buffer[9]:='?'
- Else Buffer[9]:='*';
- Buffer[32]:='.'
- END;
- Otherwise END;
- END;
- PrintIText(MyRast,^Outputt,0,2+8*z);
- END;
-
-
- PROCEDURE Ausgabe(m:Modes);
- VAR
- Buffer: string[80];
- Outputt: Intuitext;
-
- PROCEDURE HexdumpAus(m:modes);
- VAR
- a:Long;
- bpuf:^array[0..15]of Byte;
- wpuf:^array[0..7] of Word;
- lpuf:^array[0..3] of Long;
- i,j,k,step:integer;
- BEGIN
- IF m=Bytedump THEN a:=Adr Else a:=Adr and $fffffe;
- Case m of
- Bytedump: step:=1;
- WordDump: step:=2;
- LongDump: step:=4
- END;
- For i:=0 to 15 do { 16 Zeilen }
- BEGIN
- DecodeHex(^Buffer[1],a,6);
- Buffer[7]:=':'; Buffer[8]:=' ';
- bpuf:=ptr(a); wpuf:=ptr(a); lpuf:=ptr(a);
- j:=0;
- k:=9;
- While j<16 do
- BEGIN
- Case m of
- ByteDump:DecodeHex(^Buffer[k],bpuf^[j],2);
- Worddump:DecodeHex(^Buffer[k],wpuf^[j div 2],4);
- LongDump:DecodeHex(^Buffer[k],lpuf^[j div 4],8)
- END;
- k:=k+2*step+1;
- Buffer[k-1]:=' ';
- j:=j+step;
- END;
- For j:=0 to 15 Do
- IF (bpuf^[j]>=ord(' ')) and (bpuf^[j]<128) THEN
- Buffer[k+j]:=chr(bpuf^[j])
- Else
- Buffer[k+j]:='.';
- Buffer[k+16]:=chr(0);
- PrintIText(MyRast,^Outputt,0,2+8*i);
- IF i=Zeile THEN SetCursor;
- a:=a+16
- END;
- END;
-
- PROCEDURE AscDumpAus;
- VAR
- a:Long;
- cpuf:^Char;
- i,j:integer;
- BEGIN
- a:=Adr;
- For i:=0 to 15 do { 16 Zeilen }
- BEGIN
- DecodeHex(^Buffer[1],a,6);
- Buffer[7]:=':'; Buffer[8]:=' ';
- For j:=0 to 63 do
- BEGIN
- cpuf:=ptr(a+j);
- IF (cpuf^>=' ') and (cpuf^<chr(128)) or (cpuf^>chr($a0)) THEN
- Buffer[9+j]:=Cpuf^
- Else
- Buffer[9+j]:='.'
- END;
- Buffer[73]:=chr(0);
- PrintIText(MyRast,^Outputt,0,2+8*i);
- IF i=Zeile THEN SetCursor;
- a:=a+64
- END;
- END;
-
- PROCEDURE InfoAus;
- PROCEDURE ia(s:str; x,y,pen,md:integer);
- VAR it:IntuiText;
- BEGIN
- it:=IntuiText(pen,0,md,0,0,Nil,s,Nil);
- PrintIText(MyRast,^it,x,y)
- END;
- BEGIN
- IF TextPage=0 THEN
- BEGIN
- ia('H I M P E L M O N',252,10,3,1);
- ia('Der System-Analytiker',236,20,1,1);
- ia('Geschreiben von:',50,50,1,1);
- ia('Jens "Himpelsoft" Gelhar',50,70,3,1);
- ia('Alderichstraße 19',50,80,3,1);
- ia('4790 Paderborn',50,90,3,1)
- END
- Else
- BEGIN
- ia('Hilfe',20,10,3,1);
- ia('FolgENDe Tasten sind in der vorliegENDen Version belegt:',20,30,1,1);
- ia('J ("Jump")',20,50,1,1);
- ia('B ("Back")',20,60,1,1);
- ia('Esc (ENDe)',20,70,1,1);
- ia('Cursortasten',20,80,1,1)
- END
- END;
-
- PROCEDURE StructAus;
- VAR i:integer;
- BEGIN
- CalcZ0;
- For i:=Zeile0 to Zeile0+15 Do
- BEGIN
- StructZeileAus(i,i-Zeile0);
- IF i=Zeile THEN SetCursor;
- END
- END;
-
- BEGIN { Ausgabe }
- Outputt:=Intuitext(1,0,1,0,0,Nil,^Buffer,Nil);
- Case M of
- ByteDump,WordDump,LongDump: HexdumpAus(M);
- AsciiDump: AscDumpAus;
- Structure: StructAus;
- Nix: InfoAus;
- END
- END;
-
-
- PROCEDURE Scroll1Up;
- BEGIN
- IF Mode<=AsciiDump THEN BEGIN
- IF Mode=Asciidump THEN Adr:=Adr-64
- Else Adr:=Adr-16;
- Scrollraster(MyRast,0,-ChH,0,0,Breite,16*ChH);
- Ausgabe(Mode)
- END
- Else
- IF Mode=Structure THEN
- BEGIN
- Scrollraster(MyRast,0,-ChH,0,0,Breite,16*ChH);
- CalcZ0;
- StructZeileAus(Zeile0,0)
- END
- END;
-
-
- PROCEDURE Scroll1Down;
- BEGIN
- IF Mode<=AsciiDump THEN BEGIN
- IF Mode=Asciidump THEN Adr:=Adr+64
- Else Adr:=Adr+16;
- Scrollraster(MyRast,0,ChH,0,2,Breite,17*ChH);
- Ausgabe(Mode)
- END
- Else
- IF Mode=Structure THEN
- BEGIN
- Scrollraster(MyRast,0,ChH,0,2,Breite,17*ChH);
- CalcZ0;
- StructZeileAus(Zeile0+15,15);
- END
- END;
-
-
- PROCEDURE Scroll16Up;
- BEGIN
- IF Mode<=AsciiDump THEN BEGIN
- IF Mode=Asciidump THEN Adr:=Adr-16*64
- Else Adr:=Adr-256;
- Ausgabe(Mode) END
- END;
-
-
- PROCEDURE Scroll16Down;
- BEGIN
- IF Mode<=AsciiDump THEN BEGIN
- IF Mode=Asciidump THEN Adr:=Adr+16*64
- Else Adr:=Adr+256;
- Ausgabe(Mode) END
- END;
-
-
-
- PROCEDURE CursorUp;
- VAR zz: integer;
- BEGIN
- IF Mode=Structure THEN
- BEGIN
- SetCursor;
- zz:=Zeile0;
- Zeile:=Zeile-1;
- CalcZ0;
- CursorAdr:=Adr+Struct[Zeile].Offset;
- IF zz<>Zeile0 THEN Scroll1Up;
- StructZeileAus(Zeile,Zeile-Zeile0);
- SetCursor
- END
- Else
- IF Zeile>0 THEN BEGIN SetCursor; Zeile:=Zeile-1; SetCursor END
- Else
- BEGIN
- Case Mode Of
- Asciidump: Adr:=Adr-64;
- ByteDump,WordDump,LongDump: Adr:=Adr-16
- Else END;
- Scroll1Up
- END
- END;
-
- PROCEDURE CursorDown;
- VAR zz: integer;
- BEGIN
- IF Mode=Structure THEN
- BEGIN
- SetCursor;
- zz:=Zeile0;
- Zeile:=Zeile+1;
- CalcZ0;
- CursorAdr:=Adr+Struct[Zeile].Offset;
- IF Zeile0<>zz THEN Scroll1Down;
- StructZeileAus(Zeile,Zeile-Zeile0);
- SetCursor
- END
- Else
- IF Zeile<15 THEN BEGIN SetCursor; Zeile:=Zeile+1; SetCursor END
- Else
- BEGIN
- Case Mode Of
- Asciidump: Adr:=Adr+64;
- ByteDump,WordDump,LongDump: Adr:=Adr+16
- Else END;
- Scroll1Down
- END
- END;
-
- PROCEDURE CursorLeft;
- BEGIN
- IF Mode<=AsciiDump THEN
- IF Spalte>=FieldSize[Mode] THEN
- BEGIN SetCursor;
- Spalte:=(Spalte and (64-Fieldsize[Mode]))-Fieldsize[Mode];
- SetCursor
- END
- Else
- BEGIN CursorUp; SetCursor;
- Spalte:=LineSize[Mode]-Fieldsize[Mode]; SetCursor
- END;
- END;
-
- PROCEDURE CursorRight;
- BEGIN
- IF Mode<=AsciiDump THEN
- IF Spalte < LineSize[Mode]-Fieldsize[Mode] THEN
- BEGIN SetCursor;
- Spalte:=(Spalte and (64-Fieldsize[Mode]))+Fieldsize[Mode];
- SetCursor
- END
- Else
- BEGIN CursorDown; SetCursor; Spalte:=0; SetCursor END
- END;
-
- PROCEDURE CalcCursorAdr;
- { CursorAdr stezen }
- BEGIN
- IF mode<=Asciidump THEN
- Cursoradr:=Adr+Zeile*Linesize[mode]+Spalte
- Else
- IF mode=Structure THEN
- CursorAdr:=Adr+struct[Zeile].Offset
- Else CursorAdr:=Adr
- END;
-
-
- PROCEDURE Jump;
- BEGIN
- Erinnere;
- IF Mode<AsciiDump THEN
- BEGIN
- CalcCursorAdr;
- Adr:=PeekL(CursorAdr and $fffffe);
- Zeile:=0;
- Spalte:=0;
- Ausgabe(Mode)
- END
- Else IF Mode=Structure THEN
- BEGIN
- Case struct[Zeile].typ Of
- t_str:BEGIN
- CalcCursorAdr;
- Adr:=CursorAdr;
- Zeile:=0; Spalte:=0;
- Mode:=AsciiDump;
- Ausgabe(Mode)
- END;
- t_L:BEGIN
- Adr:=PeekL((Adr+struct[Zeile].Offset)and $fffffe);
- CursorAdr:=Adr;
- IF struct[Zeile].SubNum=0 THEN
- BEGIN
- mode:=ByteDump; Zeile:=0; Spalte:=0
- END
- Else
- BEGIN mode:=structure;
- Adr:=Adr and $fffffe; CursorAdr:=Adr;
- CreateStruct(struct[Zeile].SubNum)
- END;
- Ausgabe(Mode)
- END;
- t_Sub:BEGIN
- Adr:=Adr+struct[Zeile].Offset;
- CursorAdr:=Adr;
- IF struct[Zeile].SubNum=0 THEN
- BEGIN
- mode:=ByteDump; Zeile:=0; Spalte:=0
- END
- Else
- BEGIN mode:=structure;
- Adr:=Adr and $fffffe; CursorAdr:=Adr;
- CreateStruct(struct[Zeile].SubNum)
- END;
- Ausgabe(Mode)
- END;
- Else END;
- END;
- END; { PROCEDURE Jump }
-
-
- PROCEDURE JumpBack;
- BEGIN
- IF RemAnz>0 THEN
- BEGIN
- Adr:= Remembers[RemAnz].Adr;
- Zeile:= Remembers[RemAnz].Zeile;
- Spalte:=Remembers[RemAnz].Spalte;
- StrNum:=Remembers[RemAnz].StrNum;
- Mode:= Remembers[RemAnz].Mode
- RemAnz:=RemAnz-1
- CalcCursorAdr;
- Clear;
- IF Mode=Structure THEN CreateStruct(StrNum);
- Ausgabe(Mode)
- END
- Else DisplayBeep(MyScreen) { Remember-Buffer ist leer }
- END;
-
-
- PROCEDURE ReadFromKeyboard;
- VAR c1: Char;
- BEGIN
- ch:=ReadCon(Con); { Zeichen von Tastatur? }
- IF ch=chr($9b) THEN
- BEGIN
- c1:=ReadCon(Con); { erstes Zeichen der Escape-Sequenz }
- Case c1 Of
- 'A': ch:=CrsrUKey;
- 'B': ch:=CrsrDKey;
- 'C': ch:=CrsrRKey;
- 'D': ch:=CrsrLKey;
- Else ch:=chr(0) END; { unbekannte Sequenz }
- END
- END;
-
-
- PROCEDURE MenuHandling(item:Cardinal);
- { Menu-Handhabung }
- VAR menue,menitem,subitem:integer;
- BEGIN
- IF item<>$ffff THEN
- BEGIN
- { in "item" sind Menü-, Menüpunkt- unt Untermenü-nummer enthalten. }
- menue:=item and $1f;
- menitem:=(item and $7e0) div 32;
- subitem:=(item and $f800) div 2048;
- Case menue of
- 0:Case menitem of { Menu "Project" }
- 0: BEGIN Mode:=Nix; TextPage:=0; Clear; Ausgabe(Mode) END;
- 1: BEGIN Mode:=Nix; TextPage:=1; Clear; Ausgabe(Mode) END;
- 2: ENDe:=true
- END;
- 1:IF menitem<4 THEN { Menu "Mode" }
- BEGIN
- IF menitem<>ord(Mode) THEN
- BEGIN
- IF Mode<=AsciiDump THEN
- CursorAdr:=Adr+Linesize[Mode]*Zeile+Spalte;
- Mode:=Modes(menitem);
- IF Mode<=AsciiDump THEN
- BEGIN
- Zeile :=(CursorAdr-Adr)div LineSize[Mode];
- Spalte:=(CursorAdr-Adr)mod LineSize[Mode];
- Adr:=Adr+16*LineSize[Mode]*(Zeile div 16);
- Zeile:=Zeile mod 16
- END;
- Clear;
- Ausgabe(Mode)
- END
- END
- Else
- IF menitem=4 THEN
- BEGIN
- Adr:=Adr and $fffffe;
- IF Mode<=AsciiDump THEN
- CursorAdr:=Adr+Linesize[Mode]*Zeile+Spalte;
- CreateStruct(subitem+1);
- Mode:=Structure;
- Clear;
- Ausgabe(Mode)
- END
- Else
- IF Menitem=5 THEN
- BEGIN
- Adr:=Adr and $fffffe;
- IF Mode<=AsciiDump THEN
- CursorAdr:=Adr+Linesize[Mode]*Zeile+Spalte;
- CreateStruct(subitem+100);
- Mode:=Structure;
- Clear;
- Ausgabe(Mode)
- END;
- 2:BEGIN { Menu "Adress" }
- Case Menitem Of
- 0: BEGIN
- Erinnere;
- Mode:=LongDump;
- Adr:=0; CursorAdr:=0;
- Zeile:=0; Spalte:=0;
- Clear;
- Ausgabe(Mode)
- END;
- 1: BEGIN
- Erinnere;
- Mode:=Structure;
- Adr:=Long(SysBase); CursorAdr:=Adr;
- CreateStruct(1);
- Clear;
- Ausgabe(Mode)
- END;
- 2: BEGIN
- Erinnere;
- Mode:=Structure;
- Adr:=Long(IntuitionBase); CursorAdr:=Adr;
- CreateStruct(100);
- Clear;
- Ausgabe(Mode)
- END;
- Otherwise END;
- END
- END;
- END
- END;
-
-
- PROCEDURE GadgetHandling(g:p_Gadget);
- VAR i:integer;
- BEGIN
- IF g<>Nil THEN
- Case g^.GadgetID of
- 1:Scroll1Up;
- 2:Scroll1Down;
- 3:Scroll16Up;
- 4:Scroll16Down;
- 5:IF Mode<=Asciidump THEN
- BEGIN
- Case Mode Of
- ByteDump,Asciidump: Adr:=Adr+1;
- WordDump: Adr:=(Adr and $fffffe)+2;
- LongDump: Adr:=(Adr and $fffffe)+4;
- END;
- Ausgabe(Mode)
- END;
- 6:IF Mode<=Asciidump THEN
- BEGIN
- Case Mode Of
- ByteDump,Asciidump: Adr:=Adr-1;
- WordDump: Adr:=(Adr and $fffffe)-2;
- LongDump: Adr:=(Adr and $fffffe)-4;
- END;
- Ausgabe(Mode)
- END;
- Otherwise; END;
- END;
-
-
- BEGIN {***** Hauptprogramm *****}
- Initialise;
- ENDe:=false;
- Ausgabe(Mode);
- { HauptschleIFe (Achtung: lang!) }
- Repeat
- { Message-Management }
- Mess:=Get_Msg(MyUPt); { Nachricht am Userport? }
- While Mess<>Nil Do
- BEGIN
- Klasse:=Mess^.Class; { ja, Typ ermitteln }
- IF Klasse and MENUPICK<>0 THEN Menuhandling(Mess^.Code);
- IF Klasse and GADGETDOWN<>0 THEN Gadgethandling(Mess^.IAddress);;
- Reply_Msg(Mess);
- Mess:=Get_Msg(MyUPt);
- END;
- ReadFromKeyboard;
- Case ch Of
- EscKey: ENDe:=true; { Esc-Taste }
- CrsrUKey:IF (mode<=AsciiDump) or ((mode=Structure) and (Zeile>1)) THEN
- CursorUp;
- CrsrDKey:IF (mode<=AsciiDump) or ((mode=structure) and (Zeile<FeldAnz)) THEN
- CursorDown;
- CrsrRKey:CursorRight;
- CrsrLKey:CursorLeft;
- 'j','J': Jump;
- 'b','B': JumpBack;
- Otherwise END ; { ENDe von Case }
- Repeat
- ch:=ReadCon(Con)
- Until ch=chr(0); { Tastenpuffer ganz leeren, um Nachlaufen zu vermeiden }
- IF not ENDe THEN
- { Auf dem Amiga zählen Warteschleifen zu den 7 Todsünden (bzw. zu }
- { "den 7 tödlichen Zwergen" (Alf)). Deshalb ist folgENDermaßen auf }
- { das nächste Ereignis zu warten: }
- Sig:=Wait(-1);
- Until ENDe; { ENDe der HauptschleIFe }
- CloseEverything { ProgrammENDe }
- END.
-
-