#!/bin/bash

# Feel free to send improvements to Anton Zinoviev <anton@lml.bas.bg>,
# <zinoviev@fmi.uni-sofia.bg>

# This software may be used, modified, copied, distributed, and sold,
# in both source and binary form.  This why under no circumstances is
# the author responsible for the proper functioning of this software,
# nor does the author assume any responsibility for damages incurred
# with its use. USE AT YOUR OWN RISK !

function rk1048() {
cat <<"EOF"
0 0000
1 0001
2 0002
3 0003
4 0004
5 0005
6 0006
7 0007
8 0008
9 0009
10 000A
11 000B
12 000C
13 000D
14 000E
15 000F
16 0010
17 0011
18 0012
19 0013
20 0014
21 0015
22 0016
23 0017
24 0018
25 0019
26 001A
27 001B
28 001C
29 001D
30 001E
31 001F
32 0020
33 0021
34 0022
35 0023
36 0024
37 0025
38 0026
39 0027
40 0028
41 0029
42 002A
43 002B
44 002C
45 002D
46 002E
47 002F
48 0030
49 0031
50 0032
51 0033
52 0034
53 0035
54 0036
55 0037
56 0038
57 0039
58 003A
59 003B
60 003C
61 003D
62 003E
63 003F
64 0040
65 0041
66 0042
67 0043
68 0044
69 0045
70 0046
71 0047
72 0048
73 0049
74 004A
75 004B
76 004C
77 004D
78 004E
79 004F
80 0050
81 0051
82 0052
83 0053
84 0054
85 0055
86 0056
87 0057
88 0058
89 0059
90 005A
91 005B
92 005C
93 005D
94 005E
95 005F
96 0060
97 0061
98 0062
99 0063
100 0064
101 0065
102 0066
103 0067
104 0068
105 0069
106 006A
107 006B
108 006C
109 006D
110 006E
111 006F
112 0070
113 0071
114 0072
115 0073
116 0074
117 0075
118 0076
119 0077
120 0078
121 0079
122 007A
123 007B
124 007C
125 007D
126 007E
127 007F
128 0402
129 0403
130 201A
131 0453
132 201E
138 0409
140 040A
141 049A
142 04BA
143 040F
144 0452
154 0459
156 045A
157 049B
158 04BB
159 045F
161 04B0
162 04B1
163 04D8
165 04E8
168 0401
170 0492
175 04AE
178 0406
179 0456
180 04E9
184 0451
185 2116
186 0493
188 04D9
189 04A2
190 04A3
191 04AF
192 0410
193 0411
194 0412
195 0413
196 0414
197 0415
198 0416
199 0417
200 0418
201 0419
202 041A
203 041B
204 041C
205 041D
206 041E
207 041F
208 0420
209 0421
210 0422
211 0423
212 0424
213 0425
214 0426
215 0427
216 0428
217 0429
218 042A
219 042B
220 042C
221 042D
222 042E
223 042F
224 0430
225 0431
226 0432
227 0433
228 0434
229 0435
230 0436
231 0437
232 0438
233 0439
234 043A
235 043B
236 043C
237 043D
238 043E
239 043F
240 0440
241 0441
242 0442
243 0443
244 0444
245 0445
246 0446
247 0447
248 0448
249 0449
250 044A
251 044B
252 044C
253 044D
254 044E
255 044F
EOF
}

function pt154() {
cat <<"EOF"
0 0000
1 0001
2 0002
3 0003
4 0004
5 0005
6 0006
7 0007
8 0008
9 0009
10 000A
11 000B
12 000C
13 000D
14 000E
15 000F
16 0010
17 0011
18 0012
19 0013
20 0014
21 0015
22 0016
23 0017
24 0018
25 0019
26 001A
27 001B
28 001C
29 001D
30 001E
31 001F
32 0020
33 0021
34 0022
35 0023
36 0024
37 0025
38 0026
39 0027
40 0028
41 0029
42 002A
43 002B
44 002C
45 002D
46 002E
47 002F
48 0030
49 0031
50 0032
51 0033
52 0034
53 0035
54 0036
55 0037
56 0038
57 0039
58 003A
59 003B
60 003C
61 003D
62 003E
63 003F
64 0040
65 0041
66 0042
67 0043
68 0044
69 0045
70 0046
71 0047
72 0048
73 0049
74 004A
75 004B
76 004C
77 004D
78 004E
79 004F
80 0050
81 0051
82 0052
83 0053
84 0054
85 0055
86 0056
87 0057
88 0058
89 0059
90 005A
91 005B
92 005C
93 005D
94 005E
95 005F
96 0060
97 0061
98 0062
99 0063
100 0064
101 0065
102 0066
103 0067
104 0068
105 0069
106 006A
107 006B
108 006C
109 006D
110 006E
111 006F
112 0070
113 0071
114 0072
115 0073
116 0074
117 0075
118 0076
119 0077
120 0078
121 0079
122 007A
123 007B
124 007C
125 007D
126 007E
127 007F
128 0496
129 0492
130 04EE
131 0493
132 201E
133 2026
134 04B6
135 04AE
136 04B2
137 04AF
138 04A0
139 04E2
140 04A2
141 049A
142 04BA
143 04B8
144 0497
145 2018
146 2019
147 201C
148 201D
149 2022
150 2013
151 2014
152 04B3
153 04B7
154 04A1
155 04E3
156 04A3
157 049B
158 04BB
159 04B9
160 00A0
161 040E
162 045E
163 0408
164 04E8
165 0498
166 04B0
167 00A7
168 0401
169 00A9
170 04D8
171 00AB
172 00AC
173 04EF
174 00AE
175 049C
176 00B0
177 04B1
178 0406
179 0456
180 0499
181 04E9
182 00B6
183 00B7
184 0451
185 2116
186 04D9
187 00BB
188 0458
189 04AA
190 04AB
191 049D
192 0410
193 0411
194 0412
195 0413
196 0414
197 0415
198 0416
199 0417
200 0418
201 0419
202 041A
203 041B
204 041C
205 041D
206 041E
207 041F
208 0420
209 0421
210 0422
211 0423
212 0424
213 0425
214 0426
215 0427
216 0428
217 0429
218 042A
219 042B
220 042C
221 042D
222 042E
223 042F
224 0430
225 0431
226 0432
227 0433
228 0434
229 0435
230 0436
231 0437
232 0438
233 0439
234 043A
235 043B
236 043C
237 043D
238 043E
239 043F
240 0440
241 0441
242 0442
243 0443
244 0444
245 0445
246 0446
247 0447
248 0448
249 0449
250 044A
251 044B
252 044C
253 044D
254 044E
255 044F
EOF
}

