private void Initialize()
 {
     index = 0;
     pdf   = 0;
     yes   = null;
     no    = null;
     next  = null;
     quest = null;
 }
        // HTS_Question_find: find question from question list
        public static HTS_Question Find(HTS_Question question, string tString)
        {
            for ( ; question != null; question = question.next)
            {
                if (tString == question.m_Word)
                {
                    return(question);
                }
            }

            return(null);
        }
        private void Initialize()
        {
            this.vector_length = 0;
            this.num_windows   = 0;
            this.is_msd        = false;

            this.ntree    = 0;
            this.npdf     = null;
            this.pdf      = null;
            this.tree     = null;
            this.question = null;
        }
        public void Initialize()
        {
            m_HtsVoiceVersion         = null;
            m_SamplingFrequency       = 0;
            m_FramePeriod             = 0;
            m_NumericOfVoice          = 0;
            m_NumericOfState          = 0;
            m_NumericOfStream         = 0;
            m_StreamType              = null;
            m_FullcontextLabelFormat  = null;
            m_FullcontextLabelVersion = null;
            m_GvOffContext            = null;
            m_Option = null;

            m_Duration = null;
            m_Window   = null;
            m_Stream   = null;
            m_Gv       = null;
        }
        //-----------------------------------------------------------

        // 複数の音響モデルを同時にロード出来る
        public bool Load(string[] voices)
        {
            int tNumericOfVoice = voices.Length;

            int      i, j, k, s, e;
            bool     error = false;
            HTS_File fp    = null;
            int      matched_size;

            string[] stream_type_list = null;

            int[]  vector_length = null;
            bool[] is_msd        = null;
            int[]  num_windows   = null;
            bool[] use_gv        = null;

            string gv_off_context = null;

            // temporary values
            string tHtsVoiceVersion;
            int    temp_sampling_frequency;
            int    temp_frame_period;
            int    temp_num_states;
            int    temp_num_streams;
            string temp_stream_type;
            string temp_fullcontext_format;
            string temp_fullcontext_version;

            string temp_gv_off_context;

            int[]    temp_vector_length;
            bool[]   temp_is_msd;
            int[]    temp_num_windows;
            bool[]   temp_use_gv;
            string[] temp_option;

            string temp_duration_pdf;
            string temp_duration_tree;

            string[][] temp_stream_win;
            string[]   temp_stream_pdf;
            string[]   temp_stream_tree;
            string[]   temp_gv_pdf;
            string[]   temp_gv_tree;

            int      start_of_data;
            HTS_File pdf_fp  = null;
            HTS_File tree_fp = null;

            HTS_File[] win_fp            = null;
            HTS_File   gv_off_context_fp = null;

            Initialize();

            if (voices == null || tNumericOfVoice < 1)
            {
                return(false);
            }

            m_NumericOfVoice = tNumericOfVoice;

            for (i = 0; i < m_NumericOfVoice && error == false; i++)
            {
                // open file
                fp = HTS_File.Open(voices[i]);
                if (fp == null)
                {
                    error = true;
                    break;
                }

                // reset GLOBAL options
                tHtsVoiceVersion         = null;
                temp_sampling_frequency  = 0;
                temp_frame_period        = 0;
                temp_num_states          = 0;
                temp_num_streams         = 0;
                temp_stream_type         = null;
                temp_fullcontext_format  = null;
                temp_fullcontext_version = null;
                temp_gv_off_context      = null;

                // 0x0D かもしれない
                string tToken = fp.GetTokenFromFpWithSeparator(0x0A);
                string tValue;
                if (string.IsNullOrEmpty(tToken) == true)
                {
                    error = true;
                    break;
                }


                // load GLOBAL options
                if (tToken != "[GLOBAL]")
                {
                    error = true;
                    break;
                }

                while (true)
                {
                    // 0x0D かもしれない
                    tToken = fp.GetTokenFromFpWithSeparator(0x0A);
                    if (string.IsNullOrEmpty(tToken) == true)
                    {
                        error = true;
                        break;
                    }

                    if (tToken == "[STREAM]")
                    {
                        break;
                    }
                    else
                    if (MatchHeadString(tToken, "HTS_VOICE_VERSION:", out tValue) == true)
                    {
                        tHtsVoiceVersion = tValue;
                    }
                    else
                    if (MatchHeadString(tToken, "SAMPLING_FREQUENCY:", out tValue) == true)
                    {
                        int.TryParse(tValue, out temp_sampling_frequency);
                    }
                    else
                    if (MatchHeadString(tToken, "FRAME_PERIOD:", out tValue) == true)
                    {
                        int.TryParse(tValue, out temp_frame_period);
                    }
                    else
                    if (MatchHeadString(tToken, "NUM_STATES:", out tValue) == true)
                    {
                        int.TryParse(tValue, out temp_num_states);
                    }
                    else
                    if (MatchHeadString(tToken, "NUM_STREAMS:", out tValue) == true)
                    {
                        int.TryParse(tValue, out temp_num_streams);
                    }
                    else
                    if (MatchHeadString(tToken, "STREAM_TYPE:", out tValue) == true)
                    {
                        temp_stream_type = tValue;
                    }
                    else
                    if (MatchHeadString(tToken, "FULLCONTEXT_FORMAT:", out tValue) == true)
                    {
                        temp_fullcontext_format = tValue;
                    }
                    else
                    if (MatchHeadString(tToken, "FULLCONTEXT_VERSION:", out tValue) == true)
                    {
                        temp_fullcontext_version = tValue;
                    }
                    else
                    if (MatchHeadString(tToken, "GV_OFF_CONTEXT:", out tValue) == true)
                    {
                        temp_gv_off_context = tValue;
                    }
                    else
                    if (MatchHeadString(tToken, "COMMENT:", out tValue) == true)
                    {
                        if (string.IsNullOrEmpty(tValue) == false)
                        {
                            Debug.Log("COMMENT:" + tValue);
                        }
                    }
                    else
                    {
                        Debug.LogError("HTS_ModelSet_load: Unknown option " + tToken + ".");
                    }
                }

                // check GLOBAL options
                if (i == 0)
                {
                    // 最初の音響モデルの共通パラメータ部分を全音響モデルの正式な共通パラメータとする
                    m_HtsVoiceVersion         = tHtsVoiceVersion;
                    m_SamplingFrequency       = temp_sampling_frequency;
                    m_FramePeriod             = temp_frame_period;
                    m_NumericOfState          = temp_num_states;
                    m_NumericOfStream         = temp_num_streams;
                    m_StreamType              = temp_stream_type;
                    m_FullcontextLabelFormat  = temp_fullcontext_format;
                    m_FullcontextLabelVersion = temp_fullcontext_version;

                    gv_off_context = temp_gv_off_context;
                }
                else
                {
                    // 2つ目以降の音響モデル(共通パラメータに違いがあれば不正なものとする)
                    if (m_HtsVoiceVersion != tHtsVoiceVersion)
                    {
                        error = true;
                    }
                    if (m_SamplingFrequency != temp_sampling_frequency)
                    {
                        error = true;
                    }
                    if (m_FramePeriod != temp_frame_period)
                    {
                        error = true;
                    }
                    if (m_NumericOfState != temp_num_states)
                    {
                        error = true;
                    }
                    if (m_NumericOfStream != temp_num_streams)
                    {
                        error = true;
                    }
                    if (m_StreamType != temp_stream_type)
                    {
                        error = true;
                    }
                    if (m_FullcontextLabelFormat != temp_fullcontext_format)
                    {
                        error = true;
                    }
                    if (m_FullcontextLabelVersion != temp_fullcontext_version)
                    {
                        error = true;
                    }
                    if (gv_off_context != temp_gv_off_context)
                    {
                        error = true;
                    }

                    tHtsVoiceVersion         = null;
                    temp_stream_type         = null;
                    temp_fullcontext_format  = null;
                    temp_fullcontext_version = null;
                    temp_gv_off_context      = null;
                }

                // find stream names
                if (i == 0)
                {
                    // 最初の音響モデルのみチェックする
                    stream_type_list = m_StreamType.Split(',');
                    if (stream_type_list == null || stream_type_list.Length != m_NumericOfStream)
                    {
                        error = true;
                    }
                }

                if (error != false)
                {
                    if (fp != null)
                    {
                        fp.Close();
                        fp = null;
                    }
                    break;
                }

                // 全音響モデルで共通のパラメータ(num_streams)を使って作業領域を確保する

                // reset STREAM options
                temp_vector_length = new    int[m_NumericOfStream];
                temp_is_msd        = new   bool[m_NumericOfStream];
                temp_num_windows   = new    int[m_NumericOfStream];
                temp_use_gv        = new   bool[m_NumericOfStream];
                temp_option        = new string[m_NumericOfStream];

                // load STREAM options
                while (true)
                {
                    // 0x0D の可能性あり
                    tToken = fp.GetTokenFromFpWithSeparator(0x0A);
                    if (string.IsNullOrEmpty(tToken) == true)
                    {
                        error = true;
                        break;
                    }

                    if (tToken == "[POSITION]")
                    {
                        break;
                    }
                    else
                    if (MatchHeadString(tToken, "VECTOR_LENGTH[", out tValue) == true)
                    {
                        string tLabel;
                        if (GetLabelAndValue(tValue, out tLabel, out tValue) == true)
                        {
                            for (j = 0; j < m_NumericOfStream; j++)
                            {
                                if (stream_type_list[j] == tLabel)
                                {
                                    int.TryParse(tValue, out temp_vector_length[j]);
                                    break;
                                }
                            }
                        }
                    }
                    else
                    if (MatchHeadString(tToken, "IS_MSD[", out tValue) == true)
                    {
                        string tLabel;
                        if (GetLabelAndValue(tValue, out tLabel, out tValue) == true)
                        {
                            for (j = 0; j < m_NumericOfStream; j++)
                            {
                                if (stream_type_list[j] == tLabel)
                                {
                                    temp_is_msd[j] = (tValue == "1") ? true : false;
                                    break;
                                }
                            }
                        }
                    }
                    else
                    if (MatchHeadString(tToken, "NUM_WINDOWS[", out tValue) == true)
                    {
                        string tLabel;
                        if (GetLabelAndValue(tValue, out tLabel, out tValue) == true)
                        {
                            for (j = 0; j < m_NumericOfStream; j++)
                            {
                                if (stream_type_list[j] == tLabel)
                                {
                                    int.TryParse(tValue, out temp_num_windows[j]);
                                    break;
                                }
                            }
                        }
                    }
                    else
                    if (MatchHeadString(tToken, "USE_GV[", out tValue) == true)
                    {
                        string tLabel;
                        if (GetLabelAndValue(tValue, out tLabel, out tValue) == true)
                        {
                            for (j = 0; j < m_NumericOfStream; j++)
                            {
                                if (stream_type_list[j] == tLabel)
                                {
                                    temp_use_gv[j] = (tValue == "1") ? true : false;
                                    break;
                                }
                            }
                        }
                    }
                    else
                    if (MatchHeadString(tToken, "OPTION[", out tValue) == true)
                    {
                        string tLabel;
                        if (GetLabelAndValue(tValue, out tLabel, out tValue) == true)
                        {
                            for (j = 0; j < m_NumericOfStream; j++)
                            {
                                if (stream_type_list[j] == tLabel)
                                {
                                    temp_option[j] = tValue;
                                    break;
                                }
                            }
                        }
                    }
                    else
                    {
                        Debug.LogError("HTS_ModelSet_load: Unknown option " + tToken);
                    }
                }

                // check STREAM options
                if (i == 0)
                {
                    // 最初の音響モデル
                    vector_length = temp_vector_length;
                    is_msd        = temp_is_msd;
                    num_windows   = temp_num_windows;
                    use_gv        = temp_use_gv;
                    m_Option      = temp_option;
                }
                else
                {
                    // 2つ目以降の音響モデル(値が最初の音響モデルと同じになっているかチェックする)
                    for (j = 0; j < m_NumericOfStream; j++)
                    {
                        if (vector_length[j] != temp_vector_length[j])
                        {
                            error = true;
                        }
                    }

                    for (j = 0; j < m_NumericOfStream; j++)
                    {
                        if (is_msd[j] != is_msd[j])
                        {
                            error = true;
                        }
                    }

                    for (j = 0; j < m_NumericOfStream; j++)
                    {
                        if (num_windows[j] != temp_num_windows[j])
                        {
                            error = true;
                        }
                    }

                    for (j = 0; j < m_NumericOfStream; j++)
                    {
                        if (use_gv[j] != temp_use_gv[j])
                        {
                            error = true;
                        }
                    }

                    for (j = 0; j < m_NumericOfStream; j++)
                    {
                        if (m_Option[j] != temp_option[j])
                        {
                            error = true;
                        }
                    }

                    temp_vector_length = null;
                    temp_is_msd        = null;
                    temp_num_windows   = null;
                    temp_use_gv        = null;

                    for (j = 0; j < m_NumericOfStream; j++)
                    {
                        if (temp_option[j] != null)
                        {
                            temp_option[j] = null;
                        }
                    }
                    temp_option = null;
                }
                if (error != false)
                {
                    if (fp != null)
                    {
                        fp.Close();
                        fp = null;
                    }
                    break;
                }

                // reset POSITION
                temp_duration_pdf  = null;
                temp_duration_tree = null;
                temp_stream_win    = new string[m_NumericOfStream][];
                for (j = 0; j < m_NumericOfStream; j++)
                {
                    temp_stream_win[j] = new string[num_windows[j]];
                }
                temp_stream_pdf  = new string[m_NumericOfStream];
                temp_stream_tree = new string[m_NumericOfStream];
                temp_gv_pdf      = new string[m_NumericOfStream];
                temp_gv_tree     = new string[m_NumericOfStream];

                // load POSITION
                while (true)
                {
                    tToken = fp.GetTokenFromFpWithSeparator(0x0A);

                    if (string.IsNullOrEmpty(tToken) == true)
                    {
                        error = true;
                        break;
                    }

                    if (tToken == "[DATA]")
                    {
                        break;
                    }
                    else
                    if (MatchHeadString(tToken, "DURATION_PDF:", out tValue) == true)
                    {
                        temp_duration_pdf = tValue;
                    }
                    else
                    if (MatchHeadString(tToken, "DURATION_TREE:", out tValue) == true)
                    {
                        temp_duration_tree = tValue;
                    }
                    else
                    if (MatchHeadString(tToken, "STREAM_WIN[", out tValue) == true)
                    {
                        string tLabel;
                        if (GetLabelAndValue(tValue, out tLabel, out tValue) == true)
                        {
                            for (j = 0; j < m_NumericOfStream; j++)
                            {
                                if (stream_type_list[j] == tLabel)
                                {
                                    string[] tValues = tValue.Split(',');
                                    if (tValues != null && tValues.Length == num_windows[j])
                                    {
                                        for (k = 0; k < num_windows[j]; k++)
                                        {
                                            temp_stream_win[j][k] = tValues[k];
                                        }
                                    }
                                    else
                                    {
                                        error = true;
                                    }
                                    break;
                                }
                            }
                        }
                    }
                    else
                    if (MatchHeadString(tToken, "STREAM_PDF[", out tValue) == true)
                    {
                        string tLabel;
                        if (GetLabelAndValue(tValue, out tLabel, out tValue) == true)
                        {
                            for (j = 0; j < m_NumericOfStream; j++)
                            {
                                if (stream_type_list[j] == tLabel)
                                {
                                    temp_stream_pdf[j] = tValue;
                                    break;
                                }
                            }
                        }
                    }
                    else
                    if (MatchHeadString(tToken, "STREAM_TREE[", out tValue) == true)
                    {
                        string tLabel;
                        if (GetLabelAndValue(tValue, out tLabel, out tValue) == true)
                        {
                            for (j = 0; j < m_NumericOfStream; j++)
                            {
                                if (stream_type_list[j] == tLabel)
                                {
                                    temp_stream_tree[j] = tValue;
                                    break;
                                }
                            }
                        }
                    }
                    else
                    if (MatchHeadString(tToken, "GV_PDF[", out tValue) == true)
                    {
                        string tLabel;
                        if (GetLabelAndValue(tValue, out tLabel, out tValue) == true)
                        {
                            for (j = 0; j < m_NumericOfStream; j++)
                            {
                                if (stream_type_list[j] == tLabel)
                                {
                                    temp_gv_pdf[j] = tValue;
                                    break;
                                }
                            }
                        }
                    }
                    else
                    if (MatchHeadString(tToken, "GV_TREE[", out tValue) == true)
                    {
                        string tLabel;
                        if (GetLabelAndValue(tValue, out tLabel, out tValue) == true)
                        {
                            for (j = 0; j < m_NumericOfStream; j++)
                            {
                                if (stream_type_list[j] == tLabel)
                                {
                                    temp_gv_tree[j] = tValue;
                                    break;
                                }
                            }
                        }
                    }
                    else
                    {
                        Debug.LogError("HTS_ModelSet_load: Unknown option " + tToken);
                    }
                }

                // check POSITION
                if (temp_duration_pdf == null)
                {
                    error = true;
                }

                for (j = 0; j < m_NumericOfStream; j++)
                {
                    for (k = 0; k < num_windows[j]; k++)
                    {
                        if (temp_stream_win[j][k] == null)
                        {
                            error = true;
                        }
                    }
                }

                for (j = 0; j < m_NumericOfStream; j++)
                {
                    if (temp_stream_pdf[j] == null)
                    {
                        error = true;
                    }
                }

                // prepare memory
                if (i == 0)
                {
                    // 最初の音響モデル
                    m_Duration = new HTS_Model[m_NumericOfVoice];
                    for (j = 0; j < m_NumericOfVoice; j++)
                    {
                        m_Duration[j] = new HTS_Model();
                    }

                    m_Window = new HTS_Window[m_NumericOfStream];
                    for (j = 0; j < m_NumericOfStream; j++)
                    {
                        m_Window[j] = new HTS_Window();
                    }

                    m_Stream = new HTS_Model[m_NumericOfVoice][];
                    for (j = 0; j < m_NumericOfVoice; j++)
                    {
                        m_Stream[j] = new HTS_Model[m_NumericOfStream];
                        for (k = 0; k < m_NumericOfStream; k++)
                        {
                            m_Stream[j][k] = new HTS_Model();
                        }
                    }

                    m_Gv = new  HTS_Model[m_NumericOfVoice][];
                    for (j = 0; j < m_NumericOfVoice; j++)
                    {
                        m_Gv[j] = new HTS_Model[m_NumericOfStream];
                        for (k = 0; k < m_NumericOfStream; k++)
                        {
                            m_Gv[j][k] = new HTS_Model();
                        }
                    }
                }
                start_of_data = fp.Tell();

                // load duration
                pdf_fp  = null;
                tree_fp = null;

                if (GetDuration(temp_duration_pdf, out s, out e) == true)
                {
                    fp.Seek(s, HTS_File.SEEK_CUR);
                    pdf_fp = HTS_File.Create(fp, e - s + 1);
                    fp.Seek(start_of_data, HTS_File.SEEK_SET);
                }

                if (GetDuration(temp_duration_tree, out s, out e) == true)
                {
                    fp.Seek(s, HTS_File.SEEK_CUR);
                    tree_fp = HTS_File.Create(fp, e - s + 1);
                    fp.Seek(start_of_data, HTS_File.SEEK_SET);
                }

                // ここの音響モデルのパラメータを展開する
                if (m_Duration[i].Load(pdf_fp, tree_fp, m_NumericOfState, 1, false) != true)
                {
                    error = true;
                }

                pdf_fp.Close();
                tree_fp.Close();

                // load windows(窓は複数の音響モデルで共有?)
                for (j = 0; j < m_NumericOfStream; j++)
                {
                    win_fp = new HTS_File[num_windows[j]];
                    for (k = 0; k < num_windows[j]; k++)
                    {
                        matched_size = 0;
                        if (GetTokenFromStringWithSeparator(temp_stream_win[j][k], ref matched_size, out tToken, '-') == true)
                        {
                            int.TryParse(tToken, out s);
                            tToken = temp_stream_win[j][k].Substring(matched_size);
                            int.TryParse(tToken, out e);

                            fp.Seek(s, HTS_File.SEEK_CUR);
                            win_fp[k] = HTS_File.Create(fp, e - s + 1);
                            fp.Seek(start_of_data, HTS_File.SEEK_SET);
                        }
                    }

                    if (m_Window[j].Load(win_fp, num_windows[j]) == false)
                    {
                        Debug.LogError("Model.Load Error : Window");
                        error = true;
                    }

//					for( k  = 0 ; k <  num_windows[ j ] ; k ++ )
//					{
//						if( win_fp[ k ] != null )
//						{
//							win_fp[ k ].Close() ;
//						}
//					}

                    win_fp = null;
                }

                // load streams
                for (j = 0; j < m_NumericOfStream; j++)
                {
                    pdf_fp  = null;
                    tree_fp = null;

                    matched_size = 0;
                    if (GetTokenFromStringWithSeparator(temp_stream_pdf[j], ref matched_size, out tToken, '-') == true)
                    {
                        int.TryParse(tToken, out s);
                        tToken = temp_stream_pdf[j].Substring(matched_size);
                        int.TryParse(tToken, out e);

                        fp.Seek(s, HTS_File.SEEK_CUR);
                        pdf_fp = HTS_File.Create(fp, e - s + 1);
                        fp.Seek(start_of_data, HTS_File.SEEK_SET);
                    }

                    matched_size = 0;
                    if (GetTokenFromStringWithSeparator(temp_stream_tree[j], ref matched_size, out tToken, '-') == true)
                    {
                        int.TryParse(tToken, out s);
                        tToken = temp_stream_tree[j].Substring(matched_size);
                        int.TryParse(tToken, out e);

                        fp.Seek(s, HTS_File.SEEK_CUR);
                        tree_fp = HTS_File.Create(fp, e - s + 1);
                        fp.Seek(start_of_data, HTS_File.SEEK_SET);
                    }

                    // i は音響モデルインデックス番号
                    if (m_Stream[i][j].Load(pdf_fp, tree_fp, vector_length[j], num_windows[j], is_msd[j]) != true)
                    {
                        Debug.LogError("Model.Load Error");
                        error = true;
                    }

                    if (pdf_fp != null)
                    {
                        pdf_fp.Close();
                    }
                    if (tree_fp != null)
                    {
                        tree_fp.Close();
                    }

                    // 複数の音響モデルのロードループ閉じ
                }

                // load GVs
                for (j = 0; j < m_NumericOfStream; j++)
                {
                    pdf_fp  = null;
                    tree_fp = null;

                    matched_size = 0;
                    if (GetTokenFromStringWithSeparator(temp_gv_pdf[j], ref matched_size, out tToken, '-') == true)
                    {
                        int.TryParse(tToken, out s);
                        tToken = temp_gv_pdf[j].Substring(matched_size);
                        int.TryParse(tToken, out e);

                        fp.Seek(s, HTS_File.SEEK_CUR);
                        pdf_fp = HTS_File.Create(fp, e - s + 1);
                        fp.Seek(start_of_data, HTS_File.SEEK_SET);
                    }

                    matched_size = 0;
                    if (GetTokenFromStringWithSeparator(temp_gv_tree[j], ref matched_size, out tToken, '-') == true)
                    {
                        int.TryParse(tToken, out s);
                        tToken = temp_gv_tree[j].Substring(matched_size);
                        int.TryParse(tToken, out e);

                        fp.Seek(s, HTS_File.SEEK_CUR);
                        tree_fp = HTS_File.Create(fp, e - s + 1);
                        fp.Seek(start_of_data, HTS_File.SEEK_SET);
                    }

                    if (use_gv[j] == true)
                    {
                        if (m_Gv[i][j].Load(pdf_fp, tree_fp, vector_length[j], 1, false) != true)
                        {
                            Debug.LogError("Model.Load Error");
                            error = true;
                        }
                    }

                    if (pdf_fp != null)
                    {
                        pdf_fp.Close();
                    }
                    if (tree_fp != null)
                    {
                        tree_fp.Close();
                    }
                }

                // free
                temp_duration_pdf  = null;
                temp_duration_tree = null;
                temp_stream_win    = null;
                temp_stream_pdf    = null;
                temp_stream_tree   = null;
                temp_gv_pdf        = null;
                temp_gv_tree       = null;

                // fclose
                if (fp != null)
                {
                    fp.Close();
                    fp = null;
                }

                if (error != false)
                {
                    Debug.LogError("Error");
                    break;
                }
            }

            if (gv_off_context != null)
            {
//				sprintf( buff1, "GV-Off { %s }", gv_off_context ) ;
                string ts = "GV-Off { " + gv_off_context + " }";
//				int tl = tb.Length ;
//				if( tl >  ( buff1.Length - 1 ) )
//				{
//					tl  = ( buff1.Length - 1 ) ;
//				}
//				Array.Copy( tb, 0, buff1, 0, tl ) ;
//				buff1[ tl ] = 0 ;

//				gv_off_context_fp = HTS_File.OpenFromData( buff1, HTS_Misc.Strlen( buff1 ) + 1 ) ;
                gv_off_context_fp = HTS_File.Create(ts);

                m_GvOffContext = new HTS_Question();
                if (m_GvOffContext.Load(gv_off_context_fp) == false)
                {
                    Debug.LogError("gv_off_context.Load Error : " + ts);
                }

                gv_off_context_fp.Close();
                gv_off_context = null;
            }

            stream_type_list = null;
            vector_length    = null;
            is_msd           = null;
            num_windows      = null;
            use_gv           = null;

            return(!error);
        }
 private void Initialize()
 {
     m_Word = null;
     m_Head = null;
     next   = null;
 }
        // HTS_Model_load_tree: load trees
        private bool LoadTree(HTS_File fp)
        {
            string tToken;

            HTS_Question question, last_question;
            HTS_Tree     tree, last_tree;
            int          state;

            // check
            if (fp == null)
            {
                ntree = 1;
                return(true);
            }

            ntree         = 0;
            last_question = null;
            last_tree     = null;

            while (fp.Eof() == false)
            {
                tToken = fp.GetPatternToken();

                // parse questions
                if (tToken == "QS")
                {
                    question = new HTS_Question();

                    if (question.Load(fp) == false)
                    {
                        Debug.LogError("Question Load falied");
                        question = null;
                        Initialize();
                        return(false);
                    }

                    if (this.question != null)
                    {
                        last_question.next = question;
                    }
                    else
                    {
                        this.question = question;
                    }

                    question.next = null;
                    last_question = question;
                }
                else
                {
                    // tToken が "QE" の場合に更新される事は無いので排他で良い
                    // parse trees
                    state = GetStateNum(tToken);
                    if (state != 0)
                    {
                        tree       = new HTS_Tree();
                        tree.state = state;
                        tree.ParsePattern(tToken);

                        if (tree.Load(fp, this.question) == false)
                        {
                            Debug.LogError("Tree Load falied");
                            tree = null;
                            Initialize();
                            return(false);
                        }

                        if (this.tree != null)
                        {
                            last_tree.next = tree;
                        }
                        else
                        {
                            this.tree = tree;
                        }

                        tree.next = null;
                        last_tree = tree;
                        this.ntree++;
                    }
                    else
                    {
                        Debug.LogWarning("Bad:" + tToken);
                    }
                }
            }

            // No Tree information in tree file
            if (this.tree == null)
            {
                this.ntree = 1;
            }

            return(true);
        }
        // HTS_Tree_load: load trees
        public bool Load(HTS_File fp, HTS_Question question)
        {
            string tToken;

            HTS_Node node, last_node;

            if (fp == null)
            {
                return(false);
            }

            tToken = fp.GetPatternToken();
            if (string.IsNullOrEmpty(tToken) == true)
            {
                Initialize();
                return(false);
            }

            node = new HTS_Node();

            this.root = last_node = node;

            if (tToken == "{")
            {
                int v;

                tToken = fp.GetPatternToken();
                while (string.IsNullOrEmpty(tToken) == false && tToken != "}")
                {
                    int.TryParse(tToken, out v);
                    node = HTS_Node.Find(last_node, v);
                    if (node == null)
                    {
                        Debug.LogError("HTS_Tree_load: Cannot find node " + v + " .");
                        Initialize();
                        return(false);
                    }

                    tToken = fp.GetPatternToken();
                    if (string.IsNullOrEmpty(tToken) == true)
                    {
                        Initialize();
                        return(false);
                    }

                    node.quest = HTS_Question.Find(question, tToken);
                    if (node.quest == null)
                    {
                        Debug.LogError("HTS_Tree_load: Cannot find question " + tToken + ".");
                        Initialize();
                        return(false);
                    }

                    node.yes = new HTS_Node();
                    node.no  = new HTS_Node();

                    tToken = fp.GetPatternToken();
                    if (string.IsNullOrEmpty(tToken) == true)
                    {
                        node.quest = null;
                        node.yes   = null;
                        node.no    = null;
                        Initialize();
                        return(false);
                    }

                    if (IsNum(tToken) == true)
                    {
                        int.TryParse(tToken, out v);
                        node.no.index = v;
                    }
                    else
                    {
                        node.no.pdf = Name2num(tToken);
                    }
                    node.no.next = last_node;
                    last_node    = node.no;

                    tToken = fp.GetPatternToken();
                    if (string.IsNullOrEmpty(tToken) == true)
                    {
                        node.quest = null;
                        node.yes   = null;
                        node.no    = null;
                        Initialize();
                        return(false);
                    }

                    if (IsNum(tToken) == true)
                    {
                        int.TryParse(tToken, out v);
                        node.yes.index = v;
                    }
                    else
                    {
                        node.yes.pdf = Name2num(tToken);
                    }
                    node.yes.next = last_node;
                    last_node     = node.yes;

                    // 最後
                    tToken = fp.GetPatternToken();
                }
            }
            else
            {
                node.pdf = Name2num(tToken);
            }

            return(true);
        }