/*--------------------------------------------------------------------------*/ /* Include files */ /*--------------------------------------------------------------------------*/ #include #include #include #include #include #include #include #define INCL_DOSPROCESS #include #include #include #include /*--------------------------------------------------------------------------*/ /* Static function declarations */ /*--------------------------------------------------------------------------*/ /* ... NONE ... */ /*--------------------------------------------------------------------------*/ /* Static variable definitions */ /*--------------------------------------------------------------------------*/ struct FILEINFO { char rsvd[21]; char attrib; unsigned wr_date; unsigned wr_time; long size; char name[13]; char nill; }; struct FileFindBuf { unsigned create_date; /* date of file creation */ unsigned create_time; /* time of file creation */ unsigned access_date; /* date of last access */ unsigned access_time; /* time of last access */ unsigned wr_date; /* date of last write */ unsigned wr_time; /* time of last write */ unsigned long size; /* file size (end of data) */ unsigned long falloc_size; /* file allocated size */ unsigned attrib; /* attributes of the file */ unsigned char string_len; /* returned length of ascii name str. */ /* length does not include null byte */ char name[13]; /* name string */ }; static struct FileFindBuf InfoBuf; static struct FileFindBuf InfoBufA; /*--------------------------------------------------------------------------*/ /* External variable declarations */ /*--------------------------------------------------------------------------*/ /* ... NONE ... */ /*--------------------------------------------------------------------------*/ /* Locally defined globals */ /*--------------------------------------------------------------------------*/ HDIR hDir; HDIR hDirA; USHORT cSearch; USHORT usAttrib; /*--------------------------------------------------------------------------*/ /* Local constants */ /*--------------------------------------------------------------------------*/ #define FILENAMELEN 13 /****************************************************************************/ /*--------------------------------------------------------------------------*/ /* DIR_FINDFIRST FOR PORTABILITY */ /*--------------------------------------------------------------------------*/ int dir_findfirst(char far * filename, int attribute, struct FILEINFO * dta) { hDir = 0x0001; usAttrib = attribute; cSearch = 1; if ((DosFindFirst( filename , &hDir , usAttrib , (PFILEFINDBUF) &InfoBuf , (USHORT) (sizeof(InfoBuf) * cSearch) , &cSearch , (ULONG) NULL) != 0) || cSearch != 1) { (void) DosFindClose( hDir ); errno = ENOENT; return (1); } else { dta->wr_date = InfoBuf.wr_date; dta->wr_time = InfoBuf.wr_time; dta->attrib = (char) InfoBuf.attrib; dta->size = InfoBuf.size; strcpy( dta->name, InfoBuf.name); errno = 0; return (0); } } int dir_findfirsta(char far * filename, int attribute, struct FILEINFO * dta) { hDirA = 0xffff; usAttrib = attribute; cSearch = 1; if ((DosFindFirst( filename , &hDirA , usAttrib , (PFILEFINDBUF) &InfoBufA , (USHORT) (sizeof(InfoBufA) * cSearch) , &cSearch , (ULONG) NULL) != 0) || cSearch != 1) { (void) DosFindClose( hDirA ); errno = ENOENT; return (1); } else { dta->wr_date = InfoBufA.wr_date; dta->wr_time = InfoBufA.wr_time; dta->attrib = (char) InfoBufA.attrib; dta->size = InfoBufA.size; strcpy( dta->name, InfoBufA.name); errno = 0; return (0); } } /*--------------------------------------------------------------------------*/ /* DIR_FINDNEXT FOR PORTABILITY */ /*--------------------------------------------------------------------------*/ int dir_findnext(struct FILEINFO * dta) { cSearch = 1; if ((DosFindNext( hDir , (PFILEFINDBUF) &InfoBuf , (USHORT) (sizeof(InfoBuf) * cSearch) , &cSearch) != 0) || (cSearch < 1)) { (void) DosFindClose( hDir ); errno = ENOENT; return (1); } else { dta->wr_date = InfoBuf.wr_date; dta->wr_time = InfoBuf.wr_time; dta->attrib = (char) InfoBuf.attrib; dta->size = InfoBuf.size; strcpy( dta->name, InfoBuf.name); errno = 0; return (0); } } int dir_findnexta(struct FILEINFO * dta) { cSearch = 1; if ((DosFindNext( hDirA , (PFILEFINDBUF) &InfoBufA , (USHORT) (sizeof(InfoBufA) * cSearch) , &cSearch) != 0) || (cSearch < 1)) { (void) DosFindClose( hDirA ); errno = ENOENT; return (1); } else { dta->wr_date = InfoBufA.wr_date; dta->wr_time = InfoBufA.wr_time; dta->attrib = (char) InfoBufA.attrib; dta->size = InfoBufA.size; strcpy( dta->name, InfoBufA.name); errno = 0; return (0); } } /*--------------------------------------------------------------------------*/ /* END OF FILE */ /*--------------------------------------------------------------------------*/