tools: Remove the no longer needed bin2res tool.
This commit is contained in:
parent
eb03098681
commit
b64ceefde3
|
@ -752,7 +752,6 @@ programs/xcopy/xcopy
|
|||
server/wineserver
|
||||
server/wineserver-installed
|
||||
server/wineserver.man
|
||||
tools/bin2res
|
||||
tools/fnt2bdf
|
||||
tools/fnt2fon
|
||||
tools/make_ctests
|
||||
|
|
|
@ -67,7 +67,6 @@ WINEBUILD = $(TOOLSDIR)/tools/winebuild/winebuild
|
|||
MAKEDEP = $(TOOLSDIR)/tools/makedep
|
||||
MAKECTESTS = $(TOOLSDIR)/tools/make_ctests
|
||||
WRC = $(TOOLSDIR)/tools/wrc/wrc
|
||||
BIN2RES = $(TOOLSDIR)/tools/bin2res
|
||||
WMC = $(TOOLSDIR)/tools/wmc/wmc
|
||||
WIDL = $(TOOLSDIR)/tools/widl/widl
|
||||
WINEGCC = $(TOOLSDIR)/tools/winegcc/winegcc
|
||||
|
@ -196,10 +195,7 @@ filter: dummy
|
|||
|
||||
# Rules for resources
|
||||
|
||||
$(RC_BINARIES): $(BIN2RES) $(RC_BINSRC)
|
||||
$(BIN2RES) -f -o $@ $(SRCDIR)/$(RC_BINSRC)
|
||||
|
||||
$(RC_SRCS:.rc=.res) $(RC_SRCS16:.rc=.res): $(WRC) $(RC_BINARIES) $(IDL_TLB_SRCS:.idl=.tlb)
|
||||
$(RC_SRCS:.rc=.res) $(RC_SRCS16:.rc=.res): $(WRC) $(IDL_TLB_SRCS:.idl=.tlb)
|
||||
|
||||
# Rule for linting
|
||||
|
||||
|
@ -242,7 +238,7 @@ $(EXTRASUBDIRS:%=%/__clean__): dummy
|
|||
-cd `dirname $@` && $(RM) $(CLEAN_FILES)
|
||||
|
||||
clean:: $(SUBDIRS:%=%/__clean__) $(EXTRASUBDIRS:%=%/__clean__)
|
||||
$(RM) $(CLEAN_FILES) $(CLEAN_TARGETS) $(PROGRAMS) $(RC_BINARIES) $(MANPAGES)
|
||||
$(RM) $(CLEAN_FILES) $(CLEAN_TARGETS) $(PROGRAMS) $(MANPAGES)
|
||||
|
||||
.PHONY: clean $(SUBDIRS:%=%/__clean__) $(EXTRASUBDIRS:%=%/__clean__)
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@ EXTRAINCL = @FREETYPEINCL@
|
|||
FREETYPELIBS = @FREETYPELIBS@
|
||||
|
||||
PROGRAMS = \
|
||||
bin2res$(EXEEXT) \
|
||||
fnt2bdf$(EXEEXT) \
|
||||
fnt2fon$(EXEEXT) \
|
||||
make_ctests$(EXEEXT) \
|
||||
|
@ -22,7 +21,6 @@ MANPAGES = \
|
|||
wineprefixcreate.man
|
||||
|
||||
C_SRCS = \
|
||||
bin2res.c \
|
||||
fnt2bdf.c \
|
||||
fnt2fon.c \
|
||||
make_ctests.c \
|
||||
|
@ -72,9 +70,6 @@ relpath$(EXEEXT): relpath.o
|
|||
sfnt2fnt$(EXEEXT): sfnt2fnt.o relpath$(EXEEXT)
|
||||
$(CC) $(CFLAGS) -o $@ sfnt2fnt.o $(LIBWINE) $(LIBPORT) $(LDFLAGS) $(FREETYPELIBS) $(LDRPATH_LOCAL)
|
||||
|
||||
bin2res$(EXEEXT): bin2res.o
|
||||
$(CC) $(CFLAGS) -o $@ bin2res.o $(LIBPORT) $(LDFLAGS)
|
||||
|
||||
wineprefixcreate: wineprefixcreate.in relpath$(EXEEXT)
|
||||
sed -e "s,@bintodlldir\@,`$(RELPATH) $(bindir) $(dlldir)`,g" -e "s,@bintodatadir\@,`$(RELPATH) $(bindir) $(datadir)/wine`,g" $(SRCDIR)/wineprefixcreate.in >$@ || ($(RM) $@ && false)
|
||||
chmod +x wineprefixcreate
|
||||
|
|
283
tools/bin2res.c
283
tools/bin2res.c
|
@ -1,283 +0,0 @@
|
|||
/************************************************
|
||||
*
|
||||
* Converting binary resources from/to *.rc files
|
||||
*
|
||||
* Copyright 1999 Juergen Schmied
|
||||
* Copyright 2003 Dimitrie O. Paun
|
||||
*
|
||||
* 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 "config.h"
|
||||
#include "wine/port.h"
|
||||
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <limits.h>
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
|
||||
static const char *clean_file;
|
||||
|
||||
static const char* help =
|
||||
"Usage: bin2res [OPTIONS] <rsrc.rc>\n"
|
||||
" -a archive binaries into the <rsrc.rc> file\n"
|
||||
" -x extract binaries from the <rsrc.rc> file\n"
|
||||
" -i <filename> archive the named file into the <rsrc.rc> file\n"
|
||||
" -o <filename> extract the named file from the <rsrc.rc> file\n"
|
||||
" -f force processing of older resources\n"
|
||||
" -v causes the command to be verbous during processing\n"
|
||||
" -h print this help screen and exit\n"
|
||||
"\n"
|
||||
"This tool allows the insertion/extractions of embedded binary\n"
|
||||
"resources to/from .rc files, for storage within the cvs tree.\n"
|
||||
"This is accomplished by placing a magic marker in a comment\n"
|
||||
"just above the resource. The marker consists of the BINRES\n"
|
||||
"string followed by the file name. For example, to insert a\n"
|
||||
"brand new binary resource in a .rc file, place the marker\n"
|
||||
"above empty brackets:\n"
|
||||
" /* BINRES idb_std_small.bmp */\n"
|
||||
" IDB_STD_SMALL BITMAP idb_std_small.bmp\n"
|
||||
" /* {\n"
|
||||
" } */\n"
|
||||
"To merge the binary resources into the .rc file, run:\n"
|
||||
" bin2res -a myrsrc.rc\n"
|
||||
"Only resources that are newer than the .rc are processed.\n"
|
||||
"To extract the binary resources from the .rc file, run:\n"
|
||||
" bin2res -x myrsrc.rc\n"
|
||||
"Binary files newer than the .rc file are not overwritten.\n"
|
||||
"\n"
|
||||
"To force processing of all resources, use the -f flag.\n"
|
||||
"To process a particular file, use the -i/-o options.\n";
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
printf(help);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static void cleanup_files(void)
|
||||
{
|
||||
if (clean_file) unlink( clean_file );
|
||||
}
|
||||
|
||||
static void exit_on_signal( int sig )
|
||||
{
|
||||
exit(1); /* this will call the atexit functions */
|
||||
}
|
||||
|
||||
static int insert_hexdump (FILE* outfile, FILE* infile)
|
||||
{
|
||||
int i, c;
|
||||
|
||||
fprintf (outfile, "{\n '");
|
||||
for (i = 0; (c = fgetc(infile)) != EOF; i++)
|
||||
{
|
||||
if (i && (i % 16) == 0) fprintf (outfile, "'\n '");
|
||||
if (i % 16) fprintf (outfile, " ");
|
||||
fprintf(outfile, "%02X", c);
|
||||
}
|
||||
fprintf (outfile, "'\n}");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int hex2bin(char c)
|
||||
{
|
||||
if (!isxdigit(c)) return -1024;
|
||||
if (isdigit(c)) return c - '0';
|
||||
return toupper(c) - 'A' + 10;
|
||||
}
|
||||
|
||||
static int extract_hexdump (FILE* outfile, FILE* infile)
|
||||
{
|
||||
int byte, c;
|
||||
|
||||
while ( (c = fgetc(infile)) != EOF && c != '}')
|
||||
{
|
||||
if (isspace(c) || c == '\'') continue;
|
||||
byte = 16 * hex2bin(c);
|
||||
c = fgetc(infile);
|
||||
if (c == EOF) return 0;
|
||||
byte += hex2bin(c);
|
||||
if (byte < 0) return 0;
|
||||
fputc(byte, outfile);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static const char* parse_marker(const char *line, time_t* last_updated)
|
||||
{
|
||||
static char res_file_name[PATH_MAX], *rpos, *wpos;
|
||||
struct stat st;
|
||||
|
||||
if (!(rpos = strstr(line, "BINRES"))) return 0;
|
||||
for (rpos += 6; *rpos && isspace(*rpos); rpos++) /**/;
|
||||
for (wpos = res_file_name; *rpos && !isspace(*rpos); ) *wpos++ = *rpos++;
|
||||
*wpos = 0;
|
||||
|
||||
*last_updated = (stat(res_file_name, &st) < 0) ? 0 : st.st_mtime;
|
||||
|
||||
return res_file_name;
|
||||
}
|
||||
|
||||
static int process_resources(const char* input_file_name, const char* specific_file_name,
|
||||
int inserting, int force_processing, int verbose)
|
||||
{
|
||||
char buffer[2048], tmp_file_name[PATH_MAX];
|
||||
const char *res_file_name;
|
||||
time_t rc_last_update, res_last_update;
|
||||
FILE *fin, *fres, *ftmp = 0;
|
||||
struct stat st;
|
||||
int fd, c;
|
||||
|
||||
if (!(fin = fopen(input_file_name, "r"))) return 0;
|
||||
if (fstat(fileno(fin), &st) < 0) {
|
||||
fclose (fin);
|
||||
return 0;
|
||||
}
|
||||
rc_last_update = st.st_mtime;
|
||||
|
||||
if (inserting)
|
||||
{
|
||||
strcpy(tmp_file_name, input_file_name);
|
||||
strcat(tmp_file_name, "-XXXXXX.temp");
|
||||
if ((fd = mkstemps(tmp_file_name, 5)) == -1)
|
||||
{
|
||||
strcpy(tmp_file_name, "/tmp/bin2res-XXXXXX.temp");
|
||||
if ((fd = mkstemps(tmp_file_name, 5)) == -1) return 0;
|
||||
}
|
||||
clean_file = tmp_file_name;
|
||||
if (!(ftmp = fdopen(fd, "w"))) return 0;
|
||||
}
|
||||
|
||||
for (c = EOF; fgets(buffer, sizeof(buffer), fin); c = EOF)
|
||||
{
|
||||
if (inserting) fprintf(ftmp, "%s", buffer);
|
||||
if (!(res_file_name = parse_marker(buffer, &res_last_update))) continue;
|
||||
if ( (specific_file_name && strcmp(specific_file_name, res_file_name)) ||
|
||||
(!force_processing && ((rc_last_update < res_last_update) == !inserting)) )
|
||||
{
|
||||
if (verbose) printf("skipping '%s'\n", res_file_name);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (verbose) printf("processing '%s'\n", res_file_name);
|
||||
while ( (c = fgetc(fin)) != EOF && c != '{')
|
||||
if (inserting) fputc(c, ftmp);
|
||||
if (c == EOF) break;
|
||||
|
||||
if (inserting)
|
||||
{
|
||||
if (!(fres = fopen(res_file_name, "rb"))) break;
|
||||
if (!insert_hexdump(ftmp, fres)) break;
|
||||
while ( (c = fgetc(fin)) != EOF && c != '}') /**/;
|
||||
fclose(fres);
|
||||
}
|
||||
else
|
||||
{
|
||||
clean_file = res_file_name;
|
||||
if (!(fres = fopen(res_file_name, "wb"))) break;
|
||||
if (!extract_hexdump(fres, fin)) break;
|
||||
fclose(fres);
|
||||
clean_file = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(fin);
|
||||
|
||||
if (inserting)
|
||||
{
|
||||
fclose(ftmp);
|
||||
if (c == EOF)
|
||||
{
|
||||
if (rename(tmp_file_name, input_file_name) < 0)
|
||||
{
|
||||
/* try unlinking first, Windows rename is brain-damaged */
|
||||
if (unlink(input_file_name) < 0 || rename(tmp_file_name, input_file_name) < 0)
|
||||
return 0;
|
||||
}
|
||||
clean_file = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return c == EOF;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int convert_dir = 0, optc;
|
||||
int force_overwrite = 0, verbose = 0;
|
||||
const char* input_file_name = 0;
|
||||
const char* specific_file_name = 0;
|
||||
|
||||
atexit( cleanup_files );
|
||||
signal( SIGTERM, exit_on_signal );
|
||||
signal( SIGINT, exit_on_signal );
|
||||
#ifdef SIGHUP
|
||||
signal( SIGHUP, exit_on_signal );
|
||||
#endif
|
||||
|
||||
while((optc = getopt(argc, argv, "axi:o:fhv")) != EOF)
|
||||
{
|
||||
switch(optc)
|
||||
{
|
||||
case 'a':
|
||||
case 'x':
|
||||
if (convert_dir) usage();
|
||||
convert_dir = optc;
|
||||
break;
|
||||
case 'i':
|
||||
case 'o':
|
||||
if (specific_file_name) usage();
|
||||
specific_file_name = optarg;
|
||||
optc = ((optc == 'i') ? 'a' : 'x');
|
||||
if (convert_dir && convert_dir != optc) usage();
|
||||
convert_dir = optc;
|
||||
break;
|
||||
case 'f':
|
||||
force_overwrite = 1;
|
||||
break;
|
||||
case 'v':
|
||||
verbose = 1;
|
||||
break;
|
||||
case 'h':
|
||||
printf(help);
|
||||
exit(0);
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
}
|
||||
}
|
||||
|
||||
if (optind + 1 != argc) usage();
|
||||
input_file_name = argv[optind];
|
||||
|
||||
if (!convert_dir) usage();
|
||||
|
||||
if (!process_resources(input_file_name, specific_file_name,
|
||||
convert_dir == 'a', force_overwrite, verbose))
|
||||
{
|
||||
perror("Processing failed");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue