home *** CD-ROM | disk | FTP | other *** search
/ Beginning C++ Through Gam…rogramming (2nd Edition) / BCGP2E.ISO / bloodshed / devcpp-4.9.9.2_setup.exe / minitape.h < prev    next >
C/C++ Source or Header  |  2005-01-29  |  6KB  |  224 lines

  1. /*
  2.  * minitape.h
  3.  *
  4.  * Minitape driver interface
  5.  *
  6.  * This file is part of the w32api package.
  7.  *
  8.  * Contributors:
  9.  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
  10.  *
  11.  * THIS SOFTWARE IS NOT COPYRIGHTED
  12.  *
  13.  * This source code is offered for use in the public domain. You may
  14.  * use, modify or distribute it freely.
  15.  *
  16.  * This code is distributed in the hope that it will be useful but
  17.  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  18.  * DISCLAIMED. This includes but is not limited to warranties of
  19.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  20.  *
  21.  */
  22. #ifndef __MINITAPE_H
  23. #define __MINITAPE_H
  24.  
  25. #if __GNUC__ >=3
  26. #pragma GCC system_header
  27. #endif
  28.  
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32.  
  33. #pragma pack(push,4)
  34.  
  35. #include "ntddk.h"
  36.  
  37. #define MEDIA_ERASEABLE                   0x00000001
  38. #define MEDIA_WRITE_ONCE                  0x00000002
  39. #define MEDIA_READ_ONLY                   0x00000004
  40. #define MEDIA_READ_WRITE                  0x00000008
  41. #define MEDIA_WRITE_PROTECTED             0x00000100
  42. #define MEDIA_CURRENTLY_MOUNTED           0x80000000
  43.  
  44. typedef enum _TAPE_STATUS {
  45.     TAPE_STATUS_SEND_SRB_AND_CALLBACK,
  46.     TAPE_STATUS_CALLBACK,
  47.     TAPE_STATUS_CHECK_TEST_UNIT_READY,
  48.     TAPE_STATUS_SUCCESS,
  49.     TAPE_STATUS_INSUFFICIENT_RESOURCES,
  50.     TAPE_STATUS_NOT_IMPLEMENTED,
  51.     TAPE_STATUS_INVALID_DEVICE_REQUEST,
  52.     TAPE_STATUS_INVALID_PARAMETER,    
  53.     TAPE_STATUS_MEDIA_CHANGED,
  54.     TAPE_STATUS_BUS_RESET,
  55.     TAPE_STATUS_SETMARK_DETECTED,
  56.     TAPE_STATUS_FILEMARK_DETECTED,
  57.     TAPE_STATUS_BEGINNING_OF_MEDIA,
  58.     TAPE_STATUS_END_OF_MEDIA,
  59.     TAPE_STATUS_BUFFER_OVERFLOW,
  60.     TAPE_STATUS_NO_DATA_DETECTED,
  61.     TAPE_STATUS_EOM_OVERFLOW,
  62.     TAPE_STATUS_NO_MEDIA,
  63.     TAPE_STATUS_IO_DEVICE_ERROR,
  64.     TAPE_STATUS_UNRECOGNIZED_MEDIA,
  65.     TAPE_STATUS_DEVICE_NOT_READY,
  66.     TAPE_STATUS_MEDIA_WRITE_PROTECTED,
  67.     TAPE_STATUS_DEVICE_DATA_ERROR,
  68.     TAPE_STATUS_NO_SUCH_DEVICE,
  69.     TAPE_STATUS_INVALID_BLOCK_LENGTH,
  70.     TAPE_STATUS_IO_TIMEOUT,
  71.     TAPE_STATUS_DEVICE_NOT_CONNECTED,
  72.     TAPE_STATUS_DATA_OVERRUN,
  73.     TAPE_STATUS_DEVICE_BUSY,
  74.     TAPE_STATUS_REQUIRES_CLEANING,
  75.     TAPE_STATUS_CLEANER_CARTRIDGE_INSTALLED
  76. } TAPE_STATUS, *PTAPE_STATUS;
  77.  
  78. #define INQUIRYDATABUFFERSIZE 36
  79. #ifndef _INQUIRYDATA_DEFINED /* also in scsi.h */
  80. #define _INQUIRYDATA_DEFINED
  81. typedef struct _INQUIRYDATA {
  82.     UCHAR  DeviceType : 5;
  83.     UCHAR  DeviceTypeQualifier : 3;
  84.     UCHAR  DeviceTypeModifier : 7;
  85.     UCHAR  RemovableMedia : 1;
  86.     union {
  87.         UCHAR  Versions;
  88.         struct {
  89.             UCHAR  ANSIVersion : 3;
  90.             UCHAR  ECMAVersion : 3;
  91.             UCHAR  ISOVersion : 2;
  92.         };
  93.     };
  94.     UCHAR  ResponseDataFormat : 4;
  95.     UCHAR  HiSupport : 1;
  96.     UCHAR  NormACA : 1;
  97.     UCHAR  TerminateTask : 1;
  98.     UCHAR  AERC : 1;
  99.     UCHAR  AdditionalLength;
  100.     UCHAR  Reserved;
  101.     UCHAR  Addr16 : 1;
  102.     UCHAR  Addr32 : 1;
  103.     UCHAR  AckReqQ: 1;
  104.     UCHAR  MediumChanger : 1;
  105.     UCHAR  MultiPort : 1;
  106.     UCHAR  ReservedBit2 : 1;
  107.     UCHAR  EnclosureServices : 1;
  108.     UCHAR  ReservedBit3 : 1;
  109.     UCHAR  SoftReset : 1;
  110.     UCHAR  CommandQueue : 1;
  111.     UCHAR  TransferDisable : 1;
  112.     UCHAR  LinkedCommands : 1;
  113.     UCHAR  Synchronous : 1;
  114.     UCHAR  Wide16Bit : 1;
  115.     UCHAR  Wide32Bit : 1;
  116.     UCHAR  RelativeAddressing : 1;
  117.     UCHAR  VendorId[8];
  118.     UCHAR  ProductId[16];
  119.     UCHAR  ProductRevisionLevel[4];
  120.     UCHAR  VendorSpecific[20];
  121.     UCHAR  Reserved3[40];
  122. } INQUIRYDATA, *PINQUIRYDATA;
  123. #endif
  124.  
  125. typedef struct _MODE_CAPABILITIES_PAGE {
  126.     UCHAR PageCode : 6;
  127.     UCHAR Reserved1 : 2;
  128.     UCHAR PageLength;
  129.     UCHAR Reserved2[2];
  130.     UCHAR RO : 1;
  131.     UCHAR Reserved3 : 4;
  132.     UCHAR SPREV : 1;
  133.     UCHAR Reserved4 : 2;
  134.     UCHAR Reserved5 : 3;
  135.     UCHAR EFMT : 1;
  136.     UCHAR Reserved6 : 1;
  137.     UCHAR QFA : 1;
  138.     UCHAR Reserved7 : 2;
  139.     UCHAR LOCK : 1;
  140.     UCHAR LOCKED : 1;
  141.     UCHAR PREVENT : 1;
  142.     UCHAR UNLOAD : 1;
  143.     UCHAR Reserved8 : 2;
  144.     UCHAR ECC : 1;
  145.     UCHAR CMPRS : 1;
  146.     UCHAR Reserved9 : 1;
  147.     UCHAR BLK512 : 1;
  148.     UCHAR BLK1024 : 1;
  149.     UCHAR Reserved10 : 4;
  150.     UCHAR SLOWB : 1;
  151.     UCHAR MaximumSpeedSupported[2];
  152.     UCHAR MaximumStoredDefectedListEntries[2];
  153.     UCHAR ContinuousTransferLimit[2];
  154.     UCHAR CurrentSpeedSelected[2];
  155.     UCHAR BufferSize[2];
  156.     UCHAR Reserved11[2];
  157. } MODE_CAPABILITIES_PAGE, *PMODE_CAPABILITIES_PAGE;
  158.  
  159. typedef BOOLEAN DDKAPI
  160. (*TAPE_VERIFY_INQUIRY_ROUTINE)(
  161.     IN PINQUIRYDATA  InquiryData,
  162.     IN PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage);
  163.  
  164. typedef VOID DDKAPI
  165. (*TAPE_EXTENSION_INIT_ROUTINE)(
  166.   IN PVOID  MinitapeExtension,
  167.   IN PINQUIRYDATA  InquiryData,
  168.   IN PMODE_CAPABILITIES_PAGE  ModeCapabilitiesPage);
  169.  
  170. typedef VOID DDKAPI
  171. (*TAPE_ERROR_ROUTINE)(
  172.     IN PVOID  MinitapeExtension,
  173.     IN PSCSI_REQUEST_BLOCK  Srb,
  174.     IN OUT PTAPE_STATUS  TapeStatus);
  175.  
  176. typedef TAPE_STATUS DDKAPI
  177. (*TAPE_PROCESS_COMMAND_ROUTINE)(
  178.   IN OUT PVOID  MinitapeExtension,
  179.   IN OUT PVOID  CommandExtension,
  180.   IN OUT PVOID  CommandParameters,
  181.   IN OUT PSCSI_REQUEST_BLOCK  Srb,
  182.   IN ULONG  CallNumber,
  183.   IN TAPE_STATUS  StatusOfLastCommand,
  184.   IN OUT PULONG  RetryFlags);
  185.  
  186. #define TAPE_RETRY_MASK                   0x0000FFFF
  187. #define IGNORE_ERRORS                     0x00010000
  188. #define RETURN_ERRORS                     0x00020000
  189.  
  190. typedef struct _TAPE_INIT_DATA { 
  191.   TAPE_VERIFY_INQUIRY_ROUTINE  VerifyInquiry;
  192.   BOOLEAN  QueryModeCapabilitiesPage; 
  193.   ULONG  MinitapeExtensionSize; 
  194.   TAPE_EXTENSION_INIT_ROUTINE  ExtensionInit;
  195.   ULONG  DefaultTimeOutValue;
  196.   TAPE_ERROR_ROUTINE  TapeError;
  197.   ULONG  CommandExtensionSize;
  198.   TAPE_PROCESS_COMMAND_ROUTINE  CreatePartition; 
  199.   TAPE_PROCESS_COMMAND_ROUTINE  Erase; 
  200.   TAPE_PROCESS_COMMAND_ROUTINE  GetDriveParameters; 
  201.   TAPE_PROCESS_COMMAND_ROUTINE  GetMediaParameters; 
  202.   TAPE_PROCESS_COMMAND_ROUTINE  GetPosition; 
  203.   TAPE_PROCESS_COMMAND_ROUTINE  GetStatus; 
  204.   TAPE_PROCESS_COMMAND_ROUTINE  Prepare; 
  205.   TAPE_PROCESS_COMMAND_ROUTINE  SetDriveParameters; 
  206.   TAPE_PROCESS_COMMAND_ROUTINE  SetMediaParameters; 
  207.   TAPE_PROCESS_COMMAND_ROUTINE  SetPosition; 
  208.   TAPE_PROCESS_COMMAND_ROUTINE  WriteMarks; 
  209.   TAPE_PROCESS_COMMAND_ROUTINE  PreProcessReadWrite; /* optional */
  210. } TAPE_INIT_DATA, *PTAPE_INIT_DATA; 
  211.  
  212. typedef struct _TAPE_PHYS_POSITION {
  213.     ULONG  SeekBlockAddress;
  214.     ULONG  SpaceBlockCount;
  215. } TAPE_PHYS_POSITION, PTAPE_PHYS_POSITION;
  216.  
  217. #pragma pack(pop)
  218.  
  219. #ifdef __cplusplus
  220. }
  221. #endif
  222.  
  223. #endif /* __MINITAPE_H */
  224.