home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Devil's Doorknob BBS Capture (1996-2003)
/
devilsdoorknobbbscapture1996-2003.iso
/
Dloads
/
PROGRAMM
/
SNIP0492.ZIP
/
RFIND1ST.C
< prev
next >
Wrap
C/C++ Source or Header
|
1991-09-14
|
4KB
|
82 lines
/*
** RFIND1ST.C - Our own non-compiler specific find first/next calls
**
** Original Copyright 1988-1991 by Bob Stout as part of
** the MicroFirm Function Library (MFL)
**
** This subset version is functionally identical to the
** version originally published by the author in Tech Specialist
** magazine and is hereby donated to the public domain.
*/
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include "dirent.h"
/************************************************************************/
/* */
/* rfind_1st() - Find first matching file */
/* */
/* Parameters: 1 - Drive, path and filename of file to be found. May */
/* include wildcards */
/* 2 - Attribute of file to search for. Attributes are */
/* described in the MS-DOS manual. The search strategy */
/* is described under DOS call 0x4Eh. */
/* 3 - Disk transfer area buffer. If NULL, one will be */
/* malloc'ed. */
/* Returns: Pointer to a struct DSTRUCT. If error, NULL is returned and */
/* _doserrno is set to the error #. */
/* */
/************************************************************************/
struct DSTRUCT *rfind_1st(char *name, unsigned attribute, struct DSTRUCT *dta)
{
struct DSTRUCT *my_dta;
union REGS regs;
if (NULL == dta)
my_dta = (struct DSTRUCT *)malloc((int)sizeof(struct DSTRUCT));
else my_dta = dta;
bdos(0x1A, (unsigned)my_dta, 0); /* set DTA to my_dta */
regs.x.ax = 0x4E00; /* find first */
regs.x.dx = (unsigned)name;
regs.x.cx = attribute;
intdos(®s, ®s);
if (regs.x.cflag) /* if error */
{
_doserrno = regs.x.ax;
if (NULL == dta && my_dta != NULL)
free(my_dta);
return (struct DSTRUCT *) NULL;
}
return my_dta;
}
/************************************************************************/
/* */
/* rfind_nxt() - Find next matching file */
/* */
/* Parameters: 1 - Pointer to DSTRUCT structure to use */
/* */
/* Returns: Pointer to struct DSTRUCT, */
/* NULL if no more matching files found */
/* */
/************************************************************************/
struct DSTRUCT *rfind_nxt(struct DSTRUCT *dta)
{
union REGS regs;
bdos(0x1A, (unsigned)dta, 0); /* set DTA to dta */
regs.x.ax = 0x4F00;
intdos(®s,®s);
if (regs.x.cflag) /* if error */
{
_doserrno = regs.x.ax;
return (struct DSTRUCT *) NULL;
}
return dta;
}