iconUniCvt [ close ]

================================================================================
UniOPXを間接的に操作するためのOPL関数群  UniCvt.opo
Version 1.01 (2004.09.03)

三橋憲行
================================================================================


【目次】
   1. はじめに
   2. 動作環境
   3. 概要
   4. 使用方法
   5. 注意制限事項
   6. 著作権・配布条件等
   7. 変更履歴


1. はじめに
   このOPLプログラムは「Psibou」というアプリケーションで、UniFEPのライブラリであ
   るUniOPXを間接的に操作するために、OPLの外部モジュールとして作成したものです。

   プログラム自体は単体では有効な動作をしませんが、内部の関数は独立して使用でき
   ますので、元のアプリケーションとは別に公開してみました。OPMと言えるほど厳密に
   は作っていませんが、基本的にはOPMと同様に使用可能だと思います。


2. 動作環境
   本モジュールは、以下の環境を必要とします。
    ・Psion Series5, 5mx, Revo またはこれらと互換の機種
    ・UniFEP for EPOC(または 5mx, Revo, V2)


3. 概要
   UniFEPのAPIであるUniOPXの関数を用いると、OPLのプログラム文字コードの変換を行
   うことが可能です。単にUniOPXの関数を使用するだけであれば、プログラムから直接
   呼び出しても構わないのですが、その方法ではUniFEPが導入されていない環境で起動
   すると、"OPX does not exists"というメッセージが出て、起動自体が失敗します。
   「UniFEPが導入されていればUniOPXを用いて文字コード変換が可能だが、導入されて
   いなくても文字コード変換ができない以外は問題なく動作する」という仕様を実現す
   るためには、何らかの方法で間接的にUniOPXを操作する必要があります。本モジュー
   ルは、これを目的として作成しました。

   本モジュールを介してUniOPXを操作するためには、呼び出し側のプログラムより、
   loadm命令によって本モジュールをロードします。UniFEPが導入されていない環境で本
   モジュールをロードするとエラーが発生しますので、loadm命令はtrapしておきます。
   命令がエラーにならなければ、UniOPXが使用可能です。


