| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 | #define _GNU_SOURCE#include <locale.h>#include <stdio.h>#include <stdlib.h>#include <langinfo.h>#include <nl_types.h>#if !defined(__UCLIBC__) && 0#define DO_EXTRA#endifint main(int argc, char **argv){	char *l;	const unsigned char *x;/*  	const unsigned char *y; */	const unsigned char *p;	if (argc > 2) {		printf("invalid args\n");		return EXIT_FAILURE;	}	if (argc == 1) {		l = "";	} else {		l = *++argv;	}	if (!(x = setlocale(LC_ALL,l))) {		printf("couldn't set locale %s\n", l);		return EXIT_FAILURE;	}/*  	printf("\nsetlocale returned:\n  "); *//*  	do { *//*  		printf("\\x%02x", *x); *//*  	} while (*x++); *//*  	printf("\n"); */#ifndef __BCC__#define STR(X) #X#else#define STR(X) __STR(X)#endif#define __PASTE2(A,B) A.B#define DO_NL_I(X) \	printf( STR(X) " = %d\n", (int) nl_langinfo(X) );#define DO_NL_S(X) \	printf( STR(X) " = \"%s\"\n", nl_langinfo(X) );#define DO_NL_C(X) \	printf( STR(X) " = \"\\x%02x\"\n", *((unsigned char *) nl_langinfo(X)) );	printf("ctype\n");		DO_NL_S(CODESET);#ifdef DO_EXTRA		DO_NL_I(_NL_CTYPE_INDIGITS_MB_LEN);		DO_NL_S(_NL_CTYPE_INDIGITS0_MB);		DO_NL_S(_NL_CTYPE_INDIGITS1_MB);		DO_NL_S(_NL_CTYPE_INDIGITS2_MB);		DO_NL_S(_NL_CTYPE_INDIGITS3_MB);		DO_NL_S(_NL_CTYPE_INDIGITS4_MB);		DO_NL_S(_NL_CTYPE_INDIGITS5_MB);		DO_NL_S(_NL_CTYPE_INDIGITS6_MB);		DO_NL_S(_NL_CTYPE_INDIGITS7_MB);		DO_NL_S(_NL_CTYPE_INDIGITS8_MB);		DO_NL_S(_NL_CTYPE_INDIGITS9_MB);#endif		DO_NL_S(_NL_CTYPE_OUTDIGIT0_MB);		DO_NL_S(_NL_CTYPE_OUTDIGIT1_MB);		DO_NL_S(_NL_CTYPE_OUTDIGIT2_MB);		DO_NL_S(_NL_CTYPE_OUTDIGIT3_MB);		DO_NL_S(_NL_CTYPE_OUTDIGIT4_MB);		DO_NL_S(_NL_CTYPE_OUTDIGIT5_MB);		DO_NL_S(_NL_CTYPE_OUTDIGIT6_MB);		DO_NL_S(_NL_CTYPE_OUTDIGIT7_MB);		DO_NL_S(_NL_CTYPE_OUTDIGIT8_MB);		DO_NL_S(_NL_CTYPE_OUTDIGIT9_MB);	printf("numeric\n");		DO_NL_S(RADIXCHAR);		/* DECIMAL_POINT */		DO_NL_S(THOUSEP);		/* THOUSANDS_SEP *//*  		DO_NL_S(GROUPING); */	printf("GROUPING = \"");	for (p = (unsigned char *) nl_langinfo(GROUPING) ; *p ; p++) {		printf("\\x%02x", *p);	}	printf("\"\n\n");	printf("monetary\n");		DO_NL_S(INT_CURR_SYMBOL);		DO_NL_S(CURRENCY_SYMBOL);		DO_NL_S(MON_DECIMAL_POINT);		DO_NL_S(MON_THOUSANDS_SEP);/*  		DO_NL_S(MON_GROUPING); */	printf("MON_GROUPING = \"");	for (p = (unsigned char *) nl_langinfo(MON_GROUPING) ; *p ; p++) {		printf("\\x%02x", *p);	}	printf("\"\n\n");		DO_NL_S(POSITIVE_SIGN);		DO_NL_S(NEGATIVE_SIGN);		DO_NL_C(INT_FRAC_DIGITS);		DO_NL_C(FRAC_DIGITS);		DO_NL_C(P_CS_PRECEDES);		DO_NL_C(P_SEP_BY_SPACE);		DO_NL_C(N_CS_PRECEDES);		DO_NL_C(N_SEP_BY_SPACE);		DO_NL_C(P_SIGN_POSN);		DO_NL_C(N_SIGN_POSN);		DO_NL_C(INT_P_CS_PRECEDES);		DO_NL_C(INT_P_SEP_BY_SPACE);		DO_NL_C(INT_N_CS_PRECEDES);		DO_NL_C(INT_N_SEP_BY_SPACE);		DO_NL_C(INT_P_SIGN_POSN);		DO_NL_C(INT_N_SIGN_POSN);		DO_NL_S(CRNCYSTR);		/* CURRENCY_SYMBOL */	printf("time\n");		DO_NL_S(ABDAY_1);		DO_NL_S(ABDAY_2);		DO_NL_S(ABDAY_3);		DO_NL_S(ABDAY_4);		DO_NL_S(ABDAY_5);		DO_NL_S(ABDAY_6);		DO_NL_S(ABDAY_7);		DO_NL_S(DAY_1);		DO_NL_S(DAY_2);		DO_NL_S(DAY_3);		DO_NL_S(DAY_4);		DO_NL_S(DAY_5);		DO_NL_S(DAY_6);		DO_NL_S(DAY_7);		DO_NL_S(ABMON_1);		DO_NL_S(ABMON_2);		DO_NL_S(ABMON_3);		DO_NL_S(ABMON_4);		DO_NL_S(ABMON_5);		DO_NL_S(ABMON_6);		DO_NL_S(ABMON_7);		DO_NL_S(ABMON_8);		DO_NL_S(ABMON_9);		DO_NL_S(ABMON_10);		DO_NL_S(ABMON_11);		DO_NL_S(ABMON_12);		DO_NL_S(MON_1);		DO_NL_S(MON_2);		DO_NL_S(MON_3);		DO_NL_S(MON_4);		DO_NL_S(MON_5);		DO_NL_S(MON_6);		DO_NL_S(MON_7);		DO_NL_S(MON_8);		DO_NL_S(MON_9);		DO_NL_S(MON_10);		DO_NL_S(MON_11);		DO_NL_S(MON_12);		DO_NL_S(AM_STR);		DO_NL_S(PM_STR);		DO_NL_S(D_T_FMT);		DO_NL_S(D_FMT);		DO_NL_S(T_FMT);		DO_NL_S(T_FMT_AMPM);/* 		DO_NL_S(ERA); */		{		    const char *p = nl_langinfo(ERA);		    if (!p || !*p) {			printf("ERA = (none)\n");		    } else {			int i;			printf("ERA:\n");			for (i=0 ; i < 100 ; i++) {			    printf("  %3d: \"%s\"\n", i, p);			    while (*p) ++p;			    ++p;			    if (!*p) break;			}		    }		}		DO_NL_S(ERA_YEAR);		/* non SuSv3 */		DO_NL_S(ERA_D_FMT);/* 		DO_NL_S(ALT_DIGITS); */		{		    const char *p = nl_langinfo(ALT_DIGITS);		    if (!p || !*p) {			printf("ALT_DIGITS = (none)\n");		    } else {			int i;			printf("ALT_DIGITS:\n");			for (i=0 ; i < 100 ; i++) {			    printf("  %3d: \"%s\"\n", i, p);			    while (*p) ++p;			    ++p;			}		    }		}		DO_NL_S(ERA_D_T_FMT);		DO_NL_S(ERA_T_FMT);#ifdef DO_EXTRA		DO_NL_C(_NL_TIME_WEEK_NDAYS);		DO_NL_I(_NL_TIME_WEEK_1STDAY); /* grr... this won't work with 16bit ptrs */		DO_NL_C(_NL_TIME_WEEK_1STWEEK);		DO_NL_C(_NL_TIME_FIRST_WEEKDAY);		DO_NL_C(_NL_TIME_FIRST_WORKDAY);		DO_NL_C(_NL_TIME_CAL_DIRECTION);		DO_NL_S(_NL_TIME_TIMEZONE);		DO_NL_S(_DATE_FMT);#endif	printf("messages\n");		DO_NL_S(YESEXPR);		DO_NL_S(NOEXPR);		DO_NL_S(YESSTR);		DO_NL_S(NOSTR);#ifdef DO_EXTRA	printf("paper\n");		DO_NL_I(_NL_PAPER_HEIGHT);		DO_NL_I(_NL_PAPER_WIDTH);	printf("name\n");		DO_NL_S(_NL_NAME_NAME_FMT);		DO_NL_S(_NL_NAME_NAME_GEN);		DO_NL_S(_NL_NAME_NAME_MR);		DO_NL_S(_NL_NAME_NAME_MRS);		DO_NL_S(_NL_NAME_NAME_MISS);		DO_NL_S(_NL_NAME_NAME_MS);	printf("address\n");		DO_NL_S(_NL_ADDRESS_POSTAL_FMT);		DO_NL_S(_NL_ADDRESS_COUNTRY_NAME);		DO_NL_S(_NL_ADDRESS_COUNTRY_POST);		DO_NL_S(_NL_ADDRESS_COUNTRY_AB2);		DO_NL_S(_NL_ADDRESS_COUNTRY_AB3);		DO_NL_S(_NL_ADDRESS_COUNTRY_CAR);		DO_NL_I(_NL_ADDRESS_COUNTRY_NUM);		DO_NL_S(_NL_ADDRESS_COUNTRY_ISBN);		DO_NL_S(_NL_ADDRESS_LANG_NAME);		DO_NL_S(_NL_ADDRESS_LANG_AB);		DO_NL_S(_NL_ADDRESS_LANG_TERM);		DO_NL_S(_NL_ADDRESS_LANG_LIB);	printf("telephone\n");		DO_NL_S(_NL_TELEPHONE_TEL_INT_FMT);		DO_NL_S(_NL_TELEPHONE_TEL_DOM_FMT);		DO_NL_S(_NL_TELEPHONE_INT_SELECT);		DO_NL_S(_NL_TELEPHONE_INT_PREFIX);	printf("measurement\n");		DO_NL_C(_NL_MEASUREMENT_MEASUREMENT); /* 1 is metric, 2 is US */	printf("identification\n");		DO_NL_S(_NL_IDENTIFICATION_TITLE);		DO_NL_S(_NL_IDENTIFICATION_SOURCE);		DO_NL_S(_NL_IDENTIFICATION_ADDRESS);		DO_NL_S(_NL_IDENTIFICATION_CONTACT);		DO_NL_S(_NL_IDENTIFICATION_EMAIL);		DO_NL_S(_NL_IDENTIFICATION_TEL);		DO_NL_S(_NL_IDENTIFICATION_FAX);		DO_NL_S(_NL_IDENTIFICATION_LANGUAGE);		DO_NL_S(_NL_IDENTIFICATION_TERRITORY);		DO_NL_S(_NL_IDENTIFICATION_AUDIENCE);		DO_NL_S(_NL_IDENTIFICATION_APPLICATION);		DO_NL_S(_NL_IDENTIFICATION_ABBREVIATION);		DO_NL_S(_NL_IDENTIFICATION_REVISION);		DO_NL_S(_NL_IDENTIFICATION_DATE);		DO_NL_S(_NL_IDENTIFICATION_CATEGORY);#endif	return EXIT_SUCCESS;}
 |