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
cdd235e2
Commit
cdd235e2
authored
Jul 12, 2008
by
Eric Pouech
Committed by
Alexandre Julliard
Jul 14, 2008
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winhelp: Constify the internal .hlp file parsing.
parent
ace5171d
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
49 additions
and
45 deletions
+49
-45
hlpfile.c
programs/winhlp32/hlpfile.c
+49
-45
No files found.
programs/winhlp32/hlpfile.c
View file @
cdd235e2
...
...
@@ -55,16 +55,16 @@ static BOOL HLPFILE_DoReadHlpFile(HLPFILE*, LPCSTR);
static
BOOL
HLPFILE_ReadFileToBuffer
(
HLPFILE
*
,
HFILE
);
static
BOOL
HLPFILE_FindSubFile
(
HLPFILE
*
,
LPCSTR
,
BYTE
**
,
BYTE
**
);
static
BOOL
HLPFILE_SystemCommands
(
HLPFILE
*
);
static
INT
HLPFILE_UncompressedLZ77_Size
(
BYTE
*
ptr
,
BYTE
*
end
);
static
BYTE
*
HLPFILE_UncompressLZ77
(
BYTE
*
ptr
,
BYTE
*
end
,
BYTE
*
newptr
);
static
INT
HLPFILE_UncompressedLZ77_Size
(
const
BYTE
*
ptr
,
const
BYTE
*
end
);
static
BYTE
*
HLPFILE_UncompressLZ77
(
const
BYTE
*
ptr
,
const
BYTE
*
end
,
BYTE
*
newptr
);
static
BOOL
HLPFILE_UncompressLZ77_Phrases
(
HLPFILE
*
);
static
BOOL
HLPFILE_Uncompress_Phrases40
(
HLPFILE
*
);
static
BOOL
HLPFILE_Uncompress_Topic
(
HLPFILE
*
);
static
BOOL
HLPFILE_GetContext
(
HLPFILE
*
);
static
BOOL
HLPFILE_GetKeywords
(
HLPFILE
*
);
static
BOOL
HLPFILE_GetMap
(
HLPFILE
*
);
static
BOOL
HLPFILE_AddPage
(
HLPFILE
*
,
BYTE
*
,
BYTE
*
,
unsigned
,
unsigned
);
static
BOOL
HLPFILE_SkipParagraph
(
HLPFILE
*
,
BYTE
*
,
BYTE
*
,
unsigned
*
);
static
BOOL
HLPFILE_AddPage
(
HLPFILE
*
,
const
BYTE
*
,
const
BYTE
*
,
unsigned
,
unsigned
);
static
BOOL
HLPFILE_SkipParagraph
(
HLPFILE
*
,
const
BYTE
*
,
const
BYTE
*
,
unsigned
*
);
static
void
HLPFILE_Uncompress2
(
HLPFILE
*
,
const
BYTE
*
,
const
BYTE
*
,
BYTE
*
,
const
BYTE
*
);
static
BOOL
HLPFILE_Uncompress3
(
HLPFILE
*
,
char
*
,
const
char
*
,
const
BYTE
*
,
const
BYTE
*
);
static
void
HLPFILE_UncompressRLE
(
const
BYTE
*
src
,
const
BYTE
*
end
,
BYTE
*
dst
,
unsigned
dstsz
);
...
...
@@ -370,10 +370,10 @@ static BOOL HLPFILE_DoReadHlpFile(HLPFILE *hlpfile, LPCSTR lpszPath)
*
* HLPFILE_AddPage
*/
static
BOOL
HLPFILE_AddPage
(
HLPFILE
*
hlpfile
,
BYTE
*
buf
,
BYTE
*
end
,
unsigned
ref
,
unsigned
offset
)
static
BOOL
HLPFILE_AddPage
(
HLPFILE
*
hlpfile
,
const
BYTE
*
buf
,
const
BYTE
*
end
,
unsigned
ref
,
unsigned
offset
)
{
HLPFILE_PAGE
*
page
;
BYTE
*
title
;
const
BYTE
*
title
;
UINT
titlesize
,
blocksize
,
datalen
;
char
*
ptr
;
HLPFILE_MACRO
*
macro
;
...
...
@@ -457,70 +457,70 @@ static BOOL HLPFILE_AddPage(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigned ref
return
TRUE
;
}
static
long
fetch_long
(
BYTE
**
ptr
)
static
long
fetch_long
(
const
BYTE
**
ptr
)
{
long
ret
;
if
(
*
(
*
ptr
)
&
1
)
{
ret
=
(
*
(
unsigned
long
*
)(
*
ptr
)
-
0x80000000L
)
/
2
;
ret
=
(
*
(
const
unsigned
long
*
)(
*
ptr
)
-
0x80000000L
)
/
2
;
(
*
ptr
)
+=
4
;
}
else
{
ret
=
(
*
(
unsigned
short
*
)(
*
ptr
)
-
0x8000
)
/
2
;
ret
=
(
*
(
const
unsigned
short
*
)(
*
ptr
)
-
0x8000
)
/
2
;
(
*
ptr
)
+=
2
;
}
return
ret
;
}
static
unsigned
long
fetch_ulong
(
BYTE
**
ptr
)
static
unsigned
long
fetch_ulong
(
const
BYTE
**
ptr
)
{
unsigned
long
ret
;
if
(
*
(
*
ptr
)
&
1
)
{
ret
=
*
(
unsigned
long
*
)(
*
ptr
)
/
2
;
ret
=
*
(
const
unsigned
long
*
)(
*
ptr
)
/
2
;
(
*
ptr
)
+=
4
;
}
else
{
ret
=
*
(
unsigned
short
*
)(
*
ptr
)
/
2
;
ret
=
*
(
const
unsigned
short
*
)(
*
ptr
)
/
2
;
(
*
ptr
)
+=
2
;
}
return
ret
;
}
static
short
fetch_short
(
BYTE
**
ptr
)
static
short
fetch_short
(
const
BYTE
**
ptr
)
{
short
ret
;
if
(
*
(
*
ptr
)
&
1
)
{
ret
=
(
*
(
unsigned
short
*
)(
*
ptr
)
-
0x8000
)
/
2
;
ret
=
(
*
(
const
unsigned
short
*
)(
*
ptr
)
-
0x8000
)
/
2
;
(
*
ptr
)
+=
2
;
}
else
{
ret
=
(
*
(
unsigned
char
*
)(
*
ptr
)
-
0x80
)
/
2
;
ret
=
(
*
(
const
unsigned
char
*
)(
*
ptr
)
-
0x80
)
/
2
;
(
*
ptr
)
++
;
}
return
ret
;
}
static
unsigned
short
fetch_ushort
(
BYTE
**
ptr
)
static
unsigned
short
fetch_ushort
(
const
BYTE
**
ptr
)
{
unsigned
short
ret
;
if
(
*
(
*
ptr
)
&
1
)
{
ret
=
*
(
unsigned
short
*
)(
*
ptr
)
/
2
;
ret
=
*
(
const
unsigned
short
*
)(
*
ptr
)
/
2
;
(
*
ptr
)
+=
2
;
}
else
{
ret
=
*
(
unsigned
char
*
)(
*
ptr
)
/
2
;
ret
=
*
(
const
unsigned
char
*
)(
*
ptr
)
/
2
;
(
*
ptr
)
++
;
}
return
ret
;
...
...
@@ -530,9 +530,9 @@ static unsigned short fetch_ushort(BYTE** ptr)
*
* HLPFILE_SkipParagraph
*/
static
BOOL
HLPFILE_SkipParagraph
(
HLPFILE
*
hlpfile
,
BYTE
*
buf
,
BYTE
*
end
,
unsigned
*
len
)
static
BOOL
HLPFILE_SkipParagraph
(
HLPFILE
*
hlpfile
,
const
BYTE
*
buf
,
const
BYTE
*
end
,
unsigned
*
len
)
{
BYTE
*
tmp
;
const
BYTE
*
tmp
;
if
(
!
hlpfile
->
first_page
)
{
WINE_WARN
(
"no page
\n
"
);
return
FALSE
;};
if
(
buf
+
0x19
>
end
)
{
WINE_WARN
(
"header too small
\n
"
);
return
FALSE
;};
...
...
@@ -553,9 +553,10 @@ static BOOL HLPFILE_SkipParagraph(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsign
*
* Decompress the data part of a bitmap or a metafile
*/
static
BYTE
*
HLPFILE_DecompressGfx
(
BYTE
*
src
,
unsigned
csz
,
unsigned
sz
,
BYTE
packing
)
static
const
BYTE
*
HLPFILE_DecompressGfx
(
const
BYTE
*
src
,
unsigned
csz
,
unsigned
sz
,
BYTE
packing
,
BYTE
**
alloc
)
{
BYTE
*
dst
;
const
BYTE
*
dst
;
BYTE
*
tmp
;
unsigned
sz77
;
...
...
@@ -567,17 +568,18 @@ static BYTE* HLPFILE_DecompressGfx(BYTE* src, unsigned csz, unsigned sz, BYTE
if
(
sz
!=
csz
)
WINE_WARN
(
"Bogus gfx sizes (uncompressed): %u / %u
\n
"
,
sz
,
csz
);
dst
=
src
;
*
alloc
=
NULL
;
break
;
case
1
:
/* RunLen */
dst
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sz
);
dst
=
*
alloc
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sz
);
if
(
!
dst
)
return
NULL
;
HLPFILE_UncompressRLE
(
src
,
src
+
csz
,
dst
,
sz
);
HLPFILE_UncompressRLE
(
src
,
src
+
csz
,
*
alloc
,
sz
);
break
;
case
2
:
/* LZ77 */
sz77
=
HLPFILE_UncompressedLZ77_Size
(
src
,
src
+
csz
);
dst
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sz77
);
dst
=
*
alloc
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sz77
);
if
(
!
dst
)
return
NULL
;
HLPFILE_UncompressLZ77
(
src
,
src
+
csz
,
dst
);
HLPFILE_UncompressLZ77
(
src
,
src
+
csz
,
*
alloc
);
if
(
sz77
!=
sz
)
WINE_WARN
(
"Bogus gfx sizes (LZ77): %u / %u
\n
"
,
sz77
,
sz
);
break
;
...
...
@@ -586,13 +588,13 @@ static BYTE* HLPFILE_DecompressGfx(BYTE* src, unsigned csz, unsigned sz, BYTE
tmp
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sz77
);
if
(
!
tmp
)
return
FALSE
;
HLPFILE_UncompressLZ77
(
src
,
src
+
csz
,
tmp
);
dst
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sz
);
dst
=
*
alloc
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sz
);
if
(
!
dst
)
{
HeapFree
(
GetProcessHeap
(),
0
,
tmp
);
return
FALSE
;
}
HLPFILE_UncompressRLE
(
tmp
,
tmp
+
sz77
,
dst
,
sz
);
HLPFILE_UncompressRLE
(
tmp
,
tmp
+
sz77
,
*
alloc
,
sz
);
HeapFree
(
GetProcessHeap
(),
0
,
tmp
);
break
;
default:
...
...
@@ -774,10 +776,11 @@ static BOOL HLPFILE_RtfAddTransparentBitmap(struct RtfData* rd, const BITMAPINFO
* HLPFILE_RtfAddBitmap
*
*/
static
BOOL
HLPFILE_RtfAddBitmap
(
struct
RtfData
*
rd
,
BYTE
*
beg
,
BYTE
type
,
BYTE
pack
)
static
BOOL
HLPFILE_RtfAddBitmap
(
struct
RtfData
*
rd
,
const
BYTE
*
beg
,
BYTE
type
,
BYTE
pack
)
{
BYTE
*
ptr
;
BYTE
*
pict_beg
;
const
BYTE
*
ptr
;
const
BYTE
*
pict_beg
;
BYTE
*
alloc
=
NULL
;
BITMAPINFO
*
bi
;
unsigned
long
off
,
csz
;
unsigned
nc
=
0
;
...
...
@@ -835,7 +838,7 @@ static BOOL HLPFILE_RtfAddBitmap(struct RtfData* rd, BYTE* beg, BYTE type, BYTE
ptr
+=
4
;
}
}
pict_beg
=
HLPFILE_DecompressGfx
(
beg
+
off
,
csz
,
bi
->
bmiHeader
.
biSizeImage
,
pack
);
pict_beg
=
HLPFILE_DecompressGfx
(
beg
+
off
,
csz
,
bi
->
bmiHeader
.
biSizeImage
,
pack
,
&
alloc
);
if
(
clrImportant
==
1
&&
nc
>
0
)
{
...
...
@@ -863,7 +866,7 @@ static BOOL HLPFILE_RtfAddBitmap(struct RtfData* rd, BYTE* beg, BYTE type, BYTE
ret
=
TRUE
;
done:
HeapFree
(
GetProcessHeap
(),
0
,
bi
);
if
(
pict_beg
!=
beg
+
off
)
HeapFree
(
GetProcessHeap
(),
0
,
pict_beg
);
HeapFree
(
GetProcessHeap
(),
0
,
alloc
);
return
ret
;
}
...
...
@@ -872,12 +875,13 @@ done:
* HLPFILE_RtfAddMetaFile
*
*/
static
BOOL
HLPFILE_RtfAddMetaFile
(
struct
RtfData
*
rd
,
BYTE
*
beg
,
BYTE
pack
)
static
BOOL
HLPFILE_RtfAddMetaFile
(
struct
RtfData
*
rd
,
const
BYTE
*
beg
,
BYTE
pack
)
{
BYTE
*
ptr
;
const
BYTE
*
ptr
;
unsigned
long
size
,
csize
;
unsigned
long
off
,
hsoff
;
BYTE
*
bits
;
const
BYTE
*
bits
;
BYTE
*
alloc
=
NULL
;
char
tmp
[
256
];
unsigned
mm
;
BOOL
ret
;
...
...
@@ -902,13 +906,13 @@ static BOOL HLPFILE_RtfAddMetaFile(struct RtfData* rd, BYTE* beg, BYTE pack)
WINE_TRACE
(
"sz=%lu csz=%lu offs=%lu/%u,%lu
\n
"
,
size
,
csize
,
off
,
ptr
-
beg
,
hsoff
);
bits
=
HLPFILE_DecompressGfx
(
beg
+
off
,
csize
,
size
,
pack
);
bits
=
HLPFILE_DecompressGfx
(
beg
+
off
,
csize
,
size
,
pack
,
&
alloc
);
if
(
!
bits
)
return
FALSE
;
ret
=
HLPFILE_RtfAddHexBytes
(
rd
,
bits
,
size
)
&&
HLPFILE_RtfAddControl
(
rd
,
"}"
);
if
(
bits
!=
beg
+
off
)
HeapFree
(
GetProcessHeap
(),
0
,
bits
);
HeapFree
(
GetProcessHeap
(),
0
,
alloc
);
return
ret
;
}
...
...
@@ -918,7 +922,7 @@ static BOOL HLPFILE_RtfAddMetaFile(struct RtfData* rd, BYTE* beg, BYTE pack)
*
*/
static
BOOL
HLPFILE_RtfAddGfxByAddr
(
struct
RtfData
*
rd
,
HLPFILE
*
hlpfile
,
BYTE
*
ref
,
unsigned
long
size
)
const
BYTE
*
ref
,
unsigned
long
size
)
{
unsigned
i
,
numpict
;
...
...
@@ -927,9 +931,9 @@ static BOOL HLPFILE_RtfAddGfxByAddr(struct RtfData* rd, HLPFILE *hlpfile,
for
(
i
=
0
;
i
<
numpict
;
i
++
)
{
BYTE
*
beg
;
BYTE
*
ptr
;
BYTE
type
,
pack
;
const
BYTE
*
beg
;
const
BYTE
*
ptr
;
BYTE
type
,
pack
;
WINE_TRACE
(
"Offset[%d] = %x
\n
"
,
i
,
GET_UINT
(
ref
,
(
1
+
i
)
*
4
));
beg
=
ptr
=
ref
+
GET_UINT
(
ref
,
(
1
+
i
)
*
4
);
...
...
@@ -1038,7 +1042,7 @@ static BOOL HLPFILE_BrowseParagraph(HLPFILE_PAGE* page, struct RtfData* rd,
BYTE
*
buf
,
BYTE
*
end
,
unsigned
*
parlen
)
{
UINT
textsize
;
BYTE
*
format
,
*
format_end
;
const
BYTE
*
format
,
*
format_end
;
char
*
text
,
*
text_base
,
*
text_end
;
long
size
,
blocksize
,
datalen
;
unsigned
short
bits
;
...
...
@@ -1991,7 +1995,7 @@ static BOOL HLPFILE_SystemCommands(HLPFILE* hlpfile)
*
* HLPFILE_UncompressedLZ77_Size
*/
static
INT
HLPFILE_UncompressedLZ77_Size
(
BYTE
*
ptr
,
BYTE
*
end
)
static
INT
HLPFILE_UncompressedLZ77_Size
(
const
BYTE
*
ptr
,
const
BYTE
*
end
)
{
int
i
,
newsize
=
0
;
...
...
@@ -2018,7 +2022,7 @@ static INT HLPFILE_UncompressedLZ77_Size(BYTE *ptr, BYTE *end)
*
* HLPFILE_UncompressLZ77
*/
static
BYTE
*
HLPFILE_UncompressLZ77
(
BYTE
*
ptr
,
BYTE
*
end
,
BYTE
*
newptr
)
static
BYTE
*
HLPFILE_UncompressLZ77
(
const
BYTE
*
ptr
,
const
BYTE
*
end
,
BYTE
*
newptr
)
{
int
i
;
...
...
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