#include #include #include typedef struct { char Name[9]; char Ext[4]; char Attribute; unsigned int Date; unsigned int Time; unsigned long Size; int Tag; } FileStruc; int ScdirDone; FileStruc *XScanDir( char *Mask, int Type ); FileStruc *ScanDir( char *Mask, int Type ) { static char OldMask[80] = {"\0\0"}; if ( 0 != stricmp( Mask, OldMask ) ) { strcpy( OldMask, Mask ); ScdirDone = 1; } return( XScanDir( Mask, Type ) ); } FileStruc *XScanDir( char *Mask, int Type ) { static FileStruc FS; register FileStruc *fp=&FS; register char *cp; static struct ffblk ffblkx; Rescan: if ( ScdirDone ) ScdirDone = findfirst( Mask, &ffblkx, Type ); else ScdirDone = findnext ( &ffblkx ); if ( ScdirDone ) return( NULL ); if ( ffblkx.ff_name[0] == '.' ) goto Rescan; memset( fp, 0, sizeof( FileStruc ) ); if ( ( cp = strchr( ffblkx.ff_name, '.' ) ) != NULL ) { *cp = 0; cp++; strcpy( fp->Ext, cp ); } strcpy( fp->Name, ffblkx.ff_name ); fp->Size = ffblkx.ff_fsize; fp->Date = ffblkx.ff_fdate; fp->Time = ffblkx.ff_ftime; fp->Attribute = ffblkx.ff_attrib; fp->Tag = 32; return( fp ); }