function cp1251() {
cat <<"EOF"
0 0000
1 0001
2 0002
3 0003
4 0004
5 0005
6 0006
7 0007
8 0008
9 0009
10 000A
11 000B
12 000C
13 000D
14 000E
15 000F
16 0010
17 0011
18 0012
19 0013
20 0014
21 0015
22 0016
23 0017
24 0018
25 0019
26 001A
27 001B
28 001C
29 001D
30 001E
31 001F
32 0020
33 0021
34 0022
35 0023
36 0024
37 0025
38 0026
39 0027
40 0028
41 0029
42 002A
43 002B
44 002C
45 002D
46 002E
47 002F
48 0030
49 0031
50 0032
51 0033
52 0034
53 0035
54 0036
55 0037
56 0038
57 0039
58 003A
59 003B
60 003C
61 003D
62 003E
63 003F
64 0040
65 0041
66 0042
67 0043
68 0044
69 0045
70 0046
71 0047
72 0048
73 0049
74 004A
75 004B
76 004C
77 004D
78 004E
79 004F
80 0050
81 0051
82 0052
83 0053
84 0054
85 0055
86 0056
87 0057
88 0058
89 0059
90 005A
91 005B
92 005C
93 005D
94 005E
95 005F
96 0060
97 0061
98 0062
99 0063
100 0064
101 0065
102 0066
103 0067
104 0068
105 0069
106 006A
107 006B
108 006C
109 006D
110 006E
111 006F
112 0070
113 0071
114 0072
115 0073
116 0074
117 0075
118 0076
119 0077
120 0078
121 0079
122 007A
123 007B
124 007C
125 007D
126 007E
127 007F
128 0402
129 0403
130 201A
131 0453
132 201E
133 2026
134 2020
135 2021
137 2030
138 0409
139 2039
140 040A
141 040C
142 040B
143 040F
144 0452
145 2018
146 2019
147 201C
148 201D
149 2022
150 2013
151 2014
153 2122
154 0459
155 203A
156 045A
157 045C
158 045B
159 045F
160 00A0
161 040E
162 045E
163 0408
164 00A4
165 0490
166 00A6
167 00A7
168 0401
169 00A9
170 0404
171 00AB
172 00AC
173 00AD
174 00AE
175 0407
176 00B0
177 00B1
178 0406
179 0456
180 0491
181 00B5
182 00B6
183 00B7
184 0451
185 2116
186 0454
187 00BB
188 0458
189 0405
190 0455
191 0457
192 0410
193 0411
194 0412
195 0413
196 0414
197 0415
198 0416
199 0417
200 0418
201 0419
202 041A
203 041B
204 041C
205 041D
206 041E
207 041F
208 0420
209 0421
210 0422
211 0423
212 0424
213 0425
214 0426
215 0427
216 0428
217 0429
218 042A
219 042B
220 042C
221 042D
222 042E
223 042F
224 0430
225 0431
226 0432
227 0433
228 0434
229 0435
230 0436
231 0437
232 0438
233 0439
234 043A
235 043B
236 043C
237 043D
238 043E
239 043F
240 0440
241 0441
242 0442
243 0443
244 0444
245 0445
246 0446
247 0447
248 0448
249 0449
250 044A
251 044B
252 044C
253 044D
254 044E
255 044F
EOF
}

