/* 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: dk4c32.ctr */ /** @file dk4c32.c The dk4c32 module. */ #line 85 "dk4c32.ctr" #include "dk4conf.h" #include "dk4types.h" #include "dk4c32.h" #ifndef DK4EDSTM_H_INCLUDED #include "dk4edstm.h" #endif #if DK4_HAVE_STDLIB_H #ifndef STDLIB_H_INCLUDED #include #define STDLIB_H_INCLUDED 1 #endif #else #ifndef STDIO_H_INCLUDED #include #define STDIO_H_INCLUDED 1 #endif #endif #if DK4_HAVE_ASSERT_H #ifndef ASSERT_H_INCLUDED #include #define ASSERT_H_INCLUDED 1 #endif #endif void dk4c32_decoder_init(dk4_c32_byte_decoder_t *ptr, int msb) { #if DK4_USE_ASSERT assert(NULL != ptr); #endif if (NULL != ptr) { ptr->val = dkC32(0); ptr->msb = msb; ptr->nb = 0; } } int dk4c32_decoder_add(dk4_c32_byte_decoder_t *ptr, unsigned char inbyte) { int back = DK4_EDSTM_ERROR; #if DK4_USE_ASSERT assert(NULL != ptr); #endif if (NULL != ptr) { switch (ptr->nb) { case 3: { if (ptr->msb) { ptr->val |= (dkC32(0x000000FF) & ((dk4_c32_t)inbyte)); } else { ptr->val |= (dkC32(0xFF000000) & (((dk4_c32_t)inbyte) << 24)); } ptr->nb = 0; back = DK4_EDSTM_FINISHED; } break; case 2: { if (ptr->msb) { ptr->val |= (dkC32(0x0000FF00) & (((dk4_c32_t)inbyte) << 8)); } else { ptr->val |= (dkC32(0x00FF0000) & (((dk4_c32_t)inbyte) << 16)); } ptr->nb = 3; back = DK4_EDSTM_ACCEPT; } break; case 1: { if (ptr->msb) { ptr->val |= (dkC32(0x00FF0000) & (((dk4_c32_t)inbyte) << 16)); } else { ptr->val |= (dkC32(0x0000FF00) & (((dk4_c32_t)inbyte) << 8)); } ptr->nb = 2; back = DK4_EDSTM_ACCEPT; } break; default: { if (ptr->msb) { ptr->val = (dkC32(0xFF000000) & (((dk4_c32_t)inbyte) << 24)); } else { ptr->val = (dkC32(0x000000FF) & ((dk4_c32_t)inbyte)); } ptr->nb = 1; back = DK4_EDSTM_ACCEPT; } break; } } return back; } dk4_c32_t dk4c32_decoder_get(dk4_c32_byte_decoder_t const *ptr) { dk4_c32_t back = dkC32(0); #if DK4_USE_ASSERT assert(NULL != ptr); #endif if (NULL != ptr) { back = ptr->val; } return back; } int dk4c32_decoder_is_empty(dk4_c32_byte_decoder_t const *ptr) { int back = 0; #if DK4_USE_ASSERT assert(NULL != ptr); #endif if (NULL != ptr) { if (0 == ptr->nb) { back = 1; } } return back; }