{ ============================================================== Program and Coding by Peter Kusserow & Andre Wanzlick in June 1990 ============================================================== } Program ShowMem152; {$path "ram:include/","df0:include/";incl"intuition.lib","exec/memory.h"} TYPE BorDatTyp = Array[1..10] of integer; { Typ für Borderdata } VAR Win : ^Window; Con : ptr; c,f,g : long; Msg : ^IntuiMessage; basis,top,left : integer; AktGad : ^Gadget; Gad1,Gad2,Gad3,Gad4,Gad5 : Gadget; Tex1,Tex2,Tex3,Tex4,Tex5 : IntuiText; Bor1,Bor2,Bor3,Bor4,Bor5 : Border; BDt1,BDt2,BDt3,BDt4,BDt5 : BorDatTyp; {--------------------------------------------------------------} PROCEDURE WriteInt(Con: ptr;i: Long;b,f: integer); VAR s : String[40]; j,k,z,len : integer; i2 : Long; BEGIN b:=Basis j:=40; s[40]:=chr(0); { Nullbyte am Ende } i2:=abs(i); REPEAT j:= j-1; z:= i2 mod Basis; { letzte Ziffer von i2 } IF z<10 THEN s[j]:=chr(z+ord('0')) { Ziffern 0 bis 10 } ELSE s[j]:=chr(z-10+ord('A')); { Hexziffern A bis F } i2:= i2 DIV Basis; UNTIL i2=0; IF Basis=16 THEN BEGIN j:=j-1;s[j]:='$' { Hex-Zahlen mit "$" } END; IF Basis=2 THEN BEGIN j:=j-1;s[j]:='%'; { Binär-Zahlen mit "%" } END; IF Basis=8 THEN BEGIN j:=j-1; s[j]:='&' { Oktal-Zahlen mit "&" } END; len:=40-j; { Gesamtlänge der Zahl } FOR k:=1 TO f-len DO WriteCon(Con,' '); { Am Anfang mit Blanks auffüllen } WriteCon(Con,Str(^s[j])) { ab j-tem Zeichen ausgeben } END; {--------------------------------------------------------------} PROCEDURE Byebye; BEGIN CloseConsole(Con); RemoveGadgets(Win,^Gad1);RemoveGadgets(Win,^Gad2); RemoveGadgets(Win,^Gad3);RemoveGadgets(Win,^Gad4); RemoveGadgets(Win,^Gad5);Close_Window(Win); CloseLib(IntBase);DisposeAll; END; {--------------------------------------------------------------} PROCEDURE MakeGadget; BEGIN Gad1:=Gadget(^Gad2, { nächste Gadget-Struktur: } 15,15,48,9, { Position & Größe = anklickbarer Bereich } GADGHCOMP, { Gadget wird invertiert } RELVERIFY, { Activation Flags } BOOLGADGET, { Typ } ^Bor1, { Zeiger auf Borderstruktur } Nil, { kein Select-Border } ^Tex1, { Zeiger auf Text } 0, Nil, 1, 0); { Nummer 1 } Tex1:=IntuiText(1,0,0,10,1,Nil,'DEC',Nil); Bor1:=Border(0,0,3,0,0,5,^BDt1,Nil); BDt1:=BorDatTyp(-3,-2,50,-2,50,10,-3,10,-3,-2); Gad2:=Gadget(^Gad3,68,15,48,9,GADGHCOMP,RELVERIFY, BOOLGADGET,^Bor2,Nil,^Tex2,0,Nil,2,0); { Nummer 2 } Tex2:=IntuiText(1,0,0,10,1,Nil,'HEX',Nil); Bor2:=Border(0,0,3,0,0,5,^BDt2,Nil); BDt2:=BorDatTyp(-3,-2,50,-2,50,10,-3,10,-3,-2); Gad3:=Gadget(^Gad4,15,27,48,9,GADGHCOMP,RELVERIFY, BOOLGADGET,^Bor3,Nil,^Tex3,0,Nil,3,0); Tex3:=IntuiText(1,0,0,10,1,Nil,'BIN',Nil); Bor3:=Border(0,0,3,0,0,5,^BDt3,Nil); BDt3:=BorDatTyp(-3,-2,50,-2,50,10,-3,10,-3,-2); Gad4:=Gadget(^Gad5,68,27,48,9,GADGHCOMP,RELVERIFY, BOOLGADGET,^Bor4,Nil,^Tex4,0,Nil,4,0); Tex4:=IntuiText(1,0,0,10,1,Nil,'OCT',Nil); Bor4:=Border(0,0,3,0,0,5,^BDt4,Nil); BDt4:=BorDatTyp(-3,-2,50,-2,50,10,-3,10,-3,-2); Gad5:=Gadget(Nil,15,39,101,9,GADGHCOMP,RELVERIFY, BOOLGADGET,^Bor5,Nil,^Tex5,0,Nil,5,0); Tex5:=IntuiText(1,0,0,35,1,Nil,'INFO',Nil); Bor5:=Border(0,0,3,0,0,5,^BDt5,Nil); BDt5:=BorDatTyp(-3,-2,103,-2,103,10,-3,10,-3,-2); AddGadget(Win,^Gad1,Nil); AddGadget(Win,^Gad2,Nil); AddGadget(Win,^Gad3,Nil); AddGadget(Win,^Gad4,Nil); AddGadget(Win,^Gad5,Nil); RefreshGadgets(Win^.FirstGadget,Win,Nil); END; {--------------------------------------------------------------} PROCEDURE ClearWin; BEGIN WriteCon(Con,''\e'2;17H'\e'K'); WriteCon(Con,''\e'3;17H'\e'K'); WriteCon(Con,''\e'4;17H'\e'K'); END; {--------------------------------------------------------------} PROCEDURE InfoWindow; BEGIN WriteCon(Con,''\e'2;16H '\e'42m Show-Mem (c) 1990 '\e'm '); WriteCon(Con,''\e'3;16H '\e'42;7m P.Kusserow & A.Wanzlick '\e'm '); WriteCon(Con,''\e'4;16H '\e'42m written in KickPascal '\e'm '); Msg:=Wait_Port(Win^.UserPort); Msg:=Get_Msg(Win^.UserPort); IF Msg^.Class = MENUPICK THEN ClearWin; IF Msg^.Class = _CLOSEWINDOW THEN ClearWin; END; {--------------------------------------------------------------} PROCEDURE Fenster; BEGIN Win:=Open_Window(left,top,400,54,$0102,$300,$100E, '« SHOW-MEM 1.52 »',Nil,400,54,400,54); Con:=OpenConsole(Win); END; {--------------------------------------------------------------} PROCEDURE LittleFenster; BEGIN Win:=Open_Window(left,top,220,10,$0102,$300,$100E, '« SHOW-MEM 1.52 »',Nil,220,10,220,10) END; {--------------------------------------------------------------} PROCEDURE Refresh; BEGIN REPEAT c:=AvailMem(MEMF_CHIP); f:=AvailMem(MEMF_FAST); g:=f+c; WriteCon(Con,''\e'0 p'); WriteCon(Con,''\e'2;17H ChipMem : '); WriteInt(Con,c,basis,8); WriteCon(Con,''\e'3;17H FastMem : '); WriteInt(Con,f,basis,8); WriteCon(Con,''\e'4;17H '\e'33mGesamt : '\e'm'); WriteInt(Con,g,basis,8); Delay(5); AktGad:=Msg^.IAddress; IF (Gad1.Flags AND SELECTED)<>0 THEN BEGIN basis:=10; ClearWin; END; IF (Gad2.Flags AND SELECTED)<>0 THEN BEGIN basis:=16; ClearWin; END; IF (Gad3.Flags AND SELECTED)<>0 THEN BEGIN basis:=2; ClearWin; END; IF (Gad4.Flags AND SELECTED)<>0 THEN BEGIN basis:=8; ClearWin; END; IF (Gad5.Flags AND SELECTED)<>0 THEN InfoWindow; Msg:= Get_Msg(Win^.UserPort); IF Msg^.Class = MENUPICK THEN Begin top:=Win^.TopEdge;left:=Win^.LeftEdge Close_Window(Win); CloseConsole(Con); LittleFenster; Msg:= Wait_Port(Win^.UserPort); Msg:= Get_Msg(Win^.UserPort); IF Msg^.Class = MENUPICK THEN top:=Win^.TopEdge;left:=Win^.LeftEdge; IF ((left > 240) or (top > 202)) THEN BEGIN Close_Window(Win); left:=240;top:=0;Fenster;MakeGadget; END ELSE IF ((left <= 240) or (top <= 202)) THEN BEGIN Close_Window(Win); Fenster;MakeGadget; END; END; UNTIL Msg^.Class = _CLOSEWINDOW END; {--------------------------------------------------------------} BEGIN { Hauptprogramm } OpenLib(IntBase,'intuition.library',0); basis:=10;left:=240;top:=0; Fenster; MakeGadget; Refresh; Byebye; END.