/* Copyright (C) 2015-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: dk4fput.ctr */ /** @file dk4fput.c The dk4fput module. */ #line 141 "dk4fput.ctr" #include "dk4conf.h" #include "dk4fput.h" #if DK4_HAVE_IO_H #ifndef IO_H_INCLUDED #include #define IO_H_INCLUDED 1 #endif #endif #if DK4_HAVE_FCNTL_H #ifndef FCNTL_H_INCLUDED #include #define FCNTL_H_INCLUDED 1 #endif #endif #ifndef DK4REC26_H_INCLUDED #include "dk4rec26.h" #endif #include "dk4unused.h" #if DK4_HAVE_ASSERT_H #ifndef ASSERT_H_INCLUDED #include #define ASSERT_H_INCLUDED 1 #endif #endif #line 174 "dk4fput.ctr" #if _WIN32 && (DK4_CHAR_SIZE > 1) && DK4_HAVE__SETMODE && defined(_MSC_VER) /** Flag: Standard output initialized to write dkChar. */ static int dk4fput_stdout_initialized = 0; /** Standard output mode at startup (should be restored before exiting). */ static int dk4fput_stdout_oldmode = _O_TEXT; /** Flag: Standard error output initialized to write dkChar. */ static int dk4fput_stderr_initialized = 0; /** Standard error mode at startup (should be restored before exiting). */ static int dk4fput_stderr_oldmode = _O_TEXT; #endif void dk4fput_initialize_stdout(void) { #if _WIN32 && (DK4_CHAR_SIZE > 1) && DK4_HAVE__SETMODE && defined(_MSC_VER) if (0 == dk4fput_stdout_initialized) { dk4fput_stdout_oldmode = _setmode(_fileno(stdout), _O_U16TEXT); if (0 == _isatty(_fileno(stdout))) { fputwc((wchar_t)0xFEFF, stdout); } dk4fput_stdout_initialized = 1; } #endif } void dk4fput_initialize_stdout_no_bom(void) { #if _WIN32 && (DK4_CHAR_SIZE > 1) && DK4_HAVE__SETMODE && defined(_MSC_VER) if (0 == dk4fput_stdout_initialized) { dk4fput_stdout_oldmode = _setmode(_fileno(stdout), _O_U16TEXT); dk4fput_stdout_initialized = 1; } #endif } void dk4fput_cleanup_stdout(void) { #if _WIN32 && (DK4_CHAR_SIZE > 1) && DK4_HAVE__SETMODE && defined(_MSC_VER) if (0 != dk4fput_stdout_initialized) { fflush(stdout); (void)_setmode(_fileno(stdout), dk4fput_stdout_oldmode); } #endif } void dk4fput_initialize_stderr(void) { #if _WIN32 && (DK4_CHAR_SIZE > 1) && DK4_HAVE__SETMODE && defined(_MSC_VER) if (0 == dk4fput_stderr_initialized) { dk4fput_stderr_oldmode = _setmode(_fileno(stderr), _O_U16TEXT); if (0 == _isatty(_fileno(stderr))) { fputwc((wchar_t)0xFEFF, stderr); } dk4fput_stderr_initialized = 1; } #endif } void dk4fput_initialize_stderr_no_bom(void) { #if _WIN32 && (DK4_CHAR_SIZE > 1) && DK4_HAVE__SETMODE && defined(_MSC_VER) if (0 == dk4fput_stderr_initialized) { dk4fput_stderr_oldmode = _setmode(_fileno(stderr), _O_U16TEXT); dk4fput_stderr_initialized = 1; } #endif } void dk4fput_cleanup_stderr(void) { #if _WIN32 && (DK4_CHAR_SIZE > 1) && DK4_HAVE__SETMODE && defined(_MSC_VER) if (0 != dk4fput_stderr_initialized) { fflush(stderr); (void)_setmode(_fileno(stdout), dk4fput_stderr_oldmode); } #endif } void dk4fput_initialize_file( #if _WIN32 && (DK4_CHAR_SIZE > 1) && DK4_HAVE__SETMODE && defined(_MSC_VER) FILE *fipo #else FILE * DK4_ARG_UNUSED(fipo) #endif ) { #if _WIN32 && (DK4_CHAR_SIZE > 1) && DK4_HAVE__SETMODE && defined(_MSC_VER) #if DK4_USE_ASSERT assert(NULL != fipo); #endif if (NULL != fipo) { (void)_setmode(_fileno(fipo), _O_U16TEXT); fputwc(0xFEFF, fipo); } #else DK4_UNUSED_ARG(fipo) #endif } void dk4fput_initialize_file_no_bom( #if _WIN32 && (DK4_CHAR_SIZE > 1) && DK4_HAVE__SETMODE && defined(_MSC_VER) FILE *fipo #else FILE * DK4_ARG_UNUSED(fipo) #endif ) { #if _WIN32 && (DK4_CHAR_SIZE > 1) && DK4_HAVE__SETMODE && defined(_MSC_VER) #if DK4_USE_ASSERT assert(NULL != fipo); #endif if (NULL != fipo) { (void)_setmode(_fileno(fipo), _O_U16TEXT); } #else DK4_UNUSED_ARG(fipo) #endif } int dk4fputc(dkChar c, FILE *fipo, dk4_er_t *erp) { #if DK4_CHAR_SIZE > 1 #if DK4_CHAR_SIZE == DK4_SIZEOF_WCHAR_T #if DK4_HAVE_FPUTWC int back = 0; #line 336 "dk4fput.ctr" #if DK4_USE_ASSERT assert(NULL != fipo); #endif if (NULL != fipo) { errno = 0; if (WEOF != fputwc(c, fipo)) { back = 1; } else { dk4error_set_idetails(erp, DK4_E_WRITE_FAILED, errno); } } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } #line 349 "dk4fput.ctr" return back; #else dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); return 0; #endif #else dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); return 0; #endif #else int back = 0; #if DK4_USE_ASSERT assert(NULL != fipo); #endif if (NULL != fipo) { errno = 0; if (EOF != fputc(c, fipo)) { back = 1; } else { dk4error_set_idetails(erp, DK4_E_WRITE_FAILED, errno); } } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } return back; #endif } int dk4fputs(const dkChar *s, FILE *fipo, dk4_er_t *erp) { #if DK4_CHAR_SIZE > 1 #if DK4_CHAR_SIZE == DK4_SIZEOF_WCHAR_T #if DK4_HAVE_FPUTWS int back = 0; #if DK4_USE_ASSERT assert(NULL != fipo); assert(NULL != s); #endif if ((NULL != s) && (NULL != fipo)) { errno = 0; if (WEOF != fputws(s, fipo)) { back = 1; } else { dk4error_set_idetails(erp, DK4_E_WRITE_FAILED, errno); } } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } return back; #else dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); return 0; #endif #else dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); return 0; #endif #else int back = 0; #if DK4_USE_ASSERT assert(NULL != fipo); assert(NULL != s); #endif if ((NULL != s) && (NULL != fipo)) { errno = 0; if (EOF != fputs(s, fipo)) { back = 1; } else { dk4error_set_idetails(erp, DK4_E_WRITE_FAILED, errno); } } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } return back; #endif }