Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
9e1bafd0
Commit
9e1bafd0
authored
Mar 19, 2004
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Get rid of the registry lookups, rely entirely on the kernel devices
instead.
parent
5488a4ed
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
4 additions
and
99 deletions
+4
-99
comm16.c
dlls/user/comm16.c
+4
-99
No files found.
dlls/user/comm16.c
View file @
9e1bafd0
...
...
@@ -128,58 +128,6 @@ static void COMM_MSRUpdate( HANDLE handle, UCHAR * pMsr )
*
pMsr
=
(
*
pMsr
&
~
MSR_MASK
)
|
tmpmsr
;
}
static
BOOL
get_com_device_name
(
int
port
,
char
*
devicename
,
DWORD
size
,
int
*
baudrate
)
{
HKEY
hkey
;
char
temp
[
256
],
*
btemp
;
if
(
port
>=
MAX_PORTS
)
return
FALSE
;
temp
[
0
]
=
0
;
if
(
!
RegOpenKeyA
(
HKEY_LOCAL_MACHINE
,
"Software
\\
Wine
\\
Wine
\\
Config
\\
serialports"
,
&
hkey
))
{
DWORD
type
,
count
=
sizeof
(
temp
);
char
value
[
8
];
sprintf
(
value
,
"COM%d"
,
port
+
1
);
RegQueryValueExA
(
hkey
,
value
,
0
,
&
type
,
temp
,
&
count
);
RegCloseKey
(
hkey
);
}
if
(
!
temp
[
0
])
return
FALSE
;
btemp
=
strchr
(
temp
,
','
);
if
(
btemp
!=
NULL
)
{
*
btemp
++
=
'\0'
;
if
(
baudrate
)
*
baudrate
=
atoi
(
btemp
);
}
else
if
(
baudrate
)
*
baudrate
=
-
1
;
if
(
devicename
)
lstrcpynA
(
devicename
,
temp
,
size
);
return
TRUE
;
}
static
BOOL
get_lpt_device_name
(
int
port
,
char
*
devicename
,
DWORD
size
)
{
HKEY
hkey
;
char
temp
[
256
];
if
(
port
>=
MAX_PORTS
)
return
FALSE
;
temp
[
0
]
=
0
;
if
(
!
RegOpenKeyA
(
HKEY_LOCAL_MACHINE
,
"Software
\\
Wine
\\
Wine
\\
Config
\\
parallelports"
,
&
hkey
))
{
DWORD
type
,
count
=
sizeof
(
temp
);
char
value
[
8
];
sprintf
(
value
,
"LPT%d"
,
port
+
1
);
RegQueryValueExA
(
hkey
,
value
,
0
,
&
type
,
temp
,
&
count
);
RegCloseKey
(
hkey
);
}
if
(
!
temp
[
0
])
return
FALSE
;
if
(
devicename
)
lstrcpynA
(
devicename
,
temp
,
size
);
return
TRUE
;
}
static
struct
DosDeviceStruct
*
GetDeviceStruct
(
int
index
)
{
if
((
index
&
0x7F
)
<=
MAX_PORTS
)
{
...
...
@@ -208,16 +156,6 @@ static int GetCommPort_ov(LPOVERLAPPED ov, int write)
return
-
1
;
}
inline
static
int
ValidCOMPort
(
int
x
)
{
return
get_com_device_name
(
x
,
NULL
,
0
,
NULL
);
}
inline
static
int
ValidLPTPort
(
int
x
)
{
return
get_lpt_device_name
(
x
,
NULL
,
0
);
}
static
int
WinError
(
void
)
{
TRACE
(
"errno = %d
\n
"
,
errno
);
...
...
@@ -492,11 +430,6 @@ INT16 WINAPI BuildCommDCB16(LPCSTR device, LPDCB16 lpdcb)
return
-
1
;
}
if
(
!
ValidCOMPort
(
port
))
{
FIXME
(
"invalid COM port %d?
\n
"
,
port
);
return
-
1
;
}
memset
(
lpdcb
,
0
,
sizeof
(
DCB16
));
/* initialize */
lpdcb
->
Id
=
port
;
...
...
@@ -531,14 +464,6 @@ INT16 WINAPI OpenComm16(LPCSTR device,UINT16 cbInQueue,UINT16 cbOutQueue)
if
(
!
strncasecmp
(
device
,
"COM"
,
3
))
{
char
devicename
[
32
];
int
baudrate
;
if
(
!
get_com_device_name
(
port
,
devicename
,
sizeof
(
devicename
),
&
baudrate
))
return
IE_BADID
;
TRACE
(
"%s = %s
\n
"
,
device
,
devicename
);
if
(
COM
[
port
].
handle
)
return
IE_OPEN
;
...
...
@@ -546,7 +471,6 @@ INT16 WINAPI OpenComm16(LPCSTR device,UINT16 cbInQueue,UINT16 cbOutQueue)
FILE_SHARE_READ
|
FILE_SHARE_WRITE
,
NULL
,
CREATE_ALWAYS
,
FILE_FLAG_OVERLAPPED
|
FILE_FLAG_NO_BUFFERING
,
0
);
if
(
handle
==
INVALID_HANDLE_VALUE
)
{
ERR
(
"Couldn't open %s ! (%s)
\n
"
,
devicename
,
strerror
(
errno
));
return
IE_HARDWARE
;
}
else
{
memset
(
COM
[
port
].
unknown
,
0
,
sizeof
(
COM
[
port
].
unknown
));
...
...
@@ -557,16 +481,6 @@ INT16 WINAPI OpenComm16(LPCSTR device,UINT16 cbInQueue,UINT16 cbOutQueue)
COM
[
port
].
evtchar
=
0
;
/* FIXME: default? */
/* save terminal state */
GetCommState16
(
port
,
&
COM
[
port
].
dcb
);
/* set default parameters */
if
(
baudrate
>-
1
){
DCB16
dcb
;
memcpy
(
&
dcb
,
&
COM
[
port
].
dcb
,
sizeof
(
dcb
));
dcb
.
BaudRate
=
baudrate
;
/* more defaults:
* databits, parity, stopbits
*/
SetCommState16
(
&
dcb
);
}
/* init priority characters */
COM
[
port
].
unget
=
-
1
;
COM
[
port
].
xmit
=
-
1
;
...
...
@@ -584,7 +498,6 @@ INT16 WINAPI OpenComm16(LPCSTR device,UINT16 cbInQueue,UINT16 cbOutQueue)
}
else
COM
[
port
].
outbuf
=
NULL
;
if
(
!
COM
[
port
].
outbuf
)
{
/* not enough memory */
SetCommState16
(
&
COM
[
port
].
dcb
);
CloseHandle
(
COM
[
port
].
handle
);
ERR
(
"out of memory
\n
"
);
return
IE_MEMORY
;
...
...
@@ -602,9 +515,6 @@ INT16 WINAPI OpenComm16(LPCSTR device,UINT16 cbInQueue,UINT16 cbOutQueue)
else
if
(
!
strncasecmp
(
device
,
"LPT"
,
3
))
{
if
(
!
ValidLPTPort
(
port
))
return
IE_BADID
;
if
(
LPT
[
port
].
handle
)
return
IE_OPEN
;
...
...
@@ -700,22 +610,17 @@ INT16 WINAPI ClearCommBreak16(INT16 cid)
LONG
WINAPI
EscapeCommFunction16
(
UINT16
cid
,
UINT16
nFunction
)
{
struct
DosDeviceStruct
*
ptr
;
int
max
;
TRACE
(
"cid=%d, function=%d
\n
"
,
cid
,
nFunction
);
switch
(
nFunction
)
{
case
GETMAXCOM
:
TRACE
(
"GETMAXCOM
\n
"
);
for
(
max
=
MAX_PORTS
;
!
ValidCOMPort
(
max
);
max
--
)
;
return
max
;
return
4
;
/* FIXME */
case
GETMAXLPT
:
TRACE
(
"GETMAXLPT
\n
"
);
for
(
max
=
MAX_PORTS
;
!
ValidLPTPort
(
max
);
max
--
)
;
return
FLAG_LPT
+
max
;
return
FLAG_LPT
+
3
;
/* FIXME */
case
GETBASEIRQ
:
TRACE
(
"GETBASEIRQ
\n
"
);
...
...
@@ -855,7 +760,7 @@ SEGPTR WINAPI SetCommEventMask16(INT16 cid,UINT16 fuEvtMask)
ptr
->
eventmask
=
fuEvtMask
;
if
(
(
cid
&
FLAG_LPT
)
||
!
ValidCOMPort
(
cid
)
)
{
if
(
cid
&
FLAG_LPT
)
{
WARN
(
" cid %d not comm port
\n
"
,
cid
);
return
(
SEGPTR
)
NULL
;
}
...
...
@@ -882,7 +787,7 @@ UINT16 WINAPI GetCommEventMask16(INT16 cid,UINT16 fnEvtClear)
return
0
;
}
if
(
(
cid
&
FLAG_LPT
)
||
!
ValidCOMPort
(
cid
)
)
{
if
(
cid
&
FLAG_LPT
)
{
WARN
(
" cid %d not comm port
\n
"
,
cid
);
return
0
;
}
...
...
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