function ibm855() {
cat <<"EOF"
0 0000
1 0001
2 0002
3 0003
4 0004
5 0005
6 0006
7 0007
8 0008
9 0009
10 000A
11 000B
12 000C
13 000D
14 000E
15 000F
16 0010
17 0011
18 0012
19 0013
20 0014
21 0015
22 0016
23 0017
24 0018
25 0019
26 001A
27 001B
28 001C
29 001D
30 001E
31 001F
32 0020
33 0021
34 0022
35 0023
36 0024
37 0025
38 0026
39 0027
40 0028
41 0029
42 002A
43 002B
44 002C
45 002D
46 002E
47 002F
48 0030
49 0031
50 0032
51 0033
52 0034
53 0035
54 0036
55 0037
56 0038
57 0039
58 003A
59 003B
60 003C
61 003D
62 003E
63 003F
64 0040
65 0041
66 0042
67 0043
68 0044
69 0045
70 0046
71 0047
72 0048
73 0049
74 004A
75 004B
76 004C
77 004D
78 004E
79 004F
80 0050
81 0051
82 0052
83 0053
84 0054
85 0055
86 0056
87 0057
88 0058
89 0059
90 005A
91 005B
92 005C
93 005D
94 005E
95 005F
96 0060
97 0061
98 0062
99 0063
100 0064
101 0065
102 0066
103 0067
104 0068
105 0069
106 006A
107 006B
108 006C
109 006D
110 006E
111 006F
112 0070
113 0071
114 0072
115 0073
116 0074
117 0075
118 0076
119 0077
120 0078
121 0079
122 007A
123 007B
124 007C
125 007D
126 007E
127 007F
128 0452
129 0402
130 0453
131 0403
132 0451
133 0401
134 0454
135 0404
136 0455
137 0405
138 0456
139 0406
140 0457
141 0407
142 0458
143 0408
144 0459
145 0409
146 045A
147 040A
148 045B
149 040B
150 045C
151 040C
152 045E
153 040E
154 045F
155 040F
156 044E
157 042E
158 044A
159 042A
160 0430
161 0410
162 0431
163 0411
164 0446
165 0426
166 0434
167 0414
168 0435
169 0415
170 0444
171 0424
172 0433
173 0413
174 00AB
175 00BB
176 2591
177 2592
178 2593
179 2502
180 2524
181 0445
182 0425
183 0438
184 0418
185 2563
186 2551
187 2557
188 255D
189 0439
190 0419
191 2510
192 2514
193 2534
194 252C
195 251C
196 2500
197 253C
198 043A
199 041A
200 255A
201 2554
202 2569
203 2566
204 2560
205 2550
206 256C
207 00A4
208 043B
209 041B
210 043C
211 041C
212 043D
213 041D
214 043E
215 041E
216 043F
217 2518
218 250C
219 2588
220 2584
221 041F
222 044F
223 2580
224 042F
225 0440
226 0420
227 0441
228 0421
229 0442
230 0422
231 0443
232 0423
233 0436
234 0416
235 0432
236 0412
237 044C
238 042C
239 2116
240 00AD
241 044B
242 042B
243 0437
244 0417
245 0448
246 0428
247 044D
248 042D
249 0449
250 0429
251 0447
252 0427
253 00A7
254 25A0
255 00A0
EOF
}

function ibm866() {
cat <<"EOF"
0 0000
1 0001
2 0002
3 0003
4 0004
5 0005
6 0006
7 0007
8 0008
9 0009
10 000A
11 000B
12 000C
13 000D
14 000E
15 000F
16 0010
17 0011
18 0012
19 0013
20 0014
21 0015
22 0016
23 0017
24 0018
25 0019
26 001A
27 001B
28 001C
29 001D
30 001E
31 001F
32 0020
33 0021
34 0022
35 0023
36 0024
37 0025
38 0026
39 0027
40 0028
41 0029
42 002A
43 002B
44 002C
45 002D
46 002E
47 002F
48 0030
49 0031
50 0032
51 0033
52 0034
53 0035
54 0036
55 0037
56 0038
57 0039
58 003A
59 003B
60 003C
61 003D
62 003E
63 003F
64 0040
65 0041
66 0042
67 0043
68 0044
69 0045
70 0046
71 0047
72 0048
73 0049
74 004A
75 004B
76 004C
77 004D
78 004E
79 004F
80 0050
81 0051
82 0052
83 0053
84 0054
85 0055
86 0056
87 0057
88 0058
89 0059
90 005A
91 005B
92 005C
93 005D
94 005E
95 005F
96 0060
97 0061
98 0062
99 0063
100 0064
101 0065
102 0066
103 0067
104 0068
105 0069
106 006A
107 006B
108 006C
109 006D
110 006E
111 006F
112 0070
113 0071
114 0072
115 0073
116 0074
117 0075
118 0076
119 0077
120 0078
121 0079
122 007A
123 007B
124 007C
125 007D
126 007E
127 007F
128 0410
129 0411
130 0412
131 0413
132 0414
133 0415
134 0416
135 0417
136 0418
137 0419
138 041A
139 041B
140 041C
141 041D
142 041E
143 041F
144 0420
145 0421
146 0422
147 0423
148 0424
149 0425
150 0426
151 0427
152 0428
153 0429
154 042A
155 042B
156 042C
157 042D
158 042E
159 042F
160 0430
161 0431
162 0432
163 0433
164 0434
165 0435
166 0436
167 0437
168 0438
169 0439
170 043A
171 043B
172 043C
173 043D
174 043E
175 043F
176 2591
177 2592
178 2593
179 2502
180 2524
181 2561
182 2562
183 2556
184 2555
185 2563
186 2551
187 2557
188 255D
189 255C
190 255B
191 2510
192 2514
193 2534
194 252C
195 251C
196 2500
197 253C
198 255E
199 255F
200 255A
201 2554
202 2569
203 2566
204 2560
205 2550
206 256C
207 2567
208 2568
209 2564
210 2565
211 2559
212 2558
213 2552
214 2553
215 256B
216 256A
217 2518
218 250C
219 2588
220 2584
221 258C
222 2590
223 2580
224 0440
225 0441
226 0442
227 0443
228 0444
229 0445
230 0446
231 0447
232 0448
233 0449
234 044A
235 044B
236 044C
237 044D
238 044E
239 044F
240 0401
241 0451
242 0404
243 0454
244 0407
245 0457
246 040E
247 045E
248 00B0
249 2219
250 00B7
251 221A
252 2116
253 00A4
254 25A0
255 00A0
EOF
}

