2007年8月13日月曜日

HHXモジュール 命令・関数一覧を取得

おそらくあまり利用者のいないHHXモジュールについて、しばらく扱ってみようと思います。
HHXモジュールはHSファイルにアクセスする際、非常に強力な手段として利用することができます。HHXに付属されており、誰でも利用することができます。作者はsprocketさんです。

まずは以前も紹介した、命令・関数一覧の作成から。
データベースのロード手順はどんなスクリプトでも同じです。実際にこのスクリプトがHHX自身のスクリプトとほとんど同じであることを確認していただけると思います。

HHX_select_allを実行しただけでは名称順にソートされた状態ですが、HHX_order_by命令を利用することでグループ名・依存DLL名などによってソートできます。#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() {
        // HSファイルに何かしらの変更が加わったため、データベースを再構築
        mes "HHXのデータベースをリビルドしています..."
        HHX_init_rebuild_db DBR_WRITEDB // データベースを作成し、配列変数hhxdataxにロード
                                        // より高速化を望むなら DBR_WRITEDB を DBR_READONLY としても良い
    } else {
        HHX_init_extract_db             // 配列変数hhxdataxにメモリ上のデータをロード
    }
    mes "HHXのデータベースをロードしました。"

// データベースから命令・関数をひとつずつ取り出し、その名前を列挙する
    db_num = HHX_select_all()           // すべての命令・関数などを検索対象とする(ABC順)
;   HHX_order_by C_GROUP                // コメントを外すとグループ名でソート(昇順)
    sdim buf, 16000
    notesel buf
    mes "命令一覧を作成します..."
    repeat db_num
        c = HHX_get_next()              // 次の命令・関数などのナンバーを取得
        sLine = add_spaces( hhxdata( c, C_NAME ) ) + hhxdata( c, C_SUMMARY )
        noteadd sLine                   // ナンバー c で表現される命令・関数などの名前をnoteaddする
                                        // C_SUMMARYなら命令・関数の概要を、C_INSTならその説明文を取得することができる(他はhhx_db.hspを参照)
    loop
    mes "命令一覧の作成を完了しました。"
    objmode 2
    font msgothic12
    mesbox buf, ginfo_winxginfo_winy - ginfo_cy
    stop

5 件のコメント:

匿名 さんのコメント...

ellerさんマニュアル作るの上手いですね。
私なんかテキストファイルしか扱えませんorz

匿名 さんのコメント...

hs から HTML を作成するツール、前々から書くべきではないかと思っていたのですが、
なかなか手が付けられないでいました。
作成された html、昔からあったあの懐かしいヘルプそのものですね。

いろいろ補完していただいたような格好で、本当にありがたい限りです。

eller さんのコメント...

おふたりとも、コメントありがとうございます。久々のコメントで嬉しいです。

> kz3さん
こんにちは、ここではお久しぶりです。
マニュアル = HSファイルから作ったHTML でしょうか?ほとんど見出しと箇条書きしか利用していないので、ちょっとHTMLに詳しければできると思います。
覚えてしまえば簡単なので、ぜひ書籍などを読んでみてください。

> テキストファイルしか扱えませんorz
私はテキストファイルを上手に扱えませんorz
テキストだけで見易いマニュアルが作れれば、それが一番だと思います。軽いですし。


> sprocketさん
こんにちは、ご来訪ありがとうございます。
HTMLへの変換はちょっと前から興味を持っていまして、今回こうして形にすることができました。
前回そちらへお邪魔した時の書きこみと重なりますが、すべてhhx_db.hspを公開してくださったおかげです。ありがとうございました。

……あのスクリプトは結構適当で、preにすべきところをpにしていたり、"html{"や"}html"が残ってしまったり、dllの情報が落ちていたりしています。読み上げにはあまり支障はないと思いますが、お恥ずかしい限りです。

> あの懐かしいヘルプそのもの
今改良版を作っていますが、懐かしさと斬新さをどう調整するかが悩みどころです。
とりあえずHHXに倣ってプラグイン順の索引を作ってみましたが、他にもまだ作れるものがありそうです。

> いろいろ補完していただいたような格好で、
> 本当にありがたい限りです。
ありがとうございます。きちんと補完になっていれば良いのですが……。
まだまだHHXデータベースの理解が浅いので、遠回りをしているところもあるかもしれません。
もし詰まってしまった時は質問させてください。よろしくお願いします。

匿名 さんのコメント...

>マニュアル = HSファイルから作ったHTML でしょうか?
おはようございます。
マニュアル = (X)HTMLコンバータのpdfファイルです!^^;

eller さんのコメント...

> kz3さん
なるほど、そちらでしたか!
あれはword2007で作ったので、(私のスキルではなく)wordそのものの機能によるところが大きいと思います。最近やっと「スタイル」を使うようになったことも影響しているのかもしれませんが……。

説明文をもう少し分かりやすく書けると良いのですがね。