[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]

    {
    BS> Can anone out there tell me where you get the resoloution out of a Gif file
    BS> from? What I am saying is, I would like to make a program to look at a Gif
    BS> and grab the resoloution out of it for my dir list files. Any help would be
    BS> appreciated.

    I've written a freeware program to do just this.  Program name is GRR,
    and Pascal source accompanies it.  Here is the source from the latest
    (and only) version.  I apologize for the lack of comments, but it is
    rather straightforward, I think. }

    program getGIFheader;
    uses
      dos;
    const
      progdata = 'GRR- Free DOS utility: GIF file info displayer.';
      progdat2 =
      'V1.00: August 19, 1993. (c) 1993 by David Daniel Anderson - Reign Ware.';
      usage =
      'Usage:  GRR directory and/or file_spec[.GIF]   Example:  GRR cindyc*';
    var
      header : string[6];
      gpixn : byte;
      gpixels, gback, rwidthLSB, rheightLSB, rwidth, rheight : char;
      gifname : string[12];
      giffile : text;
      dirinfo : searchrec;
      gpath : pathstr;
      gdir : dirstr;
      gname : namestr;
      gext : extstr;

    procedure showhelp;
    begin {-- showhelp --}
      writeln(progdata);
      writeln(progdat2);
      writeln(usage);
      halt;
    end {-- showhelp --};

    function taffy(astring : string; newlen : byte) : string;
    begin {-- taffy --}
      while (length(astring) < newlen) do
        astring := astring + ' ';
      taffy := astring;
    end {-- taffy --};

    function LeadingZero(w : Word) : string;
    var
      s : string;
    begin {-- LeadingZero --}
      Str(w : 0, s);
      if (length(s) = 1) then
        s := '0' + s;
      LeadingZero := s;
    end {-- LeadingZero --};

    procedure writeftime(fdatetime : longint);
    var
      Year2 : string;
      DateTimeInf : DateTime;
    begin {-- writeftime --}
      UnpackTime(fdatetime, DateTimeInf);
      with DateTimeInf do
      begin
      Year2 := LeadingZero(Year);
      Delete(Year2, 1, 2);
      Write(LeadingZero(Month), '-', LeadingZero(Day), '-', Year2, '  ',
      LeadingZero(Hour), ':', LeadingZero(Min), ':', LeadingZero(Sec));
      end;
    end {-- writeftime --};

    procedure displaygifscreenstats(screendes : byte);
    var
      GCM : Boolean;
    begin {-- displaygifscreenstats --}
      GCM := screendes > 128;
      if (screendes > 128) then
        screendes := screendes - 128;
      if (screendes > 64) then
        screendes := screendes - 64;
      if (screendes > 32) then
        screendes := screendes - 32;
      if (screendes > 16) then
        screendes := screendes - 16;
      if (screendes > 8) then
        screendes := screendes - 8;
      case (screendes) of
        0: Write('  2');
        1: Write('  4');
        2: Write('  8');
        3: Write(' 16');
        4: Write(' 32');
        5: Write(' 64');
        6: Write('128');
        7: Write('256');
      end {-- CASE --};
      if (GCM) then
        Write(' ]  GCM/')
      else
        Write(' ]  ---/');
    end {-- displaygifscreenstats --};

    procedure checkforgiflite(var thefile : text);
    var
      ic : Word;
      dummy, glite : char;
      gliteword : string[7];
    begin {-- checkforgiflite --}
      for ic := 13 to 784 do
        read(thefile, dummy);
      gliteword := '       ';
      for ic := 1 to 7 do
        begin
        read(thefile, glite);
        gliteword[ic] := glite;
        end;
      if (pos('GIFLITE', gliteword) = 1) then
        Write('GL')
      else
        Write('--');
    end {-- checkforgiflite --};

    begin {-- getGIFheader --}
      gpath := '';
      gpath := paramstr(1);
      if (gpath = '') then
        gpath := '*.gif';
      if (pos('.', gpath) <> 0) then
        begin
        gpath := copy(gpath, 1, pos('.', gpath));
        gpath := gpath + 'gif'
        end
      else
        gpath := gpath + '*.gif';
      fsplit(fexpand(gpath), gdir, gname, gext);
      findfirst(gpath, archive, dirinfo);
      if (doserror <> 0) then
        showhelp;
      while (doserror = 0) do
        begin
        gifname := dirinfo.name;
        assign(giffile, gdir + gifname);
        reset(giffile);
        read(giffile, header);
        if (pos('GIF', header) <> 1) then
          header := '?_GIF?';
        read(giffile, rwidthLSB, rwidth, rheightLSB, rheight, gpixels, gback);
        gifname := taffy(gifname, 12);
        Write(gifname, '  ', dirinfo.size:7, '  ');
        writeftime(dirinfo.time);
        Write('    ', header, '   [');
        Write((ord(rwidthLSB) + (256 * ord(rwidth))):4, ' ',
             (ord(rheightLSB) + (256 * ord(rheight))):4, '  ');
        gpixn := ord(gpixels);
        displaygifscreenstats(gpixn);
        {         write ( ', ', ord ( gback )); }
        { This is the background color, commented out since it is not used }
        checkforgiflite(giffile);
        writeln;
        close(giffile);
        findnext(dirinfo);
        end;
    end {-- getGIFheader --}.

[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]