gls.h 83 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856
  1. /*
  2. * Licensed Materials - Property of IBM and/or HCL
  3. *
  4. * IBM Informix Global Language Support
  5. * Copyright IBM Corporation 1996, 2017
  6. * (c) Copyright HCL Technologies Ltd. 2017. All Rights Reserved.
  7. *
  8. * Title: gls.h
  9. * Description: Header file for international support library
  10. */
  11. #ifndef GLS_INCLUDED
  12. #define GLS_INCLUDED
  13. /* For Win64, gl_intptr and gl_uintptr represent 8 byte quantities, be
  14. * it a pointer or simply an 8-byte integer. This is because long is
  15. * still 4 bytes on Win64
  16. */
  17. #ifdef _WIN64
  18. typedef __int64 gl_intptr;
  19. typedef unsigned __int64 gl_uintptr;
  20. #else
  21. typedef long gl_intptr;
  22. typedef unsigned long gl_uintptr;
  23. #endif
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27. #include <stdio.h>
  28. #if defined(_WIN32) || defined(_WIN64)
  29. # define GL_PASCAL __stdcall
  30. # define GL_CDECL __cdecl
  31. # define GL_EPTR *
  32. # ifdef GL_DLL
  33. # define GL_EXPORT __declspec(dllexport)
  34. # elif defined(GL_TOOLSBUILD) || defined(GL_STATICBUILD)
  35. # define GL_EXPORT
  36. # else
  37. # define GL_EXPORT __declspec(dllimport)
  38. # endif
  39. #else
  40. # if defined(_WINDOWS)
  41. # define GL_PASCAL __pascal
  42. # define GL_CDECL __cdecl
  43. # define GL_EPTR __far *
  44. # ifdef GL_DLL
  45. # define GL_EXPORT __export
  46. # else
  47. # define GL_EXPORT
  48. # endif
  49. # else
  50. # define GL_PASCAL
  51. # define GL_CDECL
  52. # define GL_EPTR *
  53. # define GL_EXPORT
  54. #include <stddef.h>
  55. #include <string.h>
  56. # endif
  57. #endif
  58. #define GL_LPTR *
  59. #ifdef GL_NT_STATIC /* NT Server & Blade */
  60. #undef GL_EXPORT
  61. #ifdef GL_NT_ST_EXP /* NT Server exports it */
  62. #define GL_EXPORT __declspec(dllexport)
  63. #else /* NT Blade imports it */
  64. #define GL_EXPORT __declspec(dllimport)
  65. #endif /* GL_NT_ST_EXP */
  66. #endif /* GL_NT_STATIC */
  67. #define GL_VOID void
  68. #define GL_VOIDPTR void GL_EPTR
  69. #define GL_VOIDARGS void
  70. #if defined (_WIN32) && !defined (_WIN64)
  71. #define GL_VERSION "glslib-6.00.TC11"
  72. #define PLAT_BIT "32"
  73. #elif defined(M64ADDR)
  74. #define GL_VERSION "glslib-6.00.FC11"
  75. #define PLAT_BIT "64"
  76. #elif defined(HPUX_32BIT)
  77. #define GL_VERSION "glslib-6.00.HC11"
  78. #define PLAT_BIT "32"
  79. #else
  80. #define GL_VERSION "glslib-6.00.UC11"
  81. #define PLAT_BIT "32"
  82. #endif
  83. /* Version strings used by DLL version properties box */
  84. #define GL_VERSION_NUM 6,0,0,11
  85. #if !defined (_WIN64)
  86. #define GL_VERSION_STR "6.00.TC11"
  87. #else
  88. #define GL_VERSION_STR "6.00.FC11"
  89. #endif
  90. #define GL_NUMVER 6000011 /* Numeric version of 6.00.UC11 */
  91. #define GL_CV_VERSION "9"
  92. #define GL_LC_VERSION "11"
  93. #define GL_CM_VERSION "3"
  94. #if defined(_WINDOWS) && !defined(_WIN32) && !defined(_WIN64)
  95. # define GL_STRCAT _fstrcat
  96. # define GL_STRCHR _fstrchr
  97. # define GL_STRCMP _fstrcmp
  98. # define GL_STRCPY _fstrcpy
  99. # define GL_STRCSPN _fstrcspn
  100. # define GL_STRNCMP _fstrncmp
  101. # define GL_STRPBRK _fstrpbrk
  102. # define GL_STRRCHR _fstrrchr
  103. # define GL_STRSPN _fstrspn
  104. # define GL_STRSTR _fstrstr
  105. # define GL_STRLEN _fstrlen
  106. #else
  107. # define GL_STRCAT strcat
  108. # define GL_STRCHR strchr
  109. # define GL_STRCMP strcmp
  110. # define GL_STRCPY strcpy
  111. # define GL_STRCSPN strcspn
  112. # define GL_STRNCMP strncmp
  113. # define GL_STRPBRK strpbrk
  114. # define GL_STRRCHR strrchr
  115. # define GL_STRSPN strspn
  116. # define GL_STRSTR strstr
  117. # define GL_STRLEN strlen
  118. #endif
  119. /* size of wide character must be compatible with the linked-in object */
  120. #ifndef GL_WCSIZE /* accept previous definition if it exists */
  121. #define GL_WCSIZE 4 /* may be 1, 2, or 4. */
  122. #endif
  123. /* success and failure indicators */
  124. #define GL_SUCCESS 0
  125. #define GL_FAILURE -1
  126. /* category parameter values for gl_setlocale, same as .lco file order */
  127. #define GL_ALL 1
  128. #define GL_CTYPE 2
  129. #define GL_COLLATE 3
  130. #define GL_NUMERIC 4
  131. #define GL_MONETARY 5
  132. #define GL_TIME 6
  133. #define GL_MESSAGES 7
  134. #define GL_FIRST_CAT GL_CTYPE
  135. #define GL_LAST_CAT GL_MESSAGES
  136. #define GL_D_T_FMT 0 /* string for formatting data and time */
  137. #define GL_DAY_1 1 /* Name of the first day of the week */
  138. #define GL_DAY_2 2
  139. #define GL_DAY_3 3
  140. #define GL_DAY_4 4
  141. #define GL_DAY_5 5
  142. #define GL_DAY_6 6
  143. #define GL_DAY_7 7
  144. #define GL_ABDAY_1 8 /* Abbreviated name of the first day of the week */
  145. #define GL_ABDAY_2 9
  146. #define GL_ABDAY_3 10
  147. #define GL_ABDAY_4 11
  148. #define GL_ABDAY_5 12
  149. #define GL_ABDAY_6 13
  150. #define GL_ABDAY_7 14
  151. #define GL_MON_1 15 /* Name of the first month */
  152. #define GL_MON_2 16
  153. #define GL_MON_3 17
  154. #define GL_MON_4 18
  155. #define GL_MON_5 19
  156. #define GL_MON_6 20
  157. #define GL_MON_7 21
  158. #define GL_MON_8 22
  159. #define GL_MON_9 23
  160. #define GL_MON_10 24
  161. #define GL_MON_11 25
  162. #define GL_MON_12 26
  163. #define GL_MON_13 27
  164. #define GL_MON_14 28
  165. #define GL_MON_15 29
  166. #define GL_MON_16 30
  167. #define GL_MON_17 31
  168. #define GL_MON_18 32
  169. #define GL_MON_19 33
  170. #define GL_MON_20 34
  171. #define GL_ABMON_1 35 /* Abbreviated name of the first month */
  172. #define GL_ABMON_2 36
  173. #define GL_ABMON_3 37
  174. #define GL_ABMON_4 38
  175. #define GL_ABMON_5 39
  176. #define GL_ABMON_6 40
  177. #define GL_ABMON_7 41
  178. #define GL_ABMON_8 42
  179. #define GL_ABMON_9 43
  180. #define GL_ABMON_10 44
  181. #define GL_ABMON_11 45
  182. #define GL_ABMON_12 46
  183. #define GL_ABMON_13 47
  184. #define GL_ABMON_14 48
  185. #define GL_ABMON_15 49
  186. #define GL_ABMON_16 50
  187. #define GL_ABMON_17 51
  188. #define GL_ABMON_18 52
  189. #define GL_ABMON_19 53
  190. #define GL_ABMON_20 54
  191. #define GL_RADIXCHAR 55 /* Radix character */
  192. #define GL_THOUSEP 56 /* Separator for thousands */
  193. #define GL_YESSTR 57 /* Affirmative response for yes/no queries */
  194. #define GL_NOSTR 58 /* Negative response for yes/no queries */
  195. #define GL_CRNCYSTR 59 /* Currency symbol */
  196. #define GL_CODESET 60
  197. #define GL_D_FMT 61
  198. #define GL_T_FMT 62
  199. #define GL_T_FMT_AMPM 63
  200. #define GL_AM_STR 64
  201. #define GL_PM_STR 65
  202. #define GL_ERA 66
  203. #define GL_ERA_D_FMT 67
  204. #define GL_ERA_D_T_FMT 68
  205. #define GL_ERA_T_FMT 69
  206. #define GL_ALT_DIGITS 70
  207. #define GL_YESEXPR 71
  208. #define GL_NOEXPR 72
  209. #define GL_CALENDAR 73
  210. /* Type values for gl_mbstimeinfo */
  211. #define GL_FULLDAY 1
  212. #define GL_ABBRDAY 2
  213. #define GL_FULLMON 3
  214. #define GL_ABBRMON 4
  215. #define GL_FULLERA 5
  216. #define GL_ABBRERA 6
  217. #define GL_ALTDGTS 7
  218. #define GL_AMPMSTR 8
  219. /* Type values for gl_mbsfmtexpand */
  220. #define GL_DATE_FORMAT 1
  221. #define GL_MONEY_FORMAT 2
  222. #define GL_NUMBER_FORMAT 3
  223. /* Type values for gl_getcentury algorithms*/
  224. #define GL_PAST_CENT 'P'
  225. #define GL_FUTURE_CENT 'F'
  226. #define GL_CLOSEST_CENT 'C'
  227. #define GL_PRESENT_CENT 'R'
  228. /* Constants used for Minguo dbcentury support */
  229. #define GL_ZH_TW_GR_DATE 1911
  230. /* The following 4 defines duplicate entries in glsdate.h */
  231. #define GL_BASIC 0 /* DT_BASIC */
  232. #define GL_JA_JP 1 /* DT_JA_JP */
  233. #define GL_ZH_TW 2 /* DT_ZH_TW */
  234. #define GL_GRERA 3 /* DT_GRERA */
  235. /* Defines for conversion from codeset name to codeset number */
  236. #define GL_MAX_CV_FNAME 12 /* "E000E000.cvo" */
  237. #define GL_MAX_CS_NAME 21
  238. #define GL_MAX_LC_NAME (GL_MAX_CS_NAME + 12)
  239. #define GL_MAX_NLS_FNAME 36
  240. /* GL_MAX_LC_FNAME and GL_MAX_LC_SPEC use GL_MAX_LC_NAME rather than
  241. * strlen("ll_TT/E000aaaa.lco") for compatibility with systems that
  242. * don't follow the GLS locale file naming scheme. This works because
  243. * GL_MAX_LC_NAME is larger than strlen("ll_TT/E000aaaa.lco").
  244. */
  245. #define GL_MAX_LC_FNAME 310 /* "GL_CTYPE = <max-nls-fname> ; \
  246. GL_COLLATE = <max-nls-fname> ; \
  247. GL_MESSAGES = <max-nls-fname> ; \
  248. GL_NUMERIC = <max-nls-fname> ; \
  249. GL_MONETARY = <max-nls-fname> ; \
  250. GL_TIME = <max-nls-fname> ; " */
  251. #define GL_MAX_LC_SPEC 285 /* "GL_CTYPE = <max-lc-name> ; \
  252. GL_COLLATE = <max-lc-name> ; \
  253. GL_MESSAGES = <max-lc-name> ; \
  254. GL_NUMERIC = <max-lc-name> ; \
  255. GL_MONETARY = <max-lc-name> ; \
  256. GL_TIME = <max-lc-name> ; " */
  257. #define GL_MAX_MSG_DNAME 11 /* "lll_TT/E000" */
  258. #define GL_MAX_CS_NUM 4 /* "E000" */
  259. #define GL_BAD_CS_NUM (unsigned int) 0xE000
  260. #define GL_EXT_GETENV 0
  261. #define GL_EXT_ERRNO 1
  262. #define GL_EXT_FCLOSE 2
  263. #define GL_EXT_FEOF 3
  264. #define GL_EXT_FERROR 4
  265. #define GL_EXT_FGETC 5
  266. #define GL_EXT_FGETS 6
  267. #define GL_EXT_FOPEN 7
  268. #define GL_EXT_FREE 8
  269. #define GL_EXT_FSEEK 9
  270. #define GL_EXT_FTELL 10
  271. #define GL_EXT_FWRITE 11
  272. #define GL_EXT_GETC 12
  273. #define GL_EXT_MALLOC 13
  274. #define GL_EXT_UNGETC 14
  275. #define GL_EXT_PUTENV 15
  276. #define GL_EXT_CURRDATE 16
  277. #define GL_EXT_CURRTIME 17
  278. #define GL_EXT_CALLOC 18
  279. #define GL_EXT_REALLOC 19
  280. #define GL_EXT_UCA 20
  281. #define GL_EXT_LASTFUNC 20
  282. /* Defines for error numbers */
  283. #define GL_ERR_BASE 1 /* General Base gl_errno values */
  284. #define GL_NOERRNO 0 /* No error has occurred */
  285. #define GL_EILSEQ GL_ERR_BASE /* Invalid MB sequence */
  286. #define GL_ENULLPTR (GL_ERR_BASE+1) /* NULL Pointer to a function */
  287. #define GL_ENOMEM (GL_ERR_BASE+2) /* memory allocation failure */
  288. #define GL_EINDEXRANGE (GL_ERR_BASE+3) /* index out of bounds */
  289. #define GL_EINVPTR (GL_ERR_BASE+4) /* End pointer < begin pointer */
  290. #define GL_ERANGE (GL_ERR_BASE+5) /* BASE of number is out of range. */
  291. #define GL_EINVAL (GL_ERR_BASE+6) /* Invalid wcs or mbs strings */
  292. #define GL_FILEERR (GL_ERR_BASE+7) /* input file could not be read */
  293. #define GL_PARAMERR (GL_ERR_BASE+8) /* parameter out of bounds */
  294. #define GL_CATASTROPHE (GL_ERR_BASE+9) /* internal error; undefined result */
  295. #define GL_BADFILEFORM (GL_ERR_BASE+10)/* file format was invalid */
  296. #define GL_INVALIDLOC (GL_ERR_BASE+11)/* locale codesets are inconsistent */
  297. #define GL_EIO (GL_ERR_BASE+12)/* I/O error */
  298. #define GL_E2BIG (GL_ERR_BASE+13)/* Operation would overflow buffer */
  299. #define GL_EBADF (GL_ERR_BASE+14)/* Bad handle passed to function */
  300. #define GL_EOF (GL_ERR_BASE+15)/* End of file on input stream */
  301. #define GL_EUNKNOWN (GL_ERR_BASE+16)/* Unknown system error has occurred */
  302. #define GL_UNLOADEDCAT (GL_ERR_BASE+17)/* Can't copy from unloaded category */
  303. #define GL_LOADEDCAT (GL_ERR_BASE+18)/* Can't copy into a loaded category */
  304. #define GL_ENOSYS (GL_ERR_BASE+19)/* function is not supported */
  305. #define GL_ELOCTOOWIDE (GL_ERR_BASE+20)/* has chars too wide for library */
  306. #define GL_INVALIDFMT (GL_ERR_BASE+21)/* Invalid formatted argument string */
  307. #define GL_EFRACRANGE (GL_ERR_BASE+22)/* Fraction of Second out of bounds */
  308. #define GL_ESECONDRANGE (GL_ERR_BASE+23)/* Second out of bounds */
  309. #define GL_EMINUTERANGE (GL_ERR_BASE+24)/* Minute out of bounds */
  310. #define GL_EHOURRANGE (GL_ERR_BASE+25)/* Hour out of bounds */
  311. #define GL_EDAYRANGE (GL_ERR_BASE+26)/* Day number out of bounds */
  312. #define GL_EWKDAYRANGE (GL_ERR_BASE+27)/* Week Day number out of bounds */
  313. #define GL_EYDAYRANGE (GL_ERR_BASE+28)/* Year Day number out of bounds */
  314. #define GL_EMONTHRANGE (GL_ERR_BASE+29)/* Month number out of bounds */
  315. #define GL_EYEARRANGE (GL_ERR_BASE+30)/* Year number out of bounds */
  316. #define GL_EERAOFFRANGE (GL_ERR_BASE+31)/* Era Offset out of bounds */
  317. #define GL_BADFRAC (GL_ERR_BASE+32)/* Fraction could not be scanned */
  318. #define GL_BADSECOND (GL_ERR_BASE+33)/* Second could not be scanned */
  319. #define GL_BADMINUTE (GL_ERR_BASE+34)/* Minute could not be scanned */
  320. #define GL_BADHOUR (GL_ERR_BASE+35)/* Hour could not be scanned */
  321. #define GL_BADDAY (GL_ERR_BASE+36)/* Month Day could not be scanned */
  322. #define GL_BADWKDAY (GL_ERR_BASE+37)/* Week Day could not be scanned */
  323. #define GL_BADYDAY (GL_ERR_BASE+38)/* Year Day could not be scanned */
  324. #define GL_BADMONTH (GL_ERR_BASE+39)/* Month could not be scanned */
  325. #define GL_BADYEAR (GL_ERR_BASE+40)/* Year could not be scanned */
  326. #define GL_BADERANAME (GL_ERR_BASE+41)/* Invalid Era name */
  327. #define GL_BADERAOFFSET (GL_ERR_BASE+42)/* Invalid Era offset */
  328. #define GL_BADFMTMOD (GL_ERR_BASE+43)/* Invalid Format modifer */
  329. #define GL_BADFMTWP (GL_ERR_BASE+44)/* Invalid width/precision */
  330. #define GL_BADINPUT (GL_ERR_BASE+45)/* Input string doesn't match format */
  331. #define GL_NOPOINT (GL_ERR_BASE+46)/* Missing decimal point in input */
  332. #define GL_BADMONTHSTR (GL_ERR_BASE+47)/* Month string could not be scanned */
  333. #define GL_BADERASPEC (GL_ERR_BASE+48)/* Couldn't load era from locale */
  334. #define GL_BADCALENDAR (GL_ERR_BASE+49)/* Unsupported calendar in LC_TIME */
  335. #define GL_BADOBJVER (GL_ERR_BASE+50)/* Wrong lc, cm or cv object version */
  336. #define GL_BADALTDATE (GL_ERR_BASE+51)/* Could not convert %Z information */
  337. #define GL_NOSYMMAP (GL_ERR_BASE+52)/* character/symbol not in charmap */
  338. #define GL_BADSYM (GL_ERR_BASE+53)/* invalid symbolic character name */
  339. #define GL_ELOCLOAD (GL_ERR_BASE+54)/* Could not load locale */
  340. #define GL_TERMMISMAT (GL_ERR_BASE+55)/* str termination params mis-match */
  341. #define GL_NOCTYPE (GL_ERR_BASE+56)/* GL_CTYPE is not loaded */
  342. #define GL_LOCMISMAT (GL_ERR_BASE+57)/* loaded codesets are not same */
  343. /* Defines for Ctype categories */
  344. #define GL_UPPER (gl_ctype_t) 0x0001
  345. #define GL_LOWER (gl_ctype_t) 0x0002
  346. #define GL_ALPHA (gl_ctype_t) 0x0004
  347. #define GL_DIGIT (gl_ctype_t) 0x0008
  348. #define GL_SPACE (gl_ctype_t) 0x0010
  349. #define GL_CNTRL (gl_ctype_t) 0x0020
  350. #define GL_PUNCT (gl_ctype_t) 0x0040
  351. #define GL_GRAPH (gl_ctype_t) 0x0080
  352. #define GL_PRINT (gl_ctype_t) 0x0100
  353. #define GL_XDIGIT (gl_ctype_t) 0x0200
  354. #define GL_BLANK (gl_ctype_t) 0x0400
  355. #define GL_ALNUM GL_ALPHA | GL_DIGIT
  356. #define GL_USER_BIT_BASE (gl_ctype_t) 0x0800
  357. #define gl_errno(x) (*_gl_ext_errno((gl_gen_expptr_t) (x)))
  358. #define gl_get_errno(x) (*_gl_ext_errno((gl_gen_expptr_t) (x)))
  359. #define gl_set_errno(x,y) (*_gl_ext_errno((gl_gen_expptr_t) (x))) = y
  360. extern gl_uintptr gl_memory_usage;
  361. /* Defines for glsatg.c functions */
  362. #define GL_FORWARDPASS 1 /* For gl_passdirection() */
  363. #define GL_BACKWARDPASS 2
  364. #define GL_NOT_MB_COLL_ELEM 1 /* For gl_iscompchar() */
  365. #define GL_IS_MB_COLL_ELEM 2
  366. #define GL_IS_PART_OF_MB_COLL_ELEM 3
  367. #define GL_NO_PRIMWEIGHT -2 /* For gl_{next,prev}primweight() */
  368. /* Defines for algorithmic codeset conversion */
  369. #define GLCV_BUFSIZE 16 /* max size for target char without state */
  370. /* Flags returned in gl_cv_res_t by ext fn */
  371. #define GLCV_NULL (unsigned int) 0x01 /* source is the null character,
  372. * otherwise normal */
  373. #define GLCV_DATAERR (unsigned int) 0x02 /* invalid char, too little data, or undefined
  374. conversion. Everything is ignored, the
  375. operation is aborted, and an error code is
  376. returned to the user. */
  377. #define GLCV_CONVERR (unsigned int) 0x04 /* like the error field in
  378. * .cv files; the sub parameter
  379. * is asserted, otherwise normal */
  380. #define GLCV_NOMORE (unsigned int) 0x08 /* fn has completely processed
  381. * the input data */
  382. /* macros to values cached for optimization of common cases */
  383. #define GL_IS_SINGLE_BYTE(lc) (((gl_lc_expptr_t)(lc))->single_byte)
  384. #define GL_IS_CODESET_ORDER(lc) (((gl_lc_expptr_t)(lc))->codeset_order)
  385. #define GL_LC_SB_TOUPPER_TABLE(lc) (((gl_lc_expptr_t)(lc))->sb_toupper_table)
  386. #define GL_LC_SB_TOLOWER_TABLE(lc) (((gl_lc_expptr_t)(lc))->sb_tolower_table)
  387. #define GL_LC_SB_CTYPE_TABLE(lc) (((gl_lc_expptr_t)(lc))->sb_ctype_table)
  388. #define GL_LC_SB_COLLATION_TABLE(lc) (((gl_lc_expptr_t)(lc))->sb_collation_table)
  389. #define GL_COLL_CHAR_RATIO(lc) (((gl_lc_expptr_t)(lc))->coll_char_ratio)
  390. #define GL_COLL_IGNORED(lc) (((gl_lc_expptr_t)(lc))->coll_ignored)
  391. #define GL_COLL_EQUIV_CLASS_MAP(lc) (((gl_lc_expptr_t)(lc))->coll_equiv_class_map)
  392. #define GL_IS_GLULOC(lc) (((gl_lc_expptr_t)(lc))->glu_locale)
  393. #define GL_CV_SB2SB_TABLE(cv) (((gl_cv_expptr_t)(cv))->sb2sb_table)
  394. #define GL_TMP(l) (((gl_lc_expptr_t)(l))->gl_tmp)
  395. #define GL_FGETWC_SB(l,fp) (((GL_TMP(l) = _gl_ext_fgetc(fp)) == EOF) \
  396. ? (gl_set_errno((l), GL_EOF), GL_WEOF) \
  397. : GL_TMP(l))
  398. /* Definition of gl_wchar_t. Uses a dash of type-safe linking. */
  399. #if GL_WCSIZE == 1
  400. typedef unsigned char gl_wchar_t;
  401. #define gl_setlocale gl_setlocale_1
  402. #define gl_createlocale gl_createlocale_1
  403. #define gl_createlocale2 gl_createlocale2_1
  404. #define gl_create_null_locale gl_create_null_locale_1
  405. #elif GL_WCSIZE == 2
  406. typedef unsigned short gl_wchar_t;
  407. #define gl_setlocale gl_setlocale_2
  408. #define gl_createlocale gl_createlocale_2
  409. #define gl_createlocale2 gl_createlocale2_2
  410. #define gl_create_null_locale gl_create_null_locale_2
  411. #elif GL_WCSIZE == 4
  412. #if defined(THINK_C) || defined(__MWERKS__)
  413. typedef unsigned long gl_wchar_t;
  414. #else
  415. typedef unsigned int gl_wchar_t;
  416. #endif
  417. #define gl_setlocale gl_setlocale_4
  418. #define gl_createlocale gl_createlocale_4
  419. #define gl_createlocale2 gl_createlocale2_4
  420. #define gl_create_null_locale gl_create_null_locale_4
  421. #else
  422. error GL_WCSIZE must be of size 1, 2, or 4
  423. #endif /* GL_WCSIZE */
  424. typedef unsigned int gl_ctype_t;
  425. typedef int gl_nl_item; /* for gl_nl_langinfo() */
  426. typedef unsigned char gl_mchar_t;
  427. typedef GL_VOIDPTR gl_e_voidptr_t;
  428. typedef GL_VOIDPTR gl_cv_t;
  429. typedef GL_VOIDPTR gl_lc_t;
  430. typedef GL_VOIDPTR gl_cm_t;
  431. typedef GL_VOIDPTR gl_cvfns_ref_t;
  432. typedef int GL_EPTR gl_e_intptr_t;
  433. typedef unsigned int GL_EPTR gl_e_uintptr_t;
  434. typedef char GL_EPTR gl_e_charptr_t;
  435. typedef unsigned char GL_EPTR gl_e_ucharptr_t;
  436. typedef gl_mchar_t GL_EPTR gl_e_mcharptr_t;
  437. typedef gl_wchar_t GL_EPTR gl_e_wcharptr_t;
  438. typedef FILE GL_EPTR gl_e_fileptr_t;
  439. typedef gl_cv_t GL_EPTR gl_iconvptr_t;
  440. typedef gl_cv_t GL_EPTR gl_cvptr_t;
  441. typedef gl_lc_t GL_EPTR gl_localeptr_t;
  442. typedef gl_lc_t GL_EPTR gl_lcptr_t;
  443. typedef struct gl_gen_exports
  444. {
  445. int gl_lerrno; /* errno value for gls functions */
  446. } gl_gen_exports_t;
  447. typedef gl_gen_exports_t GL_EPTR gl_gen_expptr_t;
  448. typedef struct gl_cv_exports
  449. {
  450. gl_gen_exports_t exp;
  451. gl_e_ucharptr_t sb2sb_table;
  452. } gl_cv_exports_t;
  453. typedef gl_cv_exports_t GL_EPTR gl_cv_expptr_t;
  454. typedef struct
  455. {
  456. gl_lc_t lc;
  457. void *level;
  458. int glu;
  459. } gl_imbl_t;
  460. /* Compile-time optimizations for single-byte library */
  461. #if GL_WCSIZE == 1
  462. #define gl_charoffset(lc, mbs, mbp, bytes) ((*(bytes))=1, 0)
  463. #define gl_mbsnext(loc, mbs) ((gl_e_mcharptr_t) (mbs)+1)
  464. #define gl_fgetwc(loc,fp) GL_FGETWC_SB(loc,fp)
  465. #define gl_fgetmb(loc,mb,fp) (*(mb)=(gl_mchar_t)_gl_ext_fgetc(fp),\
  466. (char)(*(mb))==-1? (gl_set_errno(loc,GL_EOF), -1): 1 )
  467. #define gl_mbscmp(loc, mbs1, mbs2) \
  468. GL_STRCMP((gl_e_charptr_t)(mbs1), (gl_e_charptr_t)(mbs2))
  469. #define gl_mbsncmp(loc, mbs1, mbs2, n) \
  470. GL_STRNCMP((gl_e_charptr_t)(mbs1), (gl_e_charptr_t)(mbs2), (n))
  471. #define gl_mblen(loc, mb, n) \
  472. ((mb) != NULL \
  473. ? (((n) >= 1) \
  474. ? ((*(mb)) != '\0' \
  475. ? 1 \
  476. : 0 \
  477. ) \
  478. : (gl_set_errno((loc), GL_EINVAL), -1) \
  479. ) \
  480. : 0 \
  481. )
  482. #define gl_mbtowc(loc, wc, mb, n) \
  483. ((mb) \
  484. ? ((n) \
  485. ? ((*mb) ? (*(wc)=*(gl_mchar_t*)(mb), 1): (*(wc)=0, 0)) \
  486. : (gl_set_errno(loc, GL_EINVAL), -1)) \
  487. : 0 \
  488. )
  489. #define gl_wctomb(loc, mb, wc) (*(mb)=wc, 1)
  490. #define gl_wcstombs(loc, mb, wc, n) _gl_is_wcstombs(loc, mb, wc, n)
  491. #define gl_mbscat(loc, mbs1, mbs2) \
  492. ((mbs1 && mbs2) \
  493. ? ((gl_e_mcharptr_t)GL_STRCAT((gl_e_charptr_t)(mbs1), (gl_e_charptr_t)(mbs2))) \
  494. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL) \
  495. )
  496. #define gl_mbscpy(loc, mbs1, mbs2) \
  497. ((mbs1 && mbs2) \
  498. ? ((gl_e_mcharptr_t)GL_STRCPY((gl_e_charptr_t)(mbs1), (gl_e_charptr_t)(mbs2))) \
  499. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL) \
  500. )
  501. #define gl_mbschr(loc, mbs, mbc) \
  502. ((mbs && mbc) \
  503. ? (gl_set_errno(loc,0), (gl_e_mcharptr_t)GL_STRCHR((gl_e_charptr_t)(mbs), (int)(*mbc))) \
  504. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL) \
  505. )
  506. #define gl_mbsrchr(loc, mbs, mbc) \
  507. ((mbs && mbc) \
  508. ? (gl_set_errno(loc,0), (gl_e_mcharptr_t)GL_STRRCHR((gl_e_charptr_t)(mbs), (int)(*mbc))) \
  509. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL) \
  510. )
  511. #define gl_mbscspn(loc, mbs1, mbs2) \
  512. ((mbs1 && mbs2) \
  513. ? ((int)GL_STRCSPN((gl_e_charptr_t)(mbs1), (gl_e_charptr_t)(mbs2))) \
  514. : (gl_set_errno(loc,GL_ENULLPTR), -1) \
  515. )
  516. #define gl_mbsspn(loc, mbs1, mbs2) \
  517. ((mbs1 && mbs2) \
  518. ? ((int)GL_STRSPN((gl_e_charptr_t)(mbs1), (gl_e_charptr_t)(mbs2))) \
  519. : (gl_set_errno(loc,GL_ENULLPTR), -1) \
  520. )
  521. #define gl_mbspbrk(loc, mbs1, mbs2) \
  522. ((mbs1 && mbs2) \
  523. ? (gl_set_errno(loc,0), (gl_e_mcharptr_t)GL_STRPBRK((gl_e_charptr_t)(mbs1), (gl_e_charptr_t)(mbs2))) \
  524. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL) \
  525. )
  526. #define gl_mbsmbs(loc, mbs1, mbs2) \
  527. ((mbs1 && mbs2) \
  528. ? (gl_set_errno(loc,0), (gl_e_mcharptr_t)GL_STRSTR((gl_e_charptr_t)(mbs1), (gl_e_charptr_t)(mbs2))) \
  529. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL) \
  530. )
  531. #define gl_mbsprev(loc, mbs, mbp) \
  532. ((mbs && mbp) \
  533. ? (((mbp) <= (mbs)) \
  534. ? (gl_set_errno(loc,GL_EINVPTR), (gl_e_mcharptr_t)NULL) \
  535. : (gl_e_mcharptr_t)((mbp)-1)) \
  536. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL) \
  537. )
  538. #define gl_getmbsi(loc, mbs, i) \
  539. (((i) <0) \
  540. ? (gl_set_errno(loc,GL_EINDEXRANGE), (gl_e_mcharptr_t)NULL) \
  541. : ((mbs) ? (gl_e_mcharptr_t)((mbs)+(i)) \
  542. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL)) \
  543. )
  544. #define gl_putmbsi(loc, mbs, i, mbc) \
  545. (((i) <0) \
  546. ? (gl_set_errno(loc,GL_EINDEXRANGE), (gl_e_mcharptr_t)NULL) \
  547. : (((mbs) && (mbc)) \
  548. ? (((mbs)[i]=(*mbc)), (gl_e_mcharptr_t)((mbs)+(i))) \
  549. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL)) \
  550. )
  551. #else
  552. #define gl_charoffset(lc, mbs, mbp, bytes) \
  553. (GL_IS_SINGLE_BYTE(lc) \
  554. ? ((*(bytes))=1, 0) \
  555. : gl_full_charoffset((lc),(mbs),(mbp),(bytes)) \
  556. )
  557. #define gl_mbsnext(loc, mbs) \
  558. (GL_IS_SINGLE_BYTE(loc) \
  559. ? (gl_e_mcharptr_t) (mbs)+1 \
  560. : gl_full_mbsnext((loc),(mbs)) \
  561. )
  562. #define gl_fgetwc(loc,fp) \
  563. (GL_IS_SINGLE_BYTE(loc) \
  564. ? GL_FGETWC_SB(loc,fp) \
  565. : gl_full_fgetwc(loc,fp) \
  566. )
  567. #define gl_fgetmb(loc,mb,fp) \
  568. (GL_IS_SINGLE_BYTE(loc) \
  569. ? (*(mb)=(gl_mchar_t)_gl_ext_fgetc(fp), \
  570. ((char)(*(mb))==-1) \
  571. ? (_gl_ext_feof(fp) ? (gl_set_errno(loc,GL_EOF), -1) : 1) \
  572. : 1) \
  573. : gl_full_fgetmb(loc,mb,fp) \
  574. )
  575. #define gl_mbscmp(loc, mbs1, mbs2) \
  576. (gl_mb_loc_min(loc) == 1 \
  577. ? (GL_STRCMP((gl_e_charptr_t)(mbs1), (gl_e_charptr_t)(mbs2))) \
  578. : (gl_full_mbscmp(loc, mbs1, mbs2)) \
  579. )
  580. #define gl_mbsncmp(loc, mbs1, mbs2, n) \
  581. (GL_IS_SINGLE_BYTE(loc) \
  582. ? GL_STRNCMP((gl_e_charptr_t)(mbs1), (gl_e_charptr_t)(mbs2), (n))\
  583. : gl_full_mbsncmp((loc), (mbs1), (mbs2), (n)) \
  584. )
  585. #define gl_mblen(loc, mb, n) \
  586. (GL_IS_SINGLE_BYTE(loc) \
  587. ? ((mb) != NULL \
  588. ? (((n) >= 1) \
  589. ? ((*(mb)) != '\0' \
  590. ? 1 \
  591. : 0 \
  592. ) \
  593. : (gl_set_errno((loc), GL_EINVAL), -1) \
  594. ) \
  595. : 0 \
  596. ) \
  597. : gl_full_mblen((loc), (mb), (n)) \
  598. )
  599. #define gl_mbtowc(loc, wc, mb, n) \
  600. (GL_IS_SINGLE_BYTE(loc) \
  601. ?((mb) \
  602. ? ((n) \
  603. ? ((*mb) ? (*(wc)=*(gl_mchar_t*)(mb), 1): (*(wc)=0, 0)) \
  604. : (gl_set_errno(loc, GL_EINVAL), -1)) \
  605. : 0) \
  606. : gl_full_mbtowc((loc), (wc), (mb), (n)) \
  607. )
  608. #define gl_wctomb(loc, mb, wc) \
  609. (GL_IS_SINGLE_BYTE(loc) \
  610. ? (*(mb)=wc, 1) \
  611. : gl_full_wctomb((loc), (mb), (wc)) \
  612. )
  613. #define gl_wcstombs(loc, mb, wc, n) \
  614. (GL_IS_SINGLE_BYTE(loc) \
  615. ? _gl_is_wcstombs((loc), (mb), (wc), (n)) \
  616. : gl_full_wcstombs((loc), (mb), (wc), (n)) \
  617. )
  618. #define gl_mbscat(loc, mbs1, mbs2) \
  619. (GL_IS_SINGLE_BYTE(loc) \
  620. ? ((mbs1 && mbs2) \
  621. ? ((gl_e_mcharptr_t)GL_STRCAT((gl_e_charptr_t)(mbs1), (gl_e_charptr_t)(mbs2))) \
  622. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL)) \
  623. : gl_full_mbscat((loc), (mbs1), (mbs2)) \
  624. )
  625. #define gl_mbscpy(loc, mbs1, mbs2) \
  626. (GL_IS_SINGLE_BYTE(loc) \
  627. ? ((mbs1 && mbs2) \
  628. ? ((gl_e_mcharptr_t)GL_STRCPY((gl_e_charptr_t)(mbs1), (gl_e_charptr_t)(mbs2))) \
  629. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL)) \
  630. : gl_full_mbscpy((loc), (mbs1), (mbs2)) \
  631. )
  632. #define gl_mbschr(loc, mbs, mbc) \
  633. (GL_IS_SINGLE_BYTE(loc) \
  634. ? ((mbs && mbc) \
  635. ? (gl_set_errno(loc,0), \
  636. (gl_e_mcharptr_t)GL_STRCHR((gl_e_charptr_t)(mbs), (int)(*mbc))) \
  637. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL)) \
  638. : gl_full_mbschr((loc), (mbs), (mbc)) \
  639. )
  640. #define gl_mbsrchr(loc, mbs, mbc) \
  641. (GL_IS_SINGLE_BYTE(loc) \
  642. ? ((mbs && mbc) \
  643. ? (gl_set_errno(loc,0), \
  644. (gl_e_mcharptr_t)GL_STRRCHR((gl_e_charptr_t)(mbs), (int)(*mbc))) \
  645. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL)) \
  646. : gl_full_mbsrchr((loc), (mbs), (mbc)) \
  647. )
  648. #define gl_mbscspn(loc, mbs1, mbs2) \
  649. (GL_IS_SINGLE_BYTE(loc) \
  650. ? ((mbs1 && mbs2) \
  651. ? ((int)GL_STRCSPN((gl_e_charptr_t)(mbs1), (gl_e_charptr_t)(mbs2))) \
  652. : (gl_set_errno(loc,GL_ENULLPTR), -1)) \
  653. : gl_full_mbscspn((loc), (mbs1), (mbs2)) \
  654. )
  655. #define gl_mbsspn(loc, mbs1, mbs2) \
  656. (GL_IS_SINGLE_BYTE(loc) \
  657. ? ((mbs1 && mbs2) \
  658. ? ((int)GL_STRSPN((gl_e_charptr_t)(mbs1), (gl_e_charptr_t)(mbs2))) \
  659. : (gl_set_errno(loc,GL_ENULLPTR), -1)) \
  660. : gl_full_mbsspn((loc), (mbs1), (mbs2)) \
  661. )
  662. #define gl_mbspbrk(loc, mbs1, mbs2) \
  663. (GL_IS_SINGLE_BYTE(loc) \
  664. ? ((mbs1 && mbs2) \
  665. ? (gl_set_errno(loc,0), \
  666. (gl_e_mcharptr_t)GL_STRPBRK((gl_e_charptr_t)(mbs1), (gl_e_charptr_t)(mbs2))) \
  667. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL)) \
  668. : gl_full_mbspbrk((loc), (mbs1), (mbs2)) \
  669. )
  670. #define gl_mbsmbs(loc, mbs1, mbs2) \
  671. (GL_IS_SINGLE_BYTE(loc) \
  672. ? ((mbs1 && mbs2) \
  673. ? (gl_set_errno(loc,0), \
  674. (gl_e_mcharptr_t)GL_STRSTR((gl_e_charptr_t)(mbs1), (gl_e_charptr_t)(mbs2))) \
  675. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL)) \
  676. : gl_full_mbsmbs((loc), (mbs1), (mbs2)) \
  677. )
  678. #define gl_mbsprev(loc, mbs, mbp) \
  679. (GL_IS_SINGLE_BYTE(loc) \
  680. ? ((mbs && mbp) \
  681. ? (((mbp) <= (mbs)) \
  682. ? (gl_set_errno(loc,GL_EINVPTR), (gl_e_mcharptr_t)NULL) \
  683. : (gl_e_mcharptr_t)((mbp)-1)) \
  684. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL)) \
  685. : gl_full_mbsprev((loc), (mbs), (mbp)) \
  686. )
  687. #define gl_getmbsi(loc, mbs, i) \
  688. (GL_IS_SINGLE_BYTE(loc) \
  689. ? (((i) <0) \
  690. ? (gl_set_errno(loc,GL_EINDEXRANGE), (gl_e_mcharptr_t)NULL) \
  691. : ((mbs) ? (gl_e_mcharptr_t)((mbs)+(i)) \
  692. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL)))\
  693. : gl_full_getmbsi((loc), (mbs), (i)) \
  694. )
  695. #define gl_putmbsi(loc, mbs, i, mbc) \
  696. (GL_IS_SINGLE_BYTE(loc) \
  697. ? (((i) <0) \
  698. ? (gl_set_errno(loc,GL_EINDEXRANGE), (gl_e_mcharptr_t)NULL) \
  699. : (((mbs) && (mbc)) \
  700. ? (((mbs)[i]=(*mbc)), (gl_e_mcharptr_t)((mbs)+(i))) \
  701. : (gl_set_errno(loc,GL_ENULLPTR), (gl_e_mcharptr_t)NULL)))\
  702. : gl_full_putmbsi((loc), (mbs), (i), (mbc)) \
  703. )
  704. #endif
  705. typedef struct gl_coll_equiv_class_map
  706. {
  707. gl_mchar_t *from;
  708. gl_mchar_t *to;
  709. } gl_coll_equiv_class_map_t;
  710. /* NOTE: gl_exports is a private gls type. No external use. Caveat emptor. */
  711. typedef struct gl_loc_exports
  712. {
  713. gl_gen_exports_t gen; /* common exports in iconv and locale structure */
  714. int (GL_PASCAL *mbscoll)(gl_lc_t loc, gl_e_mcharptr_t text1, gl_e_mcharptr_t text2);
  715. int (GL_PASCAL *mbfscoll)(gl_lc_t loc, gl_e_mcharptr_t text1, int bytelen1, gl_e_mcharptr_t text2, int bytelen2);
  716. int (GL_PASCAL *mbsxfrm)(gl_lc_t loc, char GL_EPTR dst, gl_e_mcharptr_t mbs, int maxbytes);
  717. int (GL_PASCAL *mbstowcs)(gl_lc_t loc, gl_e_wcharptr_t wcs, gl_e_mcharptr_t mbs, int n);
  718. int (GL_PASCAL *mbfstowcfs)(gl_lc_t loc, gl_e_wcharptr_t wcs, gl_e_mcharptr_t mbs, int bytelen, int n);
  719. int gl_tmp; /* temporary area for gls macros */
  720. double case_conv_ratio;
  721. double coll_char_ratio;
  722. unsigned char *sb_toupper_table;
  723. unsigned char *sb_tolower_table;
  724. unsigned short *sb_ctype_table;
  725. unsigned char *sb_collation_table;
  726. int single_byte;
  727. int codeset_order;
  728. gl_mchar_t **coll_ignored;
  729. gl_coll_equiv_class_map_t *coll_equiv_class_map;
  730. int glu_locale;
  731. } gl_loc_exports_t; /* defines functions switched between multi-byte,
  732. * single-byte, and/or native mode */
  733. typedef gl_loc_exports_t GL_EPTR gl_lc_expptr_t;
  734. /* NOTE: gl_exports is a private gls type. No external use. Caveat emptor. */
  735. typedef struct gl_cmap_exports
  736. {
  737. gl_gen_exports_t gen; /* common exports in iconv and locale structure */
  738. } gl_cmap_exports_t; /* defines functions switched between multi-byte,
  739. * single-byte, and/or native mode */
  740. typedef gl_cmap_exports_t GL_EPTR gl_cm_expptr_t;
  741. /* codeset conversion state */
  742. typedef struct gl_cv_state
  743. {
  744. int first_frag;
  745. int last_frag;
  746. int source_state;
  747. int target_state;
  748. void GL_EPTR ext_state;
  749. } gl_cv_state_t;
  750. /* codeset conversion result for external algorithmic conversions */
  751. typedef struct gl_cv_res
  752. {
  753. int flags; /* see above GLCV_* definitions */
  754. int src_len; /* amount consumed from input buffer, could be 0 */
  755. int dst_len; /* amount written to dst_buf */
  756. char dst_buf[GLCV_BUFSIZE];
  757. } gl_cv_res_t;
  758. typedef void (GL_PASCAL *gl_cvmfn_t)(gl_e_mcharptr_t data, size_t inlen, gl_cv_state_t GL_EPTR state, gl_cv_res_t GL_EPTR cv_result);
  759. typedef struct gl_cv_funcdef
  760. {
  761. gl_e_charptr_t from_name;
  762. gl_e_charptr_t to_name;
  763. gl_cvmfn_t mtom_fn;
  764. int src_maxlen, src_minlen;
  765. int dst_maxlen, dst_minlen;
  766. float exp_ratio;
  767. } gl_cv_funcdef_t;
  768. /* structure for gl_localeconv() */
  769. typedef struct gl_conv
  770. {
  771. gl_e_mcharptr_t decimal_point;
  772. gl_e_wcharptr_t w_decimal_point;
  773. gl_e_mcharptr_t thousands_sep;
  774. gl_e_wcharptr_t w_thousands_sep;
  775. gl_e_charptr_t grouping;
  776. gl_e_mcharptr_t int_curr_symbol;
  777. gl_e_wcharptr_t w_int_curr_symbol;
  778. gl_e_mcharptr_t currency_symbol;
  779. gl_e_wcharptr_t w_currency_symbol;
  780. gl_e_mcharptr_t mon_decimal_point;
  781. gl_e_wcharptr_t w_mon_decimal_point;
  782. gl_e_mcharptr_t mon_thousands_sep;
  783. gl_e_wcharptr_t w_mon_thousands_sep;
  784. gl_e_charptr_t mon_grouping;
  785. gl_e_mcharptr_t positive_sign;
  786. gl_e_wcharptr_t w_positive_sign;
  787. gl_e_mcharptr_t negative_sign;
  788. gl_e_wcharptr_t w_negative_sign;
  789. gl_e_mcharptr_t num_positive_sign;
  790. gl_e_wcharptr_t w_num_positive_sign;
  791. gl_e_mcharptr_t num_negative_sign;
  792. gl_e_wcharptr_t w_num_negative_sign;
  793. char int_frac_digits;
  794. char frac_digits;
  795. char p_cs_precedes;
  796. char p_sep_by_space;
  797. char n_cs_precedes;
  798. char n_sep_by_space;
  799. char p_sign_posn;
  800. char n_sign_posn;
  801. } gl_conv_t;
  802. /* time pointer */
  803. typedef struct gl_tm
  804. {
  805. long tm_usec; /* microseconds (0-999999) */
  806. int tm_sec; /* seconds (0-59) */
  807. int tm_min; /* minutes (0-59) */
  808. int tm_hour; /* hour (0-23) */
  809. int tm_mday; /* day of month (1-31) */
  810. int tm_mon; /* month of year (0-11) */
  811. int tm_year; /* year starting at 1900 */
  812. int tm_wday; /* day of week (0-6) */
  813. int tm_yday; /* day of year (0-365) */
  814. int tm_isdst;
  815. gl_e_charptr_t tm_zone;
  816. long tm_gmtoff;
  817. } gl_tm_t;
  818. /* Switched function macros */
  819. #define gl_mbscoll(lc, mbs1, mbs2) \
  820. ( GL_IS_CODESET_ORDER(lc) ? \
  821. gl_mbscmp((lc), (mbs1), (mbs2)) : \
  822. ((((gl_lc_expptr_t)lc)->mbscoll)((lc),(mbs1),(mbs2))) \
  823. )
  824. #define gl_mbsxfrm(lc, dst, mbs, maxbytes) \
  825. ((((gl_lc_expptr_t)lc)->mbsxfrm)((lc),(dst),(mbs),(maxbytes)))
  826. #define gl_mbslen(loc, mbs) \
  827. ( GL_IS_SINGLE_BYTE(loc) ? \
  828. ((int)GL_STRLEN((gl_e_charptr_t)(mbs))) : \
  829. (_gl_im_mbslen((loc),(mbs))) \
  830. )
  831. #define gl_mbstowcs(loc, wcs, mbs, n) ((((gl_lc_expptr_t)loc)->mbstowcs)((loc), (wcs), (mbs), (n)))
  832. #define gl_ismctype(lc, mb, cclass) \
  833. ( GL_LC_SB_CTYPE_TABLE(lc) ? \
  834. ((int) (GL_LC_SB_CTYPE_TABLE(lc)[*((gl_mchar_t *) (mb))] & (cclass))) : \
  835. _gl_im_ismctype((lc), (mb), (cclass)) \
  836. )
  837. #define gl_ismalpha(lc, mb) gl_ismctype((lc), (mb), GL_ALPHA)
  838. #define gl_ismupper(lc, mb) gl_ismctype((lc), (mb), GL_UPPER)
  839. #define gl_ismlower(lc, mb) gl_ismctype((lc), (mb), GL_LOWER)
  840. #define gl_ismdigit(lc, mb) gl_ismctype((lc), (mb), GL_DIGIT)
  841. #define gl_ismalnum(lc, mb) gl_ismctype((lc), (mb), GL_ALNUM)
  842. #define gl_ismspace(lc, mb) gl_ismctype((lc), (mb), GL_SPACE)
  843. #define gl_ismcntrl(lc, mb) gl_ismctype((lc), (mb), GL_CNTRL)
  844. #define gl_ismpunct(lc, mb) gl_ismctype((lc), (mb), GL_PUNCT)
  845. #define gl_ismgraph(lc, mb) gl_ismctype((lc), (mb), GL_GRAPH)
  846. #define gl_ismprint(lc, mb) gl_ismctype((lc), (mb), GL_PRINT)
  847. #define gl_ismxdigit(lc, mb) gl_ismctype((lc), (mb), GL_XDIGIT)
  848. #define gl_ismblank(lc, mb) gl_ismctype((lc), (mb), GL_BLANK)
  849. #define gl_mbdescribe(lc, mb, mask, cclass, wc) \
  850. ((mb) && *(mb)? \
  851. (GL_LC_SB_CTYPE_TABLE(lc)? \
  852. (*(cclass) = (gl_ctype_t) \
  853. GL_LC_SB_CTYPE_TABLE(lc)[*((gl_mchar_t *) (mb))] & (mask), \
  854. (GL_IS_SINGLE_BYTE(lc)? (*(wc) = *(mb), 1): \
  855. _ifx_gl_full_mbtowc((lc), (wc), (mb), GL_MB_MAX) \
  856. ) \
  857. ): \
  858. (GL_IS_SINGLE_BYTE(lc)? \
  859. (*(cclass) = _gl_im_ismctype((lc), (mb), (mask)), \
  860. *(wc) = *(mb), 1 \
  861. ): \
  862. _ifx_gl_full_mbdescribe((lc), (wc), (mb), (cclass), (mask), GL_MB_MAX) \
  863. ) \
  864. ): \
  865. (*(wc) = 0, *(cclass) = 0, 0) \
  866. )
  867. #define gl_iswctype(lc, wc, cclass) \
  868. ( GL_LC_SB_CTYPE_TABLE(lc) ? \
  869. ( ((gl_wchar_t) (wc)) <= ((gl_wchar_t) 0xff) ? \
  870. ((int) (GL_LC_SB_CTYPE_TABLE(lc)[(gl_wchar_t) (wc)] & (cclass))) : \
  871. (gl_set_errno(lc, GL_EILSEQ), 0) ) : \
  872. _gl_im_iswctype((lc), (gl_wchar_t) (wc), (cclass)) \
  873. )
  874. #define gl_iswalpha(lc, wc) gl_iswctype((lc), (wc), GL_ALPHA)
  875. #define gl_iswupper(lc, wc) gl_iswctype((lc), (wc), GL_UPPER)
  876. #define gl_iswlower(lc, wc) gl_iswctype((lc), (wc), GL_LOWER)
  877. #define gl_iswdigit(lc, wc) gl_iswctype((lc), (wc), GL_DIGIT)
  878. #define gl_iswalnum(lc, wc) gl_iswctype((lc), (wc), GL_ALNUM)
  879. #define gl_iswspace(lc, wc) gl_iswctype((lc), (wc), GL_SPACE)
  880. #define gl_iswcntrl(lc, wc) gl_iswctype((lc), (wc), GL_CNTRL)
  881. #define gl_iswpunct(lc, wc) gl_iswctype((lc), (wc), GL_PUNCT)
  882. #define gl_iswgraph(lc, wc) gl_iswctype((lc), (wc), GL_GRAPH)
  883. #define gl_iswprint(lc, wc) gl_iswctype((lc), (wc), GL_PRINT)
  884. #define gl_iswxdigit(lc, wc) gl_iswctype((lc), (wc), GL_XDIGIT)
  885. #define gl_iswblank(lc, wc) gl_iswctype((lc), (wc), GL_BLANK)
  886. /* Misc. macros */
  887. /* End-of-file wide character indicator */
  888. #define GL_WEOF ((gl_wchar_t) ~0)
  889. /* Maximum number of bytes necessary to store one character in any codeset */
  890. #define GL_MB_MAX sizeof(gl_wchar_t)
  891. /* Minimum number of bytes necessary to store one character in any codeset */
  892. #define GL_MB_MIN 1
  893. /* The maximum size of a symbolic character name.
  894. * The max symbol name is 70. This is multiplied by 2 because theoretically
  895. * every character may be escaped. The extra 2 is for the enclosing angle
  896. * brackets. This value does not include space for the null terminator
  897. */
  898. #define GL_MAX_SYM_BYTES (70*2)+2
  899. /* The minimum size of a symbolic character name including angle brackets */
  900. #define GL_MIN_SYM_CHAR_NAME 3
  901. /* The macro to apply to the return value of either gl_tomupper or gl_tomlower
  902. * which extracts the number of bytes read from srcmb.
  903. */
  904. #define GL_CASE_CONV_SRC_BYTES(x) \
  905. (((unsigned short) (x)) >> 8)
  906. /* The macro to apply to the return value of either gl_tomupper or gl_tomlower
  907. * which extracts the number of bytes written to dstmb.
  908. */
  909. #define GL_CASE_CONV_DST_BYTES(x) \
  910. (((unsigned short) (x)) & ((unsigned short) 0xff))
  911. /* Prototypes */
  912. /* functions that can be defined outside GLS library */
  913. gl_e_voidptr_t GL_EXPORT GL_CDECL _gl_ext1_malloc(gl_e_voidptr_t, size_t);
  914. gl_e_voidptr_t GL_EXPORT GL_CDECL _gl_ext1_calloc(gl_e_voidptr_t, size_t, size_t);
  915. gl_e_voidptr_t GL_EXPORT GL_CDECL _gl_ext1_realloc(gl_e_voidptr_t, gl_e_voidptr_t, size_t);
  916. void GL_EXPORT GL_CDECL _gl_ext1_free(gl_e_voidptr_t, gl_e_voidptr_t);
  917. gl_e_voidptr_t GL_EXPORT GL_PASCAL _gl_ext_malloc(size_t);
  918. gl_e_voidptr_t GL_EXPORT GL_PASCAL _gl_ext_calloc(size_t, size_t);
  919. gl_e_voidptr_t GL_EXPORT GL_PASCAL _gl_ext_realloc(gl_e_voidptr_t, size_t);
  920. void GL_EXPORT GL_PASCAL _gl_ext_free(gl_e_voidptr_t);
  921. gl_e_charptr_t GL_EXPORT GL_PASCAL _gl_ext_getenv(gl_e_charptr_t);
  922. int GL_EXPORT GL_PASCAL _gl_ext_putenv(gl_e_charptr_t);
  923. gl_e_intptr_t GL_EXPORT GL_PASCAL _gl_ext_errno(gl_gen_expptr_t);
  924. gl_e_fileptr_t GL_EXPORT GL_PASCAL _gl_ext_fopen(gl_e_charptr_t filename, gl_e_charptr_t type);
  925. void GL_EXPORT GL_PASCAL _gl_ext_fclose(gl_e_fileptr_t stream);
  926. int GL_EXPORT GL_PASCAL _gl_ext_fgetc(gl_e_fileptr_t stream);
  927. int GL_EXPORT GL_PASCAL _gl_ext_getc(gl_e_fileptr_t stream);
  928. int GL_EXPORT GL_PASCAL _gl_ext_ungetc(int c, gl_e_fileptr_t stream);
  929. gl_e_charptr_t GL_EXPORT GL_PASCAL _gl_ext_fgets(gl_e_charptr_t s, int n, gl_e_fileptr_t stream);
  930. int GL_EXPORT GL_PASCAL _gl_ext_fwrite(gl_e_charptr_t ptr, int size, int nitems, gl_e_fileptr_t stream);
  931. int GL_EXPORT GL_PASCAL _gl_ext_feof(gl_e_fileptr_t stream);
  932. gl_e_voidptr_t GL_EXPORT GL_PASCAL _gl_ext_UCA(GL_VOIDARGS);
  933. int GL_EXPORT GL_PASCAL _gl_ext_ferror(gl_e_fileptr_t stream);
  934. int GL_EXPORT GL_PASCAL _gl_ext_fseek(gl_e_fileptr_t stream, long offset, int origin);
  935. long GL_EXPORT GL_PASCAL _gl_ext_ftell(gl_e_fileptr_t stream);
  936. int GL_EXPORT GL_PASCAL gl_setextfunc(gl_lc_t loc, int func, gl_uintptr (GL_EPTR funcptr)(GL_VOIDARGS));
  937. void GL_EXPORT GL_PASCAL _gl_reset_ext_func(GL_VOIDARGS);
  938. /* Use GLU for Unicode */
  939. #ifndef GLU_DISABLED
  940. #define GLU_ENABLED
  941. #endif
  942. #ifdef GLU_ENABLED
  943. typedef enum {
  944. GLU_ON = 0,
  945. GLU_OFF
  946. } gl_toggle_t;
  947. int GL_EXPORT GL_PASCAL gl_toggle_glu(gl_lc_t loc, gl_toggle_t mode);
  948. void GL_EXPORT GL_PASCAL gl_useglu(int mode);
  949. int GL_EXPORT GL_PASCAL gl_unload_glu(void);
  950. #else
  951. #define gl_use_glu(arg1, arg2) (0)
  952. #endif /* GLU_ENABLED */
  953. /* library information */
  954. gl_e_charptr_t GL_EXPORT GL_PASCAL gl_version(void);
  955. gl_e_charptr_t GL_EXPORT GL_PASCAL gl_cm_version(void);
  956. gl_e_charptr_t GL_EXPORT GL_PASCAL gl_lc_version(void);
  957. gl_e_charptr_t GL_EXPORT GL_PASCAL gl_cv_version(void);
  958. /* locale object creation/deletion */
  959. int GL_EXPORT GL_PASCAL gl_createlocale(gl_lcptr_t loc);
  960. int GL_EXPORT GL_PASCAL gl_createlocale2(gl_lcptr_t loc, gl_e_charptr_t path);
  961. gl_e_charptr_t GL_EXPORT GL_PASCAL gl_setlocale(gl_lc_t l, int category, gl_e_charptr_t locale_name);
  962. int GL_EXPORT GL_PASCAL gl_lc_load(gl_lcptr_t lc, gl_e_charptr_t lc_spec, gl_e_charptr_t registry, gl_e_charptr_t lc_dir);
  963. void GL_EXPORT GL_PASCAL gl_lc_unload(gl_lc_t l);
  964. int GL_EXPORT GL_PASCAL gl_create_null_locale(gl_lcptr_t loc);
  965. void GL_EXPORT GL_PASCAL gl_free_nonshared_loc(gl_lc_t loc);
  966. void GL_EXPORT GL_PASCAL gl_free_category(gl_lc_t loc, int category);
  967. void GL_EXPORT GL_PASCAL gl_make_null_category(gl_lc_t loc, int category);
  968. int GL_EXPORT GL_PASCAL gl_copy_cat(gl_lc_t dst, gl_lc_t src, int category);
  969. /* codeset information */
  970. int GL_EXPORT GL_PASCAL gl_mb_loc_max(gl_lc_t loc);
  971. int GL_EXPORT GL_PASCAL gl_mb_loc_min(gl_lc_t loc);
  972. /* User-defined character classification */
  973. gl_ctype_t GL_EXPORT GL_PASCAL gl_ctype(gl_lc_t loc, gl_e_charptr_t classname);
  974. int GL_EXPORT GL_PASCAL _gl_im_ismctype(gl_lc_t loc, gl_e_mcharptr_t text, gl_ctype_t charclass);
  975. int GL_EXPORT GL_PASCAL _gl_im_iswctype(gl_lc_t loc, gl_wchar_t wc, gl_ctype_t charclass);
  976. /* Case conversion functions */
  977. #define gl_towupper(lc, srcwc) \
  978. ( GL_LC_SB_TOUPPER_TABLE(lc) ? \
  979. ( ((gl_wchar_t) (srcwc)) <= ((gl_wchar_t) 0xff) ? \
  980. ((gl_wchar_t) GL_LC_SB_TOUPPER_TABLE(lc)[(gl_wchar_t) (srcwc)]) : \
  981. (gl_set_errno(lc, GL_EILSEQ), ((gl_wchar_t) (srcwc))) ) : \
  982. _gl_im_towupper((lc), (gl_wchar_t) (srcwc)) \
  983. )
  984. #define gl_towlower(lc, srcwc) \
  985. ( GL_LC_SB_TOLOWER_TABLE(lc) ? \
  986. ( ((gl_wchar_t) (srcwc)) <= ((gl_wchar_t) 0xff) ? \
  987. ((gl_wchar_t) GL_LC_SB_TOLOWER_TABLE(lc)[(gl_wchar_t) (srcwc)]) : \
  988. (gl_set_errno(lc, GL_EILSEQ), ((gl_wchar_t) (srcwc))) ) : \
  989. _gl_im_towlower((lc), (gl_wchar_t) (srcwc)) \
  990. )
  991. /* Heavy casting to avoid lint warnings: this is just ((1 << 8) | 1) */
  992. #define GL_SBTOMRETVAL \
  993. ((unsigned short) ((((unsigned long) 1) << 8) | ((unsigned short) 1)))
  994. #define gl_tomupper(lc, dstmb, srcmb) \
  995. ( GL_LC_SB_TOUPPER_TABLE(lc) ? \
  996. ((*((gl_mchar_t *) (dstmb))) = \
  997. GL_LC_SB_TOUPPER_TABLE(lc)[*((gl_mchar_t *) (srcmb))], GL_SBTOMRETVAL) : \
  998. _gl_im_tomupper((lc), (dstmb), (srcmb)) \
  999. )
  1000. #define gl_tomlower(lc, dstmb, srcmb) \
  1001. ( GL_LC_SB_TOLOWER_TABLE(lc) ? \
  1002. ((*((gl_mchar_t *) (dstmb))) = \
  1003. GL_LC_SB_TOLOWER_TABLE(lc)[*((gl_mchar_t *) (srcmb))], GL_SBTOMRETVAL) : \
  1004. _gl_im_tomlower((lc), (dstmb), (srcmb)) \
  1005. )
  1006. gl_wchar_t GL_EXPORT GL_PASCAL _gl_im_towupper(gl_lc_t loc, gl_wchar_t wc);
  1007. gl_wchar_t GL_EXPORT GL_PASCAL _gl_im_towlower(gl_lc_t loc, gl_wchar_t wc);
  1008. unsigned short GL_EXPORT GL_PASCAL _gl_im_tomupper(gl_lc_t loc, gl_e_mcharptr_t dst, gl_e_mcharptr_t src);
  1009. unsigned short GL_EXPORT GL_PASCAL _gl_im_tomlower(gl_lc_t loc, gl_e_mcharptr_t dst, gl_e_mcharptr_t src);
  1010. int GL_EXPORT GL_PASCAL gl_tombsupper(gl_lc_t loc, gl_e_mcharptr_t dstmbs, gl_e_mcharptr_t srcmbs);
  1011. int GL_EXPORT GL_PASCAL gl_tombslower(gl_lc_t loc, gl_e_mcharptr_t dstmbs, gl_e_mcharptr_t srcmbs);
  1012. int GL_EXPORT GL_PASCAL gl_towcsupper(gl_lc_t loc, gl_wchar_t *dstwcs, gl_wchar_t *srcwcs);
  1013. int GL_EXPORT GL_PASCAL gl_towcslower(gl_lc_t loc, gl_wchar_t *dstwcs, gl_wchar_t *srcwcs);
  1014. int GL_EXPORT GL_PASCAL gl_case_conv_outbuflen(gl_lc_t lc, int inbufsize);
  1015. int GL_EXPORT GL_PASCAL _ifx_gl_tombsupper(gl_lc_t loc, gl_e_mcharptr_t dstmbs, gl_e_mcharptr_t srcmbs, int len);
  1016. int GL_EXPORT GL_PASCAL _ifx_gl_tombslower_len(gl_lc_t loc, gl_e_mcharptr_t dstmbs, gl_e_mcharptr_t srcmbs, int len);
  1017. int GL_EXPORT GL_PASCAL _ifx_gl_tombsupper_len(gl_lc_t loc, gl_e_mcharptr_t dstmbs, gl_e_mcharptr_t srcmbs, int len);
  1018. /* Multibyte/wide character conversions */
  1019. int GL_EXPORT GL_PASCAL gl_full_mbtowc(gl_lc_t loc, gl_e_wcharptr_t wc, gl_e_mcharptr_t text, int n);
  1020. int GL_EXPORT GL_PASCAL gl_full_wctomb(gl_lc_t loc, gl_e_mcharptr_t dest, gl_wchar_t wc);
  1021. int GL_EXPORT GL_PASCAL _gl_is_wcstombs(gl_lc_t loc, gl_e_mcharptr_t mbs, gl_e_wcharptr_t wcs, int n);
  1022. int GL_EXPORT GL_PASCAL gl_full_wcstombs(gl_lc_t loc, gl_e_mcharptr_t mbs, gl_e_wcharptr_t wcs, int n);
  1023. #ifdef DEFINE_OBSOLETE_FUNCTIONS
  1024. /* Functions required for backward compatibility */
  1025. int GL_EXPORT GL_PASCAL is_wcstombs(gl_lc_t loc, gl_e_mcharptr_t mbs, gl_e_wcharptr_t wcs, int n);
  1026. int GL_EXPORT GL_PASCAL im_ismctype(gl_lc_t loc, gl_e_mcharptr_t text, gl_ctype_t charclass);
  1027. int GL_EXPORT GL_PASCAL im_iswctype(gl_lc_t loc, gl_wchar_t wc, gl_ctype_t charclass);
  1028. unsigned short GL_EXPORT GL_PASCAL im_tomlower(gl_lc_t loc, gl_e_mcharptr_t dst, gl_e_mcharptr_t src);
  1029. gl_wchar_t GL_EXPORT GL_PASCAL im_towlower(gl_lc_t loc, gl_wchar_t wc);
  1030. #endif /* DEFINE_OBSOLETE_FUNCTIONS */
  1031. /* Length functions */
  1032. int GL_EXPORT GL_PASCAL _gl_im_mbslen(gl_lc_t loc, gl_e_mcharptr_t mbs);
  1033. int GL_EXPORT GL_PASCAL gl_wcslen(gl_e_wcharptr_t wcs);
  1034. int GL_EXPORT GL_PASCAL gl_wcsbytes(gl_e_wcharptr_t wcs);
  1035. int GL_EXPORT GL_PASCAL gl_mbsbytes(gl_lc_t l, gl_e_mcharptr_t mbs);
  1036. int GL_EXPORT GL_PASCAL gl_full_mblen(gl_lc_t loc, gl_e_mcharptr_t text, int n);
  1037. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_full_mbsnext(gl_lc_t loc, gl_e_mcharptr_t text);
  1038. int GL_EXPORT GL_PASCAL gl_wclen(gl_lc_t loc, gl_wchar_t wc);
  1039. /* Time Functions */
  1040. int GL_EXPORT GL_PASCAL gl_mbsfinterval(gl_lc_t loc, gl_e_mcharptr_t s, int maxsize, gl_e_mcharptr_t format, struct gl_tm GL_EPTR timptr);
  1041. int GL_EXPORT GL_PASCAL gl_mbsftime(gl_lc_t loc, gl_e_mcharptr_t s, int maxsize, gl_e_mcharptr_t format, struct gl_tm GL_EPTR timptr);
  1042. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_mbsptime(gl_lc_t loc, gl_e_mcharptr_t s, gl_e_mcharptr_t format, struct gl_tm GL_EPTR tmptr, int calg);
  1043. int GL_EXPORT GL_PASCAL gl_wcsftime(gl_lc_t loc, gl_e_wcharptr_t s, int maxsize, gl_e_wcharptr_t format, struct gl_tm GL_EPTR timptr);
  1044. gl_e_wcharptr_t GL_EXPORT GL_PASCAL gl_wcsptime(gl_lc_t loc, gl_e_wcharptr_t s, gl_e_wcharptr_t format, struct gl_tm GL_EPTR tmptr, int calg);
  1045. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_mbsptime_internal(gl_lc_t loc, gl_e_mcharptr_t s, gl_e_mcharptr_t format, struct gl_tm GL_EPTR tmptr, short mdy[3], int calg);
  1046. gl_e_wcharptr_t GL_EXPORT GL_PASCAL gl_wcsptime_internal(gl_lc_t loc, gl_e_wcharptr_t s, gl_e_wcharptr_t format, struct gl_tm GL_EPTR tmptr, short mdy[3], int calg);
  1047. int GL_EXPORT GL_PASCAL gl_getcentury(gl_lc_t loc, int month, int day, int year, int calg);
  1048. int GL_EXPORT GL_PASCAL gl_getcenturyloc(gl_lc_t loc, int month, int day, int year, int calg, int lang);
  1049. int GL_EXPORT GL_PASCAL gl_getcentury_internal(gl_lc_t loc, int month, int day, int year, int ref_month, int ref_day, int ref_year, int calg);
  1050. int GL_EXPORT GL_PASCAL gl_getcenturyloc_internal(gl_lc_t loc, int month, int day, int year, int ref_month, int ref_day, int ref_year, int calg, int lang);
  1051. int GL_EXPORT GL_PASCAL gl_mbstimeinfo_ext(gl_lc_t loc, int infotype, gl_mchar_t GL_EPTR GL_EPTR GL_EPTR strs, int GL_EPTR count, void GL_EPTR(GL_PASCAL GL_EPTR fptr_malloc)(size_t));
  1052. int GL_EXPORT GL_PASCAL gl_mbstimeinfo(gl_lc_t loc, int infotype, gl_mchar_t GL_EPTR GL_EPTR GL_EPTR strs, int GL_EPTR count);
  1053. int GL_EXPORT GL_PASCAL gl_mbsfmtexpand(gl_lc_t loc, int fmttype, gl_mchar_t GL_EPTR format);
  1054. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_get_ltime_fmts(gl_lc_t loc, int field);
  1055. int GL_EXPORT GL_PASCAL gl_get_era_count(gl_lc_t loc);
  1056. /* Collation routines */
  1057. #define gl_wcscoll(lc, wcs1, wcs2) ( GL_IS_CODESET_ORDER(lc) ? \
  1058. gl_wcscmp((wcs1), (wcs2)) : \
  1059. gl_full_wcscoll((lc), (wcs1), (wcs2)) )
  1060. int GL_EXPORT GL_PASCAL gl_full_wcscoll(gl_lc_t l, gl_e_wcharptr_t wcs1, gl_e_wcharptr_t wcs2);
  1061. int GL_EXPORT GL_PASCAL gl_wcscmp(gl_e_wcharptr_t wcs1, gl_e_wcharptr_t wcs2);
  1062. int GL_EXPORT GL_PASCAL gl_wcsncmp(gl_e_wcharptr_t wcs1, gl_e_wcharptr_t wcs2, int n);
  1063. int GL_EXPORT GL_PASCAL gl_full_mbscmp(gl_lc_t loc, gl_e_mcharptr_t mbs1, gl_e_mcharptr_t mbs2);
  1064. int GL_EXPORT GL_PASCAL gl_full_mbsncmp(gl_lc_t loc, gl_e_mcharptr_t mbs1, gl_e_mcharptr_t mbs2, int nc);
  1065. int GL_EXPORT GL_PASCAL gl_wcsxfrm(gl_lc_t loc, gl_e_charptr_t dst, gl_e_wcharptr_t wcs, int nb);
  1066. int GL_EXPORT GL_PASCAL gl_full_mbsxfrm(gl_lc_t loc, char *dst, gl_e_mcharptr_t mbs, int nb);
  1067. /* Codeset conversion */
  1068. int GL_EXPORT GL_PASCAL gl_cv_open(gl_iconvptr_t cd, gl_e_charptr_t to_lc_spec, gl_e_charptr_t from_lc_spec);
  1069. int GL_EXPORT GL_PASCAL gl_iconv_open(gl_iconvptr_t cd, gl_e_charptr_t targetfile, gl_e_charptr_t sourcefile);
  1070. int GL_EXPORT GL_PASCAL gl_iconv_open1(gl_iconvptr_t cd, gl_e_charptr_t filename);
  1071. int GL_EXPORT GL_PASCAL gl_cv_load(gl_iconvptr_t cv, gl_e_charptr_t to_lc_spec, gl_e_charptr_t from_lc_spec, gl_e_charptr_t registry, gl_e_charptr_t cv_dir);
  1072. int GL_EXPORT GL_PASCAL gl_cv_unload(gl_cv_t cd);
  1073. int GL_EXPORT GL_PASCAL gl_miconv(gl_cv_t cd, gl_e_mcharptr_t GL_EPTR inmbs, gl_e_intptr_t inlen, gl_e_mcharptr_t GL_EPTR outmbs, gl_e_intptr_t outlen, gl_e_intptr_t sub);
  1074. int GL_EXPORT GL_PASCAL gl_cv_mconv(gl_cv_t cd, gl_cv_state_t GL_EPTR st, gl_e_mcharptr_t GL_EPTR inmbs, gl_e_intptr_t inlen, gl_e_mcharptr_t GL_EPTR outmbs, gl_e_intptr_t outlen, gl_e_intptr_t sub);
  1075. double GL_EXPORT GL_PASCAL gl_iconv_expansion(gl_cv_t cd);
  1076. int GL_EXPORT GL_PASCAL gl_cv_outbuflen(gl_cv_t cd, int inbufsize);
  1077. int GL_EXPORT GL_PASCAL gl_mconvlen(gl_cv_t cd, gl_cv_state_t GL_EPTR st, gl_e_mcharptr_t GL_EPTR inmbs, gl_e_intptr_t inlen, gl_e_intptr_t outlen, gl_e_intptr_t sub);
  1078. gl_cvfns_ref_t GL_EXPORT GL_PASCAL gl_add_cvfns(gl_cvfns_ref_t prev_ref, gl_cv_funcdef_t GL_EPTR fndef);
  1079. int GL_EXPORT GL_PASCAL gl_cv_fnopen(gl_iconvptr_t cd, gl_e_charptr_t to_lc_spec, gl_e_charptr_t from_lc_spec, gl_cvfns_ref_t fns_ref);
  1080. /* String handling functions */
  1081. int GL_EXPORT GL_PASCAL gl_wcsntslen(gl_lc_t l, gl_e_wcharptr_t wcs);
  1082. int GL_EXPORT GL_PASCAL gl_mbsntslen(gl_lc_t l, gl_e_mcharptr_t mbs);
  1083. int GL_EXPORT GL_PASCAL gl_mbsntsbytes(gl_lc_t l, gl_e_mcharptr_t mbs);
  1084. int GL_EXPORT GL_PASCAL gl_wcswidth(gl_lc_t l, gl_e_wcharptr_t wcs, int n);
  1085. int GL_EXPORT GL_PASCAL gl_mbswidth(gl_lc_t l, gl_e_mcharptr_t mbs, int n);
  1086. int GL_EXPORT GL_PASCAL gl_wcspwidth(gl_lc_t l, gl_e_wcharptr_t wcs, gl_e_wcharptr_t p);
  1087. int GL_EXPORT GL_PASCAL gl_mbspwidth(gl_lc_t l, gl_e_mcharptr_t mbs, gl_e_mcharptr_t p);
  1088. int GL_EXPORT GL_PASCAL gl_wcwidth(gl_lc_t l, gl_wchar_t wc);
  1089. int GL_EXPORT GL_PASCAL gl_mbwidth(gl_lc_t l, gl_e_mcharptr_t mb);
  1090. int GL_EXPORT GL_PASCAL gl_mbwidth_PUA(gl_lc_t l, gl_e_mcharptr_t mb);
  1091. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_full_getmbsi(gl_lc_t l, gl_e_mcharptr_t mbs, int i);
  1092. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_full_putmbsi(gl_lc_t l, gl_e_mcharptr_t mbs, int i, gl_e_mcharptr_t mdc);
  1093. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_full_mbsprev(gl_lc_t l, gl_e_mcharptr_t mbs, gl_e_mcharptr_t mbp);
  1094. int GL_EXPORT GL_PASCAL gl_mbsterm(gl_lc_t l, gl_e_mcharptr_t mbs);
  1095. int GL_EXPORT GL_PASCAL gl_ismbsterm(gl_lc_t l, gl_e_mcharptr_t mbs);
  1096. void GL_EXPORT GL_PASCAL gl_wcsntstrunc(gl_lc_t l, gl_e_wcharptr_t wcs);
  1097. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_mbsntstrunc(gl_lc_t l, gl_e_mcharptr_t mbs);
  1098. gl_e_wcharptr_t GL_EXPORT GL_PASCAL gl_wcscat(gl_e_wcharptr_t wcs1, gl_e_wcharptr_t wcs2);
  1099. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_full_mbscat(gl_lc_t l, gl_e_mcharptr_t mbs1, gl_e_mcharptr_t mbs2);
  1100. gl_e_wcharptr_t GL_EXPORT GL_PASCAL gl_wcsncat(gl_e_wcharptr_t wcs1, gl_e_wcharptr_t wcs2, int n);
  1101. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_mbsncat(gl_lc_t l, gl_e_mcharptr_t mbs1, gl_e_mcharptr_t mbs2, int n);
  1102. gl_e_wcharptr_t GL_EXPORT GL_PASCAL gl_wcscpy(gl_e_wcharptr_t wcs1, gl_e_wcharptr_t wcs2);
  1103. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_full_mbscpy(gl_lc_t l , gl_e_mcharptr_t mbs1, gl_e_mcharptr_t mbs2);
  1104. gl_e_wcharptr_t GL_EXPORT GL_PASCAL gl_wcsncpy(gl_e_wcharptr_t wcs1, gl_e_wcharptr_t wcs2, int n);
  1105. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_mbsncpy(gl_lc_t l, gl_e_mcharptr_t mbs1, gl_e_mcharptr_t mbs2, int n);
  1106. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_full_mbschr(gl_lc_t l , gl_e_mcharptr_t mbs, gl_e_mcharptr_t mb);
  1107. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_full_mbsrchr(gl_lc_t l , gl_e_mcharptr_t mbs, gl_e_mcharptr_t mb);
  1108. int GL_EXPORT GL_PASCAL gl_full_mbscspn(gl_lc_t l, gl_e_mcharptr_t mbs1, gl_e_mcharptr_t mbs2);
  1109. int GL_EXPORT GL_PASCAL gl_full_mbsspn(gl_lc_t l, gl_e_mcharptr_t mbs1, gl_e_mcharptr_t mbs2);
  1110. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_full_mbspbrk(gl_lc_t l, gl_e_mcharptr_t mbsp1, gl_e_mcharptr_t mbsp2);
  1111. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_full_mbsmbs(gl_lc_t l, gl_e_mcharptr_t mbs1, gl_e_mcharptr_t mbs2);
  1112. gl_e_wcharptr_t GL_EXPORT GL_PASCAL gl_wcschr(gl_lc_t loc, gl_e_wcharptr_t wcs, gl_wchar_t wc);
  1113. gl_e_wcharptr_t GL_EXPORT GL_PASCAL gl_wcsrchr(gl_lc_t loc, gl_e_wcharptr_t wcs, gl_wchar_t wc);
  1114. int GL_EXPORT GL_PASCAL gl_wcsspn(gl_lc_t loc, gl_e_wcharptr_t wcs1, gl_e_wcharptr_t wcs2);
  1115. int GL_EXPORT GL_PASCAL gl_wcscspn(gl_lc_t loc, gl_e_wcharptr_t wcs1, gl_e_wcharptr_t wcs2);
  1116. gl_e_wcharptr_t GL_EXPORT GL_PASCAL gl_wcswcs(gl_lc_t loc, gl_e_wcharptr_t wcs1, gl_e_wcharptr_t wcs2);
  1117. gl_e_wcharptr_t GL_EXPORT GL_PASCAL gl_wcspbrk(gl_lc_t loc, gl_e_wcharptr_t wcs1, gl_e_wcharptr_t wcs2);
  1118. /* Locale information functions */
  1119. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_nl_langinfo(gl_lc_t loc, int item);
  1120. gl_e_wcharptr_t GL_EXPORT GL_PASCAL gl_wc_nl_langinfo(gl_lc_t loc, int item);
  1121. typedef struct gl_conv GL_EPTR gl_e_glconvptr_t;
  1122. /* the above typedef is only to get around Microsoft Visual C++ 2.0
  1123. parse problem with the following line */
  1124. gl_e_glconvptr_t GL_EXPORT GL_PASCAL gl_localeconv(gl_lc_t loc);
  1125. /* Numeric functions */
  1126. long GL_EXPORT GL_PASCAL gl_wcstol(gl_lc_t loc, gl_e_wcharptr_t wcs, gl_e_wcharptr_t GL_EPTR endptr, int base, int grouping);
  1127. long GL_EXPORT GL_PASCAL gl_mbstol(gl_lc_t loc, gl_e_mcharptr_t mbs, gl_e_mcharptr_t GL_EPTR endptr, int base, int grouping);
  1128. unsigned long GL_EXPORT GL_PASCAL gl_wcstoul(gl_lc_t loc, gl_e_wcharptr_t wcs, gl_e_wcharptr_t GL_EPTR endptr, int base, int grouping);
  1129. unsigned long GL_EXPORT GL_PASCAL gl_mbstoul(gl_lc_t loc, gl_e_mcharptr_t mbs, gl_e_mcharptr_t GL_EPTR endptr, int base, int grouping);
  1130. void GL_EXPORT GL_PASCAL gl_ltowcs(gl_lc_t loc, gl_e_wcharptr_t wcs, size_t maxsize, long int int_data, int base, int grouping);
  1131. void GL_EXPORT GL_PASCAL gl_ltombs(gl_lc_t loc, gl_e_mcharptr_t mbs, size_t maxsize, long int int_data, int base, int grouping);
  1132. void GL_EXPORT GL_PASCAL gl_ultowcs(gl_lc_t loc, gl_e_wcharptr_t wcs, size_t maxsize, unsigned long int int_data, int base, int grouping);
  1133. void GL_EXPORT GL_PASCAL gl_ultombs(gl_lc_t loc, gl_e_mcharptr_t mbs, size_t maxsize, unsigned long int_data, int base, int grouping);
  1134. double GL_EXPORT GL_PASCAL gl_wcstod(gl_lc_t loc, gl_e_wcharptr_t wcs, gl_e_wcharptr_t GL_EPTR endptr, int grouping);
  1135. double GL_EXPORT GL_PASCAL gl_mbstod(gl_lc_t loc, gl_e_mcharptr_t mbs, gl_e_mcharptr_t GL_EPTR endptr, int grouping);
  1136. /* float/currency string conversion functions */
  1137. int GL_EXPORT GL_CDECL gl_wcsfmon(gl_lc_t l, gl_e_wcharptr_t wcs, int maxchars, gl_e_wcharptr_t format, ...);
  1138. gl_e_wcharptr_t GL_EXPORT GL_CDECL gl_wcspmon(gl_lc_t l, gl_e_wcharptr_t wcs, gl_e_wcharptr_t format, ...);
  1139. int GL_EXPORT GL_CDECL gl_wcsprintf(gl_lc_t l, gl_e_wcharptr_t wcs, int maxchars, gl_e_wcharptr_t format, ...);
  1140. int GL_EXPORT GL_CDECL gl_wcsscanf(gl_lc_t l, gl_e_wcharptr_t wcs, gl_e_wcharptr_t format, ...);
  1141. int GL_EXPORT GL_CDECL gl_mbsfmon(gl_lc_t l, gl_e_mcharptr_t mbs, int maxbytes, gl_e_mcharptr_t format, ...);
  1142. gl_e_mcharptr_t GL_EXPORT GL_CDECL gl_mbspmon(gl_lc_t l, gl_e_mcharptr_t mbs, gl_e_mcharptr_t format, ...);
  1143. int GL_EXPORT GL_CDECL gl_mbsprintf(gl_lc_t l, gl_e_mcharptr_t mbs, int maxbytes, gl_e_mcharptr_t format, ...);
  1144. int GL_EXPORT GL_CDECL gl_mbsscanf(gl_lc_t l, gl_e_mcharptr_t mbs, gl_e_mcharptr_t format, ...);
  1145. /* Input and output functions */
  1146. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_fputmb(gl_lc_t loc, gl_e_mcharptr_t mb, gl_e_fileptr_t fp);
  1147. gl_wchar_t GL_EXPORT GL_PASCAL gl_fputwc(gl_lc_t loc, gl_wchar_t wc, gl_e_fileptr_t fp);
  1148. int GL_EXPORT GL_PASCAL gl_fputmbs(gl_lc_t loc, gl_e_mcharptr_t mbs, gl_e_fileptr_t fp);
  1149. int GL_EXPORT GL_PASCAL gl_fputwcs(gl_lc_t loc, gl_e_wcharptr_t wcs, gl_e_fileptr_t fp);
  1150. int GL_EXPORT GL_PASCAL gl_full_fgetmb(gl_lc_t loc, gl_e_mcharptr_t mb, gl_e_fileptr_t fp);
  1151. gl_wchar_t GL_EXPORT GL_PASCAL gl_full_fgetwc(gl_lc_t loc, gl_e_fileptr_t fp);
  1152. gl_e_mcharptr_t GL_EXPORT GL_PASCAL gl_fgetmbs(gl_lc_t loc, gl_e_mcharptr_t mbs, int n, gl_e_fileptr_t fp);
  1153. gl_e_wcharptr_t GL_EXPORT GL_PASCAL gl_fgetwcs(gl_lc_t loc, gl_e_wcharptr_t wcs, int n, gl_e_fileptr_t fp);
  1154. int GL_EXPORT GL_PASCAL gl_getmb(gl_lc_t loc, gl_mchar_t *buf, int (GL_PASCAL *fp)(void *v), void *v, int *bytes_read);
  1155. int GL_EXPORT GL_PASCAL gl_putmb(gl_lc_t loc, gl_mchar_t *buf, int buflen, int (GL_PASCAL *fp)(gl_mchar_t mb, void *v), void *v, int *bytes_written);
  1156. /* gl_charoffset() function */
  1157. int GL_EXPORT GL_PASCAL gl_full_charoffset(gl_lc_t loc, gl_e_mcharptr_t mbs, gl_e_mcharptr_t mbp, gl_e_intptr_t len);
  1158. #if defined(GL_DLL)
  1159. void GL_EXPORT GL_PASCAL gl_fclose(gl_e_fileptr_t stream);
  1160. int GL_EXPORT GL_PASCAL gl_feof(gl_e_fileptr_t stream);
  1161. int GL_EXPORT GL_PASCAL gl_ferror(gl_e_fileptr_t stream);
  1162. gl_e_fileptr_t GL_EXPORT GL_PASCAL gl_fopen(gl_e_charptr_t file, gl_e_charptr_t mode);
  1163. int GL_EXPORT GL_PASCAL gl_fseek(gl_e_fileptr_t stream, long offset, int origin);
  1164. long GL_EXPORT GL_PASCAL gl_ftell(gl_e_fileptr_t stream);
  1165. #else
  1166. #define gl_fclose(x) fclose((x))
  1167. #define gl_feof(x) feof((x))
  1168. #define gl_ferror(x) ferror((x))
  1169. #define gl_fopen(x,y) fopen((x),(y))
  1170. #define gl_fseek(x,y,z) fseek((x),(y),(z))
  1171. #define gl_ftell(x) ftell((x))
  1172. #endif
  1173. /* Codeset name to codeset number conversion functions */
  1174. unsigned short GL_EXPORT GL_PASCAL gl_lc_spec2cs_num(gl_gen_expptr_t expptr, gl_e_charptr_t spec, gl_e_charptr_t registry);
  1175. void GL_EXPORT GL_PASCAL gl_cs_nums2cv_fname(gl_gen_expptr_t expptr, unsigned short from_cs_number, unsigned short to_cs_number, gl_e_charptr_t buf, gl_e_charptr_t lc_path);
  1176. int GL_EXPORT GL_PASCAL gl_lc_spec2lc_fname(gl_gen_expptr_t expptr, gl_e_charptr_t buf, gl_e_charptr_t spec, gl_e_charptr_t registry, gl_e_charptr_t lc_path);
  1177. int GL_EXPORT GL_PASCAL gl_lc_spec2msg_dname(gl_gen_expptr_t expptr, gl_e_charptr_t buf, gl_e_charptr_t spec, gl_e_charptr_t registry, gl_e_charptr_t lc_path);
  1178. int GL_EXPORT GL_PASCAL gl_lc_fname2lc_pieces(gl_gen_expptr_t expptr, gl_e_charptr_t fname, gl_e_charptr_t lname, gl_e_charptr_t cname, gl_e_charptr_t mname);
  1179. int GL_EXPORT GL_PASCAL gl_lc_pieces2lc_spec(gl_gen_expptr_t expptr, gl_e_charptr_t lname, gl_e_charptr_t cname, gl_e_charptr_t mname, gl_e_charptr_t lc_spec);
  1180. int GL_EXPORT GL_PASCAL gl_lc_spec2lc_norm(gl_gen_expptr_t expptr, gl_e_charptr_t lc_spec, gl_e_charptr_t lc_norm, gl_e_charptr_t registry);
  1181. void GL_EXPORT GL_PASCAL gl_cache_registry(gl_gen_expptr_t expptr, gl_e_charptr_t registry);
  1182. void GL_EXPORT GL_PASCAL gl_free_registry_cache(GL_VOIDARGS);
  1183. unsigned short GL_EXPORT GL_PASCAL gl_cs_nums2ccsid(gl_gen_expptr_t expptr, unsigned short cs_number);
  1184. unsigned short GL_EXPORT GL_PASCAL gl_ccsid2cs_nums(gl_gen_expptr_t expptr, unsigned short ccsid);
  1185. #ifdef GLU_ENABLED
  1186. int GL_EXPORT GL_PASCAL gl_init_glu(gl_gen_expptr_t expptr);
  1187. int GL_EXPORT GL_PASCAL gl_init_glu_oninit(gl_gen_expptr_t expptr);
  1188. int GL_EXPORT GL_PASCAL gl_init_glu_dll(gl_gen_expptr_t expptr);
  1189. #endif /* GLU_ENABLED */
  1190. int GL_EXPORT GL_PASCAL gl_is_lc_spec(gl_gen_expptr_t expptr, gl_e_charptr_t lc_spec);
  1191. int GL_EXPORT GL_PASCAL gl_lc_fname2lc_spec(gl_gen_expptr_t expptr, gl_e_charptr_t lc_fname, gl_e_charptr_t lc_spec, gl_e_charptr_t lc_path);
  1192. int GL_EXPORT GL_PASCAL gl_lc_spec2category(gl_gen_expptr_t expptr, gl_e_charptr_t lc_spec, int category, gl_e_charptr_t lc_short, gl_e_charptr_t registry);
  1193. int GL_EXPORT GL_PASCAL gl_lc_spec2lc_short(gl_gen_expptr_t expptr, gl_e_charptr_t lc_spec, gl_e_charptr_t lc_short, gl_e_charptr_t registry);
  1194. int GL_EXPORT GL_PASCAL gl_lc_short2lc_long(gl_gen_expptr_t expptr, gl_e_charptr_t lc_spec, gl_e_charptr_t lc_long, gl_e_charptr_t registry);
  1195. /* memory management functions */
  1196. void GL_EXPORT GL_PASCAL gl_destroystring(gl_e_charptr_t string);
  1197. /* charmap functions */
  1198. int GL_EXPORT GL_PASCAL gl_mbstosyms(gl_cm_t cm, char *syms, int max_sym_bytes, gl_mchar_t** mbs, int len);
  1199. int GL_EXPORT GL_PASCAL gl_wcstosyms(gl_cm_t cm, char *syms, int max_sym_bytes, gl_wchar_t** wcs, int len);
  1200. int GL_EXPORT GL_PASCAL gl_symstombs(gl_cm_t cm, gl_mchar_t* mbs, int max_mbs_bytes, char **syms);
  1201. int GL_EXPORT GL_PASCAL gl_symstowcs(gl_cm_t cm, gl_wchar_t* wcs, int max_wcs_chars, char **syms);
  1202. int GL_EXPORT GL_PASCAL gl_mbtosymlist(gl_cm_t cm, char *symlist, int listlen, gl_mchar_t *mb, int mblen);
  1203. int GL_EXPORT GL_PASCAL gl_cm_load(gl_cm_t *cm, char *cm_spec, char *registry, char *cm_dir);
  1204. void GL_EXPORT GL_PASCAL gl_cm_unload(gl_cm_t cm);
  1205. int GL_EXPORT GL_PASCAL gl_mb_cm_max(gl_cm_t cm);
  1206. int GL_EXPORT GL_PASCAL gl_mb_cm_min(gl_cm_t cm);
  1207. int GL_EXPORT GL_PASCAL gl_cm_mblen(gl_cm_t cm, gl_e_mcharptr_t text, int n);
  1208. int GL_EXPORT GL_PASCAL gl_cm_cmpver(gl_cm_t);
  1209. int GL_EXPORT GL_PASCAL gl_cm_srcver(gl_cm_t);
  1210. gl_e_charptr_t GL_EXPORT GL_PASCAL gl_cm_csname(gl_cm_t);
  1211. int GL_EXPORT GL_PASCAL _gl_ext_currdate(short GL_EPTR);
  1212. int GL_EXPORT GL_PASCAL _gl_ext_currtime(gl_tm_t GL_EPTR);
  1213. /* ATG LIKE/MATCHES for NCHAR functions */
  1214. int GL_EXPORT GL_PASCAL gl_mbsCollBound(gl_lc_t lc, gl_mchar_t *in, int mode, gl_mchar_t *out, int maxbytes);
  1215. int GL_EXPORT GL_PASCAL gl_mbsSortKeyCollBound(gl_lc_t lc, gl_mchar_t *in, int mode, gl_mchar_t *out, int maxbytes);
  1216. int GL_EXPORT GL_PASCAL gl_getpassdirection(gl_lc_t lc, int passnum);
  1217. int GL_EXPORT GL_PASCAL gl_iscompchar(gl_lc_t lc, gl_mchar_t *s);
  1218. int GL_EXPORT GL_PASCAL gl_iscompchar_thai(gl_lc_t lc, gl_mchar_t *s);
  1219. int GL_EXPORT GL_PASCAL gl_nextprimweight(gl_lc_t lc, gl_mchar_t *c, int iscomplete, gl_mchar_t *w);
  1220. int GL_EXPORT GL_PASCAL gl_prevprimweight(gl_lc_t lc, gl_mchar_t *c, int iscomplete, gl_mchar_t *w);
  1221. int GL_EXPORT GL_PASCAL gl_IsSpecialLocale(gl_lc_t lc);
  1222. int GL_EXPORT GL_CDECL gl_wcsfnum(gl_lc_t l, gl_e_wcharptr_t wcs, int maxchars, gl_e_wcharptr_t format, ...);
  1223. int GL_EXPORT GL_CDECL gl_wcspnum(gl_lc_t l, gl_e_wcharptr_t wcs, gl_e_wcharptr_t format, ...);
  1224. int GL_EXPORT GL_CDECL gl_mbsfnum(gl_lc_t l, gl_e_mcharptr_t mbs, int maxbytes, gl_e_mcharptr_t format, ...);
  1225. int GL_EXPORT GL_CDECL gl_mbspnum(gl_lc_t l, gl_e_mcharptr_t mbs, gl_e_mcharptr_t format, ...);
  1226. /***************************************************************************
  1227. *
  1228. * The remainder of this include file contains prototypes and macros
  1229. * related to user level functions
  1230. *
  1231. ***************************************************************************
  1232. */
  1233. /* success and failure indicators */
  1234. #define IFX_GL_SUCCESS 0
  1235. #define IFX_GL_FAILURE -1
  1236. /* Defines for error numbers mapped to error numbers in gls.h */
  1237. #define IFX_GL_NOERRNO GL_NOERRNO /* No error has occurred */
  1238. #define IFX_GL_EILSEQ GL_EILSEQ /* Invalid MB sequence */
  1239. #define IFX_GL_ENULLPTR GL_ENULLPTR /* NULL Pointer to a function */
  1240. #define IFX_GL_ENOMEM GL_ENOMEM /* memory allocation failure */
  1241. #define IFX_GL_EINDEXRANGE GL_EINDEXRANGE /* index out of bounds */
  1242. #define IFX_GL_EINVPTR GL_EINVPTR /* End pointer < begin pointer */
  1243. #define IFX_GL_ERANGE GL_ERANGE /* BASE of number is out of range. */
  1244. #define IFX_GL_EINVAL GL_EINVAL /* Invalid wcs or mbs strings */
  1245. #define IFX_GL_FILEERR GL_FILEERR /* input file could not be read */
  1246. #define IFX_GL_PARAMERR GL_PARAMERR /* parameter out of bounds */
  1247. #define IFX_GL_CATASTROPHE GL_CATASTROPHE /* internal error; undefined result */
  1248. #define IFX_GL_BADFILEFORM GL_BADFILEFORM /* file format was invalid */
  1249. #define IFX_GL_INVALIDLOC GL_INVALIDLOC /* locale codesets are inconsistent */
  1250. #define IFX_GL_EIO GL_EIO /* I/O error */
  1251. #define IFX_GL_E2BIG GL_E2BIG /* Operation would overflow buffer */
  1252. #define IFX_GL_EBADF GL_EBADF /* Bad handle passed to function */
  1253. #define IFX_GL_EOF GL_EOF /* End of file on input stream */
  1254. #define IFX_GL_EUNKNOWN GL_EUNKNOWN /* Unknown system error has occurred */
  1255. #define IFX_GL_UNLOADEDCAT GL_UNLOADEDCAT /* Can't copy from unloaded category */
  1256. #define IFX_GL_LOADEDCAT GL_LOADEDCAT /* Can't copy into a loaded category */
  1257. #define IFX_GL_ENOSYS GL_ENOSYS /* function is not supported */
  1258. #define IFX_GL_ELOCTOOWIDE GL_ELOCTOOWIDE /* has chars too wide for library */
  1259. #define IFX_GL_INVALIDFMT GL_INVALIDFMT /* Invalid formatted argument string */
  1260. #define IFX_GL_EFRACRANGE GL_EFRACRANGE /* Fraction of Second out of bounds */
  1261. #define IFX_GL_ESECONDRANGE GL_ESECONDRANGE /* Second out of bounds */
  1262. #define IFX_GL_EMINUTERANGE GL_EMINUTERANGE /* Minute out of bounds */
  1263. #define IFX_GL_EHOURRANGE GL_EHOURRANGE /* Hour out of bounds */
  1264. #define IFX_GL_EDAYRANGE GL_EDAYRANGE /* Day number out of bounds */
  1265. #define IFX_GL_EWKDAYRANGE GL_EWKDAYRANGE /* Week Day number out of bounds */
  1266. #define IFX_GL_EYDAYRANGE GL_EYDAYRANGE /* Year Day number out of bounds */
  1267. #define IFX_GL_EMONTHRANGE GL_EMONTHRANGE /* Month number out of bounds */
  1268. #define IFX_GL_EYEARRANGE GL_EYEARRANGE /* Year number out of bounds */
  1269. #define IFX_GL_EERAOFFRANGE GL_EERAOFFRANGE /* Era Offset out of bounds */
  1270. #define IFX_GL_BADFRAC GL_BADFRAC /* Fraction could not be scanned */
  1271. #define IFX_GL_BADSECOND GL_BADSECOND /* Second could not be scanned */
  1272. #define IFX_GL_BADMINUTE GL_BADMINUTE /* Minute could not be scanned */
  1273. #define IFX_GL_BADHOUR GL_BADHOUR /* Hour could not be scanned */
  1274. #define IFX_GL_BADDAY GL_BADDAY /* Month Day could not be scanned */
  1275. #define IFX_GL_BADWKDAY GL_BADWKDAY /* Week Day could not be scanned */
  1276. #define IFX_GL_BADYDAY GL_BADYDAY /* Year Day could not be scanned */
  1277. #define IFX_GL_BADMONTH GL_BADMONTH /* Month could not be scanned */
  1278. #define IFX_GL_BADYEAR GL_BADYEAR /* Year could not be scanned */
  1279. #define IFX_GL_BADERANAME GL_BADERANAME /* Invalid Era name */
  1280. #define IFX_GL_BADERAOFFSET GL_BADERAOFFSET /* Invalid Era offset */
  1281. #define IFX_GL_BADFMTMOD GL_BADFMTMOD /* Invalid Format modifer */
  1282. #define IFX_GL_BADFMTWP GL_BADFMTWP /* Invalid width/precision */
  1283. #define IFX_GL_BADINPUT GL_BADINPUT /* Input string doesn't match format */
  1284. #define IFX_GL_NOPOINT GL_NOPOINT /* Missing decimal point in input */
  1285. #define IFX_GL_BADMONTHSTR GL_BADMONTHSTR /* Month string could not be scanned */
  1286. #define IFX_GL_BADFMTMOD GL_BADFMTMOD /* Invalid Format modifer */
  1287. #define IFX_GL_BADFMTWP GL_BADFMTWP /* Invalid width/precision */
  1288. #define IFX_GL_BADINPUT GL_BADINPUT /* Input string doesn't match format */
  1289. #define IFX_GL_NOPOINT GL_NOPOINT /* Missing decimal point in input */
  1290. #define IFX_GL_BADMONTHSTR GL_BADMONTHSTR /* Month string could not be scanned */
  1291. #define IFX_GL_BADERASPEC GL_BADERASPEC /* Couldn't load era from locale */
  1292. #define IFX_GL_BADCALENDAR GL_BADCALENDAR /* Unsupported calendar in LC_TIME */
  1293. #define IFX_GL_BADOBJVER GL_BADOBJVER /* Wrong lc, cm or cv object version */
  1294. #define IFX_GL_BADALTDATE GL_BADALTDATE /* Could not convert %Z information */
  1295. #define IFX_GL_NOSYMMAP GL_NOSYMMAP /* character/symbol not in charmap */
  1296. #define IFX_GL_BADSYM GL_BADSYM /* invalid symbolic character name */
  1297. #define IFX_GL_ELOCLOAD GL_ELOCLOAD /* Could not load locale */
  1298. #define IFX_GL_TERMMISMAT GL_TERMMISMAT /* str termination params mis-match */
  1299. #define IFX_GL_NOCTYPE GL_NOCTYPE /* GL_CTYPE is not loaded */
  1300. #define IFX_GL_LOCMISMAT GL_LOCMISMAT /* loaded codesets are not same */
  1301. /* Misc. macros */
  1302. /* The macro to apply to the return value of either gl_tomupper or gl_tomlower
  1303. * which extracts the number of bytes read from srcmb.
  1304. */
  1305. #define IFX_GL_CASE_CONV_SRC_BYTES(x) \
  1306. (((unsigned short) (x)) >> 8)
  1307. /* The macro to apply to the return value of either gl_tomupper or gl_tomlower
  1308. * which extracts the number of bytes written to dstmb.
  1309. */
  1310. #define IFX_GL_CASE_CONV_DST_BYTES(x) \
  1311. (((unsigned short) (x)) & ((unsigned short) 0xff))
  1312. /*
  1313. * Additional macros
  1314. */
  1315. #define IFX_GL_NULL (-1)
  1316. #define IFX_GL_NO_LIMIT IFX_GL_MB_MAX
  1317. #define IFX_GL_IS_CODESET_ORDER GL_IS_CODESET_ORDER(gl_locale)
  1318. #define IFX_GL_IS_SINGLE_BYTE GL_IS_SINGLE_BYTE(gl_locale)
  1319. #define IFX_GL_MB_MAX GL_MB_MAX
  1320. #define IFX_GL_PROC_CS ((char *)gl_nl_langinfo(gl_locale, GL_CODESET))
  1321. /*
  1322. * Prototypes for internal implementations
  1323. */
  1324. /* multi-character collation elements */
  1325. int GL_EXPORT GL_PASCAL ifx_gl_complen(register gl_lc_t lc, register gl_mchar_t *s);
  1326. int GL_EXPORT GL_PASCAL ifx_gl_complen_thai(gl_lc_t lc, gl_mchar_t *s);
  1327. /* Character Classification functions */
  1328. int GL_EXPORT GL_PASCAL _ifx_gl_im_ismctype(gl_lc_t lc, gl_mchar_t * mbs1, int bytelen1, gl_ctype_t ctype);
  1329. /* Character Case Conversion */
  1330. unsigned short GL_EXPORT GL_PASCAL _ifx_gl_im_tomupper(gl_lc_t loc, gl_e_mcharptr_t dst, gl_e_mcharptr_t src, int bytelen);
  1331. unsigned short GL_EXPORT GL_PASCAL _ifx_gl_im_tomlower(gl_lc_t loc, gl_e_mcharptr_t dst, gl_e_mcharptr_t src, int bytelen);
  1332. #define ifx_gl_case_conv_outbuflen(x) gl_case_conv_outbuflen((gl_locale), (x))
  1333. /* Character/String Comparison */
  1334. int GL_EXPORT GL_PASCAL _ifx_gl_wcscoll(gl_lc_t lc, gl_wchar_t * wcs1, int charlen1, gl_wchar_t * wcs2, int charlen2);
  1335. int GL_EXPORT GL_PASCAL _ifx_gl_full_wcscoll(gl_lc_t l, gl_e_wcharptr_t wcs1, int wclen1, gl_e_wcharptr_t wcs2, int wclen2);
  1336. int GL_EXPORT GL_PASCAL _ifx_gl_im_mbfscoll(gl_lc_t loc, gl_e_mcharptr_t text1, int bytelen1, gl_e_mcharptr_t text2, int bytelen2);
  1337. int GL_EXPORT GL_PASCAL _ifx_gl_is_mbfscoll_exp(gl_lc_t loc, gl_e_mcharptr_t text1, int bytelen1, gl_e_mcharptr_t text2, int bytelen2);
  1338. int GL_EXPORT GL_PASCAL _ifx_gl_is_mbfscoll_elem(gl_lc_t loc, gl_e_mcharptr_t text1, int bytelen1, gl_e_mcharptr_t text2, int bytelen2);
  1339. int GL_EXPORT GL_PASCAL _ifx_gl_is_mbfscoll_back(gl_lc_t loc, gl_e_mcharptr_t text1, int bytelen1, gl_e_mcharptr_t text2, int bytelen2);
  1340. int GL_EXPORT GL_PASCAL _ifx_gl_is_mbfscoll_exp_elem(gl_lc_t loc, gl_e_mcharptr_t text1, int bytelen1, gl_e_mcharptr_t text2, int bytelen2);
  1341. int GL_EXPORT GL_PASCAL _ifx_gl_thaismoncoll(gl_lc_t loc, gl_e_mcharptr_t text1, int bytelen1, gl_e_mcharptr_t text2, int bytelen2);
  1342. int GL_EXPORT GL_PASCAL _ifx_gl_wcfscmp(gl_e_wcharptr_t wcs1, int wclen1, gl_e_wcharptr_t wcs2, int wclen2);
  1343. /* String Processing */
  1344. int GL_EXPORT GL_PASCAL _ifx_gl_mbscat(gl_lc_t lc, gl_mchar_t * mbs1, int bytelen1, gl_mchar_t * mbs2, int bytelen2);
  1345. gl_e_mcharptr_t GL_EXPORT GL_PASCAL _ifx_gl_mbschr(gl_lc_t lc, gl_mchar_t * mbs1, int bytelen1, gl_mchar_t * mbc, int bytelenc);
  1346. int GL_EXPORT GL_PASCAL _ifx_gl_mbscpy(gl_lc_t lc, gl_mchar_t * mbs1, gl_mchar_t * mbs2, int bytelen2);
  1347. int GL_EXPORT GL_PASCAL _ifx_gl_mbscspn(gl_lc_t lc, gl_mchar_t * mbs1, int bytelen1, gl_mchar_t * mbs2, int bytelen2);
  1348. gl_e_mcharptr_t GL_EXPORT GL_PASCAL _ifx_gl_mbsmbs(gl_lc_t lc, gl_mchar_t * mbs1, int bytelen1, gl_mchar_t * mbs2, int bytelens);
  1349. int GL_EXPORT GL_PASCAL _ifx_gl_mbsncat(gl_lc_t lc, gl_mchar_t * mbs1, int bytelen1, gl_mchar_t * mbs2, int bytelen2, int n);
  1350. int GL_EXPORT GL_PASCAL _ifx_gl_mbsncpy(gl_lc_t lc, gl_mchar_t * mbs1, gl_mchar_t * mbs2, int bytelen2, int n);
  1351. int GL_EXPORT GL_PASCAL _ifx_gl_mbscmp(gl_lc_t lc, gl_mchar_t * mbs1, int bytelen1, gl_mchar_t * mbs2, int bytelen2 );
  1352. int GL_EXPORT GL_PASCAL _ifx_gl_mbsntslen(gl_lc_t lc, gl_mchar_t * mbs, int bytelen);
  1353. gl_e_mcharptr_t GL_EXPORT GL_PASCAL _ifx_gl_mbspbrk(gl_lc_t lc, gl_mchar_t * mbs1, int bytelen1, gl_mchar_t * mb, int bytelen2);
  1354. gl_e_mcharptr_t GL_EXPORT GL_PASCAL _ifx_gl_mbsrchr(gl_lc_t lc, gl_mchar_t * mbs1, int bytelen1, gl_mchar_t * mbc, int bytelenc);
  1355. int GL_EXPORT GL_PASCAL _ifx_gl_mbsspn(gl_lc_t lc, gl_mchar_t * mbs1, int bytelen1, gl_mchar_t * mb2, int bytelen2);
  1356. int GL_EXPORT GL_PASCAL _ifx_gl_wcscat(gl_lc_t lc, gl_wchar_t * wcs1, int charlen1, gl_wchar_t * wcs2, int charlen2);
  1357. gl_e_wcharptr_t GL_EXPORT GL_PASCAL _ifx_gl_wcschr(gl_lc_t lc, gl_wchar_t * wcs1, int charlen1, gl_wchar_t wc);
  1358. int GL_EXPORT GL_PASCAL _ifx_gl_wcscpy(gl_lc_t lc, gl_wchar_t * wcs1, gl_wchar_t * wcs2, int charlen2);
  1359. int GL_EXPORT GL_PASCAL _ifx_gl_wcscspn(gl_lc_t lc, gl_wchar_t * wcs1, int charlen1, gl_wchar_t * wcs2, int charlen2);
  1360. int GL_EXPORT GL_PASCAL _ifx_gl_full_mblen(gl_lc_t lc, gl_e_mcharptr_t mb, int n);
  1361. int GL_EXPORT GL_PASCAL _ifx_gl_wcsncat(gl_lc_t lc, gl_wchar_t * wcs1, int charlen1, gl_wchar_t * wcs2, int charlen2, int n);
  1362. int GL_EXPORT GL_PASCAL _ifx_gl_wcsncpy(gl_lc_t lc, gl_wchar_t * wcs1, gl_wchar_t * wcs2, int charlen2, int n);
  1363. int GL_EXPORT GL_PASCAL _ifx_gl_wcsntslen(gl_lc_t lc, gl_wchar_t * wcs, int wcslen);
  1364. gl_e_wcharptr_t GL_EXPORT GL_PASCAL _ifx_gl_wcspbrk(gl_lc_t lc, gl_wchar_t * wcs1, int charlen1, gl_wchar_t * wcs2, int charlen2);
  1365. gl_e_wcharptr_t GL_EXPORT GL_PASCAL _ifx_gl_wcsrchr(gl_lc_t lc, gl_wchar_t * wcs, int wcslen, gl_wchar_t wc);
  1366. int GL_EXPORT GL_PASCAL _ifx_gl_wcsspn(gl_lc_t lc, gl_wchar_t * wcs1, int charlen1, gl_wchar_t * wcs2, int charlen2);
  1367. gl_e_wcharptr_t GL_EXPORT GL_PASCAL _ifx_gl_wcswcs(gl_lc_t lc, gl_wchar_t * wcs1, int charlen1, gl_wchar_t * wcs2, int charlen2);
  1368. int GL_EXPORT GL_PASCAL _ifx_gl_fast_mbscmp(gl_lc_t lc, gl_mchar_t * mbs1, int bytelen1, gl_mchar_t * mbs2, int bytelen2);
  1369. void GL_EXPORT GL_PASCAL _ifx_gl_getmbl(gl_lc_t lc, gl_imbl_t *imbl);
  1370. int GL_EXPORT GL_PASCAL _ifx_gl_fast_mblen(register gl_imbl_t *imbl, register gl_e_mcharptr_t mb);
  1371. /* Multi-byte/Wide-character Conversion */
  1372. int GL_EXPORT GL_PASCAL _ifx_gl_full_mbtowc (gl_lc_t lc, gl_wchar_t * wcp, gl_mchar_t * mb, int maxbytes);
  1373. int GL_EXPORT GL_PASCAL _ifx_gl_is_wcstombs(gl_lc_t loc, gl_e_mcharptr_t mbs, gl_e_wcharptr_t wcs, int wclen, int n);
  1374. int GL_EXPORT GL_PASCAL _ifx_gl_full_wcstombs(gl_lc_t loc, gl_e_mcharptr_t mbs, gl_e_wcharptr_t wcs, int wclen, int n);
  1375. int GL_EXPORT GL_PASCAL _ifx_gl_im_mbfstowcfs(gl_lc_t loc, gl_e_wcharptr_t wcs, gl_e_mcharptr_t mbs, int bytelen, int n);
  1376. int GL_EXPORT GL_PASCAL _ifx_gl_is_mbfstowcfs(gl_lc_t loc, gl_e_wcharptr_t wcs, gl_e_mcharptr_t mbs, int bytelen, int n);
  1377. int GL_EXPORT GL_PASCAL _ifx_gl_full_mbdescribe(gl_lc_t lc, gl_wchar_t *wcp, gl_mchar_t *mb, gl_ctype_t *cclass, int mask, int maxbytes);
  1378. /* Multi-byte Memory Allocation */
  1379. int GL_EXPORT GL_PASCAL _ifx_gl_mbsntsbytes(gl_lc_t lc, gl_mchar_t *mbs, int mbsbytes);
  1380. /* Multi-byte String Traversal and Indexing */
  1381. gl_e_mcharptr_t GL_EXPORT GL_PASCAL _ifx_gl_full_mbsnext(gl_lc_t lc, gl_mchar_t *mb, int mbsbytes);
  1382. int GL_EXPORT GL_PASCAL _ifx_gl_im_mbfslen(gl_lc_t loc, gl_e_mcharptr_t mbs, int bytelen);
  1383. /* Formatting */
  1384. int GL_EXPORT GL_PASCAL _ifx_gl_mbsprintf(gl_lc_t lc, gl_mchar_t *mbs, int maxbytes, gl_mchar_t *format, ...);
  1385. int GL_EXPORT GL_PASCAL _ifx_gl_mbsscanf(gl_lc_t lc, gl_mchar_t *mbs, int maxbytes, gl_mchar_t *format, ...);
  1386. int GL_EXPORT GL_PASCAL _ifx_gl_wcsprintf(gl_lc_t lc, gl_wchar_t *wcs, int maxchars, gl_wchar_t *format, ...);
  1387. int GL_EXPORT GL_PASCAL _ifx_gl_wcsscanf(gl_lc_t lc, gl_wchar_t *wcs, int maxchars, gl_wchar_t *format, ...);
  1388. /* Input and Output functions */
  1389. int GL_EXPORT GL_PASCAL _ifx_gl_putmb(gl_lc_t lc, gl_mchar_t *buf, int buflen, int (GL_PASCAL *fp)(gl_mchar_t mb, void *v), void *v, int *bytes_written);
  1390. #define gl_uncache_registry() gl_free_registry_cache()
  1391. /* MAP implementation names to user callable names */
  1392. #define ifx_gl_getmb(a,b,c,d) gl_getmb((gl_locale), (a),(b),(c),(d))
  1393. #define ifx_gl_putmb(a,b,c,d,e) _ifx_gl_putmb((gl_locale), (a),(b),(c),(d),(e))
  1394. #define _ifx_gl_ismctype(lc, mb, mb_byte_limit, cclass) \
  1395. ( GL_LC_SB_CTYPE_TABLE(lc) ? \
  1396. (mb_byte_limit) > 0 ? \
  1397. (int) GL_LC_SB_CTYPE_TABLE(lc)[*((gl_mchar_t *)(mb))] & (cclass) : \
  1398. (gl_set_errno((lc), IFX_GL_EINVAL), 0) : \
  1399. _ifx_gl_im_ismctype((lc), (mb), (mb_byte_limit), (cclass)) \
  1400. )
  1401. #define ifx_gl_ismalnum(a,b) _ifx_gl_ismctype((gl_locale), (a),(b),GL_ALNUM)
  1402. #define ifx_gl_ismalpha(a,b) _ifx_gl_ismctype((gl_locale), (a),(b),GL_ALPHA)
  1403. #define ifx_gl_ismblank(a,b) _ifx_gl_ismctype((gl_locale), (a),(b),GL_BLANK)
  1404. #define ifx_gl_ismcntrl(a,b) _ifx_gl_ismctype((gl_locale), (a),(b),GL_CNTRL)
  1405. #define ifx_gl_ismdigit(a,b) _ifx_gl_ismctype((gl_locale), (a),(b),GL_DIGIT)
  1406. #define ifx_gl_ismgraph(a,b) _ifx_gl_ismctype((gl_locale), (a),(b),GL_GRAPH)
  1407. #define ifx_gl_ismlower(a,b) _ifx_gl_ismctype((gl_locale), (a),(b),GL_LOWER)
  1408. #define ifx_gl_ismprint(a,b) _ifx_gl_ismctype((gl_locale), (a),(b),GL_PRINT)
  1409. #define ifx_gl_ismpunct(a,b) _ifx_gl_ismctype((gl_locale), (a),(b),GL_PUNCT)
  1410. #define ifx_gl_ismspace(a,b) _ifx_gl_ismctype((gl_locale), (a),(b),GL_SPACE)
  1411. #define ifx_gl_ismupper(a,b) _ifx_gl_ismctype((gl_locale), (a),(b),GL_UPPER)
  1412. #define ifx_gl_ismxdigit(a,b) _ifx_gl_ismctype((gl_locale), (a),(b),GL_XDIGIT)
  1413. #define ifx_gl_iswalnum(a) gl_iswctype((gl_locale), (a),GL_ALNUM)
  1414. #define ifx_gl_iswalpha(a) gl_iswctype((gl_locale), (a),GL_ALPHA)
  1415. #define ifx_gl_iswblank(a) gl_iswctype((gl_locale), (a),GL_BLANK)
  1416. #define ifx_gl_iswcntrl(a) gl_iswctype((gl_locale), (a),GL_CNTRL)
  1417. #define ifx_gl_iswdigit(a) gl_iswctype((gl_locale), (a),GL_DIGIT)
  1418. #define ifx_gl_iswgraph(a) gl_iswctype((gl_locale), (a),GL_GRAPH)
  1419. #define ifx_gl_iswlower(a) gl_iswctype((gl_locale), (a),GL_LOWER)
  1420. #define ifx_gl_iswprint(a) gl_iswctype((gl_locale), (a),GL_PRINT)
  1421. #define ifx_gl_iswpunct(a) gl_iswctype((gl_locale), (a),GL_PUNCT)
  1422. #define ifx_gl_iswspace(a) gl_iswctype((gl_locale), (a),GL_SPACE)
  1423. #define ifx_gl_iswupper(a) gl_iswctype((gl_locale), (a),GL_UPPER)
  1424. #define ifx_gl_iswxdigit(a) gl_iswctype((gl_locale), (a),GL_XDIGIT)
  1425. #define ifx_gl_tomupper(dst_mb, src_mb, src_mb_byte_limit) \
  1426. ( GL_LC_SB_TOUPPER_TABLE(gl_locale) ? \
  1427. (src_mb_byte_limit) > 0 ? \
  1428. ((*((gl_mchar_t *) (dst_mb))) = \
  1429. GL_LC_SB_TOUPPER_TABLE((gl_locale))[*((gl_mchar_t*)(src_mb))], \
  1430. GL_SBTOMRETVAL) : \
  1431. (gl_set_errno((gl_locale), IFX_GL_EINVAL), 0) : \
  1432. _ifx_gl_im_tomupper(((gl_locale)), (dst_mb), (src_mb), \
  1433. (src_mb_byte_limit)) \
  1434. )
  1435. #define ifx_gl_tomlower(dst_mb, src_mb, src_mb_byte_limit) \
  1436. ( GL_LC_SB_TOLOWER_TABLE(gl_locale) ? \
  1437. (src_mb_byte_limit) > 0 ? \
  1438. ((*((gl_mchar_t *) (dst_mb))) = \
  1439. GL_LC_SB_TOLOWER_TABLE((gl_locale))[*((gl_mchar_t*)(src_mb))], \
  1440. GL_SBTOMRETVAL) : \
  1441. (gl_set_errno((gl_locale), IFX_GL_EINVAL), 0) : \
  1442. _ifx_gl_im_tomlower(((gl_locale)), (dst_mb), (src_mb), \
  1443. (src_mb_byte_limit)) \
  1444. )
  1445. #define ifx_gl_towlower(a) gl_towlower((gl_locale), (a))
  1446. #define ifx_gl_towupper(a) gl_towupper((gl_locale), (a))
  1447. #define ifx_gl_mbscoll(a,b,c,d) _ifx_gl_mbscoll((gl_locale), (a),(b),(c),(d))
  1448. #define ifx_gl_wcscoll(a,b,c,d) _ifx_gl_wcscoll((gl_locale), (a),(b),(c),(d))
  1449. #define ifx_gl_mbscat(a,b,c,d) _ifx_gl_mbscat((gl_locale), (a),(b),(c),(d))
  1450. #define ifx_gl_mbschr(a,b,c,d) _ifx_gl_mbschr((gl_locale), (a),(b),(c),(d))
  1451. #define ifx_gl_mbscpy(a,b,c) _ifx_gl_mbscpy((gl_locale), (a),(b),(c))
  1452. #define ifx_gl_mbscspn(a,b,c,d) _ifx_gl_mbscspn((gl_locale), (a),(b),(c),(d))
  1453. #define ifx_gl_mbslen(a,b) _ifx_gl_mbslen((gl_locale), (a),(b))
  1454. #define ifx_gl_mbsmbs(a,b,c,d) _ifx_gl_mbsmbs((gl_locale), (a),(b),(c),(d))
  1455. #define ifx_gl_mbsncat(a,b,c,d,e) _ifx_gl_mbsncat((gl_locale), (a),(b),(c),(d),(e))
  1456. #define ifx_gl_mbsncpy(a,b,c,d) _ifx_gl_mbsncpy((gl_locale), (a),(b),(c),(d))
  1457. #define ifx_gl_mbsntslen(a,b) _ifx_gl_mbsntslen((gl_locale), (a),(b))
  1458. #define ifx_gl_mbspbrk(a,b,c,d) _ifx_gl_mbspbrk((gl_locale), (a),(b),(c),(d))
  1459. #define ifx_gl_mbsrchr(a,b,c,d) _ifx_gl_mbsrchr((gl_locale), (a),(b),(c),(d))
  1460. #define ifx_gl_mbsspn(a,b,c,d) _ifx_gl_mbsspn((gl_locale), (a),(b),(c),(d))
  1461. #define ifx_gl_wcscat(a,b,c,d) _ifx_gl_wcscat((gl_locale), (a),(b),(c),(d))
  1462. #define ifx_gl_wcschr(a,b,c) _ifx_gl_wcschr((gl_locale), (a),(b),(c))
  1463. #define ifx_gl_wcscpy(a,b,c) _ifx_gl_wcscpy((gl_locale), (a),(b),(c))
  1464. #define ifx_gl_wcscspn(a,b,c,d) _ifx_gl_wcscspn((gl_locale), (a),(b),(c),(d))
  1465. #define ifx_gl_wcslen(a) gl_wcslen((a))
  1466. #define ifx_gl_wcsncat(a,b,c,d,e) _ifx_gl_wcsncat((gl_locale), (a),(b),(c),(d),(e))
  1467. #define ifx_gl_wcsncpy(a,b,c,d) _ifx_gl_wcsncpy((gl_locale), (a),(b),(c),(d))
  1468. #define ifx_gl_wcsntslen(a,b) _ifx_gl_wcsntslen((gl_locale), (a),(b))
  1469. #define ifx_gl_wcspbrk(a,b,c,d) _ifx_gl_wcspbrk((gl_locale), (a),(b),(c),(d))
  1470. #define ifx_gl_wcsrchr(a,b,c) _ifx_gl_wcsrchr((gl_locale), (a),(b),(c))
  1471. #define ifx_gl_wcsspn(a,b,c,d) _ifx_gl_wcsspn((gl_locale), (a),(b),(c),(d))
  1472. #define ifx_gl_wcswcs(a,b,c,d) _ifx_gl_wcswcs((gl_locale), (a),(b),(c),(d))
  1473. #define ifx_gl_mbstowcs(a,b,c,d) _ifx_gl_mbstowcs((gl_locale), (a),(b),(c),(d))
  1474. #define ifx_gl_mbtowc(a,b,c) _ifx_gl_mbtowc((gl_locale), (a),(b),(c))
  1475. #define ifx_gl_wcstombs(a,b,c,d) _ifx_gl_wcstombs((gl_locale), (a),(b),(c),(d))
  1476. #define ifx_gl_wctomb(a,b) gl_wctomb((gl_locale),(a),(b))
  1477. #define ifx_gl_mb_loc_max() gl_mb_loc_max((gl_locale))
  1478. #define ifx_gl_mbsntsbytes(a,b) _ifx_gl_mbsntsbytes((gl_locale),(a),(b))
  1479. #define ifx_gl_mblen(a,b) _ifx_gl_mblen((gl_locale), (a),(b))
  1480. #define ifx_gl_mbsnext(a,b) _ifx_gl_mbsnext((gl_locale), (a),(b))
  1481. #define ifx_gl_mbsprev(a,b) gl_mbsprev((gl_locale), (a),(b))
  1482. #define ifx_gl_lc_errno() (*_gl_ext_errno((gl_gen_expptr_t) (gl_locale)))
  1483. /* MAP implementation names to appropriate real functions */
  1484. #if GL_WCSIZE == 1
  1485. #define _ifx_gl_wcstombs(loc, mb, wc, wclen, n) \
  1486. _ifx_gl_is_wcstombs((loc), (mb), (wc), (wclen), (n))
  1487. #define _ifx_gl_mblen(loc, mb, n) \
  1488. ((mb) != NULL \
  1489. ? (((n) >= 1) \
  1490. ? 1 \
  1491. : (gl_set_errno((loc), GL_EINVAL), -1) \
  1492. ) \
  1493. : 0 \
  1494. )
  1495. #define _ifx_gl_mbslen(loc, mbs, bytelen) \
  1496. ((bytelen) == IFX_GL_NULL ? \
  1497. ((int)GL_STRLEN((gl_e_charptr_t)(mbs))) : \
  1498. (bytelen))
  1499. #define _ifx_gl_mbsnext(lc, mb, mb_byte_limit) \
  1500. ((mb_byte_limit) > 0 \
  1501. ? (((gl_mchar_t *) (mb)) + 1) \
  1502. : (gl_set_errno((lc), IFX_GL_EINVAL), (gl_mchar_t *) NULL) \
  1503. )
  1504. #else /* GL_WCSIZE */
  1505. #define _ifx_gl_wcstombs(loc, mb, wc, wclen, n) \
  1506. (GL_IS_SINGLE_BYTE(loc) \
  1507. ? _ifx_gl_is_wcstombs((loc), (mb), (wc), (wclen), (n)) \
  1508. : _ifx_gl_full_wcstombs((loc), (mb), (wc), (wclen), (n)) \
  1509. )
  1510. #define _ifx_gl_mblen(loc, mb, n) \
  1511. (GL_IS_SINGLE_BYTE(loc) \
  1512. ? ((mb) != NULL \
  1513. ? (((n) >= 1) \
  1514. ? 1 \
  1515. : (gl_set_errno((loc), GL_EINVAL), -1) \
  1516. ) \
  1517. : 0 \
  1518. ) \
  1519. : _ifx_gl_full_mblen((loc), (mb), (n)) \
  1520. )
  1521. #define _ifx_gl_mbslen(loc, mbs, bytelen) \
  1522. ( GL_IS_SINGLE_BYTE(loc) ? \
  1523. ((bytelen) == IFX_GL_NULL ? \
  1524. (gl_mbsbytes((loc), (mbs)) - gl_mb_loc_min(loc)) : \
  1525. (bytelen)) \
  1526. : (_ifx_gl_im_mbfslen((loc),(mbs),(bytelen))) \
  1527. )
  1528. #define _ifx_gl_mbsnext(lc, mb, mb_byte_limit) \
  1529. (GL_IS_SINGLE_BYTE(lc) \
  1530. ? (mb_byte_limit) > 0 \
  1531. ? (((gl_mchar_t *) (mb)) + 1) \
  1532. : (gl_set_errno((lc), IFX_GL_EINVAL), (gl_mchar_t *) NULL) \
  1533. : _ifx_gl_full_mbsnext((lc), (mb), (mb_byte_limit)) \
  1534. )
  1535. #endif /* GL_WCSIZE */
  1536. #define _ifx_gl_mbscoll(lc, mbs1, bytelen1, mbs2, bytelen2) \
  1537. ( GL_IS_CODESET_ORDER(lc) ? \
  1538. _ifx_gl_mbscmp((lc), (mbs1), (bytelen1), \
  1539. (mbs2), (bytelen2)) \
  1540. : ((((gl_lc_expptr_t)(lc))->mbfscoll)((lc), \
  1541. (mbs1), (bytelen1), \
  1542. (mbs2), (bytelen2))) \
  1543. )
  1544. #define _ifx_gl_wcscoll(lc, wcs1, wclen1, wcs2, wclen2) \
  1545. ( GL_IS_CODESET_ORDER(lc) ? \
  1546. _ifx_gl_wcfscmp((wcs1), (wclen1), \
  1547. (wcs2), (wclen2)) : \
  1548. _ifx_gl_full_wcscoll((lc), (wcs1), (wclen1), \
  1549. (wcs2), (wclen2)) \
  1550. )
  1551. #define _ifx_gl_mbstowcs(loc, wcs, mbs, bytelen, n) \
  1552. ((((gl_lc_expptr_t)(loc))->mbfstowcfs) \
  1553. ((loc), (wcs), (mbs), (bytelen), (n)))
  1554. #define _ifx_gl_mbtowc(loc,a,b,c) \
  1555. _ifx_gl_full_mbtowc((loc),(a),(b),(c))
  1556. gl_e_voidptr_t GL_EXPORT GL_PASCAL gls_assign_global_struct(GL_VOIDARGS);
  1557. typedef struct gl_passthrough
  1558. {
  1559. void *pass;
  1560. } gl_passthrough_t;
  1561. /***************************************************************************
  1562. *
  1563. * End of user level definitions
  1564. *
  1565. ***************************************************************************
  1566. */
  1567. #ifdef __cplusplus
  1568. }
  1569. #endif
  1570. #endif /* GLS_INCLUDED */