Retract #11212.
[p5sagit/p5-mst-13.2.git] / ext / I18N / Langinfo / Langinfo.xs
CommitLineData
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
22typedef double NV; /* 5.6 and later define NVTYPE, and typedef NV to it. */
23#endif
24static int
25constant_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
229static int
230constant_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
313static int
314constant_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
530static int
531constant_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
585static int
586constant_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
629static int
630constant (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
643use ExtUtils::Constant qw (constant_types C_constant XS_constant);
644
645my $types = {map {($_, 1)} qw(IV)};
646my @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
654print constant_types(); # macro defs
655foreach (C_constant ("I18N::Langinfo", 'constant', 'IV', $types, undef, 3, @names) ) {
656 print $_, "\n"; # C constant subs
657}
658print "#### XS Section:\n";
659print 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
732MODULE = I18N::Langinfo PACKAGE = I18N::Langinfo
733
734PROTOTYPES: ENABLE
735
736void
737constant(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
825SV*
826langinfo(code)
827 int code
828 CODE:
829 char *s = nl_langinfo(code);
830 RETVAL = newSVpvn(s, strlen(s));
831 OUTPUT:
832 RETVAL