 
#ifndef __dl_filing_h
#define __dl_filing_h
#ifndef __dl_core_h
#include "Core.h"
#endif
#ifndef filing_MAXLEAFNAMELEN
#define filing_MAXLEAFNAMELEN 32
#endif
typedef enum {
filing_NOTFOUND = 0,
filing_FILE = 1,
filing_DIRECTORY = 2,
filing_IMAGEFILE = 3
} filing_objtype;
typedef struct {
int loadaddr;
int execaddr;
int length;
int attrib;
filing_objtype objtype;
char name[ filing_MAXLEAFNAMELEN];
} filing_direntry;
typedef struct {
int loadaddr;
int execaddr;
int length;
int attrib;
filing_objtype objtype;
int SIN;
char date[ 5];
char name[ filing_MAXLEAFNAMELEN];
} filing_fulldirentry;
typedef enum {
readdirtype_DIRENTRY,
readdirtype_FULLDIRENTRY,
readdirtype_NAMEONLY
} filing_readdirtype;
typedef struct {
char *dirname;
void *buf;
int size;
filing_readdirtype type;
union {
filing_direntry *direntry;
filing_fulldirentry *fulldirentry;
char *name;
void *act;
} act;
int offset;
int read;
char *match;
} filing_dirdata;
os_error *Filing_OpenDir( char *dirname, filing_dirdata *dirdata,
int bufsize, filing_readdirtype type);
void *Filing_ReadDir( filing_dirdata *dirdata);
BOOL Filing_CloseDir( filing_dirdata *dirdata);
os_error *Filing_ReadDirNames( char *dirname, char *buf,
int *number, int *offset,
int size, char *match);
os_error *Filing_ReadDirEntry( char *dirname, filing_direntry *buf,
int *number, int *offset,
int size, char *match);
os_error *Filing_ReadFullDirEntry( char *dirname, filing_fulldirentry *buf,
int *number, int *offset,
int size, char *match);
os_error *Filing_ReadCatalogue( char *filename, filing_objtype *objtype,
int *loadaddr, int *execaddr, int *length,
int *attrib, int *filetype);
os_error *Filing_SingleDirEntry( char *filename,
filing_direntry *buf, int size);
os_error *Filing_SingleDirEntry2( char *dirname,
filing_direntry *buf,
int size, char *filename);
os_error *Filing_SingleFullDirEntry( char *filename,
filing_fulldirentry *buf, int size);
os_error *Filing_SingleFullDirEntry2( char *dirname,
filing_fulldirentry *buf,
int size, char *filename);
char *Filing_GetPathname( char *filename, char *pathname);
char *Filing_GetLeafname( char *filename, char *leafname);
char *Filing_FindLeafname( char *filename);
char *Filing_MakePath( char *newpath, char *dirname, char *leafname);
os_error *Filing_CanonicalisePath( char *pathname, char *buffer,
int size, int *spare);
typedef os_error *(Filing_ScanDir_StartDir) ( char *dirname,
filing_fulldirentry *dirdata);
typedef os_error *(Filing_ScanDir_FoundFile) ( char *dirname,
filing_fulldirentry *filedata);
typedef os_error *(Filing_ScanDir_EndDir) ( char *dirname,
filing_fulldirentry *dirdata);
os_error *Filing_ScanDir( char *dirname,
Filing_ScanDir_StartDir *startdirproc,
Filing_ScanDir_FoundFile *foundfileproc,
Filing_ScanDir_EndDir *enddirproc);
os_error *Filing_ScanDirByDir( char *dirname,
Filing_ScanDir_StartDir *startdirproc,
Filing_ScanDir_FoundFile *foundfileproc,
Filing_ScanDir_EndDir *enddirproc);
#endif