function iso-8859-5() {
cat <<"EOF"
0 0000
1 0001
2 0002
3 0003
4 0004
5 0005
6 0006
7 0007
8 0008
9 0009
10 000A
11 000B
12 000C
13 000D
14 000E
15 000F
16 0010
17 0011
18 0012
19 0013
20 0014
21 0015
22 0016
23 0017
24 0018
25 0019
26 001A
27 001B
28 001C
29 001D
30 001E
31 001F
32 0020
33 0021
34 0022
35 0023
36 0024
37 0025
38 0026
39 0027
40 0028
41 0029
42 002A
43 002B
44 002C
45 002D
46 002E
47 002F
48 0030
49 0031
50 0032
51 0033
52 0034
53 0035
54 0036
55 0037
56 0038
57 0039
58 003A
59 003B
60 003C
61 003D
62 003E
63 003F
64 0040
65 0041
66 0042
67 0043
68 0044
69 0045
70 0046
71 0047
72 0048
73 0049
74 004A
75 004B
76 004C
77 004D
78 004E
79 004F
80 0050
81 0051
82 0052
83 0053
84 0054
85 0055
86 0056
87 0057
88 0058
89 0059
90 005A
91 005B
92 005C
93 005D
94 005E
95 005F
96 0060
97 0061
98 0062
99 0063
100 0064
101 0065
102 0066
103 0067
104 0068
105 0069
106 006A
107 006B
108 006C
109 006D
110 006E
111 006F
112 0070
113 0071
114 0072
115 0073
116 0074
117 0075
118 0076
119 0077
120 0078
121 0079
122 007A
123 007B
124 007C
125 007D
126 007E
160 00A0
161 0401
162 0402
163 0403
164 0404
165 0405
166 0406
167 0407
168 0408
169 0409
170 040A
171 040B
172 040C
173 00AD
174 040E
175 040F
176 0410
177 0411
178 0412
179 0413
180 0414
181 0415
182 0416
183 0417
184 0418
185 0419
186 041A
187 041B
188 041C
189 041D
190 041E
191 041F
192 0420
193 0421
194 0422
195 0423
196 0424
197 0425
198 0426
199 0427
200 0428
201 0429
202 042A
203 042B
204 042C
205 042D
206 042E
207 042F
208 0430
209 0431
210 0432
211 0433
212 0434
213 0435
214 0436
215 0437
216 0438
217 0439
218 043A
219 043B
220 043C
221 043D
222 043E
223 043F
224 0440
225 0441
226 0442
227 0443
228 0444
229 0445
230 0446
231 0447
232 0448
233 0449
234 044A
235 044B
236 044C
237 044D
238 044E
239 044F
240 2116
241 0451
242 0452
243 0453
244 0454
245 0455
246 0456
247 0457
248 0458
249 0459
250 045A
251 045B
252 045C
253 00A7
254 045E
255 045F
EOF
}

function koi8-r() {
cat <<"EOF"
0 0000
1 0001
2 0002
3 0003
4 0004
5 0005
6 0006
7 0007
8 0008
9 0009
10 000A
11 000B
12 000C
13 000D
14 000E
15 000F
16 0010
17 0011
18 0012
19 0013
20 0014
21 0015
22 0016
23 0017
24 0018
25 0019
26 001A
27 001B
28 001C
29 001D
30 001E
31 001F
32 0020
33 0021
34 0022
35 0023
36 0024
37 0025
38 0026
39 0027
40 0028
41 0029
42 002A
43 002B
44 002C
45 002D
46 002E
47 002F
48 0030
49 0031
50 0032
51 0033
52 0034
53 0035
54 0036
55 0037
56 0038
57 0039
58 003A
59 003B
60 003C
61 003D
62 003E
63 003F
64 0040
65 0041
66 0042
67 0043
68 0044
69 0045
70 0046
71 0047
72 0048
73 0049
74 004A
75 004B
76 004C
77 004D
78 004E
79 004F
80 0050
81 0051
82 0052
83 0053
84 0054
85 0055
86 0056
87 0057
88 0058
89 0059
90 005A
91 005B
92 005C
93 005D
94 005E
95 005F
96 0060
97 0061
98 0062
99 0063
100 0064
101 0065
102 0066
103 0067
104 0068
105 0069
106 006A
107 006B
108 006C
109 006D
110 006E
111 006F
112 0070
113 0071
114 0072
115 0073
116 0074
117 0075
118 0076
119 0077
120 0078
121 0079
122 007A
123 007B
124 007C
125 007D
126 007E
127 007F
128 2500
129 2502
130 250C
131 2510
132 2514
133 2518
134 251C
135 2524
136 252C
137 2534
138 253C
139 2580
140 2584
141 2588
142 258C
143 2590
144 2591
145 2592
146 2593
147 2320
148 25A0
149 2219
150 221A
151 2248
152 2264
153 2265
154 00A0
155 2321
156 00B0
157 00B2
158 00B7
159 00F7
160 2550
161 2551
162 2552
163 0451
164 2553
165 2554
166 2555
167 2556
168 2557
169 2558
170 2559
171 255A
172 255B
173 255C
174 255D
175 255E
176 255F
177 2560
178 2561
179 0401
180 2562
181 2563
182 2564
183 2565
184 2566
185 2567
186 2568
187 2569
188 256A
189 256B
190 256C
191 00A9
192 044E
193 0430
194 0431
195 0446
196 0434
197 0435
198 0444
199 0433
200 0445
201 0438
202 0439
203 043A
204 043B
205 043C
206 043D
207 043E
208 043F
209 044F
210 0440
211 0441
212 0442
213 0443
214 0436
215 0432
216 044C
217 044B
218 0437
219 0448
220 044D
221 0449
222 0447
223 044A
224 042E
225 0410
226 0411
227 0426
228 0414
229 0415
230 0424
231 0413
232 0425
233 0418
234 0419
235 041A
236 041B
237 041C
238 041D
239 041E
240 041F
241 042F
242 0420
243 0421
244 0422
245 0423
246 0416
247 0412
248 042C
249 042B
250 0417
251 0428
252 042D
253 0429
254 0427
255 042A
EOF
}

