diff options
author | Norbert Preining <norbert@preining.info> | 2020-10-12 03:04:00 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2020-10-12 03:04:00 +0000 |
commit | 0ce40abb18ec02ec6fd6bcc5f21612c88daa7578 (patch) | |
tree | 416289fe1448873fd8ca33051f50ad85bffa8aaa /support/dktools/dk4a85e.ctr | |
parent | fdb18507cd80dc17f5a5256153d34668b4f4e61c (diff) |
CTAN sync 202010120303
Diffstat (limited to 'support/dktools/dk4a85e.ctr')
-rw-r--r-- | support/dktools/dk4a85e.ctr | 394 |
1 files changed, 0 insertions, 394 deletions
diff --git a/support/dktools/dk4a85e.ctr b/support/dktools/dk4a85e.ctr deleted file mode 100644 index f3e26669e5..0000000000 --- a/support/dktools/dk4a85e.ctr +++ /dev/null @@ -1,394 +0,0 @@ -%% options - -copyright owner = Dirk Krause -copyright year = 2015-xxxx -SPDX-License-Identifier: BSD-3-Clause - - - -%% header - -/** @file dk4a85e.h ASCII-85 encoder. - -First initialize the encoder using the dk4a85_enc_init(). - -Now add the binary bytes one by one using the dk4a85_enc_add() function, as -long as you have bytes available and the function returns DK4_EDSTM_ACCEPT -or DK4_EDSTM_FINISHED. - -If the function returns DK4_EDSTM_ACCEPT, no further action is required, -the byte was successfully stored in the internal data structures. - -If dk4a85_enc_add() returns DK4_EDSTM_FINISHED, a sequence of 4 binary -bytes was processed successfully, a 1 character or 5 character sequence -was produced. Use dk4a85_enc_output() to obtain the characters. - -Input data length is not necessarily a multiple of 4, so after feeding -all binary bytes some values might still be stored in the encoder. -Use dk4a85_enc_finish() to check whether an incomplete final sequence -is available. If the function returns DK4_EDSTM_FINISHED, use -dk4a85_enc_output() to obtain the text characters for the final bytes. - -*/ - -#ifndef DK4CONF_H_INCLUDED -#if DK4_BUILDING_DKTOOLS4 -#include "dk4conf.h" -#else -#include <dktools-4/dk4conf.h> -#endif -#endif - -#ifndef DK4ERROR_H_INCLUDED -#if DK4_BUILDING_DKTOOLS4 -#include "dk4error.h" -#else -#include <dktools-4/dk4error.h> -#endif -#endif - -#ifndef DK4EDSTM_H_INCLUDED -#if DK4_BUILDING_DKTOOLS4 -#include "dk4edstm.h" -#else -#include <dktools-4/dk4edstm.h> -#endif -#endif - - - -/** ASCII 85 encoder. -*/ -typedef struct { - char ob[6]; /**< Output bytes, 5 + finalizer */ - unsigned char ib[4]; /**< Input bytes to process. */ - size_t ci; /**< Index of current input byte. */ - size_t os; /**< Number of outupt bytes available */ - short az; /**< Allow z encoding */ -} dk4_a85_enc_t; - - -#ifdef __cplusplus -extern "C" { -#endif - -/** Initialize ASCII 85 encoder before adding data. - @param enc Encoder to initialize. - @param az Flag: Allow 'z' output character. - @param erp Error report, may be NULL. - - Error codes: - - DK4_E_INVALID_ARGUMENTS if enc is NULL. -*/ -void -dk4a85_enc_init(dk4_a85_enc_t *enc, int az, dk4_er_t *erp); - -/** Add one byte to encoder. - @param enc Encoder to use. - @param input Input byte to add. - @param erp Error report, may be NULL. - @return Action to take, one from: - - DK4_EDSTM_ACCEPT<br> - if input was accepted, no further action necessary at the moment. - - DK4_EDSTM_FINISHED<br> - if a sequence of 4 input bytes was completed, use - dk4a85_enc_output() to obtain the text characters. - - DK4_EDSTM_ERROR<br> - if an error occured. - - Error codes: - - DK4_E_INVALID_ARGUMENTS if enc is NULL. -*/ -int -dk4a85_enc_add(dk4_a85_enc_t *enc, unsigned char input, dk4_er_t *erp); - -/** Check for incomplete sequence in state machine after processing - all input bytes. - @param enc Encoder to use. - @param erp Error report, may be NULL. - @return Action to take, one from: - - DK4_EDSTM_ACCEPT<br> - if there is no incomplete sequence in the state machine, - no further action necessary. - - DK4_EDSTM_FINISHED<br> - if an incomplete final sequence is available, use - dk4a85_enc_output() to obtain the text characters. - - DK4_EDSTM_ERROR<br> - if an error occured. - - Error codes: - - DK4_E_INVALID_ARGUMENTS if enc is NULL. -*/ -int -dk4a85_enc_finish(dk4_a85_enc_t *enc, dk4_er_t *erp); - -/** Retrieve text sequence. - @param dptr Address of destination pointer to set, should be - initialized to NULL. - @param szptr Address of size variable to set, should be - initialized to 0. - @param enc Encoder to use. - @param erp Error report, may be NULL. - @return 1 on success (text available), 0 otherwise. - - Error codes: - - DK4_E_INVALID_ARGUMENTS if enc, dptr, or szptr is NULL. -*/ -int -dk4a85_enc_output( - const char **dptr, - size_t *szptr, - dk4_a85_enc_t const *enc, - dk4_er_t *erp -); - -#ifdef __cplusplus -} -#endif - -%% module - -#include "dk4conf.h" - -#if DK4_HAVE_ASSERT_H -#ifndef ASSERT_H_INCLUDED -#include <assert.h> -#define ASSERT_H_INCLUDED 1 -#endif -#endif - -#include "dk4a85e.h" -#include "dk4edstm.h" -#include "dk4mem.h" - - - -$!trace-include - - - -static const unsigned long dk4a85e_pow_85[] = { - (85UL * 85UL * 85UL * 85UL), - (85UL * 85UL * 85UL), - (85UL * 85UL), - 85UL -}; - - - -void -dk4a85_enc_init(dk4_a85_enc_t *enc, int az, dk4_er_t *erp) -{ -#if DK4_USE_ASSERT - assert(NULL != enc); -#endif - if (NULL != enc) { - DK4_MEMRES(enc, sizeof(dk4_a85_enc_t)); - enc->ob[5] = '\0'; - enc->ci = 0; - enc->os = 0; - enc->az = ((0 != az) ? 1 : 0); - } else { - dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); - } -} - - - -int -dk4a85_enc_add(dk4_a85_enc_t *enc, unsigned char input, dk4_er_t *erp) -{ - unsigned long val; - unsigned long v1; - int back = DK4_EDSTM_ERROR; -#if DK4_USE_ASSERT - assert(NULL != enc); -#endif - if (NULL != enc) { - back = DK4_EDSTM_ACCEPT; - enc->ib[enc->ci] = input; - enc->ci += 1; - if (4 <= enc->ci) { - back = DK4_EDSTM_FINISHED; - val = (((unsigned long)(enc->ib[0]) << 24) & 0xFF000000UL) - | (((unsigned long)(enc->ib[1]) << 16) & 0x00FF0000UL) - | (((unsigned long)(enc->ib[2]) << 8) & 0x0000FF00UL) - | (((unsigned long)(enc->ib[3]) ) & 0x000000FFUL); - if ((0UL == val) && (0 != enc->az)) { - enc->ob[0] = 'z'; - enc->ob[1] = '\0'; - enc->os = 1; - } else { - v1 = val / dk4a85e_pow_85[0]; - enc->ob[0] = (char)33 + (char)v1; - val = val % dk4a85e_pow_85[0]; - v1 = val / dk4a85e_pow_85[1]; - enc->ob[1] = (char)33 + (char)v1; - val = val % dk4a85e_pow_85[1]; - v1 = val / dk4a85e_pow_85[2]; - enc->ob[2] = (char)33 + (char)v1; - val = val % dk4a85e_pow_85[2]; - v1 = val / dk4a85e_pow_85[3]; - enc->ob[3] = (char)33 + (char)v1; - val = val % dk4a85e_pow_85[3]; - enc->ob[4] = (char)33 + (char)val; - enc->os = 5; - } - enc->ci = 0; - } - } else { - dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); - } - return back; -} - - - -int -dk4a85_enc_finish(dk4_a85_enc_t *enc, dk4_er_t *erp) -{ - unsigned long val; - unsigned long v1; - int back = DK4_EDSTM_ERROR; - $? "+ dk4a85_enc_finish" -#if DK4_USE_ASSERT - assert(NULL != enc); -#endif - if (NULL != enc) { - if (0 == enc->ci) { - back = DK4_EDSTM_ACCEPT; - enc->ob[0] = '\0'; - enc->os = 0; - } else { - switch (enc->ci) { - case 1: { - $? ". 1 input byte %02x", (int)(enc->ib[0]) - back = DK4_EDSTM_FINISHED; - val = (((unsigned long)(enc->ib[0]) << 24) & 0xFF000000UL); - $? ". val = %lu %lx", val, val - v1 = val / dk4a85e_pow_85[0]; - enc->ob[0] = (char)33 + (char)v1; - $? ". a1 = %lu", v1 - val = val % dk4a85e_pow_85[0]; - v1 = val / dk4a85e_pow_85[1]; - enc->ob[1] = (char)33 + (char)v1; - $? ". a2 = %lu", v1 - enc->os = 2; - enc->ci = 0; - } break; - case 2: { - $? ". 2 input bytes %02x %02x", (int)(enc->ib[0]), (int)(enc->ib[1]) - back = DK4_EDSTM_FINISHED; - val = (((unsigned long)(enc->ib[0]) << 24) & 0xFF000000UL) - | (((unsigned long)(enc->ib[1]) << 16) & 0x00FF0000UL); - $? ". val = %lu %lx", val, val - v1 = val / dk4a85e_pow_85[0]; - enc->ob[0] = (char)33 + (char)v1; - $? ". a1 = %lu", v1 - val = val % dk4a85e_pow_85[0]; - v1 = val / dk4a85e_pow_85[1]; - enc->ob[1] = (char)33 + (char)v1; - $? ". a2 = %lu", v1 - val = val % dk4a85e_pow_85[1]; - v1 = val / dk4a85e_pow_85[2]; - enc->ob[2] = (char)33 + (char)v1; - $? ". a3 = %lu", v1 - enc->os = 3; - enc->ci = 0; - } break; - case 3: { - $? ". 3 input bytes %02x %02x %02x", (int)(enc->ib[0]), (int)(enc->ib[1]), (int)(enc->ib[2]) - back = DK4_EDSTM_FINISHED; - val = (((unsigned long)(enc->ib[0]) << 24) & 0xFF000000UL) - | (((unsigned long)(enc->ib[1]) << 16) & 0x00FF0000UL) - | (((unsigned long)(enc->ib[2]) << 8) & 0x0000FF00UL); - $? ". val = %lu %lx", val, val - v1 = val / dk4a85e_pow_85[0]; - enc->ob[0] = (char)33 + (char)v1; - $? ". a1 = %lu", v1 - val = val % dk4a85e_pow_85[0]; - v1 = val / dk4a85e_pow_85[1]; - enc->ob[1] = (char)33 + (char)v1; - $? ". a2 = %lu", v1 - val = val % dk4a85e_pow_85[1]; - v1 = val / dk4a85e_pow_85[2]; - enc->ob[2] = (char)33 + (char)v1; - $? ". a3 = %lu", v1 - val = val % dk4a85e_pow_85[2]; - v1 = val / dk4a85e_pow_85[3]; - enc->ob[3] = (char)33 + (char)v1; - $? ". a4 = %lu", v1 - enc->os = 4; - enc->ci = 0; - } break; - default: { - $? ". 4 input bytes %02x %02x %02x %02x", (int)(enc->ib[0]), (int)(enc->ib[1]), (int)(enc->ib[2]), (int)(enc->ib[3]) - back = DK4_EDSTM_FINISHED; - val = (((unsigned long)(enc->ib[0]) << 24) & 0xFF000000UL) - | (((unsigned long)(enc->ib[1]) << 16) & 0x00FF0000UL) - | (((unsigned long)(enc->ib[2]) << 8) & 0x0000FF00UL) - | (((unsigned long)(enc->ib[3]) ) & 0x000000FFUL); - $? ". val = %lu %lx", val, val - if ((0UL == val) && (0 != enc->az)) { - enc->ob[0] = 'z'; - enc->ob[1] = '\0'; - enc->os = 1; - } else { - v1 = val / dk4a85e_pow_85[0]; - enc->ob[0] = (char)33 + (char)v1; - $? ". a1 = %lu", v1 - val = val % dk4a85e_pow_85[0]; - v1 = val / dk4a85e_pow_85[1]; - enc->ob[1] = (char)33 + (char)v1; - $? ". a2 = %lu", v1 - val = val % dk4a85e_pow_85[1]; - v1 = val / dk4a85e_pow_85[2]; - enc->ob[2] = (char)33 + (char)v1; - $? ". a3 = %lu", v1 - val = val % dk4a85e_pow_85[2]; - v1 = val / dk4a85e_pow_85[3]; - enc->ob[3] = (char)33 + (char)v1; - $? ". a4 = %lu", v1 - val = val % dk4a85e_pow_85[3]; - enc->ob[4] = (char)33 + (char)val; - $? ". a5 = %lu", val - enc->os = 5; - } - enc->ci = 0; - } break; - } - } - } else { - dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); - } $? "- dk4a85_enc_finish" - return back; -} - - - -int -dk4a85_enc_output( - const char **dptr, - size_t *szptr, - dk4_a85_enc_t const *enc, - dk4_er_t *erp -) -{ - int back = 0; -#if DK4_USE_ASSERT - assert(NULL != enc); - assert(NULL != dptr); - assert(NULL != szptr); -#endif - if ((NULL != dptr) && (NULL != szptr) && (NULL != enc)) { - *dptr = &(enc->ob[0]); - *szptr = enc->os; - if (0 < enc->os) { - back = 1; - } - } else { - dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); - } - return back; -} - |