83 lines
2.6 KiB
Plaintext
83 lines
2.6 KiB
Plaintext
program tvlm;
|
|
{$F+}
|
|
|
|
{ Example for the nwIntr unit / NwTP 0.6 (c) 1995, R.Spronk
|
|
|
|
Shows the same information as the VLM /X command.
|
|
|
|
Example for the use of the GetVLMHeader and GetVLMControlBlock
|
|
functions in the unit nwIntr }
|
|
|
|
uses dos,nwintr,nwmisc;
|
|
|
|
Var t:byte;
|
|
HDR:TVLMHeader;
|
|
CBL:TVLMcontrolBlockEntry;
|
|
s:string;
|
|
GlobSize,TransSize:longint;
|
|
regs:registers;
|
|
w:word;
|
|
|
|
begin
|
|
IF NOT VLM_EXE_Loaded
|
|
then begin
|
|
writeln('VLM.EXE not loaded.');
|
|
halt(0);
|
|
end;
|
|
GetVLMHeader(HDR);
|
|
|
|
regs.ax:=$7a20;
|
|
regs.bx:=$0000;
|
|
regs.cx:=$0000;
|
|
intr($2f,regs);
|
|
|
|
writeln('Handler entry point : ',HexStr(regs.es,4),':',HexStr(regs.bx,4));
|
|
writeln('Headerlength (or id?): ',HexStr(HDR.headerlen,2),'h');
|
|
writeln('IDstring : ',hdr.multiplexIdString[1],
|
|
hdr.multiplexIdString[2],
|
|
hdr.multiplexIdString[3]);
|
|
|
|
writeln('TransientSwitchCount : ',hdr.TransientSwitchCount);
|
|
writeln('CallCount : ',hdr.CallCount);
|
|
writeln('CurrentVLMid : ',HexStr(hdr.CurrentVLMID,4),'h');
|
|
writeln('MemoryType : ',HexStr(hdr.MemoryType,2),'h [04 = XMS]');
|
|
writeln('ModulesLoaded : ',hdr.ModulesLoaded);
|
|
writeln('BlockID : ',HexStr(hdr.BlockId,4),'h');
|
|
writeln('TransientBlock : ',HexStr(hdr.TransientBlock,4),'h');
|
|
writeln('GlobalSegment : ',HexStr(hdr.GlobalSegment,4),'h');
|
|
writeln('FullMapCount : ',hdr.FullMapCount);
|
|
|
|
GlobSize:=0;TransSize:=0;
|
|
writeln;
|
|
writeln('VLM control block information Address Memory size (bytes) ');
|
|
writeln('Name ID Flag Func Maps Call TSeg Gseg Low Hi TSize Gsize SSize ');
|
|
writeln('-------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ------ ------ ------');
|
|
for t:=0 to hdr.modulesLoaded
|
|
do begin
|
|
GetVLMcontrolBlock(t,CBL);
|
|
|
|
With CBL
|
|
do begin
|
|
s[0]:=#8;
|
|
move(cbl.VLMname,s[1],8);
|
|
write(s,' ');
|
|
|
|
write(HexStr(id,4),' ');
|
|
write(HexStr(Flag,4),' ');
|
|
write(HexStr(Func,4),' ');
|
|
write(HexStr(Maps,4),' ');
|
|
write(HexStr(TimesCalled,4),' ');
|
|
write(HexStr(TransientSeg,4),' ');
|
|
write(HexStr(GlobalSeg,4),' ');
|
|
write(HexStr(AddressLow,4),' ');
|
|
write(HexStr(AddressHi,4),' ');
|
|
writeln(16*TsegSize:6,' ',16*GSegSize:6,' ',16*SSegSize:6);
|
|
if TsegSize>TransSize
|
|
then TransSize:=TsegSize;
|
|
GlobSize:=GlobSize+GSegSize;
|
|
end;
|
|
end;
|
|
writeln('Transient block size: ',TransSize*16);
|
|
writeln('Global segment size : ',GlobSize*16);
|
|
|
|
end. |