summaryrefslogtreecommitdiffstats
path: root/tools/build
diff options
context:
space:
mode:
Diffstat (limited to 'tools/build')
-rw-r--r--tools/build/.cvsignore18
-rw-r--r--tools/build/ChangeLog209
-rw-r--r--tools/build/Makefile.am26
-rw-r--r--tools/build/README10
-rw-r--r--tools/build/binpatch.c156
-rw-r--r--tools/build/cklength.c377
-rw-r--r--tools/build/configure.ac26
-rwxr-xr-xtools/build/cvsignore-add.sh25
-rwxr-xr-xtools/build/doxy-filter21
-rw-r--r--tools/build/eolstrip.c366
-rw-r--r--tools/build/install-if-change.in142
-rwxr-xr-xtools/build/multigen173
-rw-r--r--tools/build/packhex.c565
-rw-r--r--tools/build/rtems-bin2c.c291
-rwxr-xr-xtools/build/search-id.sh15
-rw-r--r--tools/build/unhex.c737
16 files changed, 0 insertions, 3157 deletions
diff --git a/tools/build/.cvsignore b/tools/build/.cvsignore
deleted file mode 100644
index d0e6e41377..0000000000
--- a/tools/build/.cvsignore
+++ /dev/null
@@ -1,18 +0,0 @@
-aclocal.m4
-autom4te*.cache
-config.cache
-config.guess
-config.h
-config.h.in
-config.log
-config.status
-config.sub
-configure
-depcomp
-install-if-change
-install-sh
-Makefile
-Makefile.in
-missing
-mkinstalldirs
-stamp-h.in
diff --git a/tools/build/ChangeLog b/tools/build/ChangeLog
deleted file mode 100644
index e3e344cbcb..0000000000
--- a/tools/build/ChangeLog
+++ /dev/null
@@ -1,209 +0,0 @@
-2011-02-02 Ralf Corsépius <ralf.corsepius@rtems.org>
-
- * configure.ac: Require autoconf-2.68, automake-1.11.1.
-
-2010-07-30 Ralf Corsépius <ralf.corsepius@rtems.org>
-
- * rtems-bin2c.c: Fix memory leak in '.c' suffix strip.
- Also strip '.h' suffix.
-
-2010-07-30 Ralf Corsépius <ralf.corsepius@rtems.org>
-
- * rtems-bin2c.c: Make -v (verbose) working.
-
-2010-07-30 Ralf Corsépius <ralf.corsepius@rtems.org>
-
- * configure.ac: Check for libgen.h, basename.
- * rtems-bin2c.c: Use basename(3) instead of strrchr cascade.
- Introduce ifbasename. Use ifbasename in generated files.
-
-2010-07-29 Ralf Corsépius <ralf.corsepius@rtems.org>
-
- * rtems-bin2c.c: Add -C and -H options.
-
-2010-03-12 Joel Sherrill <joel.sherrill@oarcorp.com>
-
- * eolstrip.c: Readdress use of ctype methods per recommendation from
- D.J. Delorie on the newlib mailing list. We should pass an unsigned
- char into these methods.
-
-2007-09-18 Joel Sherrill <joel.sherrill@OARcorp.com>
-
- * Makefile.am: Rename bin2c to rtems-bin2c.
-
-2007-09-10 Joel Sherrill <joel.sherrill@OARcorp.com>
-
- * bin2c.c: Updated license after author changed it.
-
-2007-09-07 Joel Sherrill <joel.sherrill@OARcorp.com>
-
- * bin2c.c: Update comments.
-
-2007-09-04 Joel Sherrill <joel.sherrill@oarcorp.com>
-
- * bin2c.c: Significant improvements -- add multiple options, generate
- both C and H files, do not always generate static. fix indentation,
- add comments.
-
-2007-09-04 Joel Sherrill <joel.sherrill@oarcorp.com>
-
- * bin2c.c: New file.
- http://www.wxwidgets.org/wiki/index.php/Embedding_PNG_Images-Bin2c_In_C
-
-2007-09-04 Joel Sherrill <joel.sherrill@oarcorp.com>
-
- * Makefile.am: Add bin2c so we can have a more reliable way to convert
- binary files to objects. If they are in C, we can use the correct CPU
- CFLAGS and they will link easier.
-
-2006-12-02 Ralf Corsépius <ralf.corsepius@rtems.org>
-
- * configure.ac: New BUG-REPORT address.
-
-2006-10-17 Ralf Corsépius <ralf.corsepius@rtems.org>
-
- * configure.ac: Require autoconf-2.60. Require automake-1.10.
-
-2006-07-13 Ralf Corsepius <ralf.corsepius@rtems.org>
-
- * doxy-filter: New.
- * Makefile.am: Add doxy-filter.
-
-2006-07-11 Ralf Corsepius <ralf.corsepius@rtems.org>
-
- * ampolish3.in: Remove.
- * Makefile.am: Remove ampolish3.
- * configure.ac: Remove ampolish3, perl.
-
-2006-01-14 Ralf Corsepius <ralf.corsepius@rtems.org>
-
- * ampolish3.in: Check Makefile.am for SUBDIRS.
- Add all-am: for PREINSTALL_FILES.
-
-2006-01-12 Ralf Corsepius <ralf.corsepius@rtems.org>
-
- * ampolish3.in: Add all: for PREINSTALL_FILES.
- Add all-local for TMPINSTALL_FILES.
- Misc bug fixes.
-
-2006-01-12 Ralf Corsepius <ralf.corsepius@rtems.org>
-
- * ampolish3.in: Check if Makefile.am already contains CLEANFILES or
- DISTCLEANFILES.
-
-2006-01-10 Ralf Corsepius <ralf.corsepius@rtems.org>
-
- * ampolish3.in: Update.
-
-2005-10-25 Ralf Corsepius <ralf.corsepius@rtems.org>
-
- * ampolish3.in: Sync with private bleeding-edge .
-
-2005-10-24 Ralf Corsepius <ralf.corsepius@rtems.org>
-
- * ampolish3.in: Use @PERL@, partial update from local sources.
-
-2005-10-24 Ralf Corsepius <ralf.corsepius@rtems.org>
-
- * configure.ac: Add ampolish3.
- * Makefile.am: Add ampolish3.
- * ampolish3.in: New.
-
-2004-09-24 Ralf Corsepius <ralf.corsepius@rtems.org>
-
- * configure.ac: Require automake > 1.9.
-
-2004-02-20 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * Makefile.am: Add EXTRA_DIST = search-id.sh multigen
- cvsignore-add.sh.
-
-2003-12-12 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * configure.ac: Require automake >= 1.8, autoconf >= 2.59.
-
-2003-08-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * configure.ac: Use rtems-bugs@rtems.com as bug report email address.
-
-2003-03-07 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * configure.ac: Add AC_CHECK_HEADERS(getopt.h) to work around a bug
- in autoconf-2.57.
-
-2003-03-06 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * configure.ac: Remove AC_CONFIG_AUX_DIR.
-
-2003-03-02 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * configure.ac: Add AC_CHECK_HEADERS.
-
-2003-02-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * configure.ac: AM_INIT_AUTOMAKE([1.7.2]).
-
-2003-02-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * configure.ac: AC_PREREQ(2.57).
-
-2002-10-21 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * .cvsignore: Reformat.
- Add autom4te*cache.
- Remove autom4te.cache.
-
-2002-10-02 Chris Johns <cjohns@cybertec.com.au>
-
- * cvsignore-add.sh: Script to append a specific file to all
- .cvsignore files if the files exists is a specific directory.
-
-2002-05-01 Joel Sherrill <joel@OARcorp.com>
-
- * lock-directory.in, unlock-directory.in: Removed.
- * Makefile.am, README, .cvsignore: Updated to reflect above.
-
-2002-04-01 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * configure.ac: Remove AC_EXEEXT (obsolete).
-
-2002-03-27 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * configure.ac:
- AC_INIT(package,_RTEMS_VERSION,_RTEMS_BUGS).
- AM_INIT_AUTOMAKE([no-define foreign 1.6]).
- * Makefile.am: Remove AUTOMAKE_OPTIONS.
-
-2001-10-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * .cvsignore: Add autom4te.cache for autoconf > 2.52.
- * configure.in: Remove.
- * configure.ac: New file, generated from configure.in by autoupdate.
-
-2001-01-24 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * config.h.in: Automatically generated. Remove from CVS.
-
-2000-11-09 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * Makefile.am: Use ... instead of RTEMS_TOPdir in ACLOCAL_AMFLAGS.
-
-2000-11-02 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * Makefile.am: Switch to ACLOCAL_AMFLAGS = -I $(RTEMS_TOPdir)/aclocal.
-
-2000-10-30 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * Makefile.am: Switch to GNU-canonicalized autoconf macros.
-
-2000-08-10 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * multigen: Fix BARE_CPU_CFLAGS.
-
-2000-08-06 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * multigen: Fix usage.
-
-2000-08-10 Joel Sherrill <joel@OARcorp.com>
-
- * ChangeLog: New file.
diff --git a/tools/build/Makefile.am b/tools/build/Makefile.am
deleted file mode 100644
index f58624929f..0000000000
--- a/tools/build/Makefile.am
+++ /dev/null
@@ -1,26 +0,0 @@
-##
-## $Id$
-##
-
-ACLOCAL_AMFLAGS = -I ../../aclocal
-
-bin_PROGRAMS = cklength eolstrip packhex unhex rtems-bin2c
-
-noinst_PROGRAMS = binpatch
-
-cklength_SOURCES = cklength.c
-eolstrip_SOURCES = eolstrip.c
-packhex_SOURCES = packhex.c
-unhex_SOURCES = unhex.c
-binpatch_SOURCES = binpatch.c
-rtems_bin2c_SOURCES = rtems-bin2c.c
-
-bin_SCRIPTS = install-if-change
-
-noinst_SCRIPTS = search-id.sh multigen cvsignore-add.sh
-EXTRA_DIST = search-id.sh multigen cvsignore-add.sh
-
-noinst_SCRIPTS += doxy-filter
-EXTRA_DIST += doxy-filter
-
-include $(top_srcdir)/../../automake/host.am
diff --git a/tools/build/README b/tools/build/README
deleted file mode 100644
index 18899c3c06..0000000000
--- a/tools/build/README
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-# $Id$
-#
-
-Misc. support tools for RTEMS workspaces.
-
-install-if-change
- Smart install script that also can append suffixes as it
- installs (suffixes used for debug and profile variants).
- Requires bash or ksh.
diff --git a/tools/build/binpatch.c b/tools/build/binpatch.c
deleted file mode 100644
index b9e2ac1a06..0000000000
--- a/tools/build/binpatch.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * $Id$
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-
-/*
- * This function will patch binary file
- */
-
-
-static char buf[512];
-
-static void
-usage(void)
-{
- printf("usage: binpatch [-h] <ofile> <ifile> <reloc> <off> <byte0> "
- "[<byte1> [<byte2> [<byte3>]]]\n");
- printf("this function patches binary file at specified offset with\n");
- printf("up to 4 bytes provided on command line \n");
- printf("-h - prints this message\n\n");
- printf("<ofile> - output file\n");
- printf("<ifile> - input ifile\n");
- printf("<reloc> - relocation address of image\n");
- printf("<off> - offset of patch, offset in file is at off - reloc\n");
- printf("<byte0> - byte 0 of patch\n");
- printf("<byte1> - byte 1 of patch\n");
- printf("<byte2> - byte 1 of patch\n");
- printf("<byte3> - byte 1 of patch\n");
-
- return;
-}
-
-int
-main(int argc, char **argv)
-{
- int c;
- FILE *ofp, *ifp;
- char patch[4], *end;
- int patchLen, tmp, i, off, cnt, patched, len, reloc;
-
-
- /* parse command line options */
- while ((c = getopt(argc, argv, "h")) >= 0)
- {
- switch (c)
- {
- case 'h':
- usage();
- return 0;
- default:
- usage();
- return 1;
- }
- }
-
- if(argc < 6)
- {
- usage();
- return 1;
- }
-
- /* Let us get offset in file */
- reloc = strtol(argv[3], &end, 0);
- if(end == argv[3] || off < 0)
- {
- fprintf(stderr, "bad reloc value %s\n", argv[3]);
- return 1;
- }
-
- off = strtol(argv[4], &end, 0);
- if(end == argv[4] || off < 0 || off < reloc)
- {
- fprintf(stderr, "bad offset value %s\n", argv[4]);
- return 1;
- }
-
- off -= reloc;
-
- /* Let us get patch */
- patchLen = argc - 5;
-
- for(i=0; i<patchLen; i++)
- {
- tmp = strtol(argv[5+i], &end, 0);
-
- if(end == argv[4+i] || tmp < 0 || tmp > 0xff)
- {
- fprintf(stderr, "bad byte value %s\n", argv[5+i]);
- return 1;
- }
- patch[i] = tmp;
- }
-
- ifp = fopen(argv[2], "r");
- if(ifp == NULL)
- {
- fprintf(stderr, "unable to open file %s\n", argv[2]);
- return 1;
- }
-
- ofp = fopen(argv[1], "w");
- if(ofp == NULL)
- {
- fprintf(stderr, "unable to open file %s\n", argv[1]);
- return 1;
- }
-
- cnt = 0;
- patched = 0;
- for(;;)
- {
- len = fread(buf, 1, sizeof(buf), ifp);
-
- if(len == 0)
- {
- break;
- }
-
- if(cnt <= off && (cnt + len) > off)
- {
- /* Perform patch */
- for(i=0; i<patchLen && (off+i)<(cnt+len); i++)
- {
- buf[off-cnt+i] = patch[i];
- }
- patched = 1;
- }
- else if(cnt > off && cnt < (off + patchLen))
- {
- /* Perform patch */
- for(i=cnt-off; i<patchLen; i++)
- {
- buf[off-cnt+i] = patch[i];
- }
- patched = 1;
- }
-
- fwrite(buf, 1, len, ofp);
-
- cnt += len;
- }
-
- fclose(ifp);
- fclose(ofp);
-
- if(!patched)
- {
- fprintf(stderr, "warning: offset is beyond input file length\n");
- fprintf(stderr, " no patch is performed\n");
- }
-
- return 0;
-}
diff --git a/tools/build/cklength.c b/tools/build/cklength.c
deleted file mode 100644
index 624bf25e70..0000000000
--- a/tools/build/cklength.c
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * cklength - check the length of lines in a file
- *
- * This program check to see if the files passed to it on the command line
- * contain a line which exceeds the maximum allowable length. The default
- * maximum line length is 80.
- *
- * usage: cklength [ -v ] [ arg ... ] files...
- * -l length -- maximum line length
- * -v -- verbose
- *
- * $Id$
- */
-
-#define GETOPTARGS "l:nNv"
-
-char *USAGE = "\
-usage: cklength [ -v ] [ arg ... ] files... \n\
- -l length -- maximum line length\n\
- -n -- report line numbers for offending lines\n\
- -N -- report line numbers and length for offending lines\n\
- -v -- verbose\n\
-\n\
-Print the name of files which have at least 1 line which exceeds the\n\
-maximum line length. The default maximum line length is 80.\n\
-";
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <memory.h>
-#include <stdarg.h>
-#include <errno.h>
-
-#include "config.h"
-
-#ifndef VMS
-#ifndef HAVE_STRERROR
-extern int sys_nerr;
-extern char *sys_errlist[];
-
-#define strerror( _err ) \
- ((_err) < sys_nerr) ? sys_errlist [(_err)] : "unknown error"
-
-#else /* HAVE_STRERROR */
-char *strerror ();
-#endif
-#else /* VMS */
-char *strerror (int,...);
-#endif
-
-
-#define BUFFER_SIZE 512
-
-#define SUCCESS 0
-#define FAILURE -1
-#define Failed(x) (((int) (x)) == FAILURE)
-#define TRUE 1
-#define FALSE 0
-#define STREQ(a,b) (strcmp(a,b) == 0)
-#define NUMELEMS(arr) (sizeof(arr) / sizeof(arr[0]))
-
-/*
- * Definitions for unsigned "ints"; especially for use in data structures
- * that will be shared among (potentially) different cpu's (we punt on
- * byte ordering problems tho)
- */
-
-typedef unsigned char u8;
-typedef unsigned short u16;
-typedef unsigned long u32;
-
-/*
- * vars controlled by command line options
- */
-
-int verbose = FALSE; /* be verbose */
-int report_line_numbers = FALSE; /* report line numbers of offenders */
-int report_line_length = FALSE; /* report line length of offenders */
-
-int line_length = 80; /* maximum allowable line length */
-
-extern char *optarg; /* getopt(3) control vars */
-extern int optind, opterr;
-
-char *progname; /* for error() */
-
-int process(char *arg);
-void error(int errn, ...);
-long getparm(char *s, long min, long max, char *msg);
-
-#define ERR_ERRNO (1<<((sizeof(int) * 8) - 2)) /* hi bit; use 'errno' */
-#define ERR_FATAL (ERR_ERRNO / 2) /* fatal error ; no return */
-#define ERR_ABORT (ERR_ERRNO / 4) /* fatal error ; abort */
-#define ERR_MASK (ERR_ERRNO | ERR_FATAL | ERR_ABORT) /* all */
-
-#define stol(p) strtol(p, (char **) NULL, 0)
-int Open(), Read(), Write();
-
-int main(
- int argc,
- char **argv
-)
-{
- register int c;
- int showusage = FALSE; /* usage error? */
- int rc = 0;
-
- /*
- * figure out invocation leaf-name
- */
-
- if ((progname = strrchr(argv[0], '/')) == (char *) NULL)
- progname = argv[0];
- else
- progname++;
-
- argv[0] = progname; /* for getopt err reporting */
-
- /*
- * Check options and arguments.
- */
-
- opterr = 0; /* we'll report all errors */
- while ((c = getopt(argc, argv, GETOPTARGS)) != EOF)
- switch (c)
- {
- case 'l': /* line length */
- line_length = atoi( optarg );
- if ( line_length < 0 || line_length > BUFFER_SIZE )
- error(ERR_FATAL, "(%d) is illegal line length\n",line_length);
- break;
-
- case 'n': /* toggle report_line_numbers */
- report_line_numbers = ! report_line_numbers;
- break;
-
- case 'N': /* toggle both reports */
- report_line_numbers = ! report_line_numbers;
- report_line_length = ! report_line_length;
- break;
-
- case 'v': /* toggle verbose */
- verbose = ! verbose;
- break;
-
- case '?':
- showusage = TRUE;
- }
-
- if (showusage)
- {
- (void) fprintf(stderr, "%s", USAGE);
- exit(1);
- }
-
- /*
- * traverse and process the arguments
- */
-
- for ( ; argv[optind]; optind++)
- if (Failed(process(argv[optind])))
- rc = FAILURE;
-
- return rc;
-}
-
-
-/*
- * process(arg)
- */
-
-int
-process(char *arg)
-{
- FILE *in;
- char *bptr;
- char buffer[ BUFFER_SIZE ];
- int line_number;
- int length;
- int count;
- int rc = SUCCESS; /* succeed by default */
-
- in = fopen( arg, "r" );
- if (!in)
- error( ERR_ERRNO | ERR_FATAL, "Unable to open file (%s)\n", arg );
-
- count = 0;
-
- for ( line_number=1 ; ; line_number++ ) {
- bptr = fgets( buffer, BUFFER_SIZE, in );
- if (!bptr)
- break;
-
- /*
- * Don't count the carriage return.
- */
-
- length = strlen( buffer ) - 1;
-
- if ( length <= line_length )
- continue;
-
- if ( count == 0 ) {
- fprintf( stderr, "%s\n", arg );
- if ( !report_line_numbers )
- break;
- }
-
- if ( verbose )
- fprintf( stderr, "TOO LONG:%d: %s\n", line_number, buffer );
-
- if ( report_line_numbers ) {
- if ( report_line_length )
- fprintf( stderr, "%d: %d\n" , line_number, length );
- else
- fprintf( stderr, "%d\n" , line_number );
- }
-
- count++;
-
- }
-
- fclose( in );
- return rc;
-}
-
-/*
- * error(errn, arglist)
- * report an error to stderr using printf(3) conventions.
- * Any output is preceded by '<progname>: '
- *
- * Uses ERR_FATAL bit to request exit(errn)
- * ERR_ABORT to request abort()
- * ERR_ERRNO to indicate use of errno instead of argument.
- *
- * If resulting 'errn' is non-zero, it is assumed to be an 'errno' and its
- * associated error message is appended to the output.
- */
-
-/*VARARGS*/
-
-void
-error(int error_flag, ...)
-{
- va_list arglist;
- register char *format;
- int local_errno;
-
- extern int errno;
-
- (void) fflush(stdout); /* in case stdout/stderr same */
-
- local_errno = error_flag & ~ERR_MASK;
- if (error_flag & ERR_ERRNO) /* use errno? */
- local_errno = errno;
-
- va_start(arglist, error_flag);
- format = va_arg(arglist, char *);
- (void) fprintf(stderr, "%s: ", progname);
- (void) vfprintf(stderr, format, arglist);
- va_end(arglist);
-
- if (local_errno)
- (void) fprintf(stderr, " (%s)\n", strerror(local_errno));
-
- (void) fflush(stderr);
-
- if (error_flag & (ERR_FATAL | ERR_ABORT))
- {
- if (error_flag & ERR_FATAL)
- {
- error(0, "fatal error, exiting");
- exit(local_errno ? local_errno : 1);
- }
- else
- {
- error(0, "fatal error, aborting");
- abort();
- }
- }
-}
-
-long
-getparm(char *s,
- long min,
- long max,
- char *msg)
-{
- long val;
-
- if ( ! strchr("0123456789-", *s))
- {
- error(ERR_FATAL, "'%s' is not a number", s);
- return min;
- }
-
- val = strtol(s, (char **) NULL, 0);
- if ((val < min) || (val > max))
- {
- if (min == max)
- error(ERR_FATAL, "%s can only be %ld", s, min);
- else
- error(ERR_FATAL, "%s must be between %ld and %ld", msg, min, max);
- }
-
- return val;
-}
-
-
-/*
- * Open()
- * Perform open(2), returning the file descriptor. Prints
- * error message if open fails.
- */
-
-int
-Open(char *file,
- int oflag,
- int mode)
-{
- int O_fd;
-
- if (Failed(O_fd = open(file, oflag, mode)))
- error(
- ERR_ERRNO | ERR_FATAL,
- "open('%s', 0x%x, 0%o) failed", file, oflag, mode
- );
-
- return O_fd;
-}
-
-/*
- * Read()
- * Perform read(2); prints error message if fails.
- */
-
-int
-Read(int file,
- char *buffer,
- unsigned int count)
-{
- int nbytes;
-
- if (Failed(nbytes = read(file, buffer, count)))
- error(
- ERR_ERRNO | ERR_FATAL,
- "read(%d, 0x%x, %d) failed", file, buffer, count
- );
-
- return nbytes;
-}
-
-/*
- * Write()
- * Perform write(2); prints error message if fails.
- */
-
-int
-Write(int file,
- char *buffer,
- unsigned int count)
-{
- int nbytes;
-
- if (Failed(nbytes = write(file, buffer, count)))
- error(
- ERR_ERRNO | ERR_FATAL,
- "write(%d, 0x%x, %d) failed", file, buffer, count
- );
-
- return nbytes;
-}
diff --git a/tools/build/configure.ac b/tools/build/configure.ac
deleted file mode 100644
index d24f3e2d5a..0000000000
--- a/tools/build/configure.ac
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# $Id$
-#
-
-AC_PREREQ([2.68])
-AC_INIT([rtems-tools-build],[_RTEMS_VERSION],[http://www.rtems.org/bugzilla])
-AC_CONFIG_SRCDIR([install-if-change.in])
-RTEMS_TOP(../..)
-
-AC_CANONICAL_HOST
-
-AM_INIT_AUTOMAKE([no-define foreign 1.11.1])
-AM_MAINTAINER_MODE
-
-AC_PROG_CC
-AC_CHECK_HEADERS([getopt.h libgen.h])
-AC_CHECK_FUNCS(strerror strtol basename)
-
-RTEMS_PATH_KSH
-
-AC_CONFIG_HEADERS([config.h])
-
-# Explicitly list all Makefiles here
-AC_CONFIG_FILES([Makefile])
-AC_CONFIG_FILES([install-if-change],[chmod +x install-if-change])
-AC_OUTPUT
diff --git a/tools/build/cvsignore-add.sh b/tools/build/cvsignore-add.sh
deleted file mode 100755
index 45feab6565..0000000000
--- a/tools/build/cvsignore-add.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-#
-# Find a file in the directory tree and create or add to a .cvsignore
-# file that file name so it is ignored.
-#
-# Copyright 2001 Cybertec Pty Limited
-# All rights reserved.
-#
-# $Id$
-#
-
-#
-# We need one parameter, the file to add.
-#
-
-if [ $# -eq 0 ]; then
- echo "Usage: $0 file, where file is the one to be added."
- exit 1
-fi
-
-for f in `find . -name $1`;
-do
- echo "`dirname $f`/.cvsignore"
- echo "$1" >> `dirname $f`/.cvsignore
-done
diff --git a/tools/build/doxy-filter b/tools/build/doxy-filter
deleted file mode 100755
index 1d47b0806d..0000000000
--- a/tools/build/doxy-filter
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-
-# doxygen input filter
-# $Id$
-
-# usage: doxy-filter <input-file-name>
-# Reads <input-file> and writes to stdout.
-
-file=$1
-
-# Does file contain a doxygen @file directive?
-if ! grep -q '@file' $file >/dev/null ; then
-# No, add one
-echo "/** @file $file */"
-cat $file
-else
-# Yes, adjust path to work around doxygen not being able to
-# distinguish file names properly
-exec sed -e "s,@file.*$,@file $file," $file
-fi
-
diff --git a/tools/build/eolstrip.c b/tools/build/eolstrip.c
deleted file mode 100644
index 398ff72116..0000000000
--- a/tools/build/eolstrip.c
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * eolstrip - strip white space from end of lines
- *
- * This program strips the white space from the end of every line in the
- * specified program.
- *
- * usage: eolstrip [ -v ] [ arg ... ] files...
- * -v -- verbose
- *
- * $Id$
- */
-
-#define GETOPTARGS "vt"
-
-char *USAGE = "\
-usage: cklength [ -v ] [ arg ... ] files... \n\
- -v -- verbose\n\
- -t -- test only .. DO NOT OVERWRITE FILE!!!\n\
-\n\
-Strip the white space from the end of every line on the list of files.\n\
-";
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <memory.h>
-#include <stdarg.h>
-#include <errno.h>
-
-#include "config.h"
-
-#ifndef VMS
-#ifndef HAVE_STRERROR
-extern int sys_nerr;
-extern char *sys_errlist[];
-
-#define strerror( _err ) \
- ((_err) < sys_nerr) ? sys_errlist [(_err)] : "unknown error"
-
-#else /* HAVE_STRERROR */
-char *strerror ();
-#endif
-#else /* VMS */
-char *strerror (int,...);
-#endif
-
-
-#define BUFFER_SIZE 2048
-#define MAX_PATH 2048
-
-#define SUCCESS 0
-#define FAILURE -1
-#define Failed(x) (((int) (x)) == FAILURE)
-#define TRUE 1
-#define FALSE 0
-#define STREQ(a,b) (strcmp(a,b) == 0)
-#define NUMELEMS(arr) (sizeof(arr) / sizeof(arr[0]))
-
-/*
- * Definitions for unsigned "ints"; especially for use in data structures
- * that will be shared among (potentially) different cpu's (we punt on
- * byte ordering problems tho)
- */
-
-typedef unsigned char u8;
-typedef unsigned short u16;
-typedef unsigned long u32;
-
-/*
- * vars controlled by command line options
- */
-
-int verbose = FALSE; /* be verbose */
-int test_only = FALSE; /* test only */
-
-extern char *optarg; /* getopt(3) control vars */
-extern int optind, opterr;
-
-char *progname; /* for error() */
-
-int process(char *arg);
-void error(int errn, ...);
-long getparm(char *s, long min, long max, char *msg);
-
-#define ERR_ERRNO (1<<((sizeof(int) * 8) - 2)) /* hi bit; use 'errno' */
-#define ERR_FATAL (ERR_ERRNO / 2) /* fatal error ; no return */
-#define ERR_ABORT (ERR_ERRNO / 4) /* fatal error ; abort */
-#define ERR_MASK (ERR_ERRNO | ERR_FATAL | ERR_ABORT) /* all */
-
-#define stol(p) strtol(p, (char **) NULL, 0)
-int Open(), Read(), Write();
-
-int main(
- int argc,
- char **argv
-)
-{
- register int c;
- int showusage = FALSE; /* usage error? */
- int rc = 0;
-
- /*
- * figure out invocation leaf-name
- */
-
- if ((progname = strrchr(argv[0], '/')) == (char *) NULL)
- progname = argv[0];
- else
- progname++;
-
- argv[0] = progname; /* for getopt err reporting */
-
- /*
- * Check options and arguments.
- */
-
- opterr = 0; /* we'll report all errors */
- while ((c = getopt(argc, argv, GETOPTARGS)) != EOF)
- switch (c)
- {
- case 't': /* toggle test only mode */
- test_only = ! test_only;
- break;
-
- case 'v': /* toggle verbose */
- verbose = ! verbose;
- break;
-
- case '?':
- showusage = TRUE;
- }
-
- if (showusage)
- {
- (void) fprintf(stderr, "%s", USAGE);
- exit(1);
- }
-
- /*
- * traverse and process the arguments
- */
-
- for ( ; argv[optind]; optind++)
- if (Failed(process(argv[optind])))
- rc = FAILURE;
-
- return rc;
-}
-
-
-/*
- * process(arg)
- */
-
-int
-process(char *arg)
-{
- FILE *in;
- FILE *out = (FILE *) 0;
- char outname[ MAX_PATH ];
- char *bptr;
- char buffer[ BUFFER_SIZE ];
- int length;
- int line_number;
- int rc = SUCCESS; /* succeed by default */
-
- in = fopen( arg, "r" );
- if (!in)
- error( ERR_ERRNO | ERR_FATAL, "Unable to open file (%s)\n", arg );
-
- if ( !test_only ) {
- sprintf( outname, "%s.eoltmp", arg );
-
- out = fopen( outname, "w" );
- if (!out)
- error( ERR_ERRNO | ERR_FATAL, "Unable to open file (%s)\n", arg );
- }
-
- if ( verbose )
- fprintf( stderr, "Processing %s\n", arg );
-
- for ( line_number=1 ; ; line_number++ ) {
- bptr = fgets( buffer, BUFFER_SIZE, in );
- if (!bptr)
- break;
-
- /*
- * Don't count the carriage return.
- */
-
- length = strlen( buffer ) - 1;
-
- if ( buffer[ length ] != '\n' )
- error(ERR_ERRNO|ERR_FATAL, "Line %d too long in %s\n", line_number, arg);
-
- while ( isspace( (unsigned char) buffer[ length ] ) )
- buffer[ length-- ] = '\0';
-
- if ( test_only ) {
- fprintf( stderr, "%s\n", arg );
- break;
- }
-
- fprintf( out, "%s\n", buffer );
- }
-
- fclose( in );
- if ( !test_only ) {
- fclose( out );
- rename( outname, arg );
- }
- return rc;
-}
-
-/*
- * error(errn, arglist)
- * report an error to stderr using printf(3) conventions.
- * Any output is preceded by '<progname>: '
- *
- * Uses ERR_FATAL bit to request exit(errn)
- * ERR_ABORT to request abort()
- * ERR_ERRNO to indicate use of errno instead of argument.
- *
- * If resulting 'errn' is non-zero, it is assumed to be an 'errno' and its
- * associated error message is appended to the output.
- */
-
-/*VARARGS*/
-
-void
-error(int error_flag, ...)
-{
- va_list arglist;
- register char *format;
- int local_errno;
-
- extern int errno;
-
- (void) fflush(stdout); /* in case stdout/stderr same */
-
- local_errno = error_flag & ~ERR_MASK;
- if (error_flag & ERR_ERRNO) /* use errno? */
- local_errno = errno;
-
- va_start(arglist, error_flag);
- format = va_arg(arglist, char *);
- (void) fprintf(stderr, "%s: ", progname);
- (void) vfprintf(stderr, format, arglist);
- va_end(arglist);
-
- if (local_errno)
- (void) fprintf(stderr, " (%s)\n", strerror(local_errno));
- else
- (void) fprintf(stderr, "\n");
-
- (void) fflush(stderr);
-
- if (error_flag & (ERR_FATAL | ERR_ABORT))
- {
- if (error_flag & ERR_FATAL)
- {
- error(0, "fatal error, exiting");
- exit(local_errno ? local_errno : 1);
- }
- else
- {
- error(0, "fatal error, aborting");
- abort();
- }
- }
-}
-
-long
-getparm(char *s,
- long min,
- long max,
- char *msg)
-{
- long val;
-
- if ( ! strchr("0123456789-", *s))
- {
- error(ERR_FATAL, "'%s' is not a number", s);
- return min;
- }
-
- val = strtol(s, (char **) NULL, 0);
- if ((val < min) || (val > max))
- {
- if (min == max)
- error(ERR_FATAL, "%s can only be %ld", s, min);
- else
- error(ERR_FATAL, "%s must be between %ld and %ld", msg, min, max);
- }
-
- return val;
-}
-
-
-/*
- * Open()
- * Perform open(2), returning the file descriptor. Prints
- * error message if open fails.
- */
-
-int
-Open(char *file,
- int oflag,
- int mode)
-{
- int O_fd;
-
- if (Failed(O_fd = open(file, oflag, mode)))
- error(
- ERR_ERRNO | ERR_FATAL,
- "open('%s', 0x%x, 0%o) failed", file, oflag, mode
- );
-
- return O_fd;
-}
-
-/*
- * Read()
- * Perform read(2); prints error message if fails.
- */
-
-int
-Read(int file,
- char *buffer,
- unsigned int count)
-{
- int nbytes;
-
- if (Failed(nbytes = read(file, buffer, count)))
- error(
- ERR_ERRNO | ERR_FATAL,
- "read(%d, 0x%x, %d) failed", file, buffer, count
- );
-
- return nbytes;
-}
-
-/*
- * Write()
- * Perform write(2); prints error message if fails.
- */
-
-int
-Write(int file,
- char *buffer,
- unsigned int count)
-{
- int nbytes;
-
- if (Failed(nbytes = write(file, buffer, count)))
- error(
- ERR_ERRNO | ERR_FATAL,
- "write(%d, 0x%x, %d) failed", file, buffer, count
- );
-
- return nbytes;
-}
diff --git a/tools/build/install-if-change.in b/tools/build/install-if-change.in
deleted file mode 100644
index b2f3cb04bb..0000000000
--- a/tools/build/install-if-change.in
+++ /dev/null
@@ -1,142 +0,0 @@
-#!@KSH@ -p
-#
-# Either bash or ksh will be ok for this; requires (( )) arithmetic
-# (-p above just says to not parse $ENV file; makes it faster for
-# those of us who set $ENV)
-#
-# install files if they have changed by running 'cmp', then 'install'
-# as necessary.
-#
-# Optionally, can append a suffix before last existing suffix (if any)
-#
-# NOTE
-# We avoid using typical install(1M) programs since they have
-# large variability across systems and we also need to support ou
-# -V option.
-# So we just copy and chmod by hand.
-#
-# $Id$
-#
-
-progname=`basename $0`
-#progname=${0##*/} # fast basename hack for ksh, bash
-
-USAGE=\
-"usage: $progname [ -vmV ] file [ file ... ] dest-directory-or-file
- -v -- verbose
- -V suffix -- suffix to append to targets (before any . suffix)
- eg: -V _g would change 'foo' to 'foo_g' and
- 'libfoo.a' to 'libfoo_g.a'
- -m mode -- mode for new file(s)"
-
-fatal() {
- if [ "$1" ]
- then
- echo $* >&2
- fi
- echo "$USAGE" 1>&2
- exit 1
-}
-
-#
-# process the options
-#
-
-verbose=""
-suffix=""
-mode=""
-
-while getopts vm:V: OPT
-do
- case "$OPT" in
- v)
- verbose="yes";;
- V)
- eval suffix=$OPTARG;;
- m)
- mode="$OPTARG";;
- *)
- fatal
- esac
-done
-
-shiftcount=`expr $OPTIND - 1`
-shift $shiftcount
-
-args=$*
-
-#
-# Separate source file(s) from dest directory or file
-#
-
-files=""
-dest=""
-for d in $args
-do
- files="$files $dest"
- dest=$d
-done
-
-if [ ! "$files" ] || [ ! "$dest" ]
-then
- fatal "missing files or invalid destination"
-fi
-
-#
-# Process the arguments
-#
-
-targets=""
-for f in $files
-do
- # leaf=`basename $f`
- leaf=${f##*/} # fast basename hack for ksh, bash
-
- target=$dest
- if [ -d $dest ]
- then
- # if we were given a suffix, then add it as appropriate
- if [ "$suffix" ]
- then
- case $f in
- *.*)
- # leaf=`echo $leaf |
- # /bin/sed "s/\([~\.]*\)\.\(.*\)$/\1$suffix.\2/"`
- # ksh,bash hack for above sed script
- leaf=${leaf%%.*}$suffix.${leaf#*.}
-
- [ "$verbose" = "yes" ] &&
- echo "$progname: $f will be installed as $leaf"
- ;;
- *)
- leaf=$leaf$suffix;;
- esac
- fi
- target=$target/$leaf
- fi
-
- [ ! -r $f ] && fatal "can not read $f"
-
- if cmp -s $f $target
- then
- [ "$verbose" = "yes" ] && echo "'$f' not newer than '$target'"
- else
- [ "$verbose" = "yes" ] && echo "rm -f $target"
- rm -f $target
- echo "cp -p $f $target"
- cp -p $f $target || exit 1
- targets="$targets $target" # keep list for chmod below
- fi
-done
-
-if [ "$mode" -a "$targets" ]
-then
- [ "$verbose" = "yes" ] && echo "chmod $mode $targets"
- chmod $mode $targets
-fi
-
-exit 0
-
-# Local Variables: ***
-# mode:ksh ***
-# End: ***
diff --git a/tools/build/multigen b/tools/build/multigen
deleted file mode 100755
index 06bfe65449..0000000000
--- a/tools/build/multigen
+++ /dev/null
@@ -1,173 +0,0 @@
-#!/bin/sh
-
-# $Id$
-
-version=0.1
-verbose=0
-target=
-custom=0
-config=0
-
-usage()
-{
-program=`basename $0`
-cat << EOF
-
-$program generates RTEMS custom/*.cfgs and config-files for gcc multilib
-variants a target's gcc supports
-
-Usage: $program [options]
-
-Options:
- --target=STRING target
- --custom generate make/custom/*.cfg files
- --config generate config scripts
- --rtems=DIR use DIR as location of RTEMS source tree
- -v, --verbose verbose
- -h, --help Print this usage
- --version Print version and exit
-
-Examples:
-$program --config --target=sh-rtems --rtems=/usr/src/rtems-4.5.0
- Generates config scripts for all possible bare BSPs from all
- valid multilib variants sh-rtems-gcc supports
-
-$program --custom --target=sh-rtems --rtems=/usr/src/rtems-4.5.0
- Generates /usr/src/rtems-4.5.0/make/custom/*.cfg files
- for all possible bare BSPs from the multilib variants
- sh-rtems-gcc supports
-
-Written by Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-EOF
-}
-
-while test $# -gt 0; do
- case "$1" in
- --rtems=*)
- rtems_srcdir=`echo "$1" | sed -e 's%--rtems=\(.*\)%\1%g'`
- ;;
- --target=*)
- target=`echo "$1" | sed -e 's%--target=\(.*\)%\1%g'`
- ;;
- -v|--verbose)
- verbose=1
- ;;
- --custom)
- custom=1
- ;;
- --config)
- config=1
- ;;
- --version)
- echo `basename $0` version $version
- exit 0
- ;;
- -h|--help)
- usage
- exit 1
- ;;
- *)
- echo "unknown option $1"
- usage
- exit 1
- ;;
- esac
- shift
-done
-
-if test $# -gt 0; then
- echo "Invalid number of arguments"
- exit 1
-fi
-
-if test x$target = x; then
- echo "Missing required option:"
- echo " --target"
- exit 1
-fi
-
-if test x$rtems_srcdir = x; then
- echo "Missing required option:"
- echo " --rtems"
- exit 1
-fi
-
-if test $config -eq 0 && test $custom -eq 0; then
- echo "Missing required option:"
- echo " --config"
- echo " --custom"
- echo " (At least one of these is required)"
- exit 1
-fi
-
-if test ! -r $rtems_srcdir/VERSION; then
- echo "Can't find rtems"
- echo "Check value passed to --rtems=<DIR>"
- exit 1
-fi
-
-if test x$target != x ;then
-target_prefix=$target-
-fi
-
-# Check for CC
-saved_IFS=$IFS; IFS=":"
-for i in $PATH; do
- if test -f $i/${target_prefix}gcc; then
- CC=$i/${target_prefix}gcc
- break
- fi
-done
-IFS=$saved_IFS
-
-if test x$CC = x; then
- echo "No valid gcc found"
- exit 1
-fi
-test $verbose -gt 0 && echo "Using $CC"
-
-for i in `${CC} --print-multi-lib 2>/dev/null`; do
- dir=`echo $i | sed -e 's/;.*$//'`
- case $dir in
- .) f=$target
- flags=""
- ;;
- *) f=`echo $target-$dir | sed -e 's%\/%-%g'`
- flags=`echo $i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`
- ;;
- esac
-
- if test $config -gt 0; then
- cfg="rtems-config.$f"
- test $verbose -gt 0 && echo "Generating: $cfg"
-
-cat << EOF > $cfg
-#!/bin/sh
-
-${rtems_srcdir}/configure --target=$target \\
-'--enable-bare-cpu-cflags=$flags' \\
---enable-rtemsbsp="bare" \\
---enable-bare-cpu-model=NONE \\
---disable-networking \\
---disable-tests \\
---enable-maintainer-mode
-EOF
- chmod +x $cfg
- fi
-
- if test $custom -gt 0; then
- cfg=${rtems_srcdir}/make/custom/bare-$f.cfg
- test $verbose -gt 0 && echo "Generating: $cfg"
-cat << EOF > $cfg
-# Config file for the bare-$f BSP
-
-BARE_CPU_CFLAGS=$flags
-BARE_CPU_MODEL=NONE
-
-include \$(RTEMS_ROOT)/make/custom/bare.cfg
-EOF
-
- fi
-done
-
-exit 0
diff --git a/tools/build/packhex.c b/tools/build/packhex.c
deleted file mode 100644
index 1e8edb615e..0000000000
--- a/tools/build/packhex.c
+++ /dev/null
@@ -1,565 +0,0 @@
-
-/***** P A C K H E X . C ************************************************
- *
- * Packhex is a hex-file compaction utility. It attempts to concatenate
- * hex records to produce more size-efficient packaging.
- *
- * Limitations: Input files must be correctly formatted. This utility
- * is not robust enough to detect hex-record formatting
- * errors.
- *
- * Published: May 1993 Embedded Systems Programming magazine
- * "Creating Faster Hex Files"
- *
- * URL: ESP magazine: http://www.embedded.com
- * Source Code: ftp://ftp.mfi.com/pub/espmag/1993/pakhex.zip
- *
- * Author: Mark Gringrich
- *
- * Compiler: Microsoft C 6.0
- * cl /F 1000 packhex.c
- *
- *
- * $Id$
- *
- **************************************************************************/
-
-
-/* #define SMALLER_RECORDS */
-#ifdef SMALLER_RECORDS
-#define MAX_LEN_S1_RECS 128
-#define MAX_LEN_S2_RECS 128
-#define MAX_LEN_S3_RECS 128
-#else
-#define MAX_LEN_S1_RECS 252
-#define MAX_LEN_S2_RECS 251
-#define MAX_LEN_S3_RECS 250
-#endif
-
-
-/*--------------------------------- includes ---------------------------------*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "config.h"
-
-#ifndef VMS
-#ifndef HAVE_STRERROR
-extern int sys_nerr;
-extern char *sys_errlist[];
-
-#define strerror( _err ) \
- ((_err) < sys_nerr) ? sys_errlist [(_err)] : "unknown error"
-
-#else /* HAVE_STRERROR */
-char *strerror ();
-#endif
-#else /* VMS */
-char *strerror (int,...);
-#endif
-
-#if defined(__unix__) && !defined(EXIT_FAILURE)
-#define EXIT_FAILURE -1
-#define EXIT_SUCCESS 0
-#endif
-
-/*--------------------------------- defines ----------------------------------*/
-
-#define YES 1
-#define MAX_LINE_SIZE 600
-#define EOS '\0'
-
-
-/*---------------------------------- macros ----------------------------------*/
-
-/* Convert ASCII hexadecimal digit to value. */
-
-#define HEX_DIGIT( C ) ( ( ( ( C ) > '9' ) ? ( C ) + 25 : ( C ) ) & 0xF )
-
-
-/*--------------------------------- typedefs ---------------------------------*/
-
-typedef unsigned char Boolean;
-typedef unsigned char Uchar;
-typedef unsigned int Uint;
-typedef unsigned long Ulong;
-
-typedef struct /* Functions and constant returning Hex-record vital stats. */
-{
- Boolean ( *is_data_record )( char * );
- Ulong ( *get_address )( char * );
- Uint ( *get_data_count )( char * );
- const Uint max_data_count;
- char *( *get_data_start )( char * );
- void ( *put_data_record )( Uint, Ulong, char * );
-} Rec_vitals;
-
-
-/*--------------------------- function prototypes ----------------------------*/
-
-Rec_vitals * identify_first_data_record( char *, int );
-Ulong get_ndigit_hex( char *, int );
-
-
-/*----------------------------- Intel Hex format -----------------------------*/
-
-/*
- * Intel Hex data-record layout
- *
- * :aabbbbccd...dee
- *
- * : - header character
- * aa - record data byte count, a 2-digit hex value
- * bbbb - record address, a 4-digit hex value
- * cc - record type, a 2-digit hex value:
- * "00" is a data record
- * "01" is an end-of-data record
- * "02" is an extended-address record
- * "03" is a start record
- * d...d - data (always an even number of chars)
- * ee - record checksum, a 2-digit hex value
- * checksum = 2's complement
- * [ (sum of bytes: aabbbbccd...d) modulo 256 ]
- */
-
-
-Boolean is_intel_data_rec( char * rec_str )
-{
- return( ( rec_str[ 0 ] == ':' ) && ( rec_str[ 8 ] == '0' ) );
-}
-
-Uint get_intel_rec_data_count( char * rec_str )
-{
- return( ( Uint ) get_ndigit_hex( rec_str + 1, 2 ) );
-}
-
-Ulong get_intel_rec_address( char * rec_str )
-{
- return( get_ndigit_hex( rec_str + 3, 4 ) );
-}
-
-char * get_intel_rec_data_start( char * rec_str )
-{
- return( rec_str + 9 );
-}
-
-void put_intel_data_rec( Uint count, Ulong address, char * data_str )
-{
- char *ptr;
- Uint sum = count + ( address >> 8 & 0xff ) + ( address & 0xff );
-
- for ( ptr = data_str ; *ptr != EOS ; ptr += 2 )
- sum += ( Uint ) get_ndigit_hex( ptr, 2 );
-
- printf(
- ":%02X%04lX00%s%02X\n", count, address, data_str, (~sum + 1) & 0xff
- );
-}
-
-
-Rec_vitals intel_hex =
-{
- is_intel_data_rec,
- get_intel_rec_address,
- get_intel_rec_data_count,
- 255, /* Maximum data bytes in a record. */
- get_intel_rec_data_start,
- put_intel_data_rec
-};
-
-
-/*------------------------- Motorola S1-record format ------------------------*/
-
-/*
- * Motorola S-record data-record layout
- *
- * Sabbc...cd...dee
- *
- * S - header character
- * a - record type, a 1-digit value:
- * "0" is a header record
- * "1" is a 2-byte-address data record
- * "2" is a 3-byte-address data record
- * "3" is a 4-byte-address data record
- * "7" is a 4-byte-address end-of-data record
- * "8" is a 3-byte-address end-of-data record
- * "9" is a 2-byte-address end-of-data record
- * bb - record length in bytes, a 2-digit hex value
- * (record length doesn't count the header/type
- * chars and checksum byte)
- * c...c - record address, a 4-, 6-, or 8-digit value,
- * depending on record type
- * d...d - data (always an even number of chars)
- * ee - record checksum, a 2-digit hex value
- * checksum = 1's complement
- * [ (sum of all bytes: bbc..cd...d) modulo 256 ]
- */
-
-#define S1_COUNT_OFFSET 3
-
-
-Boolean is_moto_s1_data_rec( char * rec_str )
-{
- return ( ( rec_str[ 0 ] == 'S' ) && ( rec_str[ 1 ] == '1' ) );
-}
-
-Uint get_moto_s1_rec_data_count( char * rec_str )
-{
- return( ( Uint ) get_ndigit_hex( rec_str + 2, 2 ) - S1_COUNT_OFFSET );
-}
-
-Ulong get_moto_s1_rec_address( char * rec_str )
-{
- return( get_ndigit_hex( rec_str + 4, 4 ) );
-}
-
-char * get_moto_s1_rec_data_start( char * rec_str )
-{
- return( rec_str + 8 );
-}
-
-void put_moto_s1_data_rec( Uint count, Ulong address, char * data_str )
-{
- char *ptr;
- Uint sum = S1_COUNT_OFFSET + count +
- ( address >> 8 & 0xff ) + ( address & 0xff );
-
- for ( ptr = data_str ; *ptr != EOS ; ptr += 2 )
- sum += ( Uint ) get_ndigit_hex( ptr, 2 );
-
- printf(
- "S1%02X%04lX%s%02X\n",
- count + S1_COUNT_OFFSET, address, data_str, ~sum & 0xff
- );
-}
-
-
-Rec_vitals motorola_s1_rec =
-{
- is_moto_s1_data_rec,
- get_moto_s1_rec_address,
- get_moto_s1_rec_data_count,
- MAX_LEN_S1_RECS, /* Maximum data bytes in a record. */
- get_moto_s1_rec_data_start,
- put_moto_s1_data_rec
-};
-
-
-/*------------------------- Motorola S2-record format ------------------------*/
-
-#define S2_COUNT_OFFSET 4
-
-Boolean is_moto_s2_data_rec( char * rec_str )
-{
- return ( ( rec_str[ 0 ] == 'S' ) && ( rec_str[ 1 ] == '2' ) );
-}
-
-Uint get_moto_s2_rec_data_count( char * rec_str )
-{
- return( ( Uint ) get_ndigit_hex( rec_str + 2, 2 ) - S2_COUNT_OFFSET );
-}
-
-Ulong get_moto_s2_rec_address( char * rec_str )
-{
- return( get_ndigit_hex( rec_str + 4, 6 ) );
-}
-
-char * get_moto_s2_rec_data_start( char * rec_str )
-{
- return( rec_str + 10 );
-}
-
-void put_moto_s2_data_rec( Uint count, Ulong address, char * data_str )
-{
- char *ptr;
- Uint sum = S2_COUNT_OFFSET + count + ( address >> 16 & 0xff ) +
- ( address >> 8 & 0xff ) +
- ( address & 0xff );
-
- for ( ptr = data_str ; *ptr != EOS ; ptr += 2 )
- sum += ( Uint ) get_ndigit_hex( ptr, 2 );
-
- printf(
- "S2%02X%06lX%s%02X\n",
- count + S2_COUNT_OFFSET, address, data_str, ~sum & 0xff
- );
-}
-
-
-Rec_vitals motorola_s2_rec =
-{
- is_moto_s2_data_rec,
- get_moto_s2_rec_address,
- get_moto_s2_rec_data_count,
- MAX_LEN_S2_RECS, /* Maximum data bytes in a record. */
- get_moto_s2_rec_data_start,
- put_moto_s2_data_rec
-};
-
-
-/*------------------------- Motorola S3-record format ------------------------*/
-
-#define S3_COUNT_OFFSET 5
-
-Boolean is_moto_s3_data_rec( char * rec_str )
-{
- return ( ( rec_str[ 0 ] == 'S' ) && ( rec_str[ 1 ] == '3' ) );
-}
-
-Uint get_moto_s3_rec_data_count( char * rec_str )
-{
- return( ( Uint ) get_ndigit_hex( rec_str + 2, 2 ) - S3_COUNT_OFFSET );
-}
-
-Ulong get_moto_s3_rec_address( char * rec_str )
-{
- return( get_ndigit_hex( rec_str + 4, 8 ) );
-}
-
-char * get_moto_s3_rec_data_start( char * rec_str )
-{
- return( rec_str + 12 );
-}
-
-void put_moto_s3_data_rec( Uint count, Ulong address, char * data_str )
-{
- char *ptr;
- Uint sum = S3_COUNT_OFFSET + count + ( address >> 24 & 0xff ) +
- ( address >> 16 & 0xff ) +
- ( address >> 8 & 0xff ) +
- ( address & 0xff );
-
- for ( ptr = data_str ; *ptr != EOS ; ptr += 2 )
- sum += ( Uint ) get_ndigit_hex( ptr, 2 );
-
- printf(
- "S3%02X%08lX%s%02X\n",
- count + S3_COUNT_OFFSET, address, data_str, ~sum & 0xff
- );
-}
-
-
-Rec_vitals motorola_s3_rec =
-{
- is_moto_s3_data_rec,
- get_moto_s3_rec_address,
- get_moto_s3_rec_data_count,
- MAX_LEN_S3_RECS, /* Maximum data bytes in a record. */
- get_moto_s3_rec_data_start,
- put_moto_s3_data_rec
-};
-
-
-/*-------------------- Put your favorite hex format here ---------------------*/
-
-/*
- * * * * The following is a template for an additional hex format: * * *
- *
- *
- * Boolean is_X_data_rec( char * rec_str ) {}
- *
- * Uint get_X_rec_data_count( char * rec_str ) {}
- *
- * Ulong get_X_rec_address( char * rec_str ) {}
- *
- * char * get_X_rec_data_start( char * rec_str ) {}
- *
- * void put_X_data_rec( Uint count, Ulong address, char * data_str ) {}
- *
- * Rec_vitals X_rec =
- * {
- * is_X_data_rec,
- * get_X_rec_address,
- * get_X_rec_data_count,
- * MAXIMUM DATA BYTES IN A RECORD,
- * get_X_rec_data_start,
- * put_X_data_rec
- * };
- *
- */
-
-/*----------------------------------------------------------------------------*/
-
-
-/*
- * Put address of additional Rec_vitals structures
- * in this array, before the NULL entry.
- */
-
-Rec_vitals *formats[] =
-{
- &intel_hex,
- &motorola_s1_rec,
- &motorola_s2_rec,
- &motorola_s3_rec,
- ( Rec_vitals * ) NULL
-};
-
-
-/**** main *****************************************************************
-*
-*
-* Expects: Nothing (no command-line parameters).
-*
-* Returns: Exit status (EXIT_SUCCESS or EXIT_FAILURE).
-*
-* Reads hex records on the standard input and attempts to
-* splice adjacent data fields together. Results appear on
-* the standard output.
-*
-*******************************************************************************/
-
-int main(
- int argc,
- char **argv
-)
-{
-
- char inbuff[ MAX_LINE_SIZE ], outbuff[ MAX_LINE_SIZE ];
- char *in_dptr, *out_dptr;
- int d_total, d_count, d_excess, n;
- int length;
- Ulong in_rec_addr, out_rec_addr = 0;
- Rec_vitals *rptr;
-
-
- /* Sift through file until first hex record is identified. */
-
- rptr = identify_first_data_record( inbuff, MAX_LINE_SIZE );
- if ( rptr == NULL )
- {
- fputs( "No hex records found.\n", stderr );
- exit( EXIT_FAILURE );
- }
-
-
- /* Attempt data-record splicing until end-of-file is reached. */
- d_total = 0;
- for (;;) {
- if ( rptr->is_data_record( inbuff ) == YES )
- { /* Input record is a data record. */
- d_count = rptr->get_data_count( inbuff );
- in_rec_addr = rptr->get_address( inbuff );
- in_dptr = rptr->get_data_start( inbuff );
-
- if ( d_total == 0 || in_rec_addr != out_rec_addr + d_total )
- { /* Begin a new output record. */
- if ( d_total != 0 )
- rptr->put_data_record( d_total, out_rec_addr, outbuff );
- out_dptr = outbuff;
- n = d_total = d_count;
- out_rec_addr = in_rec_addr;
- }
- else if
- ( ( d_excess = d_total + d_count - rptr->max_data_count ) > 0 )
- { /* Output a maximum-length record, then start a new record. */
- strncat( outbuff, in_dptr, 2 * ( d_count - d_excess ) );
- rptr->put_data_record(
- rptr->max_data_count, out_rec_addr, outbuff
- );
- in_dptr += 2 * ( d_count - d_excess );
- out_dptr = outbuff;
- n = d_total = d_excess;
- out_rec_addr += rptr->max_data_count;
- }
- else
- { /* Append input record's data field with accumulated data. */
- out_dptr = outbuff + ( 2 * d_total );
- d_total += n = d_count;
- }
- strncpy( out_dptr, in_dptr, 2 * n );
- out_dptr[ 2 * n ] = EOS;
- }
- else
- { /* Not a data record;
- * flush accumulated data then echo non-data record.
- */
- if ( d_total != 0 )
- {
- rptr->put_data_record( d_total, out_rec_addr, outbuff );
- d_total = 0;
- }
- puts( inbuff );
- }
-
- inbuff[ MAX_LINE_SIZE - 1 ] = '\0';
- if ( !fgets( inbuff, MAX_LINE_SIZE, stdin ) )
- break;
- if ( inbuff[ MAX_LINE_SIZE - 1 ] ) {
- fprintf( stderr, "Input line too long" );
- exit( 1 );
- }
- length = strlen(inbuff);
- inbuff[length - 1] = '\0';
-
- }
-
-
- return ( EXIT_SUCCESS );
-
-}
-
-
-/**** identify_first_data_record *******************************************
-*
-* Expects: Pointer to hex-record line buffer.
-*
-* Returns: Pointer to hex-record structure (NULL if no match found).
-*
-* Reads the standard input, line by line, searching for a valid
-* record header character. If a valid header is found, a pointer
-* to the hex-record's type structure is returned, otherwise NULL.
-*
-* The input-stream pointer is left pointing to the first valid hex record.
-*
-*******************************************************************************/
-
-Rec_vitals * identify_first_data_record( char * buff_ptr, int max_length )
-{
- Rec_vitals ** ptr;
- int length;
-
-
-
- for ( ;; ) {
-
- buff_ptr[ max_length - 1 ] = '\0';
- if ( !fgets( buff_ptr, max_length, stdin ) )
- break;
- if ( buff_ptr[ max_length - 1 ] ) {
- fprintf( stderr, "Input line too long" );
- exit( 1 );
- }
- length = strlen(buff_ptr);
- buff_ptr[length - 1] = '\0';
-
- for ( ptr = formats ; *ptr != ( Rec_vitals * ) NULL ; ptr++ )
- if ( ( *ptr )->is_data_record( buff_ptr ) == YES )
- return( *ptr ); /* Successful return. */
-
- puts( buff_ptr ); /* Echo non-hex-record line. */
- }
-
- return( ( Rec_vitals * ) NULL ); /* Unsuccessful return. */
-}
-
-
-/**** get_ndigit_hex *******************************************************
-*
-* Expects: Pointer to first ASCII hexadecimal digit, number of digits.
-*
-* Returns: Value of hexadecimal string as an unsigned long.
-*
-*******************************************************************************/
-
-Ulong get_ndigit_hex( char * cptr, int digits )
-{
- Ulong value;
-
- for ( value = 0 ; --digits >= 0 ; cptr++ )
- value = ( value * 16L ) + HEX_DIGIT( *cptr );
-
- return( value );
-}
diff --git a/tools/build/rtems-bin2c.c b/tools/build/rtems-bin2c.c
deleted file mode 100644
index 4e6796aa38..0000000000
--- a/tools/build/rtems-bin2c.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * bin2c.c
- *
- * convert a binary file into a C source array.
- *
- * THE "BEER-WARE LICENSE" (Revision 3.1415):
- * sandro AT sigala DOT it wrote this file. As long as you retain this
- * notice you can do whatever you want with this stuff. If we meet some
- * day, and you think this stuff is worth it, you can buy me a beer in
- * return. Sandro Sigala
- *
- * Subsequently modified by Joel Sherrill <joel.sherrill@oarcorp.com>
- * to add a number of capabilities not in the original.
- *
- * syntax: bin2c [-c] [-z] <input_file> <output_file>
- *
- * -c do NOT add the "const" keyword to definition
- * -s add the "static" keywork to definition
- * -v verbose
- * -z terminate the array with a zero (useful for embedded C strings)
- *
- * examples:
- * bin2c -c myimage.png myimage_png.cpp
- * bin2c -z sometext.txt sometext_txt.cpp
- *
- */
-
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <libgen.h>
-
-#ifndef PATH_MAX
-#define PATH_MAX 1024
-#endif
-
-int useconst = 1;
-int usestatic = 0;
-int verbose = 0;
-int zeroterminated = 0;
-int createC = 1;
-int createH = 1;
-
-int myfgetc(FILE *f)
-{
- int c = fgetc(f);
- if (c == EOF && zeroterminated) {
- zeroterminated = 0;
- return 0;
- }
- return c;
-}
-
-void process(const char *ifname, const char *ofname)
-{
- FILE *ifile, *ocfile, *ohfile;
- char buf[PATH_MAX], *p;
- char obasename[PATH_MAX];
- char ocname[PATH_MAX];
- char ohname[PATH_MAX];
- const char *cp;
- size_t len;
-
- /* Error check */
- if ( !ifname || !ofname ) {
- fprintf(stderr, "process has NULL filename\n");
- exit(1);
- }
-
- strncpy( obasename, ofname, PATH_MAX );
- len = strlen( obasename );
- if ( len >= 2 ) {
- if ( obasename[len-2] == '.' ) {
- if ( (obasename[len-1] == 'c') || (obasename[len-1] == 'h') )
- obasename[len-2] = '\0';
- }
- }
-
- sprintf( ocname, "%s.c", obasename );
- sprintf( ohname, "%s.h", obasename );
-
- if ( verbose ) {
- fprintf(
- stderr,
- "in file: %s\n"
- "c file: %s\n"
- "h file: %s\n",
- ifname,
- ocname,
- ohname
- );
- }
-
- /* Open input and output files */
- ifile = fopen(ifname, "rb");
- if (ifile == NULL) {
- fprintf(stderr, "cannot open %s for reading\n", ifname);
- exit(1);
- }
-
- if ( createC ) {
- ocfile = fopen(ocname, "wb");
- if (ocfile == NULL) {
- fprintf(stderr, "cannot open %s for writing\n", ocname);
- exit(1);
- }
- }
-
- if ( createH ) {
- ohfile = fopen(ohname, "wb");
- if (ohfile == NULL) {
- fprintf(stderr, "cannot open %s for writing\n", ohname);
- exit(1);
- }
- }
-
- /* find basename */
- char *ifbasename = strdup(ifname);
- ifbasename = basename(ifbasename);
-
- strcpy(buf, ifbasename);
- for (p = buf; *p != '\0'; ++p)
- if (!isalnum(*p))
- *p = '_';
-
- if ( createC ) {
- /* print C file header */
- fprintf(
- ocfile,
- "/*\n"
- " * Declarations for C structure representing binary file %s\n"
- " *\n"
- " * WARNING: Automatically generated -- do not edit!\n"
- " */\n"
- "\n"
- "#include <sys/types.h>\n"
- "\n",
- ifbasename
- );
-
- /* print structure */
- fprintf(
- ocfile,
- "%s%sunsigned char %s[] = {\n ",
- ((usestatic) ? "static " : ""),
- ((useconst) ? "const " : ""),
- buf
- );
- int c, col = 1;
- while ((c = myfgetc(ifile)) != EOF) {
- if (col >= 78 - 6) {
- fprintf(ocfile, "\n ");
- col = 1;
- }
- fprintf(ocfile, "0x%.2x, ", c);
- col += 6;
-
- }
- fprintf(ocfile, "\n};\n");
-
- /* print sizeof */
- fprintf(
- ocfile,
- "\n"
- "%s%ssize_t %s_size = sizeof(%s);\n",
- ((usestatic) ? "static " : ""),
- ((useconst) ? "const " : ""),
- buf,
- buf
- );
- } /* createC */
-
- /*****************************************************************/
- /****** END OF C FILE *****/
- /*****************************************************************/
-
- if ( createH ) {
- /* print H file header */
- fprintf(
- ohfile,
- "/*\n"
- " * Extern declarations for C structure representing binary file %s\n"
- " *\n"
- " * WARNING: Automatically generated -- do not edit!\n"
- " */\n"
- "\n"
- "#ifndef __%s_h\n"
- "#define __%s_h\n"
- "\n"
- "#include <sys/types.h>\n"
- "\n",
- ifbasename, /* header */
- obasename, /* ifndef */
- obasename /* define */
- );
-
- /* print structure */
- fprintf(
- ohfile,
- "extern %s%sunsigned char %s[];",
- ((usestatic) ? "static " : ""),
- ((useconst) ? "const " : ""),
- buf
- );
- /* print sizeof */
- fprintf(
- ohfile,
- "\n"
- "extern %s%ssize_t %s_size;\n",
- ((usestatic) ? "static " : ""),
- ((useconst) ? "const " : ""),
- buf
- );
-
- fprintf(
- ohfile,
- "\n"
- "#endif\n"
- );
- } /* createH */
-
- /*****************************************************************/
- /****** END OF H FILE *****/
- /*****************************************************************/
-
- fclose(ifile);
- if ( createC ) { fclose(ocfile); }
- if ( createH ) { fclose(ohfile); }
-}
-
-void usage(void)
-{
- fprintf(
- stderr,
- "usage: bin2c [-csvzCH] <input_file> <output_file>\n"
- " <input_file> is the binary file to convert\n"
- " <output_file> should not have a .c or .h extension\n"
- "\n"
- " -c - do NOT use const in declaration\n"
- " -s - do use static in declaration\n"
- " -v - verbose\n"
- " -z - add zero terminator\n"
- " -H - create c-header only\n"
- " -C - create c-source file only\n"
- );
- exit(1);
-}
-
-int main(int argc, char **argv)
-{
- while (argc > 3) {
- if (!strcmp(argv[1], "-c")) {
- useconst = 0;
- --argc;
- ++argv;
- } else if (!strcmp(argv[1], "-s")) {
- usestatic = 1;
- --argc;
- ++argv;
- } else if (!strcmp(argv[1], "-v")) {
- verbose = 1;
- --argc;
- ++argv;
- } else if (!strcmp(argv[1], "-z")) {
- zeroterminated = 1;
- --argc;
- ++argv;
- } else if (!strcmp(argv[1], "-C")) {
- createH = 0;
- createC = 1;
- --argc;
- ++argv;
- } else if (!strcmp(argv[1], "-H")) {
- createC = 0;
- createH = 1;
- --argc;
- ++argv;
- } else {
- usage();
- }
- }
- if (argc != 3) {
- usage();
- }
-
- /* process( input_file, output_basename ) */
- process(argv[1], argv[2]);
- return 0;
-}
-
diff --git a/tools/build/search-id.sh b/tools/build/search-id.sh
deleted file mode 100755
index a94d2d7cc9..0000000000
--- a/tools/build/search-id.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-#
-# $Id$
-#
-
-find $1 -type f -a ! -name "*.scn" -a ! -name "bsp_specs" -a \
- -print > /tmp/$$.0
-find $1 -type f -a ! -name "*.scn" -a ! -name "bsp_specs" -a \
- -exec grep -l '$Id' {} \; > /tmp/$$.1
-
-diff /tmp/$$.0 /tmp/$$.1 > /tmp/$$.2
-
-grep "<" /tmp/$$.2 | sed 's/< //' >&1
-
-rm -f /tmp/$$*
diff --git a/tools/build/unhex.c b/tools/build/unhex.c
deleted file mode 100644
index 693049f465..0000000000
--- a/tools/build/unhex.c
+++ /dev/null
@@ -1,737 +0,0 @@
-/*
- * unhex
- * convert a hex file to binary equivalent. If more than one file name
- * is given, then the output will be logically concatenated together.
- * stdin and stdout are defaults. Verbose will enable checksum output.
- *
- * Supported input formats are Intel hex, Motorola S records, and TI 'B'
- * records.
- *
- * Intel hex input format is
- * Byte
- * 1 Colon :
- * 2..3 Record length, eg: "20"
- * 4..7 load address nibbles
- * 8..9 record type: "00" (data) or "02" base addr
- * 10..x data bytes in ascii-hex
- * x+1..x+2 cksum (2's compl of (len+addr+data))
- * x+3 \n -- newline
- *
- * $Id$
- */
-
-char *USAGE = "\
-usage: unhex [-va] [ -o file ] [ file [file ... ] ]\n\
- -v -- verbose\n\
- -a base -- 1st byte of output corresponds to this address\n\
- -l -- linear, just writes data out\n\
- -o file -- output file; must not be input file\n\
- -F k_bits -- \"holes\" in input will be filled with 0xFF's\n\
- up to \"k_bits\" * 1024 bits\n\
-";
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <ctype.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <errno.h>
-
-#include "config.h"
-
-#ifndef VMS
-#ifndef HAVE_STRERROR
-extern int sys_nerr;
-extern char *sys_errlist[];
-
-#define strerror( _err ) \
- ((_err) < sys_nerr) ? sys_errlist [(_err)] : "unknown error"
-
-#else /* HAVE_STRERROR */
-char *strerror ();
-#endif
-#else /* VMS */
-char *strerror (int,...);
-#endif
-
-
-#define OK 0
-#define FAILURE (-1)
-#define Failed(x) ((x) == FAILURE)
-#define TRUE 1
-#define FALSE 0
-typedef char bool;
-#define STREQ(a,b) (strcmp(a,b) == 0)
-
-typedef unsigned char u8;
-typedef unsigned short u16;
-typedef unsigned long u32;
-
-/*
- * Pick out designated bytes
- */
-
-#define B0(x) ((x) & 0xff)
-#define B1(x) B0((x) >> 8)
-#define B2(x) B0((x) >> 16)
-#define B3(x) B0((x) >> 24)
-
-typedef struct buffer_rec {
- u32 dl_destaddr;
- u32 dl_jumpaddr;
- int dl_count;
- u8 dl_buf[512];
-} buffer_rec;
-
-/*
- * vars controlled by command line options
- */
-
-bool verbose = FALSE; /* be verbose */
-bool linear = FALSE; /* just write out linear data */
-char *outfilename = "-"; /* default output is stdout */
-u32 base = 0L; /* base address */
-u32 FFfill = 0L; /* how far to fill w 0xFF's */
-
-extern char *optarg; /* getopt(3) control vars */
-extern int optind;
-
-char *progname; /* for error() */
-
-void error(int errn, ...);
-#define ERR_ERRNO (1<<((sizeof(int) * 8) - 2)) /* hi bit; use 'errno' */
-#define ERR_FATAL (ERR_ERRNO / 2) /* error is fatal; no return */
-#define ERR_ABORT (ERR_ERRNO / 4) /* error is fatal; abort */
-#define ERR_MASK (ERR_ERRNO | ERR_FATAL | ERR_ABORT) /* all */
-
-#ifdef HAVE_STRTOUL
-#define stol(p) strtoul(p, (char **) NULL, 0)
-#else
-#define stol(p) strtol(p, (char **) NULL, 0)
-#endif
-
-int unhex(FILE *ifp, char *inm, FILE *ofp, char *onm);
-int convert_Intel_records(FILE *ifp, char *inm, FILE *ofp, char *onm);
-int convert_S_records(FILE *ifp, char *inm, FILE *ofp, char *onm);
-int convert_TI_records(FILE *ifp, char *inm, FILE *ofp, char *onm);
-void write_record(buffer_rec *tb, FILE *fp);
-int getnibble(char **p);
-int getbyte(char **p);
-long getNbytes(char **p, int n);
-void badformat(char *s, char *fname, char *msg);
-
-#define get1bytes(p) ((int) getbyte(p))
-#define get2bytes(p) ((int) getNbytes(p, 2))
-#define get3bytes(p) getNbytes(p, 3)
-#define get4bytes(p) getNbytes(p, 4)
-
-char *BADADDR = "Invalid record address";
-char *BADLEN = "Invalid record length";
-char *BADBASE = "Bad base or starting address";
-char *BADFMT = "Unrecognized record type";
-char *BADDATA = "Invalid data byte";
-char *BADCSUM = "Invalid checksum";
-char *MISCSUM = "Checksum mismatch";
-char *BADTYPE = "Unrecognized record type";
-char *MISTYPE = "Incompatible record types";
-
-int main(
- int argc,
- char **argv
-)
-{
- register int c;
- bool showusage = FALSE; /* usage error? */
- int rc = 0;
- FILE *outfp, *infp;
-
- /*
- * figure out invocation leaf-name
- */
-
- if ((progname = strrchr(argv[0], '/')) == (char *) NULL)
- progname = argv[0];
- else
- progname++;
-
- argv[0] = progname; /* for getopt err reporting */
-
- /*
- * Check options and arguments.
- */
-
- progname = argv[0];
- while ((c = getopt(argc, argv, "F:a:o:vl")) != EOF)
- switch (c)
- {
- case 'a': /* base address */
- base = stol(optarg);
- break;
-
- case 'l': /* linear output */
- linear = TRUE;
- break;
-
- case 'v': /* toggle verbose */
- verbose = ! verbose;
- break;
-
- case 'o': /* output file */
- outfilename = optarg;
- break;
-
- case 'F': /* 0xFF fill amount (bytes) */
- FFfill = stol(optarg) * 1024L / 8L;
- break;
-
- case '?':
- showusage = TRUE;
- }
-
- if (showusage)
- {
- (void) fprintf(stderr, "%s", USAGE);
- exit(1);
- }
-
- if (linear && (base != 0))
- {
- error(0, "-l and -a may not be specified in combination");
- exit(1);
- }
-
- if (STREQ(outfilename, "-"))
- {
- outfp = stdout;
- outfilename = "stdout";
- }
- else
- if ((outfp = fopen(outfilename, "w")) == (FILE *) NULL)
- {
- error(-1, "couldn't open '%s' for output", outfilename);
- exit(1);
- }
-
- /*
- * Now process the input files (or stdin, if none specified)
- */
-
- if (argv[optind] == (char *) NULL) /* just stdin */
- exit(unhex(stdin, "stdin", outfp, outfilename));
- else
- for (; (optarg = argv[optind]); optind++)
- {
- if (STREQ(optarg, "-"))
- rc += unhex(stdin, "stdin", outfp, outfilename);
- else
- {
- if ((infp = fopen(optarg, "r")) == (FILE *) NULL)
- {
- error(-1, "couldn't open '%s' for input", optarg);
- exit(1);
- }
- rc += unhex(infp, optarg, outfp, outfilename);
- }
- }
-
- return(rc);
-}
-
-u16 filesum;
-
-int
-unhex(FILE *ifp,
- char *inm,
- FILE *ofp,
- char *onm)
-{
- int c;
-
- filesum = 0;
-
- /*
- * Make sure holes will be filled with 0xFF's if requested. We
- * do this the easy way by just filling the file with FF's before
- * getting started. To do it more optimally would be quite a bit
- * more difficult since the user can skip around as much as he/she
- * likes in the input hex file addressing.
- *
- * We'll clean this up later (after this program has run) with
- * 'stripffs'
- */
-
- if (FFfill)
- {
- (void) fseek(ofp, 0, 0);
- for (c = FFfill; c > 0; c--)
- (void) fputc(0xFF, ofp);
- }
-
- /*
- * Read the first char from file and determine record types
- */
-
- if ((c = getc(ifp)) != EOF)
- {
- ungetc(c, ifp);
- switch(c)
- {
- case 'S':
- convert_S_records(ifp, inm, ofp, onm);
- break;
-
- case ':':
- convert_Intel_records(ifp, inm, ofp, onm);
- break;
-
- case '9':
- case 'B':
- convert_TI_records(ifp, inm, ofp, onm);
- break;
-
- default:
- {
- char tmp[2];
- tmp[0] = c; tmp[1] = 0;
- badformat(tmp, inm, BADFMT);
- }
- }
- }
-
- if (verbose)
- fprintf(stderr, "'%s' checksum is 0x%04x\n", inm, filesum);
-
- return 0;
-}
-
-int
-convert_Intel_records(
- FILE *ifp,
- char *inm,
- FILE *ofp,
- char *onm)
-{
- char buff[512];
- char *p;
- u8 cksum;
- int incksum;
- int c;
- int rectype; /* record type */
- int len; /* data length of current line */
- u32 addr;
- u32 base_address = 0;
- bool endrecord = FALSE;
- buffer_rec tb;
-
- while ( ! endrecord && (fgets(buff, sizeof(buff), ifp)))
- {
- p = &buff[0];
-
- if (p[strlen(p)-1] == '\n') /* get rid of newline */
- p[strlen(p)-1] = '\0';
-
- if (p[strlen(p)-1] == '\r') /* get rid of any CR */
- p[strlen(p)-1] = '\0';
-
- tb.dl_count = 0;
-
- if (*p != ':')
- badformat(p, inm, BADFMT);
- p++;
-
- if ((len = getbyte(&p)) == -1) /* record len */
- badformat(buff, inm, BADLEN);
-
- if ((addr = get2bytes(&p)) == -1L) /* record addr */
- badformat(buff, inm, BADADDR);
-
- rectype = getbyte(&p);
-
- cksum = len + B0(addr) + B1(addr) + rectype;
-
- switch (rectype)
- {
- case 0x00: /* normal data record */
- tb.dl_destaddr = base_address + addr;
- while (len--)
- {
- if ((c = getbyte(&p)) == -1)
- badformat(buff, inm, BADDATA);
- cksum += c;
- filesum += c;
- tb.dl_buf[tb.dl_count++] = c;
- }
- break;
-
- case 0x01: /* execution start address */
- base_address = addr;
- endrecord = TRUE;
- break;
-
- case 0x02: /* new base */
- if ((base_address = get2bytes(&p)) == -1L)
- badformat(buff, inm, BADBASE);
- cksum += B0(base_address) + B1(base_address);
- base_address <<= 4;
- break;
-
- case 0x03: /* seg/off execution start address */
- {
- u32 seg, off;
-
- seg = get2bytes(&p);
- off = get2bytes(&p);
- if ((seg == -1L) || (off == -1L))
- badformat(buff, inm, BADADDR);
-
- cksum += B0(seg) + B1(seg) + B0(off) + B1(off);
-
- tb.dl_jumpaddr = (seg << 4) + off;
- break;
- }
-
- default:
- error(0, "unknown Intel-hex record type: 0x%02x", rectype);
- badformat(buff, inm, BADTYPE);
- }
-
- /*
- * Verify checksums are correct in file.
- */
-
- cksum = (-cksum) & 0xff;
- if ((incksum = getbyte(&p)) == -1)
- badformat(buff, inm, BADCSUM);
- if (((u8) incksum) != cksum)
- badformat(buff, inm, MISCSUM);
-
- if (tb.dl_count)
- write_record(&tb, ofp);
- }
- return 0;
-}
-
-int
-convert_S_records(
- FILE *ifp,
- char *inm,
- FILE *ofp,
- char *onm)
-{
- char buff[512];
- char *p;
- u8 cksum;
- int incksum;
- int c;
- int len; /* data length of current line */
- int rectype; /* record type */
- u32 addr;
- bool endrecord = FALSE;
- buffer_rec tb;
-
- while ( ! endrecord && (fgets(buff, sizeof(buff), ifp)))
- {
- p = &buff[0];
-
- if (p[strlen(p)-1] == '\n') /* get rid of newline */
- p[strlen(p)-1] = '\0';
-
- if (p[strlen(p)-1] == '\r') /* get rid of any CR */
- p[strlen(p)-1] = '\0';
-
- tb.dl_count = 0;
-
- if (*p != 'S')
- badformat(p, inm, BADFMT);
- p++;
-
- if ((rectype = getnibble(&p)) == -1) /* record type */
- badformat(buff, inm, BADTYPE);
-
- if ((len = getbyte(&p)) == -1) /* record len */
- badformat(buff, inm, BADLEN);
- cksum = len;
-
- switch (rectype)
- {
- case 0x00: /* comment field, ignored */
- goto write_it;
-
- case 0x01: /* data record, 16 bit addr */
- if ((addr = get2bytes(&p)) == -1L)
- badformat(buff, inm, BADADDR);
- len -= 3;
- goto doit;
-
- case 0x02: /* ... 24 bit addr */
- if ((addr = get3bytes(&p)) == -1L)
- badformat(buff, inm, BADADDR);
- len -= 4;
- goto doit;
-
- case 0x03: /* ... 32 bit addr */
- if ((addr = get4bytes(&p)) == -1L)
- badformat(buff, inm, BADADDR);
- len -= 5;
- doit:
- cksum += B0(addr) + B1(addr) + B2(addr) + B3(addr);
-
- tb.dl_destaddr = addr;
- while (len--)
- {
- if ((c = getbyte(&p)) == -1)
- badformat(buff, inm, BADDATA);
- cksum += c;
- filesum += c;
- tb.dl_buf[tb.dl_count++] = c;
- }
- break;
-
- case 0x07: /* 32 bit end record */
- if ((addr = get4bytes(&p)) == -1L)
- badformat(buff, inm, BADADDR);
- goto end_rec;
-
- case 0x08: /* 24 bit end record */
- if ((addr = get3bytes(&p)) == -1L)
- badformat(buff, inm, BADADDR);
- goto end_rec;
-
- case 0x09: /* 16 bit end record */
- if ((addr = get2bytes(&p)) == -1L)
- badformat(buff, inm, BADADDR);
-
-end_rec:
- cksum += B0(addr) + B1(addr) + B2(addr) + B3(addr);
- tb.dl_jumpaddr = addr;
- break;
-
- default:
- error(0, "unknown Motorola-S record type: 0x%02x", rectype);
- badformat(buff, inm, BADTYPE);
- break;
- }
-
- /*
- * Verify checksums are correct in file.
- */
-
- cksum = (~cksum) & 0xff;
- if ((incksum = getbyte(&p)) == -1)
- badformat(buff, inm, BADCSUM);
- if (((u8) incksum) != cksum)
- badformat(buff, inm, MISCSUM);
-
-write_it:
- if (tb.dl_count)
- write_record(&tb, ofp);
- }
- return 0;
-}
-
-int
-convert_TI_records(
- FILE *ifp,
- char *inm,
- FILE *ofp,
- char *onm)
-{
- char buff[512];
- char *p;
- int c;
- bool endrecord = FALSE;
- bool eol;
- buffer_rec tb;
-
- while ( ! endrecord && (fgets(buff, sizeof(buff), ifp)))
- {
- if (p[strlen(p)-1] == '\n') /* get rid of newline */
- p[strlen(p)-1] = '\0';
-
- if (p[strlen(p)-1] == '\r') /* get rid of any CR */
- p[strlen(p)-1] = '\0';
-
- tb.dl_count = 0;
-
- p = &buff[0];
- eol = FALSE;
- while ( ! eol && ! endrecord)
- {
- switch (*p++)
- {
- case '9':
- if (tb.dl_count)
- write_record(&tb, ofp);
- tb.dl_destaddr = get2bytes(&p);
- break;
-
- case 'B':
- c = getbyte(&p);
- filesum += c;
- tb.dl_buf[tb.dl_count++] = c;
- c = getbyte(&p);
- filesum += c;
- tb.dl_buf[tb.dl_count++] = c;
- break;
-
- case 'F':
- eol = TRUE;
- break;
-
- case ':':
- endrecord = TRUE;
- break;
-
- default:
- badformat(p, inm, BADFMT);
- }
- }
- if (tb.dl_count)
- write_record(&tb, ofp);
- }
- return 0;
-}
-
-void
-write_record(buffer_rec *tb,
- FILE *fp)
-{
- if ( ! linear)
- {
- if (tb->dl_destaddr < base)
- error(ERR_FATAL, "record at address 0x%x precedes base of 0x%x",
- tb->dl_destaddr, base);
- (void) fseek(fp, tb->dl_destaddr - base, 0);
- }
-
- (void) fwrite(tb->dl_buf, tb->dl_count, 1, fp);
- tb->dl_destaddr += tb->dl_count;
- tb->dl_count = 0;
-}
-
-int
-getnibble(char **p)
-{
- register int val;
-
- **p = toupper(**p);
- switch (**p)
- {
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- val = **p - '0';
- break;
-
- case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
- val = 10 + (**p - 'A');
- break;
-
- default:
- return(-1);
- }
- *p += 1;
-
- return(val & 0x0f);
-}
-
-int
-getbyte(char **p)
-{
- int n0, n1;
-
- if ((n0 = getnibble(p)) == -1)
- return(-1);
- if ((n1 = getnibble(p)) == -1)
- return(-1);
-
- return(((n0 << 4) + n1) & 0xff);
-}
-
-long
-getNbytes(char **p,
- int n)
-{
- int t;
- u32 val = 0;
-
- while (n--)
- {
- if ((t = getbyte(p)) == -1)
- return(-1L);
- val <<= 8;
- val += t;
- }
-
- return(val);
-}
-
-void
-badformat(char *s,
- char *fname,
- char *msg)
-{
- if (s[strlen(s)-1] == '\n') /* get rid of newline */
- s[strlen(s)-1] = '\0';
- error(0, "line '%s'::\n\tfrom file '%s'; %s", s, fname, msg);
- exit(1);
-}
-
-/*
- * error(errn, arglist)
- * report an error to stderr using printf(3) conventions.
- * Any output is preceded by '<progname>: '
- *
- * Uses ERR_EXIT bit to request exit(errn)
- * ERR_ABORT to request abort()
- * ERR_ERRNO to indicate use of errno instead of argument.
- *
- * If resulting 'errn' is non-zero, it is assumed to be an 'errno' and its
- * associated error message is appended to the output.
- */
-
-/*VARARGS*/
-
-void
-error(int error_flag, ...)
-{
- va_list arglist;
- register char *format;
- int local_errno;
-
- extern int errno;
-
- (void) fflush(stdout); /* in case stdout/stderr same */
-
- local_errno = error_flag & ~ERR_MASK;
- if (error_flag & ERR_ERRNO) /* use errno? */
- local_errno = errno;
-
- va_start(arglist, error_flag);
- format = va_arg(arglist, char *);
- (void) fprintf(stderr, "%s: ", progname);
- (void) vfprintf(stderr, format, arglist);
- va_end(arglist);
-
- if (local_errno)
- (void) fprintf(stderr, " (%s)\n", strerror(local_errno));
- else
- (void) fprintf(stderr, "\n");
-
- (void) fflush(stderr);
-
- if (error_flag & (ERR_FATAL | ERR_ABORT))
- {
- if (error_flag & ERR_FATAL)
- {
- error(0, "fatal error, exiting");
- exit(local_errno ? local_errno : 1);
- }
- else
- {
- error(0, "fatal error, aborting");
- abort();
- }
- }
-}