summaryrefslogtreecommitdiff
path: root/com32/gpllib/disk/error.c
diff options
context:
space:
mode:
Diffstat (limited to 'com32/gpllib/disk/error.c')
-rw-r--r--com32/gpllib/disk/error.c123
1 files changed, 123 insertions, 0 deletions
diff --git a/com32/gpllib/disk/error.c b/com32/gpllib/disk/error.c
new file mode 100644
index 00000000..469609b2
--- /dev/null
+++ b/com32/gpllib/disk/error.c
@@ -0,0 +1,123 @@
+#include <stdlib.h>
+#include <string.h>
+
+/**
+ * get_error - decode a disk error status
+ * @status: Error code
+ * @buffer_ptr: Pointer to set to the error message
+ *
+ * A buffer will be allocated to contain the error message.
+ * @buffer_ptr will point to it. The caller will need to free it.
+ **/
+void get_error(int status, char** buffer_ptr)
+{
+ int buffer_size = (80 * sizeof(char));
+ char* buffer = malloc(buffer_size);
+ *buffer_ptr = buffer;
+
+ switch (status) {
+ case 0x0:
+ strncpy(buffer, "successful completion", buffer_size);
+ break;
+ case 0x01:
+ strncpy(buffer, "invalid function in AH or invalid parameter", buffer_size);
+ break;
+ case 0x02:
+ strncpy(buffer, "address mark not found", buffer_size);
+ break;
+ case 0x03:
+ strncpy(buffer, "disk write-protected", buffer_size);
+ break;
+ case 0x04:
+ strncpy(buffer, "sector not found/read error", buffer_size);
+ break;
+ case 0x05:
+ strncpy(buffer, "reset failed (hard disk)", buffer_size);
+ //strncpy(buffer, "data did not verify correctly (TI Professional PC)", buffer_size);
+ break;
+ case 0x06:
+ strncpy(buffer, "disk changed (floppy)", buffer_size);
+ break;
+ case 0x07:
+ strncpy(buffer, "drive parameter activity failed (hard disk)", buffer_size);
+ break;
+ case 0x08:
+ strncpy(buffer, "DMA overrun", buffer_size);
+ break;
+ case 0x09:
+ strncpy(buffer, "data boundary error (attempted DMA across 64K boundary or >80h sectors)", buffer_size);
+ break;
+ case 0x0A:
+ strncpy(buffer, "bad sector detected (hard disk)", buffer_size);
+ break;
+ case 0x0B:
+ strncpy(buffer, "bad track detected (hard disk)", buffer_size);
+ break;
+ case 0x0C:
+ strncpy(buffer, "unsupported track or invalid media", buffer_size);
+ break;
+ case 0x0D:
+ strncpy(buffer, "invalid number of sectors on format (PS/2 hard disk)", buffer_size);
+ break;
+ case 0x0E:
+ strncpy(buffer, "control data address mark detected (hard disk)", buffer_size);
+ break;
+ case 0x0F:
+ strncpy(buffer, "DMA arbitration level out of range (hard disk)", buffer_size);
+ break;
+ case 0x10:
+ strncpy(buffer, "uncorrectable CRC or ECC error on read", buffer_size);
+ break;
+ case 0x11:
+ strncpy(buffer, "data ECC corrected (hard disk)", buffer_size);
+ break;
+ case 0x20:
+ strncpy(buffer, "controller failure", buffer_size);
+ break;
+ case 0x31:
+ strncpy(buffer, "no media in drive (IBM/MS INT 13 extensions)", buffer_size);
+ break;
+ case 0x32:
+ strncpy(buffer, "incorrect drive type stored in CMOS (Compaq)", buffer_size);
+ break;
+ case 0x40:
+ strncpy(buffer, "seek failed", buffer_size);
+ break;
+ case 0x80:
+ strncpy(buffer, "timeout (not ready)", buffer_size);
+ break;
+ case 0xAA:
+ strncpy(buffer, "drive not ready (hard disk)", buffer_size);
+ break;
+ case 0xB0:
+ strncpy(buffer, "volume not locked in drive (INT 13 extensions)", buffer_size);
+ break;
+ case 0xB1:
+ strncpy(buffer, "volume locked in drive (INT 13 extensions)", buffer_size);
+ break;
+ case 0xB2:
+ strncpy(buffer, "volume not removable (INT 13 extensions)", buffer_size);
+ break;
+ case 0xB3:
+ strncpy(buffer, "volume in use (INT 13 extensions)", buffer_size);
+ break;
+ case 0xB4:
+ strncpy(buffer, "lock count exceeded (INT 13 extensions)", buffer_size);
+ break;
+ case 0xB5:
+ strncpy(buffer, "valid eject request failed (INT 13 extensions)", buffer_size);
+ break;
+ case 0xBB:
+ strncpy(buffer, "undefined error (hard disk)", buffer_size);
+ break;
+ case 0xCC:
+ strncpy(buffer, "write fault (hard disk)", buffer_size);
+ break;
+ case 0xE0:
+ strncpy(buffer, "status register error (hard disk)", buffer_size);
+ break;
+ case 0xFF:
+ strncpy(buffer, "sense operation failed (hard disk)", buffer_size);
+ break;
+ }
+}