2007年8月16日木曜日

HHXモジュール 命令・関数から検索

前回はすべての命令・関数を対象としましたが、今回は特定の文字列を含む命令だけを抽出する方法を紹介します。
と言っても前回HHX_select_all()としていたところを、HHX_select_where(p1, p2, p3)とするだけです。メインの検索処理はモジュールが行ってくれます。

検索結果はキーワード適合度の高い順に並びます。検索キーワードが命令概要(C_SUMMARY)に載っている命令の方が説明(C_INST)に載っている命令よりも適合度が高くなります。
キーワード適合度の強さについては、hsp_db.hsp内のコメントをご覧ください。

#include "../hsphelp/src/hhx_db.hsp"
#module
//
// 文字列の右側を半角スペースで埋める
#defcfunc add_spaces str sTarget, local iLength, local sResult
    iStrlen = strlen( sTarget )
    iLength = 30 - iStrlen
    if iLength < 1 : iLength = 1
    sdim sResult, iLength + iStrlen + 1
    sResult = sTarget
    memset sResult, ' ', iLength, iStrlen
    return sResult
#global

// hsphelpディレクトリの存在を確認
    chdir dir_exe
    dirlist s, "hsphelp"5 
    if stat == 0 : dialog "hsphelpディレクトリが見つかりません。"1 : end
    chdir dir_exe + "/hsphelp"

// HHXのデータベースをロード
    HHX_init_load_db
    if HHX_currentset_sum() ! HHX_diskset_sum() {
        HHX_init_rebuild_db DBR_WRITEDB
    } else {
        HHX_init_extract_db
    }

// 画面上にオブジェクトを配置
    sSerch = "色" : sdim note, 10000 : notesel note
    objsize 12024 : objmode 2 : font msgothic12
    input sSerch, ginfo_winx - 12024
    pos ginfo_winx - 1200
    button gosub "検索"*serch
    pos 024
    mesbox note, ginfo_winxginfo_winy - ginfo_cy

    gosub *serch

    onkey gosub *lbl_onkey
    stop

// 入力ボックスでEnterを押したとき、検索を開始
*lbl_onkey
    objsel -1
    if ( wparam == 13 ) & ( stat == 0 ) : gosub *serch
    return

// ある条件によってデータベースから検索を行い、その結果を列挙する
*serch
    note = ""
    db_num = HHX_select_where( sSerch, -1, -1 )   // 検索対象文字を解説などに含む命令・関数を列挙する
    repeat db_num
        c = HHX_get_next()
        sLine = add_spaces( hhxdata( c, C_NAME ) ) + hhxdata( c, C_SUMMARY )
        noteadd sLine
    loop
    objprm 2, note
    return

0 件のコメント: