summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <m@maandree.se>2025-02-22 14:51:27 +0100
committerMattias Andrée <m@maandree.se>2025-02-22 14:51:27 +0100
commitde5b9247e26340935b8dc19608491e722f4c4ad2 (patch)
treeca6408ed9bb18a3039be9b1f594ab13b6bffe73c
downloadlibcharsets-de5b9247e26340935b8dc19608491e722f4c4ad2.tar.gz
libcharsets-de5b9247e26340935b8dc19608491e722f4c4ad2.tar.bz2
libcharsets-de5b9247e26340935b8dc19608491e722f4c4ad2.tar.xz
First commit
Signed-off-by: Mattias Andrée <m@maandree.se>
-rw-r--r--.gitignore14
-rw-r--r--LICENSE15
-rw-r--r--Makefile69
-rw-r--r--TODO48
-rw-r--r--config.mk8
-rw-r--r--libcharsets.h5
-rw-r--r--maps/cp11013
-rw-r--r--maps/cp11055
-rw-r--r--maps/cp11079
-rw-r--r--maps/din-6600312
-rw-r--r--maps/f7dec14
-rw-r--r--maps/ibm-21020
-rw-r--r--maps/ibm-437149
-rw-r--r--maps/ibm-7373
-rw-r--r--maps/ibm-8654
-rw-r--r--maps/inis11
-rw-r--r--maps/iso-8859-12
-rw-r--r--maps/iso-8859-1377
-rw-r--r--maps/iso-8859-1426
-rw-r--r--maps/iso-8859-1516
-rw-r--r--maps/iso-8859-1659
-rw-r--r--maps/iso-8859-297
-rw-r--r--maps/iso-8859-349
-rw-r--r--maps/iso-8859-471
-rw-r--r--maps/iso-8859-57
-rw-r--r--maps/iso-8859-912
-rw-r--r--maps/iso-ir-18226
-rw-r--r--maps/mazovia17
-rw-r--r--maps/nl7dec14
-rw-r--r--maps/s7dec2
-rw-r--r--maps/sf7dec13
-rw-r--r--maps/us-ascii1
-rw-r--r--mk/linux.mk6
-rw-r--r--mk/macos.mk6
-rw-r--r--mk/windows.mk6
35 files changed, 896 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a071ed4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,14 @@
+*\#*
+*~
+*.o
+*.a
+*.lo
+*.su
+*.so
+*.so.*
+*.dll
+*.dylib
+*.gch
+*.gcov
+*.gcno
+*.gcda
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..0e6be1c
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,15 @@
+ISC License
+
+© 2025 Mattias Andrée <m@maandree.se>
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..89b0413
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,69 @@
+.POSIX:
+
+CONFIGFILE = config.mk
+include $(CONFIGFILE)
+
+OS = linux
+# Linux: linux
+# Mac OS: macos
+# Windows: windows
+include mk/$(OS).mk
+
+
+LIB_MAJOR = 1
+LIB_MINOR = 0
+LIB_VERSION = $(LIB_MAJOR).$(LIB_MINOR)
+LIB_NAME = charsets
+
+
+OBJ =
+
+HDR =\
+ libcharsets.h
+
+LOBJ = $(OBJ:.o=.lo)
+
+
+all: libcharsets.a libcharsets.$(LIBEXT)
+$(OBJ): $(HDR)
+$(LOBJ): $(HDR)
+
+.c.o:
+ $(CC) -c -o $@ $< $(CFLAGS) $(CPPFLAGS)
+
+.c.lo:
+ $(CC) -fPIC -c -o $@ $< $(CFLAGS) $(CPPFLAGS)
+
+libcharsets.a: $(OBJ)
+ @rm -f -- $@
+ $(AR) rc $@ $(OBJ)
+ $(AR) ts $@ > /dev/null
+
+libcharsets.$(LIBEXT): $(LOBJ)
+ $(CC) $(LIBFLAGS) -o $@ $(LOBJ) $(LDFLAGS)
+
+install: libcharsets.a libcharsets.$(LIBEXT)
+ mkdir -p -- "$(DESTDIR)$(PREFIX)/lib"
+ mkdir -p -- "$(DESTDIR)$(PREFIX)/include"
+ cp -- libcharsets.a "$(DESTDIR)$(PREFIX)/lib/"
+ cp -- libcharsets.$(LIBEXT) "$(DESTDIR)$(PREFIX)/lib/libcharsets.$(LIBMINOREXT)"
+ $(FIX_INSTALL_NAME) "$(DESTDIR)$(PREFIX)/lib/libcharsets.$(LIBMINOREXT)"
+ ln -sf -- libcharsets.$(LIBMINOREXT) "$(DESTDIR)$(PREFIX)/lib/libcharsets.$(LIBMAJOREXT)"
+ ln -sf -- libcharsets.$(LIBMAJOREXT) "$(DESTDIR)$(PREFIX)/lib/libcharsets.$(LIBEXT)"
+ cp -- libcharsets.h "$(DESTDIR)$(PREFIX)/include/"
+
+uninstall:
+ -rm -f -- "$(DESTDIR)$(PREFIX)/lib/libcharsets.a"
+ -rm -f -- "$(DESTDIR)$(PREFIX)/lib/libcharsets.$(LIBMAJOREXT)"
+ -rm -f -- "$(DESTDIR)$(PREFIX)/lib/libcharsets.$(LIBMINOREXT)"
+ -rm -f -- "$(DESTDIR)$(PREFIX)/lib/libcharsets.$(LIBEXT)"
+ -rm -f -- "$(DESTDIR)$(PREFIX)/include/libcharsets.h"
+
+clean:
+ -rm -f -- *.o *.a *.lo *.su *.so *.so.* *.dll *.dylib
+ -rm -f -- *.gch *.gcov *.gcno *.gcda *.$(LIBEXT)
+
+.SUFFIXES:
+.SUFFIXES: .lo .o .c
+
+.PHONY: all install uninstall clean
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..00348ea
--- /dev/null
+++ b/TODO
@@ -0,0 +1,48 @@
+ISO-8859-6
+ISO-8859-7
+ISO-8859-8
+ISO-8859-10
+ISO-8859-11
+ISO-IR-111
+ISO-IR-197
+ISO-IR-200
+IBM-165
+IBM-850
+IBM-858
+IBM-861
+IBM-862
+IBM-863
+IBM-864
+IBM-866
+IBM-867
+IBM-868
+IBM-869
+IBM-897
+IBM-899
+IBM-903
+IBM-904
+IBM-932
+IBM-936
+IBM-942
+IBM-949
+IBM-951
+IBM-1040
+IBM-1041
+IBM-1042
+IBM-1043
+IBM-1092
+IBM-1098
+IBM-1115
+IBM-1116
+IBM-1117
+IBM-1118
+IBM-1127
+ABICOMP character set
+CS Indic character set
+CSX Indic character set
+CSX+ Indic character set
+CWI-2
+Iran System encoding
+Kamenický encoding
+MIK
+ELOT 927
diff --git a/config.mk b/config.mk
new file mode 100644
index 0000000..f4adf12
--- /dev/null
+++ b/config.mk
@@ -0,0 +1,8 @@
+PREFIX = /usr
+MANPREFIX = $(PREFIX)/share/man
+
+CC = c99
+
+CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_GNU_SOURCE
+CFLAGS =
+LDFLAGS =
diff --git a/libcharsets.h b/libcharsets.h
new file mode 100644
index 0000000..cd9c9f0
--- /dev/null
+++ b/libcharsets.h
@@ -0,0 +1,5 @@
+/* See LICENSE file for copyright and license details. */
+#ifndef LIBCHARSETS_H
+#define LIBCHARSETS_H
+
+#endif
diff --git a/maps/cp1101 b/maps/cp1101
new file mode 100644
index 0000000..32e3248
--- /dev/null
+++ b/maps/cp1101
@@ -0,0 +1,3 @@
+map 0x00-0x22 to U+0000
+map 0x23 to U+00A3
+map 0x24-0x7F to U+0024
diff --git a/maps/cp1105 b/maps/cp1105
new file mode 100644
index 0000000..5351d2c
--- /dev/null
+++ b/maps/cp1105
@@ -0,0 +1,5 @@
+include cp1107
+remap 0x40 to U+00C4
+remap 0x5E to U+00DC
+remap 0x60 to U+00E4
+remap 0x7E to U+00FC
diff --git a/maps/cp1107 b/maps/cp1107
new file mode 100644
index 0000000..e54db36
--- /dev/null
+++ b/maps/cp1107
@@ -0,0 +1,9 @@
+map 0x00-0x5A to U+0000
+map 0x5B to U+00C6
+map 0x5C to U+00D8
+map 0x5D to U+00C5
+map 0x5E-0x7A to U+005E
+map 0x7B to U+00E6
+map 0x7C to U+00F8
+map 0x7D to U+00E5
+map 0x7E-0x7F to U+007E
diff --git a/maps/din-66003 b/maps/din-66003
new file mode 100644
index 0000000..512a149
--- /dev/null
+++ b/maps/din-66003
@@ -0,0 +1,12 @@
+map 0x00-0x3F to U+0000
+map 0x40 to U+00A7
+map 0x41-0x5A to U+0041
+map 0x4B to U+00C4
+map 0x4C to U+00D6
+map 0x4D to U+00DC
+map 0x4E-0x7A to U+004E
+map 0x7B to U+00E4
+map 0x7C to U+00F6
+map 0x7D to U+00FC
+map 0x7E to U+00DF
+map 0x7F to U+007F
diff --git a/maps/f7dec b/maps/f7dec
new file mode 100644
index 0000000..5a016b4
--- /dev/null
+++ b/maps/f7dec
@@ -0,0 +1,14 @@
+map 0x00-0x22 to U+0000
+map 0x23 to U+00A3
+map 0x24-0x3F to U+0024
+map 0x40 to U+00E0
+map 0x41-0x5A to U+0041
+map 0x5B to U+00B0
+map 0x5C to U+00E7
+map 0x5D to U+00A7
+map 0x5E-0x7A to U+005E
+map 0x7B to U+00E9
+map 0x7C to U+00F9
+map 0x7D to U+00E8
+map 0x7E to U+00A8
+map 0x7F to U+007F
diff --git a/maps/ibm-210 b/maps/ibm-210
new file mode 100644
index 0000000..6427458
--- /dev/null
+++ b/maps/ibm-210
@@ -0,0 +1,20 @@
+include ibm-437
+unmap 0x80-0xAF
+unmap 0xE0-0xF0
+map 0x80-0x90 to U+0391
+map 0x91-0x97 to U+03A3
+map 0x98-0xA8 to U+03B1
+map 0xA9 to U+03C3
+map 0xAA to U+03C2
+map 0xAB-0xAF to U+03C4
+map 0xE0 to U+03C9
+map 0xE1-0xE3 to U+03AC
+map 0xE4 to U+03CA
+map 0xE5 to U+03AF
+map 0xE6-0xE7 to U+03CC
+map 0xE8 to U+03CB
+map 0xE9 to U+03CE
+map 0xEA to U+0386
+map 0xEB-0xED to U+0388
+map 0xEE to U+038C
+map 0xEF-0xF0 to U+038E
diff --git a/maps/ibm-437 b/maps/ibm-437
new file mode 100644
index 0000000..352914b
--- /dev/null
+++ b/maps/ibm-437
@@ -0,0 +1,149 @@
+map 0x00 to U+0000
+map 0x01-0x02 to U+263A
+map 0x03-0x04 to U+2665
+map 0x05 to U+2663
+map 0x06 to U+2660
+map 0x07 to U+2022
+map 0x08 to U+25D8
+map 0x09 to U+25CB
+map 0x0A to U+25D9
+map 0x0B to U+2642
+map 0x0C to U+2640
+map 0x0D-0x0E to U+266A
+map 0x0F to U+263C
+map 0x10 to U+25BA
+map 0x11 to U+25C4
+map 0x12 to U+2195
+map 0x13 to U+203C
+map 0x14 to U+00B6
+map 0x15 to U+00A7
+map 0x16 to U+25AC
+map 0x17 to U+21A8
+map 0x18 to U+2191
+map 0x19 to U+2193
+map 0x1A to U+2192
+map 0x1B to U+2190
+map 0x1C to U+221F
+map 0x1D to U+2194
+map 0x1E to U+25B2
+map 0x1F to U+25BC
+map 0x20-0x7E to U+0020
+map 0x7F to U+2302
+map 0x80 to U+00C7
+map 0x81 to U+00FC
+map 0x82 to U+00E9
+map 0x83 to U+00E2
+map 0x84 to U+00E4
+map 0x85 to U+00E0
+map 0x86 to U+00E5
+map 0x87 to U+00E7
+map 0x88 to U+00EA
+map 0x89 to U+00EB
+map 0x8A to U+00E8
+map 0x8B to U+00EF
+map 0x8C to U+00EE
+map 0x8D to U+00EC
+map 0x8E-0x8F to U+00C4
+map 0x90 to U+00C9
+map 0x91 to U+00E6
+map 0x92 to U+00C6
+map 0x93 to U+00F4
+map 0x94 to U+00F6
+map 0x95 to U+00F2
+map 0x96 to U+00FB
+map 0x97 to U+00F9
+map 0x98 to U+00FF
+map 0x99 to U+00D6
+map 0x9A to U+00DC
+map 0x9B-0x9C to U+00A2
+map 0x9D to U+00A5
+map 0x9E to U+20A7
+map 0x9F to U+0192
+map 0xA0 to U+00E1
+map 0xA1 to U+00ED
+map 0xA2 to U+00F3
+map 0xA3 to U+00FA
+map 0xA4 to U+00F1
+map 0xA5 to U+00D1
+map 0xA6 to U+00AA
+map 0xA7 to U+00BA
+map 0xA8 to U+00BF
+map 0xA9 to U+2310
+map 0xAA to U+00AC
+map 0xAB to U+00BD
+map 0xAC to U+00BC
+map 0xAD to U+00A1
+map 0xAE to U+00AB
+map 0xAF to U+00BB
+map 0xB0-0xB2 to U+2591
+map 0xB3 to U+2502
+map 0xB4 to U+2524
+map 0xB5-0xB6 to U+2561
+map 0xB7 to U+2556
+map 0xB8 to U+2555
+map 0xB9 to U+2563
+map 0xBA to U+2551
+map 0xBB to U+2557
+map 0xBC to U+255D
+map 0xBD to U+255C
+map 0xBE to U+255B
+map 0xBF to U+2510
+map 0xC0 to U+2514
+map 0xC1 to U+2534
+map 0xC2 to U+252C
+map 0xC3 to U+251C
+map 0xC4 to U+2500
+map 0xC5 to U+253C
+map 0xC6-0xC7 to U+255E
+map 0xC8 to U+255A
+map 0xC9 to U+2554
+map 0xCA to U+2569
+map 0xCB to U+2566
+map 0xCC to U+2560
+map 0xCD to U+2550
+map 0xCE to U+256C
+map 0xCF-0xD0 to U+2567
+map 0xD1-0xD2 to U+2564
+map 0xD3 to U+2559
+map 0xD4 to U+2558
+map 0xD5-0xD6 to U+2552
+map 0xD7 to U+256B
+map 0xD8 to U+256A
+map 0xD9 to U+2518
+map 0xDA to U+250C
+map 0xDB to U+2588
+map 0xDC to U+2584
+map 0xDD to U+258C
+map 0xDE to U+2590
+map 0xDF to U+2580
+map 0xE0 to U+03B1
+map 0xE1 to U+00DF
+map 0xE2 to U+0393
+map 0xE3 to U+03C0
+map 0xE4 to U+03A3
+map 0xE5 to U+03C3
+map 0xE6 to U+00B5
+map 0xE7 to U+03C4
+map 0xE8 to U+03A6
+map 0xE9 to U+0398
+map 0xEA to U+03A9
+map 0xEB to U+03B4
+map 0xEC to U+221E
+map 0xED to U+03C6
+map 0xEE to U+03B5
+map 0xEF to U+2229
+map 0xF0 to U+2261
+map 0xF1 to U+00B1
+map 0xF2 to U+2265
+map 0xF3 to U+2264
+map 0xF4-0xF5 to U+2320
+map 0xF6 to U+00F7
+map 0xF7 to U+2248
+map 0xF8 to U+00B0
+map 0xF9 to U+2219
+map 0xFA to U+00B7
+map 0xFB to U+221A
+map 0xFC to U+207F
+map 0xFD to U+00B2
+map 0xFE to U+25A0
+map 0xFF to U+00A0
diff --git a/maps/ibm-737 b/maps/ibm-737
new file mode 100644
index 0000000..ef928cb
--- /dev/null
+++ b/maps/ibm-737
@@ -0,0 +1,3 @@
+include ibm-210
+unmap 0xF4-0xF5
+map 0xF4-0xF5 to U+03AA
diff --git a/maps/ibm-865 b/maps/ibm-865
new file mode 100644
index 0000000..381a5ec
--- /dev/null
+++ b/maps/ibm-865
@@ -0,0 +1,4 @@
+include ibm-437
+remap 0x9B to U+00F8
+remap 0x9D to U+00D8
+remap 0xAF to U+00A4
diff --git a/maps/inis b/maps/inis
new file mode 100644
index 0000000..f1024cd
--- /dev/null
+++ b/maps/inis
@@ -0,0 +1,11 @@
+map 0x1B-0x7F to U+001B
+unmap 0x1C
+unmap 0x1F
+unmap 0x21-0x23
+unmap 0x26
+unmap 0x3F
+unmap 0x40
+unmap 0x5C
+unmap 0x5E-0x60
+unmap 0x7B
+unmap 0x7D
diff --git a/maps/iso-8859-1 b/maps/iso-8859-1
new file mode 100644
index 0000000..d3f5f11
--- /dev/null
+++ b/maps/iso-8859-1
@@ -0,0 +1,2 @@
+map 0x20-0x7E to U+0020
+map 0xA0-0x7F to U+00A0
diff --git a/maps/iso-8859-13 b/maps/iso-8859-13
new file mode 100644
index 0000000..0a6baa3
--- /dev/null
+++ b/maps/iso-8859-13
@@ -0,0 +1,77 @@
+map 0x20-0x7E to U+0020
+map 0xA0 to U+00A0
+map 0xA1 to U+201D
+map 0xA2-0xA4 to U+00A2
+map 0xA5 to U+201E
+map 0xA6-0xA7 to U+00A6
+map 0xA8 to U+00D8
+map 0xA9 to U+00A9
+map 0xAA to U+0156
+map 0xAB-0xAE to U+00AB
+map 0xAF to U+00C6
+map 0xB0-0xB3 to U+00B0
+map 0xB4 to U+201C
+map 0xB5-0xB7 to U+00B5
+map 0xB8 to U+00F8
+map 0xB9 to U+00B9
+map 0xBA to U+0157
+map 0xBB-0xBE to U+00BB
+map 0xBF to U+00E6
+map 0xC0 to U+0104
+map 0xC1 to U+012E
+map 0xC2 to U+0100
+map 0xC3 to U+0106
+map 0xC4-0xC5 to U+00C4
+map 0xC6 to U+0118
+map 0xC7 to U+0112
+map 0xC8 to U+010C
+map 0xC9 to U+00C9
+map 0xCA to U+0179
+map 0xCB to U+0116
+map 0xCC to U+0122
+map 0xCD to U+0136
+map 0xCE to U+012A
+map 0xCF to U+013B
+map 0xD0 to U+0160
+map 0xD1 to U+0143
+map 0xD2 to U+0145
+map 0xD3 to U+00D3
+map 0xD4 to U+014C
+map 0xD5-0xD7 to U+00D5
+map 0xD8 to U+0172
+map 0xD9 to U+0141
+map 0xDA to U+015A
+map 0xDB to U+016A
+map 0xDC to U+00DC
+map 0xDD to U+017B
+map 0xDE to U+017D
+map 0xDF to U+00DF
+map 0xE0 to U+0105
+map 0xE1 to U+012F
+map 0xE2 to U+0101
+map 0xE3 to U+0107
+map 0xE4-0xE5 to U+00E4
+map 0xE6 to U+0119
+map 0xE7 to U+0113
+map 0xE8 to U+010D
+map 0xE9 to U+00E9
+map 0xEA to U+017A
+map 0xEB to U+0117
+map 0xEC to U+0123
+map 0xED to U+0137
+map 0xEE to U+0137
+map 0xEF to U+013C
+map 0xF0 to U+0161
+map 0xF1 to U+0144
+map 0xF2 to U+0146
+map 0xF3 to U+00F3
+map 0xF4 to U+014D
+map 0xF5-0xF7 to U+00F5
+map 0xF8 to U+0173
+map 0xF9 to U+0142
+map 0xFA to U+015B
+map 0xFB to U+016B
+map 0xFC to U+00FC
+map 0xFD to U+017C
+map 0xFE to U+017E
+map 0xFF to U+2019
diff --git a/maps/iso-8859-14 b/maps/iso-8859-14
new file mode 100644
index 0000000..eefccf9
--- /dev/null
+++ b/maps/iso-8859-14
@@ -0,0 +1,26 @@
+map 0x20-0x7E to U+0020
+map 0xA0 to U+00A0
+map 0xA1-0xA2 to U+1E02
+map 0xA3 to U+00A3
+map 0xA4-0xA5 to U+010A
+map 0xA6 to U+1E0A
+map 0xA7 to U+00A7
+map 0xA8 to U+1E80
+map 0xA9 to U+00A9
+map 0xAA to U+1E82
+map 0xAB to U+1E0B
+map 0xAC to U+1EF2
+map 0xAD-0xAE to U+00AD
+map 0xAF to U+0178
+map 0xB0-0xB1 to U+1E1E
+map 0xB2-0xB3 to U+0120
+map 0xB4-0xB5 to U+1E40
+map 0xB6 to U+00B6
+map 0xB7 to U+1E56
+map 0xB8 to U+1E81
+map 0xB9 to U+1E57
+map 0xBA to U+1E83
+map 0xBB to U+1E60
+map 0xBC to U+1EF3
+map 0xBD-0xBE to U+1E84
+map 0xBF to U+1E61
diff --git a/maps/iso-8859-15 b/maps/iso-8859-15
new file mode 100644
index 0000000..9835681
--- /dev/null
+++ b/maps/iso-8859-15
@@ -0,0 +1,16 @@
+map 0x20-0x7E to U+0020
+map 0xA0-0xA3 to U+00A0
+map 0xA4 to U+20AC
+map 0xA5 to U+00A5
+map 0xA6 to U+0160
+map 0xA7 to U+00A7
+map 0xA8 to U+0161
+map 0xA9-0xB3 to U+00A7
+map 0xB4 to U+017D
+map 0xB5-0xB7 to U+00B5
+map 0xB8 to U+017E
+map 0xB9-0xBB to U+00BB
+map 0xBC to U+0152
+map 0xBD to U+0153
+map 0xBE to U+0178
+map 0xBF-0xFF to U+00BF
diff --git a/maps/iso-8859-16 b/maps/iso-8859-16
new file mode 100644
index 0000000..b49bcdd
--- /dev/null
+++ b/maps/iso-8859-16
@@ -0,0 +1,59 @@
+map 0x20-0x7E to U+0020
+map 0xA0 to U+00A0
+map 0xA1-0xA2 to U+0104
+map 0xA3 to U+0141
+map 0xA4 to U+20AC
+map 0xA5 to U+201E
+map 0xA6 to U+0160
+map 0xA7 to U+00A7
+map 0xA8 to U+0161
+map 0xA9 to U+00A9
+map 0xAA to U+0218
+map 0xAB to U+00AB
+map 0xAC to U+0179
+map 0xAD to U+00AD
+map 0xAE-0xAF to U+017A
+map 0xB0-0xB1 to U+00B0
+map 0xB2 to U+010C
+map 0xB3 to U+0142
+map 0xB4 to U+017D
+map 0xB5 to U+201D
+map 0xB6-0xB7 to U+00B6
+map 0xB8 to U+017E
+map 0xB9 to U+010D
+map 0xBA to U+0219
+map 0xBB to U+00BB
+map 0xBC-0xBD to U+0152
+map 0xBE to U+0178
+map 0xBF to U+017C
+map 0xC0-0xC2 to U+00C0
+map 0xC3 to U+0102
+map 0xC4 to U+00C4
+map 0xC5 to U+0106
+map 0xC6-0xCF to U+00C6
+map 0xD0 to U+0110
+map 0xD1 to U+0143
+map 0xD2-0xD4 to U+00D2
+map 0xD5 to U+0150
+map 0xD6 to U+00D6
+map 0xD7 to U+015A
+map 0xD8 to U+0170
+map 0xD9-0xDC to U+00D9
+map 0xDD to U+0118
+map 0xDE to U+021A
+map 0xDF-0xE2 to U+00DF
+map 0xE3 to U+0103
+map 0xE4 to U+00E4
+map 0xE5 to U+0107
+map 0xE6-0xEF to U+00E6
+map 0xF0 to U+0111
+map 0xF1 to U+0144
+map 0xF2-0xF4 to U+00F2
+map 0xF5 to U+0144
+map 0xF6 to U+00F6
+map 0xF7 to U+015B
+map 0xF8 to U+0171
+map 0xF9-0xFC to U+00F9
+map 0xFD to U+0119
+map 0xFE to U+021B
+map 0xFF to U+00FF
diff --git a/maps/iso-8859-2 b/maps/iso-8859-2
new file mode 100644
index 0000000..d5c58e6
--- /dev/null
+++ b/maps/iso-8859-2
@@ -0,0 +1,97 @@
+map 0x20-0x7E to U+0020
+map 0xA0 to U+00A0
+map 0xA1 to U+0104
+map 0xA2 to U+02D8
+map 0xA3 to U+0131
+map 0xA4 to U+00A4
+map 0xA5 to U+013D
+map 0xA6 to U+015A
+map 0xA7 to U+00A7
+map 0xA8 to U+00A8
+map 0xA9 to U+0160
+map 0xAA to U+015E
+map 0xAB to U+0164
+map 0xAC to U+0179
+map 0xAD to U+00AD
+map 0xAE to U+017D
+map 0xAF to U+017B
+map 0xB0 to U+00B0
+map 0xB1 to U+0105
+map 0xB2 to U+02DB
+map 0xB3 to U+0142
+map 0xB4 to U+00B4
+map 0xB5 to U+013E
+map 0xB6 to U+015B
+map 0xB7 to U+02C7
+map 0xB8 to U+00B8
+map 0xB9 to U+0161
+map 0xBA to U+015F
+map 0xBB to U+0165
+map 0xBC to U+017A
+map 0xBD to U+02DD
+map 0xBE to U+017E
+map 0xBF to U+017C
+map 0xC0 to U+0154
+map 0xC1 to U+00C1
+map 0xC2 to U+00C2
+map 0xC3 to U+0102
+map 0xC4 to U+00C4
+map 0xC5 to U+0139
+map 0xC6 to U+0106
+map 0xC7 to U+00C7
+map 0xC8 to U+010C
+map 0xC9 to U+00C9
+map 0xCA to U+0118
+map 0xCB to U+00CB
+map 0xCC to U+011A
+map 0xCD to U+00CD
+map 0xCE to U+00CE
+map 0xCF to U+010E
+map 0xD0 to U+0110
+map 0xD1 to U+0143
+map 0xD2 to U+0147
+map 0xD3 to U+00D3
+map 0xD4 to U+00D4
+map 0xD5 to U+0150
+map 0xD6 to U+00D6
+map 0xD7 to U+00D7
+map 0xD8 to U+0158
+map 0xD9 to U+016E
+map 0xDA to U+00DA
+map 0xDB to U+0170
+map 0xDC to U+00DC
+map 0xDD to U+00DD
+map 0xDE to U+0162
+map 0xDF to U+00DF
+map 0xE0 to U+0155
+map 0xE1 to U+00E1
+map 0xE2 to U+00E2
+map 0xE3 to U+0103
+map 0xE4 to U+00E4
+map 0xE5 to U+013A
+map 0xE6 to U+0107
+map 0xE7 to U+00E7
+map 0xE8 to U+010D
+map 0xE9 to U+00E9
+map 0xEA to U+0119
+map 0xEB to U+00EB
+map 0xEC to U+011B
+map 0xED to U+00ED
+map 0xEE to U+00EE
+map 0xEF to U+010F
+map 0xF0 to U+0111
+map 0xF1 to U+0144
+map 0xF2 to U+0148
+map 0xF3 to U+00F3
+map 0xF4 to U+00F4
+map 0xF5 to U+0151
+map 0xF6 to U+00F6
+map 0xF7 to U+00F7
+map 0xF8 to U+0159
+map 0xF9 to U+016F
+map 0xFA to U+00FA
+map 0xFB to U+0171
+map 0xFC to U+00FC
+map 0xFD to U+00FD
+map 0xFE to U+0163
+map 0xFF to U+02D9
diff --git a/maps/iso-8859-3 b/maps/iso-8859-3
new file mode 100644
index 0000000..d11cb1d
--- /dev/null
+++ b/maps/iso-8859-3
@@ -0,0 +1,49 @@
+map 0x20-0x7E to U+0020
+map 0xA0 to U+00A0
+map 0xA1 to U+0126
+map 0xA2 to U+02D8
+map 0xA3-0xA4 to U+00A3
+map 0xA6 to U+0124
+map 0xA7-0xA8 to U+00A7
+map 0xA9 to U+0130
+map 0xAA to U+015E
+map 0xAB to U+011E
+map 0xAC to U+0134
+map 0xAD to U+00AD
+map 0xAF to U+017B
+map 0xB0 to U+00B0
+map 0xB1 to U+0127
+map 0xB2-0xB5 to U+00B2
+map 0xB6 to U+0125
+map 0xB7-0xB8 to U+00B7
+map 0xB9 to U+0131
+map 0xBA to U+015F
+map 0xBB to U+011F
+map 0xBC to U+0135
+map 0xBD to U+00BD
+map 0xBF to U+017C
+map 0xC0-0xC2 to U+00C0
+map 0xC4 to U+00C4
+map 0xC5 to U+010A
+map 0xC6 to U+0108
+map 0xC7-0xCF to U+00C7
+map 0xD1-0xD4 to U+00D1
+map 0xD5 to U+0120
+map 0xD6-0xD7 to U+00D6
+map 0xD8 to U+011C
+map 0xD9-0xDC to U+00D9
+map 0xDD to U+016C
+map 0xDE to U+015C
+map 0xDF-0xE2 to U+00DF
+map 0xE4 to U+00E4
+map 0xE5 to U+010B
+map 0xE6 to U+0109
+map 0xE7-0xEF to U+00E7
+map 0xF1-0xF4 to U+00F1
+map 0xF5 to U+0121
+map 0xF6-0xF7 to U+00F6
+map 0xF8 to U+011D
+map 0xF9-0xFC to U+00F9
+map 0xFD to U+016D
+map 0xFE to U+015D
+map 0xFF to U+02D9
diff --git a/maps/iso-8859-4 b/maps/iso-8859-4
new file mode 100644
index 0000000..c431007
--- /dev/null
+++ b/maps/iso-8859-4
@@ -0,0 +1,71 @@
+map 0x20-0x7E to U+0020
+map 0xA0 to U+00A0
+map 0xA1 to U+0104
+map 0xA2 to U+0138
+map 0xA3 to U+0156
+map 0xA4 to U+00A4
+map 0xA5 to U+0128
+map 0xA6 to U+013B
+map 0xA7-0xA8 to U+00A7
+map 0xA9 to U+0160
+map 0xAA to U+0112
+map 0xAB to U+0122
+map 0xAC to U+0166
+map 0xAD to U+00AD
+map 0xAE to U+017D
+map 0xAF-0xB0 to U+00AF
+map 0xB1 to U+0105
+map 0xB2 to U+02DB
+map 0xB3 to U+0157
+map 0xB4 to U+00B4
+map 0xB5 to U+0129
+map 0xB6 to U+013C
+map 0xB7 to U+02C7
+map 0xB8 to U+00B8
+map 0xB9 to U+0161
+map 0xBA to U+0113
+map 0xBB to U+0123
+map 0xBC to U+0167
+map 0xBD to U+014A
+map 0xBE to U+017E
+map 0xBF to U+014B
+map 0xC0 to U+0100
+map 0xC1-0xC6 to U+00C1
+map 0xC7 to U+012E
+map 0xC8 to U+010C
+map 0xC9 to U+00C9
+map 0xCA to U+0118
+map 0xCB to U+00CB
+map 0xCC to U+0116
+map 0xCD-0xCE to U+00CD
+map 0xCF to U+012A
+map 0xD0 to U+0110
+map 0xD1 to U+0145
+map 0xD2 to U+014C
+map 0xD3 to U+0136
+map 0xD4-0xD8 to U+00D4
+map 0xD9 to U+0172
+map 0xDA-0xDC to U+00DA
+map 0xDD to U+0168
+map 0xDE to U+016A
+map 0xDF to U+00DF
+map 0xE0 to U+0101
+map 0xE1-0xE6 to U+00E1
+map 0xE7 to U+012F
+map 0xE8 to U+010D
+map 0xE9 to U+00E9
+map 0xEA to U+0119
+map 0xEB to U+00EB
+map 0xEC to U+0117
+map 0xED-0xEE to U+00ED
+map 0xEF to U+012B
+map 0xF0 to U+0111
+map 0xF1 to U+0146
+map 0xF2 to U+014D
+map 0xF3 to U+0137
+map 0xF4-0xF8 to U+00F4
+map 0xF9 to U+0173
+map 0xFA-0xFC to U+00FA
+map 0xFD to U+0169
+map 0xFE to U+016B
+map 0xFF to U+02D9
diff --git a/maps/iso-8859-5 b/maps/iso-8859-5
new file mode 100644
index 0000000..27e22a1
--- /dev/null
+++ b/maps/iso-8859-5
@@ -0,0 +1,7 @@
+map 0x20-0x7E to U+0020
+map 0xA0 to U+00A0
+map 0xA1-0xAC to U+0401
+map 0xAD to U+00AD
+map 0xAE-EF to U+040E
+map 0xF0 to U+2116
+map 0xF1-0xFF to U+0451
diff --git a/maps/iso-8859-9 b/maps/iso-8859-9
new file mode 100644
index 0000000..f01fe92
--- /dev/null
+++ b/maps/iso-8859-9
@@ -0,0 +1,12 @@
+map 0x20-0x7E to U+0020
+map 0xA0-0xCF to U+00A0
+map 0xD0 to U+011E
+map 0xD1-0xDC to U+00D1
+map 0xDD to U+0130
+map 0xDE to U+015E
+map 0xDF-0xEF to U+00DF
+map 0xF0 to U+011F
+map 0xF1-0xFC to U+00F1
+map 0xFD to U+0131
+map 0xFE to U+015F
+map 0xFF to U+00FF
diff --git a/maps/iso-ir-182 b/maps/iso-ir-182
new file mode 100644
index 0000000..f49368a
--- /dev/null
+++ b/maps/iso-ir-182
@@ -0,0 +1,26 @@
+map 0x20-0x7E to U+0020
+map 0xA0-0xA7 to U+00A0
+map 0xA8 to U+1E80
+map 0xA9 to U+00A9
+map 0xAA to U+1E82
+map 0xAB to U+00AB
+map 0xAC to U+1EF2
+map 0xAD to U+00AD
+map 0xAF to U+0178
+map 0xB0-0xB7 to U+00B0
+map 0xB8 to U+1E81
+map 0xB9 to U+00B9
+map 0xBA to U+1E83
+map 0xBB to U+00BB
+map 0xBC to U+1EF3
+map 0xBD to U+1E84
+map 0xBE to U+1E85
+map 0xBF-0xCF to U+00BF
+map 0xD0 to U+0174
+map 0xD1-0xDD to U+00D1
+map 0xDE to U+0176
+map 0xDF-0xEF to U+00DF
+map 0xF0 to U+0175
+map 0xF1-0xFD to U+00F1
+map 0xFE to U+0177
+map 0xFF to U+00FF
diff --git a/maps/mazovia b/maps/mazovia
new file mode 100644
index 0000000..74bcb49
--- /dev/null
+++ b/maps/mazovia
@@ -0,0 +1,17 @@
+include ibm-437
+remap 0x86 to U+0105
+remap 0x8D to U+0107
+remap 0x8F to U+0104
+remap 0x90-0x91 to U+0118
+remap 0x92 to U+0142
+remap 0x95 to U+0106
+remap 0x98 to U+015A
+remap 0x9C to U+0141
+remap 0x9E to U+015B
+remap 0xA0 to U+0179
+remap 0xA1 to U+017B
+remap 0xA3 to U+00D3
+remap 0xA4 to U+0144
+remap 0xA5 to U+0143
+remap 0xA6 to U+017A
+remap 0xA7 to U+017C
diff --git a/maps/nl7dec b/maps/nl7dec
new file mode 100644
index 0000000..0013e04
--- /dev/null
+++ b/maps/nl7dec
@@ -0,0 +1,14 @@
+map 0x00-0x22 to U+0000
+map 0x23 to U+00A3
+map 0x24-0x3F to U+0024
+map 0x40 to U+00BE
+map 0x41-0x5A to U+0041
+map 0x5B to U+0133
+map 0x5C to U+00BD
+map 0x5D to U+007C
+map 0x5E-0x7A to U+005E
+map 0x7B to U+00A8
+map 0x7C to U+0192
+map 0x7D to U+00BC
+map 0x7E to U+00B4
+map 0x7F to U+007F
diff --git a/maps/s7dec b/maps/s7dec
new file mode 100644
index 0000000..1438ea8
--- /dev/null
+++ b/maps/s7dec
@@ -0,0 +1,2 @@
+include sf7dec
+remap 0x40 to U+00C9
diff --git a/maps/sf7dec b/maps/sf7dec
new file mode 100644
index 0000000..33d7922
--- /dev/null
+++ b/maps/sf7dec
@@ -0,0 +1,13 @@
+map 0x00-0x5A to U+0000
+map 0x5B to U+00C4
+map 0x5C to U+00D6
+map 0x5D to U+00C5
+map 0x5E to U+00DC
+map 0x5F to U+005F
+map 0x60 to U+00E9
+map 0x61-0x7A to U+0061
+map 0x7B to U+00E4
+map 0x7C to 00F6
+map 0x7D to 00E5
+map 0x7E to 00FC
+map 0x7F to U+007F
diff --git a/maps/us-ascii b/maps/us-ascii
new file mode 100644
index 0000000..e7111de
--- /dev/null
+++ b/maps/us-ascii
@@ -0,0 +1 @@
+map 0x00-0x7F to U+0000
diff --git a/mk/linux.mk b/mk/linux.mk
new file mode 100644
index 0000000..ad58f69
--- /dev/null
+++ b/mk/linux.mk
@@ -0,0 +1,6 @@
+LIBEXT = so
+LIBFLAGS = -shared -Wl,-soname,lib$(LIB_NAME).$(LIBEXT).$(LIB_MAJOR)
+LIBMAJOREXT = $(LIBEXT).$(LIB_MAJOR)
+LIBMINOREXT = $(LIBEXT).$(LIB_VERSION)
+
+FIX_INSTALL_NAME = :
diff --git a/mk/macos.mk b/mk/macos.mk
new file mode 100644
index 0000000..bffa452
--- /dev/null
+++ b/mk/macos.mk
@@ -0,0 +1,6 @@
+LIBEXT = dylib
+LIBFLAGS = -dynamiclib -Wl,-compatibility_version,$(LIB_MAJOR) -Wl,-current_version,$(LIB_VERSION)
+LIBMAJOREXT = $(LIB_MAJOR).$(LIBEXT)
+LIBMINOREXT = $(LIB_VERSION).$(LIBEXT)
+
+FIX_INSTALL_NAME = install_name_tool -id "$(PREFIX)/lib/libcharsets.$(LIBMAJOREXT)"
diff --git a/mk/windows.mk b/mk/windows.mk
new file mode 100644
index 0000000..ed5ec8d
--- /dev/null
+++ b/mk/windows.mk
@@ -0,0 +1,6 @@
+LIBEXT = dll
+LIBFLAGS = -shared
+LIBMAJOREXT = $(LIB_MAJOR).$(LIBEXT)
+LIBMINOREXT = $(LIB_VERSION).$(LIBEXT)
+
+FIX_INSTALL_NAME = :