home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 21
/
CD_ASCQ_21_040595.iso
/
dos
/
prg
/
pas
/
nwtp06
/
tvlm.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1995-03-01
|
3KB
|
83 lines
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.