Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libast/string/ccmapid.c
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1985-2012 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* David Korn <[email protected]> *
19
* Phong Vo <[email protected]> *
20
* *
21
***********************************************************************/
22
#pragma prototyped
23
24
/*
25
* Glenn Fowler
26
* AT&T Research
27
*
28
* 8 bit character code map name/id lookup support
29
*/
30
31
#include <ast.h>
32
#include <ccode.h>
33
#include <ctype.h>
34
35
static const Ccmap_t maps[] =
36
{
37
{
38
"ascii",
39
"a|ascii|?(iso)?(-)646|?(iso)?(-)8859|latin",
40
"8 bit ascii",
41
"ISO-8859-%s",
42
"1",
43
CC_ASCII,
44
},
45
46
{
47
"ebcdic",
48
"e|ebcdic?(-)?([1e])",
49
"X/Open ebcdic",
50
"EBCDIC",
51
0,
52
CC_EBCDIC_E,
53
},
54
55
{
56
"ebcdic-o",
57
"o|ebcdic?(-)[3o]|?(cp|ibm)1047|open?(-)edition",
58
"mvs OpenEdition ebcdic",
59
"EBCDIC-O",
60
0,
61
CC_EBCDIC_O,
62
},
63
64
{
65
"ebcdic-h",
66
"h|ebcdic?(-)h|?(cp|ibm)?(00)37|[oa]s?(/-)400",
67
"ibm OS/400 AS/400 ebcdic",
68
"EBCDIC-H",
69
0,
70
CC_EBCDIC_H,
71
},
72
73
{
74
"ebcdic-s",
75
"s|ebcdic?(-)s|siemens|posix-bc",
76
"siemens posix-bc ebcdic",
77
"EBCDIC-S",
78
0,
79
CC_EBCDIC_S,
80
},
81
82
{
83
"ebcdic-i",
84
"i|ebcdic?(-)[2i]|ibm",
85
"X/Open ibm ebcdic (not idempotent)",
86
"EBCDIC-I",
87
0,
88
CC_EBCDIC_I,
89
},
90
91
{
92
"ebcdic-m",
93
"m|ebcdic?(-)m|mvs",
94
"mvs ebcdic",
95
"EBCDIC-M",
96
0,
97
CC_EBCDIC_M,
98
},
99
100
{
101
"ebcdic-u",
102
"u|ebcdic?(-)(u|mf)|microfocus",
103
"microfocus cobol ebcdic",
104
"EBCDIC-U",
105
0,
106
CC_EBCDIC_U,
107
},
108
109
{
110
"native",
111
"n|native|local",
112
"native code set",
113
0,
114
0,
115
CC_NATIVE,
116
},
117
118
{ 0 },
119
};
120
121
/*
122
* ccode map list iterator
123
*/
124
125
Ccmap_t*
126
ccmaplist(Ccmap_t* mp)
127
{
128
return !mp ? (Ccmap_t*)maps : (++mp)->name ? mp : (Ccmap_t*)0;
129
}
130
131
/*
132
* return ccode map id given name
133
*/
134
135
int
136
ccmapid(const char* name)
137
{
138
register const Ccmap_t* mp;
139
register int c;
140
const Ccmap_t* bp;
141
int n;
142
ssize_t sub[2];
143
144
bp = 0;
145
n = 0;
146
for (mp = maps; mp->name; mp++)
147
if (strgrpmatch(name, mp->match, sub, elementsof(sub) / 2, STR_MAXIMAL|STR_LEFT|STR_ICASE))
148
{
149
if (!(c = name[sub[1]]))
150
return mp->ccode;
151
if (sub[1] > n && !isalpha(c))
152
{
153
n = sub[1];
154
bp = mp;
155
}
156
}
157
return bp ? bp->ccode : -1;
158
}
159
160
/*
161
* return ccode map name given id
162
*/
163
164
char*
165
ccmapname(register int id)
166
{
167
register const Ccmap_t* mp;
168
169
for (mp = maps; mp->name; mp++)
170
if (id == mp->ccode)
171
return (char*)mp->name;
172
return 0;
173
}
174
175