This file is indexed.

/usr/share/doc/pocketsphinx/html/bin__mdef_8c_source.html is in pocketsphinx-doc 0.8.0+real5prealpha-1ubuntu2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>PocketSphinx: src/libpocketsphinx/bin_mdef.c Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">PocketSphinx
   &#160;<span id="projectnumber">5prealpha</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('bin__mdef_8c_source.html','');});
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">bin_mdef.c</div>  </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">/* ====================================================================</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright (c) 2005 Carnegie Mellon University.  All rights </span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * reserved.</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * modification, are permitted provided that the following conditions</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * are met:</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *    notice, this list of conditions and the following disclaimer. </span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> *    notice, this list of conditions and the following disclaimer in</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> *    the documentation and/or other materials provided with the</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> *    distribution.</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> * This work was supported in part by funding from the Defense Advanced </span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> * Research Projects Agency and the National Science Foundation of the </span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> * United States of America, and the CMU Sphinx Speech Consortium.</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS&#39;&#39; AND </span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, </span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT </span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment"> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, </span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"> * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY </span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment"> * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT </span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment"> * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE </span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"> * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment"> * ====================================================================</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">/*********************************************************************</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment"> * File: bin_mdef.c</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment"> * Description: </span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment"> *      Binary format model definition files, with support for</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment"> *      heterogeneous topologies and variable-size N-phones</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment"> * Author: </span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment"> *      David Huggins-Daines &lt;dhuggins@cs.cmu.edu&gt;</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment"> *********************************************************************/</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">/* System headers. */</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="preprocessor">#include &lt;assert.h&gt;</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">/* SphinxBase headers. */</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="preprocessor">#include &lt;sphinxbase/prim_type.h&gt;</span></div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="preprocessor">#include &lt;sphinxbase/ckd_alloc.h&gt;</span></div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="preprocessor">#include &lt;sphinxbase/byteorder.h&gt;</span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor">#include &lt;sphinxbase/case.h&gt;</span></div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="preprocessor">#include &lt;sphinxbase/err.h&gt;</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">/* Local headers. */</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="mdef_8h.html">mdef.h</a>&quot;</span></div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="bin__mdef_8h.html">bin_mdef.h</a>&quot;</span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<a class="code" href="structbin__mdef__s.html">bin_mdef_t</a> *</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="bin__mdef_8h.html#a00dab94d45d1adc5f7778fd1e2398031">   66</a></span>&#160;<a class="code" href="bin__mdef_8h.html#a00dab94d45d1adc5f7778fd1e2398031">bin_mdef_read_text</a>(cmd_ln_t *config, <span class="keyword">const</span> <span class="keywordtype">char</span> *filename)</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;{</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <a class="code" href="structbin__mdef__s.html">bin_mdef_t</a> *bmdef;</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <a class="code" href="structmdef__t.html">mdef_t</a> *mdef;</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    <span class="keywordtype">int</span> i, nodes, ci_idx, lc_idx, rc_idx;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="keywordtype">int</span> nchars;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="keywordflow">if</span> ((mdef = <a class="code" href="mdef_8h.html#a8f2fb119373324175bf82ad2c403e2be">mdef_init</a>((<span class="keywordtype">char</span> *) filename, TRUE)) == NULL)</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    <span class="comment">/* Enforce some limits.  */</span></div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    <span class="keywordflow">if</span> (mdef-&gt;<a class="code" href="structmdef__t.html#a966e28ae25bd8e766dbe81549cbdcd36">n_sen</a> &gt; <a class="code" href="bin__mdef_8h.html#ab6c771eca798ab8c94e0933a1f8daafc">BAD_SENID</a>) {</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;        E_ERROR(<span class="stringliteral">&quot;Number of senones exceeds limit: %d &gt; %d\n&quot;</span>,</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;                mdef-&gt;<a class="code" href="structmdef__t.html#a966e28ae25bd8e766dbe81549cbdcd36">n_sen</a>, <a class="code" href="bin__mdef_8h.html#ab6c771eca798ab8c94e0933a1f8daafc">BAD_SENID</a>);</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;        <a class="code" href="mdef_8h.html#a38d2a4b150ecb10a3c80f3504cfdc63d">mdef_free</a>(mdef);</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    }</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    <span class="keywordflow">if</span> (mdef-&gt;<a class="code" href="structmdef__t.html#ad9afd537734fe1f336e20218da28fb2c">n_sseq</a> &gt; <a class="code" href="bin__mdef_8h.html#a8ee283c316e9f4aa8e6d18c1d44026bc">BAD_SSID</a>) {</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;        E_ERROR(<span class="stringliteral">&quot;Number of senone sequences exceeds limit: %d &gt; %d\n&quot;</span>,</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;                mdef-&gt;<a class="code" href="structmdef__t.html#ad9afd537734fe1f336e20218da28fb2c">n_sseq</a>, <a class="code" href="bin__mdef_8h.html#a8ee283c316e9f4aa8e6d18c1d44026bc">BAD_SSID</a>);</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;        <a class="code" href="mdef_8h.html#a38d2a4b150ecb10a3c80f3504cfdc63d">mdef_free</a>(mdef);</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    }</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    <span class="comment">/* We use uint8 for ciphones */</span></div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    <span class="keywordflow">if</span> (mdef-&gt;<a class="code" href="structmdef__t.html#af460d8d703782cf50ed99164cee17347">n_ciphone</a> &gt; 255) {</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;        E_ERROR(<span class="stringliteral">&quot;Number of phones exceeds limit: %d &gt; %d\n&quot;</span>,</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;                mdef-&gt;<a class="code" href="structmdef__t.html#af460d8d703782cf50ed99164cee17347">n_ciphone</a>, 255);</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;        <a class="code" href="mdef_8h.html#a38d2a4b150ecb10a3c80f3504cfdc63d">mdef_free</a>(mdef);</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    }</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    bmdef = ckd_calloc(1, <span class="keyword">sizeof</span>(*bmdef));</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    bmdef-&gt;refcnt = 1;</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <span class="comment">/* Easy stuff.  The mdef.c code has done the heavy lifting for us. */</span></div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a84d5f7acc6d85ba8c7611945f9c5e4e7">n_ciphone</a> = mdef-&gt;<a class="code" href="structmdef__t.html#af460d8d703782cf50ed99164cee17347">n_ciphone</a>;</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#ad746dbb3f8108f575a95182f96b4b18f">n_phone</a> = mdef-&gt;<a class="code" href="structmdef__t.html#a987f0b9bc4c951ac031f5d283960bd9f">n_phone</a>;</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a2ad87254182be424ac6ff1234274f134">n_emit_state</a> = mdef-&gt;<a class="code" href="structmdef__t.html#a4a7ffa9d1b9a95a3bf3cca7bd955020a">n_emit_state</a>;</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#ad7c318d6db85fd4b8ac13a81c145bbb8">n_ci_sen</a> = mdef-&gt;<a class="code" href="structmdef__t.html#a68c3cc85b849363609fd5dadf412a38c">n_ci_sen</a>;</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a3d1c202165d8e5e153a73d708ca28109">n_sen</a> = mdef-&gt;<a class="code" href="structmdef__t.html#a966e28ae25bd8e766dbe81549cbdcd36">n_sen</a>;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a979557ad4f8369e84d93f633512345ca">n_tmat</a> = mdef-&gt;<a class="code" href="structmdef__t.html#a44d1d9fd99db66f1c37937e89172fed9">n_tmat</a>;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#ab9dad211cbc12eb6f848482bcf78d47f">n_sseq</a> = mdef-&gt;<a class="code" href="structmdef__t.html#ad9afd537734fe1f336e20218da28fb2c">n_sseq</a>;</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a> = mdef-&gt;<a class="code" href="structmdef__t.html#a2472170a66d451d2d4873a9a6e64adc7">sseq</a>;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#ad5e814ffa116c85d46359e3ffd40bff7">cd2cisen</a> = mdef-&gt;<a class="code" href="structmdef__t.html#ae2ba90b39a79603022daae3c9270a0b7">cd2cisen</a>;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a457e5352e52a57de5d1536bcd6b331a9">sen2cimap</a> = mdef-&gt;<a class="code" href="structmdef__t.html#a4aafd791a1e1adaa9b5b28bf0cfbd624">sen2cimap</a>;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a31b5cda5136c6f72816da8889719bfe2">n_ctx</a> = 3;           <span class="comment">/* Triphones only. */</span></div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a9071b7698132c1c2ce92a6f742e1c82f">sil</a> = mdef-&gt;<a class="code" href="structmdef__t.html#acc9a57b57bbecaef55cc72be57b875f6">sil</a>;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    mdef-&gt;<a class="code" href="structmdef__t.html#a2472170a66d451d2d4873a9a6e64adc7">sseq</a> = NULL;          <span class="comment">/* We are taking over this one. */</span></div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    mdef-&gt;<a class="code" href="structmdef__t.html#ae2ba90b39a79603022daae3c9270a0b7">cd2cisen</a> = NULL;      <span class="comment">/* And this one. */</span></div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    mdef-&gt;<a class="code" href="structmdef__t.html#a4aafd791a1e1adaa9b5b28bf0cfbd624">sen2cimap</a> = NULL;     <span class="comment">/* And this one. */</span></div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    <span class="comment">/* Get the phone names.  If they are not sorted</span></div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;<span class="comment">     * ASCII-betically then we are in a world of hurt and</span></div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;<span class="comment">     * therefore will simply refuse to continue. */</span></div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a> = ckd_calloc(bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a84d5f7acc6d85ba8c7611945f9c5e4e7">n_ciphone</a>, <span class="keyword">sizeof</span>(*bmdef-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>));</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    nchars = 0;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    <span class="keywordflow">for</span> (i = 0; i &lt; bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a84d5f7acc6d85ba8c7611945f9c5e4e7">n_ciphone</a>; ++i)</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;        nchars += strlen(mdef-&gt;<a class="code" href="structmdef__t.html#aae4a51202b87f71394b6c5b3138b77c7">ciphone</a>[i].<a class="code" href="structciphone__t.html#a2327c5f09fa245c25926c718fdab642d">name</a>) + 1;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[0] = ckd_calloc(nchars, 1);</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    strcpy(bmdef-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[0], mdef-&gt;<a class="code" href="structmdef__t.html#aae4a51202b87f71394b6c5b3138b77c7">ciphone</a>[0].<a class="code" href="structciphone__t.html#a2327c5f09fa245c25926c718fdab642d">name</a>);</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    <span class="keywordflow">for</span> (i = 1; i &lt; bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a84d5f7acc6d85ba8c7611945f9c5e4e7">n_ciphone</a>; ++i) {</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;        bmdef-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[i] =</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;            bmdef-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[i - 1] + strlen(bmdef-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[i - 1]) + 1;</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;        strcpy(bmdef-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[i], mdef-&gt;<a class="code" href="structmdef__t.html#aae4a51202b87f71394b6c5b3138b77c7">ciphone</a>[i].<a class="code" href="structciphone__t.html#a2327c5f09fa245c25926c718fdab642d">name</a>);</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;        <span class="keywordflow">if</span> (i &gt; 0 &amp;&amp; strcmp(bmdef-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[i - 1], bmdef-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[i]) &gt; 0) {</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;            <span class="comment">/* FIXME: there should be a solution to this, actually. */</span></div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;            E_ERROR(<span class="stringliteral">&quot;Phone names are not in sorted order, sorry.&quot;</span>);</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;            <a class="code" href="bin__mdef_8h.html#afe7ed87e2a2d22b228c14ed8225e4b2c">bin_mdef_free</a>(bmdef);</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;            <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;        }</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    }</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    <span class="comment">/* Copy over phone information. */</span></div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a> = ckd_calloc(bmdef-&gt;<a class="code" href="structbin__mdef__s.html#ad746dbb3f8108f575a95182f96b4b18f">n_phone</a>, <span class="keyword">sizeof</span>(*bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>));</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    <span class="keywordflow">for</span> (i = 0; i &lt; mdef-&gt;<a class="code" href="structmdef__t.html#a987f0b9bc4c951ac031f5d283960bd9f">n_phone</a>; ++i) {</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;        bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[i].<a class="code" href="structmdef__entry__s.html#a12986649de9c59de3cc805e375b2c9a2">ssid</a> = mdef-&gt;<a class="code" href="structmdef__t.html#a2b9aaf78e5648fe14655d1fe8da5f164">phone</a>[i].<a class="code" href="structphone__t.html#af2f31836358c1c29c38a361b3923b859">ssid</a>;</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;        bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[i].<a class="code" href="structmdef__entry__s.html#a90758df5d6eb00d3a70135ac4475c7a1">tmat</a> = mdef-&gt;<a class="code" href="structmdef__t.html#a2b9aaf78e5648fe14655d1fe8da5f164">phone</a>[i].<a class="code" href="structphone__t.html#acbe38b7fc991bfbcb745fb6131d812f0">tmat</a>;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;        <span class="keywordflow">if</span> (i &lt; bmdef-&gt;n_ciphone) {</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;            bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[i].info.<a class="code" href="structmdef__entry__s.html#a24e5db7af5e705b310e82154055043ec">ci</a>.filler = mdef-&gt;<a class="code" href="structmdef__t.html#aae4a51202b87f71394b6c5b3138b77c7">ciphone</a>[i].<a class="code" href="structciphone__t.html#a96e20b175c00c4edcd75d922dba067cd">filler</a>;</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        }</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        <span class="keywordflow">else</span> {</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;            bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[i].info.cd.wpos = mdef-&gt;<a class="code" href="structmdef__t.html#a2b9aaf78e5648fe14655d1fe8da5f164">phone</a>[i].<a class="code" href="structphone__t.html#a5436db1dd178ef5ead83359c84963c83">wpos</a>;</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;            bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[i].info.cd.ctx[0] = mdef-&gt;<a class="code" href="structmdef__t.html#a2b9aaf78e5648fe14655d1fe8da5f164">phone</a>[i].ci;</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;            bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[i].info.cd.ctx[1] = mdef-&gt;<a class="code" href="structmdef__t.html#a2b9aaf78e5648fe14655d1fe8da5f164">phone</a>[i].lc;</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;            bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[i].info.cd.ctx[2] = mdef-&gt;<a class="code" href="structmdef__t.html#a2b9aaf78e5648fe14655d1fe8da5f164">phone</a>[i].<a class="code" href="structphone__t.html#a334106cbedf3d95a6bdebc4704e028cd">rc</a>;</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;        }</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    }</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    <span class="comment">/* Walk the wpos_ci_lclist once to find the total number of</span></div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="comment">     * nodes and the starting locations for each level. */</span></div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    nodes = lc_idx = ci_idx = rc_idx = 0;</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    <span class="keywordflow">for</span> (i = 0; i &lt; <a class="code" href="mdef_8h.html#ac271413770c3e95b993b856967b61487">N_WORD_POSN</a>; ++i) {</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;        <span class="keywordtype">int</span> j;</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;        <span class="keywordflow">for</span> (j = 0; j &lt; mdef-&gt;<a class="code" href="structmdef__t.html#af460d8d703782cf50ed99164cee17347">n_ciphone</a>; ++j) {</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;            <a class="code" href="structph__lc__t.html">ph_lc_t</a> *lc;</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;            <span class="keywordflow">for</span> (lc = mdef-&gt;<a class="code" href="structmdef__t.html#a5dd5c3d3058a314f4c971a14d1df5f38">wpos_ci_lclist</a>[i][j]; lc; lc = lc-&gt;next) {</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;                <a class="code" href="structph__rc__t.html">ph_rc_t</a> *rc;</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;                <span class="keywordflow">for</span> (rc = lc-&gt;rclist; rc; rc = rc-&gt;next) {</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;                    ++nodes;    <span class="comment">/* RC node */</span></div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;                }</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;                ++nodes;        <span class="comment">/* LC node */</span></div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;                ++rc_idx;       <span class="comment">/* Start of RC nodes (after LC nodes) */</span></div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;            }</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;            ++nodes;            <span class="comment">/* CI node */</span></div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;            ++lc_idx;           <span class="comment">/* Start of LC nodes (after CI nodes) */</span></div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;            ++rc_idx;           <span class="comment">/* Start of RC nodes (after CI and LC nodes) */</span></div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;        }</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;        ++nodes;                <span class="comment">/* wpos node */</span></div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;        ++ci_idx;               <span class="comment">/* Start of CI nodes (after wpos nodes) */</span></div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;        ++lc_idx;               <span class="comment">/* Start of LC nodes (after CI nodes) */</span></div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;        ++rc_idx;               <span class="comment">/* STart of RC nodes (after wpos, CI, and LC nodes) */</span></div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    }</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    E_INFO(<span class="stringliteral">&quot;Allocating %d * %d bytes (%d KiB) for CD tree\n&quot;</span>,</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;           nodes, <span class="keyword">sizeof</span>(*bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>), </div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;           nodes * <span class="keyword">sizeof</span>(*bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>) / 1024);</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#ad625c3c55d5f42ed275b8b5638a6d80b">n_cd_tree</a> = nodes;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a> = ckd_calloc(nodes, <span class="keyword">sizeof</span>(*bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>));</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    <span class="keywordflow">for</span> (i = 0; i &lt; <a class="code" href="mdef_8h.html#ac271413770c3e95b993b856967b61487">N_WORD_POSN</a>; ++i) {</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;        <span class="keywordtype">int</span> j;</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;        bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[i].<a class="code" href="structcd__tree__s.html#a2168538bf6cc21ad1a2c99fa2deb4559">ctx</a> = i;</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;        bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[i].<a class="code" href="structcd__tree__s.html#ae5e735d325b0f278ff2ad55293faa616">n_down</a> = mdef-&gt;<a class="code" href="structmdef__t.html#af460d8d703782cf50ed99164cee17347">n_ciphone</a>;</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[i].c.<a class="code" href="structcd__tree__s.html#aa536f1cbd93e2cded1238b39b8aa3751">down</a> = ci_idx;</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;<span class="preprocessor">#if 0</span></div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;        E_INFO(<span class="stringliteral">&quot;%d =&gt; %c (%d@%d)\n&quot;</span>,</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;               i, (<a class="code" href="mdef_8h.html#a89ef0442ded2ff90176ba6d02563923d">WPOS_NAME</a>)[i],</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;               bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[i].<a class="code" href="structcd__tree__s.html#ae5e735d325b0f278ff2ad55293faa616">n_down</a>, bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[i].c.<a class="code" href="structcd__tree__s.html#aa536f1cbd93e2cded1238b39b8aa3751">down</a>);</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;        <span class="comment">/* Now we can build the rest of the tree. */</span></div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;        <span class="keywordflow">for</span> (j = 0; j &lt; mdef-&gt;<a class="code" href="structmdef__t.html#af460d8d703782cf50ed99164cee17347">n_ciphone</a>; ++j) {</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;            <a class="code" href="structph__lc__t.html">ph_lc_t</a> *lc;</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;            bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[ci_idx].<a class="code" href="structcd__tree__s.html#a2168538bf6cc21ad1a2c99fa2deb4559">ctx</a> = j;</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;            bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[ci_idx].c.<a class="code" href="structcd__tree__s.html#aa536f1cbd93e2cded1238b39b8aa3751">down</a> = lc_idx;</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;            <span class="keywordflow">for</span> (lc = mdef-&gt;<a class="code" href="structmdef__t.html#a5dd5c3d3058a314f4c971a14d1df5f38">wpos_ci_lclist</a>[i][j]; lc; lc = lc-&gt;next) {</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;                <a class="code" href="structph__rc__t.html">ph_rc_t</a> *rc;</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;                bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[lc_idx].<a class="code" href="structcd__tree__s.html#a2168538bf6cc21ad1a2c99fa2deb4559">ctx</a> = lc-&gt;lc;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;                bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[lc_idx].c.<a class="code" href="structcd__tree__s.html#aa536f1cbd93e2cded1238b39b8aa3751">down</a> = rc_idx;</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;                <span class="keywordflow">for</span> (rc = lc-&gt;rclist; rc; rc = rc-&gt;next) {</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;                    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[rc_idx].<a class="code" href="structcd__tree__s.html#a2168538bf6cc21ad1a2c99fa2deb4559">ctx</a> = rc-&gt;rc;</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;                    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[rc_idx].<a class="code" href="structcd__tree__s.html#ae5e735d325b0f278ff2ad55293faa616">n_down</a> = 0;</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;                    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[rc_idx].c.<a class="code" href="structcd__tree__s.html#a6635c35ad6fe74ad045389c76349016d">pid</a> = rc-&gt;pid;</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;<span class="preprocessor">#if 0</span></div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;                    E_INFO(<span class="stringliteral">&quot;%d =&gt; %s %s %s %c (%d@%d)\n&quot;</span>,</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;                           rc_idx,</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;                           bmdef-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[j],</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;                           bmdef-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[lc-&gt;lc],</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;                           bmdef-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[rc-&gt;rc],</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;                           (<a class="code" href="mdef_8h.html#a89ef0442ded2ff90176ba6d02563923d">WPOS_NAME</a>)[i],</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;                           bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[rc_idx].<a class="code" href="structcd__tree__s.html#ae5e735d325b0f278ff2ad55293faa616">n_down</a>,</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;                           bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[rc_idx].c.<a class="code" href="structcd__tree__s.html#aa536f1cbd93e2cded1238b39b8aa3751">down</a>);</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;                    ++bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[lc_idx].<a class="code" href="structcd__tree__s.html#ae5e735d325b0f278ff2ad55293faa616">n_down</a>;</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;                    ++rc_idx;</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;                }</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;                <span class="comment">/* If there are no triphones here,</span></div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;<span class="comment">                 * this is considered a leafnode, so</span></div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;<span class="comment">                 * set the pid to -1. */</span></div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;                <span class="keywordflow">if</span> (bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[lc_idx].<a class="code" href="structcd__tree__s.html#ae5e735d325b0f278ff2ad55293faa616">n_down</a> == 0)</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;                    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[lc_idx].c.<a class="code" href="structcd__tree__s.html#a6635c35ad6fe74ad045389c76349016d">pid</a> = -1;</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;<span class="preprocessor">#if 0</span></div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;                E_INFO(<span class="stringliteral">&quot;%d =&gt; %s %s %c (%d@%d)\n&quot;</span>,</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;                       lc_idx,</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;                       bmdef-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[j],</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;                       bmdef-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[lc-&gt;lc],</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;                       (<a class="code" href="mdef_8h.html#a89ef0442ded2ff90176ba6d02563923d">WPOS_NAME</a>)[i],</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;                       bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[lc_idx].<a class="code" href="structcd__tree__s.html#ae5e735d325b0f278ff2ad55293faa616">n_down</a>,</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;                       bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[lc_idx].c.<a class="code" href="structcd__tree__s.html#aa536f1cbd93e2cded1238b39b8aa3751">down</a>);</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;                ++bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[ci_idx].<a class="code" href="structcd__tree__s.html#ae5e735d325b0f278ff2ad55293faa616">n_down</a>;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;                ++lc_idx;</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;            }</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;            <span class="comment">/* As above, so below. */</span></div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;            <span class="keywordflow">if</span> (bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[ci_idx].<a class="code" href="structcd__tree__s.html#ae5e735d325b0f278ff2ad55293faa616">n_down</a> == 0)</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;                bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[ci_idx].c.<a class="code" href="structcd__tree__s.html#a6635c35ad6fe74ad045389c76349016d">pid</a> = -1;</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;<span class="preprocessor">#if 0</span></div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;            E_INFO(<span class="stringliteral">&quot;%d =&gt; %d=%s (%d@%d)\n&quot;</span>,</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;                   ci_idx, j, bmdef-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[j],</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;                   bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[ci_idx].<a class="code" href="structcd__tree__s.html#ae5e735d325b0f278ff2ad55293faa616">n_down</a>,</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;                   bmdef-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[ci_idx].c.<a class="code" href="structcd__tree__s.html#aa536f1cbd93e2cded1238b39b8aa3751">down</a>);</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;            ++ci_idx;</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;        }</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    }</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    <a class="code" href="mdef_8h.html#a38d2a4b150ecb10a3c80f3504cfdc63d">mdef_free</a>(mdef);</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    bmdef-&gt;<a class="code" href="structbin__mdef__s.html#ab8d852b6cc4f9899da72da03d1607c92">alloc_mode</a> = BIN_MDEF_FROM_TEXT;</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    <span class="keywordflow">return</span> bmdef;</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;}</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;<a class="code" href="structbin__mdef__s.html">bin_mdef_t</a> *</div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="bin__mdef_8h.html#a297167f03662a9cbd650743d3f4cf8f8">  265</a></span>&#160;<a class="code" href="bin__mdef_8h.html#a297167f03662a9cbd650743d3f4cf8f8">bin_mdef_retain</a>(<a class="code" href="structbin__mdef__s.html">bin_mdef_t</a> *m)</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;{</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;    ++m-&gt;refcnt;</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    <span class="keywordflow">return</span> m;</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;}</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="bin__mdef_8h.html#afe7ed87e2a2d22b228c14ed8225e4b2c">  272</a></span>&#160;<a class="code" href="bin__mdef_8h.html#afe7ed87e2a2d22b228c14ed8225e4b2c">bin_mdef_free</a>(<a class="code" href="structbin__mdef__s.html">bin_mdef_t</a> * m)</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;{</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    <span class="keywordflow">if</span> (m == NULL)</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;        <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;    <span class="keywordflow">if</span> (--m-&gt;refcnt &gt; 0)</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;        <span class="keywordflow">return</span> m-&gt;refcnt;</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    <span class="keywordflow">switch</span> (m-&gt;<a class="code" href="structbin__mdef__s.html#ab8d852b6cc4f9899da72da03d1607c92">alloc_mode</a>) {</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    <span class="keywordflow">case</span> BIN_MDEF_FROM_TEXT:</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;        ckd_free(m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[0]);</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;        ckd_free(m-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a>[0]);</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;        ckd_free(m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>);</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;        ckd_free(m-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>);</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    <span class="keywordflow">case</span> BIN_MDEF_IN_MEMORY:</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;        ckd_free(m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[0]);</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    <span class="keywordflow">case</span> BIN_MDEF_ON_DISK:</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;    }</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    <span class="keywordflow">if</span> (m-&gt;<a class="code" href="structbin__mdef__s.html#a3358a80c50bf3f62417596553adf9c5e">filemap</a>)</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;        mmio_file_unmap(m-&gt;<a class="code" href="structbin__mdef__s.html#a3358a80c50bf3f62417596553adf9c5e">filemap</a>);</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;    ckd_free(m-&gt;<a class="code" href="structbin__mdef__s.html#ad5e814ffa116c85d46359e3ffd40bff7">cd2cisen</a>);</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;    ckd_free(m-&gt;<a class="code" href="structbin__mdef__s.html#a457e5352e52a57de5d1536bcd6b331a9">sen2cimap</a>);</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    ckd_free(m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>);</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    ckd_free(m-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a>);</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    ckd_free(m);</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;}</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> format_desc[] =</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    <span class="stringliteral">&quot;BEGIN FILE FORMAT DESCRIPTION\n&quot;</span></div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    <span class="stringliteral">&quot;int32 n_ciphone;    /**&lt; Number of base (CI) phones */\n&quot;</span></div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;    <span class="stringliteral">&quot;int32 n_phone;          /**&lt; Number of base (CI) phones + (CD) triphones */\n&quot;</span></div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    <span class="stringliteral">&quot;int32 n_emit_state; /**&lt; Number of emitting states per phone (0 if heterogeneous) */\n&quot;</span></div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    <span class="stringliteral">&quot;int32 n_ci_sen;     /**&lt; Number of CI senones; these are the first */\n&quot;</span></div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    <span class="stringliteral">&quot;int32 n_sen;            /**&lt; Number of senones (CI+CD) */\n&quot;</span></div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    <span class="stringliteral">&quot;int32 n_tmat;           /**&lt; Number of transition matrices */\n&quot;</span></div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    <span class="stringliteral">&quot;int32 n_sseq;       /**&lt; Number of unique senone sequences */\n&quot;</span></div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    <span class="stringliteral">&quot;int32 n_ctx;            /**&lt; Number of phones of context */\n&quot;</span></div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    <span class="stringliteral">&quot;int32 n_cd_tree;    /**&lt; Number of nodes in CD tree structure */\n&quot;</span></div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    <span class="stringliteral">&quot;int32 sil;      /**&lt; CI phone ID for silence */\n&quot;</span></div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;    <span class="stringliteral">&quot;char ciphones[][];  /**&lt; CI phone strings (null-terminated) */\n&quot;</span></div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    <span class="stringliteral">&quot;char padding[];     /**&lt; Padding to a 4-bytes boundary */\n&quot;</span></div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    <span class="stringliteral">&quot;struct { int16 ctx; int16 n_down; int32 pid/down } cd_tree[];\n&quot;</span></div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    <span class="stringliteral">&quot;struct { int32 ssid; int32 tmat; int8 attr[4] } phones[];\n&quot;</span></div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;    <span class="stringliteral">&quot;int16 sseq[];       /**&lt; Unique senone sequences */\n&quot;</span></div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    <span class="stringliteral">&quot;int8 sseq_len[];    /**&lt; Number of states in each sseq (none if homogeneous) */\n&quot;</span></div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;    <span class="stringliteral">&quot;END FILE FORMAT DESCRIPTION\n&quot;</span>;</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;<a class="code" href="structbin__mdef__s.html">bin_mdef_t</a> *</div><div class="line"><a name="l00323"></a><span class="lineno"><a class="line" href="bin__mdef_8h.html#a3930ae6b3309a615335585db4b46306f">  323</a></span>&#160;<a class="code" href="bin__mdef_8h.html#a3930ae6b3309a615335585db4b46306f">bin_mdef_read</a>(cmd_ln_t *config, <span class="keyword">const</span> <span class="keywordtype">char</span> *filename)</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;{</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    <a class="code" href="structbin__mdef__s.html">bin_mdef_t</a> *m;</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    FILE *fh;</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;    <span class="keywordtype">size_t</span> tree_start;</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    int32 val, i, do_mmap, swap;</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;    <span class="keywordtype">long</span> pos, end;</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    int32 *sseq_size;</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;    <span class="comment">/* Try to read it as text first. */</span></div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    <span class="keywordflow">if</span> ((m = <a class="code" href="bin__mdef_8h.html#a00dab94d45d1adc5f7778fd1e2398031">bin_mdef_read_text</a>(config, filename)) != NULL)</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;        <span class="keywordflow">return</span> m;</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;    E_INFO(<span class="stringliteral">&quot;Reading binary model definition: %s\n&quot;</span>, filename);</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    <span class="keywordflow">if</span> ((fh = fopen(filename, <span class="stringliteral">&quot;rb&quot;</span>)) == NULL)</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    <span class="keywordflow">if</span> (fread(&amp;val, 4, 1, fh) != 1) {</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;        fclose(fh);</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;        E_ERROR_SYSTEM(<span class="stringliteral">&quot;Failed to read byte-order marker from %s\n&quot;</span>,</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;                       filename);</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    }</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;    swap = 0;</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    <span class="keywordflow">if</span> (val == BIN_MDEF_OTHER_ENDIAN) {</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;        swap = 1;</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;        E_INFO(<span class="stringliteral">&quot;Must byte-swap %s\n&quot;</span>, filename);</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;    }</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;    <span class="keywordflow">if</span> (fread(&amp;val, 4, 1, fh) != 1) {</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;        fclose(fh);</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;        E_ERROR_SYSTEM(<span class="stringliteral">&quot;Failed to read version from %s\n&quot;</span>, filename);</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    }</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    <span class="keywordflow">if</span> (swap)</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;        SWAP_INT32(&amp;val);</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;    <span class="keywordflow">if</span> (val &gt; BIN_MDEF_FORMAT_VERSION) {</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;        E_ERROR(<span class="stringliteral">&quot;File format version %d for %s is newer than library\n&quot;</span>,</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;                val, filename);</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;        fclose(fh);</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;    }</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    <span class="keywordflow">if</span> (fread(&amp;val, 4, 1, fh) != 1) {</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;        fclose(fh);</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;        E_ERROR_SYSTEM(<span class="stringliteral">&quot;Failed to read header length from %s\n&quot;</span>, filename);</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;        <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    }</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;    <span class="keywordflow">if</span> (swap)</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;        SWAP_INT32(&amp;val);</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;    <span class="comment">/* Skip format descriptor. */</span></div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;    fseek(fh, val, SEEK_CUR);</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    <span class="comment">/* Finally allocate it. */</span></div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    m = ckd_calloc(1, <span class="keyword">sizeof</span>(*m));</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;    m-&gt;refcnt = 1;</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    <span class="comment">/* Check these, to make gcc/glibc shut up. */</span></div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;<span class="preprocessor">#define FREAD_SWAP32_CHK(dest)                                          \</span></div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;<span class="preprocessor">    if (fread((dest), 4, 1, fh) != 1) {                                 \</span></div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;<span class="preprocessor">        fclose(fh);                                                     \</span></div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;<span class="preprocessor">        ckd_free(m);                                                    \</span></div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;<span class="preprocessor">        E_ERROR_SYSTEM(&quot;Failed to read %s from %s\n&quot;, #dest, filename); \</span></div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;<span class="preprocessor">        return NULL;                                                    \</span></div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;<span class="preprocessor">    }                                                                   \</span></div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;<span class="preprocessor">    if (swap) SWAP_INT32(dest);</span></div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    </div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;    FREAD_SWAP32_CHK(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#a84d5f7acc6d85ba8c7611945f9c5e4e7">n_ciphone</a>);</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;    FREAD_SWAP32_CHK(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#ad746dbb3f8108f575a95182f96b4b18f">n_phone</a>);</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    FREAD_SWAP32_CHK(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#a2ad87254182be424ac6ff1234274f134">n_emit_state</a>);</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;    FREAD_SWAP32_CHK(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#ad7c318d6db85fd4b8ac13a81c145bbb8">n_ci_sen</a>);</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;    FREAD_SWAP32_CHK(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#a3d1c202165d8e5e153a73d708ca28109">n_sen</a>);</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;    FREAD_SWAP32_CHK(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#a979557ad4f8369e84d93f633512345ca">n_tmat</a>);</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;    FREAD_SWAP32_CHK(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#ab9dad211cbc12eb6f848482bcf78d47f">n_sseq</a>);</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    FREAD_SWAP32_CHK(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#a31b5cda5136c6f72816da8889719bfe2">n_ctx</a>);</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    FREAD_SWAP32_CHK(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#ad625c3c55d5f42ed275b8b5638a6d80b">n_cd_tree</a>);</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    FREAD_SWAP32_CHK(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#a9071b7698132c1c2ce92a6f742e1c82f">sil</a>);</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;    <span class="comment">/* CI names are first in the file. */</span></div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a> = ckd_calloc(m-&gt;<a class="code" href="structbin__mdef__s.html#a84d5f7acc6d85ba8c7611945f9c5e4e7">n_ciphone</a>, <span class="keyword">sizeof</span>(*m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>));</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;    <span class="comment">/* Decide whether to read in the whole file or mmap it. */</span></div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;    do_mmap = config ? cmd_ln_boolean_r(config, <span class="stringliteral">&quot;-mmap&quot;</span>) : TRUE;</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;    <span class="keywordflow">if</span> (swap) {</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;        E_WARN(<span class="stringliteral">&quot;-mmap specified, but mdef is other-endian.  Will not memory-map.\n&quot;</span>);</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;        do_mmap = FALSE;</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;    } </div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;    <span class="comment">/* Actually try to mmap it. */</span></div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    <span class="keywordflow">if</span> (do_mmap) {</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;        m-&gt;<a class="code" href="structbin__mdef__s.html#a3358a80c50bf3f62417596553adf9c5e">filemap</a> = mmio_file_read(filename);</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;        <span class="keywordflow">if</span> (m-&gt;<a class="code" href="structbin__mdef__s.html#a3358a80c50bf3f62417596553adf9c5e">filemap</a> == NULL)</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;            do_mmap = FALSE;</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    }</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;    pos = ftell(fh);</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;    <span class="keywordflow">if</span> (do_mmap) {</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;        <span class="comment">/* Get the base pointer from the memory map. */</span></div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;        m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[0] = (<span class="keywordtype">char</span> *)mmio_file_ptr(m-&gt;<a class="code" href="structbin__mdef__s.html#a3358a80c50bf3f62417596553adf9c5e">filemap</a>) + pos;</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;        <span class="comment">/* Success! */</span></div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;        m-&gt;<a class="code" href="structbin__mdef__s.html#ab8d852b6cc4f9899da72da03d1607c92">alloc_mode</a> = BIN_MDEF_ON_DISK;</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;    }</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;        <span class="comment">/* Read everything into memory. */</span></div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;        m-&gt;<a class="code" href="structbin__mdef__s.html#ab8d852b6cc4f9899da72da03d1607c92">alloc_mode</a> = BIN_MDEF_IN_MEMORY;</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;        fseek(fh, 0, SEEK_END);</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;        end = ftell(fh);</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;        fseek(fh, pos, SEEK_SET);</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;        m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[0] = ckd_malloc(end - pos);</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;        <span class="keywordflow">if</span> (fread(m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[0], 1, end - pos, fh) != end - pos)</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;            E_FATAL(<span class="stringliteral">&quot;Failed to read %d bytes of data from %s\n&quot;</span>, end - pos, filename);</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;    }</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;    <span class="keywordflow">for</span> (i = 1; i &lt; m-&gt;<a class="code" href="structbin__mdef__s.html#a84d5f7acc6d85ba8c7611945f9c5e4e7">n_ciphone</a>; ++i)</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;        m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[i] = m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[i - 1] + strlen(m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[i - 1]) + 1;</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;    <span class="comment">/* Skip past the padding. */</span></div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;    tree_start =</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;        m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[i - 1] + strlen(m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[i - 1]) + 1 - m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[0];</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;    tree_start = (tree_start + 3) &amp; ~3;</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;    m-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a> = (<a class="code" href="structcd__tree__s.html">cd_tree_t</a> *) (m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[0] + tree_start);</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;    <span class="keywordflow">if</span> (swap) {</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;        <span class="keywordflow">for</span> (i = 0; i &lt; m-&gt;<a class="code" href="structbin__mdef__s.html#ad625c3c55d5f42ed275b8b5638a6d80b">n_cd_tree</a>; ++i) {</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;            SWAP_INT16(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[i].<a class="code" href="structcd__tree__s.html#a2168538bf6cc21ad1a2c99fa2deb4559">ctx</a>);</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;            SWAP_INT16(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[i].<a class="code" href="structcd__tree__s.html#ae5e735d325b0f278ff2ad55293faa616">n_down</a>);</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;            SWAP_INT32(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>[i].c.<a class="code" href="structcd__tree__s.html#aa536f1cbd93e2cded1238b39b8aa3751">down</a>);</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;        }</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;    }</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;    m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a> = (<a class="code" href="structmdef__entry__s.html">mdef_entry_t</a> *) (m-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a> + m-&gt;<a class="code" href="structbin__mdef__s.html#ad625c3c55d5f42ed275b8b5638a6d80b">n_cd_tree</a>);</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;    <span class="keywordflow">if</span> (swap) {</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;        <span class="keywordflow">for</span> (i = 0; i &lt; m-&gt;<a class="code" href="structbin__mdef__s.html#ad746dbb3f8108f575a95182f96b4b18f">n_phone</a>; ++i) {</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;            SWAP_INT32(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[i].<a class="code" href="structmdef__entry__s.html#a12986649de9c59de3cc805e375b2c9a2">ssid</a>);</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;            SWAP_INT32(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[i].<a class="code" href="structmdef__entry__s.html#a90758df5d6eb00d3a70135ac4475c7a1">tmat</a>);</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;        }</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;    }</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;    sseq_size = (int32 *) (m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a> + m-&gt;<a class="code" href="structbin__mdef__s.html#ad746dbb3f8108f575a95182f96b4b18f">n_phone</a>);</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;    <span class="keywordflow">if</span> (swap)</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;        SWAP_INT32(sseq_size);</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;    m-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a> = ckd_calloc(m-&gt;<a class="code" href="structbin__mdef__s.html#ab9dad211cbc12eb6f848482bcf78d47f">n_sseq</a>, <span class="keyword">sizeof</span>(*m-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a>));</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;    m-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a>[0] = (uint16 *) (sseq_size + 1);</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;    <span class="keywordflow">if</span> (swap) {</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;        <span class="keywordflow">for</span> (i = 0; i &lt; *sseq_size; ++i)</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;            SWAP_INT16(m-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a>[0] + i);</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;    }</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;    <span class="keywordflow">if</span> (m-&gt;<a class="code" href="structbin__mdef__s.html#a2ad87254182be424ac6ff1234274f134">n_emit_state</a>) {</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;        <span class="keywordflow">for</span> (i = 1; i &lt; m-&gt;<a class="code" href="structbin__mdef__s.html#ab9dad211cbc12eb6f848482bcf78d47f">n_sseq</a>; ++i)</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;            m-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a>[i] = m-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a>[0] + i * m-&gt;<a class="code" href="structbin__mdef__s.html#a2ad87254182be424ac6ff1234274f134">n_emit_state</a>;</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;    }</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;        m-&gt;<a class="code" href="structbin__mdef__s.html#ab534bbd280015795b8e8ca4e296f4946">sseq_len</a> = (uint8 *) (m-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a>[0] + *sseq_size);</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;        <span class="keywordflow">for</span> (i = 1; i &lt; m-&gt;<a class="code" href="structbin__mdef__s.html#ab9dad211cbc12eb6f848482bcf78d47f">n_sseq</a>; ++i)</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;            m-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a>[i] = m-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a>[i - 1] + m-&gt;<a class="code" href="structbin__mdef__s.html#ab534bbd280015795b8e8ca4e296f4946">sseq_len</a>[i - 1];</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;    }</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    <span class="comment">/* Now build the CD-to-CI mappings using the senone sequences.</span></div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;<span class="comment">     * This is the only really accurate way to do it, though it is</span></div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;<span class="comment">     * still inaccurate in the case of heterogeneous topologies or</span></div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;<span class="comment">     * cross-state tying. */</span></div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;    m-&gt;<a class="code" href="structbin__mdef__s.html#ad5e814ffa116c85d46359e3ffd40bff7">cd2cisen</a> = (int16 *) ckd_malloc(m-&gt;<a class="code" href="structbin__mdef__s.html#a3d1c202165d8e5e153a73d708ca28109">n_sen</a> * <span class="keyword">sizeof</span>(*m-&gt;<a class="code" href="structbin__mdef__s.html#ad5e814ffa116c85d46359e3ffd40bff7">cd2cisen</a>));</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;    m-&gt;<a class="code" href="structbin__mdef__s.html#a457e5352e52a57de5d1536bcd6b331a9">sen2cimap</a> = (int16 *) ckd_malloc(m-&gt;<a class="code" href="structbin__mdef__s.html#a3d1c202165d8e5e153a73d708ca28109">n_sen</a> * <span class="keyword">sizeof</span>(*m-&gt;<a class="code" href="structbin__mdef__s.html#a457e5352e52a57de5d1536bcd6b331a9">sen2cimap</a>));</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;    <span class="comment">/* Default mappings (identity, none) */</span></div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;    <span class="keywordflow">for</span> (i = 0; i &lt; m-&gt;<a class="code" href="structbin__mdef__s.html#ad7c318d6db85fd4b8ac13a81c145bbb8">n_ci_sen</a>; ++i)</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;        m-&gt;<a class="code" href="structbin__mdef__s.html#ad5e814ffa116c85d46359e3ffd40bff7">cd2cisen</a>[i] = i;</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;    for (; i &lt; m-&gt;<a class="code" href="structbin__mdef__s.html#a3d1c202165d8e5e153a73d708ca28109">n_sen</a>; ++i)</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;        m-&gt;<a class="code" href="structbin__mdef__s.html#ad5e814ffa116c85d46359e3ffd40bff7">cd2cisen</a>[i] = -1;</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;    for (i = 0; i &lt; m-&gt;<a class="code" href="structbin__mdef__s.html#a3d1c202165d8e5e153a73d708ca28109">n_sen</a>; ++i)</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;        m-&gt;<a class="code" href="structbin__mdef__s.html#a457e5352e52a57de5d1536bcd6b331a9">sen2cimap</a>[i] = -1;</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;    for (i = 0; i &lt; m-&gt;<a class="code" href="structbin__mdef__s.html#ad746dbb3f8108f575a95182f96b4b18f">n_phone</a>; ++i) {</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;        int32 j, ssid = m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[i].<a class="code" href="structmdef__entry__s.html#a12986649de9c59de3cc805e375b2c9a2">ssid</a>;</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;        <span class="keywordflow">for</span> (j = 0; j &lt; bin_mdef_n_emit_state_phone(m, i); ++j) {</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;            <span class="keywordtype">int</span> s = bin_mdef_sseq2sen(m, ssid, j);</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;            <span class="keywordtype">int</span> ci = bin_mdef_pid2ci(m, i);</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;            <span class="comment">/* Take the first one and warn if we have cross-state tying. */</span></div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;            <span class="keywordflow">if</span> (m-&gt;<a class="code" href="structbin__mdef__s.html#a457e5352e52a57de5d1536bcd6b331a9">sen2cimap</a>[s] == -1)</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;                m-&gt;<a class="code" href="structbin__mdef__s.html#a457e5352e52a57de5d1536bcd6b331a9">sen2cimap</a>[s] = ci;</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;            <span class="keywordflow">if</span> (m-&gt;<a class="code" href="structbin__mdef__s.html#a457e5352e52a57de5d1536bcd6b331a9">sen2cimap</a>[s] != ci)</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;                E_WARN</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;                    (<span class="stringliteral">&quot;Senone %d is shared between multiple base phones\n&quot;</span>,</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;                     s);</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;            <span class="keywordflow">if</span> (j &gt; bin_mdef_n_emit_state_phone(m, ci))</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;                E_WARN(<span class="stringliteral">&quot;CD phone %d has fewer states than CI phone %d\n&quot;</span>,</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;                       i, ci);</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;                m-&gt;<a class="code" href="structbin__mdef__s.html#ad5e814ffa116c85d46359e3ffd40bff7">cd2cisen</a>[s] =</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;                    bin_mdef_sseq2sen(m, m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[ci].<a class="code" href="structmdef__entry__s.html#a12986649de9c59de3cc805e375b2c9a2">ssid</a>, j);</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;        }</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;    }</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;    <span class="comment">/* Set the silence phone. */</span></div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;    m-&gt;<a class="code" href="structbin__mdef__s.html#a9071b7698132c1c2ce92a6f742e1c82f">sil</a> = <a class="code" href="bin__mdef_8h.html#af592f710731474b77166a29530716672">bin_mdef_ciphone_id</a>(m, <a class="code" href="mdef_8h.html#a87b279af2566a60666495e16d09a8aee">S3_SILENCE_CIPHONE</a>);</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;    E_INFO</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;        (<span class="stringliteral">&quot;%d CI-phone, %d CD-phone, %d emitstate/phone, %d CI-sen, %d Sen, %d Sen-Seq\n&quot;</span>,</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;         m-&gt;<a class="code" href="structbin__mdef__s.html#a84d5f7acc6d85ba8c7611945f9c5e4e7">n_ciphone</a>, m-&gt;<a class="code" href="structbin__mdef__s.html#ad746dbb3f8108f575a95182f96b4b18f">n_phone</a> - m-&gt;<a class="code" href="structbin__mdef__s.html#a84d5f7acc6d85ba8c7611945f9c5e4e7">n_ciphone</a>, m-&gt;<a class="code" href="structbin__mdef__s.html#a2ad87254182be424ac6ff1234274f134">n_emit_state</a>,</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;         m-&gt;<a class="code" href="structbin__mdef__s.html#ad7c318d6db85fd4b8ac13a81c145bbb8">n_ci_sen</a>, m-&gt;<a class="code" href="structbin__mdef__s.html#a3d1c202165d8e5e153a73d708ca28109">n_sen</a>, m-&gt;<a class="code" href="structbin__mdef__s.html#ab9dad211cbc12eb6f848482bcf78d47f">n_sseq</a>);</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;    fclose(fh);</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;    <span class="keywordflow">return</span> m;</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;}</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00522"></a><span class="lineno"><a class="line" href="bin__mdef_8h.html#a982b8e598afed47805fab1509e8fc4bb">  522</a></span>&#160;<a class="code" href="bin__mdef_8h.html#a982b8e598afed47805fab1509e8fc4bb">bin_mdef_write</a>(<a class="code" href="structbin__mdef__s.html">bin_mdef_t</a> * m, <span class="keyword">const</span> <span class="keywordtype">char</span> *filename)</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;{</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    FILE *fh;</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;    int32 val, i;</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;    <span class="keywordflow">if</span> ((fh = fopen(filename, <span class="stringliteral">&quot;wb&quot;</span>)) == NULL)</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;        <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;    <span class="comment">/* Byteorder marker. */</span></div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    val = BIN_MDEF_NATIVE_ENDIAN;</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;    fwrite(&amp;val, 1, 4, fh);</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;    <span class="comment">/* Version. */</span></div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;    val = BIN_MDEF_FORMAT_VERSION;</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    fwrite(&amp;val, 1, <span class="keyword">sizeof</span>(val), fh);</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;    <span class="comment">/* Round the format descriptor size up to a 4-byte boundary. */</span></div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;    val = ((<span class="keyword">sizeof</span>(format_desc) + 3) &amp; ~3);</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;    fwrite(&amp;val, 1, <span class="keyword">sizeof</span>(val), fh);</div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;    fwrite(format_desc, 1, <span class="keyword">sizeof</span>(format_desc), fh);</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;    <span class="comment">/* Pad it with zeros. */</span></div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;    i = 0;</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;    fwrite(&amp;i, 1, val - <span class="keyword">sizeof</span>(format_desc), fh);</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;    <span class="comment">/* Binary header things. */</span></div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;    fwrite(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#a84d5f7acc6d85ba8c7611945f9c5e4e7">n_ciphone</a>, 4, 1, fh);</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;    fwrite(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#ad746dbb3f8108f575a95182f96b4b18f">n_phone</a>, 4, 1, fh);</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;    fwrite(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#a2ad87254182be424ac6ff1234274f134">n_emit_state</a>, 4, 1, fh);</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;    fwrite(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#ad7c318d6db85fd4b8ac13a81c145bbb8">n_ci_sen</a>, 4, 1, fh);</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;    fwrite(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#a3d1c202165d8e5e153a73d708ca28109">n_sen</a>, 4, 1, fh);</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;    fwrite(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#a979557ad4f8369e84d93f633512345ca">n_tmat</a>, 4, 1, fh);</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;    fwrite(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#ab9dad211cbc12eb6f848482bcf78d47f">n_sseq</a>, 4, 1, fh);</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;    fwrite(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#a31b5cda5136c6f72816da8889719bfe2">n_ctx</a>, 4, 1, fh);</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;    fwrite(&amp;m-&gt;<a class="code" href="structbin__mdef__s.html#ad625c3c55d5f42ed275b8b5638a6d80b">n_cd_tree</a>, 4, 1, fh);</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;    <span class="comment">/* Write this as a 32-bit value to preserve alignment for the</span></div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;<span class="comment">     * non-mmap case (we want things aligned both from the</span></div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;<span class="comment">     * beginning of the file and the beginning of the phone</span></div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;<span class="comment">     * strings). */</span></div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;    val = m-&gt;<a class="code" href="structbin__mdef__s.html#a9071b7698132c1c2ce92a6f742e1c82f">sil</a>;</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;    fwrite(&amp;val, 4, 1, fh);</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    <span class="comment">/* Phone strings. */</span></div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;    <span class="keywordflow">for</span> (i = 0; i &lt; m-&gt;<a class="code" href="structbin__mdef__s.html#a84d5f7acc6d85ba8c7611945f9c5e4e7">n_ciphone</a>; ++i)</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;        fwrite(m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[i], 1, strlen(m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[i]) + 1, fh);</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    <span class="comment">/* Pad with zeros. */</span></div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;    val = (ftell(fh) + 3) &amp; ~3;</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;    i = 0;</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;    fwrite(&amp;i, 1, val - ftell(fh), fh);</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;    <span class="comment">/* Write CD-tree */</span></div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    fwrite(m-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>, <span class="keyword">sizeof</span>(*m-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>), m-&gt;<a class="code" href="structbin__mdef__s.html#ad625c3c55d5f42ed275b8b5638a6d80b">n_cd_tree</a>, fh);</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    <span class="comment">/* Write phones */</span></div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;    fwrite(m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>, <span class="keyword">sizeof</span>(*m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>), m-&gt;<a class="code" href="structbin__mdef__s.html#ad746dbb3f8108f575a95182f96b4b18f">n_phone</a>, fh);</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;    <span class="keywordflow">if</span> (m-&gt;<a class="code" href="structbin__mdef__s.html#a2ad87254182be424ac6ff1234274f134">n_emit_state</a>) {</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;        <span class="comment">/* Write size of sseq */</span></div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;        val = m-&gt;<a class="code" href="structbin__mdef__s.html#ab9dad211cbc12eb6f848482bcf78d47f">n_sseq</a> * m-&gt;<a class="code" href="structbin__mdef__s.html#a2ad87254182be424ac6ff1234274f134">n_emit_state</a>;</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;        fwrite(&amp;val, 4, 1, fh);</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;        <span class="comment">/* Write sseq */</span></div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;        fwrite(m-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a>[0], <span class="keyword">sizeof</span>(**m-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a>),</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;               m-&gt;<a class="code" href="structbin__mdef__s.html#ab9dad211cbc12eb6f848482bcf78d47f">n_sseq</a> * m-&gt;<a class="code" href="structbin__mdef__s.html#a2ad87254182be424ac6ff1234274f134">n_emit_state</a>, fh);</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;    }</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;        int32 n;</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;        <span class="comment">/* Calcluate size of sseq */</span></div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;        n = 0;</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;        <span class="keywordflow">for</span> (i = 0; i &lt; m-&gt;<a class="code" href="structbin__mdef__s.html#ab9dad211cbc12eb6f848482bcf78d47f">n_sseq</a>; ++i)</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;            n += m-&gt;<a class="code" href="structbin__mdef__s.html#ab534bbd280015795b8e8ca4e296f4946">sseq_len</a>[i];</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;        <span class="comment">/* Write size of sseq */</span></div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;        fwrite(&amp;n, 4, 1, fh);</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;</div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;        <span class="comment">/* Write sseq */</span></div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;        fwrite(m-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a>[0], <span class="keyword">sizeof</span>(**m-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a>), n, fh);</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;        <span class="comment">/* Write sseq_len */</span></div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;        fwrite(m-&gt;<a class="code" href="structbin__mdef__s.html#ab534bbd280015795b8e8ca4e296f4946">sseq_len</a>, 1, m-&gt;<a class="code" href="structbin__mdef__s.html#ab9dad211cbc12eb6f848482bcf78d47f">n_sseq</a>, fh);</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;    }</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;    fclose(fh);</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;}</div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;</div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00606"></a><span class="lineno"><a class="line" href="bin__mdef_8h.html#af89d79226df33947019efcfe7377d586">  606</a></span>&#160;<a class="code" href="bin__mdef_8h.html#af89d79226df33947019efcfe7377d586">bin_mdef_write_text</a>(<a class="code" href="structbin__mdef__s.html">bin_mdef_t</a> * m, <span class="keyword">const</span> <span class="keywordtype">char</span> *filename)</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;{</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    FILE *fh;</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;    <span class="keywordtype">int</span> p, i, n_total_state;</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;</div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;    <span class="keywordflow">if</span> (strcmp(filename, <span class="stringliteral">&quot;-&quot;</span>) == 0)</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;        fh = stdout;</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;        <span class="keywordflow">if</span> ((fh = fopen(filename, <span class="stringliteral">&quot;w&quot;</span>)) == NULL)</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;            <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;    }</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;    fprintf(fh, <span class="stringliteral">&quot;0.3\n&quot;</span>);</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;    fprintf(fh, <span class="stringliteral">&quot;%d n_base\n&quot;</span>, m-&gt;<a class="code" href="structbin__mdef__s.html#a84d5f7acc6d85ba8c7611945f9c5e4e7">n_ciphone</a>);</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;    fprintf(fh, <span class="stringliteral">&quot;%d n_tri\n&quot;</span>, m-&gt;<a class="code" href="structbin__mdef__s.html#ad746dbb3f8108f575a95182f96b4b18f">n_phone</a> - m-&gt;<a class="code" href="structbin__mdef__s.html#a84d5f7acc6d85ba8c7611945f9c5e4e7">n_ciphone</a>);</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;    <span class="keywordflow">if</span> (m-&gt;<a class="code" href="structbin__mdef__s.html#a2ad87254182be424ac6ff1234274f134">n_emit_state</a>)</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;        n_total_state = m-&gt;<a class="code" href="structbin__mdef__s.html#ad746dbb3f8108f575a95182f96b4b18f">n_phone</a> * (m-&gt;<a class="code" href="structbin__mdef__s.html#a2ad87254182be424ac6ff1234274f134">n_emit_state</a> + 1);</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;        n_total_state = 0;</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;        <span class="keywordflow">for</span> (i = 0; i &lt; m-&gt;<a class="code" href="structbin__mdef__s.html#ad746dbb3f8108f575a95182f96b4b18f">n_phone</a>; ++i)</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;            n_total_state += m-&gt;<a class="code" href="structbin__mdef__s.html#ab534bbd280015795b8e8ca4e296f4946">sseq_len</a>[m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[i].<a class="code" href="structmdef__entry__s.html#a12986649de9c59de3cc805e375b2c9a2">ssid</a>] + 1;</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;    }</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;    fprintf(fh, <span class="stringliteral">&quot;%d n_state_map\n&quot;</span>, n_total_state);</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;    fprintf(fh, <span class="stringliteral">&quot;%d n_tied_state\n&quot;</span>, m-&gt;<a class="code" href="structbin__mdef__s.html#a3d1c202165d8e5e153a73d708ca28109">n_sen</a>);</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;    fprintf(fh, <span class="stringliteral">&quot;%d n_tied_ci_state\n&quot;</span>, m-&gt;<a class="code" href="structbin__mdef__s.html#ad7c318d6db85fd4b8ac13a81c145bbb8">n_ci_sen</a>);</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;    fprintf(fh, <span class="stringliteral">&quot;%d n_tied_tmat\n&quot;</span>, m-&gt;<a class="code" href="structbin__mdef__s.html#a979557ad4f8369e84d93f633512345ca">n_tmat</a>);</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;    fprintf(fh, <span class="stringliteral">&quot;#\n# Columns definitions\n&quot;</span>);</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;    fprintf(fh, <span class="stringliteral">&quot;#%4s %3s %3s %1s %6s %4s %s\n&quot;</span>,</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;            <span class="stringliteral">&quot;base&quot;</span>, <span class="stringliteral">&quot;lft&quot;</span>, <span class="stringliteral">&quot;rt&quot;</span>, <span class="stringliteral">&quot;p&quot;</span>, <span class="stringliteral">&quot;attrib&quot;</span>, <span class="stringliteral">&quot;tmat&quot;</span>,</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;            <span class="stringliteral">&quot;     ... state id&#39;s ...&quot;</span>);</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;    <span class="keywordflow">for</span> (p = 0; p &lt; m-&gt;<a class="code" href="structbin__mdef__s.html#a84d5f7acc6d85ba8c7611945f9c5e4e7">n_ciphone</a>; p++) {</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;        <span class="keywordtype">int</span> n_state;</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;        fprintf(fh, <span class="stringliteral">&quot;%5s %3s %3s %1s&quot;</span>, m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[p], <span class="stringliteral">&quot;-&quot;</span>, <span class="stringliteral">&quot;-&quot;</span>, <span class="stringliteral">&quot;-&quot;</span>);</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;        <span class="keywordflow">if</span> (bin_mdef_is_fillerphone(m, p))</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;            fprintf(fh, <span class="stringliteral">&quot; %6s&quot;</span>, <span class="stringliteral">&quot;filler&quot;</span>);</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;            fprintf(fh, <span class="stringliteral">&quot; %6s&quot;</span>, <span class="stringliteral">&quot;n/a&quot;</span>);</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;        fprintf(fh, <span class="stringliteral">&quot; %4d&quot;</span>, m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[p].<a class="code" href="structmdef__entry__s.html#a90758df5d6eb00d3a70135ac4475c7a1">tmat</a>);</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;        <span class="keywordflow">if</span> (m-&gt;<a class="code" href="structbin__mdef__s.html#a2ad87254182be424ac6ff1234274f134">n_emit_state</a>)</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;            n_state = m-&gt;<a class="code" href="structbin__mdef__s.html#a2ad87254182be424ac6ff1234274f134">n_emit_state</a>;</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;            n_state = m-&gt;<a class="code" href="structbin__mdef__s.html#ab534bbd280015795b8e8ca4e296f4946">sseq_len</a>[m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[p].<a class="code" href="structmdef__entry__s.html#a12986649de9c59de3cc805e375b2c9a2">ssid</a>];</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;        <span class="keywordflow">for</span> (i = 0; i &lt; n_state; i++) {</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;            fprintf(fh, <span class="stringliteral">&quot; %6u&quot;</span>, m-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a>[m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[p].<a class="code" href="structmdef__entry__s.html#a12986649de9c59de3cc805e375b2c9a2">ssid</a>][i]);</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;        }</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;        fprintf(fh, <span class="stringliteral">&quot; N\n&quot;</span>);</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;    }</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;    <span class="keywordflow">for</span> (; p &lt; m-&gt;<a class="code" href="structbin__mdef__s.html#ad746dbb3f8108f575a95182f96b4b18f">n_phone</a>; p++) {</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;        <span class="keywordtype">int</span> n_state;</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;        fprintf(fh, <span class="stringliteral">&quot;%5s %3s %3s %c&quot;</span>,</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;                m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[p].info.cd.ctx[0]],</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;                m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[p].info.cd.ctx[1]],</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;                m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[p].info.cd.ctx[2]],</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;                (<a class="code" href="mdef_8h.html#a89ef0442ded2ff90176ba6d02563923d">WPOS_NAME</a>)[m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[p].info.cd.wpos]);</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;        <span class="keywordflow">if</span> (bin_mdef_is_fillerphone(m, p))</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;            fprintf(fh, <span class="stringliteral">&quot; %6s&quot;</span>, <span class="stringliteral">&quot;filler&quot;</span>);</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;            fprintf(fh, <span class="stringliteral">&quot; %6s&quot;</span>, <span class="stringliteral">&quot;n/a&quot;</span>);</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;        fprintf(fh, <span class="stringliteral">&quot; %4d&quot;</span>, m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[p].<a class="code" href="structmdef__entry__s.html#a90758df5d6eb00d3a70135ac4475c7a1">tmat</a>);</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;        <span class="keywordflow">if</span> (m-&gt;<a class="code" href="structbin__mdef__s.html#a2ad87254182be424ac6ff1234274f134">n_emit_state</a>)</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;            n_state = m-&gt;<a class="code" href="structbin__mdef__s.html#a2ad87254182be424ac6ff1234274f134">n_emit_state</a>;</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;            n_state = m-&gt;<a class="code" href="structbin__mdef__s.html#ab534bbd280015795b8e8ca4e296f4946">sseq_len</a>[m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[p].<a class="code" href="structmdef__entry__s.html#a12986649de9c59de3cc805e375b2c9a2">ssid</a>];</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;        <span class="keywordflow">for</span> (i = 0; i &lt; n_state; i++) {</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;            fprintf(fh, <span class="stringliteral">&quot; %6u&quot;</span>, m-&gt;<a class="code" href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">sseq</a>[m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[p].<a class="code" href="structmdef__entry__s.html#a12986649de9c59de3cc805e375b2c9a2">ssid</a>][i]);</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;        }</div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;        fprintf(fh, <span class="stringliteral">&quot; N\n&quot;</span>);</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;    }</div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;</div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;    <span class="keywordflow">if</span> (strcmp(filename, <span class="stringliteral">&quot;-&quot;</span>) != 0)</div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;        fclose(fh);</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;}</div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;</div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00691"></a><span class="lineno"><a class="line" href="bin__mdef_8h.html#af592f710731474b77166a29530716672">  691</a></span>&#160;<a class="code" href="bin__mdef_8h.html#af592f710731474b77166a29530716672">bin_mdef_ciphone_id</a>(<a class="code" href="structbin__mdef__s.html">bin_mdef_t</a> * m, <span class="keyword">const</span> <span class="keywordtype">char</span> *ciphone)</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;{</div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;    <span class="keywordtype">int</span> low, mid, high;</div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;</div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;    <span class="comment">/* Exact binary search on m-&gt;ciphone */</span></div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;    low = 0;</div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;    high = m-&gt;<a class="code" href="structbin__mdef__s.html#a84d5f7acc6d85ba8c7611945f9c5e4e7">n_ciphone</a>;</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;    <span class="keywordflow">while</span> (low &lt; high) {</div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;        <span class="keywordtype">int</span> c;</div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;        mid = (low + high) / 2;</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;        c = strcmp(ciphone, m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[mid]);</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;        <span class="keywordflow">if</span> (c == 0)</div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;            <span class="keywordflow">return</span> mid;</div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c &gt; 0)</div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;            low = mid + 1;</div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c &lt; 0)</div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;            high = mid;</div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;    }</div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;    <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;}</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;</div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00714"></a><span class="lineno"><a class="line" href="bin__mdef_8h.html#af437f39a8a9b52dd3187f7f0fc098cab">  714</a></span>&#160;<a class="code" href="bin__mdef_8h.html#af437f39a8a9b52dd3187f7f0fc098cab">bin_mdef_ciphone_id_nocase</a>(<a class="code" href="structbin__mdef__s.html">bin_mdef_t</a> * m, <span class="keyword">const</span> <span class="keywordtype">char</span> *ciphone)</div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;{</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;    <span class="keywordtype">int</span> low, mid, high;</div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;</div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;    <span class="comment">/* Exact binary search on m-&gt;ciphone */</span></div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;    low = 0;</div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;    high = m-&gt;<a class="code" href="structbin__mdef__s.html#a84d5f7acc6d85ba8c7611945f9c5e4e7">n_ciphone</a>;</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;    <span class="keywordflow">while</span> (low &lt; high) {</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;        <span class="keywordtype">int</span> c;</div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;</div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;        mid = (low + high) / 2;</div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;        c = strcmp_nocase(ciphone, m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[mid]);</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;        <span class="keywordflow">if</span> (c == 0)</div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;            <span class="keywordflow">return</span> mid;</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c &gt; 0)</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;            low = mid + 1;</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c &lt; 0)</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;            high = mid;</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;    }</div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;    <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;}</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;<span class="keyword">const</span> <span class="keywordtype">char</span> *</div><div class="line"><a name="l00737"></a><span class="lineno"><a class="line" href="bin__mdef_8h.html#a9498ffff0caf3965060b8a549348be9b">  737</a></span>&#160;<a class="code" href="bin__mdef_8h.html#a9498ffff0caf3965060b8a549348be9b">bin_mdef_ciphone_str</a>(<a class="code" href="structbin__mdef__s.html">bin_mdef_t</a> * m, int32 ci)</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;{</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;    assert(m != NULL);</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;    assert(ci &lt; m-&gt;n_ciphone);</div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;    <span class="keywordflow">return</span> m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[ci];</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;}</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00745"></a><span class="lineno"><a class="line" href="bin__mdef_8h.html#a99cd766df3a6a74eab9e316586189d54">  745</a></span>&#160;<a class="code" href="bin__mdef_8h.html#a99cd766df3a6a74eab9e316586189d54">bin_mdef_phone_id</a>(<a class="code" href="structbin__mdef__s.html">bin_mdef_t</a> * m, int32 ci, int32 lc, int32 rc, int32 wpos)</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;{</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;    <a class="code" href="structcd__tree__s.html">cd_tree_t</a> *cd_tree;</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;    <span class="keywordtype">int</span> level, max;</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;    int16 ctx[4];</div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;</div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;    assert(m);</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;</div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;    <span class="comment">/* In the future, we might back off when context is not available,</span></div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;<span class="comment">     * but for now we&#39;ll just return the CI phone. */</span></div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;    <span class="keywordflow">if</span> (lc &lt; 0 || rc &lt; 0)</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;        <span class="keywordflow">return</span> ci;</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;</div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;    assert((ci &gt;= 0) &amp;&amp; (ci &lt; m-&gt;n_ciphone));</div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;    assert((lc &gt;= 0) &amp;&amp; (lc &lt; m-&gt;n_ciphone));</div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;    assert((rc &gt;= 0) &amp;&amp; (rc &lt; m-&gt;n_ciphone));</div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;    assert((wpos &gt;= 0) &amp;&amp; (wpos &lt; <a class="code" href="mdef_8h.html#ac271413770c3e95b993b856967b61487">N_WORD_POSN</a>));</div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;    <span class="comment">/* Create a context list, mapping fillers to silence. */</span></div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;    ctx[0] = wpos;</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;    ctx[1] = ci;</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;    ctx[2] = (m-&gt;<a class="code" href="structbin__mdef__s.html#a9071b7698132c1c2ce92a6f742e1c82f">sil</a> &gt;= 0</div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;              &amp;&amp; m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[lc].info.<a class="code" href="structmdef__entry__s.html#a24e5db7af5e705b310e82154055043ec">ci</a>.filler) ? m-&gt;<a class="code" href="structbin__mdef__s.html#a9071b7698132c1c2ce92a6f742e1c82f">sil</a> : lc;</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;    ctx[3] = (m-&gt;<a class="code" href="structbin__mdef__s.html#a9071b7698132c1c2ce92a6f742e1c82f">sil</a> &gt;= 0</div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;              &amp;&amp; m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[rc].info.<a class="code" href="structmdef__entry__s.html#a24e5db7af5e705b310e82154055043ec">ci</a>.filler) ? m-&gt;<a class="code" href="structbin__mdef__s.html#a9071b7698132c1c2ce92a6f742e1c82f">sil</a> : rc;</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;    <span class="comment">/* Walk down the cd_tree. */</span></div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;    cd_tree = m-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>;</div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;    level = 0;                  <span class="comment">/* What level we are on. */</span></div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;    max = <a class="code" href="mdef_8h.html#ac271413770c3e95b993b856967b61487">N_WORD_POSN</a>;          <span class="comment">/* Number of nodes on this level. */</span></div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;    <span class="keywordflow">while</span> (level &lt; 4) {</div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;        <span class="keywordtype">int</span> i;</div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;<span class="preprocessor">#if 0</span></div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;        E_INFO(<span class="stringliteral">&quot;Looking for context %d=%s in %d at %d\n&quot;</span>,</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;               ctx[level], m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[ctx[level]],</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;               max, cd_tree - m-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>);</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;        <span class="keywordflow">for</span> (i = 0; i &lt; max; ++i) {</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;<span class="preprocessor">#if 0</span></div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;            E_INFO(<span class="stringliteral">&quot;Look at context %d=%s at %d\n&quot;</span>,</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;                   cd_tree[i].ctx,</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;                   m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[cd_tree[i].<a class="code" href="structcd__tree__s.html#a2168538bf6cc21ad1a2c99fa2deb4559">ctx</a>], cd_tree + i - m-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>);</div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;            <span class="keywordflow">if</span> (cd_tree[i].ctx == ctx[level])</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;        }</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;        <span class="keywordflow">if</span> (i == max)</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;            <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;<span class="preprocessor">#if 0</span></div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;        E_INFO(<span class="stringliteral">&quot;Found context %d=%s at %d, n_down=%d, down=%d\n&quot;</span>,</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;               ctx[level], m-&gt;<a class="code" href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">ciname</a>[ctx[level]],</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;               cd_tree + i - m-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a>,</div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;               cd_tree[i].<a class="code" href="structcd__tree__s.html#ae5e735d325b0f278ff2ad55293faa616">n_down</a>, cd_tree[i].c.<a class="code" href="structcd__tree__s.html#aa536f1cbd93e2cded1238b39b8aa3751">down</a>);</div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;        <span class="comment">/* Leaf node, stop here. */</span></div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;        <span class="keywordflow">if</span> (cd_tree[i].n_down == 0)</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;            <span class="keywordflow">return</span> cd_tree[i].c.<a class="code" href="structcd__tree__s.html#a6635c35ad6fe74ad045389c76349016d">pid</a>;</div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;</div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;        <span class="comment">/* Go down one level. */</span></div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;        max = cd_tree[i].<a class="code" href="structcd__tree__s.html#ae5e735d325b0f278ff2ad55293faa616">n_down</a>;</div><div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;        cd_tree = m-&gt;<a class="code" href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">cd_tree</a> + cd_tree[i].c.<a class="code" href="structcd__tree__s.html#aa536f1cbd93e2cded1238b39b8aa3751">down</a>;</div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;        ++level;</div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;    }</div><div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;    <span class="comment">/* We probably shouldn&#39;t get here. */</span></div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;    <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;}</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;bin_mdef_phone_id_nearest(<a class="code" href="structbin__mdef__s.html">bin_mdef_t</a> * m, int32 b, int32 l, int32 r, int32 pos)</div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;{</div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;    <span class="keywordtype">int</span> p, tmppos;</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;</div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;    <span class="comment">/* In the future, we might back off when context is not available,</span></div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;<span class="comment">     * but for now we&#39;ll just return the CI phone. */</span></div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;    <span class="keywordflow">if</span> (l &lt; 0 || r &lt; 0)</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;        <span class="keywordflow">return</span> b;</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;</div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;    p = <a class="code" href="bin__mdef_8h.html#a99cd766df3a6a74eab9e316586189d54">bin_mdef_phone_id</a>(m, b, l, r, pos);</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;    <span class="keywordflow">if</span> (p &gt;= 0)</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;        <span class="keywordflow">return</span> p;</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;    <span class="comment">/* Exact triphone not found; backoff to other word positions */</span></div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;    <span class="keywordflow">for</span> (tmppos = 0; tmppos &lt; <a class="code" href="mdef_8h.html#ac271413770c3e95b993b856967b61487">N_WORD_POSN</a>; tmppos++) {</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;        <span class="keywordflow">if</span> (tmppos != pos) {</div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;            p = <a class="code" href="bin__mdef_8h.html#a99cd766df3a6a74eab9e316586189d54">bin_mdef_phone_id</a>(m, b, l, r, tmppos);</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;            <span class="keywordflow">if</span> (p &gt;= 0)</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;                <span class="keywordflow">return</span> p;</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;        }</div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;    }</div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;    <span class="comment">/* Nothing yet; backoff to silence phone if non-silence filler context */</span></div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;    <span class="comment">/* In addition, backoff to silence phone on left/right if in beginning/end position */</span></div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;    <span class="keywordflow">if</span> (m-&gt;<a class="code" href="structbin__mdef__s.html#a9071b7698132c1c2ce92a6f742e1c82f">sil</a> &gt;= 0) {</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;        <span class="keywordtype">int</span> newl = l, newr = r;</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;        <span class="keywordflow">if</span> (m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[(<span class="keywordtype">int</span>)l].info.<a class="code" href="structmdef__entry__s.html#a24e5db7af5e705b310e82154055043ec">ci</a>.filler</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;            || pos == <a class="code" href="mdef_8h.html#a71b2bcae7b6e79bad584cc5500b20e8fa8ca058a8d25d38d074e028460833c8a9">WORD_POSN_BEGIN</a> || pos == <a class="code" href="mdef_8h.html#a71b2bcae7b6e79bad584cc5500b20e8fa34f808e43d8f6e9312054f34a8bd74ac">WORD_POSN_SINGLE</a>)</div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;            newl = m-&gt;<a class="code" href="structbin__mdef__s.html#a9071b7698132c1c2ce92a6f742e1c82f">sil</a>;</div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;        <span class="keywordflow">if</span> (m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[(<span class="keywordtype">int</span>)r].info.<a class="code" href="structmdef__entry__s.html#a24e5db7af5e705b310e82154055043ec">ci</a>.filler</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;            || pos == <a class="code" href="mdef_8h.html#a71b2bcae7b6e79bad584cc5500b20e8fa85b62e42f20399f933b33099290989c3">WORD_POSN_END</a> || pos == <a class="code" href="mdef_8h.html#a71b2bcae7b6e79bad584cc5500b20e8fa34f808e43d8f6e9312054f34a8bd74ac">WORD_POSN_SINGLE</a>)</div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;            newr = m-&gt;<a class="code" href="structbin__mdef__s.html#a9071b7698132c1c2ce92a6f742e1c82f">sil</a>;</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;        <span class="keywordflow">if</span> ((newl != l) || (newr != r)) {</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;            p = <a class="code" href="bin__mdef_8h.html#a99cd766df3a6a74eab9e316586189d54">bin_mdef_phone_id</a>(m, b, newl, newr, pos);</div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;            <span class="keywordflow">if</span> (p &gt;= 0)</div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;                <span class="keywordflow">return</span> p;</div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;</div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;            <span class="keywordflow">for</span> (tmppos = 0; tmppos &lt; <a class="code" href="mdef_8h.html#ac271413770c3e95b993b856967b61487">N_WORD_POSN</a>; tmppos++) {</div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;                <span class="keywordflow">if</span> (tmppos != pos) {</div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;                    p = <a class="code" href="bin__mdef_8h.html#a99cd766df3a6a74eab9e316586189d54">bin_mdef_phone_id</a>(m, b, newl, newr, tmppos);</div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;                    <span class="keywordflow">if</span> (p &gt;= 0)</div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;                        <span class="keywordflow">return</span> p;</div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;                }</div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;            }</div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;        }</div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;    }</div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;</div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;    <span class="comment">/* Nothing yet; backoff to base phone */</span></div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;    <span class="keywordflow">return</span> b;</div><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;}</div><div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;</div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;<span class="keywordtype">int</span></div><div class="line"><a name="l00868"></a><span class="lineno"><a class="line" href="bin__mdef_8h.html#a35d0676dd56e11508c62e84947901503">  868</a></span>&#160;<a class="code" href="bin__mdef_8h.html#a35d0676dd56e11508c62e84947901503">bin_mdef_phone_str</a>(<a class="code" href="structbin__mdef__s.html">bin_mdef_t</a> * m, <span class="keywordtype">int</span> pid, <span class="keywordtype">char</span> *buf)</div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;{</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;    <span class="keywordtype">char</span> *wpos_name;</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;    assert(m);</div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;    assert((pid &gt;= 0) &amp;&amp; (pid &lt; m-&gt;n_phone));</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;    wpos_name = <a class="code" href="mdef_8h.html#a89ef0442ded2ff90176ba6d02563923d">WPOS_NAME</a>;</div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;</div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;    buf[0] = <span class="charliteral">&#39;\0&#39;</span>;</div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;    <span class="keywordflow">if</span> (pid &lt; m-&gt;n_ciphone)</div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;        sprintf(buf, <span class="stringliteral">&quot;%s&quot;</span>, <a class="code" href="bin__mdef_8h.html#a9498ffff0caf3965060b8a549348be9b">bin_mdef_ciphone_str</a>(m, pid));</div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;        sprintf(buf, <span class="stringliteral">&quot;%s %s %s %c&quot;</span>,</div><div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;                <a class="code" href="bin__mdef_8h.html#a9498ffff0caf3965060b8a549348be9b">bin_mdef_ciphone_str</a>(m, m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[pid].info.cd.ctx[0]),</div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;                <a class="code" href="bin__mdef_8h.html#a9498ffff0caf3965060b8a549348be9b">bin_mdef_ciphone_str</a>(m, m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[pid].info.cd.ctx[1]),</div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;                <a class="code" href="bin__mdef_8h.html#a9498ffff0caf3965060b8a549348be9b">bin_mdef_ciphone_str</a>(m, m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[pid].info.cd.ctx[2]),</div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;                wpos_name[m-&gt;<a class="code" href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">phone</a>[pid].info.cd.wpos]);</div><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;    }</div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;}</div><div class="ttc" id="structmdef__t_html_ad9afd537734fe1f336e20218da28fb2c"><div class="ttname"><a href="structmdef__t.html#ad9afd537734fe1f336e20218da28fb2c">mdef_t::n_sseq</a></div><div class="ttdeci">int32 n_sseq</div><div class="ttdoc">No. </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00148">mdef.h:148</a></div></div>
<div class="ttc" id="structmdef__t_html"><div class="ttname"><a href="structmdef__t.html">mdef_t</a></div><div class="ttdoc">The main model definition structure. </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00135">mdef.h:135</a></div></div>
<div class="ttc" id="structcd__tree__s_html_a2168538bf6cc21ad1a2c99fa2deb4559"><div class="ttname"><a href="structcd__tree__s.html#a2168538bf6cc21ad1a2c99fa2deb4559">cd_tree_s::ctx</a></div><div class="ttdeci">int16 ctx</div><div class="ttdoc">Context (word position or CI phone) </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00105">bin_mdef.h:105</a></div></div>
<div class="ttc" id="structcd__tree__s_html_ae5e735d325b0f278ff2ad55293faa616"><div class="ttname"><a href="structcd__tree__s.html#ae5e735d325b0f278ff2ad55293faa616">cd_tree_s::n_down</a></div><div class="ttdeci">int16 n_down</div><div class="ttdoc">Number of children (0 for leafnode) </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00106">bin_mdef.h:106</a></div></div>
<div class="ttc" id="structmdef__t_html_af460d8d703782cf50ed99164cee17347"><div class="ttname"><a href="structmdef__t.html#af460d8d703782cf50ed99164cee17347">mdef_t::n_ciphone</a></div><div class="ttdeci">int32 n_ciphone</div><div class="ttdoc">number basephones actually present </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00136">mdef.h:136</a></div></div>
<div class="ttc" id="bin__mdef_8h_html_a982b8e598afed47805fab1509e8fc4bb"><div class="ttname"><a href="bin__mdef_8h.html#a982b8e598afed47805fab1509e8fc4bb">bin_mdef_write</a></div><div class="ttdeci">POCKETSPHINX_EXPORT int bin_mdef_write(bin_mdef_t *m, const char *filename)</div><div class="ttdoc">Write a binary mdef to a file. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8c_source.html#l00522">bin_mdef.c:522</a></div></div>
<div class="ttc" id="bin__mdef_8h_html_a9498ffff0caf3965060b8a549348be9b"><div class="ttname"><a href="bin__mdef_8h.html#a9498ffff0caf3965060b8a549348be9b">bin_mdef_ciphone_str</a></div><div class="ttdeci">const char * bin_mdef_ciphone_str(bin_mdef_t *m, int32 ci)</div><div class="ttdoc">In: ciphone id for which name wanted. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8c_source.html#l00737">bin_mdef.c:737</a></div></div>
<div class="ttc" id="structphone__t_html_a5436db1dd178ef5ead83359c84963c83"><div class="ttname"><a href="structphone__t.html#a5436db1dd178ef5ead83359c84963c83">phone_t::wpos</a></div><div class="ttdeci">word_posn_t wpos</div><div class="ttdoc">Word position. </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00103">mdef.h:103</a></div></div>
<div class="ttc" id="structbin__mdef__s_html_a979557ad4f8369e84d93f633512345ca"><div class="ttname"><a href="structbin__mdef__s.html#a979557ad4f8369e84d93f633512345ca">bin_mdef_s::n_tmat</a></div><div class="ttdeci">int32 n_tmat</div><div class="ttdoc">Number of transition matrices. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00124">bin_mdef.h:124</a></div></div>
<div class="ttc" id="mdef_8h_html_a71b2bcae7b6e79bad584cc5500b20e8fa34f808e43d8f6e9312054f34a8bd74ac"><div class="ttname"><a href="mdef_8h.html#a71b2bcae7b6e79bad584cc5500b20e8fa34f808e43d8f6e9312054f34a8bd74ac">WORD_POSN_SINGLE</a></div><div class="ttdoc">Single phone word (i.e. </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00076">mdef.h:76</a></div></div>
<div class="ttc" id="structbin__mdef__s_html_a3d1c202165d8e5e153a73d708ca28109"><div class="ttname"><a href="structbin__mdef__s.html#a3d1c202165d8e5e153a73d708ca28109">bin_mdef_s::n_sen</a></div><div class="ttdeci">int32 n_sen</div><div class="ttdoc">Number of senones (CI+CD) </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00123">bin_mdef.h:123</a></div></div>
<div class="ttc" id="structmdef__entry__s_html_a12986649de9c59de3cc805e375b2c9a2"><div class="ttname"><a href="structmdef__entry__s.html#a12986649de9c59de3cc805e375b2c9a2">mdef_entry_s::ssid</a></div><div class="ttdeci">int32 ssid</div><div class="ttdoc">Senone sequence ID. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00074">bin_mdef.h:74</a></div></div>
<div class="ttc" id="bin__mdef_8h_html_af592f710731474b77166a29530716672"><div class="ttname"><a href="bin__mdef_8h.html#af592f710731474b77166a29530716672">bin_mdef_ciphone_id</a></div><div class="ttdeci">int bin_mdef_ciphone_id(bin_mdef_t *m, const char *ciphone)</div><div class="ttdoc">Context-independent phone lookup. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8c_source.html#l00691">bin_mdef.c:691</a></div></div>
<div class="ttc" id="structbin__mdef__s_html_ad625c3c55d5f42ed275b8b5638a6d80b"><div class="ttname"><a href="structbin__mdef__s.html#ad625c3c55d5f42ed275b8b5638a6d80b">bin_mdef_s::n_cd_tree</a></div><div class="ttdeci">int32 n_cd_tree</div><div class="ttdoc">Number of nodes in cd_tree (below) </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00127">bin_mdef.h:127</a></div></div>
<div class="ttc" id="structbin__mdef__s_html_acb58480658812de7a357dcbd25ad7b41"><div class="ttname"><a href="structbin__mdef__s.html#acb58480658812de7a357dcbd25ad7b41">bin_mdef_s::sseq</a></div><div class="ttdeci">uint16 ** sseq</div><div class="ttdoc">Unique senone sequences (2D array built at load time) </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00134">bin_mdef.h:134</a></div></div>
<div class="ttc" id="mdef_8h_html_a89ef0442ded2ff90176ba6d02563923d"><div class="ttname"><a href="mdef_8h.html#a89ef0442ded2ff90176ba6d02563923d">WPOS_NAME</a></div><div class="ttdeci">#define WPOS_NAME</div><div class="ttdoc">Printable code for each word position above. </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00080">mdef.h:80</a></div></div>
<div class="ttc" id="structmdef__entry__s_html_a90758df5d6eb00d3a70135ac4475c7a1"><div class="ttname"><a href="structmdef__entry__s.html#a90758df5d6eb00d3a70135ac4475c7a1">mdef_entry_s::tmat</a></div><div class="ttdeci">int32 tmat</div><div class="ttdoc">Transition matrix ID. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00075">bin_mdef.h:75</a></div></div>
<div class="ttc" id="structbin__mdef__s_html_a0642be2bb56149689ad3fc1dad1e5d55"><div class="ttname"><a href="structbin__mdef__s.html#a0642be2bb56149689ad3fc1dad1e5d55">bin_mdef_s::cd_tree</a></div><div class="ttdeci">cd_tree_t * cd_tree</div><div class="ttdoc">Tree mapping CD phones to phone IDs. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00132">bin_mdef.h:132</a></div></div>
<div class="ttc" id="bin__mdef_8h_html"><div class="ttname"><a href="bin__mdef_8h.html">bin_mdef.h</a></div><div class="ttdoc">Binary format model definition files, with support for heterogeneous topologies and variable-size N-p...</div></div>
<div class="ttc" id="bin__mdef_8h_html_a8ee283c316e9f4aa8e6d18c1d44026bc"><div class="ttname"><a href="bin__mdef_8h.html#a8ee283c316e9f4aa8e6d18c1d44026bc">BAD_SSID</a></div><div class="ttdeci">#define BAD_SSID</div><div class="ttdoc">Invalid senone sequence ID (limited to 16 bits for PocketSphinx). </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00094">bin_mdef.h:94</a></div></div>
<div class="ttc" id="structciphone__t_html_a96e20b175c00c4edcd75d922dba067cd"><div class="ttname"><a href="structciphone__t.html#a96e20b175c00c4edcd75d922dba067cd">ciphone_t::filler</a></div><div class="ttdeci">int32 filler</div><div class="ttdoc">Whether a filler phone; if so, can be substituted by silence phone in left or right context position...</div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00089">mdef.h:89</a></div></div>
<div class="ttc" id="mdef_8h_html_a71b2bcae7b6e79bad584cc5500b20e8fa85b62e42f20399f933b33099290989c3"><div class="ttname"><a href="mdef_8h.html#a71b2bcae7b6e79bad584cc5500b20e8fa85b62e42f20399f933b33099290989c3">WORD_POSN_END</a></div><div class="ttdoc">Ending phone of word. </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00075">mdef.h:75</a></div></div>
<div class="ttc" id="structbin__mdef__s_html_a3358a80c50bf3f62417596553adf9c5e"><div class="ttname"><a href="structbin__mdef__s.html#a3358a80c50bf3f62417596553adf9c5e">bin_mdef_s::filemap</a></div><div class="ttdeci">mmio_file_t * filemap</div><div class="ttdoc">File map for this file (if any) </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00130">bin_mdef.h:130</a></div></div>
<div class="ttc" id="structmdef__t_html_a987f0b9bc4c951ac031f5d283960bd9f"><div class="ttname"><a href="structmdef__t.html#a987f0b9bc4c951ac031f5d283960bd9f">mdef_t::n_phone</a></div><div class="ttdeci">int32 n_phone</div><div class="ttdoc">number basephones + number triphones actually present </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00137">mdef.h:137</a></div></div>
<div class="ttc" id="structphone__t_html_a334106cbedf3d95a6bdebc4704e028cd"><div class="ttname"><a href="structphone__t.html#a334106cbedf3d95a6bdebc4704e028cd">phone_t::rc</a></div><div class="ttdeci">int16 rc</div><div class="ttdoc">Base, left, right context ciphones. </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00102">mdef.h:102</a></div></div>
<div class="ttc" id="structciphone__t_html_a2327c5f09fa245c25926c718fdab642d"><div class="ttname"><a href="structciphone__t.html#a2327c5f09fa245c25926c718fdab642d">ciphone_t::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">The name of the CI phone. </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00088">mdef.h:88</a></div></div>
<div class="ttc" id="structmdef__t_html_ae2ba90b39a79603022daae3c9270a0b7"><div class="ttname"><a href="structmdef__t.html#ae2ba90b39a79603022daae3c9270a0b7">mdef_t::cd2cisen</a></div><div class="ttdeci">int16 * cd2cisen</div><div class="ttdoc">Parent CI-senone id for each senone; the first n_ci_sen are identity mappings; the CD-senones are con...</div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00150">mdef.h:150</a></div></div>
<div class="ttc" id="structbin__mdef__s_html_ad746dbb3f8108f575a95182f96b4b18f"><div class="ttname"><a href="structbin__mdef__s.html#ad746dbb3f8108f575a95182f96b4b18f">bin_mdef_s::n_phone</a></div><div class="ttdeci">int32 n_phone</div><div class="ttdoc">Number of base (CI) phones + (CD) triphones. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00120">bin_mdef.h:120</a></div></div>
<div class="ttc" id="structbin__mdef__s_html"><div class="ttname"><a href="structbin__mdef__s.html">bin_mdef_s</a></div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00117">bin_mdef.h:117</a></div></div>
<div class="ttc" id="structbin__mdef__s_html_ab534bbd280015795b8e8ca4e296f4946"><div class="ttname"><a href="structbin__mdef__s.html#ab534bbd280015795b8e8ca4e296f4946">bin_mdef_s::sseq_len</a></div><div class="ttdeci">uint8 * sseq_len</div><div class="ttdoc">Number of states in each sseq (NULL for homogeneous) </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00135">bin_mdef.h:135</a></div></div>
<div class="ttc" id="structmdef__entry__s_html_a24e5db7af5e705b310e82154055043ec"><div class="ttname"><a href="structmdef__entry__s.html#a24e5db7af5e705b310e82154055043ec">mdef_entry_s::ci</a></div><div class="ttdeci">struct mdef_entry_s::@0::@1 ci</div><div class="ttdoc">&lt; CI phone information - attributes (just &quot;filler&quot; for now) </div></div>
<div class="ttc" id="structbin__mdef__s_html_ab9dad211cbc12eb6f848482bcf78d47f"><div class="ttname"><a href="structbin__mdef__s.html#ab9dad211cbc12eb6f848482bcf78d47f">bin_mdef_s::n_sseq</a></div><div class="ttdeci">int32 n_sseq</div><div class="ttdoc">Number of unique senone sequences. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00125">bin_mdef.h:125</a></div></div>
<div class="ttc" id="structbin__mdef__s_html_afdd0df913746b0656186fc8c3e8a9206"><div class="ttname"><a href="structbin__mdef__s.html#afdd0df913746b0656186fc8c3e8a9206">bin_mdef_s::ciname</a></div><div class="ttdeci">char ** ciname</div><div class="ttdoc">CI phone names. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00131">bin_mdef.h:131</a></div></div>
<div class="ttc" id="bin__mdef_8h_html_a3930ae6b3309a615335585db4b46306f"><div class="ttname"><a href="bin__mdef_8h.html#a3930ae6b3309a615335585db4b46306f">bin_mdef_read</a></div><div class="ttdeci">POCKETSPHINX_EXPORT bin_mdef_t * bin_mdef_read(cmd_ln_t *config, const char *filename)</div><div class="ttdoc">Read a binary mdef from a file. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8c_source.html#l00323">bin_mdef.c:323</a></div></div>
<div class="ttc" id="structbin__mdef__s_html_a31b5cda5136c6f72816da8889719bfe2"><div class="ttname"><a href="structbin__mdef__s.html#a31b5cda5136c6f72816da8889719bfe2">bin_mdef_s::n_ctx</a></div><div class="ttdeci">int32 n_ctx</div><div class="ttdoc">Number of phones of context. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00126">bin_mdef.h:126</a></div></div>
<div class="ttc" id="mdef_8h_html_a38d2a4b150ecb10a3c80f3504cfdc63d"><div class="ttname"><a href="mdef_8h.html#a38d2a4b150ecb10a3c80f3504cfdc63d">mdef_free</a></div><div class="ttdeci">void mdef_free(mdef_t *mdef)</div><div class="ttdoc">Free an mdef_t. </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8c_source.html#l00720">mdef.c:720</a></div></div>
<div class="ttc" id="mdef_8h_html_ac271413770c3e95b993b856967b61487"><div class="ttname"><a href="mdef_8h.html#ac271413770c3e95b993b856967b61487">N_WORD_POSN</a></div><div class="ttdeci">#define N_WORD_POSN</div><div class="ttdoc">total # of word positions (excluding undefined) </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00079">mdef.h:79</a></div></div>
<div class="ttc" id="structbin__mdef__s_html_ad7c318d6db85fd4b8ac13a81c145bbb8"><div class="ttname"><a href="structbin__mdef__s.html#ad7c318d6db85fd4b8ac13a81c145bbb8">bin_mdef_s::n_ci_sen</a></div><div class="ttdeci">int32 n_ci_sen</div><div class="ttdoc">Number of CI senones; these are the first. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00122">bin_mdef.h:122</a></div></div>
<div class="ttc" id="structmdef__t_html_a68c3cc85b849363609fd5dadf412a38c"><div class="ttname"><a href="structmdef__t.html#a68c3cc85b849363609fd5dadf412a38c">mdef_t::n_ci_sen</a></div><div class="ttdeci">int32 n_ci_sen</div><div class="ttdoc">number CI senones; these are the first </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00139">mdef.h:139</a></div></div>
<div class="ttc" id="structphone__t_html_af2f31836358c1c29c38a361b3923b859"><div class="ttname"><a href="structphone__t.html#af2f31836358c1c29c38a361b3923b859">phone_t::ssid</a></div><div class="ttdeci">int32 ssid</div><div class="ttdoc">State sequence (or senone sequence) ID, considering the n_emit_state senone-ids are a unit...</div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00098">mdef.h:98</a></div></div>
<div class="ttc" id="bin__mdef_8h_html_ab6c771eca798ab8c94e0933a1f8daafc"><div class="ttname"><a href="bin__mdef_8h.html#ab6c771eca798ab8c94e0933a1f8daafc">BAD_SENID</a></div><div class="ttdeci">#define BAD_SENID</div><div class="ttdoc">Invalid senone ID (limited to 16 bits for PocketSphinx). </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00098">bin_mdef.h:98</a></div></div>
<div class="ttc" id="bin__mdef_8h_html_a99cd766df3a6a74eab9e316586189d54"><div class="ttname"><a href="bin__mdef_8h.html#a99cd766df3a6a74eab9e316586189d54">bin_mdef_phone_id</a></div><div class="ttdeci">int bin_mdef_phone_id(bin_mdef_t *m, int32 b, int32 l, int32 r, int32 pos)</div><div class="ttdoc">In: Word position. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8c_source.html#l00745">bin_mdef.c:745</a></div></div>
<div class="ttc" id="structbin__mdef__s_html_a9071b7698132c1c2ce92a6f742e1c82f"><div class="ttname"><a href="structbin__mdef__s.html#a9071b7698132c1c2ce92a6f742e1c82f">bin_mdef_s::sil</a></div><div class="ttdeci">int16 sil</div><div class="ttdoc">CI phone ID for silence. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00128">bin_mdef.h:128</a></div></div>
<div class="ttc" id="structbin__mdef__s_html_ad5e814ffa116c85d46359e3ffd40bff7"><div class="ttname"><a href="structbin__mdef__s.html#ad5e814ffa116c85d46359e3ffd40bff7">bin_mdef_s::cd2cisen</a></div><div class="ttdeci">int16 * cd2cisen</div><div class="ttdoc">Parent CI-senone id for each senone. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00138">bin_mdef.h:138</a></div></div>
<div class="ttc" id="mdef_8h_html_a87b279af2566a60666495e16d09a8aee"><div class="ttname"><a href="mdef_8h.html#a87b279af2566a60666495e16d09a8aee">S3_SILENCE_CIPHONE</a></div><div class="ttdeci">#define S3_SILENCE_CIPHONE</div><div class="ttdoc">Hard-coded silence CI phone name. </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00081">mdef.h:81</a></div></div>
<div class="ttc" id="structbin__mdef__s_html_ab8d852b6cc4f9899da72da03d1607c92"><div class="ttname"><a href="structbin__mdef__s.html#ab8d852b6cc4f9899da72da03d1607c92">bin_mdef_s::alloc_mode</a></div><div class="ttdeci">enum bin_mdef_s::@4 alloc_mode</div><div class="ttdoc">Allocation mode for this object. </div></div>
<div class="ttc" id="structbin__mdef__s_html_a2ad87254182be424ac6ff1234274f134"><div class="ttname"><a href="structbin__mdef__s.html#a2ad87254182be424ac6ff1234274f134">bin_mdef_s::n_emit_state</a></div><div class="ttdeci">int32 n_emit_state</div><div class="ttdoc">Number of emitting states per phone (0 for heterogeneous) </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00121">bin_mdef.h:121</a></div></div>
<div class="ttc" id="structph__lc__t_html"><div class="ttname"><a href="structph__lc__t.html">ph_lc_t</a></div><div class="ttdoc">Structures for storing the left context. </div></div>
<div class="ttc" id="structmdef__entry__s_html"><div class="ttname"><a href="structmdef__entry__s.html">mdef_entry_s</a></div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00073">bin_mdef.h:73</a></div></div>
<div class="ttc" id="structmdef__t_html_a2472170a66d451d2d4873a9a6e64adc7"><div class="ttname"><a href="structmdef__t.html#a2472170a66d451d2d4873a9a6e64adc7">mdef_t::sseq</a></div><div class="ttdeci">uint16 ** sseq</div><div class="ttdoc">Unique state (or senone) sequences in this model, shared among all phones/triphones. </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00146">mdef.h:146</a></div></div>
<div class="ttc" id="mdef_8h_html_a8f2fb119373324175bf82ad2c403e2be"><div class="ttname"><a href="mdef_8h.html#a8f2fb119373324175bf82ad2c403e2be">mdef_init</a></div><div class="ttdeci">mdef_t * mdef_init(char *mdeffile, int breport)</div><div class="ttdoc">Initialize the phone structure from the given model definition file. </div></div>
<div class="ttc" id="structcd__tree__s_html_aa536f1cbd93e2cded1238b39b8aa3751"><div class="ttname"><a href="structcd__tree__s.html#aa536f1cbd93e2cded1238b39b8aa3751">cd_tree_s::down</a></div><div class="ttdeci">int32 down</div><div class="ttdoc">Next level of the tree (offset from start of cd_trees) </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00109">bin_mdef.h:109</a></div></div>
<div class="ttc" id="bin__mdef_8h_html_af437f39a8a9b52dd3187f7f0fc098cab"><div class="ttname"><a href="bin__mdef_8h.html#af437f39a8a9b52dd3187f7f0fc098cab">bin_mdef_ciphone_id_nocase</a></div><div class="ttdeci">int bin_mdef_ciphone_id_nocase(bin_mdef_t *m, const char *ciphone)</div><div class="ttdoc">Case-insensitive context-independent phone lookup. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8c_source.html#l00714">bin_mdef.c:714</a></div></div>
<div class="ttc" id="structbin__mdef__s_html_a457e5352e52a57de5d1536bcd6b331a9"><div class="ttname"><a href="structbin__mdef__s.html#a457e5352e52a57de5d1536bcd6b331a9">bin_mdef_s::sen2cimap</a></div><div class="ttdeci">int16 * sen2cimap</div><div class="ttdoc">Parent CI-phone for each senone (CI or CD) </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00139">bin_mdef.h:139</a></div></div>
<div class="ttc" id="bin__mdef_8h_html_afe7ed87e2a2d22b228c14ed8225e4b2c"><div class="ttname"><a href="bin__mdef_8h.html#afe7ed87e2a2d22b228c14ed8225e4b2c">bin_mdef_free</a></div><div class="ttdeci">int bin_mdef_free(bin_mdef_t *m)</div><div class="ttdoc">Release a pointer to a binary mdef. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8c_source.html#l00272">bin_mdef.c:272</a></div></div>
<div class="ttc" id="mdef_8h_html"><div class="ttname"><a href="mdef_8h.html">mdef.h</a></div><div class="ttdoc">Model definition. </div></div>
<div class="ttc" id="structmdef__t_html_aae4a51202b87f71394b6c5b3138b77c7"><div class="ttname"><a href="structmdef__t.html#aae4a51202b87f71394b6c5b3138b77c7">mdef_t::ciphone</a></div><div class="ttdeci">ciphone_t * ciphone</div><div class="ttdoc">CI-phone information for all ciphones. </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00144">mdef.h:144</a></div></div>
<div class="ttc" id="bin__mdef_8h_html_a00dab94d45d1adc5f7778fd1e2398031"><div class="ttname"><a href="bin__mdef_8h.html#a00dab94d45d1adc5f7778fd1e2398031">bin_mdef_read_text</a></div><div class="ttdeci">POCKETSPHINX_EXPORT bin_mdef_t * bin_mdef_read_text(cmd_ln_t *config, const char *filename)</div><div class="ttdoc">Read a text mdef from a file (creating an in-memory binary mdef). </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8c_source.html#l00066">bin_mdef.c:66</a></div></div>
<div class="ttc" id="structcd__tree__s_html"><div class="ttname"><a href="structcd__tree__s.html">cd_tree_s</a></div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00104">bin_mdef.h:104</a></div></div>
<div class="ttc" id="bin__mdef_8h_html_a297167f03662a9cbd650743d3f4cf8f8"><div class="ttname"><a href="bin__mdef_8h.html#a297167f03662a9cbd650743d3f4cf8f8">bin_mdef_retain</a></div><div class="ttdeci">bin_mdef_t * bin_mdef_retain(bin_mdef_t *m)</div><div class="ttdoc">Retain a pointer to a bin_mdef_t. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8c_source.html#l00265">bin_mdef.c:265</a></div></div>
<div class="ttc" id="structcd__tree__s_html_a6635c35ad6fe74ad045389c76349016d"><div class="ttname"><a href="structcd__tree__s.html#a6635c35ad6fe74ad045389c76349016d">cd_tree_s::pid</a></div><div class="ttdeci">int32 pid</div><div class="ttdoc">Phone ID (leafnode) </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00108">bin_mdef.h:108</a></div></div>
<div class="ttc" id="structmdef__t_html_a966e28ae25bd8e766dbe81549cbdcd36"><div class="ttname"><a href="structmdef__t.html#a966e28ae25bd8e766dbe81549cbdcd36">mdef_t::n_sen</a></div><div class="ttdeci">int32 n_sen</div><div class="ttdoc">number senones (CI+CD) </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00140">mdef.h:140</a></div></div>
<div class="ttc" id="mdef_8h_html_a71b2bcae7b6e79bad584cc5500b20e8fa8ca058a8d25d38d074e028460833c8a9"><div class="ttname"><a href="mdef_8h.html#a71b2bcae7b6e79bad584cc5500b20e8fa8ca058a8d25d38d074e028460833c8a9">WORD_POSN_BEGIN</a></div><div class="ttdoc">Beginning phone of word. </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00074">mdef.h:74</a></div></div>
<div class="ttc" id="structphone__t_html_acbe38b7fc991bfbcb745fb6131d812f0"><div class="ttname"><a href="structphone__t.html#acbe38b7fc991bfbcb745fb6131d812f0">phone_t::tmat</a></div><div class="ttdeci">int32 tmat</div><div class="ttdoc">Transition matrix id. </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00101">mdef.h:101</a></div></div>
<div class="ttc" id="bin__mdef_8h_html_a35d0676dd56e11508c62e84947901503"><div class="ttname"><a href="bin__mdef_8h.html#a35d0676dd56e11508c62e84947901503">bin_mdef_phone_str</a></div><div class="ttdeci">int bin_mdef_phone_str(bin_mdef_t *m, int pid, char *buf)</div><div class="ttdoc">Create a phone string for the given phone (base or triphone) id in the given buf. ...</div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8c_source.html#l00868">bin_mdef.c:868</a></div></div>
<div class="ttc" id="structmdef__t_html_a4aafd791a1e1adaa9b5b28bf0cfbd624"><div class="ttname"><a href="structmdef__t.html#a4aafd791a1e1adaa9b5b28bf0cfbd624">mdef_t::sen2cimap</a></div><div class="ttdeci">int16 * sen2cimap</div><div class="ttdoc">Parent CI-phone for each senone (CI or CD) </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00153">mdef.h:153</a></div></div>
<div class="ttc" id="structbin__mdef__s_html_a2c73ae900d198460a30bce4f641d8398"><div class="ttname"><a href="structbin__mdef__s.html#a2c73ae900d198460a30bce4f641d8398">bin_mdef_s::phone</a></div><div class="ttdeci">mdef_entry_t * phone</div><div class="ttdoc">All phone structures. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00133">bin_mdef.h:133</a></div></div>
<div class="ttc" id="bin__mdef_8h_html_af89d79226df33947019efcfe7377d586"><div class="ttname"><a href="bin__mdef_8h.html#af89d79226df33947019efcfe7377d586">bin_mdef_write_text</a></div><div class="ttdeci">POCKETSPHINX_EXPORT int bin_mdef_write_text(bin_mdef_t *m, const char *filename)</div><div class="ttdoc">Write a binary mdef to a text file. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8c_source.html#l00606">bin_mdef.c:606</a></div></div>
<div class="ttc" id="structbin__mdef__s_html_a84d5f7acc6d85ba8c7611945f9c5e4e7"><div class="ttname"><a href="structbin__mdef__s.html#a84d5f7acc6d85ba8c7611945f9c5e4e7">bin_mdef_s::n_ciphone</a></div><div class="ttdeci">int32 n_ciphone</div><div class="ttdoc">Number of base (CI) phones. </div><div class="ttdef"><b>Definition:</b> <a href="bin__mdef_8h_source.html#l00119">bin_mdef.h:119</a></div></div>
<div class="ttc" id="structmdef__t_html_a44d1d9fd99db66f1c37937e89172fed9"><div class="ttname"><a href="structmdef__t.html#a44d1d9fd99db66f1c37937e89172fed9">mdef_t::n_tmat</a></div><div class="ttdeci">int32 n_tmat</div><div class="ttdoc">number transition matrices </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00141">mdef.h:141</a></div></div>
<div class="ttc" id="structmdef__t_html_a4a7ffa9d1b9a95a3bf3cca7bd955020a"><div class="ttname"><a href="structmdef__t.html#a4a7ffa9d1b9a95a3bf3cca7bd955020a">mdef_t::n_emit_state</a></div><div class="ttdeci">int32 n_emit_state</div><div class="ttdoc">number emitting states per phone </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00138">mdef.h:138</a></div></div>
<div class="ttc" id="structmdef__t_html_acc9a57b57bbecaef55cc72be57b875f6"><div class="ttname"><a href="structmdef__t.html#acc9a57b57bbecaef55cc72be57b875f6">mdef_t::sil</a></div><div class="ttdeci">int16 sil</div><div class="ttdoc">SILENCE_CIPHONE id. </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00155">mdef.h:155</a></div></div>
<div class="ttc" id="structmdef__t_html_a5dd5c3d3058a314f4c971a14d1df5f38"><div class="ttname"><a href="structmdef__t.html#a5dd5c3d3058a314f4c971a14d1df5f38">mdef_t::wpos_ci_lclist</a></div><div class="ttdeci">ph_lc_t *** wpos_ci_lclist</div><div class="ttdoc">wpos_ci_lclist[wpos][ci] = list of lc for &lt;wpos,ci&gt;. </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00157">mdef.h:157</a></div></div>
<div class="ttc" id="structph__rc__t_html"><div class="ttname"><a href="structph__rc__t.html">ph_rc_t</a></div><div class="ttdoc">Structures needed for mapping &lt;ci,lc,rc,wpos&gt; into pid. </div></div>
<div class="ttc" id="structmdef__t_html_a2b9aaf78e5648fe14655d1fe8da5f164"><div class="ttname"><a href="structmdef__t.html#a2b9aaf78e5648fe14655d1fe8da5f164">mdef_t::phone</a></div><div class="ttdeci">phone_t * phone</div><div class="ttdoc">Information for all ciphones and triphones. </div><div class="ttdef"><b>Definition:</b> <a href="mdef_8h_source.html#l00145">mdef.h:145</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_8d034a1e03e98d9b7ac467250bbebdea.html">libpocketsphinx</a></li><li class="navelem"><b>bin_mdef.c</b></li>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
  </ul>
</div>
</body>
</html>