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
04f7fe7d
Commit
04f7fe7d
authored
Nov 13, 1999
by
Juergen Schmied
Committed by
Alexandre Julliard
Nov 13, 1999
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New tool to convert the binary resources in *.rc files (hexdumps) from
and to a binary.
parent
b9010214
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
342 additions
and
2 deletions
+342
-2
resources
documentation/resources
+45
-0
.cvsignore
tools/.cvsignore
+1
-0
Makefile.in
tools/Makefile.in
+5
-2
bin2res.c
tools/bin2res.c
+291
-0
No files found.
documentation/resources
0 → 100644
View file @
04f7fe7d
This document desribes tools for handling resources within wine
### bin2res ###
This tool allows the editing of embeded binary resources within
*.rc files. These resources are stored as hex dump so they can be
stored within the cvs. This makes the editing of the embeded
bitmaps and icons harder.
### Create binary files from.rc ###
the resources in the.rc file has to be marked by a header:
/* BINRES idb_std_small.bmp */
IDB_STD_SMALL BITMAP LOADONCALL DISCARDABLE
{
'42 4D 20 07 00 00 00 00 00 00 76 00 00 00 28 00'
BINRES is the keyword followed by a filename.
"bin2res -d bin rsrc.rc" generates binary files from all marked
resources. If the binary file is newer it gets not overwritten.
To force overwriting use the -f switch.
### Create a .rc file from binaries ###
Put a header followed by empty brackets in the.rc file.
/* BINRES idb_std_small.bmp */
{}
Then run "bin2res rsrc.rc". It will merge the resources into the
.rc file if the binary resources are newer than the.rc file.
To force the resources into the.rc file use the -f switch.
If there is already a resource with the same filename in the.rc
file it gets overwritten.
### output of bin2res ###
bash-2.03# ../../tools/bin2res -d bin shres.rc
[000.ico:c][003.ico:c][008.ico:s][015.ico:s][034.ico:s]
s means skiped, c means changed
---
juergen.schmied@debitel.net (11/99)
tools/.cvsignore
View file @
04f7fe7d
Makefile
bin2res
build
fnt2bdf
makedep
tools/Makefile.in
View file @
04f7fe7d
...
...
@@ -4,10 +4,10 @@ TOPOBJDIR = ..
SRCDIR
=
@srcdir@
VPATH
=
@srcdir@
PROGRAMS
=
build@PROGEXT@ makedep@PROGEXT@ fnt2bdf@PROGEXT@
PROGRAMS
=
build@PROGEXT@ makedep@PROGEXT@ fnt2bdf@PROGEXT@
bin2res@PROGEXT@
MODULE
=
none
C_SRCS
=
build.c makedep.c fnt2bdf.c
C_SRCS
=
build.c makedep.c fnt2bdf.c
bin2res.c
all
:
$(PROGRAMS)
...
...
@@ -22,4 +22,7 @@ makedep@PROGEXT@: makedep.o
fnt2bdf@PROGEXT@
:
fnt2bdf.o
$(CC)
$(CFLAGS)
-o
fnt2bdf@PROGEXT@ fnt2bdf.o
bin2res@PROGEXT@
:
bin2res.o
$(CC)
$(CFLAGS)
-o
bin2res@PROGEXT@ bin2res.o
### Dependencies:
tools/bin2res.c
0 → 100644
View file @
04f7fe7d
/************************************************
*
* Converting binary resources from/to *.rc files
*
* Copyright 1999 Juergen Schmied
*
* 11/99 first release
*/
#include "config.h"
#ifdef HAVE_SYS_PARAM_H
# include <sys/param.h>
#endif
#include <sys/types.h>
#include <sys/stat.h>
#include <ctype.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include "winuser.h"
extern
char
*
g_lpstrFileName
;
/* global options */
char
*
g_lpstrFileName
=
NULL
;
char
*
g_lpstrInputFile
=
NULL
;
int
b_to_binary
=
0
;
int
b_force_overwrite
=
0
;
LPBYTE
p_in_file
=
NULL
;
static
char
*
errorOpenFile
=
"Unable to open file.
\n
"
;
static
char
*
errorRCFormat
=
"Unexpexted syntax in rc file line %i
\n
"
;
void
usage
(
void
)
{
printf
(
"Usage: bin2res [-d bin] [input file]
\n
"
);
printf
(
" -d bin convert a *.res back to a binary
\n
"
);
printf
(
" -f force overwriting newer files
\n
"
);
exit
(
-
1
);
}
void
parse_options
(
int
argc
,
char
**
argv
)
{
int
i
;
switch
(
argc
)
{
case
2
:
g_lpstrInputFile
=
argv
[
1
];
break
;
case
3
:
case
4
:
case
5
:
for
(
i
=
1
;
i
<
argc
-
1
;
i
++
)
{
if
(
argv
[
i
][
0
]
!=
'-'
||
strlen
(
argv
[
i
])
!=
2
)
break
;
if
(
argv
[
i
][
1
]
==
'd'
)
{
if
(
strcmp
(
"bin"
,
argv
[
i
+
1
])
==
0
)
{
b_to_binary
=
1
;
i
++
;
}
else
{
usage
();
}
}
else
if
(
argv
[
i
][
1
]
==
'f'
)
{
b_force_overwrite
=
1
;
}
else
{
usage
();
}
}
if
(
i
==
argc
-
1
)
{
g_lpstrInputFile
=
argv
[
i
];
break
;
}
default:
usage
();
}
}
int
insert_hex
(
char
*
infile
,
FILE
*
outfile
)
{
int
i
;
int
fd
;
struct
stat
st
;
if
(
(
fd
=
open
(
infile
,
O_RDONLY
))
==-
1
)
{
fprintf
(
stderr
,
errorOpenFile
);
exit
(
1
);
}
if
((
fstat
(
fd
,
&
st
)
==
-
1
)
||
(
p_in_file
=
mmap
(
NULL
,
st
.
st_size
,
PROT_READ
,
MAP_PRIVATE
,
fd
,
0
))
==
MAP_FAILED
)
{
fprintf
(
stderr
,
errorOpenFile
);
close
(
fd
);
exit
(
1
);
}
fprintf
(
outfile
,
"{
\n
'"
);
i
=
0
;
while
(
1
)
{
fprintf
(
outfile
,
"%02X"
,
p_in_file
[
i
]);
if
(
++
i
>=
st
.
st_size
)
break
;
fprintf
(
outfile
,
"%s"
,
(
i
==
(
i
&
0xfffffff0
))
?
"'
\n
'"
:
" "
);
}
fprintf
(
outfile
,
"'
\n
}
\n
"
);
munmap
(
p_in_file
,
st
.
st_size
);
close
(
fd
);
return
1
;
}
int
convert_to_res
()
{
FILE
*
fin
,
*
ftemp
;
char
buffer
[
255
];
char
infile
[
255
];
char
tmpfile
[
L_tmpnam
];
char
*
pos
;
int
c
,
len
;
struct
stat
st
;
int
line
=
0
;
time_t
tinput
;
long
startpos
,
endpos
;
tmpnam
(
tmpfile
);
if
(
(
ftemp
=
fopen
(
tmpfile
,
"w"
))
==
NULL
)
goto
error_open_file
;
if
(
(
fin
=
fopen
(
g_lpstrInputFile
,
"r"
))
==
NULL
||
stat
(
g_lpstrInputFile
,
&
st
))
goto
error_open_file
;
tinput
=
st
.
st_ctime
;
while
(
NULL
!=
fgets
(
buffer
,
255
,
fin
))
{
fputs
(
buffer
,
ftemp
);
line
++
;
if
(
(
pos
=
strstr
(
buffer
,
"BINRES"
))
!=
NULL
)
{
/* get the out-file name */
len
=
0
;
pos
+=
6
;
startpos
=
0
;
endpos
=
0
;
while
(
*
pos
==
' '
)
pos
++
;
while
(
pos
[
len
]
!=
' '
)
len
++
;
strncpy
(
infile
,
pos
,
len
);
infile
[
len
]
=
0
;
if
(
(
!
stat
(
infile
,
&
st
)
&&
st
.
st_ctime
>
tinput
)
||
b_force_overwrite
)
{
/* write a output file */
printf
(
"[%s:c]"
,
infile
);
while
((
c
=
fgetc
(
fin
))
!=
'{'
&&
c
!=
EOF
)
fputc
(
c
,
ftemp
);
if
(
c
==
EOF
)
goto
error_rc_format
;
while
((
c
=
fgetc
(
fin
))
!=
'}'
&&
c
!=
EOF
);
if
(
c
==
EOF
)
goto
error_rc_format
;
insert_hex
(
infile
,
ftemp
);
}
else
{
printf
(
"[%s:s]"
,
infile
);
}
}
}
fclose
(
fin
);
fclose
(
ftemp
);
if
(
rename
(
tmpfile
,
g_lpstrInputFile
)
==
-
1
)
{
perror
(
"rename"
);
unlink
(
tmpfile
);
return
0
;
}
return
1
;
error_open_file:
fprintf
(
stderr
,
errorOpenFile
);
return
0
;
error_rc_format:
fprintf
(
stderr
,
errorRCFormat
,
line
);
return
0
;
}
int
convert_to_bin
()
{
FILE
*
fin
,
*
fout
;
char
buffer
[
255
];
char
outfile
[
255
];
char
*
pos
;
int
len
,
index
,
in_resource
;
unsigned
int
byte
;
struct
stat
st
;
int
line
=
0
;
time_t
tinput
;
if
(
(
fin
=
fopen
(
g_lpstrInputFile
,
"r"
))
==
NULL
||
stat
(
g_lpstrInputFile
,
&
st
))
goto
error_open_file
;
tinput
=
st
.
st_ctime
;
while
(
NULL
!=
fgets
(
buffer
,
255
,
fin
))
{
line
++
;
if
(
(
pos
=
strstr
(
buffer
,
"BINRES"
))
!=
NULL
)
{
/* get the out-file name */
len
=
0
;
pos
+=
6
;
while
(
*
pos
==
' '
)
pos
++
;
while
(
pos
[
len
]
!=
' '
)
len
++
;
strncpy
(
outfile
,
pos
,
len
);
outfile
[
len
]
=
0
;
if
(
stat
(
outfile
,
&
st
)
||
st
.
st_ctime
<
tinput
||
b_force_overwrite
)
{
/* write a output file */
printf
(
"[%s:c]"
,
outfile
);
if
(
(
fout
=
fopen
(
outfile
,
"w"
))
==
NULL
)
goto
error_open_file
;
in_resource
=
0
;
while
(
1
)
{
if
(
NULL
==
fgets
(
buffer
,
255
,
fin
))
goto
error_rc_format
;
line
++
;
/* parse a line */
for
(
index
=
0
;
buffer
[
index
]
!=
0
;
index
++
)
{
if
(
!
in_resource
)
{
if
(
buffer
[
index
]
==
'{'
)
in_resource
=
1
;
continue
;
}
if
(
buffer
[
index
]
==
' '
||
buffer
[
index
]
==
'\''
||
buffer
[
index
]
==
'\n'
)
continue
;
if
(
buffer
[
index
]
==
'}'
)
goto
end_of_resource
;
if
(
!
isxdigit
(
buffer
[
index
]))
goto
error_rc_format
;
index
+=
sscanf
(
&
buffer
[
index
],
"%02x"
,
&
byte
);
fputc
(
byte
,
fout
);
}
}
fclose
(
fout
);
}
else
{
printf
(
"[%s:s]"
,
outfile
);
}
end_of_resource:
}
}
fclose
(
fin
);
return
1
;
error_open_file:
fprintf
(
stderr
,
errorOpenFile
);
return
0
;
error_rc_format:
fprintf
(
stderr
,
errorRCFormat
,
line
);
return
0
;
}
int
main
(
int
argc
,
char
**
argv
)
{
parse_options
(
argc
,
argv
);
if
(
b_to_binary
==
0
)
{
convert_to_res
();
}
else
{
convert_to_bin
();
}
printf
(
"
\n
"
);
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