163 char *
cp, *cpesc, *cpnext, *cpend, *cpout;
164 char state, cset, newcset;
170 if (!stralloc_copys(&tmpdata,
""))
die_nomem();
171 if (!stralloc_ready(&tmpdata,n))
die_nomem();
173 if(!case_diffb(
charset,11,
"iso-2022-jp")) {
182 if (*
cp++ !=
ESC)
continue;
184 if (++
cp > cpend)
break;
185 if (*
cp ==
'J') *
cp =
'B';
187 }
else if (*
cp ==
'$') {
188 if (++
cp > cpend)
break;
189 if (*
cp ==
'@') *
cp =
'B';
197 if (*
cp++ !=
ESC)
continue;
200 if (++
cp > cpend)
break;
201 if (*
cp ==
'B') newreg = 87;
202 else if (*
cp ==
'A') newreg = 58;
203 else if (*
cp ==
'(') {
204 if (++
cp > cpend)
break;
205 if (*
cp ==
'C') newreg = 149;
206 else if (*
cp ==
'D') newreg = 159;
209 }
else if (*
cp ==
'(') {
210 if (++
cp > cpend)
break;
211 if (*
cp ==
'B') newreg = 6;
214 if (++
cp > cpend)
break;
215 while (*
cp ==
' ' || *
cp ==
'\t')
216 if (++
cp >= cpend)
break;
218 if (*(
cp+1) ==
'(' || *(
cp+1) ==
'$') {
219 if (!stralloc_catb(&tmpdata,cpnext,cpesc-cpnext))
die_nomem();
224 if (!stralloc_catb(&tmpdata,cpnext,cpesc-cpnext))
die_nomem();
230 if (!stralloc_catb(&tmpdata,cpnext,cpend - cpnext + 1))
die_nomem();
234 r = trimend(tmpdata.s,&tmpdata.len);
237 }
else if (!case_diffb(
charset,11,
"iso-2022-cn") ||
238 !case_diffb(
charset,11,
"iso-2022-kr")) {
248 while (++
cp <= cpend) {
251 if (!stralloc_catb(&tmpdata,cpnext,
cp-cpnext-1))
die_nomem();
255 if (++
cp > cpend)
break;
258 if (*
cp !=
ESC)
continue;
259 if (
cp + 3 > cpend)
break;
261 if (*
cp !=
'$')
continue;
262 if (++
cp > cpend)
break;
263 if (*
cp !=
')')
continue;
264 if (++
cp > cpend)
break;
266 if (++
cp > cpend)
break;
267 while (
cp <= cpend && (*
cp ==
' ' || *
cp ==
'\t')) ++
cp;
268 if (
cp + 3 > cpend)
break;
269 if ((*
cp ==
ESC && *(
cp+1) ==
'$' && *(
cp+2) ==
')')
270 || (newcset == cset)) {
273 if (!stralloc_catb(&tmpdata,cpnext,cpesc-cpnext))
die_nomem();
282 if (!stralloc_catb(&tmpdata,cpnext,cpend - cpnext + 1))
die_nomem();
286 r = trimend(tmpdata.s,&tmpdata.len);
298 n = (
unsigned int) (cpend-
cp+1);
308 if (!*
cp || *
cp ==
'\n') *cpout =
' ';
int unfold_hdr(char *indata, unsigned long n, stralloc *outdata, const char *charset, stralloc *prefix, int flagtrimsub)
const char * logmsg(const char *dir, unsigned long num, unsigned long listno, unsigned long subs, int done)