home *** CD-ROM | disk | FTP | other *** search
- #ifndef LIBRARIES_HDWRENCH_H
- #define LIBRARIES_HDWRENCH_H
-
- /*
- ** $VER: hdwrench.h 44.3 (29.7.1999)
- ** Includes Release 44.1
- **
- ** Disk Prep Support Library API includes
- **
- ** (C) Copyright 1999 Joanne B. Dow, Wizardess Designs,
- ** for license to Amiga, Inc.
- **
- ** All Rights Reserved
- */
-
- /*****************************************************************************/
-
- #ifndef EXEC_LIBRARIES_H
- #include <exec/libraries.h>
- #endif
-
- #ifndef DEVICES_HARDBLOCKS_H
- #include <devices/hardblocks.h>
- #endif
-
- /*****************************************************************************/
-
- struct HDWLibrary
- {
- struct Library ml_Lib;
- ULONG ml_SegList;
- ULONG ml_Flags;
- APTR ml_ExecBase; /* pointer to exec base */
- long *ml_relocs; /* pointer to relocs. */
- struct HDWLibrary *ml_origbase; /* pointer to original library base */
- long ml_numjmps;
- };
-
- #define HDWBaseName "hdwrench.library"
-
- /* === General Constant Defines === */
-
- /* Artificial unassigned value for the RDB structures. */
- #define UNASSIGNED (ULONG) -131L
-
- /* End block number link within RDB structures */
- #define RDBEND (ULONG) -1L
-
- #define DEFAULT_RDBBLOCKSHI 63
-
- /* === Structure & Typedefs === */
-
- typedef struct
- {
- USHORT ready [ 16 ]; /* Tests ready and first block read */
- USHORT there [ 16 ]; /* Tests as "there" but fails other tests */
- } ValidIDstruct;
-
-
- /* Actual disk read write return structure: */
- struct rw_return /* Should fit within a ULONG */
- {
- USHORT success; /* Error code */
- USHORT failed_word; /* 0 on reads. */
- USHORT block_written; /* 0 on reads. */
- };
-
- enum rw_success_val /* Return values for rw_return.success field. */
- {
- success = 0, /* 0 */
- success_on_retry_write, /* 1 */
- success_on_retry_read, /* 2 */
- failed_on_write, /* 3 */
- failed_on_reread, /* 4 */
- illegal_command, /* 5 */
- io_command_failure, /* 6 */
- scsi_command_failure, /* 7 */
- out_of_memory, /* 8 */
- no_more_disk_blocks, /* 9 */
- rdsk_not_located, /* 10 */
- io_device_not_open, /* 11 */
- invalid_blocksize_found, /* 12 */
- no_callback_hook, /* 13 */
- user_aborted, /* 14 */
- operation_not_permitted /* 15 */
- };
-
- /* Internal bootblock structure. Create dummy structures to pass to read
- * and write functions as necessary. Be sure that bb_BlockNum is filled in
- * and that the actual size of the data area pointed to by the union is
- * sufficiently large to contain one disk block.
- */
- typedef struct bootblock
- {
- struct MinNode bb_Node;
- LONG allocsize;
- LONG bb_BlockNum;
- WORD bb_Changed;
- LONG unit; /* Unit number for THIS set of RDBs. */
- char DeviceName [32]; /* Device name */
- struct rw_return bb_RWErrors;
- BOOL wflag; /* Written out flag. */
- BYTE spares[4-sizeof(BOOL)];/* Fill out short word */
-
- union
- {
- struct RigidDiskBlock bd_RDB;
- struct PartitionBlock bd_PB;
- struct FileSysHeaderBlock bd_FHB;
- struct LoadSegBlock bd_LSB;
- struct BadBlockBlock bd_BB;
- UBYTE bd_Bytes[512]; /* NB: This is the MINIMUM size we */
- UWORD bd_Words[256]; /* can have here. It MAY be extended */
- ULONG bd_Longs[128]; /* if actual block size is larger. */
- } bb_Data;
- } BootBlock;
-
- /* ==== Error report values for other functions ==== */
- #define E_NOERROR 0
-
- #define E_ILLEGAL_SLASH 200
- #define E_EOF_IN_COMMENT 201
- #define E_ILLEGAL_STAR 202
- #define E_TOKEN_TO_LONG 203
- #define E_MEMORY_PANIC 204
- #define E_PREMATURE_EOF 205
- #define E_MISSING_EQUALS 206
- #define E_ILLEGAL_T_F 207
- #define E_ILLEGAL_TOKEN 208
- #define E_DUPLICATE_DISK 209
- #define E_NOT_LEGAL_NAME 210
- #define E_EXCEEDED_SIZE_LIM 211
- #define E_FILE_WRITE_ERROR 212
- #define E_TOOMANY_FS 213
- #define E_FSAVE_CONFUSION 214
- #define E_FS_CANNOT_OPEN 215
- #define E_LOST_IN_RDB_SPACE 216
- #define E_FS_WRITE_ERROR 217
- #define E_MULTIPLE_RDSKS 218
- #define E_RDSK_NOT_1ST 219
- #define E_NO_RDBS_LOADED 220
- #define E_RDBS_ALREADY_IN 221 /* RDBs already loaded. */
- #define E_FAILED_FILEOPEN 222
- #define E_FILE_READ_FAILED 223
- #define E_FILE_NOT_RDBS 224
- #define E_NO_BLOCKSIZE_SPEC 225
- #define E_FILE_WRITE_FAILED 226
- #define E_MEMORYP_NULL 227 /* prospective "memp" is null */
- #define E_ILLEGAL_BLOCKSIZE 228
- #define E_INSUFFICIENT_MEM 229
- #define E_RENUMBER_FAILED 230
- #define E_BLOCKS_EXCEEDED 231 /* Too many RDB blocks */
- #define E_INCOMPLETE_FSDESC 232
- #define E_FS_NOT_FOUND 233
- #define E_LIST_SCREWEDUP 234
- #define E_NO_SUCH_DIR 235
- #define E_EXALL_ERROR 236
- #define E_UNIT_DIFFERS 237
-
- #define T_RENUMBER_LEFT 300
-
- #define W_DUPLICATE_FS 100
- #define W_FS_NO_WRITE 101
-
- /* Definitions for type field in FileSave */
- #define DRIVEINIT 0
- #define FILESYSTEM 1
-
- struct DefaultsArray
- {
- ULONG TotalBlocks;
- UWORD BytesPerBlock;
- UWORD BlocksPerSurface;
- UWORD Surfaces;
- UWORD Cylinders; /* note: MaxCyl = Cylinders - 1; */
- UWORD UnusedBlocks;
- };
-
- /* Defaults Array filling error bit array */
- #define DA_NOERRORS 0
- #define DA_NO_CAPACITY_REPORT 1
- #define DA_NO_OPTIMIZE 2
- #define DA_BAD_MODESENSE_4 4
- #define DA_BAD_MODESENSE_3 8
- #define DA_FAILED 256
- #define DA_NO_DRIVE_OPEN DA_FAILED
- #define DA_RIDICULOUS_VALUES ( DA_FAILED << 1 )
-
- /* Defaults Array filling "Optimize" Flags */
- #define DA_OPTIMIZE 1 /* Optimize storage if possible */
- #define DA_HUGE 2 /* Allow partitioning huge disks */
- #define DA_HF_WAY 4 /* Use the old HardFrame algorithm */
- /* Note: DA_HF_WAY is forces DA_OPTIMIZE and DA_HUGE off. */
- /* DA_BAD_MODESENSE_3 and DA_BAD_MODESENSE_4 only happen with DA_HF_WAY */
- /* Errors below DA_FAILED are informational. */
-
- /* ==== Mountfile Recognized Strings ==== */
- #ifdef DONT_EVER_COMPILE_ME /* This stuff is for reference only, thank you. */
-
- #ifdef FORREAL
- #define EXTERN
- #else
- #define EXTERN extern
- #endif
-
- EXTERN const char *_Tokens[]
- #ifdef FORREAL
- = {
- "/", /*0 */
- "#",
- "=",
- "device",
- "surfaces",
- "blockspertrack",
- "reserved",
- "prealloc",
- "interleave",
- "lowcyl",
- "highcyl", /* 10 */
- "buffers",
- "bufmemtype",
- "maxtransfer",
- "mask",
- "bootpri",
- "dostype",
- "unit",
- "flags",
- "stacksize",
- "priority", /* 20 */
- "globvec",
- "filesystem",
- "mount",
- "heads",
- "bytesperblock",
- "disk",
- "rdblow",
- "rdbhi",
- "reselect",
- "hilun", /* 30 */
- "hiid",
- "hidrive",
- "cylinders",
- "cylinderblocks",
- "mincyl",
- "maxcyl",
- "hicard",
- "blocksize",
- "bootable",
- "readonly", /* 40 */
- "driveinit",
- "baud",
- "control",
- "bootblocks",
- "synch",
- "sectorsperblock",
- "\xff"
- }
- #endif
- ;
-
- #define TSLASH 0
- #define THACK 1
- #define TEQUALS 2
- #define TDEVICE 3
- #define TSURFACES 4
- #define TBLOCKSPERTRACK 5
- #define TRESERVED 6
- #define TPREALLOC 7
- #define TINTERLEAVE 8
- #define TLOWCYL 9
- #define THICYL 10
- #define TBUFFERS 11
- #define TBUFMEMTYPE 12
- #define TMAXTRANSFER 13
- #define TMASK 14
- #define TBOOTPRI 15
- #define TDOSTYPE 16
- #define TUNIT 17
- #define TFLAGS 18
- #define TSTACKSIZE 19
- #define TPRIORITY 20
- #define TGLOBVEC 21
- #define TFILESYSTEM 22
- #define TMOUNT 23
- #define THEADS 24
- #define TBYTESPERBLOCK 25
- #define TDISK 26
- #define TRDBLOW 27
- #define TRDBHI 28
- #define TRESELECT 29
- #define THILUN 30
- #define THIID 31
- #define TLASTDRIVE 32
- #define TCYLINDERS 33
- #define TCYLINDERBLOCKS 34
- #define TMINCYL 35
- #define TMAXCYL 36
- #define THICARD 37
- #define TBLOCKSIZE 38
- #define TBOOTABLE 39
- #define TREADONLY 40
- #define TDRIVEINIT 41
- #define TBAUD 42
- #define TCONTROL 43
- #define TBOOTBLOCKS 44
- #define TSYNCH 45
- #define TSECSPERBLOCK 46
-
- #define TokenCount 46
- #define TNOMATCH TokenCount + 1
-
- #endif /* COMPILEME */
-
-
-
- typedef struct
- {
- STRPTR devicename;
- LONG board;
- LONG address;
- LONG lun;
- STRPTR messagestring;
- LONG extra;
- LONG param1;
- LONG param2;
- LONG param3;
- } HDWCallbackMsg;
-
- #define EXTRA_BEFORE_TEST 0
- #define EXTRA_AFTER_TEST 1
- #define EXTRA_BEFORE_FORMAT 2 /* with no way to stop once you start.*/
- #define EXTRA_BEFORE_VERIFY 3 /* Setup the verify requester and
- return "go ahead" */
- #define EXTRA_UPDATE_VERIFY 4 /* New string for requester - return
- any Abort received */
- #define EXTRA_VERIFY_REASSIGN 5 /* New string - return "Yes" or "No" */
- #define EXTRA_VERIFY_FINISHED 6 /* Notify user, accept OK, close */
-
- #define INQBUFSIZE 36 /* Standard size of Inquiry buffer */
-
- /****************************************************************************/
-
- /*
- * Callback messages for the hdwrench.library tester program.
- * These strings are "suggested" English strings for use with
- * the hdwrench.library callback hook.
- */
-
- #ifdef USE_SUGGESTED_MESSAGES
- /* MESSAGE */ /* .extra usages */
- char *callback_messages[] =
- {
- /* A) FINDVALID_SCANNING_STRING */ /* 0 and 1 */
- "Scanning: %s: %d%d%d", /* from message: devicename, board, lun, addr */
-
- /* B) LONGTIME_NOABORT_WARNING */ /* 2 */
- "You are about to format LUN %d on\n"
- "drive %d attached to board %d\n\n"
- "***WARNING WARNING WARNING***\n"
- "It can take up to several hours\n"
- "to format a hard disk. And there\n"
- "is no safe way to abort.\n\n"
- "Are you VERY sure you want to do this?\n",
- /* C) LONGTIME_VERIFY_WARNING */ /* 3 */
- "LUN %d on drive %d on board %d\n"
- " Note\n"
- "It can take up to several hours\n"
- "to verify a hard disk. However,\n"
- "you can abort during verify.\n\n"
- "No data will be changed on the\n"
- "drive.\n\n"
- "Do you wish to continue?\n",
-
- /* D) FORMAT_USER_ABORTED_STRING */ /* 6 */
- "User Aborted. Your drive is safe!\n",
-
- /* E) FORMAT_MOUNTED_DRIVE */ /* 4 */
- "%s\nShould we format a mounted drive?\n",
-
- /* F) FORMAT_NOT_PERMITTED */ /* 6 */
- "%s\nFormatting the system disk\nis not permitted. Aborting...\n",
-
- /* G) FORMAT_UNRECOGNIZED_STATUS */ /* 6 */
- "Unrecognized SCSI status byte 0x%2.2x returned.\n",
-
- /* H) FORMAT_RESERVATION_CONFLICT */ /* 6 */
- "Device is reserved by another initiator.\n",
-
- /* I) FORMAT_DRIVE_BUSY */ /* 6 */
- "Drive is busy.\n",
-
- /* J) FORMAT_COMMAND_PROBLEM */ /* 6 */
- "Unknown problem issuing SCSI Direct command!\n",
-
- /* K) FORMAT_SUCCESS_STRING */ /* 6 */
- "Format completed with no errors.",
-
- /* L) FORMAT_FAILED_STRING */ /* 6 maybe */
- "Format failed! Your drive may be dead.\n",
-
- /* M) VERIFY_USER_ABORTED_STRING */ /* 6 */
- "User Aborted.\n",
-
- /* N) VERIFY_READCAPACITY_FAILED */ /* 6 */
- "ReadCapacity failed! Verify impossible.\n",
-
- /* O) VERIFY_PROGRESS */ /* 4 */
- "Verifying blocks %d to %d of %d.\r",
-
- /* P) VERIFY_REASSIGN_Q */ /* 5 */
- "Block %d is bad.\n"
- "Reassign this bad block?",
-
- /* Q) VERIFY_COMPLETED_STRING */ /* 6 */
- "Verify completed:\n"
- " %d errors,\n"
- " %d successful reassignments,\n"
- "and %d failed reassignments\n",
-
- /* R) VERIFY_ERROR_UNKNOWN_LOC */ /* 4 */
- "Medium error at unknown location!\n"
- "You should back up the drive and low-level format\n",
-
- /* S) VERIFY_HARDWARE_ERROR */ /* 4 */
- "Hardware error %ld!\n",
-
- /* T) VERIFY_RECOVERED_ERROR */ /* 4 */
- "Recovered read error at block %ld\n",
-
- /* U) VERIFY_RECOVERED_UNKNOWN_LOC */ /* 4 */
- "Recovered error at unknown location!\n"
- "You should consider backing up the\n"
- "drive and reformatting\n",
-
- /* V) VERIFY_ILLEGAL_REQUEST */ /* 4 */
- "Drive returned an Illegal Request Error (%ld)\n",
-
- /* W) VERIFY_UNKNOWN_ERROR */
- "Unknown error: sense key %ld (more)\n"
- "Device returned sense code %ld (more)\n"
- "Consult drive documentation\n",
-
- /* X) VERIFY_CONTINUE */ /* 4 */
- "Continuing verify at block %d...\n",
-
- /* Y) VERIFY_SEEK_ERROR */ /* 4 */
- "seek eror!\n",
-
- /* Z) VERIFY_MEDIUM_ERROR */ /* 4 */
- "Medium error at unknown location!\n"
- "You should back up the drive and low-level format\n",
-
- /* [) VERIFY_ILLEGAL_COMMAND */ /* 4 */
- "Illegal command!\n",
-
- /* \) VERIFY_ILLEGAL_ADDRESS */ /* 4 */
- "Illegal address %ld!",
-
- /* ]) VERIFY_BAD_ARGUEMENT */ /* 4 */
- "Bad command arguement!\n",
-
- /* ^) VERIFY_CARTRIDGE_CHANGED */ /* 4 */
- "Cartridge changed",
-
- /* _) VERIFY_ILLEGAL_LUN */ /* 4 */
- "Invalid LUN addressed!",
-
- /* `) VERIFY_UNFORMATTED_DRIVE */ /* 4 */
- "Unformatted drive!",
-
- /* a) VERIFY_NONEXTENDED_SENSE */ /* 4 */
- "Non-extended sense error is 0x%x",
-
- /* b) VERIFY_NO_SCSI_ERROR_RETURNED */ /* 4 */
- "Device didn't return good sense data!",
-
- /* other */
- "Illegal callback message %x" /* any */
- };
-
- #define MIN_MESSAGE 'A'
- #define MAX_MESSAGE 'b'
-
- #endif /* USE_SUGGESTED_MESSAGES */
-
- #endif /* LIBRARIES_HDWRENCH_H */
-