4. 使用方法
   UniCvt.opoに定義された定数、および関数の使用方法を簡単に説明します。なお、サ
   ンプルプログラムはありませんが、UniCvt.oplの先頭にある PUcShowInfo: 関数およ
   び、そこから呼び出されている関数が使用例になっていますので、必要な方はそれら
   をご参照ください。

   [定数]
     本モジュールで簡便に文字コードを指定するための定数です。関数 PUcGetEncNo%:
     および PUcSmInitSimpleMode&: で使用します。なおEUC-JPコードは、UniFEPのバー
     ジョンによっては、実装されていない場合があります。

     KUcCodeEucJp%          EUC-JPコード
     KUcCodeShiftJis%       ShiftJISコード

   [簡易モードの関数群]
     簡易モードの関数群は使用条件を限定することで、UniOPXを使用するための手続き
     を一括して行い、簡便に文字コード変換を行うものです。簡易モードでは、文字列
     がOPLの文字列型のみになることと、UTF-8に変換できる文字コードがEUC-JPとShift
     JISに限定されます。

     PUcSmInitSimpleMode&:(aCode%, aDisp%)
       aCode%:  変換元の文字コード {KUcCodeEucJp%, KUcCodeShiftJis%}
       aDisp%:  表示モード変更有無(UniFEP V1でのみ有効) {KTrue%, KFalse%}

       UniOPX使用可能確認、実行環境における指定文字コードのEncoding System No.取
       得、変換用バッファの獲得を行い、簡易モードオブジェクトを初期化します。成
       功するとオブジェクトへのハンドルとして0以外の値を返します。以降、文字コー
       ド変換を行う際は、関数にこのハンドルを引数として渡します。
       簡易モードオブジェクトは、不要になった時点で PUcSmEndSimpleMode: を用いて
       破棄しなければなりません。

     PUcSmEndSimpleMode:(aHandle&)
       aHandle&:  簡易モードオブジェクトへのハンドル

       PUcSmInitSimpleMode&: を用いて作成した、簡易モードオブジェクトを破棄しま
       す。返り値はありません。

     PUcSmToUtf8$:(aHandle&, aStr$)
       aHandle&:  簡易モードオブジェクトへのハンドル
       aStr$:     変換元の文字列

       変換元の文字列をUTF-8コードに変換します。変換元文字列の文字コードは、簡易
       モードオブジェクト作成時に UcSmInitSimpleMode&: の引数で指定したものです。
       変換後の文字列長が255文字を超えた場合は、256文字以降を切り捨てます。その
       際、マルチバイト文字の境界については考慮しません。

     PUcSmFromUtf8$:(aHandle&, aStr$)
       aHandle&:  簡易モードオブジェクトへのハンドル
       aStr$:     変換元のUTF-8文字列

       変換元のUTF-8文字列を他の文字コードに変換します。変換先文字列の文字コード
       は、簡易モードオブジェクト作成時に UcSmInitSimpleMode&: の引数で指定した
       ものです。変換後の文字列長が255文字を超えた場合は、256文字以降を切り捨て
       ます。その際、マルチバイト文字の境界については考慮しません。

   [簡易モード以外の関数群]

     PUcIsAvailable%:
       UniOPXが使用可能か否かを返します。使用可能な場合はKTrue%、不可の場合は
       KFalse%が返ります。この関数は、UniOPXの UOSupported&: の実行結果を受けて
       値を返します。

     PUcChangeMode:
       UniFEP V1環境下で、実行中のプログラムがUTF-8文字列を表示できるよう、画面
       表示を変更します。UniOPXの UOEnableUtf8: を実行します。

     PUcGetEncList%:(apLpEncList&)
       apLpEncList&:  リストを受け取る文字列型変数のポインタ

       導入されているUniOPXの変換文字コードリストを取得し、引数で与えられた文字
       列型変数にセットします。リストは文字コード変換を行う関数 PUcToUtf8&: およ
       び PUcFromUtf8&: で引数として与える変換文字コードの序数順(先頭は0)に並ん
       でいます。関数の返り値は変換文字コードの数です。本関数では、リストを格納
       する文字列型変数のサイズをチェックしませんので、呼び出し側のプログラムで
       充分なサイズを確保する必要があります。

     PUcGetEncNo%:(aCode%)
       aCode%:  文字コード {KUcCodeEucJp%, KUcCodeShiftJis%}

       指定された文字コードの、導入されているUniOPXにおける変換文字コード序数を
       取得し、返り値とします。導入されているUniOPXが指定された文字コードに対応
       していない場合は、負数が返されます。本関数の返り値は、文字コード変換を行
       う関数 PUcToUtf8&: および PUcFromUtf8&: で引数として与える変換文字コード
       の序数です。本関数ではEUC-JPとShiftJISしか対応していませんので、他の文字
       コードを使用する場合は、PUcGetEncList%: で取得したリストを元に、序数を取
       得する必要があります。

     PUcToUtf8&:(apSrcBuf&, aSrcLen&, apDstBuf&, aLenDstBuf&, aEncNo%)
       apSrcBuf&:   変換元の文字列が格納されたバッファへのポインタ
       aSrcLen&:    変換する文字列長
       apDstBuf&:   変換後の文字列を格納するバッファへのポインタ
       aLenDstBuf&: 変換後の文字列を格納するバッファの長さ
       aEncNo%:     変換元文字コードの序数

       指定されたバッファ内の文字列を、UTF-8コードに変換します。変換元文字コード
       の序数は、PUcGetEncNo%: で取得するか、PUcGetEncList%: で取得したリストか
       ら割り出した順序です。この関数は、UniOPXの UoDecode&: を実行します。返り
       値は変換後の文字列長です。

     PUcFromUtf8&:(apSrcBuf&, aSrcLen&, apDstBuf&, aLenDstBuf&, aEncNo%)
       apSrcBuf&:   変換元のUTF-8文字列が格納されたバッファへのポインタ
       aSrcLen&:    変換する文字列長
       apDstBuf&:   変換後の文字列を格納するバッファへのポインタ
       aLenDstBuf&: 変換後の文字列を格納するバッファの長さ
       aEncNo%:     変換先の文字コードの序数

       指定されたバッファ内のUTF-8コードの文字列を、指定した文字コードに変換しま
       す。変換先文字コードの序数は、PUcGetEncNo%: で取得するか、PUcGetEncList%:
       で取得したリストから割り出した順序です。この関数は、UniOPXの UoEncode&:
       を実行します。返り値は変換後の文字列長です。

     PUcStrToBuf&:(apBuf&, aLen&, aSrcStr$)
       apBuf&:    文字列を複写するバッファへのポインタ
       aLen&:     バッファのサイズ
       aSrcStr$:  複写する文字列

       OPL文字列から文字列の実体部分取り出して、指定したバッファに複写します。こ
       の関数は、UniOPXの UOBufferFromString&: を実行します。返り値は複写された
       文字列長です。

     PUcStrFromBuf$:(apBuf&, aLen&)
       apBuf&:  文字列が格納されているバッファへのポインタ
       aLen&:   バッファから取り出す文字列のサイズ

       バッファから文字列データを取り出して、OPL文字列に変換して返します。この関
       数は、UniOPXの UOBufferAsString$: を実行します。

     PUcHanKanaExist%:(aStr$, aCode%)
       aStr$:   検査する文字列
       aCode%:  文字コード {KUcCodeEucJp%, KUcCodeShiftJis%}

       指定された文字列に半角カナが含まれているか否かを検査します。検査する文字
       列の文字コードは、EUC-JPまたはShiftJISのどちらかを引数で指定します。文字
       列に半角カナが含まれている場合はKTrue%を、含まれていない場合はKFalse%を返
       します。


5. 注意制限事項
   5.1. 本モジュールは日本語版UniFEPの使用を前提としています。他言語版のUniFEPで
        の動作については未確認です。また、Series 5mx pro日本語版上での動作につい
        ても確認していません。


6. 著作権・配布条件等
   6.1. 本プログラムの著作権は、放棄します。

   6.2. 本プログラムを使用したことによる、身体的、精神的、物的、金銭的、社会的、
        宗教的、政治的、および他のあらゆる損害に対し、作者は一切、賠償責任を負い
        ません。


7. 変更履歴
   2004.08.16   Ver.1.00
     ・Psibouで外部モジュールとして使用するために作成。(非公開)

   2003.09.03   Ver.1.01
     ・単独のモジュールとして公開。
     ・関数 PUcStrToBuf&: および PUcStrFromBuf$: を追加。
     ・エントリーポイントの関数 PUcShowInfo: をサンプルプログラムを兼ねたものに
       変更。他の関数についても一部見直し。