home *** CD-ROM | disk | FTP | other *** search
- /*-----------------------------------------------------------------------------
- RDCF: A Reentrant DOS-Compatible File System, Version 2.0
-
- by Philip J. Erdelsky
- CompuServe 75746,3411
- InterNet 75746.3411@compuserve.com
-
- September 15, 1992
-
- Copyright (c) 1992 Philip J. Erdelsky
- -----------------------------------------------------------------------------*/
-
- #ifndef _RDCF
- #define _RDCF
-
- #include <setjmp.h>
-
- /* #define RDCF_SYSTEM_READ_ONLY */
- #define RDCF_MULTIPLE_DRIVE
- #define RDCF_SECTOR_SIZE 512
-
- struct rdcf_date_and_time
- {
- unsigned char second;
- unsigned char minute;
- unsigned char hour;
- unsigned char day;
- unsigned char month;
- unsigned short year;
- };
-
- struct rdcf_file_information
- {
- unsigned char spec[13];
- unsigned char attribute;
- #define RDCF_READ_ONLY 0x01
- #define RDCF_HIDDEN 0x02
- #define RDCF_SYSTEM 0x04
- #define RDCF_VOLUME 0x08
- #define RDCF_DIRECTORY 0x10
- #define RDCF_ARCHIVE 0x20
- struct rdcf_date_and_time date_and_time;
- unsigned short first_cluster;
- unsigned long size;
- };
-
- /* FCB (File Control Block) */
-
- struct rdcf
- {
-
- /* values that must be initialized by the calling program */
-
- unsigned char *buffer;
- unsigned (*drive_access)(int, unsigned, unsigned, void *);
-
- /* file information */
-
- struct rdcf_file_information file;
-
- /* result codes */
-
- unsigned long position;
- unsigned short drive_error;
- short result;
-
- /* file system information */
-
- unsigned char drive;
- #ifndef RDCF_SECTOR_SIZE
- unsigned short sector_size;
- #endif
- unsigned short first_FAT_sector;
- unsigned short sectors_per_FAT;
- unsigned short first_directory_sector;
- unsigned short first_data_sector;
- unsigned short sectors_per_cluster;
- unsigned short maximum_cluster_number;
- unsigned short last_cluster_mark;
-
- /* internal use only */
-
- #ifndef RDCF_SYSTEM_READ_ONLY
- unsigned char mode;
- #endif
- unsigned short directory_first_cluster;
- unsigned short directory_cluster;
- unsigned short directory_index;
- unsigned char buffer_status;
- unsigned short cluster;
- unsigned short last_cluster;
- unsigned short sector_in_buffer;
- jmp_buf error;
- };
-
- struct rdcf_format
- {
- unsigned char x[19];
- };
-
- /* error codes */
-
- #define RDCF_ACCESS_DENIED (-1)
- #define RDCF_DIRECTORY_CONFLICT (-2)
- #define RDCF_DIRECTORY_FULL (-3)
- #define RDCF_DISK_FORMAT_ERROR (-4)
- #define RDCF_DRIVE_ERROR (-5)
- #define RDCF_FILE_FORMAT_ERROR (-6)
- #define RDCF_INVALID_DIRECTORY (-7)
- #define RDCF_INVALID_SPEC (-8)
- #define RDCF_MODE_ERROR (-9)
- #define RDCF_FILE_NOT_FOUND (-10)
- #define RDCF_RENAMING_ERROR (-11)
- #define RDCF_SEEK_OUT_OF_RANGE (-12)
- #define RDCF_UNRECOVERABLE_FILE (-13)
-
- /* prototype for function defined in application */
-
- void rdcf_get_date_and_time(struct rdcf_date_and_time *);
-
- /* formatting types */
-
- #ifndef RDCF_SYSTEM_READ_ONLY
- extern struct rdcf_format rdcf_format_360;
- extern struct rdcf_format rdcf_format_720;
- extern struct rdcf_format rdcf_format_1200;
- extern struct rdcf_format rdcf_format_1440;
- #endif
-
- /* modes for rdcf_open() */
-
- #ifndef RDCF_SYSTEM_READ_ONLY
- #define RDCF_CREATE 0
- #define RDCF_READ 1
- #define RDCF_READ_WRITE 2
- #endif
-
- /* modes for rdcf_sort_directory() */
-
- #ifndef RDCF_SYSTEM_READ_ONLY
- #define RDCF_EXTENSION_NAME 0
- #define RDCF_NAME_EXTENSION 1
- #define RDCF_DATE_TIME 2
- #define RDCF_SIZE 3
- #define RDCF_REVERSE 8
- #endif
-
- /* prototypes for functions defined in RDCF */
-
- #ifdef RDCF_SYSTEM_READ_ONLY
- int rdcf_open(struct rdcf *, char *);
- #else
- int rdcf_attribute(struct rdcf *, char *, unsigned);
- int rdcf_close(struct rdcf *);
- int rdcf_date_and_time(struct rdcf *, char *, struct rdcf_date_and_time *);
- int rdcf_delete(struct rdcf *, char *);
- int rdcf_directory(struct rdcf *, char *);
- int rdcf_format(struct rdcf *,
- #ifdef RDCF_MULTIPLE_DRIVE
- char *,
- #endif
- struct rdcf_format *);
- int rdcf_move(struct rdcf *, char *, char *);
- int rdcf_open(struct rdcf *, char *, unsigned);
- int rdcf_recover(struct rdcf *, char *);
- int rdcf_rename(struct rdcf *, char *, char *);
- int rdcf_set_file_information(struct rdcf *, char *, unsigned,
- struct rdcf_file_information *);
- int rdcf_set_volume(struct rdcf *, char *);
- int rdcf_sort_directory(struct rdcf *, char *, int);
- int rdcf_undelete(struct rdcf *, char *);
- int rdcf_wipe_drive(struct rdcf *
- #ifdef RDCF_MULTIPLE_DRIVE
- , char *
- #endif
- );
- int rdcf_write(struct rdcf *, void *, int);
- #endif
-
- int rdcf_get_file_information(struct rdcf *, char *, unsigned);
- int rdcf_next_file_information(struct rdcf *);
- int rdcf_get_volume(struct rdcf *
- #ifdef RDCF_MULTIPLE_DRIVE
- , char *
- #endif
- );
- long rdcf_free_space(struct rdcf *
- #ifdef RDCF_MULTIPLE_DRIVE
- , char *
- #endif
- );
- int rdcf_match(char *, char *);
- int rdcf_read(struct rdcf *, void *, int);
- int rdcf_seek(struct rdcf *, unsigned long);
-
- #endif
-
-