home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GIF-GALAXY 2
/
gif-galaxy2.iso
/
programs
/
vgainfo.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1992-03-31
|
5KB
|
153 lines
PROGRAM VGAInfo; {$R-,S-,X+,V-,A-}
USES DOS,Crt;
CONST Monat:ARRAY [0..13] OF STRING[3]=(
'???','Jan','Feb','Mär','Apr','Mai','Jun',
'Jul','Aug','Sep','Okt','Nov','Dez','???');
VAR i:BYTE;
Regs:Registers;
Block:ARRAY [0..511] OF BYTE;
NamensString:STRING[12];
FUNCTION HexForm(x:BYTE):STRING;
CONST Ziffer:ARRAY[0..15] OF CHAR='0123456789ABCDEF';
BEGIN
HexForm[0]:=#2;
HexForm[1]:=Ziffer[x SHR $4];
HexForm[2]:=Ziffer[x AND $F];
END;
FUNCTION LeadZero(x:BYTE):STRING;
VAR Ergebnis:STRING[2];
BEGIN
STR(x:2,Ergebnis);
IF Ergebnis[1]=' ' THEN Ergebnis[1]:='0';
LeadZero:=Ergebnis;
END;
PROCEDURE DatumAusgeben(DatumsZahl:LONGINT);
VAR Datum:DateTime;
BEGIN
UnPackTime(DatumsZahl,Datum);
Write(Datum.Day:2,'.');
Write(Monat[Datum.Month]:3,'.');
Write(Datum.Year,' ');
Write(Datum.Hour:2,':');
Write(LeadZero(Datum.Min),'.');
Write(LeadZero(Datum.Sec),' ');
END;
PROCEDURE AttributeAusgeben(Attribs:BYTE);
BEGIN
IF NamensString[1]=CHR(229) THEN BEGIN
TextColor(TextAttr OR Blink);
Write('gelöscht');
END ELSE BEGIN
IF BOOLEAN(Attribs AND 128) THEN Write('G') ELSE Write('-');
IF BOOLEAN(Attribs AND 64) THEN Write('O') ELSE Write('-');
IF BOOLEAN(Attribs AND 32) THEN Write('A') ELSE Write('-');
IF BOOLEAN(Attribs AND 16) THEN Write('D') ELSE Write('-');
IF BOOLEAN(Attribs AND 8) THEN Write('V') ELSE Write('-');
IF BOOLEAN(Attribs AND 4) THEN Write('S') ELSE Write('-');
IF BOOLEAN(Attribs AND 2) THEN Write('H') ELSE Write('-');
IF BOOLEAN(Attribs AND 1) THEN Write('R') ELSE Write('-');
END;
ClrEOL;
END;
FUNCTION CallInt25(Lfw,Start,Anz:WORD;Buff:POINTER):BOOLEAN; {nach: DOS-Tool 3/92, S.290}
INLINE(
$8C/$DE/$8B/$FD/
$5B/$1F/$59/$5A/$58/$56/$57/
$CD/$25/$B3/$00/$72/$04/$43/$EB/$03/
$CF/
$2B/$C0/
$0E/$E8/$FFF9/
$5D/$1F/$A3/>DOSError/$8A/$C3
);
PROCEDURE DiskettenInfo(Laufwerk:BYTE);
LABEL Ausgang;
VAR Zahl:LONGINT;
DirStart,Eintraege,Attr:BYTE;
BEGIN
Regs.AH:=$00; {Controller Reset}
Regs.DL:=Laufwerk;
Intr($13,Regs);
DirStart:=0;
IF CallInt25(Laufwerk,0,1,@Block) THEN BEGIN
TextColor(Yellow);
NamensString[0]:=CHR(8); Move(Block[3],NamensString[1],8);
Write(NamensString,' ',HexForm(Block[$27]),HexForm(Block[$28]),
'-',HexForm(Block[$29]),HexForm(Block[$2A]));
IF COPY(NamensString,1,6)='VGACPY' THEN BEGIN
Write(' ');
Move(Block[$27],Zahl,4);
DatumAusgeben(Zahl);
END;
WriteLn(#10#13);
DirStart:=1+Block[$10]*Block[$16];
IF DirStart>0 THEN BEGIN
Eintraege:=0;
REPEAT
CallInt25(Laufwerk,DirStart,1,@Block);
FOR i:=0 TO 15 DO BEGIN
TextColor(LightGray);
TextBackground(Black);
NamensString[0]:=CHR(12);
Move(Block[i*32],NamensString[1],12);
INSERT('.',NamensString,9);
IF NamensString[1]=CHR(0) THEN GOTO Ausgang;
INC(Eintraege);
Attr:=Block[i*32+11];
IF (COPY(NamensString,10,3)='EXE') OR
(COPY(NamensString,10,3)='COM') OR
(COPY(NamensString,10,3)='BAT') THEN TextBackground(Red);
IF BOOLEAN(Attr AND VolumeID) THEN TextBackground(Blue);
IF BOOLEAN(Attr AND Directory) THEN TextBackground(Green);
Write(NamensString,' ');
Move(Block[i*32+28],Zahl,4);
Write(Zahl:8,' ');
Move(Block[i*32+22],Zahl,4);
DatumAusgeben(Zahl);
AttributeAusgeben(Attr);
TextBackground(Black);
WriteLn;
IF KeyPressed THEN BEGIN
ReadKey;
Write('Beliebige Taste zum fortsetzen drücken ...');
REPEAT UNTIL ReadKey<>#0;
GotoXY(1,WhereY);
ClrEOL;
END;
END;
INC(DirStart);
UNTIL false;
END;
Ausgang:
TextColor(13);
Write(#10#13,Eintraege,' Einträge, ');
Write('Kapazität ist ',DiskSize(Laufwerk+1),' Bytes,');
WriteLn(' davon ',DiskFree(Laufwerk+1),' Bytes frei.');
TextColor(White);
END ELSE BEGIN
TextColor(LightGray);
WriteLn('Keine Diskette im Laufwerk !');
Halt(1);
END;
END;
BEGIN
IF ParamCount<>1 THEN BEGIN
WriteLn(#10+'VGA-Info'+#10+#13+'========'+#10);
WriteLn('Ein kleiner Directory-Lister für alle (auch gelöschte!) Dateien auf Diskette.');
WriteLn('Public-Domain-Zugabe zu VGA-Copy. Weiterverarbeitung ausdrücklich erlaubt !'+#10);
WriteLn('Syntax: VGAINFO <Laufwerk A: oder B:>');
END ELSE BEGIN
NamensString:=COPY(FExpand(ParamStr(1)+'.'),1,1);
DiskettenInfo(ORD(NamensString[1])-65);
END;
END.