/* WARNING: This file was generated by dkct. 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: dk4time08.ctr */ /* Copyright (C) 2015-2017, Dirk Krause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above opyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of 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 OWNER 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. */ /** @file dk4time08.c The dk4time08 module. */ #line 132 "dk4time08.ctr" #include "dk4time08.h" #ifndef DK4STR8_H_INCLUDED #include "dk4str8.h" #endif #ifndef DK4MAO8D_H_INCLUDED #include "dk4mao8d.h" #endif #line 146 "dk4time08.ctr" /** Constant text strings used by this module. */ static const char * const dk4time08_kw[] = { /* 0 */ "0", /* 1 */ "-", /* 2 */ "/", /* 3 */ ".", /* 4 */ " ", /* 5 */ ":", NULL #line 160 "dk4time08.ctr" }; int dk4time_to_text_c8( char *dptr, size_t dsz, int format, unsigned short year, unsigned short month, unsigned short mday, unsigned short hour, unsigned short min, unsigned short sec, dk4_er_t *erp ) { char bye[8]; char bmo[8]; char bda[8]; char bho[8]; char bmi[8]; char bse[8]; int res; int back = 0; if ((NULL != dptr) && (0 < dsz)) { back = 1; res = dk4ma_write_c8_decimal_unsigned( bye, sizeof(bye), (dk4_um_t)year, 4, erp ); if (0 == res) { back = 0; } res = dk4ma_write_c8_decimal_unsigned( bmo, sizeof(bmo), (dk4_um_t)month, 2, erp ); if (0 == res) { back = 0; } res = dk4ma_write_c8_decimal_unsigned( bda, sizeof(bda), (dk4_um_t)mday, 2, erp ); if (0 == res) { back = 0; } if (DK4_TIMEFORMAT_DATE_SORTABLE != format) { if (DK4_TIMEFORMAT_DATE_ENGLISH != format) { if (DK4_TIMEFORMAT_DATE_GERMAN != format) { res = dk4ma_write_c8_decimal_unsigned( bho, sizeof(bho), (dk4_um_t)hour, 2, erp ); if (0 == res) { back = 0; } res = dk4ma_write_c8_decimal_unsigned( bmi, sizeof(bmi), (dk4_um_t)min, 2, erp ); if (0 == res) { back = 0; } res = dk4ma_write_c8_decimal_unsigned( bse, sizeof(bse), (dk4_um_t)sec, 2, erp ); if (0 == res) { back = 0; } } } } if (0 != back) { back = 0; switch (format) { case DK4_TIMEFORMAT_DATE_ENGLISH: { if (0 != dk4str8_cpy_s(dptr, dsz, bmo, erp)) { if (0 != dk4str8_cat_s(dptr, dsz, dk4time08_kw[2], erp)) { if (0 != dk4str8_cat_s(dptr, dsz, bda, erp)) { if (0 != dk4str8_cat_s(dptr, dsz, dk4time08_kw[2], erp)) { if (0 != dk4str8_cat_s(dptr, dsz, bye, erp)) { back = 1; } } } } } } break; case DK4_TIMEFORMAT_DATE_GERMAN: { if (0 != dk4str8_cpy_s(dptr, dsz, bda, erp)) { if (0 != dk4str8_cat_s(dptr, dsz, dk4time08_kw[3], erp)) { if (0 != dk4str8_cat_s(dptr, dsz, bmo, erp)) { if (0 != dk4str8_cat_s(dptr, dsz, dk4time08_kw[3], erp)) { if (0 != dk4str8_cat_s(dptr, dsz, bye, erp)) { back = 1; } } } } } } break; default: { /* yyyy-mm-dd */ if (0 != dk4str8_cpy_s(dptr, dsz, bye, erp)) { if (0 != dk4str8_cat_s(dptr, dsz, dk4time08_kw[1], erp)) { if (0 != dk4str8_cat_s(dptr, dsz, bmo, erp)) { if (0 != dk4str8_cat_s(dptr, dsz, dk4time08_kw[1], erp)) { if (0 != dk4str8_cat_s(dptr, dsz, bda, erp)) { back = 1; } } } } } if ((0 != back) && (DK4_TIMEFORMAT_DATE_SORTABLE != format)) { back = 0; if (0 != dk4str8_cat_s(dptr, dsz, dk4time08_kw[4], erp)) { if (0 != dk4str8_cat_s(dptr, dsz, bho, erp)) { if (0 != dk4str8_cat_s(dptr, dsz, dk4time08_kw[5], erp)) { if (0 != dk4str8_cat_s(dptr, dsz, bmi, erp)) { if (0 != dk4str8_cat_s(dptr, dsz, dk4time08_kw[5], erp)) { if (0 != dk4str8_cat_s(dptr, dsz, bse, erp)) { back = 1; } } } } } } } } break; } } } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } return back; } int dk4time_convert_to_text_c8( char *dptr, size_t dsz, const struct tm *tm, dk4_er_t *erp ) { int back = 0; if ((NULL != dptr) && (0 < dsz)) { *dptr = '\0'; if (NULL != tm) { back = dk4time_to_text_c8( dptr, dsz, DK4_TIMEFORMAT_DATE_TIME, (1900 + tm->tm_year), (1 + tm->tm_mon), tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, erp ); } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } return back; } static int dk4time_i_as_text_c8( char *dptr, size_t dsz, const dk4_time_t *timer, dk4_er_t *erp ) { #if DK4_ON_WINDOWS /* +++ Windows */ struct tm lct; int back = 0; if (0 == _localtime64_s(&lct, timer)) { back = dk4time_convert_to_text_c8(dptr, dsz, &lct, erp); } else { dk4error_set_simple_error_code(erp, DK4_E_BUG); } return back; /* --- Windows */ #else /* +++ non-Windows */ #if DK4_HAVE_LOCALTIME_R struct tm lct; int back = 0; if (NULL != localtime_r(timer, &lct)) { back = dk4time_convert_to_text_c8(dptr, dsz, &lct, erp); } else { dk4error_set_simple_error_code(erp, DK4_E_BUG); } return back; #else dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); return 0; #endif /* --- non-Windows */ #endif } int dk4time_as_text_c8( char *dptr, size_t dsz, const dk4_time_t *timer, dk4_er_t *erp ) { int back = 0; if ((NULL != dptr) && (0 < dsz)) { *dptr = '\0'; if (NULL != timer) { back = dk4time_i_as_text_c8(dptr, dsz, timer, erp); } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } return back; }