Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

609 lines
20 KiB

  1. //+--------------------------------------------------------------------------
  2. //
  3. // Copyright (C) 1994, Microsoft Corporation. All Rights Reserved.
  4. //
  5. // File: thammerp.h
  6. //
  7. // History: 07-Jun-95 PatHal Created.
  8. //
  9. //---------------------------------------------------------------------------
  10. #ifndef _THAMMERP_H_
  11. #define _THAMMERP_H_
  12. // Following values used for setting fMode parameters when calling
  13. // the EnumTokens or Tokenize api. These are used to control the content
  14. // of the pichOffsets, pwszStem, and pwszToken strings sent to the callback
  15. // procedure. Note: default is fastest.
  16. // "Selection Chunks" mode is used for Word Smart Selection. Offsets sent
  17. // to the callback do not necessarily correspond to morphemes boundaries.
  18. // The chunk boundary offsets are encoded in the Japanese morphology
  19. // that exists in T-Hammer as a resource.
  20. #define TOKENIZE_MODE_SELECTION_OFFSETS 0x00000010
  21. // "Stem Chunks" mode is used for Auto Summarization. Offsets sent
  22. // to the callback correspond to stems (and one containing all bound morphemes)
  23. // LATER! How should prefixes be handled? If we remove them from the
  24. // output then the last offset of one call will no longer equal the first offset from
  25. // the next call.
  26. #define TOKENIZE_MODE_STEM_OFFSETS 0x00000020
  27. // " Summarization Stems" mode is used for Auto Summarization. Output
  28. // is the "stem" portion of the Bunsetsu Phrase. For example, for Japanese
  29. // "oyogu" the outputted form would be the stem "oyo".
  30. #define TOKENIZE_MODE_SUMMARIZATION_OFFSETS 0x00000040
  31. // "Break Compounds" is a special mode that instructs t-hammer to break
  32. // compound nouns in the stem. Use this with "Summarization Stems".
  33. // The default is to not break the compounds (i.e. this is off by default).
  34. #define TOKENIZE_MODE_BREAK_COMPOUNDS 0x00000080
  35. // "ChBreak Unknowns" is a special mode that controls tokenization of unknown
  36. // strings. When set this forces T-Hammer to output unknown stems on a per
  37. // character basis. By default, this is not set which means that an unknown string
  38. // (for example, a proper name) is outputted as a single contiguous chunk
  39. #define TOKENIZE_MODE_CHBREAK_UNKNOWNS 0x00000100
  40. // "Stem Info" mode is used for Dictionary Form and for obtaining POS and MCat
  41. // info for all. Each callback contains one stem. Prefixes are ignored
  42. #define TOKENIZE_MODE_STEM_INFO 0x00000200
  43. // "Sentence Offsets" mode is used to return sentence breaks - no further
  44. // analysis is performed. This is useful to segment corpora before adding
  45. // to a test database (e.g. Babble)
  46. #define TOKENIZE_MODE_SENTENCE_OFFSETS 0x00000400
  47. // "Best Break" is the default. Only the single most
  48. // probable breaks will be output.
  49. #define TOKENIZE_MODE_BEST_BREAK 0x00001000
  50. // "Alternate Breaks" instructs tokenizer to output all possible
  51. // breaks
  52. #define TOKENIZE_MODE_ALTERNATE_BREAKS 0x00020000
  53. // "Bunsetsu Phrases" is a default, too. Outputs phrase breaks.
  54. // Warning: for a word-tagged corpus, use "Break Morpheme"
  55. #define TOKENIZE_MODE_BUNSETSU_PHRASES 0x00040000
  56. // "Best Tags" is also default. Outputs only one most probable
  57. // tag for a given segmentation. Break ambiguity and tag ambiguity are
  58. // orthogonal attributes of the output string, hence you can "or" them together
  59. #define TOKENIZE_MODE_BEST_TAGS 0x00080000
  60. // "Alternate Tags" instructs tokenizer to output all possible taggings for
  61. // each break. Warning: for some languages, there will be many more tag
  62. // alternatives than break alternatives, so the output will be quite verbose.
  63. #define TOKENIZE_MODE_ALTERNATE_TAGS 0x00100000
  64. // "Debug" instructs tokenizer to output morpheme label information for
  65. // alternates and tag strings for morphemes
  66. #define TOKENIZE_MODE_VERBOSE 0x00200000
  67. // "Output DebugLog" is only meaningful useful for debug builds. Setting
  68. // this flag on and calling debug T-Hammer has the effect that T-Hammer
  69. // outputs verbose tracing information for the morphology and stem analysis
  70. // to a separate file named debug.utf. CAUTION: this file is typically 500 times
  71. // the size of the source corpus in size, so be forewarned.
  72. #define TOKENIZE_MODE_OUTPUT_DEBUGLOG 0x00800000
  73. // "Disable PL" means the Primary Lexicon will be disabled. This mode is for
  74. // debug purposes only. Retail versions don't have it.
  75. #define TOKENIZE_MODE_DISABLE_PL 0x01000000
  76. // Instrumentation switches for collecting scoring statistics
  77. // First switch is for Postfix Score Info
  78. #define TOKENIZE_MODE_SCOREINFO_POSTFIX 0x02000000
  79. // Second switch is for SPB Scoring Info
  80. #define TOKENIZE_MODE_SCOREINFO_SPB 0x04000000
  81. // Output morpheme records for FE-Morph API
  82. #define TOKENIZE_MODE_MORPHEME_RECORDS 0x10000000
  83. // Output multiple selection analyses for tagging tool
  84. #define TOKENIZE_MODE_SELECTION_OFFSETS_EX 0x20000000
  85. // Output summarization offsets with POS for spelling variant(conversion)
  86. #define TOKENIZE_MODE_SUMMARIZATION_OFFSETS_EX1 0x40000000
  87. // Output words in their dictionary form
  88. #define TOKENIZE_MODE_DICTIONARY_FORM 0x80000000
  89. // Output words in their dictionary form
  90. #define TOKENIZE_MODE_SEPARATE_MORPHEMES 0x00400000
  91. // The EnumPhrases and batch-processing Tokenize api are only used in the debug build
  92. //+--------------------------------------------------------------------------
  93. // defines and typedefs for "Record" subsystem
  94. //---------------------------------------------------------------------------
  95. #define IATTR_NIL 0
  96. #define IATTR_SPB 1
  97. #define IATTR_STEM 2
  98. #define IATTR_POS 3
  99. #define IATTR_MCAT 4
  100. #define IATTR_FT 5
  101. #define IATTR_LT 6
  102. #define TH_NULL_HANDLE (TH_HANDLE)0
  103. typedef UINT TH_HANDLE;
  104. typedef struct tagTH_ATTRVAL
  105. {
  106. UINT iAttr; // attribute index
  107. TH_HANDLE hVal; // value handle
  108. } TH_ATTRVAL, *PTH_ATTRVAL;
  109. typedef struct tagTH_RECORD
  110. {
  111. UINT cAttrMax;
  112. UINT cAttrVals;
  113. TH_ATTRVAL *pAttrVals; // variable length attribute value array
  114. UINT cBitMax;
  115. UINT cBitVals;
  116. DWORD *pBitVals; // variable length bit value array
  117. } TH_RECORD, *PTH_RECORD;
  118. typedef enum tagTH_TYPE
  119. {
  120. TH_TYPE_INT = 1,
  121. TH_TYPE_STR,
  122. TH_TYPE_REG,
  123. // add more here
  124. TH_TYPE_MAX
  125. } TH_TYPE;
  126. #define TYPEOF(x) HIWORD(x)
  127. #define INDEXOF(x) LOWORD(x)
  128. // pcai - 6/18/97 Makes it clear for MCat's
  129. //
  130. typedef BYTE MCAT;
  131. #define SV_WORD_LEN_MAX 0x10
  132. #define SV_WORD_IREAD_MAX SV_WORD_LEN_MAX
  133. //+--------------------------------------------------------------------------
  134. // Routine: EnumPhrasesCallback
  135. //
  136. // Synopsis: Sends delimited output (tokens) to test app callback procedure
  137. //
  138. // Parameters:
  139. // pwszToken- pointer to wide character token string,
  140. // fTokenType - flag describing the types of tag in pwszToken (see above).
  141. //
  142. // Returns:
  143. // TRUE - to abort token enumeration
  144. // FALSE - to continue
  145. //---------------------------------------------------------------------------
  146. // BOOL
  147. // EnumPhrasesCallback (
  148. // PWSTR pwszToken,
  149. // DWORD fTokenType);
  150. typedef BOOL (CALLBACK * ENUM_PHRASES_CALLBACK)(
  151. IN PWSTR pwszToken,
  152. IN DWORD fTokenType,
  153. IN OUT LPARAM lpData);
  154. //+--------------------------------------------------------------------------
  155. // Routine: EnumPhrases (corresponds to mode 4 of tokenize test harness)
  156. //
  157. // Synopsis: This is the entry point for tokenizing phrases. Sends tokenized
  158. // phrases which can either be offsets or zero-delimited strings to the callback
  159. // (defined below)
  160. //
  161. // Parameters:
  162. // pwszText - pointer to wide-character text buffer to be tokenized,
  163. // cchText - count of characters in text buffer,
  164. // fTokenizeMode - flag describing the callback mode (see above),
  165. // pEnumTokOutputProc - pointer to callback procedure handling token
  166. // enumeration,
  167. // lpData - client defined data
  168. //
  169. // Returns:
  170. // TH_ERROR_SUCCESS - if the call completed successfully
  171. // TH_ERROR_NOHPBS - if there were no HPBs
  172. // TH_ERROR_INVALID_INPUT - if the input buffer was bad
  173. // TH_ERROR_INVALID_CALLBACK - if the input callback was bad
  174. //---------------------------------------------------------------------------
  175. INT
  176. APIENTRY
  177. EnumPhrases(
  178. IN PCWSTR pwszText,
  179. IN DWORD cchText,
  180. IN DWORD fBeginEndHPBMode,
  181. IN ENUM_PHRASES_CALLBACK pcbEnumPhrases,
  182. IN LPARAM lpData);
  183. typedef INT (APIENTRY *LP_ENUM_PHRASES)(
  184. IN PCWSTR pwszText,
  185. IN DWORD cchText,
  186. IN DWORD fBeginEndHPBMode,
  187. IN ENUM_PHRASES_CALLBACK pcbEnumPhrases,
  188. IN LPARAM lpData);
  189. // T-Hammer uses the folg. values to set the fTokenType parameter
  190. // when calling back to EnumTokOutputProc. The Tokenize test app
  191. // uses this type information to control the comparison to the re-
  192. // tokenized corpus as well as to format the output in general.
  193. // "Phrase" signifies that the the end of the pwszToken string marks a
  194. // phrase boundary. This is the default.
  195. #define TOKEN_TYPE_PHRASE 0x01
  196. // "Morpheme" signifies an intra-phrase morpheme
  197. // boundary (including the stem).
  198. #define TOKEN_TYPE_MORPHEME 0x02
  199. // "Alternate" signifies that the current pwszToken string is an alternate
  200. // (primary tokens are sent before alternates).
  201. #define TOKEN_TYPE_ALTERNATE 0x04
  202. // "Hard Break" signifies an unambiguous text boundary.
  203. // Note that between punctuation types the output is either all alternate
  204. // or all non-alternate. Any bitwise OR combination of the following
  205. // types is possible.
  206. #define TOKEN_TYPE_HARDBREAK 0x08
  207. // "Label" means the token should not be used to compare to test corpus,
  208. // but should be output parenthetically (or stored as the morpheme name),
  209. // for example with enclosing parens
  210. #define TOKEN_TYPE_LABEL 0x10
  211. // "Stem" signifies that this morpheme is part of the head which corresponds
  212. // to a "jiritsugo" for Japanese. This is used for coloring in the tagtool
  213. #define TOKEN_TYPE_STEM 0x20
  214. //+--------------------------------------------------------------------------
  215. // Routine: Tokenize
  216. //
  217. // Synopsis: Internal word-breaker entry point for executing tokenization.
  218. // Returns array of delimited offsets in pibBreaks
  219. //
  220. // Parameters:
  221. // pwszText - pointer to wide-character text buffer to be tokenized,
  222. // cchText - count of characters in text buffer,
  223. // pichBreaks - pointer to return buffer, which is filled with delimiter (breaks) offset information
  224. // pcBreaks - size of previous buffer; number of actual breaks used is returned
  225. //
  226. // Returns:
  227. // TH_ERROR_SUCCESS - if the call completed successfully
  228. // TH_ERROR_INVALID_INPUT - if the input buffer was bad
  229. // TH_ERROR_INVALID_CALLBACK - if the input callback was bad
  230. //
  231. // Note: Tokenize will never fail with NOHPBs, since it assumes that
  232. // the beginning and ends are HPBs
  233. //
  234. // Notes:
  235. // Like lstrlen, this function try/excepts on the input buffer and returns FALSE when an exception
  236. // involving invalid memory dereferencing.
  237. //
  238. // Open Issue:
  239. // 1. Do we need to change the name of this API? "Tokenize" is a generic
  240. // name - maybe we should save it for a more general-purpose API.
  241. //---------------------------------------------------------------------------
  242. INT
  243. APIENTRY
  244. Tokenize(
  245. IN PCWSTR pwszText,
  246. IN DWORD cchText,
  247. IN DWORD fTokenizeMode,
  248. OUT PDWORD pichBreaks,
  249. IN OUT PDWORD cBreaks);
  250. typedef DWORD (APIENTRY *LP_TOKENIZE)(
  251. IN PCWSTR pwszText,
  252. IN DWORD cchText,
  253. IN DWORD fTokenizeMode,
  254. OUT PDWORD pichBreaks,
  255. IN OUT PDWORD cBreaks);
  256. //+--------------------------------------------------------------------------
  257. // Routine: EnumSummarizationOffsetsEx
  258. //
  259. // Temporary private entry point to overload Summarization and get back the
  260. // number of cch procesed. Please refer to EnumSummarizationOffsets (thammer.h)
  261. // for details
  262. //---------------------------------------------------------------------------
  263. INT
  264. APIENTRY
  265. EnumSummarizationOffsetsEx(
  266. IN PCWSTR pwszText,
  267. IN DWORD cchText,
  268. IN DWORD fBeginEndHPBMode,
  269. IN ENUM_SUMMARIZATION_OFFSETS_CALLBACK pcbEnumSummarizationOffsets,
  270. IN OUT DWORD *pcchTextProcessed,
  271. IN LPARAM lpData);
  272. //+--------------------------------------------------------------------------
  273. // Routine: EnumSelectionOffsetsExCallback
  274. //
  275. // Synopsis: same as EnumSelectionOffsetsCallback with an added parameter
  276. // that allows mutliple analyses to be sent back to client
  277. //
  278. // Parameters:
  279. // ...
  280. // fInfo - dword bit mask that contains info on whether an analysis is primary
  281. // and/or spb initial
  282. // ...
  283. //---------------------------------------------------------------------------
  284. // BOOL
  285. // EnumSelectionOffsetsExCallback (
  286. // IN CONST DWORD *pichOffsets,
  287. // IN DWORD cOffsets,
  288. // IN DWORD fInfo,
  289. // IN OUT LPARAM lpData);
  290. #define SELN_OFFSETS_INFO_PRIMARY 0x00000001
  291. #define SELN_OFFSETS_INFO_SPB_END 0x00000002
  292. typedef BOOL (CALLBACK * ENUM_SELECTION_OFFSETS_EX_CALLBACK)(
  293. IN CONST DWORD *pichOffsets,
  294. IN CONST DWORD cOffsets,
  295. IN CONST DWORD fInfo,
  296. IN OUT LPARAM lpData);
  297. //+--------------------------------------------------------------------------
  298. // Routine: EnumSelectionOffsetsEx
  299. //
  300. // Synopsis: Same as EnumSelectionOffsets, but takes an "extended" callback
  301. // (see above for details)
  302. //---------------------------------------------------------------------------
  303. INT
  304. APIENTRY
  305. EnumSelectionOffsetsEx(
  306. IN PCWSTR pwszText,
  307. IN DWORD cchText,
  308. IN DWORD fBeginEndHPBMode,
  309. IN ENUM_SELECTION_OFFSETS_EX_CALLBACK pcbEnumSelectionOffsetsEx,
  310. IN LPARAM lpData);
  311. typedef INT (APIENTRY *LP_ENUM_SELECTION_OFFSETS_EX)(
  312. IN PCWSTR pwszText,
  313. IN DWORD cchText,
  314. IN DWORD fBeginEndHPBMode,
  315. IN ENUM_SELECTION_OFFSETS_EX_CALLBACK pcbEnumSelectionOffsetsEx,
  316. IN LPARAM lpData);
  317. //+--------------------------------------------------------------------------
  318. // Routine: EnumSPBRecordsCallback
  319. //
  320. // Synopsis:
  321. //
  322. // Parameters:
  323. // pRec - points to an array of TH_RECORDs
  324. // cRec - number of TH_RECORD structs in the pRec[] array
  325. // iScoreIPL - well-formedness score of the given sentence.
  326. // pvData - points to client defined data
  327. //
  328. // Returns:
  329. //---------------------------------------------------------------------------
  330. // BOOL
  331. // EnumSPBRecordsCallback(
  332. // IN PTH_RECORD pRec,
  333. // IN DWORD cRec,
  334. // IN DWORD dwFlags,
  335. // IN DWORD iScoreIPL,
  336. // IN PVOID pvData);
  337. #define SPBRECS_SENTEDGE 0x00000001
  338. typedef BOOL (CALLBACK * ENUM_SPB_RECORD_CALLBACK)(
  339. IN PTH_RECORD pRec,
  340. IN DWORD cRec,
  341. IN DWORD dwFlags,
  342. IN DWORD iScoreIPL,
  343. IN PVOID pvData);
  344. //+--------------------------------------------------------------------------
  345. // Routine: EnumSPBRecords
  346. //
  347. // Synopsis:
  348. //
  349. // Parameters:
  350. // pwszText - points to a sentence to analyze
  351. // pcbEnumSPBRecordsCB - callback function pointer.
  352. // lpData - points to client defined data
  353. //
  354. // Returns:
  355. //---------------------------------------------------------------------------
  356. INT APIENTRY
  357. EnumSPBRecords(
  358. IN PCWSTR pwszText,
  359. IN DWORD fMode, // for TOKENIZE_MODE_DICTIONARY_FORM
  360. IN ENUM_SPB_RECORD_CALLBACK pcbEnumSPBRecordsCB,
  361. IN PVOID pvData);
  362. typedef INT (APIENTRY *LP_ENUM_SPB_RECORDS)(
  363. IN PCWSTR pwszText,
  364. IN DWORD fMode, // for TOKENIZE_MODE_DICTIONARY_FORM
  365. IN ENUM_SPB_RECORD_CALLBACK pcbEnumSPBRecordsCB,
  366. IN PVOID pvData);
  367. PCWSTR
  368. GetStringVal(
  369. TH_HANDLE hVal);
  370. typedef PCWSTR (APIENTRY *LP_GET_STRING_VAL)(
  371. TH_HANDLE hVal);
  372. DWORD
  373. GetIntegerVal(
  374. TH_HANDLE hVal);
  375. typedef DWORD (APIENTRY *LP_GET_INTEGER_VAL)(
  376. TH_HANDLE hVal);
  377. TH_HANDLE
  378. GetAttr(
  379. const PTH_RECORD pRec,
  380. UINT iAttr);
  381. typedef TH_HANDLE (APIENTRY *LP_GET_ATTR) (
  382. const PTH_RECORD pRec,
  383. UINT iAttr);
  384. //+--------------------------------------------------------------------------
  385. // Routine: FxCallback
  386. //
  387. // Synopsis:
  388. //
  389. // Parameters:
  390. //
  391. // Returns:
  392. //---------------------------------------------------------------------------
  393. // BOOL WINAPI
  394. // FxCallback(
  395. // DWORD iFilter,
  396. // WCHAR *pwzFilter,
  397. // DWORD cRec,
  398. // TH_RECORD *pRec,
  399. // VOID *pvData);
  400. //
  401. typedef BOOL (WINAPI *LP_FXCB)(
  402. IN DWORD iFilter,
  403. IN WCHAR *pwzFilter,
  404. DWORD cRec,
  405. TH_RECORD *pRec,
  406. IN VOID *pvData);
  407. //+--------------------------------------------------------------------------
  408. // Routine: Fx
  409. //
  410. // Synopsis:
  411. //
  412. // Parameters:
  413. //
  414. // Returns:
  415. //---------------------------------------------------------------------------
  416. BOOL WINAPI
  417. Fx(
  418. IN PVOID *ppvFilter,
  419. IN DWORD cFilter,
  420. IN PCWSTR pwzPhrase,
  421. IN LP_FXCB pfnFxCallback,
  422. IN PVOID pvData);
  423. typedef BOOL (WINAPI *LP_FX)(
  424. IN PVOID *ppvFilter,
  425. IN DWORD cFilter,
  426. IN PCWSTR pwzPhrase,
  427. IN LP_FXCB pfnFxCallback,
  428. IN PVOID pvData);
  429. // SV-related structs and functions
  430. //+--------------------------------------------------------------------------
  431. // Structure: SV_INFO
  432. //
  433. // Synopsis: This structure is used by the SVAPI functions.
  434. //
  435. //---------------------------------------------------------------------------
  436. typedef struct _SVINFO
  437. {
  438. unsigned sid : 18; // sense id
  439. unsigned svid : 6; // id for spelling variant
  440. unsigned cRead : 8; // # of elements in the reading chain for this sid
  441. BYTE bIPL; // IPL of this spelling variant
  442. MCAT mcat; // index of MCat
  443. // array of reading indices for the sid
  444. // if awRead[i] < READING_BASE, it represents a kana
  445. // otherwise, (awRead[i] - READING_BASE) is the
  446. // index into the reading table
  447. WORD aiwRead[SV_WORD_IREAD_MAX];
  448. } SV_INFO;
  449. //+--------------------------------------------------------------------------
  450. // Routine: SVFindSid
  451. //
  452. // Fill SV_INFO structure by searching for pwzWord in the SV-lexicon.
  453. // This routine is called in order to normalize/convert/reconvert
  454. // a word to its matching sense id(s). This routine returns one or more
  455. // SV_INFO records, each being a match to the word.
  456. //
  457. // Parameters: pwzWord = pointer to word for which an sid is needed
  458. // pwzMcat = MCat string.
  459. // If pwzMcat is not valid , search for the best sid
  460. // in all MCat's.
  461. // asvi = array of SV_INFO for receiving sid, svid
  462. // and reading indices
  463. // (must be pre-allocated by the caller)
  464. // csviMax = Max # of matches desired.
  465. // SVFINDSID_GET_FIRST: only the first match
  466. // SVFINDSID_GET_BEST: only the best match(lowest IPL)
  467. // Otherwise, the first bMax matches.
  468. //
  469. // Returns: SVFINDSID_RET_NONE - no matches are found
  470. // otherwise returns the number of matches returned in asvi
  471. //
  472. //---------------------------------------------------------------------------
  473. DWORD APIENTRY
  474. SV_FindSid(
  475. IN CONST WCHAR *pwzWord,
  476. IN CONST WCHAR *pwzMcat,
  477. IN OUT SV_INFO *asvi,
  478. IN DWORD csviMax);
  479. typedef DWORD (APIENTRY *LP_SV_FINDSID) (
  480. IN CONST WCHAR *pwzWord,
  481. IN CONST WCHAR *pwzMcat,
  482. IN OUT SV_INFO *asvi,
  483. IN DWORD csviMax);
  484. //+--------------------------------------------------------------------------
  485. // Routine: SVFindSid
  486. //
  487. // Get sv orthography given SV_INFO structure.
  488. //
  489. // Parameters: pwzWord = pointer to word for receiving the sv's orthography
  490. // (must be pre-allocated by the caller)
  491. // psvi = pointer to SV_INFO for receiving return information
  492. // (must contain meaningful information)
  493. //
  494. // Returns: TRUE - successful
  495. // FALSE - unsuccessful
  496. //---------------------------------------------------------------------------
  497. BOOL APIENTRY
  498. SV_GetOrtho(
  499. IN SV_INFO *psvi,
  500. IN OUT WCHAR *pwzOrtho);
  501. typedef BOOL (APIENTRY *LP_SV_GETORTHO) (
  502. IN SV_INFO *psvi,
  503. IN OUT WCHAR *pwzOrtho);
  504. //+--------------------------------------------------------------------------
  505. // Routine: TurnOn_FindSVStems
  506. //
  507. // Synopsis: Turn on the flag for using FindSVStems().
  508. //
  509. // Parameters: none
  510. //
  511. // Returns: none
  512. //---------------------------------------------------------------------------
  513. BOOL APIENTRY SV_EnableFindSVStems();
  514. typedef VOID (APIENTRY *LP_SV_ENABLE_FINDSVSTEMS) ();
  515. #define SVID_ALL_KANJI 0
  516. #define SVID_ALL_KANA 1
  517. #define SV_FINDSID_GET_FIRST 1
  518. #define SV_FINDSID_GET_BEST 0xFFFFFFFF
  519. // SVFindSid's return values
  520. #define SV_FINDSID_RET_NONE 0
  521. #define SV_FINDSID_ERROR 0xFFFFFFFF
  522. #endif // _THAMMERP_H_