Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
be1c6deb
Commit
be1c6deb
authored
Dec 10, 2002
by
Jukka Heinonen
Committed by
Alexandre Julliard
Dec 10, 2002
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move int21 country information handling to winedos.
Improve country information handling. Move collate table to upper memory.
parent
647c1a33
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
0 additions
and
176 deletions
+0
-176
int21.c
dlls/winedos/int21.c
+0
-0
miscemu.h
include/miscemu.h
+0
-1
dosmem.c
msdos/dosmem.c
+0
-78
int21.c
msdos/int21.c
+0
-97
No files found.
dlls/winedos/int21.c
View file @
be1c6deb
This diff is collapsed.
Click to expand it.
include/miscemu.h
View file @
be1c6deb
...
...
@@ -162,7 +162,6 @@ typedef struct
extern
WORD
DOSMEM_0000H
;
extern
WORD
DOSMEM_BiosDataSeg
;
extern
WORD
DOSMEM_BiosSysSeg
;
extern
DWORD
DOSMEM_CollateTable
;
/* msdos/dosmem.c */
extern
BOOL
DOSMEM_Init
(
BOOL
);
...
...
msdos/dosmem.c
View file @
be1c6deb
...
...
@@ -50,8 +50,6 @@ WORD DOSMEM_0000H; /* segment at 0:0 */
WORD
DOSMEM_BiosDataSeg
;
/* BIOS data segment at 0x40:0 */
WORD
DOSMEM_BiosSysSeg
;
/* BIOS ROM segment at 0xf000:0 */
DWORD
DOSMEM_CollateTable
;
/* use 2 low bits of 'size' for the housekeeping */
#define DM_BLOCK_DEBUG 0xABE00000
...
...
@@ -307,80 +305,6 @@ static void DOSMEM_FillBiosSegments(void)
}
/***********************************************************************
* DOSMEM_InitCollateTable
*
* Initialises the collate table (character sorting, language dependent)
*/
static
void
DOSMEM_InitCollateTable
()
{
DWORD
x
;
unsigned
char
*
tbl
;
int
i
;
x
=
GlobalDOSAlloc16
(
258
);
DOSMEM_CollateTable
=
MAKELONG
(
0
,(
x
>>
16
));
tbl
=
DOSMEM_MapRealToLinear
(
DOSMEM_CollateTable
);
*
(
WORD
*
)
tbl
=
0x100
;
tbl
+=
2
;
for
(
i
=
0
;
i
<
0x100
;
i
++
)
*
tbl
++
=
i
;
}
/***********************************************************************
* DOSMEM_InitErrorTable
*
* Initialises the error tables (DOS 5+)
*/
static
void
DOSMEM_InitErrorTable
()
{
#if 0 /* no longer used */
DWORD x;
char *call;
/* We will use a snippet of real mode code that calls */
/* a WINE-only interrupt to handle moving the requested */
/* message into the buffer... */
/* FIXME - There is still something wrong... */
/* FIXME - Find hex values for opcodes...
(On call, AX contains message number
DI contains 'offset' (??)
Resturn, ES:DI points to counted string )
PUSH BX
MOV BX, AX
MOV AX, (arbitrary subfunction number)
INT (WINE-only interrupt)
POP BX
RET
*/
const int code = 4;
const int buffer = 80;
const int SIZE_TO_ALLOCATE = code + buffer;
/* FIXME - Complete rewrite of the table system to save */
/* precious DOS space. Now, we return the 0001:???? as */
/* DOS 4+ (??, it seems to be the case in MS 7.10) treats that */
/* as a special case and programs will use the alternate */
/* interface (a farcall returned with INT 24 (AX = 0x122e, DL = */
/* 0x08) which lets us have a smaller memory footprint anyway. */
x = GlobalDOSAlloc16(SIZE_TO_ALLOCATE);
DOSMEM_ErrorCall = MAKELONG(0,(x>>16));
DOSMEM_ErrorBuffer = DOSMEM_ErrorCall + code;
call = DOSMEM_MapRealToLinear(DOSMEM_ErrorCall);
memset(call, 0, SIZE_TO_ALLOCATE);
#endif
/* FIXME - Copy assembly into buffer here */
}
/***********************************************************************
* DOSMEM_InitMemory
*
* Initialises the DOS memory structures.
...
...
@@ -480,8 +404,6 @@ BOOL DOSMEM_Init(BOOL dos_init)
DOSMEM_FillBiosSegments
();
DOSMEM_FillIsrTable
();
DOSMEM_InitMemory
();
DOSMEM_InitCollateTable
();
DOSMEM_InitErrorTable
();
already_done
=
1
;
}
else
if
(
dos_init
&&
!
already_mapped
)
...
...
msdos/int21.c
View file @
be1c6deb
...
...
@@ -122,15 +122,12 @@ struct EDPB /* FAT32 extended Drive Parameter Block */
};
WORD
CodePage
=
437
;
DWORD
dpbsegptr
;
struct
DosHeap
{
BYTE
InDosFlag
;
BYTE
mediaID
;
BYTE
biosdate
[
8
];
struct
DPB
dpb
;
BYTE
DummyDBCSLeadTable
[
6
];
};
static
struct
DosHeap
*
heap
;
static
WORD
DosHeapHandle
;
...
...
@@ -153,9 +150,7 @@ static BOOL INT21_CreateHeap(void)
}
heap
=
(
struct
DosHeap
*
)
GlobalLock16
(
DosHeapHandle
);
dpbsegptr
=
MAKESEGPTR
(
DosHeapHandle
,(
int
)
&
heap
->
dpb
-
(
int
)
heap
);
heap
->
InDosFlag
=
0
;
strcpy
(
heap
->
biosdate
,
"01/01/80"
);
memset
(
heap
->
DummyDBCSLeadTable
,
0
,
6
);
return
TRUE
;
}
...
...
@@ -751,21 +746,6 @@ static BOOL INT21_GetCurrentDirectory( CONTEXT86 *context )
}
static
void
INT21_GetDBCSLeadTable
(
CONTEXT86
*
context
)
{
if
(
heap
||
INT21_CreateHeap
())
{
/* return an empty table just as DOS 4.0+ does */
context
->
SegDs
=
DosHeapHandle
;
SET_SI
(
context
,
(
int
)
&
heap
->
DummyDBCSLeadTable
-
(
int
)
heap
);
}
else
{
SET_AX
(
context
,
0x1
);
/* error */
SET_CFLAG
(
context
);
}
}
static
int
INT21_GetDiskSerialNumber
(
CONTEXT86
*
context
)
{
BYTE
*
dataptr
=
CTX_SEG_OFF_TO_LIN
(
context
,
context
->
SegDs
,
context
->
Edx
);
...
...
@@ -1167,13 +1147,6 @@ void WINAPI INT_Int21Handler( CONTEXT86 *context )
}
break
;
case
0x34
:
/* GET ADDRESS OF INDOS FLAG */
TRACE
(
"GET ADDRESS OF INDOS FLAG
\n
"
);
if
(
!
heap
)
INT21_CreateHeap
();
context
->
SegEs
=
DosHeapHandle
;
SET_BX
(
context
,
(
int
)
&
heap
->
InDosFlag
-
(
int
)
heap
);
break
;
case
0x36
:
/* GET FREE DISK SPACE */
TRACE
(
"GET FREE DISK SPACE FOR DRIVE %s
\n
"
,
INT21_DriveName
(
DL_reg
(
context
)));
...
...
@@ -1639,76 +1612,6 @@ void WINAPI INT_Int21Handler( CONTEXT86 *context )
}
break
;
case
0x61
:
/* UNUSED */
case
0x63
:
/* misc. language support */
switch
(
AL_reg
(
context
))
{
case
0x00
:
/* GET DOUBLE BYTE CHARACTER SET LEAD-BYTE TABLE */
INT21_GetDBCSLeadTable
(
context
);
break
;
}
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
(
"
\t
get 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
(
"
\t
get 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
(
"
\t
Convert char to uppercase
\n
"
);
SET_DL
(
context
,
toupper
(
DL_reg
(
context
))
);
break
;
case
0x21
:
TRACE
(
"
\t
convert 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
(
"
\t
Convert ASCIIZ string to uppercase
\n
"
);
_strupr
(
(
LPSTR
)
CTX_SEG_OFF_TO_LIN
(
context
,
context
->
SegDs
,
context
->
Edx
)
);
break
;
default:
TRACE
(
"
\t
unimplemented 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
));
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment