int21 move a3
György 'Nog' Jeney
nog at sdf.lonestar.org
Sat Nov 9 07:21:50 CST 2002
ChangeLog:
* dlls/winedos/int21.c
* dlls/kernel/kernel32.spec
* msdos/dosmem.c
* msdos/int21.c
* include/miscemu.h
Move codepage functions of int21 to winedos.
nog.
-------------- next part --------------
--- msdos/int21.c.a2 2002-11-09 07:30:39.000000000 +0200
+++ msdos/int21.c 2002-11-09 07:52:50.000000000 +0200
@@ -122,7 +122,6 @@
};
-WORD CodePage = 437;
DWORD dpbsegptr;
struct DosHeap {
@@ -1747,67 +1746,6 @@
}
break;
- case 0x65:{/* GET EXTENDED COUNTRY INFORMATION */
- BYTE *dataptr=CTX_SEG_OFF_TO_LIN(context, context->SegEs,context->Edi);
- TRACE("GET EXTENDED COUNTRY INFORMATION code page %d country %d\n",
- BX_reg(context), DX_reg(context));
- switch (AL_reg(context)) {
- case 0x01:
- TRACE("\tget general internationalization info\n");
- dataptr[0] = 0x1;
- *(WORD*)(dataptr+1) = 41;
- *(WORD*)(dataptr+3) = GetSystemDefaultLangID();
- *(WORD*)(dataptr+5) = CodePage;
- *(DWORD*)(dataptr+0x19) = 0; /* FIXME: ptr to case map routine */
- break;
- case 0x06:
- TRACE("\tget pointer to collating sequence table\n");
- dataptr[0] = 0x06;
- *(DWORD*)(dataptr+1) = MAKELONG(DOSMEM_CollateTable & 0xFFFF,DOSMEM_AllocSelector(DOSMEM_CollateTable>>16));
- SET_CX( context, 258 );/*FIXME: size of table?*/
- break;
- case 0x20:
- TRACE("\tConvert char to uppercase\n");
- SET_DL( context, toupper(DL_reg(context)) );
- break;
- case 0x21:
- TRACE("\tconvert string to uppercase with length\n");
- {
- char *ptr = (char *)CTX_SEG_OFF_TO_LIN(context,context->SegDs,context->Edx);
- WORD len = CX_reg(context);
- while (len--) { *ptr = toupper(*ptr); ptr++; }
- }
- break;
- case 0x22:
- TRACE("\tConvert ASCIIZ string to uppercase\n");
- _strupr( (LPSTR)CTX_SEG_OFF_TO_LIN(context,context->SegDs,context->Edx) );
- break;
- default:
- TRACE("\tunimplemented function %d\n",AL_reg(context));
- INT_BARF( context, 0x21 );
- SET_CFLAG(context);
- break;
- }
- break;
- }
- case 0x66: /* GLOBAL CODE PAGE TABLE */
- switch (AL_reg(context))
- {
- case 0x01:
- TRACE("GET GLOBAL CODE PAGE TABLE\n");
- SET_BX( context, CodePage );
- SET_DX( context, CodePage );
- RESET_CFLAG(context);
- break;
- case 0x02:
- TRACE("SET GLOBAL CODE PAGE TABLE active page %d system page %d\n",
- BX_reg(context),DX_reg(context));
- CodePage = BX_reg(context);
- RESET_CFLAG(context);
- break;
- }
- break;
-
case 0x67: /* SET HANDLE COUNT */
TRACE("SET HANDLE COUNT to %d\n",BX_reg(context) );
SetHandleCount16( BX_reg(context) );
--- dlls/winedos/int21.c.a2 2002-11-09 07:31:07.000000000 +0200
+++ dlls/winedos/int21.c 2002-11-09 07:52:52.000000000 +0200
@@ -37,6 +37,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(int21);
+WORD CodePage = 437;
+
void WINAPI DOSVM_Int21Handler_Ioctl( CONTEXT86 *context )
{
static const WCHAR emmxxxx0W[] = {'E','M','M','X','X','X','X','0',0};
@@ -518,6 +520,75 @@
SET_CFLAG(context);
break;
+ case 0x65: /* GET EXTENDED COUNTRY INFORMATION */
+ {
+ BYTE *dataptr = CTX_SEG_OFF_TO_LIN(context, context->SegEs,
+ context->Edi);
+ TRACE("GET EXTENDED COUNTRY INFORMATION code page %d country %d\n",
+ BX_reg(context), DX_reg(context));
+ switch (AL_reg(context)) {
+ case 0x01:
+ TRACE("\tget general internationalization info\n");
+ dataptr[0] = 0x1;
+ *(WORD*)(dataptr+1) = 41;
+ *(WORD*)(dataptr+3) = GetSystemDefaultLangID();
+ *(WORD*)(dataptr+5) = CodePage;
+ *(DWORD*)(dataptr+0x19) = 0; /* FIXME: ptr to case map routine */
+ break;
+ case 0x06:
+ TRACE("\tget pointer to collating sequence table\n");
+ dataptr[0] = 0x06;
+ *(DWORD*)(dataptr+1) =
+ MAKELONG(*DOSMEM_GetCollateTable() & 0xFFFF,
+ DOSMEM_AllocSelector(*DOSMEM_GetCollateTable() >> 16));
+ SET_CX(context, 258);/*FIXME: size of table?*/
+ break;
+ case 0x20:
+ TRACE("\tConvert char to uppercase\n");
+ SET_DL(context, toupper(DL_reg(context)));
+ break;
+ case 0x21:
+ TRACE("\tconvert string to uppercase with length\n");
+ {
+ char *ptr = (char *)CTX_SEG_OFF_TO_LIN(context,
+ context->SegDs,
+ context->Edx);
+ WORD len = CX_reg(context);
+ while (len--) { *ptr = toupper(*ptr); ptr++; }
+ }
+ break;
+ case 0x22:
+ TRACE("\tConvert ASCIIZ string to uppercase\n");
+ _strupr((LPSTR)CTX_SEG_OFF_TO_LIN(context, context->SegDs,
+ context->Edx));
+ break;
+ default:
+ TRACE("\tunimplemented function %d\n",AL_reg(context));
+ INT_BARF(context, 0x21);
+ SET_CFLAG(context);
+ break;
+ }
+ break;
+ }
+
+ case 0x66: /* GLOBAL CODE PAGE TABLE */
+ switch (AL_reg(context))
+ {
+ case 0x01:
+ TRACE("GET GLOBAL CODE PAGE TABLE\n");
+ SET_BX( context, CodePage );
+ SET_DX( context, CodePage );
+ RESET_CFLAG(context);
+ break;
+ case 0x02:
+ TRACE("SET GLOBAL CODE PAGE TABLE active page %d system page %d\n",
+ BX_reg(context),DX_reg(context));
+ CodePage = BX_reg(context);
+ RESET_CFLAG(context);
+ break;
+ }
+ break;
+
case 0x68: /* "FFLUSH" - COMMIT FILE */
case 0x6a: /* COMMIT FILE */
TRACE("FFLUSH/COMMIT handle %d\n",BX_reg(context));
--- dlls/kernel/kernel32.spec.a2 2002-11-09 06:22:51.000000000 +0200
+++ dlls/kernel/kernel32.spec 2002-11-09 07:50:08.000000000 +0200
@@ -1036,9 +1036,11 @@
# Wine dll separation hacks, these will go away, don't use them
#
@ cdecl DOSFS_GetDeviceByHandle(long) DOSFS_GetDeviceByHandle
+@ cdecl DOSMEM_AllocSelector(long) DOSMEM_AllocSelector
@ cdecl DOSMEM_Available() DOSMEM_Available
@ cdecl DOSMEM_FreeBlock(ptr) DOSMEM_FreeBlock
@ cdecl DOSMEM_GetBlock(long ptr) DOSMEM_GetBlock
+@ cdecl DOSMEM_GetCollateTable() DOSMEM_GetCollateTable
@ cdecl DOSMEM_GetDPMISegments() DOSMEM_GetDPMISegments
@ cdecl DOSMEM_Init(long) DOSMEM_Init
@ cdecl INT_GetPMHandler(long) INT_GetPMHandler
Index: msdos/dosmem.c
===================================================================
RCS file: /home/wine/wine/msdos/dosmem.c,v
retrieving revision 1.44
diff -u -r1.44 dosmem.c
--- msdos/dosmem.c 4 Nov 2002 22:35:15 -0000 1.44
+++ msdos/dosmem.c 9 Nov 2002 11:56:03 -0000
@@ -368,6 +368,16 @@
}
/***********************************************************************
+ * DOSMEM_GetCollateTable
+ *
+ * Returns a pointer to the collate table
+ */
+DWORD *DOSMEM_GetCollateTable()
+{
+ return &DOSMEM_CollateTable;
+}
+
+/***********************************************************************
* DOSMEM_InitCollateTable
*
* Initialises the collate table (character sorting, language dependent)
Index: include/miscemu.h
===================================================================
RCS file: /home/wine/wine/include/miscemu.h,v
retrieving revision 1.56
diff -u -r1.56 miscemu.h
--- include/miscemu.h 29 Oct 2002 23:09:30 -0000 1.56
+++ include/miscemu.h 9 Nov 2002 12:00:39 -0000
@@ -162,7 +162,6 @@
extern WORD DOSMEM_0000H;
extern WORD DOSMEM_BiosDataSeg;
extern WORD DOSMEM_BiosSysSeg;
-extern DWORD DOSMEM_CollateTable;
/* various real-mode code stubs */
struct DPMI_segments
@@ -188,6 +187,7 @@
extern void DOSMEM_Tick(WORD timer);
extern WORD DOSMEM_AllocSelector(WORD);
extern LPVOID DOSMEM_GetBlock(UINT size, WORD* p);
+extern DWORD *DOSMEM_GetCollateTable();
extern BOOL DOSMEM_FreeBlock(void* ptr);
extern LPVOID DOSMEM_ResizeBlock(void* ptr, UINT size, WORD* p);
extern UINT DOSMEM_Available(void);
More information about the wine-patches
mailing list