home *** CD-ROM | disk | FTP | other *** search
- /* C device driver header */
-
- #ifndef I8086D
- int x = WRONG_MEMORY_MODEL;
- #endif
-
- /* byte has been misspelled to prevent a conflict with DOS.H */
-
- typedef unsigned char bite;
- typedef unsigned int word;
-
- #ifndef NULL
- #define NULL 0L
- #endif
-
- /* format of device header */
-
- struct device_header {
- struct device_header *next;
- word attributes;
- word strategy_entry;
- word interrupt_entry;
- char name[8];
- };
-
- /* device header attributes */
-
- #define CHAR_DEVICE_ATTRIBUTE 0x8000
- #define STI_DEVICE_ATTRIBUTE 0x0001
- #define STO_DEVICE_ATTRIBUTE 0x0002
- #define NUL_DEVICE_ATTRIBUTE 0x0004
- #define CLOCK_DEVICE_ATTRIBUTE 0x0008
- #define SPECIAL_ATTRIBUTE 0x0010
- #define IOCTL_ATTRIBUTE 0x4000
- #define NON_IBM_FORMAT_ATTRIBUTE 0x2000
-
- /* format of BPB (block devices only) */
-
- struct bpb {
- word bytes_per_sector;
- bite sectors_per_allocation_unit;
- word reserved_sectors;
- bite FATs;
- word root_directory_entries;
- word total_sectors;
- bite media_descriptor;
- word sectors_per_FAT;
- word sectors_per_track;
- word heads;
- word hidden_sectors;
- };
-
- /* format of request header and functional data */
-
- struct request_header {
- bite length;
- bite unit_code;
- bite command_code;
- int status;
- bite reserved[8];
- union {
- struct {
- bite number_of_units;
- char *end_of_driver;
- union {
- char *command_line;
- struct bpb **bpb_table;
- } pointer;
- } init ;
- struct {
- bite media_descriptor;
- bite returned;
- } media_check ;
- struct {
- bite media_descriptor;
- char *transfer_address;
- struct bpb *bpb;
- } build_bpb ;
- struct {
- bite media_descriptor;
- char *transfer_address;
- word count;
- word starting_sector;
- } io ; /* for ioctl_input
- input
- output
- output_with_verify
- ioctl_output */
- struct {
- bite character;
- } nondestructive_input ;
- } x;
- };
-
- /* structure used by date_and_time() function */
-
- struct date_and_time {
- word days;
- bite minutes;
- bite hours;
- bite hundredths;
- bite seconds;
- };
-
- /* status bits returned by driver */
-
- #define ERROR_STATUS 0x8000
- #define BUSY_STATUS 0x0200
- #define DONE_STATUS 0x0100
-
- /* error numbers added to ERROR_STATUS */
-
- #define WRITE_PROTECT_VIOLATION 0
- #define UNKNOWN_UNIT 1
- #define DRIVE_NOT_READY 2
- #define UNKNOWN_COMMAND 3
- #define CRC_ERROR 4
- #define BAD_DRIVE_REQUEST_STRUCTURE_LENGTH 5
- #define SEEK_ERROR 6
- #define UNKNOWN_MEDIA 7
- #define SECTOR_NOT_FOUND 8
- #define PRINTER_OUT_OF_PAPER 9
- #define WRITE_FAULT 10
- #define READ_FAULT 11
- #define GENERAL_FAILURE 12
-
- /* functions that must be defined in driver */
-
- extern void init(void);
- extern void media_check(void);
- extern void build_bpb(void);
- extern void ioctl_input(void);
- extern void input(void);
- extern void nondestructive_input(void);
- extern void input_status(void);
- extern void input_flush(void);
- extern void output(void);
- extern void output_with_verify(void);
- extern void output_status(void);
- extern void output_flush(void);
- extern void ioctl_output(void);
-
- /* external items defined in startup code */
-
- extern void bad_device_driver_function(void);
- extern struct request_header *request_header;
- extern struct device_header *device_header;
- extern void exit(void);
-
- /* external items defined in other modules */
-
- extern int date_and_time(struct date_and_time *);
- extern void call_driver(struct device_header *, struct request_header *);
- extern char *argument(int);
- extern void putchar(int);
- extern void puts(char *);