function koi8-u() {
cat <<"EOF"
32 0020
33 0021
34 0022
35 0023
36 0024
37 0025
38 0026
39 0027
40 0028
41 0029
42 002A
43 002B
44 002C
45 002D
46 002E
47 002F
48 0030
49 0031
50 0032
51 0033
52 0034
53 0035
54 0036
55 0037
56 0038
57 0039
58 003A
59 003B
60 003C
61 003D
62 003E
63 003F
64 0040
65 0041
66 0042
67 0043
68 0044
69 0045
70 0046
71 0047
72 0048
73 0049
74 004A
75 004B
76 004C
77 004D
78 004E
79 004F
80 0050
81 0051
82 0052
83 0053
84 0054
85 0055
86 0056
87 0057
88 0058
89 0059
90 005A
91 005B
92 005C
93 005D
94 005E
95 005F
96 0060
97 0061
98 0062
99 0063
100 0064
101 0065
102 0066
103 0067
104 0068
105 0069
106 006A
107 006B
108 006C
109 006D
110 006E
111 006F
112 0070
113 0071
114 0072
115 0073
116 0074
117 0075
118 0076
119 0077
120 0078
121 0079
122 007A
123 007B
124 007C
125 007D
126 007E
128 2500
129 2502
130 250C
131 2510
132 2514
133 2518
134 251C
135 2524
136 252C
137 2534
138 253C
139 2580
140 2584
141 2588
142 258C
143 2590
144 2591
145 2592
146 2593
147 2320
148 25A0
149 2022
150 221A
151 2248
152 2264
153 2265
154 00A0
155 2321
156 00B0
157 00B2
158 00B7
159 00F7
160 2550
161 2551
162 2552
163 0451
164 0454
165 2554
166 0456
167 0457
168 2557
169 2558
170 2559
171 255A
172 255B
173 0491
174 255D
175 255E
176 255F
177 2560
178 2561
179 0401
180 0404
181 2563
182 0406
183 0407
184 2566
185 2567
186 2568
187 2569
188 256A
189 0490
190 256C
191 00A9
192 044E
193 0430
194 0431
195 0446
196 0434
197 0435
198 0444
199 0433
200 0445
201 0438
202 0439
203 043A
204 043B
205 043C
206 043D
207 043E
208 043F
209 044F
210 0440
211 0441
212 0442
213 0443
214 0436
215 0432
216 044C
217 044B
218 0437
219 0448
220 044D
221 0449
222 0447
223 044A
224 042E
225 0410
226 0411
227 0426
228 0414
229 0415
230 0424
231 0413
232 0425
233 0418
234 0419
235 041A
236 041B
237 041C
238 041D
239 041E
240 041F
241 042F
242 0420
243 0421
244 0422
245 0423
246 0416
247 0412
248 042C
249 042B
250 0417
251 0428
252 042D
253 0429
254 0427
255 042A
EOF
}

function mac-cyrillic() {
cat <<"EOF"
0 0000
1 0001
2 0002
3 0003
4 0004
5 0005
6 0006
7 0007
8 0008
9 0009
10 000A
11 000B
12 000C
13 000D
14 000E
15 000F
16 0010
17 0011
18 0012
19 0013
20 0014
21 0015
22 0016
23 0017
24 0018
25 0019
26 001A
27 001B
28 001C
29 001D
30 001E
31 001F
32 0020
33 0021
34 0022
35 0023
36 0024
37 0025
38 0026
39 0027
40 0028
41 0029
42 002A
43 002B
44 002C
45 002D
46 002E
47 002F
48 0030
49 0031
50 0032
51 0033
52 0034
53 0035
54 0036
55 0037
56 0038
57 0039
58 003A
59 003B
60 003C
61 003D
62 003E
63 003F
64 0040
65 0041
66 0042
67 0043
68 0044
69 0045
70 0046
71 0047
72 0048
73 0049
74 004A
75 004B
76 004C
77 004D
78 004E
79 004F
80 0050
81 0051
82 0052
83 0053
84 0054
85 0055
86 0056
87 0057
88 0058
89 0059
90 005A
91 005B
92 005C
93 005D
94 005E
95 005F
96 0060
97 0061
98 0062
99 0063
100 0064
101 0065
102 0066
103 0067
104 0068
105 0069
106 006A
107 006B
108 006C
109 006D
110 006E
111 006F
112 0070
113 0071
114 0072
115 0073
116 0074
117 0075
118 0076
119 0077
120 0078
121 0079
122 007A
123 007B
124 007C
125 007D
126 007E
128 0410
129 0411
130 0412
131 0413
132 0414
133 0415
134 0416
135 0417
136 0418
137 0419
138 041A
139 041B
140 041C
141 041D
142 041E
143 041F
144 0420
145 0421
146 0422
147 0423
148 0424
149 0425
150 0426
151 0427
152 0428
153 0429
154 042A
155 042B
156 042C
157 042D
158 042E
159 042F
160 2020
161 00B0
162 00A2
163 00A3
164 00A7
165 2022
166 00B6
167 0406
168 00AE
169 00A9
170 2122
171 0402
172 0452
173 2260
174 0403
175 0453
176 221E
177 00B1
178 2264
179 2265
180 0456
181 00B5
182 2202
183 0408
184 0404
185 0454
186 0407
187 0457
188 0409
189 0459
190 040A
191 045A
192 0458
193 0405
194 00AC
195 221A
196 0192
197 2248
198 2206
199 00AB
200 00BB
201 2026
202 00A0
203 040B
204 045B
205 040C
206 045C
207 0455
208 2013
209 2014
210 201C
211 201D
212 2018
213 2019
214 00F7
215 201E
216 040E
217 045E
218 040F
219 045F
220 2116
221 0401
222 0451
223 044F
224 0430
225 0431
226 0432
227 0433
228 0434
229 0435
230 0436
231 0437
232 0438
233 0439
234 043A
235 043B
236 043C
237 043D
238 043E
239 043F
240 0440
241 0441
242 0442
243 0443
244 0444
245 0445
246 0446
247 0447
248 0448
249 0449
250 044A
251 044B
252 044C
253 044D
254 044E
255 00A4
EOF
}

