xref: /netbsd/lib/libc/locale/nl_langinfo.c (revision bf9ec67e)
1 /*	$NetBSD: nl_langinfo.c,v 1.8 2002/03/17 22:14:30 tshiozak Exp $	*/
2 
3 /*
4  * Written by J.T. Conklin <jtc@netbsd.org>.
5  * Public domain.
6  */
7 
8 #include <sys/cdefs.h>
9 #if defined(LIBC_SCCS) && !defined(lint)
10 __RCSID("$NetBSD: nl_langinfo.c,v 1.8 2002/03/17 22:14:30 tshiozak Exp $");
11 #endif /* LIBC_SCCS and not lint */
12 
13 #include <sys/localedef.h>
14 #include <locale.h>
15 #include <nl_types.h>
16 #include <langinfo.h>
17 #include "rune.h"
18 #include "runetype.h"
19 
20 char *
21 nl_langinfo(item)
22 	nl_item item;
23 {
24 	const char *s;
25 
26 	switch (item) {
27 	case D_T_FMT:
28 		s = _CurrentTimeLocale->d_t_fmt;
29 		break;
30 	case D_FMT:
31 		s = _CurrentTimeLocale->d_fmt;
32 		break;
33 	case T_FMT:
34 		s = _CurrentTimeLocale->t_fmt;
35 		break;
36 	case T_FMT_AMPM:
37 		s = _CurrentTimeLocale->t_fmt_ampm;
38 		break;
39 	case AM_STR:
40 	case PM_STR:
41 		s = _CurrentTimeLocale->am_pm[(size_t)(item - AM_STR)];
42 		break;
43 	case DAY_1:
44 	case DAY_2:
45 	case DAY_3:
46 	case DAY_4:
47 	case DAY_5:
48 	case DAY_6:
49 	case DAY_7:
50 		s = _CurrentTimeLocale->day[(size_t)(item - DAY_1)];
51 		break;
52 	case ABDAY_1:
53 	case ABDAY_2:
54 	case ABDAY_3:
55 	case ABDAY_4:
56 	case ABDAY_5:
57 	case ABDAY_6:
58 	case ABDAY_7:
59 		s = _CurrentTimeLocale->abday[(size_t)(item - ABDAY_1)];
60 		break;
61 	case MON_1:
62 	case MON_2:
63 	case MON_3:
64 	case MON_4:
65 	case MON_5:
66 	case MON_6:
67 	case MON_7:
68 	case MON_8:
69 	case MON_9:
70 	case MON_10:
71 	case MON_11:
72 	case MON_12:
73 		s = _CurrentTimeLocale->mon[(size_t)(item - MON_1)];
74 		break;
75 	case ABMON_1:
76 	case ABMON_2:
77 	case ABMON_3:
78 	case ABMON_4:
79 	case ABMON_5:
80 	case ABMON_6:
81 	case ABMON_7:
82 	case ABMON_8:
83 	case ABMON_9:
84 	case ABMON_10:
85 	case ABMON_11:
86 	case ABMON_12:
87 		s = _CurrentTimeLocale->abmon[(size_t)(item - ABMON_1)];
88 		break;
89 	case RADIXCHAR:
90 		s = _CurrentNumericLocale->decimal_point;
91 		break;
92 	case THOUSEP:
93 		s = _CurrentNumericLocale->thousands_sep;
94 		break;
95 	case YESSTR:
96 		s = _CurrentMessagesLocale->yesstr;
97 		break;
98 	case YESEXPR:
99 		s = _CurrentMessagesLocale->yesexpr;
100 		break;
101 	case NOSTR:
102 		s = _CurrentMessagesLocale->nostr;
103 		break;
104 	case NOEXPR:
105 		s = _CurrentMessagesLocale->noexpr;
106 		break;
107 	case CRNCYSTR:				/* XXX */
108 		s = "";
109 		break;
110 	case CODESET:
111 		s = _CurrentRuneLocale->rl_codeset;
112 		if (!s)
113 			s = "";
114 		break;
115 	default:
116 		s = "";
117 		break;
118 	}
119 
120 	/* The return value should be really const, but the interface says OW */
121 	/* LINTED const castaway. */
122 	return (char *) s;
123 }
124