diff --git a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c index 4e2fc189537..cdfe827c74f 100644 --- a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c +++ b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.c @@ -1469,6 +1469,8 @@ VOID WINAPI DosInt21h(LPWORD Stack) SYSTEMTIME SystemTime; PCHAR String; PDOS_INPUT_BUFFER InputBuffer; + PDOS_COUNTRY_CODE_BUFFER CountryCodeBuffer; + INT Return; /* Check the value in the AH register */ switch (getAH()) @@ -1992,6 +1994,65 @@ VOID WINAPI DosInt21h(LPWORD Stack) break; } + /* Get/Set Country-dependent Information */ + case 0x38: + { + CountryCodeBuffer = (PDOS_COUNTRY_CODE_BUFFER)SEG_OFF_TO_PTR(getDS(), getDX()); + + if (getAL() == 0x00) + { + /* Get */ + Return = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_IDATE, + &CountryCodeBuffer->TimeFormat, + sizeof(CountryCodeBuffer->TimeFormat) / sizeof(TCHAR)); + if (Return == 0) + { + Stack[STACK_FLAGS] |= EMULATOR_FLAG_CF; + setAX(LOWORD(GetLastError())); + break; + } + + Return = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SCURRENCY, + &CountryCodeBuffer->CurrencySymbol, + sizeof(CountryCodeBuffer->CurrencySymbol) / sizeof(TCHAR)); + if (Return == 0) + { + Stack[STACK_FLAGS] |= EMULATOR_FLAG_CF; + setAX(LOWORD(GetLastError())); + break; + } + + Return = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, + &CountryCodeBuffer->ThousandSep, + sizeof(CountryCodeBuffer->ThousandSep) / sizeof(TCHAR)); + if (Return == 0) + { + Stack[STACK_FLAGS] |= EMULATOR_FLAG_CF; + setAX(LOWORD(GetLastError())); + break; + } + + Return = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, + &CountryCodeBuffer->DecimalSep, + sizeof(CountryCodeBuffer->DecimalSep) / sizeof(TCHAR)); + if (Return == 0) + { + Stack[STACK_FLAGS] |= EMULATOR_FLAG_CF; + setAX(LOWORD(GetLastError())); + break; + } + + Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_CF; + } + else + { + // TODO: NOT IMPLEMENTED + UNIMPLEMENTED; + } + + break; + } + /* Create Directory */ case 0x39: { diff --git a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.h b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.h index a7da71b2099..e2ad92d2681 100644 --- a/reactos/subsystems/ntvdm/dos/dos32krnl/dos.h +++ b/reactos/subsystems/ntvdm/dos/dos32krnl/dos.h @@ -159,6 +159,14 @@ typedef struct _DOS_EXEC_PARAM_BLOCK DWORD EntryPoint; } DOS_EXEC_PARAM_BLOCK, *PDOS_EXEC_PARAM_BLOCK; +typedef struct _DOS_COUNTRY_CODE_BUFFER +{ + WORD TimeFormat; + WORD CurrencySymbol; + WORD ThousandSep; + WORD DecimalSep; +} DOS_COUNTRY_CODE_BUFFER, *PDOS_COUNTRY_CODE_BUFFER; + #pragma pack(pop) extern BOOLEAN DoEcho;