Commit | Line | Data |
4bbcc6e8 |
1 | #include "EXTERN.h" |
2 | #include "perl.h" |
3 | #include "XSUB.h" |
4 | |
5 | #ifdef I_LANGINFO |
6 | # include <langinfo.h> |
7 | #endif |
8 | |
9 | #define PERL_constant_NOTFOUND 1 |
10 | #define PERL_constant_NOTDEF 2 |
11 | #define PERL_constant_ISIV 3 |
12 | #define PERL_constant_ISNO 4 |
13 | #define PERL_constant_ISNV 5 |
14 | #define PERL_constant_ISPV 6 |
15 | #define PERL_constant_ISPVN 7 |
16 | #define PERL_constant_ISSV 8 |
17 | #define PERL_constant_ISUNDEF 9 |
18 | #define PERL_constant_ISUV 10 |
19 | #define PERL_constant_ISYES 11 |
20 | |
21 | #ifndef NVTYPE |
22 | typedef double NV; /* 5.6 and later define NVTYPE, and typedef NV to it. */ |
23 | #endif |
24 | static int |
25 | constant_5 (pTHX_ const char *name, IV *iv_return) { |
26 | /* When generated this function returned values for the list of names given |
27 | here. However, subsequent manual editing may have added or removed some. |
28 | DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7 D_FMT MON_1 MON_2 MON_3 MON_4 |
29 | MON_5 MON_6 MON_7 MON_8 MON_9 NOSTR T_FMT */ |
30 | /* Offset 4 gives the best switch position. */ |
31 | switch (name[4]) { |
32 | case '1': |
33 | if (memEQ(name, "DAY_1", 5)) { |
34 | /* ^ */ |
35 | #ifdef DAY_1 |
36 | *iv_return = DAY_1; |
37 | return PERL_constant_ISIV; |
38 | #else |
39 | return PERL_constant_NOTDEF; |
40 | #endif |
41 | } |
42 | if (memEQ(name, "MON_1", 5)) { |
43 | /* ^ */ |
44 | #ifdef MON_1 |
45 | *iv_return = MON_1; |
46 | return PERL_constant_ISIV; |
47 | #else |
48 | return PERL_constant_NOTDEF; |
49 | #endif |
50 | } |
51 | break; |
52 | case '2': |
53 | if (memEQ(name, "DAY_2", 5)) { |
54 | /* ^ */ |
55 | #ifdef DAY_2 |
56 | *iv_return = DAY_2; |
57 | return PERL_constant_ISIV; |
58 | #else |
59 | return PERL_constant_NOTDEF; |
60 | #endif |
61 | } |
62 | if (memEQ(name, "MON_2", 5)) { |
63 | /* ^ */ |
64 | #ifdef MON_2 |
65 | *iv_return = MON_2; |
66 | return PERL_constant_ISIV; |
67 | #else |
68 | return PERL_constant_NOTDEF; |
69 | #endif |
70 | } |
71 | break; |
72 | case '3': |
73 | if (memEQ(name, "DAY_3", 5)) { |
74 | /* ^ */ |
75 | #ifdef DAY_3 |
76 | *iv_return = DAY_3; |
77 | return PERL_constant_ISIV; |
78 | #else |
79 | return PERL_constant_NOTDEF; |
80 | #endif |
81 | } |
82 | if (memEQ(name, "MON_3", 5)) { |
83 | /* ^ */ |
84 | #ifdef MON_3 |
85 | *iv_return = MON_3; |
86 | return PERL_constant_ISIV; |
87 | #else |
88 | return PERL_constant_NOTDEF; |
89 | #endif |
90 | } |
91 | break; |
92 | case '4': |
93 | if (memEQ(name, "DAY_4", 5)) { |
94 | /* ^ */ |
95 | #ifdef DAY_4 |
96 | *iv_return = DAY_4; |
97 | return PERL_constant_ISIV; |
98 | #else |
99 | return PERL_constant_NOTDEF; |
100 | #endif |
101 | } |
102 | if (memEQ(name, "MON_4", 5)) { |
103 | /* ^ */ |
104 | #ifdef MON_4 |
105 | *iv_return = MON_4; |
106 | return PERL_constant_ISIV; |
107 | #else |
108 | return PERL_constant_NOTDEF; |
109 | #endif |
110 | } |
111 | break; |
112 | case '5': |
113 | if (memEQ(name, "DAY_5", 5)) { |
114 | /* ^ */ |
115 | #ifdef DAY_5 |
116 | *iv_return = DAY_5; |
117 | return PERL_constant_ISIV; |
118 | #else |
119 | return PERL_constant_NOTDEF; |
120 | #endif |
121 | } |
122 | if (memEQ(name, "MON_5", 5)) { |
123 | /* ^ */ |
124 | #ifdef MON_5 |
125 | *iv_return = MON_5; |
126 | return PERL_constant_ISIV; |
127 | #else |
128 | return PERL_constant_NOTDEF; |
129 | #endif |
130 | } |
131 | break; |
132 | case '6': |
133 | if (memEQ(name, "DAY_6", 5)) { |
134 | /* ^ */ |
135 | #ifdef DAY_6 |
136 | *iv_return = DAY_6; |
137 | return PERL_constant_ISIV; |
138 | #else |
139 | return PERL_constant_NOTDEF; |
140 | #endif |
141 | } |
142 | if (memEQ(name, "MON_6", 5)) { |
143 | /* ^ */ |
144 | #ifdef MON_6 |
145 | *iv_return = MON_6; |
146 | return PERL_constant_ISIV; |
147 | #else |
148 | return PERL_constant_NOTDEF; |
149 | #endif |
150 | } |
151 | break; |
152 | case '7': |
153 | if (memEQ(name, "DAY_7", 5)) { |
154 | /* ^ */ |
155 | #ifdef DAY_7 |
156 | *iv_return = DAY_7; |
157 | return PERL_constant_ISIV; |
158 | #else |
159 | return PERL_constant_NOTDEF; |
160 | #endif |
161 | } |
162 | if (memEQ(name, "MON_7", 5)) { |
163 | /* ^ */ |
164 | #ifdef MON_7 |
165 | *iv_return = MON_7; |
166 | return PERL_constant_ISIV; |
167 | #else |
168 | return PERL_constant_NOTDEF; |
169 | #endif |
170 | } |
171 | break; |
172 | case '8': |
173 | if (memEQ(name, "MON_8", 5)) { |
174 | /* ^ */ |
175 | #ifdef MON_8 |
176 | *iv_return = MON_8; |
177 | return PERL_constant_ISIV; |
178 | #else |
179 | return PERL_constant_NOTDEF; |
180 | #endif |
181 | } |
182 | break; |
183 | case '9': |
184 | if (memEQ(name, "MON_9", 5)) { |
185 | /* ^ */ |
186 | #ifdef MON_9 |
187 | *iv_return = MON_9; |
188 | return PERL_constant_ISIV; |
189 | #else |
190 | return PERL_constant_NOTDEF; |
191 | #endif |
192 | } |
193 | break; |
194 | case 'R': |
195 | if (memEQ(name, "NOSTR", 5)) { |
196 | /* ^ */ |
197 | #ifdef NOSTR |
198 | *iv_return = NOSTR; |
199 | return PERL_constant_ISIV; |
200 | #else |
201 | return PERL_constant_NOTDEF; |
202 | #endif |
203 | } |
204 | break; |
205 | case 'T': |
206 | if (memEQ(name, "D_FMT", 5)) { |
207 | /* ^ */ |
208 | #ifdef D_FMT |
209 | *iv_return = D_FMT; |
210 | return PERL_constant_ISIV; |
211 | #else |
212 | return PERL_constant_NOTDEF; |
213 | #endif |
214 | } |
215 | if (memEQ(name, "T_FMT", 5)) { |
216 | /* ^ */ |
217 | #ifdef T_FMT |
218 | *iv_return = T_FMT; |
219 | return PERL_constant_ISIV; |
220 | #else |
221 | return PERL_constant_NOTDEF; |
222 | #endif |
223 | } |
224 | break; |
225 | } |
226 | return PERL_constant_NOTFOUND; |
227 | } |
228 | |
229 | static int |
230 | constant_6 (pTHX_ const char *name, IV *iv_return) { |
231 | /* When generated this function returned values for the list of names given |
232 | here. However, subsequent manual editing may have added or removed some. |
233 | AM_STR MON_10 MON_11 MON_12 NOEXPR PM_STR YESSTR */ |
234 | /* Offset 0 gives the best switch position. */ |
235 | switch (name[0]) { |
236 | case 'A': |
237 | if (memEQ(name, "AM_STR", 6)) { |
238 | /* ^ */ |
239 | #ifdef AM_STR |
240 | *iv_return = AM_STR; |
241 | return PERL_constant_ISIV; |
242 | #else |
243 | return PERL_constant_NOTDEF; |
244 | #endif |
245 | } |
246 | break; |
247 | case 'M': |
248 | if (memEQ(name, "MON_10", 6)) { |
249 | /* ^ */ |
250 | #ifdef MON_10 |
251 | *iv_return = MON_10; |
252 | return PERL_constant_ISIV; |
253 | #else |
254 | return PERL_constant_NOTDEF; |
255 | #endif |
256 | } |
257 | if (memEQ(name, "MON_11", 6)) { |
258 | /* ^ */ |
259 | #ifdef MON_11 |
260 | *iv_return = MON_11; |
261 | return PERL_constant_ISIV; |
262 | #else |
263 | return PERL_constant_NOTDEF; |
264 | #endif |
265 | } |
266 | if (memEQ(name, "MON_12", 6)) { |
267 | /* ^ */ |
268 | #ifdef MON_12 |
269 | *iv_return = MON_12; |
270 | return PERL_constant_ISIV; |
271 | #else |
272 | return PERL_constant_NOTDEF; |
273 | #endif |
274 | } |
275 | break; |
276 | case 'N': |
277 | if (memEQ(name, "NOEXPR", 6)) { |
278 | /* ^ */ |
279 | #ifdef NOEXPR |
280 | *iv_return = NOEXPR; |
281 | return PERL_constant_ISIV; |
282 | #else |
283 | return PERL_constant_NOTDEF; |
284 | #endif |
285 | } |
286 | break; |
287 | case 'P': |
288 | if (memEQ(name, "PM_STR", 6)) { |
289 | /* ^ */ |
290 | #ifdef PM_STR |
291 | *iv_return = PM_STR; |
292 | return PERL_constant_ISIV; |
293 | #else |
294 | return PERL_constant_NOTDEF; |
295 | #endif |
296 | } |
297 | break; |
298 | case 'Y': |
299 | if (memEQ(name, "YESSTR", 6)) { |
300 | /* ^ */ |
301 | #ifdef YESSTR |
302 | *iv_return = YESSTR; |
303 | return PERL_constant_ISIV; |
304 | #else |
305 | return PERL_constant_NOTDEF; |
306 | #endif |
307 | } |
308 | break; |
309 | } |
310 | return PERL_constant_NOTFOUND; |
311 | } |
312 | |
313 | static int |
314 | constant_7 (pTHX_ const char *name, IV *iv_return) { |
315 | /* When generated this function returned values for the list of names given |
316 | here. However, subsequent manual editing may have added or removed some. |
317 | ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5 ABDAY_6 ABDAY_7 ABMON_1 ABMON_2 |
318 | ABMON_3 ABMON_4 ABMON_5 ABMON_6 ABMON_7 ABMON_8 ABMON_9 CODESET D_T_FMT |
319 | THOUSEP YESEXPR */ |
320 | /* Offset 6 gives the best switch position. */ |
321 | switch (name[6]) { |
322 | case '1': |
323 | if (memEQ(name, "ABDAY_1", 7)) { |
324 | /* ^ */ |
325 | #ifdef ABDAY_1 |
326 | *iv_return = ABDAY_1; |
327 | return PERL_constant_ISIV; |
328 | #else |
329 | return PERL_constant_NOTDEF; |
330 | #endif |
331 | } |
332 | if (memEQ(name, "ABMON_1", 7)) { |
333 | /* ^ */ |
334 | #ifdef ABMON_1 |
335 | *iv_return = ABMON_1; |
336 | return PERL_constant_ISIV; |
337 | #else |
338 | return PERL_constant_NOTDEF; |
339 | #endif |
340 | } |
341 | break; |
342 | case '2': |
343 | if (memEQ(name, "ABDAY_2", 7)) { |
344 | /* ^ */ |
345 | #ifdef ABDAY_2 |
346 | *iv_return = ABDAY_2; |
347 | return PERL_constant_ISIV; |
348 | #else |
349 | return PERL_constant_NOTDEF; |
350 | #endif |
351 | } |
352 | if (memEQ(name, "ABMON_2", 7)) { |
353 | /* ^ */ |
354 | #ifdef ABMON_2 |
355 | *iv_return = ABMON_2; |
356 | return PERL_constant_ISIV; |
357 | #else |
358 | return PERL_constant_NOTDEF; |
359 | #endif |
360 | } |
361 | break; |
362 | case '3': |
363 | if (memEQ(name, "ABDAY_3", 7)) { |
364 | /* ^ */ |
365 | #ifdef ABDAY_3 |
366 | *iv_return = ABDAY_3; |
367 | return PERL_constant_ISIV; |
368 | #else |
369 | return PERL_constant_NOTDEF; |
370 | #endif |
371 | } |
372 | if (memEQ(name, "ABMON_3", 7)) { |
373 | /* ^ */ |
374 | #ifdef ABMON_3 |
375 | *iv_return = ABMON_3; |
376 | return PERL_constant_ISIV; |
377 | #else |
378 | return PERL_constant_NOTDEF; |
379 | #endif |
380 | } |
381 | break; |
382 | case '4': |
383 | if (memEQ(name, "ABDAY_4", 7)) { |
384 | /* ^ */ |
385 | #ifdef ABDAY_4 |
386 | *iv_return = ABDAY_4; |
387 | return PERL_constant_ISIV; |
388 | #else |
389 | return PERL_constant_NOTDEF; |
390 | #endif |
391 | } |
392 | if (memEQ(name, "ABMON_4", 7)) { |
393 | /* ^ */ |
394 | #ifdef ABMON_4 |
395 | *iv_return = ABMON_4; |
396 | return PERL_constant_ISIV; |
397 | #else |
398 | return PERL_constant_NOTDEF; |
399 | #endif |
400 | } |
401 | break; |
402 | case '5': |
403 | if (memEQ(name, "ABDAY_5", 7)) { |
404 | /* ^ */ |
405 | #ifdef ABDAY_5 |
406 | *iv_return = ABDAY_5; |
407 | return PERL_constant_ISIV; |
408 | #else |
409 | return PERL_constant_NOTDEF; |
410 | #endif |
411 | } |
412 | if (memEQ(name, "ABMON_5", 7)) { |
413 | /* ^ */ |
414 | #ifdef ABMON_5 |
415 | *iv_return = ABMON_5; |
416 | return PERL_constant_ISIV; |
417 | #else |
418 | return PERL_constant_NOTDEF; |
419 | #endif |
420 | } |
421 | break; |
422 | case '6': |
423 | if (memEQ(name, "ABDAY_6", 7)) { |
424 | /* ^ */ |
425 | #ifdef ABDAY_6 |
426 | *iv_return = ABDAY_6; |
427 | return PERL_constant_ISIV; |
428 | #else |
429 | return PERL_constant_NOTDEF; |
430 | #endif |
431 | } |
432 | if (memEQ(name, "ABMON_6", 7)) { |
433 | /* ^ */ |
434 | #ifdef ABMON_6 |
435 | *iv_return = ABMON_6; |
436 | return PERL_constant_ISIV; |
437 | #else |
438 | return PERL_constant_NOTDEF; |
439 | #endif |
440 | } |
441 | break; |
442 | case '7': |
443 | if (memEQ(name, "ABDAY_7", 7)) { |
444 | /* ^ */ |
445 | #ifdef ABDAY_7 |
446 | *iv_return = ABDAY_7; |
447 | return PERL_constant_ISIV; |
448 | #else |
449 | return PERL_constant_NOTDEF; |
450 | #endif |
451 | } |
452 | if (memEQ(name, "ABMON_7", 7)) { |
453 | /* ^ */ |
454 | #ifdef ABMON_7 |
455 | *iv_return = ABMON_7; |
456 | return PERL_constant_ISIV; |
457 | #else |
458 | return PERL_constant_NOTDEF; |
459 | #endif |
460 | } |
461 | break; |
462 | case '8': |
463 | if (memEQ(name, "ABMON_8", 7)) { |
464 | /* ^ */ |
465 | #ifdef ABMON_8 |
466 | *iv_return = ABMON_8; |
467 | return PERL_constant_ISIV; |
468 | #else |
469 | return PERL_constant_NOTDEF; |
470 | #endif |
471 | } |
472 | break; |
473 | case '9': |
474 | if (memEQ(name, "ABMON_9", 7)) { |
475 | /* ^ */ |
476 | #ifdef ABMON_9 |
477 | *iv_return = ABMON_9; |
478 | return PERL_constant_ISIV; |
479 | #else |
480 | return PERL_constant_NOTDEF; |
481 | #endif |
482 | } |
483 | break; |
484 | case 'P': |
485 | if (memEQ(name, "THOUSEP", 7)) { |
486 | /* ^ */ |
487 | #ifdef THOUSEP |
488 | *iv_return = THOUSEP; |
489 | return PERL_constant_ISIV; |
490 | #else |
491 | return PERL_constant_NOTDEF; |
492 | #endif |
493 | } |
494 | break; |
495 | case 'R': |
496 | if (memEQ(name, "YESEXPR", 7)) { |
497 | /* ^ */ |
498 | #ifdef YESEXPR |
499 | *iv_return = YESEXPR; |
500 | return PERL_constant_ISIV; |
501 | #else |
502 | return PERL_constant_NOTDEF; |
503 | #endif |
504 | } |
505 | break; |
506 | case 'T': |
507 | if (memEQ(name, "CODESET", 7)) { |
508 | /* ^ */ |
509 | #ifdef CODESET |
510 | *iv_return = CODESET; |
511 | return PERL_constant_ISIV; |
512 | #else |
513 | return PERL_constant_NOTDEF; |
514 | #endif |
515 | } |
516 | if (memEQ(name, "D_T_FMT", 7)) { |
517 | /* ^ */ |
518 | #ifdef D_T_FMT |
519 | *iv_return = D_T_FMT; |
520 | return PERL_constant_ISIV; |
521 | #else |
522 | return PERL_constant_NOTDEF; |
523 | #endif |
524 | } |
525 | break; |
526 | } |
527 | return PERL_constant_NOTFOUND; |
528 | } |
529 | |
530 | static int |
531 | constant_8 (pTHX_ const char *name, IV *iv_return) { |
532 | /* When generated this function returned values for the list of names given |
533 | here. However, subsequent manual editing may have added or removed some. |
534 | ABMON_10 ABMON_11 ABMON_12 CRNCYSTR */ |
535 | /* Offset 7 gives the best switch position. */ |
536 | switch (name[7]) { |
537 | case '0': |
538 | if (memEQ(name, "ABMON_10", 8)) { |
539 | /* ^ */ |
540 | #ifdef ABMON_10 |
541 | *iv_return = ABMON_10; |
542 | return PERL_constant_ISIV; |
543 | #else |
544 | return PERL_constant_NOTDEF; |
545 | #endif |
546 | } |
547 | break; |
548 | case '1': |
549 | if (memEQ(name, "ABMON_11", 8)) { |
550 | /* ^ */ |
551 | #ifdef ABMON_11 |
552 | *iv_return = ABMON_11; |
553 | return PERL_constant_ISIV; |
554 | #else |
555 | return PERL_constant_NOTDEF; |
556 | #endif |
557 | } |
558 | break; |
559 | case '2': |
560 | if (memEQ(name, "ABMON_12", 8)) { |
561 | /* ^ */ |
562 | #ifdef ABMON_12 |
563 | *iv_return = ABMON_12; |
564 | return PERL_constant_ISIV; |
565 | #else |
566 | return PERL_constant_NOTDEF; |
567 | #endif |
568 | } |
569 | break; |
570 | case 'R': |
571 | if (memEQ(name, "CRNCYSTR", 8)) { |
572 | /* ^ */ |
573 | #ifdef CRNCYSTR |
574 | *iv_return = CRNCYSTR; |
575 | return PERL_constant_ISIV; |
576 | #else |
577 | return PERL_constant_NOTDEF; |
578 | #endif |
579 | } |
580 | break; |
581 | } |
582 | return PERL_constant_NOTFOUND; |
583 | } |
584 | |
585 | static int |
586 | constant_9 (pTHX_ const char *name, IV *iv_return) { |
587 | /* When generated this function returned values for the list of names given |
588 | here. However, subsequent manual editing may have added or removed some. |
589 | ERA_D_FMT ERA_T_FMT RADIXCHAR */ |
590 | /* Offset 4 gives the best switch position. */ |
591 | switch (name[4]) { |
592 | case 'D': |
593 | if (memEQ(name, "ERA_D_FMT", 9)) { |
594 | /* ^ */ |
595 | #ifdef ERA_D_FMT |
596 | *iv_return = ERA_D_FMT; |
597 | return PERL_constant_ISIV; |
598 | #else |
599 | return PERL_constant_NOTDEF; |
600 | #endif |
601 | } |
602 | break; |
603 | case 'T': |
604 | if (memEQ(name, "ERA_T_FMT", 9)) { |
605 | /* ^ */ |
606 | #ifdef ERA_T_FMT |
607 | *iv_return = ERA_T_FMT; |
608 | return PERL_constant_ISIV; |
609 | #else |
610 | return PERL_constant_NOTDEF; |
611 | #endif |
612 | } |
613 | break; |
614 | case 'X': |
615 | if (memEQ(name, "RADIXCHAR", 9)) { |
616 | /* ^ */ |
617 | #ifdef RADIXCHAR |
618 | *iv_return = RADIXCHAR; |
619 | return PERL_constant_ISIV; |
620 | #else |
621 | return PERL_constant_NOTDEF; |
622 | #endif |
623 | } |
624 | break; |
625 | } |
626 | return PERL_constant_NOTFOUND; |
627 | } |
628 | |
629 | static int |
630 | constant (pTHX_ const char *name, STRLEN len, IV *iv_return) { |
631 | /* Initially switch on the length of the name. */ |
632 | /* When generated this function returned values for the list of names given |
633 | in this section of perl code. Rather than manually editing these functions |
634 | to add or remove constants, which would result in this comment and section |
635 | of code becoming inaccurate, we recommend that you edit this section of |
636 | code, and use it to regenerate a new set of constant functions which you |
637 | then use to replace the originals. |
638 | |
639 | Regenerate these constant functions by feeding this entire source file to |
640 | perl -x |
641 | |
642 | #!../../../perl -w |
643 | use ExtUtils::Constant qw (constant_types C_constant XS_constant); |
644 | |
645 | my $types = {map {($_, 1)} qw(IV)}; |
646 | my @names = (qw(ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5 ABDAY_6 ABDAY_7 ABMON_1 |
647 | ABMON_10 ABMON_11 ABMON_12 ABMON_2 ABMON_3 ABMON_4 ABMON_5 |
648 | ABMON_6 ABMON_7 ABMON_8 ABMON_9 ALT_DIGITS AM_STR CODESET |
649 | CRNCYSTR DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7 D_FMT D_T_FMT |
650 | ERA ERA_D_FMT ERA_D_T_FMT ERA_T_FMT MON_1 MON_10 MON_11 MON_12 |
651 | MON_2 MON_3 MON_4 MON_5 MON_6 MON_7 MON_8 MON_9 NOEXPR NOSTR |
652 | PM_STR RADIXCHAR THOUSEP T_FMT T_FMT_AMPM YESEXPR YESSTR)); |
653 | |
654 | print constant_types(); # macro defs |
655 | foreach (C_constant ("I18N::Langinfo", 'constant', 'IV', $types, undef, 3, @names) ) { |
656 | print $_, "\n"; # C constant subs |
657 | } |
658 | print "#### XS Section:\n"; |
659 | print XS_constant ("I18N::Langinfo", $types); |
660 | __END__ |
661 | */ |
662 | |
663 | switch (len) { |
664 | case 3: |
665 | if (memEQ(name, "ERA", 3)) { |
666 | #ifdef ERA |
667 | *iv_return = ERA; |
668 | return PERL_constant_ISIV; |
669 | #else |
670 | return PERL_constant_NOTDEF; |
671 | #endif |
672 | } |
673 | break; |
674 | case 5: |
675 | return constant_5 (aTHX_ name, iv_return); |
676 | break; |
677 | case 6: |
678 | return constant_6 (aTHX_ name, iv_return); |
679 | break; |
680 | case 7: |
681 | return constant_7 (aTHX_ name, iv_return); |
682 | break; |
683 | case 8: |
684 | return constant_8 (aTHX_ name, iv_return); |
685 | break; |
686 | case 9: |
687 | return constant_9 (aTHX_ name, iv_return); |
688 | break; |
689 | case 10: |
690 | /* Names all of length 10. */ |
691 | /* ALT_DIGITS T_FMT_AMPM */ |
692 | /* Offset 7 gives the best switch position. */ |
693 | switch (name[7]) { |
694 | case 'I': |
695 | if (memEQ(name, "ALT_DIGITS", 10)) { |
696 | /* ^ */ |
697 | #ifdef ALT_DIGITS |
698 | *iv_return = ALT_DIGITS; |
699 | return PERL_constant_ISIV; |
700 | #else |
701 | return PERL_constant_NOTDEF; |
702 | #endif |
703 | } |
704 | break; |
705 | case 'M': |
706 | if (memEQ(name, "T_FMT_AMPM", 10)) { |
707 | /* ^ */ |
708 | #ifdef T_FMT_AMPM |
709 | *iv_return = T_FMT_AMPM; |
710 | return PERL_constant_ISIV; |
711 | #else |
712 | return PERL_constant_NOTDEF; |
713 | #endif |
714 | } |
715 | break; |
716 | } |
717 | break; |
718 | case 11: |
719 | if (memEQ(name, "ERA_D_T_FMT", 11)) { |
720 | #ifdef ERA_D_T_FMT |
721 | *iv_return = ERA_D_T_FMT; |
722 | return PERL_constant_ISIV; |
723 | #else |
724 | return PERL_constant_NOTDEF; |
725 | #endif |
726 | } |
727 | break; |
728 | } |
729 | return PERL_constant_NOTFOUND; |
730 | } |
731 | |
732 | MODULE = I18N::Langinfo PACKAGE = I18N::Langinfo |
733 | |
734 | PROTOTYPES: ENABLE |
735 | |
736 | void |
737 | constant(sv) |
738 | PREINIT: |
739 | #ifdef dXSTARG |
740 | dXSTARG; /* Faster if we have it. */ |
741 | #else |
742 | dTARGET; |
743 | #endif |
744 | STRLEN len; |
745 | int type; |
746 | IV iv; |
747 | /* NV nv; Uncomment this if you need to return NVs */ |
748 | /* const char *pv; Uncomment this if you need to return PVs */ |
749 | INPUT: |
750 | SV * sv; |
751 | const char * s = SvPV(sv, len); |
752 | PPCODE: |
753 | /* Change this to constant(aTHX_ s, len, &iv, &nv); |
754 | if you need to return both NVs and IVs */ |
755 | type = constant(aTHX_ s, len, &iv); |
756 | /* Return 1 or 2 items. First is error message, or undef if no error. |
757 | Second, if present, is found value */ |
758 | switch (type) { |
759 | case PERL_constant_NOTFOUND: |
760 | sv = sv_2mortal(newSVpvf("%s is not a valid I18N::Langinfo macro", s)); |
761 | PUSHs(sv); |
762 | break; |
763 | case PERL_constant_NOTDEF: |
764 | sv = sv_2mortal(newSVpvf( |
765 | "Your vendor has not defined I18N::Langinfo macro %s, used", s)); |
766 | PUSHs(sv); |
767 | break; |
768 | case PERL_constant_ISIV: |
769 | EXTEND(SP, 1); |
770 | PUSHs(&PL_sv_undef); |
771 | PUSHi(iv); |
772 | break; |
773 | /* Uncomment this if you need to return NOs |
774 | case PERL_constant_ISNO: |
775 | EXTEND(SP, 1); |
776 | PUSHs(&PL_sv_undef); |
777 | PUSHs(&PL_sv_no); |
778 | break; */ |
779 | /* Uncomment this if you need to return NVs |
780 | case PERL_constant_ISNV: |
781 | EXTEND(SP, 1); |
782 | PUSHs(&PL_sv_undef); |
783 | PUSHn(nv); |
784 | break; */ |
785 | /* Uncomment this if you need to return PVs |
786 | case PERL_constant_ISPV: |
787 | EXTEND(SP, 1); |
788 | PUSHs(&PL_sv_undef); |
789 | PUSHp(pv, strlen(pv)); |
790 | break; */ |
791 | /* Uncomment this if you need to return PVNs |
792 | case PERL_constant_ISPVN: |
793 | EXTEND(SP, 1); |
794 | PUSHs(&PL_sv_undef); |
795 | PUSHp(pv, iv); |
796 | break; */ |
797 | /* Uncomment this if you need to return SVs |
798 | case PERL_constant_ISSV: |
799 | EXTEND(SP, 1); |
800 | PUSHs(&PL_sv_undef); |
801 | PUSHs(sv); |
802 | break; */ |
803 | /* Uncomment this if you need to return UNDEFs |
804 | case PERL_constant_ISUNDEF: |
805 | break; */ |
806 | /* Uncomment this if you need to return UVs |
807 | case PERL_constant_ISUV: |
808 | EXTEND(SP, 1); |
809 | PUSHs(&PL_sv_undef); |
810 | PUSHu((UV)iv); |
811 | break; */ |
812 | /* Uncomment this if you need to return YESs |
813 | case PERL_constant_ISYES: |
814 | EXTEND(SP, 1); |
815 | PUSHs(&PL_sv_undef); |
816 | PUSHs(&PL_sv_yes); |
817 | break; */ |
818 | default: |
819 | sv = sv_2mortal(newSVpvf( |
820 | "Unexpected return type %d while processing I18N::Langinfo macro %s, used", |
821 | type, s)); |
822 | PUSHs(sv); |
823 | } |
824 | |
825 | SV* |
826 | langinfo(code) |
827 | int code |
828 | CODE: |
829 | char *s = nl_langinfo(code); |
830 | RETVAL = newSVpvn(s, strlen(s)); |
831 | OUTPUT: |
832 | RETVAL |