17898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project/*
27898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Copyright (C) 2009 The Android Open Source Project
37898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project *
47898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
57898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * you may not use this file except in compliance with the License.
67898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * You may obtain a copy of the License at
77898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project *
87898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
97898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project *
107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * See the License for the specific language governing permissions and
147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * limitations under the License.
157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */
167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#ifndef PINYINIME_INCLUDE_ANDPYIME_H__
187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#define PINYINIME_INCLUDE_ANDPYIME_H__
197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#include <stdlib.h>
217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#include "./dictdef.h"
227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#ifdef __cplusplus
247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectextern "C" {
257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#endif
267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  namespace ime_pinyin {
287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Open the decoder engine via the system and user dictionary file names.
317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   *
327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param fn_sys_dict The file name of the system dictionary.
337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param fn_usr_dict The file name of the user dictionary.
347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @return true if open the decoder engine successfully.
357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  bool im_open_decoder(const char *fn_sys_dict, const char *fn_usr_dict);
377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Open the decoder engine via the system dictionary FD and user dictionary
407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * file name. Because on Android, the system dictionary is embedded in the
417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * whole application apk file.
427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   *
437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param sys_fd The file in which the system dictionary is embedded.
447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param start_offset The starting position of the system dictionary in the
457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * file sys_fd.
467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param length The length of the system dictionary in the file sys_fd,
477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * counted in byte.
487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @return true if succeed.
497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  bool im_open_decoder_fd(int sys_fd, long start_offset, long length,
517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                          const char *fn_usr_dict);
527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Close the decoder engine.
557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  void im_close_decoder();
577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Set maximum limitations for decoding. If this function is not called,
607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * default values will be used. For example, due to screen size limitation,
617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * the UI engine of the IME can only show a certain number of letters(input)
627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * to decode, and a certain number of Chinese characters(output). If after
637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * user adds a new letter, the input or the output string is longer than the
647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * limitations, the engine will discard the recent letter.
657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   *
667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param max_sps_len Maximum length of the spelling string(Pinyin string).
677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @max_hzs_len Maximum length of the decoded Chinese character string.
687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  void im_set_max_lens(size_t max_sps_len, size_t max_hzs_len);
707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Flush cached data to persistent memory. Because at runtime, in order to
737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * achieve best performance, some data is only store in memory.
747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  void im_flush_cache();
767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Use a spelling string(Pinyin string) to search. The engine will try to do
797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * an incremental search based on its previous search result, so if the new
807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * string has the same prefix with the previous one stored in the decoder,
817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * the decoder will only continue the search from the end of the prefix.
827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * If the caller needs to do a brand new search, please call im_reset_search()
837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * first. Calling im_search() is equivalent to calling im_add_letter() one by
847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * one.
857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   *
867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param sps_buf The spelling string buffer to decode.
877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param sps_len The length of the spelling string buffer.
887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @return The number of candidates.
897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  size_t im_search(const char* sps_buf, size_t sps_len);
917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Make a delete operation in the current search result, and make research if
947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * necessary.
957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   *
967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param pos The posistion of char in spelling string to delete, or the
977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * position of spelling id in result string to delete.
987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param is_pos_in_splid Indicate whether the pos parameter is the position
997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * in the spelling string, or the position in the result spelling id string.
1007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @return The number of candidates.
1017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
1027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  size_t im_delsearch(size_t pos, bool is_pos_in_splid,
1037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                      bool clear_fixed_this_step);
1047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
1067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Reset the previous search result.
1077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
1087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  void im_reset_search();
1097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
1117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Add a Pinyin letter to the current spelling string kept by decoder. If the
1127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * decoder fails in adding the letter, it will do nothing. im_get_sps_str()
1137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * can be used to get the spelling string kept by decoder currently.
1147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   *
1157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param ch The letter to add.
1167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @return The number of candidates.
1177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
1187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  size_t im_add_letter(char ch);
1197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
1217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Get the spelling string kept by the decoder.
1227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   *
1237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param decoded_len Used to return how many characters in the spelling
1247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * string is successfully parsed.
1257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @return The spelling string kept by the decoder.
1267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
1277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  const char *im_get_sps_str(size_t *decoded_len);
1287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
1307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Get a candidate(or choice) string.
1317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   *
1327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param cand_id The id to get a candidate. Started from 0. Usually, id 0
1337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * is a sentence-level candidate.
1347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param cand_str The buffer to store the candidate.
1357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param max_len The maximum length of the buffer.
1367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @return cand_str if succeeds, otherwise NULL.
1377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
1387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  char16* im_get_candidate(size_t cand_id, char16* cand_str,
1397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                           size_t max_len);
1407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
1427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Get the segmentation information(the starting positions) of the spelling
1437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * string.
1447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   *
1457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param spl_start Used to return the starting posistions.
1467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @return The number of spelling ids. If it is L, there will be L+1 valid
1477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * elements in spl_start, and spl_start[L] is the posistion after the end of
1487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * the last spelling id.
1497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
1507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  size_t im_get_spl_start_pos(const uint16 *&spl_start);
1517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
1537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Choose a candidate and make it fixed. If the candidate does not match
1547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * the end of all spelling ids, new candidates will be provided from the
1557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * first unfixed position. If the candidate matches the end of the all
1567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * spelling ids, there will be only one new candidates, or the whole fixed
1577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * sentence.
1587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   *
1597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param cand_id The id of candidate to select and make it fixed.
1607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @return The number of candidates. If after the selection, the whole result
1617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * string has been fixed, there will be only one candidate.
1627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
1637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  size_t im_choose(size_t cand_id);
1647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
1667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Cancel the last selection, or revert the last operation of im_choose().
1677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   *
1687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @return The number of candidates.
1697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
1707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  size_t im_cancel_last_choice();
1717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
1737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Get the number of fixed spelling ids, or Chinese characters.
1747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   *
1757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @return The number of fixed spelling ids, of Chinese characters.
1767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
1777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  size_t im_get_fixed_len();
1787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
1807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Cancel the input state and reset the search workspace.
1817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
1827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  bool im_cancel_input();
1837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
1857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Get prediction candiates based on the given fixed Chinese string as the
1867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * history.
1877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   *
1887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param his_buf The history buffer to do the prediction. It should be ended
1897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * with '\0'.
1907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @param pre_buf Used to return prediction result list.
1917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * @return The number of predicted result string.
1927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
1937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  size_t im_get_predicts(const char16 *his_buf,
1947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                         char16 (*&pre_buf)[kMaxPredictSize + 1]);
1957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
1977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Enable Shengmus in ShouZiMu mode.
1987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
1997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  void im_enable_shm_as_szm(bool enable);
2007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  /**
2027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   * Enable Yunmus in ShouZiMu mode.
2037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project   */
2047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project  void im_enable_ym_as_szm(bool enable);
2057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project}
2067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#ifdef __cplusplus
2087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project}
2097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#endif
2107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
2117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#endif  // PINYINIME_INCLUDE_ANDPYIME_H__
212