summaryrefslogtreecommitdiff
path: root/support/dktools/dk4cp850.ctr
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-09-20 03:03:26 +0000
committerNorbert Preining <norbert@preining.info>2020-09-20 03:03:26 +0000
commit1f457376b478257b88d4a857f5ec1b6155442dd7 (patch)
tree2a06a60551dea362cf8cb0cb0ba66c78608717c4 /support/dktools/dk4cp850.ctr
parentac690ca29ad5bf8a5203a65fd6252f7b564f4727 (diff)
CTAN sync 202009200303
Diffstat (limited to 'support/dktools/dk4cp850.ctr')
-rw-r--r--support/dktools/dk4cp850.ctr183
1 files changed, 183 insertions, 0 deletions
diff --git a/support/dktools/dk4cp850.ctr b/support/dktools/dk4cp850.ctr
new file mode 100644
index 0000000000..bc5ff1a909
--- /dev/null
+++ b/support/dktools/dk4cp850.ctr
@@ -0,0 +1,183 @@
+%% options
+
+copyright owner = Dirk Krause
+copyright year = 2015-xxxx
+SPDX-License-Identifier: BSD-3-Clause
+
+
+
+%% header
+
+/** @file
+ Character conversion from CP850 to UNICODE
+ and vice versa.
+
+ CRT on Windows: Not used.
+*/
+
+#ifndef DK4CONF_H_INCLUDED
+#if DK4_BUILDING_DKTOOLS4
+#include "dk4conf.h"
+#else
+#include <dktools-4/dk4conf.h>
+#endif
+#endif
+
+#ifndef DK4TYPES_H_INCLUDED
+#if DK4_BUILDING_DKTOOLS4
+#include "dk4types.h"
+#else
+#include <dktools-4/dk4types.h>
+#endif
+#endif
+
+#ifndef DK4ERROR_H_INCLUDED
+#if DK4_BUILDING_DKTOOLS4
+#include "dk4error.h"
+#else
+#include <dktools-4/dk4error.h>
+#endif
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Encode 32 bit character as CP850 character if possible.
+ @param dptr Pointer to result variable.
+ @param c32 Character to convert.
+ @return 1 on success, 0 on error (character c32 out of range).
+*/
+int
+dk4cp850_encode(unsigned char *dptr, dk4_c32_t c32);
+
+/** Retrieve 32 bit character from CP850 encoded character.
+ @param dptr Pointer to result variable.
+ @param uc CP850 character to convert.
+ @return 1 on success, 0 on error.
+*/
+int
+dk4cp850_decode(dk4_c32_t *dptr, unsigned char uc);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+%% module
+
+#include "dk4cp850.h"
+#include "dk4numco.h"
+
+
+
+/** Conversion table from char:CP850 to C32.
+*/
+static const unsigned long dk4cp850_table[] = {
+/* 00 */
+0x0000UL, 0x263AUL, 0x263BUL, 0x2665UL, 0x2666UL, 0x2663UL, 0x2660UL, 0x2022UL,
+0x25D8UL, 0x25CBUL, 0x25D9UL, 0x2642UL, 0x2640UL, 0x266AUL, 0x266BUL, 0x263CUL,
+
+/* 10 */
+0x25BAUL, 0x25C4UL, 0x2195UL, 0x203CUL, 0x00B6UL, 0x00A7UL, 0x25ACUL, 0x21A8UL,
+0x2191UL, 0x2193UL, 0x2192UL, 0x2190UL, 0x221FUL, 0x2194UL, 0x25B2UL, 0x25BCUL,
+
+/* 20 */
+0x0020UL, 0x0021UL, 0x0022UL, 0x0023UL, 0x0024UL, 0x0025UL, 0x0026UL, 0x0027UL,
+0x0028UL, 0x0029UL, 0x002AUL, 0x002BUL, 0x002CUL, 0x002DUL, 0x002EUL, 0x002FUL,
+
+/* 30 */
+0x0030UL, 0x0031UL, 0x0032UL, 0x0033UL, 0x0034UL, 0x0035UL, 0x0036UL, 0x0037UL,
+0x0038UL, 0x0039UL, 0x003AUL, 0x003BUL, 0x003CUL, 0x003DUL, 0x003EUL, 0x003FUL,
+
+/* 40 */
+0x0040UL, 0x0041UL, 0x0042UL, 0x0043UL, 0x0044UL, 0x0045UL, 0x0046UL, 0x0047UL,
+0x0048UL, 0x0049UL, 0x004AUL, 0x004BUL, 0x004CUL, 0x004DUL, 0x004EUL, 0x004FUL,
+
+/* 50 */
+0x0050UL, 0x0051UL, 0x0052UL, 0x0053UL, 0x0054UL, 0x0055UL, 0x0056UL, 0x0057UL,
+0x0058UL, 0x0059UL, 0x005AUL, 0x005BUL, 0x005CUL, 0x005DUL, 0x005EUL, 0x005FUL,
+
+/* 60 */
+0x0060UL, 0x0061UL, 0x0062UL, 0x0063UL, 0x0064UL, 0x0065UL, 0x0066UL, 0x0067UL,
+0x0068UL, 0x0069UL, 0x006AUL, 0x006BUL, 0x006CUL, 0x006DUL, 0x006EUL, 0x006FUL,
+
+/* 70 */
+0x0070UL, 0x0071UL, 0x0072UL, 0x0073UL, 0x0074UL, 0x0075UL, 0x0076UL, 0x0077UL,
+0x0078UL, 0x0079UL, 0x007AUL, 0x007BUL, 0x007CUL, 0x007DUL, 0x007EUL, 0x2302UL,
+
+/* 80 */
+0x00C7UL, 0x00FCUL, 0x00E9UL, 0x00E2UL, 0x00E4UL, 0x00E0UL, 0x00E5UL, 0x00E7UL,
+0x00EAUL, 0x00EBUL, 0x00E8UL, 0x00EFUL, 0x00EEUL, 0x00ECUL, 0x00C4UL, 0x00C5UL,
+
+/* 90 */
+0x00C9UL, 0x00E6UL, 0x00C6UL, 0x00F4UL, 0x00F6UL, 0x00F2UL, 0x00FBUL, 0x00F9UL,
+0x00FFUL, 0x00D6UL, 0x00DCUL, 0x00F8UL, 0x00A3UL, 0x00D8UL, 0x00D7UL, 0x0192UL,
+
+/* A0 */
+0x00E1UL, 0x00EDUL, 0x00F3UL, 0x00FAUL, 0x00F1UL, 0x00D1UL, 0x00AAUL, 0x00BAUL,
+0x00BFUL, 0x00AEUL, 0x00ACUL, 0x00BDUL, 0x00BCUL, 0x00A1UL, 0x00ABUL, 0x00BBUL,
+
+/* B0 */
+0x2591UL, 0x2592UL, 0x2593UL, 0x2502UL, 0x2524UL, 0x00C1UL, 0x00C2UL, 0x00C0UL,
+0x00A9UL, 0x2563UL, 0x2551UL, 0x2557UL, 0x255DUL, 0x00A2UL, 0x00A5UL, 0x2510UL,
+
+/* C0 */
+0x2514UL, 0x2534UL, 0x252CUL, 0x251CUL, 0x2500UL, 0x253CUL, 0x00E3UL, 0x00C3UL,
+0x255AUL, 0x2554UL, 0x2569UL, 0x2566UL, 0x2560UL, 0x2550UL, 0x256CUL, 0x00A4UL,
+
+/* D0 */
+0x00F0UL, 0x00D0UL, 0x00CAUL, 0x00CBUL, 0x00C8UL, 0x0131UL, 0x00CDUL, 0x00CEUL,
+0x00CFUL, 0x2518UL, 0x250CUL, 0x2588UL, 0x2584UL, 0x00A6UL, 0x00CCUL, 0x2580UL,
+
+/* E0 */
+0x00D3UL, 0x00DFUL, 0x00D4UL, 0x00D2UL, 0x00F5UL, 0x00D5UL, 0x00B5UL, 0x00FEUL,
+0x00DEUL, 0x00DAUL, 0x00DBUL, 0x00D9UL, 0x00FDUL, 0x00DDUL, 0x00AFUL, 0x00B4UL,
+
+/* F0 */
+0x00ADUL, 0x00B1UL, 0x2017UL, 0x00BEUL, 0x00B6UL, 0x00A7UL, 0x00F7UL, 0x00B8UL,
+0x00B0UL, 0x00A8UL, 0x00B7UL, 0x00B9UL, 0x00B3UL, 0x00B2UL, 0x25A0UL, 0x00A0UL
+};
+
+
+
+/** Table size (number of elements).
+*/
+static const size_t dk4cp850_sz_table =
+sizeof(dk4cp850_table)/sizeof(unsigned long);
+
+
+int
+dk4cp850_encode(unsigned char *dptr, dk4_c32_t c32)
+{
+ size_t i;
+ int back = 0;
+ if (NULL != dptr) {
+ for (i = 0; ((0 == back) && (i < dk4cp850_sz_table)); i++) {
+ if ( (dk4_c32_t)(dk4cp850_table[i]) == c32 ) {
+ *dptr = (unsigned char)i;
+ back = 1;
+ }
+ }
+ }
+ return back;
+}
+
+
+
+int
+dk4cp850_decode(dk4_c32_t *dptr, unsigned char uc)
+{
+ int back = 0;
+ if (NULL != dptr) {
+ *dptr = (dk4_c32_t)(
+ dk4cp850_table[((size_t)uc) & ((size_t)0x000000FFUL)]
+ );
+ back = 1;
+ }
+ return back;
+}
+
+
+/* vim: set ai sw=4 ts=4 : */