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
cfbe32d5
Commit
cfbe32d5
authored
Oct 15, 2022
by
Piotr Caban
Committed by
Alexandre Julliard
Oct 17, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winedump: Add initial EMF spool files support.
parent
60f1436e
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
163 additions
and
1 deletion
+163
-1
Makefile.in
tools/winedump/Makefile.in
+1
-0
dump.c
tools/winedump/dump.c
+1
-0
emfspool.c
tools/winedump/emfspool.c
+158
-0
winedump.h
tools/winedump/winedump.h
+3
-1
No files found.
tools/winedump/Makefile.in
View file @
cfbe32d5
...
...
@@ -7,6 +7,7 @@ C_SRCS = \
dos.c
\
dump.c
\
emf.c
\
emfspool.c
\
font.c
\
le.c
\
lib.c
\
...
...
tools/winedump/dump.c
View file @
cfbe32d5
...
...
@@ -255,6 +255,7 @@ dumpers[] =
{
SIG_MDMP
,
get_kind_mdmp
,
mdmp_dump
},
{
SIG_LNK
,
get_kind_lnk
,
lnk_dump
},
{
SIG_EMF
,
get_kind_emf
,
emf_dump
},
{
SIG_EMFSPOOL
,
get_kind_emfspool
,
emfspool_dump
},
{
SIG_MF
,
get_kind_mf
,
mf_dump
},
{
SIG_FNT
,
get_kind_fnt
,
fnt_dump
},
{
SIG_TLB
,
get_kind_tlb
,
tlb_dump
},
...
...
tools/winedump/emfspool.c
0 → 100644
View file @
cfbe32d5
/*
* Dump an EMF Spool File
*
* Copyright 2022 Piotr Caban for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "winedump.h"
#define EMFSPOOL_VERSION 0x10000
typedef
enum
{
EMRI_METAFILE
=
1
,
EMRI_ENGINE_FONT
,
EMRI_DEVMODE
,
EMRI_TYPE1_FONT
,
EMRI_PRESTARTPAGE
,
EMRI_DESIGNVECTOR
,
EMRI_SUBSET_FONT
,
EMRI_DELTA_FONT
,
EMRI_FORM_METAFILE
,
EMRI_BW_METAFILE
,
EMRI_BW_FORM_METAFILE
,
EMRI_METAFILE_DATA
,
EMRI_METAFILE_EXT
,
EMRI_BW_METAFILE_EXT
,
EMRI_ENGINE_FONT_EXT
,
EMRI_TYPE1_FONT_EXT
,
EMRI_DESIGNVECTOR_EXT
,
EMRI_SUBSET_FONT_EXT
,
EMRI_DELTA_FONT_EXT
,
EMRI_PS_JOB_DATA
,
EMRI_EMBED_FONT_EXT
,
}
record_type
;
typedef
struct
{
unsigned
int
dwVersion
;
unsigned
int
cjSize
;
unsigned
int
dpszDocName
;
unsigned
int
dpszOutput
;
}
header
;
typedef
struct
{
unsigned
int
ulID
;
unsigned
int
cjSize
;
}
record_hdr
;
static
const
WCHAR
*
read_wstr
(
unsigned
long
off
)
{
const
WCHAR
*
beg
,
*
end
;
if
(
!
off
)
return
NULL
;
beg
=
end
=
PRD
(
off
,
sizeof
(
WCHAR
));
off
+=
sizeof
(
WCHAR
);
if
(
!
beg
)
fatal
(
"can't read Unicode string, corrupted file
\n
"
);
while
(
*
end
)
{
end
=
PRD
(
off
,
sizeof
(
WCHAR
));
off
+=
sizeof
(
WCHAR
);
if
(
!
end
)
fatal
(
"can't read Unicode string, corrupted file
\n
"
);
}
return
beg
;
}
#define EMRICASE(x) case x: printf("%-24s %08x\n", #x, hdr->cjSize); break
static
unsigned
long
dump_emfspool_record
(
unsigned
long
off
)
{
const
record_hdr
*
hdr
;
hdr
=
PRD
(
off
,
sizeof
(
*
hdr
));
if
(
!
hdr
)
return
0
;
switch
(
hdr
->
ulID
)
{
EMRICASE
(
EMRI_METAFILE
);
EMRICASE
(
EMRI_ENGINE_FONT
);
EMRICASE
(
EMRI_DEVMODE
);
EMRICASE
(
EMRI_TYPE1_FONT
);
EMRICASE
(
EMRI_PRESTARTPAGE
);
EMRICASE
(
EMRI_DESIGNVECTOR
);
EMRICASE
(
EMRI_SUBSET_FONT
);
EMRICASE
(
EMRI_DELTA_FONT
);
EMRICASE
(
EMRI_FORM_METAFILE
);
EMRICASE
(
EMRI_BW_METAFILE
);
EMRICASE
(
EMRI_BW_FORM_METAFILE
);
EMRICASE
(
EMRI_METAFILE_DATA
);
EMRICASE
(
EMRI_METAFILE_EXT
);
EMRICASE
(
EMRI_BW_METAFILE_EXT
);
EMRICASE
(
EMRI_ENGINE_FONT_EXT
);
EMRICASE
(
EMRI_TYPE1_FONT_EXT
);
EMRICASE
(
EMRI_DESIGNVECTOR_EXT
);
EMRICASE
(
EMRI_SUBSET_FONT_EXT
);
EMRICASE
(
EMRI_DELTA_FONT_EXT
);
EMRICASE
(
EMRI_PS_JOB_DATA
);
EMRICASE
(
EMRI_EMBED_FONT_EXT
);
default:
printf
(
"%u %08x
\n
"
,
hdr
->
ulID
,
hdr
->
cjSize
);
break
;
}
dump_data
((
const
unsigned
char
*
)(
hdr
+
1
),
hdr
->
cjSize
,
""
);
return
off
+
sizeof
(
*
hdr
)
+
hdr
->
cjSize
;
}
enum
FileSig
get_kind_emfspool
(
void
)
{
const
header
*
hdr
;
hdr
=
PRD
(
0
,
sizeof
(
*
hdr
));
if
(
hdr
&&
hdr
->
dwVersion
==
EMFSPOOL_VERSION
)
return
SIG_EMFSPOOL
;
return
SIG_UNKNOWN
;
}
void
emfspool_dump
(
void
)
{
const
WCHAR
*
doc_name
,
*
output
;
unsigned
long
off
;
const
header
*
hdr
;
hdr
=
PRD
(
0
,
sizeof
(
*
hdr
));
if
(
!
hdr
)
return
;
doc_name
=
read_wstr
(
hdr
->
dpszDocName
);
output
=
read_wstr
(
hdr
->
dpszOutput
);
printf
(
"File Header
\n
"
);
printf
(
" %-20s %#x
\n
"
,
"dwVersion:"
,
hdr
->
dwVersion
);
printf
(
" %-20s %#x
\n
"
,
"cjSize:"
,
hdr
->
cjSize
);
printf
(
" %-20s %#x %s
\n
"
,
"dpszDocName:"
,
hdr
->
dpszDocName
,
get_unicode_str
(
doc_name
,
-
1
));
printf
(
" %-20s %#x %s
\n
"
,
"dpszOutput:"
,
hdr
->
dpszOutput
,
get_unicode_str
(
output
,
-
1
));
printf
(
"
\n
"
);
off
=
hdr
->
cjSize
;
while
((
off
=
dump_emfspool_record
(
off
)));
}
tools/winedump/winedump.h
View file @
cfbe32d5
...
...
@@ -214,7 +214,7 @@ const char *get_machine_str(int mach);
/* file dumping functions */
enum
FileSig
{
SIG_UNKNOWN
,
SIG_DOS
,
SIG_PE
,
SIG_DBG
,
SIG_PDB
,
SIG_NE
,
SIG_LE
,
SIG_MDMP
,
SIG_COFFLIB
,
SIG_LNK
,
SIG_EMF
,
SIG_MF
,
SIG_FNT
,
SIG_TLB
,
SIG_NLS
};
SIG_EMF
,
SIG_
EMFSPOOL
,
SIG_
MF
,
SIG_FNT
,
SIG_TLB
,
SIG_NLS
};
const
void
*
PRD
(
unsigned
long
prd
,
unsigned
long
len
);
unsigned
long
Offset
(
const
void
*
ptr
);
...
...
@@ -249,6 +249,8 @@ enum FileSig get_kind_lnk(void);
void
lnk_dump
(
void
);
enum
FileSig
get_kind_emf
(
void
);
void
emf_dump
(
void
);
enum
FileSig
get_kind_emfspool
(
void
);
void
emfspool_dump
(
void
);
enum
FileSig
get_kind_mf
(
void
);
void
mf_dump
(
void
);
enum
FileSig
get_kind_pdb
(
void
);
...
...
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