function mik() {
cat <<"EOF"
0 0000
1 0001
2 0002
3 0003
4 0004
5 0005
6 0006
7 0007
8 0008
9 0009
10 000A
11 000B
12 000C
13 000D
14 000E
15 000F
16 0010
17 0011
18 0012
19 0013
20 0014
21 0015
22 0016
23 0017
24 0018
25 0019
26 001A
27 001B
28 001C
29 001D
30 001E
31 001F
32 0020
33 0021
34 0022
35 0023
36 0024
37 0025
38 0026
39 0027
40 0028
41 0029
42 002A
43 002B
44 002C
45 002D
46 002E
47 002F
48 0030
49 0031
50 0032
51 0033
52 0034
53 0035
54 0036
55 0037
56 0038
57 0039
58 003A
59 003B
60 003C
61 003D
62 003E
63 003F
64 0040
65 0041
66 0042
67 0043
68 0044
69 0045
70 0046
71 0047
72 0048
73 0049
74 004A
75 004B
76 004C
77 004D
78 004E
79 004F
80 0050
81 0051
82 0052
83 0053
84 0054
85 0055
86 0056
87 0057
88 0058
89 0059
90 005A
91 005B
92 005C
93 005D
94 005E
95 005F
96 0060
97 0061
98 0062
99 0063
100 0064
101 0065
102 0066
103 0067
104 0068
105 0069
106 006A
107 006B
108 006C
109 006D
110 006E
111 006F
112 0070
113 0071
114 0072
115 0073
116 0074
117 0075
118 0076
119 0077
120 0078
121 0079
122 007A
123 007B
124 007C
125 007D
126 007E
127 007F
128 0410
129 0411
130 0412
131 0413
132 0414
133 0415
134 0416
135 0417
136 0418
137 0419
138 041A
139 041B
140 041C
141 041D
142 041E
143 041F
144 0420
145 0421
146 0422
147 0423
148 0424
149 0425
150 0426
151 0427
152 0428
153 0429
154 042A
155 042B
156 042C
157 042D
158 042E
159 042F
160 0430
161 0431
162 0432
163 0433
164 0434
165 0435
166 0436
167 0437
168 0438
169 0439
170 043A
171 043B
172 043C
173 043D
174 043E
175 043F
176 0440
177 0441
178 0442
179 0443
180 0444
181 0445
182 0446
183 0447
184 0448
185 0449
186 044A
187 044B
188 044C
189 044D
190 044E
191 044F
192 2514
193 2534
194 252C
195 251C
196 2500
197 253C
198 2563
199 2551
200 255A
201 2554
202 2569
203 2566
204 2560
205 2550
206 256C
207 2510
208 2591
209 2592
210 2593
211 2502
212 2524
213 2116
214 00A7
215 2557
216 255D
217 2518
218 250C
219 2588
220 2584
221 258C
222 2590
223 2580
224 03B1
225 00DF
226 0393
227 03C0
228 03A3
229 03C3
230 00B5
231 03C4
232 03A6
233 0398
234 03A9
235 03B4
236 221E
237 03C6
238 03B5
239 2229
240 2261
241 00B1
242 2265
243 2264
244 2320
245 2321
246 00F7
247 2248
248 00B0
249 2219
250 00B7
251 221A
252 207F
253 00B2
254 25A0
255 00A0
EOF
}

tocs="$1"

tocs=`echo ${tocs}|tr A-Z a-z`

case ${tocs} in
cp1251|ms-cyr|1251)
    encname="cp1251";
    tocs=cp1251;;
ibm855|dos-cyr|cp855|855)
    encname="cp855";
    tocs=ibm855;;
ibm866|dos-cyr-ru|cp866|866)
    encname="cp866";
    tocs=ibm866;;
iso-8859-5|cyrillic)
    encname="iso8859-5";
    tocs=iso-8859-5;;
koi8-r)
    encname="koi8-r";
    tocs=koi8-r;;
koi8-u)
    encname="koi8-u";
    tocs=koi8-u;;
mac-cyrillic|mac-cyr)
    encname="MacCyrillic";
    tocs=mac-cyrillic;;
mik|dos-cyr-bg)
    encname="bulgarian-mik";
    tocs=mik;;
pt154|asian-cyr)
    encname="pt154";
    tocs=pt154;;
rk1048)
    encname="rk1048";
    tocs=rk1048;;
utf-8|unicode)
    encname="UTF-8"
    tocs=unicode;;
*)
    cat 1>&2 <<EOF
Usage: makeenc ENCODING <unicodesyms

Known ENCODINGs are:
utf-8 (unicode)
cp1251 (ms-cyr,1251)
ibm855 (dos-cyr,cp855,855)
ibm866 (dos-cyr-ru,cp866,866)
iso-8859-5 (cyrillic)
koi8-r
koi8-u
mac-cyrillic (mac-cyr)
mik (dos-cyr-bg)
pt154 (asian-cyr)
rk1048
EOF
    exit 2;;
esac

tmpfile=/tmp/csrec.$$

[ -f ${tmpfile}.1 ] && exit 2
touch ${tmpfile}.1

trap "rm ${tmpfile}.1; echo Exiting. 1>&2; exit 2" HUP INT TERM

if [ $tocs = unicode ]; then
    echo "#define ENCODING $encname"
    awk '{printf "#define %s U+%s\n", $1, $2;}' | sort -k3
