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
00040c48
Commit
00040c48
authored
May 01, 2008
by
Eric Pouech
Committed by
Alexandre Julliard
May 02, 2008
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winhelp: Added support for relative offsets in richedit rendered pages.
parent
15f6786b
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
28 additions
and
10 deletions
+28
-10
hlpfile.c
programs/winhelp/hlpfile.c
+15
-6
hlpfile.h
programs/winhelp/hlpfile.h
+4
-1
winhelp.c
programs/winhelp/winhelp.c
+9
-3
No files found.
programs/winhelp/hlpfile.c
View file @
00040c48
...
@@ -1039,7 +1039,8 @@ unsigned HLPFILE_HalfPointsToTwips(unsigned pts)
...
@@ -1039,7 +1039,8 @@ unsigned HLPFILE_HalfPointsToTwips(unsigned pts)
*
*
* HLPFILE_BrowseParagraph
* HLPFILE_BrowseParagraph
*/
*/
static
BOOL
HLPFILE_BrowseParagraph
(
HLPFILE_PAGE
*
page
,
struct
RtfData
*
rd
,
BYTE
*
buf
,
BYTE
*
end
)
static
BOOL
HLPFILE_BrowseParagraph
(
HLPFILE_PAGE
*
page
,
struct
RtfData
*
rd
,
BYTE
*
buf
,
BYTE
*
end
,
unsigned
*
parlen
)
{
{
UINT
textsize
;
UINT
textsize
;
BYTE
*
format
,
*
format_end
;
BYTE
*
format
,
*
format_end
;
...
@@ -1054,6 +1055,7 @@ static BOOL HLPFILE_BrowseParagraph(HLPFILE_PAGE* page, struct RtfData* rd, BYTE
...
@@ -1054,6 +1055,7 @@ static BOOL HLPFILE_BrowseParagraph(HLPFILE_PAGE* page, struct RtfData* rd, BYTE
if
(
buf
+
0x19
>
end
)
{
WINE_WARN
(
"header too small
\n
"
);
return
FALSE
;};
if
(
buf
+
0x19
>
end
)
{
WINE_WARN
(
"header too small
\n
"
);
return
FALSE
;};
*
parlen
=
0
;
blocksize
=
GET_UINT
(
buf
,
0
);
blocksize
=
GET_UINT
(
buf
,
0
);
size
=
GET_UINT
(
buf
,
0x4
);
size
=
GET_UINT
(
buf
,
0x4
);
datalen
=
GET_UINT
(
buf
,
0x10
);
datalen
=
GET_UINT
(
buf
,
0x10
);
...
@@ -1084,7 +1086,7 @@ static BOOL HLPFILE_BrowseParagraph(HLPFILE_PAGE* page, struct RtfData* rd, BYTE
...
@@ -1084,7 +1086,7 @@ static BOOL HLPFILE_BrowseParagraph(HLPFILE_PAGE* page, struct RtfData* rd, BYTE
if
(
buf
[
0x14
]
==
0x20
||
buf
[
0x14
]
==
0x23
)
if
(
buf
[
0x14
]
==
0x20
||
buf
[
0x14
]
==
0x23
)
{
{
fetch_long
(
&
format
);
fetch_long
(
&
format
);
fetch_ushort
(
&
format
);
*
parlen
=
fetch_ushort
(
&
format
);
}
}
if
(
buf
[
0x14
]
==
0x23
)
if
(
buf
[
0x14
]
==
0x23
)
...
@@ -1505,12 +1507,14 @@ done:
...
@@ -1505,12 +1507,14 @@ done:
* HLPFILE_BrowsePage
* HLPFILE_BrowsePage
*
*
*/
*/
BOOL
HLPFILE_BrowsePage
(
HLPFILE_PAGE
*
page
,
struct
RtfData
*
rd
,
unsigned
font_scale
)
BOOL
HLPFILE_BrowsePage
(
HLPFILE_PAGE
*
page
,
struct
RtfData
*
rd
,
unsigned
font_scale
,
unsigned
relative
)
{
{
HLPFILE
*
hlpfile
=
page
->
file
;
HLPFILE
*
hlpfile
=
page
->
file
;
BYTE
*
buf
,
*
end
;
BYTE
*
buf
,
*
end
;
DWORD
ref
=
page
->
reference
;
DWORD
ref
=
page
->
reference
;
unsigned
index
,
old_index
=
-
1
,
offset
,
count
=
0
,
cpg
;
unsigned
index
,
old_index
=
-
1
,
offset
,
count
=
0
,
offs
=
0
;
unsigned
cpg
,
parlen
;
char
tmp
[
1024
];
char
tmp
[
1024
];
const
char
*
ck
=
NULL
;
const
char
*
ck
=
NULL
;
...
@@ -1520,6 +1524,8 @@ BOOL HLPFILE_BrowsePage(HLPFILE_PAGE* page, struct RtfData* rd, unsigned font
...
@@ -1520,6 +1524,8 @@ BOOL HLPFILE_BrowsePage(HLPFILE_PAGE* page, struct RtfData* rd, unsigned font
rd
->
first_link
=
rd
->
current_link
=
NULL
;
rd
->
first_link
=
rd
->
current_link
=
NULL
;
rd
->
force_color
=
FALSE
;
rd
->
force_color
=
FALSE
;
rd
->
font_scale
=
font_scale
;
rd
->
font_scale
=
font_scale
;
rd
->
relative
=
relative
;
rd
->
char_pos_rel
=
0
;
switch
(
hlpfile
->
charset
)
switch
(
hlpfile
->
charset
)
{
{
...
@@ -1623,7 +1629,7 @@ BOOL HLPFILE_BrowsePage(HLPFILE_PAGE* page, struct RtfData* rd, unsigned font
...
@@ -1623,7 +1629,7 @@ BOOL HLPFILE_BrowsePage(HLPFILE_PAGE* page, struct RtfData* rd, unsigned font
buf
=
hlpfile
->
topic_map
[
index
]
+
offset
;
buf
=
hlpfile
->
topic_map
[
index
]
+
offset
;
if
(
buf
+
0x15
>=
hlpfile
->
topic_end
)
{
WINE_WARN
(
"extra
\n
"
);
break
;}
if
(
buf
+
0x15
>=
hlpfile
->
topic_end
)
{
WINE_WARN
(
"extra
\n
"
);
break
;}
end
=
min
(
buf
+
GET_UINT
(
buf
,
0
),
hlpfile
->
topic_end
);
end
=
min
(
buf
+
GET_UINT
(
buf
,
0
),
hlpfile
->
topic_end
);
if
(
index
!=
old_index
)
{
old_index
=
index
;}
if
(
index
!=
old_index
)
{
o
ffs
=
0
;
o
ld_index
=
index
;}
switch
(
buf
[
0x14
])
switch
(
buf
[
0x14
])
{
{
...
@@ -1633,7 +1639,10 @@ BOOL HLPFILE_BrowsePage(HLPFILE_PAGE* page, struct RtfData* rd, unsigned font
...
@@ -1633,7 +1639,10 @@ BOOL HLPFILE_BrowsePage(HLPFILE_PAGE* page, struct RtfData* rd, unsigned font
case
0x01
:
case
0x01
:
case
0x20
:
case
0x20
:
case
0x23
:
case
0x23
:
if
(
!
HLPFILE_BrowseParagraph
(
page
,
rd
,
buf
,
end
))
return
FALSE
;
if
(
!
HLPFILE_BrowseParagraph
(
page
,
rd
,
buf
,
end
,
&
parlen
))
return
FALSE
;
if
(
relative
>=
index
*
0x8000
+
offs
)
rd
->
char_pos_rel
=
rd
->
char_pos
;
offs
+=
parlen
;
break
;
break
;
default:
default:
WINE_ERR
(
"buf[0x14] = %x
\n
"
,
buf
[
0x14
]);
WINE_ERR
(
"buf[0x14] = %x
\n
"
,
buf
[
0x14
]);
...
...
programs/winhelp/hlpfile.h
View file @
00040c48
...
@@ -184,6 +184,9 @@ struct RtfData {
...
@@ -184,6 +184,9 @@ struct RtfData {
HLPFILE_LINK
*
first_link
;
HLPFILE_LINK
*
first_link
;
HLPFILE_LINK
*
current_link
;
HLPFILE_LINK
*
current_link
;
BOOL
force_color
;
BOOL
force_color
;
unsigned
relative
;
/* offset within page to lookup for */
unsigned
char_pos_rel
;
/* char_pos correspondinf to relative */
};
};
BOOL
HLPFILE_BrowsePage
(
HLPFILE_PAGE
*
,
struct
RtfData
*
rd
,
unsigned
font_scale
);
BOOL
HLPFILE_BrowsePage
(
HLPFILE_PAGE
*
,
struct
RtfData
*
rd
,
unsigned
font_scale
,
unsigned
relative
);
programs/winhelp/winhelp.c
View file @
00040c48
...
@@ -1068,8 +1068,12 @@ static void WINHELP_SetupText(HWND hTextWnd, WINHELP_WINDOW* win, ULONG relative
...
@@ -1068,8 +1068,12 @@ static void WINHELP_SetupText(HWND hTextWnd, WINHELP_WINDOW* win, ULONG relative
{
{
struct
RtfData
rd
;
struct
RtfData
rd
;
EDITSTREAM
es
;
EDITSTREAM
es
;
unsigned
cp
=
0
;
POINTL
ptl
;
POINT
pt
;
if
(
HLPFILE_BrowsePage
(
win
->
page
,
&
rd
,
win
->
font_scale
))
if
(
HLPFILE_BrowsePage
(
win
->
page
,
&
rd
,
win
->
font_scale
,
relative
))
{
{
rd
.
where
=
rd
.
data
;
rd
.
where
=
rd
.
data
;
es
.
dwCookie
=
(
DWORD_PTR
)
&
rd
;
es
.
dwCookie
=
(
DWORD_PTR
)
&
rd
;
...
@@ -1077,17 +1081,19 @@ static void WINHELP_SetupText(HWND hTextWnd, WINHELP_WINDOW* win, ULONG relative
...
@@ -1077,17 +1081,19 @@ static void WINHELP_SetupText(HWND hTextWnd, WINHELP_WINDOW* win, ULONG relative
es
.
pfnCallback
=
WINHELP_RtfStreamIn
;
es
.
pfnCallback
=
WINHELP_RtfStreamIn
;
SendMessageW
(
hTextWnd
,
EM_STREAMIN
,
SF_RTF
,
(
LPARAM
)
&
es
);
SendMessageW
(
hTextWnd
,
EM_STREAMIN
,
SF_RTF
,
(
LPARAM
)
&
es
);
cp
=
rd
.
char_pos_rel
;
}
}
/* FIXME: else leaking potentially the rd.first_link chain */
/* FIXME: else leaking potentially the rd.first_link chain */
HeapFree
(
GetProcessHeap
(),
0
,
rd
.
data
);
HeapFree
(
GetProcessHeap
(),
0
,
rd
.
data
);
SendMessage
(
hTextWnd
,
EM_POSFROMCHAR
,
(
WPARAM
)
&
ptl
,
cp
?
cp
-
1
:
0
);
pt
.
x
=
0
;
pt
.
y
=
ptl
.
y
;
SendMessage
(
hTextWnd
,
EM_SETSCROLLPOS
,
0
,
(
LPARAM
)
&
pt
);
}
}
else
else
{
{
SendMessage
(
hTextWnd
,
WM_SETTEXT
,
0
,
(
LPARAM
)
""
);
SendMessage
(
hTextWnd
,
WM_SETTEXT
,
0
,
(
LPARAM
)
""
);
}
}
SendMessage
(
hTextWnd
,
WM_SETREDRAW
,
TRUE
,
0
);
SendMessage
(
hTextWnd
,
WM_SETREDRAW
,
TRUE
,
0
);
SendMessage
(
hTextWnd
,
EM_SETSEL
,
0
,
0
);
SendMessage
(
hTextWnd
,
EM_SCROLLCARET
,
0
,
0
);
InvalidateRect
(
hTextWnd
,
NULL
,
TRUE
);
InvalidateRect
(
hTextWnd
,
NULL
,
TRUE
);
}
}
...
...
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