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
8f4252d6
Commit
8f4252d6
authored
Nov 22, 1998
by
Andreas Mohr
Committed by
Alexandre Julliard
Nov 22, 1998
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added INT21_ParseFileNameIntoFCB() and some other things to get
COMMAND.COM working.
parent
197cc884
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
66 additions
and
2 deletions
+66
-2
int21.c
msdos/int21.c
+66
-2
No files found.
msdos/int21.c
View file @
8f4252d6
...
...
@@ -69,6 +69,7 @@ struct DosHeap {
BYTE
mediaID
;
BYTE
biosdate
[
8
];
struct
DPB
dpb
;
BYTE
DummyDBCSLeadTable
[
6
];
};
static
struct
DosHeap
*
heap
;
static
WORD
DosHeapHandle
;
...
...
@@ -89,6 +90,7 @@ static BOOL32 INT21_CreateHeap(void)
dpbsegptr
=
PTR_SEG_OFF_TO_SEGPTR
(
DosHeapHandle
,(
int
)
&
heap
->
dpb
-
(
int
)
heap
);
heap
->
InDosFlag
=
0
;
strcpy
(
heap
->
biosdate
,
"01/01/80"
);
memset
(
heap
->
DummyDBCSLeadTable
,
0
,
6
);
return
TRUE
;
}
...
...
@@ -321,6 +323,44 @@ static BOOL32 ioctlGenericBlkDevReq( CONTEXT *context )
return
FALSE
;
}
static
void
INT21_ParseFileNameIntoFCB
(
CONTEXT
*
context
)
{
char
*
filename
=
CTX_SEG_OFF_TO_LIN
(
context
,
DS_reg
(
context
),
SI_reg
(
context
)
);
char
*
fcb
=
CTX_SEG_OFF_TO_LIN
(
context
,
ES_reg
(
context
),
DI_reg
(
context
)
);
char
*
buffer
,
*
s
,
*
d
;
AL_reg
(
context
)
=
0xff
;
/* failed */
TRACE
(
int21
,
"filename: '%s'
\n
"
,
filename
);
buffer
=
HeapAlloc
(
GetProcessHeap
(),
0
,
strlen
(
filename
)
);
s
=
filename
;
d
=
buffer
;
while
(
*
s
)
{
if
((
*
s
!=
' '
)
&&
(
*
s
!=
'\r'
)
&&
(
*
s
!=
'\n'
))
*
d
++
=
*
s
++
;
else
break
;
}
*
d
=
'\0'
;
DOSFS_ToDosFCBFormat
(
buffer
,
fcb
+
1
);
*
fcb
=
0
;
TRACE
(
int21
,
"FCB: '%s'
\n
"
,
((
CHAR
*
)
fcb
+
1
));
HeapFree
(
GetProcessHeap
(),
0
,
buffer
);
AL_reg
(
context
)
=
((
strchr
(
filename
,
'*'
))
||
(
strchr
(
filename
,
'$'
)))
!=
0
;
/* point DS:SI to first unparsed character */
SI_reg
(
context
)
+=
(
int
)
s
-
(
int
)
filename
;
}
static
void
INT21_GetSystemDate
(
CONTEXT
*
context
)
{
SYSTEMTIME
systime
;
...
...
@@ -684,6 +724,21 @@ static BOOL32 INT21_GetCurrentDirectory( CONTEXT *context )
}
static
void
INT21_GetDBCSLeadTable
(
CONTEXT
*
context
)
{
if
(
heap
||
INT21_CreateHeap
())
{
/* return an empty table just as DOS 4.0+ does */
DS_reg
(
context
)
=
DosHeapHandle
;
SI_reg
(
context
)
=
(
int
)
&
heap
->
DummyDBCSLeadTable
-
(
int
)
heap
;
}
else
{
AX_reg
(
context
)
=
0x1
;
/* error */
SET_CFLAG
(
context
);
}
}
static
int
INT21_GetDiskSerialNumber
(
CONTEXT
*
context
)
{
BYTE
*
dataptr
=
CTX_SEG_OFF_TO_LIN
(
context
,
DS_reg
(
context
),
DX_reg
(
context
));
...
...
@@ -1042,7 +1097,6 @@ void WINAPI DOS3Call( CONTEXT *context )
case
0x26
:
/* CREATE NEW PROGRAM SEGMENT PREFIX */
case
0x27
:
/* RANDOM BLOCK READ FROM FCB FILE */
case
0x28
:
/* RANDOM BLOCK WRITE TO FCB FILE */
case
0x29
:
/* PARSE FILENAME INTO FCB */
case
0x54
:
/* GET VERIFY FLAG */
INT_BARF
(
context
,
0x21
);
break
;
...
...
@@ -1170,6 +1224,10 @@ void WINAPI DOS3Call( CONTEXT *context )
DX_reg
(
context
)));
break
;
case
0x29
:
/* PARSE FILENAME INTO FCB */
INT21_ParseFileNameIntoFCB
(
context
);
break
;
case
0x2a
:
/* GET SYSTEM DATE */
INT21_GetSystemDate
(
context
);
break
;
...
...
@@ -1836,7 +1894,13 @@ void WINAPI DOS3Call( CONTEXT *context )
break
;
case
0x61
:
/* UNUSED */
case
0x63
:
/* 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
0x64
:
/* OS/2 DOS BOX */
INT_BARF
(
context
,
0x21
);
SET_CFLAG
(
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