else
{
cat <<EOF
BEGIN {
EOF

${tocs} |
awk '{printf "ut[\"%s\"]=%s;\n", $2, $1;}'

cat <<EOF

# VERTICAL LINE -- BROKEN BAR
fb["007C",1] = "00A6";
# NO-BREAK SPACE -- SPACE
fb["00A0",1] = "0020";
# INVERTED EXCLAMATION MARK -- EXCLAMATION MARK
fb["00A1",1] = "0021";
# BROKEN BAR -- VERTICAL LINE
fb["00A6",1] = "007C";
# DIAERESIS -- QUOTATION MARK
fb["00A8",1] = "0022";
# SECTION SIGN -- NUMBER SIGN (?)
fb["00A7",1] = "0023";
# COPYRIGHT SIGN -- LATIN CAPITAL LETTER C
fb["00A9",1] = "0043";
# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -- SINGLE LEFT-POINTING ANGLE QUOTATION MARK, LESS-THAN SIGN
fb["00AB",1] = "2039";
fb["00AB",2] = "003C";
# NOT SIGN -- TILDE
fb["00AC",1] = "007E";
# SOFT HYPHEN -- HYPHEN-MINUS
fb["00AD",1] = "002D";
# REGISTERED SIGN -- LATIN CAPITAL LETTER R
fb["00AE",1] = "0052";
# SUPERSCRIPT TWO -- DIGIT TWO
fb["00B2",1] = "0032";
# SUPERSCRIPT THREE -- DIGIT THREE
fb["00B3",1] = "0033";
# ACUTE ACCENT -- APOSTROPHE
fb["00B4",1] = "0027";
# MIDDLE DOT -- BULLET, SQUARE ROOT
fb["00B7",1] = "2022";
fb["00B7",2] = "221A";
# SUPERSCRIPT ONE -- DIGIT ONE
fb["00B9",1] = "0031";
# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -- SINGLE RIGHT-POINTING ANGLE QUOTATION MARK, GREATER-THAN SIGN
fb["00BB",1] = "203A";
fb["00BB",2] = "003E";
# INVERTED QUESTION MARK -- QUESTION MARK
fb["00BF",1] = "003F";
# CYRILLIC CAPITAL LETTER IO -- IE
fb["0401",1] = "0415";
# CYRILLIC CAPITAL LETTER DJE -- DE
fb["0402",1] = "0414";
# CYRILLIC CAPITAL LETTER GJE -- GE
fb["0403",1] = "0413";
# CYRILLIC CAPITAL LETTER UKRAINIAN IE -- E
fb["0404",1] = "042D";
# CYRILLIC CAPITAL LETTER DZE -- LATIN CAPITAL LETTER S
fb["0405",1] = "0053";
# CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I -- LATIN CAPITAL LETTER I
fb["0406",1] = "0049";
# CYRILLIC CAPITAL LETTER YI -- LATIN CAPITAL LETTER I
fb["0407",1] = "0049";
# CYRILLIC CAPITAL LETTER JE -- LATIN CAPITAL LETTER J
fb["0408",1] = "004A";
# CYRILLIC CAPITAL LETTER LJE -- EL
fb["0409",1] = "041B";
# CYRILLIC CAPITAL LETTER NJE -- EN
fb["040A",1] = "041D";
# CYRILLIC CAPITAL LETTER TSHE -- TE
fb["040B",1] = "0422";
# CYRILLIC CAPITAL LETTER KJE -- KA
fb["040C",1] = "041A";
# CYRILLIC CAPITAL LETTER SHORT U -- U
fb["040E",1] = "0423";
# CYRILLIC CAPITAL LETTER DZHE -- TSE
fb["040F",1] = "0426";
# CYRILLIC CAPITAL LETTER SHORT I -- I
fb["0419",1] = "0418";
# CYRILLIC CAPITAL LETTER SHCHA -- SHA
fb["0429",1] = "0428";
# CYRILLIC CAPITAL LETTER HARD SIGN -- SOFT SIGN, SMALL HARD SIGN, SMALL SOFT SIGN, QUOTATION MARK
fb["042A",1] = "042C";
fb["042A",2] = "044A";
fb["042A",3] = "044C";
fb["042A",4] = "0022";
# CYRILLIC CAPITAL LETTER YERU -- SOFT SIGN, HARD SIGN, SMALL SOFT SIGN, SMALL HARD SIGN, I
fb["042B",1] = "042C";
fb["042B",2] = "042A";
fb["042B",3] = "044C";
fb["042B",4] = "044A";
fb["042B",5] = "0418";
# CYRILLIC CAPITAL LETTER SOFT SIGN -- SMALL SOFT SIGN, JE
fb["042C",1] = "044C";
fb["042C",2] = "0408";
# CYRILLIC CAPITAL LETTER E -- UKRAINIAN IE, IE
fb["042D",1] = "0404";
fb["042D",2] = "0415";
# CYRILLIC CAPITAL LETTER YU -- U
fb["042E",1] = "0423";
# CYRILLIC CAPITAL LETTER YA -- A
fb["042F",1] = "0410";
# CYRILLIC SMALL LETTER SHORT I -- I
fb["0439",1] = "0438";
# CYRILLIC SMALL LETTER SHCHA -- SHA
fb["0449",1] = "0448";
# CYRILLIC SMALL LETTER HARD SIGN -- SOFT SIGN, QUOTATION MARK
fb["044A",1] = "044C";
fb["044A",2] = "0022";
# CYRILLIC SMALL LETTER YERU -- SOFT SIGN, HARD SIGN, I
fb["044B",1] = "044C";
fb["044B",2] = "044A";
fb["044B",3] = "0438";
# CYRILLIC SMALL LETTER SOFT SIGN -- JE
fb["044C",1] = "0458";
# CYRILLIC SMALL LETTER E -- UKRAINIAN IE, IE
fb["044D",1] = "0454";
fb["044D",2] = "0435";
# CYRILLIC SMALL LETTER YU -- U
fb["044E",1] = "0443";
# CYRILLIC SMALL LETTER YA -- A
fb["044F",1] = "0430";
# CYRILLIC SMALL LETTER IO -- IE
fb["0451",1] = "0435";
# CYRILLIC SMALL LETTER DJE -- DE
fb["0452",1] = "0434";
# CYRILLIC SMALL LETTER GJE -- GE
fb["0453",1] = "0433";
# CYRILLIC SMALL LETTER UKRAINIAN IE -- E
fb["0454",1] = "044D";
# CYRILLIC SMALL LETTER DZE -- LATIN SMALL LETTER S
fb["0455",1] = "0073";
# CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -- LATIN SMALL LETTER I
fb["0456",1] = "0069";
# CYRILLIC SMALL LETTER YI -- LATIN SMALL LETTER I
fb["0457",1] = "0069";
# CYRILLIC SMALL LETTER JE -- LATIN SMALL LETTER J
fb["0458",1] = "006A";
# CYRILLIC SMALL LETTER LJE -- EL
fb["0459",1] = "043B";
# CYRILLIC SMALL LETTER NJE -- EN
fb["045A",1] = "043D";
# CYRILLIC SMALL LETTER TSHE -- TE
fb["045B",1] = "0442";
# CYRILLIC SMALL LETTER KJE -- KA
fb["045C",1] = "043A";
# CYRILLIC SMALL LETTER SHORT U -- U
fb["045E",1] = "0443";
# CYRILLIC SMALL LETTER DZHE -- TSE
fb["045F",1] = "0446";
# CYRILLIC CAPITAL LETTER GHE WITH UPTURN -- GHE
fb["0490",1] = "0413";
# CYRILLIC SMALL LETTER GHE WITH UPTURN -- GHE
fb["0491",1] = "0433";
# CYRILLIC SMALL LETTER BARRED O -- O
fb["04E9",1] = "006F";
# CYRILLIC CAPITAL LETTER BARRED O -- O
fb["04E8",1] = "004f";
# CYRILLIC SMALL LETTER STRAIGHT U -- LATIN Y
fb["04AF",1] = "0079";
# CYRILLIC CAPITAL LETTER STRAIGHT U -- LATIN Y
fb["04AE",1] = "0059";
# TUGRIK SIGN - DOLLAR SIGN
fb["20AE",1] = "0024";
# YEN SIGN - CYRILLIC STRAIGHT U WITH STROKE, CYRILLIC STRAIGHT U, LATIN Y
fb["00A5",1] = "04B0";
fb["00A5",2] = "04AE";
fb["00A5",3] = "0059";
# EURO SIGN - UKRAINIAN IE, CYRILLIC REVERSED E, LATIN E
fb["20AC",1] = "0404";
fb["20AC",2] = "042D";
fb["20AC",3] = "0045";
# EN DASH -- HYPHEN-MINUS
fb["2013",1] = "002D";
# EM DASH -- HYPHEN-MINUS
fb["2014",1] = "002D";
# LEFT SINGLE QUOTATION MARK -- APOSTROPHE
fb["2018",1] = "0027";
# RIGHT SINGLE QUOTATION MARK -- APOSTROPHE
fb["2019",1] = "0027";
# SINGLE LOW-9 QUOTATION MARK -- LEFT SINGLE QUOTATION MARK, APOSTROPHE
fb["201A",1] = "2018";
fb["201A",2] = "0027";
# LEFT DOUBLE QUOTATION MARK -- QUOTATION MARK
fb["201C",2] = "0022";
# RIGHT DOUBLE QUOTATION MARK -- QUOTATION MARK
fb["201D",2] = "0022";
# DOUBLE LOW-9 QUOTATION MARK -- LEFT DOUBLE QUOTATION MARK, QUOTATION MARK
fb["201E",1] = "201C";
fb["201E",2] = "0022";
# BULLET -- MIDDLE DOT, SQUARE ROOT
fb["2022",1] = "00B7";
fb["2022",2] = "221A";
# SINGLE LEFT-POINTING ANGLE QUOTATION MARK -- LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, LESS-THAN SIGN
fb["2039",1] = "00AB";
fb["2039",2] = "003C";
# SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -- RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, GREATER-THAN SIGN
fb["203A",1] = "00BB";
fb["203A",2] = "003E";
# NUMERO SIGN -- LATIN CAPITAL LETTER N
fb["2116",1] = "004E";

  for(i=0;i<10;i++)
    d[i]=i;
  d["A"]=10;
  d["B"]=11;
  d["C"]=12;
  d["D"]=13;
  d["E"]=14;
  d["F"]=15;
  for(i=0;i<10;i++)
    h[i]=i;
  h[10]="A";
  h[11]="B";
  h[12]="C";
  h[13]="D";
  h[14]="E";
  h[15]="F";
  for(i=0;i<16;i++)
    for(j=0;j<16;j++)
      {
        h2d[h[i] h[j]]=16*i+j;
        d2h[16*i+j]=h[i] h[j];
      }
}

{
	t="";
	u=\$2;
	if(ut[u]!="")
	    t=ut[u];
	else 
	    {
		j=1;
		while(fb[u,j]!="" && t=="")
		    {
			if(ut[fb[u,j]]!="")
			    t=ut[fb[u,j]];
			j++;
		    }
	    }
	if (t=="")
	    t=ut["0020"];
	printf "#define %s 0x%s\n", \$1, d2h[t];
}
EOF
} >${tmpfile}.1

echo "#define ENCODING $encname"
awk -f ${tmpfile}.1 | sort -k3

rm ${tmpfile}.1

fi
