Move get current drive int21 function to winedos.
Fix spelling mistakes.
Add some drive handling helper routines.

diff --git a/dlls/winedos/int21.c b/dlls/winedos/int21.c
index 35b4e81..694fa0c 100644
--- a/dlls/winedos/int21.c
+++ b/dlls/winedos/int21.c
@@ -86,8 +86,6 @@
     BYTE misc_indos;                 /* Interrupt 21 nesting flag */
 } INT21_HEAP;
 
-#include "poppack.h"
-
 
 struct FCB {
     BYTE  drive_number;
@@ -116,6 +114,44 @@
     BYTE  fcb[37];
 };
 
+#include "poppack.h"
+
+
+/***********************************************************************
+ *           INT21_GetCurrentDrive
+ *
+ * Return current drive using scheme (0=A:, 1=B:, 2=C:, ...) or
+ * MAX_DOS_DRIVES on error.
+ */
+static BYTE INT21_GetCurrentDrive()
+{
+    WCHAR current_directory[MAX_PATH];
+
+    if (!GetCurrentDirectoryW( MAX_PATH, current_directory ) ||
+        current_directory[1] != ':')
+    {
+        TRACE( "Failed to get current drive.\n" );
+        return MAX_DOS_DRIVES;
+    }
+
+    return toupperW( current_directory[0] ) - 'A';
+}
+
+
+/***********************************************************************
+ *           INT21_MapDrive
+ *
+ * Convert drive number from scheme (0=default, 1=A:, 2=B:, ...) into
+ * scheme (0=A:, 1=B:, 2=C:, ...) or MAX_DOS_DRIVES on error.
+ */
+static BYTE INT21_MapDrive( BYTE drive )
+{
+    if (drive)
+        return drive - 1;
+    
+    return INT21_GetCurrentDrive();
+}
+
 
 /***********************************************************************
  *           INT21_ReadChar
@@ -376,7 +412,10 @@
 }
 
 
-static BYTE *GetCurrentDTA( CONTEXT86 *context )
+/***********************************************************************
+ *           INT21_GetCurrentDTA
+ */
+static BYTE *INT21_GetCurrentDTA( CONTEXT86 *context )
 {
     TDB *pTask = GlobalLock16(GetCurrentTask());
 
@@ -407,7 +446,6 @@
 {
     struct FCB *fcb;
     struct XFCB *xfcb;
-    char current_directory[MAX_PATH];
     char file_path[16];
     char *pos;
     HANDLE handle;
@@ -422,16 +460,7 @@
     } /* if */
 
     AL_result = 0;
-    if (fcb->drive_number == 0) {
-        if (!GetCurrentDirectoryA(sizeof(current_directory), current_directory) ||
-                current_directory[1] != ':') {
-            TRACE("GetCurrentDirectoryA failed\n");
-            AL_result = 0xff; /* failed */
-        } /* if */
-        file_path[0] = toupper(current_directory[0]);
-    } else {
-        file_path[0] = 'A' + fcb->drive_number - 1;
-    } /* if */
+    file_path[0] = 'A' + INT21_MapDrive( fcb->drive_number );
 
     if (AL_result == 0) {
         file_path[1] = ':';
@@ -525,7 +554,7 @@
     } /* if */
 
     if (_lclose16((HFILE16) fcb->file_number) != 0) {
-        TRACE("_llclose16(%d) failed\n", fcb->file_number);
+        TRACE("_lclose16(%d) failed\n", fcb->file_number);
         AL_result = 0xff; /* failed */
     } else {
         TRACE("successful closed file %d\n", fcb->file_number);
@@ -536,7 +565,7 @@
 
 
 /***********************************************************************
- *           INT21_SequenialReadFromFCB
+ *           INT21_SequentialReadFromFCB
  *
  * Handler for function 0x14.
  *
@@ -557,7 +586,7 @@
  *  are updated to point to the next record. If a partial record is
  *  read, it is filled with zeros up to the FCB->logical_record_size.
  */
-static void INT21_SequenialReadFromFCB( CONTEXT86 *context )
+static void INT21_SequentialReadFromFCB( CONTEXT86 *context )
 {
     struct FCB *fcb;
     struct XFCB *xfcb;
@@ -587,7 +616,7 @@
                   fcb->file_number, record_number * fcb->logical_record_size, position);
             AL_result = 0x01; /* end of file, no data read */
         } else {
-            disk_transfer_area = GetCurrentDTA(context);
+            disk_transfer_area = INT21_GetCurrentDTA(context);
             bytes_read = _lread((HFILE) handle, disk_transfer_area, fcb->logical_record_size);
             if (bytes_read != fcb->logical_record_size) {
                 TRACE("_lread(%d, %p, %d) failed with %d\n",
@@ -618,7 +647,7 @@
 
 
 /***********************************************************************
- *           INT21_SequenialWriteToFCB
+ *           INT21_SequentialWriteToFCB
  *
  * Handler for function 0x15.
  *
@@ -637,7 +666,7 @@
  *  Then FCB->current_block_number and FCB->record_within_current_block
  *  are updated to point to the next record. 
  */
-static void INT21_SequenialWriteToFCB( CONTEXT86 *context )
+static void INT21_SequentialWriteToFCB( CONTEXT86 *context )
 {
     struct FCB *fcb;
     struct XFCB *xfcb;
@@ -667,7 +696,7 @@
                   fcb->file_number, record_number * fcb->logical_record_size, position);
             AL_result = 0x01; /* disk full */
         } else {
-            disk_transfer_area = GetCurrentDTA(context);
+            disk_transfer_area = INT21_GetCurrentDTA(context);
             bytes_written = _lwrite((HFILE) handle, disk_transfer_area, fcb->logical_record_size);
             if (bytes_written != fcb->logical_record_size) {
                 TRACE("_lwrite(%d, %p, %d) failed with %d\n",
@@ -743,7 +772,7 @@
                   fcb->file_number, record_number * fcb->logical_record_size, position);
             AL_result = 0x01; /* end of file, no data read */
         } else {
-            disk_transfer_area = GetCurrentDTA(context);
+            disk_transfer_area = INT21_GetCurrentDTA(context);
             bytes_read = _lread((HFILE) handle, disk_transfer_area, fcb->logical_record_size);
             if (bytes_read != fcb->logical_record_size) {
                 TRACE("_lread(%d, %p, %d) failed with %d\n",
@@ -816,7 +845,7 @@
                   fcb->file_number, record_number * fcb->logical_record_size, position);
             AL_result = 0x01; /* disk full */
         } else {
-            disk_transfer_area = GetCurrentDTA(context);
+            disk_transfer_area = INT21_GetCurrentDTA(context);
             bytes_written = _lwrite((HFILE) handle, disk_transfer_area, fcb->logical_record_size);
             if (bytes_written != fcb->logical_record_size) {
                 TRACE("_lwrite(%d, %p, %d) failed with %d\n",
@@ -896,7 +925,7 @@
             records_read = 0;
             AL_result = 0x01; /* end of file, no data read */
         } else {
-            disk_transfer_area = GetCurrentDTA(context);
+            disk_transfer_area = INT21_GetCurrentDTA(context);
             records_requested = CX_reg(context);
             bytes_requested = (UINT) records_requested * fcb->logical_record_size;
             bytes_read = _lread((HFILE) handle, disk_transfer_area, bytes_requested);
@@ -987,7 +1016,7 @@
             records_written = 0;
             AL_result = 0x01; /* disk full */
         } else {
-            disk_transfer_area = GetCurrentDTA(context);
+            disk_transfer_area = INT21_GetCurrentDTA(context);
             records_requested = CX_reg(context);
             bytes_requested = (UINT) records_requested * fcb->logical_record_size;
             bytes_written = _lwrite((HFILE) handle, disk_transfer_area, bytes_requested);
@@ -2144,11 +2173,11 @@
         break;
 
     case 0x14: /* SEQUENTIAL READ FROM FCB FILE */
-        INT21_SequenialReadFromFCB( context );
+        INT21_SequentialReadFromFCB( context );
         break;
 
     case 0x15: /* SEQUENTIAL WRITE TO FCB FILE */
-        INT21_SequenialWriteToFCB( context );
+        INT21_SequentialWriteToFCB( context );
         break;
 
     case 0x16: /* CREATE OR TRUNCATE FILE USING FCB */
@@ -2161,7 +2190,8 @@
         break;
 
     case 0x19: /* GET CURRENT DEFAULT DRIVE */
-        INT_Int21Handler( context );
+        SET_AL( context, INT21_GetCurrentDrive() );
+        TRACE( "GET CURRENT DRIVE -> %c:\n", 'A' + AL_reg( context ) );
         break;
 
     case 0x1a: /* SET DISK TRANSFER AREA ADDRESS */
diff --git a/msdos/int21.c b/msdos/int21.c
index fb613d2..fb2bfd8 100644
--- a/msdos/int21.c
+++ b/msdos/int21.c
@@ -931,10 +931,6 @@
         SET_AL( context, INT21_FindNextFCB(context) ? 0x00 : 0xff );
         break;
 
-    case 0x19: /* GET CURRENT DEFAULT DRIVE */
-        SET_AL( context, DRIVE_GetCurrentDrive() );
-        break;
-
     case 0x1b: /* GET ALLOCATION INFORMATION FOR DEFAULT DRIVE */
         SET_DL( context, 0 );
         if (!INT21_GetDriveAllocInfo(context)) SET_AX( context, 0xffff );