summaryrefslogtreecommitdiff
path: root/support/dktools/dk-bin2c.ctr
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-10-12 03:04:00 +0000
committerNorbert Preining <norbert@preining.info>2020-10-12 03:04:00 +0000
commit0ce40abb18ec02ec6fd6bcc5f21612c88daa7578 (patch)
tree416289fe1448873fd8ca33051f50ad85bffa8aaa /support/dktools/dk-bin2c.ctr
parentfdb18507cd80dc17f5a5256153d34668b4f4e61c (diff)
CTAN sync 202010120303
Diffstat (limited to 'support/dktools/dk-bin2c.ctr')
-rw-r--r--support/dktools/dk-bin2c.ctr1178
1 files changed, 0 insertions, 1178 deletions
diff --git a/support/dktools/dk-bin2c.ctr b/support/dktools/dk-bin2c.ctr
deleted file mode 100644
index 2b3e622229..0000000000
--- a/support/dktools/dk-bin2c.ctr
+++ /dev/null
@@ -1,1178 +0,0 @@
-%% options
-
-copyright owner = Dirk Krause
-copyright year = 2019-xxxx
-SPDX-License-Identifier: BSD-3-Clause
-
-
-
-%% module
-
-/** @file dk-bin2c The dk-bin2c program.
- See dk_bin2c_help_text for details.
-*/
-
-
-
-#include "dk4conf.h"
-
-#include <stdio.h>
-
-#if DK4_HAVE_STDLIB_H
-#ifndef STDLIB_H_INCLUDED
-#include <stdlib.h>
-#define STDLIB_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_UNISTD_H
-#ifndef UNISTD_H_INCLUDED
-#include <unistd.h>
-#define UNISTD_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_SYS_TYPES_H
-#ifndef SYS_TYPES_H_INCLUDED
-#include <sys/types.h>
-#define SYS_TYPES_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_SIGNAL_H
-#ifndef SIGNAL_H_INCLUDED
-#include <signal.h>
-#define SIGNAL_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_PROCESS_H
-#ifndef PROCESS_H_INCLUDED
-#include <process.h>
-#define PROCESS_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_IO_H
-#ifndef IO_H_INCLUDED
-#include <io.h>
-#define IO_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_FCNTL_H
-#ifndef FCNTL_H_INCLUDED
-#include <fcntl.h>
-#define FCNTL_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_ERRNO_H
-#ifndef ERRNO_H_INCLUDED
-#include <errno.h>
-#define ERRNO_H_INCLUDED 1
-#endif
-#endif
-
-#include "dk4types.h"
-#include "dk4const.h"
-#include "dk4mem.h"
-#include "dk4app.h"
-#include "dk4aopt.h"
-#include "dk4fopda.h"
-#include "dk4fput.h"
-#include "dk4vers.h"
-#include "dk4mpl.h"
-#include "dk4unused.h"
-#include "dk4str8.h"
-#include "dk4strw.h"
-#include "dk4strd.h"
-#include "dk4pathd.h"
-
-#ifndef DK4WMAIN_H_INCLUDED
-#include "dk4wmain.h"
-#endif
-
-$!trace-include
-
-
-
-/** Buffer for data from file.
-*/
-static unsigned char buffer[4096];
-
-
-
-/** Localized dkChar text fragments, overwritten by string table if found.
-*/
-static const dkChar * const dk_bin2c_kw_def[] = {
-$!string-table macro=dkT
-#
-# 0 Error: Failed to set up signal handlers!
-#
-Failed to set up signal handlers!
-#
-# 1 Error: Failed to restore signal handlers!
-#
-Failed to restore signal handlers!
-#
-# 2 Error: Path or file name too long!
-#
-Path or file name too long!
-#
-# 3 Error: Path too long!
-#
-Path too long!
-#
-# 4 Error: No matching file found!
-#
-No matching file found!
-#
-# 5 Error: Interrupted by SIGINT!
-#
-Interrupted by SIGINT!
-#
-# 6 Error: Interrupted by SIGTERM!
-#
-Interrupted by SIGTERM!
-#
-# 7 Error: Interrupted by SIGPIPE!
-#
-Interrupted by SIGPIPE!
-#
-# 8 Error: Failed to write to stdout!
-#
-Failed to write to stdout!
-$!end
-};
-
-
-
-/** Constant text fragments, not localized.
-*/
-static const dkChar * const dk_bin2c_kwnl[] = {
-$!string-table macro=dkT
-#
-# 0 Program group name
-#
-dktools
-#
-# 1 Help text file name
-#
-dk-bin2c.txt
-#
-# 2 String table file name
-#
-dk-bin2c.str
-#
-# 3 File opening mode, read binary
-#
-rb
-#
-# 4 Windows path separator
-#
-\\
-#
-# 5 Special file name for standard input
-#
-<STDIN>
-#
-#
-#
-$!end
-};
-
-
-
-/** Help text shown by --help option.
-*/
-static const dkChar * const dk_bin2c_help_text[] = {
-$!text macro=dkT,preprocessor
-
-dk-bin2c - Convert binary data to C source code
-
-dk-bin2c [<options>] [<file(s)>]
-
-Options:
--o --octal Octal output (default: hexadecimal).
--i <uint> --indent=<uint> Indent (spaces at start of line).
--s <uint> --spaces=<uint> Spaces between items on line.
--b <uint> --bytes-per-line=<uint> Number of bytes to print per line.
---help Show help text.
---manual *** SHOW FULL MANUAL. ***
---version Show version information.
---license Show license information.
-
-$!end
-};
-
-
-
-/** License text shown by --license option.
-*/
-static const dkChar * const dk_bin2c_license_text[] = {
-$!text macro=dkT,preprocessor
-
-This software uses code from the following projects, either directly or as
-a library:
-
-dktools Dirk Krause's tools and libraries.
- See http://sourceforge.net/p/dktools/wiki/Home/
- for more information.
-#if DK4_HAVE_ZLIB_H
-
-zlib Data compression library.
- See http://www.zlib.net/ for more information.
-#endif
-#if DK4_HAVE_BZLIB_H
-
-bzip2 Data compression program and library.
- See http://www.bzip.org/ for more information.
-#endif
-
-All the licenses below apply to the program.
-Licenses for used libraries are shown as found on my Scientific Linux 6.x
-computer in the /usr/share/doc directory on 2015-04-01. Check the project
-homepages of the used libraries for additional information and/or updated
-license terms.
-
-
-DK tools and libraries license
-==============================
-Copyright (c) 2015-2019, Dirk Krause. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-3. Neither the name of the copyright holder nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
-#if DK4_HAVE_ZLIB_H
-
-
-Zlib license
-============
-(C) 1995-2004 Jean-loup Gailly and Mark Adler
-
-This software is provided 'as-is', without any express or implied
-warranty. In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-
-Jean-loup Gailly Mark Adler
-jloup@gzip.org madler@alumni.caltech.edu
-#endif
-#if DK4_HAVE_BZLIB_H
-
-
-Bzip2 and libbzip2 library license
-==================================
-This program, "bzip2", the associated library "libbzip2", and all
-documentation, are copyright (C) 1996-2007 Julian R Seward. All
-rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-2. The origin of this software must not be misrepresented; you must
- not claim that you wrote the original software. If you use this
- software in a product, an acknowledgment in the product
- documentation would be appreciated but is not required.
-
-3. Altered source versions must be plainly marked as such, and must
- not be misrepresented as being the original software.
-
-4. The name of the author may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
-OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Julian Seward, jseward@bzip.org
-bzip2/libbzip2 version 1.0.5 of 10 December 2007
-#endif
-
-$!end
-};
-
-
-
-/** Program options.
-*/
-static const dk4_option_specification_t dk_bin2c_options[] = {
- { dkT('o'), dkT("octal"), DK4_OPT_ARG_NONE },
- { dkT('i'), dkT("indent"), DK4_OPT_ARG_UNSIGNED },
- { dkT('s'), dkT("spaces"), DK4_OPT_ARG_UNSIGNED },
- { dkT('b'), dkT("bytes-per-line"), DK4_OPT_ARG_UNSIGNED },
- { dkT('v'), dkT("verbose"), DK4_OPT_ARG_NONE }
-};
-
-
-
-/** Array of localized message text fragments.
-*/
-static const dkChar * const *dk_bin2c_msg = dk_bin2c_kw_def;
-
-
-
-/** Indent at beginning of lines.
-*/
-static dk4_um_t indent = (dk4_um_t)0UL;
-
-
-
-/** Number of spaces between items.
-*/
-static dk4_um_t spaces = (dk4_um_t)0UL;
-
-
-
-/** Number of bytes t print per line.
-*/
-static dk4_um_t bpl = (dk4_um_t)15UL;
-
-
-
-/** Current position in line.
-*/
-static dk4_um_t position = (dk4_um_t)0UL;
-
-
-
-/** Number of options in the options array.
-*/
-static size_t const sz_dk_bin2c_options =
-sizeof(dk_bin2c_options)/sizeof(dk4_option_specification_t);
-
-
-
-/** Number of elements in localized text fragments array.
-*/
-static size_t dk_bin2c_sz_msg =
-sizeof(dk_bin2c_kw_def)/sizeof(DK4_PCDKCHAR) - 1;
-
-
-
-/** Size of input buffer.
-*/
-static size_t const sz_buffer = sizeof(buffer);
-
-
-
-/** Produce octal output instead of hexadecimal output.
-*/
-static int octal = 0;
-
-
-
-/** Verbose mode, issue extra diagnostics.
-*/
-static int verbose = 0;
-
-
-
-/** Exit status code returned by the program.
-*/
-static int exval = EXIT_FAILURE;
-
-
-
-/** Flag: Output error occured in printf(), fputs() or fputc().
-*/
-static int output_error = 0;
-
-
-
-/** Flag: Already found data.
-*/
-static int have_data = 0;
-
-
-
-/** Application structure for diagnostics.
-*/
-static dk4_app_t *app = NULL;
-
-
-
-#ifdef SIGPIPE
-/** Indicator: SIGPIPE signal received.
-*/
-static
-DK4_VOLATILE
-dk4_sig_atomic_t sig_had_pipe = 0;
-#endif
-
-
-
-/** Indicator: SIGINT signal received.
-*/
-static
-DK4_VOLATILE
-dk4_sig_atomic_t sig_had_int = 0;
-
-
-
-/** Indicator: SIGTERM signal received.
-*/
-static
-DK4_VOLATILE
-dk4_sig_atomic_t sig_had_term = 0;
-
-
-
-/** Pass a volatile pointer to an atomic integer.
- This function is necessary as some compilers mis-optimize
- direct access to volatile variables (at least if you believe
- one of the coding standards).
- @param ptr Address of atomic integer variable.
- @return The unmodified pointer.
-*/
-static
-DK4_VOLATILE
-dk4_sig_atomic_t *
-sig_pass_pointer(DK4_VOLATILE dk4_sig_atomic_t *ptr)
-{
- return ptr;
-}
-
-
-
-#ifdef SIGPIPE
-/** Handler for SIGPIPE signal.
- @param signo Signal number (always SIGPIPE, ignored).
-*/
-static
-void
-sig_handler_pipe(int DK4_ARG_UNUSED(signo) )
-{
- DK4_UNUSED_ARG(signo)
- *sig_pass_pointer(&sig_had_pipe) = 1;
-}
-#endif
-
-
-
-/** Handler for SIGINT signal.
- @param signo Signal number (always SIGINT, ignored).
-*/
-static
-void
-sig_handler_int(int DK4_ARG_UNUSED(signo) )
-{
- DK4_UNUSED_ARG(signo)
- *sig_pass_pointer(&sig_had_int) = 1;
-}
-
-
-
-/** Handler for SIGTERM signal.
- @param signo Signal number (always SIGTERM, ignored).
-*/
-static
-void
-sig_handler_term(int DK4_ARG_UNUSED(signo) )
-{
- DK4_UNUSED_ARG(signo)
- *sig_pass_pointer(&sig_had_term) = 1;
-}
-
-
-
-/** Read value from volatile atomic type.
- This function is necessary as some compilers mis-optimize
- direct access to volatile variables (at least if you believe
- one of the coding standards).
- @param ap Pointer to volatile atomic variable.
- @return Contents of the variable.
-*/
-static
-dk4_sig_atomic_t
-sig_read_atomic(DK4_VOLATILE dk4_sig_atomic_t *ap)
-{
- return (*ap);
-}
-
-
-
-/** Check whether we can continue or if a signal was received.
- @param check_pipe Flag: Check for occured SIGPIPE signal too.
- @return 1 if the program can continue, 0 if a signal was received.
-*/
-static
-int
-sig_can_continue(
-#ifdef SIGPIPE
-int check_pipe
-#else
-int DK4_ARG_UNUSED(check_pipe)
-#endif
-)
-{
- int back = 1;
-#ifndef SIGPIPE
- DK4_UNUSED_ARG(check_pipe)
-#else
- if (0 != check_pipe) {
- if (0 != sig_read_atomic(&sig_had_pipe)) { back = 0; }
- }
-#endif
- if (0 != sig_read_atomic(&sig_had_int )) { back = 0; }
- if (0 != sig_read_atomic(&sig_had_term)) { back = 0; }
- return back;
-}
-
-
-
-/** Process one file contents.
- @param fipo Input file, opened for binary reading.
- @param infname Name of the file to process.
-*/
-static
-void
-dk_bin2c_process_file(FILE *fipo)
-{
- char buf[32]; /* Buffer for byte representation */
- dk4_um_t iu; /* Count spaces */
- size_t rdb; /* Number of bytes read from file */
- size_t i; /* Index to traverse bytes in buffer */
- int cc = 1; /* Flag: Can continue */
- $? "+ dk_bin2c_process_file"
- while ((1 == cc) && (0 != sig_can_continue(1))) {
- rdb = fread(buffer, 1, sz_buffer, fipo);
- if (0 < rdb) {
- for (i = 0; ((i < rdb) && (0 != sig_can_continue(1))); i++) {
- if (0 != have_data) {
- if (EOF == fputc(',', stdout)) {
- output_error = 1;
- exval = EXIT_FAILURE;
- }
- if (position >= bpl) {
- position = (dk4_um_t)0UL;
- if (EOF == fputc('\n', stdout)) {
- output_error = 1;
- exval = EXIT_FAILURE;
- }
- for (iu = (dk4_um_t)0UL; iu < indent; iu++) {
- if (EOF == fputc(' ', stdout)) {
- output_error = 1;
- exval = EXIT_FAILURE;
- }
- }
- }
- else {
- for (iu = (dk4_um_t)0UL; iu < spaces; iu++) {
- if (EOF == fputc(' ', stdout)) {
- output_error = 1;
- exval = EXIT_FAILURE;
- }
- }
- }
- }
- else {
- for (iu = (dk4_um_t)0UL; iu < indent; iu++) {
- if (EOF == fputc(' ', stdout)) {
- output_error = 1;
- exval = EXIT_FAILURE;
- }
- }
- }
- if (0 != octal) {
- sprintf(buf, "0%03o", (unsigned)(buffer[i]));
- }
- else {
- sprintf(buf, "0x%02x", (unsigned)(buffer[i]));
- }
- if (EOF == fputs(buf, stdout)) {
- output_error = 1;
- exval = EXIT_FAILURE;
- }
- have_data = 1;
- position++;
- }
- }
- else {
- cc = 0;
- }
- }
- $? "- dk_bin2c_process_file"
-}
-
-
-
-/** Run as pipe, process standard input.
-*/
-static
-void
-dk_bin2c_process_stdin(void)
-{
-#if DK4_ON_WINDOWS
- int oldmode;
-#endif
- $? "+ dk_bin2c_process_stdin"
-#if DK4_ON_WINDOWS
- oldmode = _setmode(_fileno(stdin), _O_BINARY);
-#endif
- dk_bin2c_process_file(stdin);
-#if DK4_ON_WINDOWS
- _setmode(_fileno(stdin), oldmode);
-#endif
- $? "- dk_bin2c_process_stdin"
-}
-
-
-
-/** Process one file name.
- @param infname Input file name (real file name, no expansion).
-*/
-static
-void
-dk_bin2c_process_file_name(const dkChar *infname)
-{
- FILE *fipo;
- dkChar const *oldsourcefile; /* Source file name */
- dk4_um_t oldsourceline; /* Source line number */
- int tests = DK4_FOPEN_SC_IS_REGULAR;
- $? "+ dk_bin2c_process_file_name"
- oldsourcefile = dk4app_get_log_source_file(app);
- oldsourceline = dk4app_get_log_source_line(app);
- dk4app_set_log_source_file(app, infname);
- dk4app_set_log_source_line(app, (dk4_um_t)0UL);
- fipo = dk4fopen_app(infname, dk_bin2c_kwnl[3], tests, app);
- if (NULL != fipo) {
- dk_bin2c_process_file(fipo);
- fclose(fipo);
- }
- else {
- exval = EXIT_FAILURE;
- }
- dk4app_set_log_source_file(app, oldsourcefile);
- dk4app_set_log_source_line(app, oldsourceline);
- $? "- dk_bin2c_process_file_name"
-}
-
-
-
-#if DK4_ON_WINDOWS
-
-/** Expand one file name.
- @param pattern Input file name pattern containing wildcards.
-*/
-static
-void
-dk_bin2c_expand_and_process(const dkChar *pattern)
-{
- dkChar buf[DK4_MAX_PATH]; /* Buffer to construct file name */
- dk4_dir_t *fne; /* File name expander */
- dkChar const *shf; /* Short file name */
- dkChar const *pth; /* Path name */
- dkChar const *oldsourcefile; /* Source file name */
- dk4_um_t oldsourceline; /* Source line number */
- size_t szbuf; /* Size of buffer */
- int cc; /* Flag: Can continue */
- int res; /* String concat result */
- int found; /* Flag: File(s) found */
- $? "+ dk_bin2c_expand_and_process"
- oldsourcefile = dk4app_get_log_source_file(app);
- oldsourceline = dk4app_get_log_source_line(app);
- dk4app_set_log_source_file(app, pattern);
- dk4app_set_log_source_line(app, (dk4_um_t)0UL);
- found = 0;
- szbuf = DK4_SIZEOF(buf,dkChar);
- fne = dk4app_fne_open(pattern, app);
- if (NULL != fne) {
- cc = 1;
- while ((1 == cc) && (sig_can_continue(1))) {
- shf = dk4dir_next_file(fne);
- if (NULL != shf) {
- found = 1;
- pth = dk4dir_get_path(fne);
- if (NULL != pth) {
- /*
- Construct full file name in buf,
- process this file name
- */
- res = dk4str_cpy_s(buf, szbuf, pth, NULL);
- if (0 != res) {
- res = dk4str_cat_s(buf, szbuf, dk_bin2c_kwnl[4], NULL);
- if (0 != res) {
- res = dk4str_cat_s(buf, szbuf, shf, NULL);
- if (0 != res) {
- dk_bin2c_process_file_name(buf);
- }
- else {
- /* ERROR: Path or file name too long */
- dk4app_log_1(
- app, dk_bin2c_msg, dk_bin2c_sz_msg,
- DK4_LL_ERROR, 2
- );
- exval = EXIT_FAILURE;
- }
- }
- else {
- /* ERROR: Path too long */
- exval = EXIT_FAILURE;
- dk4app_log_1(
- app, dk_bin2c_msg, dk_bin2c_sz_msg,
- DK4_LL_ERROR, 3
- );
- }
- }
- else {
- /* ERROR: Path too long */
- dk4app_log_1(
- app, dk_bin2c_msg, dk_bin2c_sz_msg, DK4_LL_ERROR, 3
- );
- exval = EXIT_FAILURE;
- }
- }
- else {
- /*
- No path specified, process short file name as is
- */
- dk_bin2c_process_file_name(shf);
- }
- }
- else {
- cc = 0;
- }
- }
- dk4dir_close(fne);
- if (0 == found) {
- /* ERROR: No matching file found */
- dk4app_log_1(app, dk_bin2c_msg, dk_bin2c_sz_msg, DK4_LL_ERROR, 4);
- exval = EXIT_FAILURE;
- }
- }
- else {
- /* ERROR: Failed to open file name expander */
- exval = EXIT_FAILURE;
- }
- dk4app_set_log_source_file(app, oldsourcefile);
- dk4app_set_log_source_line(app, oldsourceline);
- $? "- dk_bin2c_expand_and_process"
-}
-
-#endif
-
-
-
-/** Process one file name.
- @param infname File name to process, may be a pattern with wildcards.
-*/
-static
-void
-dk_bin2c_process_one_argv(const dkChar *infname)
-{
- $? "+ dk_bin2c_process_one_argv"
-#if DK4_ON_WINDOWS
- if (0 != dk4path_must_expand(infname)) {
- dk_bin2c_expand_and_process(infname);
- }
- else {
-#endif
- dk_bin2c_process_file_name(infname);
-#if DK4_ON_WINDOWS
- }
-#endif
- $? "- dk_bin2c_process_one_argv"
-}
-
-
-
-/** Run functionality after setting up signal handlers.
-*/
-static
-void
-dk_bin2c_normal_run(void)
-{
- int argc; /* Number of command line arguments */
- int i; /* Current command line argument index */
- $? "+ dk_bin2c_normal_run"
- /*
- Indicate success so far
- */
- exval = EXIT_SUCCESS;
- /*
- Process command line arguments
- */
- if (0 != dk4app_opt_is_set_short(app, dkT('o'), NULL)) {
- octal = 1;
- }
- if (0 != dk4app_opt_is_set_short(app, dkT('v'), NULL)) {
- verbose = 1;
- }
- if (0 != dk4app_opt_is_set_short(app, dkT('i'), NULL)) {
- if (0 == dk4app_opt_get_unsigned_short(&indent, app, dkT('i'), NULL)) {
- indent = (dk4_um_t)0UL;
- }
- }
- if (0 != dk4app_opt_is_set_short(app, dkT('s'), NULL)) {
- if (0 == dk4app_opt_get_unsigned_short(&spaces, app, dkT('s'), NULL)) {
- spaces = (dk4_um_t)0UL;
- }
- }
- if (0 != dk4app_opt_is_set_short(app, dkT('b'), NULL)) {
- if (0 == dk4app_opt_get_unsigned_short(&bpl, app, dkT('b'), NULL)) {
- bpl = (dk4_um_t)15UL;
- }
- }
- /*
- Start normal processing
- */
- argc = dk4app_get_argc(app);
- if (0 < argc) {
- /*
- Process named files
- */
- for (i = 0; ((i < argc) && (0 != sig_can_continue(1))); i++) {
- dk_bin2c_process_one_argv(dk4app_get_argv(app, i));
- }
- }
- else {
- /*
- Process standard input
- */
- dk_bin2c_process_stdin();
- }
- if (0 != have_data) {
- if (EOF == fputc('\n', stdout)) {
- output_error = 1;
- exval = EXIT_FAILURE;
- }
- }
- $? "- dk_bin2c_normal_run"
-}
-
-
-
-#if DK4_HAVE_SIGACTION
-/** Set signal handlers and run.
-*/
-static
-void
-dk_bin2c_run_with_signal_handlers(void)
-{
-#ifdef SIGPIPE
- struct sigaction opipe;
- struct sigaction npipe;
-#endif
- struct sigaction oint;
- struct sigaction nint;
- struct sigaction oterm;
- struct sigaction nterm;
- int success = 0;
-
-#ifdef SIGPIPE
- /* Set up signal handling for SIGPIPE.
- */
- DK4_MEMRES(&npipe, sizeof(npipe));
- npipe.sa_handler = sig_handler_pipe;
- npipe.sa_flags = 0;
- if (0 != sigemptyset(&npipe.sa_mask)) {
- /* ERROR: Failed to set up masked signal set for SIGPIPE */
- dk4app_log_1(app, dk_bin2c_msg, dk_bin2c_sz_msg, DK4_LL_ERROR, 0);
- goto finished;
- }
- if (0 != sigaddset(&npipe.sa_mask, SIGPIPE)) {
- /* ERROR: Failed to set up masked signal set for SIGPIPE */
- dk4app_log_1(app, dk_bin2c_msg, dk_bin2c_sz_msg, DK4_LL_ERROR, 0);
- goto finished;
- }
- if (0 != sigaction(SIGPIPE, &npipe, &opipe)) {
- /* ERROR: Failed to set up signal handler for SIGPIPE */
- dk4app_log_1(app, dk_bin2c_msg, dk_bin2c_sz_msg, DK4_LL_ERROR, 0);
- goto finished;
- }
-#endif
-
- /* Set up signal handling for SIGINT.
- */
- DK4_MEMRES(&nint, sizeof(nint));
- nint.sa_handler = sig_handler_int;
- nint.sa_flags = 0;
- if (0 != sigemptyset(&nint.sa_mask)) {
- /* ERROR: Failed to set up masked signal set for SIGINT */
- dk4app_log_1(app, dk_bin2c_msg, dk_bin2c_sz_msg, DK4_LL_ERROR, 0);
- goto restore_old_pipe;
- }
- if (0 != sigaddset(&nint.sa_mask, SIGINT)) {
- /* ERROR: Failed to set up masked signal set for SIGINT */
- dk4app_log_1(app, dk_bin2c_msg, dk_bin2c_sz_msg, DK4_LL_ERROR, 0);
- goto restore_old_pipe;
- }
- if (0 != sigaction(SIGINT, &nint, &oint)) {
- /* ERROR: Failed to set up signal handler for SIGINT */
- dk4app_log_1(app, dk_bin2c_msg, dk_bin2c_sz_msg, DK4_LL_ERROR, 0);
- goto restore_old_pipe;
- }
-
- /* Set up signal handling for SIGTERM
- */
- DK4_MEMRES(&nterm, sizeof(nterm));
- nterm.sa_handler = sig_handler_term;
- nterm.sa_flags = 0;
- if (0 != sigemptyset(&nterm.sa_mask)) {
- /* ERROR: Failed to set up masked signal set for SIGTERM */
- dk4app_log_1(app, dk_bin2c_msg, dk_bin2c_sz_msg, DK4_LL_ERROR, 0);
- goto restore_old_int;
- }
- if (0 != sigaddset(&nterm.sa_mask, SIGTERM)) {
- /* ERROR: Failed to set up masked signal set for SIGTERM */
- dk4app_log_1(app, dk_bin2c_msg, dk_bin2c_sz_msg, DK4_LL_ERROR, 0);
- goto restore_old_int;
- }
- if (0 != sigaction(SIGTERM, &nterm, &oterm)) {
- /* ERROR: Failed to set up signal handler for SIGTERM */
- dk4app_log_1(app, dk_bin2c_msg, dk_bin2c_sz_msg, DK4_LL_ERROR, 0);
- goto restore_old_int;
- }
-
- success = 1;
- dk_bin2c_normal_run();
-
- /* Restore signal handling for SIGTERM.
- */
- if (0 != sigaction(SIGTERM, &oterm, NULL)) {
- /* ERROR: Failed to restore old SIGTERM settings */
- dk4app_log_1(app, dk_bin2c_msg, dk_bin2c_sz_msg, DK4_LL_ERROR, 1);
- success = 0;
- }
-
- /* Restore signal handling for SIGINT.
- */
- restore_old_int:
- if (0 != sigaction(SIGINT, &oint, NULL)) {
- /* ERROR: Failed to restore old SIGINT settings */
- dk4app_log_1(app, dk_bin2c_msg, dk_bin2c_sz_msg, DK4_LL_ERROR, 1);
- success = 0;
- }
-
-#ifdef SIGPIPE
- /* Restore signal handling for SIGPIPE.
- */
- restore_old_pipe:
- if (0 != sigaction(SIGPIPE, &opipe, NULL)) {
- /* ERROR: Failed to restore old SIGPIPE settings */
- dk4app_log_1(app, dk_bin2c_msg, dk_bin2c_sz_msg, DK4_LL_ERROR, 1);
- success = 0;
- }
-#endif
-
- /* Set exit status code if error occured.
- */
- finished:
- if (0 == success) { exval = EXIT_FAILURE; }
-}
-#else
-#if DK4_HAVE_SIGSET
-/** Set signal handlers and run.
-*/
-static
-void
-dk_bin2c_run_with_signal_handlers(void)
-{
-#ifdef SIGPIPE
- dk4_sig_handler_t *oldpipe = NULL;
-#endif
- dk4_sig_handler_t *oldint = NULL;
- dk4_sig_handler_t *oldterm = NULL;
-
-#ifdef SIGPIPE
- oldpipe = sigset(SIGPIPE, sig_handler_pipe);
-#endif
- oldint = sigset(SIGINT, sig_handler_int);
- oldterm = sigset(SIGTERM, sig_handler_term);
- dk_bin2c_normal_run();
- sigset(SIGTERM, oldterm);
- sigset(SIGINT, oldint);
-#ifdef SIGPIPE
- sigset(SIGPIPE, oldpipe);
-#endif
-}
-#else
-#if DK4_HAVE_SIGNAL
-/** Set signal handlers and run.
-*/
-static
-void
-dk_bin2c_run_with_signal_handlers(void)
-{
-#ifdef SIGPIPE
- dk4_sig_handler_t *oldpipe = NULL;
-#endif
- dk4_sig_handler_t *oldint = NULL;
- dk4_sig_handler_t *oldterm = NULL;
-
-#ifdef SIGPIPE
- oldpipe = signal(SIGPIPE, sig_handler_pipe);
-#endif
- oldint = signal(SIGINT, sig_handler_int);
- oldterm = signal(SIGTERM, sig_handler_term);
- dk_bin2c_normal_run();
- signal(SIGTERM, oldterm);
- signal(SIGINT, oldint);
-#ifdef SIGPIPE
- signal(SIGPIPE, oldpipe);
-#endif
-}
-#else
-/** Set signal handlers and run.
-*/
-static
-void
-dk_bin2c_run_with_signal_handlers(void)
-{
- dk_bin2c_normal_run();
-}
-#endif
-#endif
-#endif
-
-
-
-/** Main function.
- @param argc Number of command line arguments.
- @param argv Command line arguments array.
- @return 0 on success, all other values indicate errors.
-*/
-#if DK4_CHAR_SIZE > 1
-int wmain(int argc, wchar_t *argv[])
-#else
-int main(int argc, char *argv[])
-#endif
-{
- int silent = 0; /* Flag: Run silently in vim */
- int shp = 0; /* Flag: SIGPIPE occured */
- $!trace-init dk-bin2c.deb
- $? "+ main"
- /*
- Check for running within vim
- */
-#if DK4_CHAR_SIZE > 1
- if (NULL != getenv("VIM")) { silent = 1; }
- if (NULL != getenv("VIMRUNTIME")) { silent = 1; }
-#endif
- /*
- Open application
- */
- if (0 != silent) {
- app = dk4app_open_silent(
- argc, argv, dk_bin2c_options, sz_dk_bin2c_options,
- dk_bin2c_kwnl[0], DKT_VERSION_DK,
- dk_bin2c_kwnl[1], dk_bin2c_help_text, dk_bin2c_license_text
- );
- }
- else {
- dk4fput_initialize_stderr();
- app = dk4app_open_cmd(
- argc, argv, dk_bin2c_options, sz_dk_bin2c_options,
- dk_bin2c_kwnl[0], DKT_VERSION_DK,
- dk_bin2c_kwnl[1], dk_bin2c_help_text, dk_bin2c_license_text
- );
- }
- if (NULL != app) {
- dk_bin2c_sz_msg = dk4app_string_table_size(dk_bin2c_kw_def);
- dk_bin2c_msg = dk4app_string_table(
- app, dk_bin2c_kwnl[2], dk_bin2c_kw_def
- );
- if (0 != dk4app_can_run_normally(app)) {
- dk_bin2c_run_with_signal_handlers();
- }
- else {
- dk4fput_initialize_stdout();
- if (0 != dk4app_help_version_license(app)) {
- exval = EXIT_SUCCESS;
- }
- fflush(stdout);
- fflush(stderr);
- dk4fput_cleanup_stdout();
- }
- if (0 != sig_read_atomic(&sig_had_int )) {
- exval = EXIT_FAILURE;
- /* ERROR: Interrupted by SIGINT */
- dk4app_log_1(app, dk_bin2c_msg, dk_bin2c_sz_msg, DK4_LL_ERROR, 5);
- }
- if (0 != sig_read_atomic(&sig_had_term)) {
- exval = EXIT_FAILURE;
- /* ERROR: Interrupted by SIGTERM */
- dk4app_log_1(app, dk_bin2c_msg, dk_bin2c_sz_msg, DK4_LL_ERROR, 6);
- }
-#ifdef SIGPIPE
- if (0 != sig_read_atomic(&sig_had_pipe)) {
- exval = EXIT_FAILURE;
- shp = 1;
- if (0 != verbose) {
- /* ERROR: Interrupted by SIGPIPE */
- dk4app_log_1(app,dk_bin2c_msg,dk_bin2c_sz_msg,DK4_LL_ERROR,7);
- }
- }
-#endif
- if ((0 == shp) && (0 != output_error)) {
- exval = EXIT_FAILURE;
- /* ERROR: Output to stdout failed */
- dk4app_log_1(app, dk_bin2c_msg, dk_bin2c_sz_msg, DK4_LL_ERROR, 8);
- }
- dk4app_close(app);
- }
- else {
- }
- if (0 != have_data) {
- fflush(stdout);
- }
- if (0 == silent) {
- fflush(stderr);
- dk4fput_cleanup_stderr();
- }
- $? "- main %d", exval
- $!trace-end
- exit(exval); return exval;
-}
-
-
-/* vim: set ai sw=4 ts=4 : */
-