#ifndef __IOHANDLE_H
#define __IOHANDLE_H
#include "iobase.h"
class IoctlHandle : public IoctlBase {
protected:
unsigned handle_info( int ); //get info
virtual void IoctlError(int);
IoctlHandle( int handle ); //constructor 1
IoctlHandle( const char *path ); //constructor 2
int _handle; //validated handle
int _pathused; //!0 if Init( char *) called
unsigned _info; //handle info word
public:
static IoctlHandle *Init( int handle );
static IoctlHandle *Init(const char *);
~IoctlHandle(); //destructor
//Format of handle information word ....
enum file_info {
drive_number = 0x003f, //bits 0-5 =drive#
//(0-based, A=0)
//= drive containing the file.
cleared = 0x0040, //bit 6=1 if file cleared
// (i.e. not written to)
file_bit = 0x0080, //bit 7=0 if a file
fixed = 0x0800, //bit 11=1, media not removable
noInherit = 0x1000, //bit 12=1, no inherit (?)
noCommit = 0x4000, //bit 14=1, Date/time not set
//on handle close operation
remote = 0x8000 //bit 15=1 if file remote
};
enum device_info {
std_in = 0x0001, //bit 0=1 if std input
std_out = 0x0002, //bit 1=1 if std output
std_nul = 0x0004, //bit 2=1 if NUL device
std_clk = 0x0008, //bit 3=1 if CLOCK device
use_int29h = 0x0010, //use int 29h for single
//char text output.....
binary = 0x0020, //bit 5=0 if ASCII,
// =1 if binary
eof = 0x0040, //bit 6=0 if at EOF on input
device_bit = 0x0080, //bit 7=1 if a device
network = 0x1000, //bit 12=1 if network device
ioctl = 0x4000 //bit 14=1 if driver can
//process IOCTL strings via
//subfunctions 02h & 03h
};
int readHandle(void) { return _handle; }
int isFile( void )
{ return !(file_bit & info); }
int isDevice( void )
{ return device_bit & _info; }
unsigned handleInfo(void) //get & refresh _info
{ _info = handle_info( _handle );
return _info; }
int inputStatus( void ); //!0=ready, 0=not
int outputStatus( void ); //!0=ready, 0=not
int isRemote(void); //File/device handle remote?
}; //.... end class IoctlHandle
#endif //_IOHANDLE_H
// End of File