#ifndef __IOBASE_H
#define __IOBASE_H
#include <dos.h>
class IoctlBase {
public:
//DOS IOCTL subfunction codes .....
enum ioctl_cmd {
get_handle_info, set_handle_info,
read_ioctl_char, send_ioctl_char,
read_ioctl_block, send_ioctl_block,
input_status, output_status,
drive_removable, drive_remote,
handle_remote, sharing_retry,
gen_ioctl_char, gen_ioctl_block,
get_log_drivemap, set_log_drivemap,
query_ioctl_char, query_ioctl_block
};
//Minor function codes, Generic IOCTL
//for character devices ....
enum char_cmd {
set_iter_count = 0x45, get_iter_count = 0x65,
select_code_page = 0x4a, start_code_page = 0x4c,
end_code_page = 0x4d, query_code_page = 0x6a,
query_prepare_list = 0x6b, set_display_mode = 0x5f,
get_display_mode = 0x7f
};
//Minor function codes for, Generic IOCTL
//for block devices. ....
enum block_cmd {
set_params = 0x40, write_track = 0x41,
format_and_verify = 0x42, set_media_id = 0x46,
set_access_flag = 0x47, get_params = 0x60,
read_track = 0x61, verify_track = 0x62,
get_media_id = 0x66, get_access_flag = 0x67,
sense_media_type = 0x68
};
IoctlBase();
~IoctlBase() { }
protected:
//switch DOS major/minor version numbers
//for direct version comparisons .........
struct DOS_MM { unsigned char minor, major;};
union DOS_VERSION { int version;
struct DOS_MM ver; };
union DOS_VERSION _dos;
int _dos_error; //saved DOS error number
union REGS _iregs, _oregs;
struct SREGS_sregs;
virtual void int21_44h(ioctl_cmd code );
virtual void IoctlError( int ) { } //error proc
}; // .... end class IoctlBase
#endif //_IOBASE_H
// End of File