Implemented int 0x21 long file name function 0x71a0: Get Volume Info.

This commit is contained in:
Andreas Mohr 2000-05-30 20:04:45 +00:00 committed by Alexandre Julliard
parent 2f50f0db39
commit 984f3d9637
1 changed files with 40 additions and 7 deletions

View File

@ -1564,7 +1564,7 @@ void WINAPI DOS3Call( CONTEXT86 *context )
break;
case 0x41: /* "UNLINK" - DELETE FILE */
TRACE("UNLINK%s\n",
TRACE("UNLINK %s\n",
(LPCSTR)CTX_SEG_OFF_TO_LIN(context, DS_reg(context), EDX_reg(context)));
bSetDOSExtendedError = (!DeleteFileA( CTX_SEG_OFF_TO_LIN(context, DS_reg(context),
EDX_reg(context) )));
@ -1610,7 +1610,7 @@ void WINAPI DOS3Call( CONTEXT86 *context )
CX_reg(context) ));
break;
case 0x02:
TRACE("GET COMPRESSED FILE SIZE for %s stub\n",
FIXME("GET COMPRESSED FILE SIZE for %s stub\n",
(LPCSTR)CTX_SEG_OFF_TO_LIN(context, DS_reg(context), EDX_reg(context)));
}
break;
@ -2217,15 +2217,48 @@ void WINAPI DOS3Call( CONTEXT86 *context )
EDI_reg(context))))
bSetDOSExtendedError = TRUE;
break;
case 0xa0:
{
LPCSTR driveroot = (LPCSTR)CTX_SEG_OFF_TO_LIN(context, DS_reg(context),EDX_reg(context));
LPSTR buffer = (LPSTR)CTX_SEG_OFF_TO_LIN(context, ES_reg(context),EDI_reg(context));
int drive;
UINT flags;
TRACE("LONG FILENAME - GET VOLUME INFORMATION for drive having root dir '%s'.\n", driveroot);
AX_reg(context) = 0;
if (!driveroot)
{
INT_BARF( context, 0x21 );
SET_CFLAG(context);
break;
}
drive = toupper(driveroot[0]) - 'A';
flags = DRIVE_GetFlags(toupper(driveroot[0]) - 'A');
BX_reg(context) = 0x4000; /* support for LFN functions */
if (flags & DRIVE_CASE_SENSITIVE)
BX_reg(context) |= 1;
if (flags & DRIVE_CASE_PRESERVING)
BX_reg(context) |= 2;
/***** FIXME: not supported yet (needed ?)
if (flags & DRIVE_UNICODE)
BX_reg(context) |= 4;
if (flags & DRIVE_COMPRESSED)
BX_reg(context) |= 0x8000;
*****/
CX_reg(context) = (flags & DRIVE_SHORT_NAMES) ? 11 : 255; /* FIXME: 12 ? */
DX_reg(context) = MAX_PATH; /* FIXME: which len if DRIVE_SHORT_NAMES ? */
if (DRIVE_GetType(drive) == TYPE_CDROM)
/* valid for data _and_ audio */
strcpy(buffer, "CDFS"); /* FIXME: fail if no CD in drive */
else
strcpy(buffer, "FAT");
}
break;
case 0xa1: /* Find close */
TRACE("LONG FILENAME - FINDCLOSE for handle %d\n",
BX_reg(context));
bSetDOSExtendedError = (!FindClose16( BX_reg(context) ));
break;
case 0xa0:
TRACE("LONG FILENAME - GET VOLUME INFORMATION for drive %s stub\n",
(LPCSTR)CTX_SEG_OFF_TO_LIN(context, DS_reg(context),EDX_reg(context)));
break;
case 0x60:
switch(CL_reg(context))
{
@ -2286,7 +2319,7 @@ void WINAPI DOS3Call( CONTEXT86 *context )
}
break;
case 0x56: /* Move (rename) file */
TRACE("LONG FILENAME - RENAME FILE %s to %s stub\n",
FIXME("LONG FILENAME - RENAME FILE %s to %s stub\n",
(LPCSTR)CTX_SEG_OFF_TO_LIN(context, DS_reg(context), EDX_reg(context)),
(LPCSTR)CTX_SEG_OFF_TO_LIN(context, ES_reg(context), EDI_reg(context)));
default: