[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]