[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]
{
Dos icon viewer
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º º°
º AVONTURE CHRISTOPHE º°
º AVC SOFTWARE º°
º BOULEVARD EDMOND MACHTENS 157/53 º°
º B-1080 BRUXELLES º°
º BELGIQUE º°
º º°
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ°
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
}
Uses Crt, Dos;
CONST
IcoSize = 32; { An icon is a 32*32 square }
VAR
arrNom : Array[1..255] of String[12]; { Store the full filename }
{ Display a pixel }
Procedure Put_Pixel (Colonne, Ligne, Couleur : Word); Assembler;
Asm
Mov Ah, 0Ch
Mov Al, Byte Ptr Couleur
Mov Cx, Colonne
Mov Dx, Ligne
Xor Bh, Bh
Int 10h
End;
{ Display the given icon file to the given coordinates }
Procedure Show_Ico (sFileName : String; wColumn, wLine : Word);
Type
TIconRec = Array[0..1023] of Byte;
TIcon = ^TIconRec;
Var
Color : Byte;
fIcon : File;
I, J : Word;
Icon : TIcon;
Begin
Assign (fIcon, sFileName);
FileMode := 0; { Read only }
Reset (fIcon, 1);
GetMem (Icon, 1024); { Allocate memory for the icon }
BlockRead (fIcon, Icon^, 126);
For I := 0 to 511 Do { Process the icon file }
BEGIN
BlockRead (fIcon, Color, 1);
Icon^[I shl 1] := Color Shr 4;
Icon^[(I shl 1) + 1] := Color And $0F;
END;
Close (fIcon);
wLine := wLine + icoSize;
{ Display the icon. }
For J := 31 Downto 0 do
For I := 31 Downto 0 do
Put_Pixel (wColumn+I, wLine-J, Icon^[I+J Shl 5]);
Release (Icon); { Release icon memory }
End;
{ Load all icon files present in the specified directory }
PROCEDURE Load_Icons;
VAR
DosFile : SearchRec;
OldX, OldY : Word;
I : Byte;
wPos : Word;
BEGIN
OldX := IcoSize; OldY := IcoSize; wPos := 0;
FindFirst (Paramstr(1)+'\*.Ico', AnyFile, DosFile);
WHILE DosError = 0 DO
BEGIN
{ List all icon file and display it }
Inc (wPos);
arrNom[wPos] := DosFile.Name;
Show_Ico (Paramstr(1)+'\'+DosFile.Name, OldX, OldY);
{ Process the screen coordinates for the next icon }
IF OldX < (640-(IcoSize Shl 1)) THEN
OldX := OldX + IcoSize
ELSE
BEGIN
OldX := IcoSize;
OldY := OldY + IcoSize;
END;
IF OldY = 14*IcoSize THEN
BEGIN
OldX := IcoSize;
OldY := IcoSize;
ClrScr;
END;
FindNext (DosFile);
END;
END;
{ Main program }
BEGIN
GotoXy (0,0);
TextAttr := 10;
Write ('IconView (c) AVONTURE Christophe February 1996');
{ If a parameter is specified, supposed that this parameter is a path
name and try to display all icon files present in this directory }
IF NOT (ParamCount = 0) THEN
BEGIN
{ Initialize graphic mode 640*480 256 colors }
Asm
Mov Ax, 0012h
Int 10h
End;
Load_Icons;
TextAttr := 15;
REPEAT UNTIL KEYPRESSED; READKEY;
{ Restore 80*25 255 colors screen mode }
Asm
Mov Ax, 0003h
Int 10h
End;
END
ELSE
BEGIN
{ No parameters has been given to the program. So show a little
help. }
WriteLN ('');
WriteLN ('');
WriteLN ('');
WriteLN ('You must specify the path where ICO files are stored.');
WriteLN ('');
WriteLN ('For instance, ICO_VIEW C:\WINDOWS\SYSTEM. ');
WriteLN ('');
WriteLN ('');
REPEAT UNTIL KEYPRESSED; READKEY;
END;
END.
[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]