PR binutils/6449
[platform/upstream/binutils.git] / binutils / bin2c.c
1 /* bin2c.c -- dump binary file in hex format
2    Copyright 2007, 2008 Free Software Foundation, Inc.
3
4    This file is part of GNU Binutils.
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
19    02110-1301, USA.  */
20
21 #include "sysdep.h"
22 #include "bfd.h"
23 #include "bucomm.h"
24
25 #if !defined O_TEXT && defined _O_TEXT
26   /* For MSC-compatible compilers.  */
27 # define O_TEXT _O_TEXT
28 #endif
29
30 #ifdef __BEOS__
31   /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect.  */
32 # undef O_BINARY
33 # undef O_TEXT
34 #endif
35
36 #if O_BINARY
37 # ifndef __DJGPP__
38 #  define setmode _setmode
39 #  define fileno(_fp) _fileno (_fp)
40 # endif /* not DJGPP */
41 # define SET_BINARY(_f) \
42   do { if (!isatty (_f)) setmode (_f, O_BINARY); } while (0)
43 #else
44 # define SET_BINARY(f) (void) 0
45 # define O_BINARY 0
46 # define O_TEXT 0
47 #endif /* O_BINARY */
48
49 int
50 main (int argc, char *argv[])
51 {
52   int c;
53   int i;
54
55 #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
56   setlocale (LC_MESSAGES, "");
57 #endif
58 #if defined (HAVE_SETLOCALE)
59   setlocale (LC_CTYPE, "");
60 #endif
61   bindtextdomain (PACKAGE, LOCALEDIR);
62   textdomain (PACKAGE);
63
64   if (argc != 1)
65     {
66       int ishelp = 0;
67       int isvers = 0;
68       FILE *stream;
69
70       if (argc == 2 && argv[1][0] == '-')
71         {
72           const char *opt = &argv[1][1];
73           if (*opt == '-')
74             ++opt;
75           ishelp = *opt == 'h' || *opt == 'H';
76           isvers = *opt == 'v' || *opt == 'V';
77         }
78
79       if (isvers)
80         print_version ("bin2c");
81
82       stream = ishelp ? stdout : stderr;
83       fprintf (stream, _("Usage: %s < input_file > output_file\n"), argv[0]);
84       fprintf (stream, _("Prints bytes from stdin in hex format.\n"));
85       exit (!ishelp);
86     }
87
88   SET_BINARY (fileno (stdin));
89
90   i = 0;
91   while ((c = getc (stdin)) != EOF)
92     {
93       printf ("0x%02x,", c);
94       if (++i == 16)
95         {
96           printf ("\n");
97           i = 0;
98         }
99     }
100   if (i != 0)
101     printf ("\n");
102
103   exit (0);
104 }