[fpc-devel] Re: File Dates
    Jeff Pohlmeyer 
    yetanothergeek at yahoo.com
       
    Sun Jan 30 05:34:41 CET 2005
    
    
  
> AFAIR Unix has some kind of registry for file types, based on file
> extensions and characteristic bytes at the begin of an file. Does
> somebody know more about that registry, so that it could be integrated
> into the intended registry for archive handlers?
=================================================
unit libmagic;
interface
{$PACKRECORDS C}
{$LINKLIB magic}
{$LINKLIB c}
const
  MAGIC_NONE           = $000;
  MAGIC_DEBUG          = $001;
  MAGIC_SYMLINK        = $002;
  MAGIC_COMPRESS       = $004;
  MAGIC_DEVICES        = $008;
  MAGIC_MIME           = $010;
  MAGIC_CONTINUE       = $020;
  MAGIC_CHK            = $040; // naming conflict ( was MAGIC_CHECK )
  MAGIC_PRESERVE_ATIME = $080;
  MAGIC_RAW            = $100;
  MAGIC_ERR            = $200; // naming conflict ( was MAGIC_ERROR )
type
  size_t = dword;
  magic_set = record
    {opaque structure}
  end;
  magic_t = ^magic_set;
function magic_open(flags:LongInt):magic_t;cdecl;external;
function magic_file(cookie:magic_t; filename:pChar):pChar;cdecl;external;
function magic_error(cookie:magic_t):pChar;cdecl;external;
function magic_setflags(cookie:magic_t; flags:LongInt):LongInt;cdecl;external;
function magic_load(cookie:magic_t; filename:pChar):LongInt;cdecl;external;
function magic_compile(cookie:magic_t; filename:pChar):LongInt;cdecl;external;
function magic_check(cookie:magic_t; filename:pChar):LongInt;cdecl;external;
function magic_errno(cookie:magic_t):LongInt;cdecl;external;
procedure magic_close(cookie:magic_t);cdecl;external;
function magic_buffer( cookie:magic_t; 
                       buffer:pointer; buflen:size_t):pChar;cdecl;external;
implementation
end.
=================================================
program testmagic;
uses strings, libmagic;
var 
  magic: magic_t;
begin
  if ( paramcount = 1 ) then begin
    magic:=magic_open( MAGIC_SYMLINK or MAGIC_MIME );
    magic_load(magic, nil);
    WriteLn(magic_file(magic, argv[1]));
    magic_close(magic);
  end else WriteLn(StdErr, 'Usage:  testmagic <filename>');
end.
=================================================
Requires "file" --version >= 4.0
See also:
  http://directory.fsf.org/file.html
  http://prdownloads.sourceforge.net/gnuwin32/file-4.12-lib.zip?download
.
__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 
    
    
More information about the fpc-devel
mailing list