iconShIniOp [ close ]

================================================================================
シルクスクリーンアイコン情報にアクセスするためのOPL関数群  ShIniOp.opo
Version 1.12 (2004.10.25)

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


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


1. 概要
   このOPLモジュールは、PSIONの液晶ディスプレイ上のシルクスクリーンアイコンに対
   するアプリケーションの割当てを変更するために、作成されました。本モジュールに
   は、システムシェルのシルクスクリーンアイコン情報を読み出す、あるいは更新する
   ための関数群が含まれています。


2. 動作環境
   本モジュールは、下記の機種上で動作します。
     - Psion Series 5
     - Psion Series 5mx
     - Revo
     - netBook


3. 使用方法
   シルクスクリーンアイコンへのアプリケーションの割当ては、システムシェルの設定
   ファイルである "C:\System\Apps\Shell\Shell.ini" というファイルに保存されてい
   ます。この設定ファイルを書き換えて、システムシェルを再起動すると、アプリケー
   ションの割当てを変更することが可能です。
   * V2より前のUniFEPでは、システムシェルが "_Shell" になっているので、設定ファ
     イルが "C:\System\Apps\_Shell\_Shell.ini" になっています。

   "Shell.ini" ファイルにおける、アプリケーションのシルクスクリーンアイコンへの
   割り当てに関する情報は、以下に説明があります。本OPLモジュールの関数は、この割
   り当て情報中にある、アプリケーションUIDを書き換えます。

     情報               バイト数  説明
    ----------------------------------------------------------------------------
     UID1 (0x10000050)       4    Symbian OS SDKの資料をご覧ください

     UID2 (0x100000e4)       4    Symbian OS SDKの資料をご覧ください

     UID3 (0x10000076)       4    システムシェルのアプリケーションUID

     UIDのチェックサム       4    Symbian OS SDKの資料をご覧ください

     不明                    4    Symbian OS SDKの資料をご覧ください
                                  おそらく、ハードリセット直後のみ、ファイルサイ
                                  ズに下記の計算式を適用した値が格納されていると
                                  思われます。
                                      ( {ファイルサイズ} - 0x2a ) * 0x02

     不明                    4    Symbian OS SDKの資料をご覧ください
                                  おそらく、ハードリセット直後のみ、0x01が格納さ
                                  れていると思われます。

     不明                    4    Symbian OS SDKの資料をご覧ください
                                  おそらく、一度システムシェルの設定を行うと、そ
                                  の後はファイルサイズに下記の計算式を適用した値
                                  が格納されていると思われます。
                                      {ファイルサイズ} - 0x2a

     不明                    2    Symbian OS SDKの資料をご覧ください
                                  ファイルサイズと関連がありそうです。

     不明                   11    Symbian OS SDKの資料をご覧ください

     不明               (可変長)  Symbian OS SDKの資料をご覧ください
                                  ハードリセット直後は11バイトあるようですが、一
                                  旦システムシェルの設定を変更すると、このブロッ
                                  クは消滅するようです。

     不明                    2    Symbian OS SDKの資料をご覧ください
                                  おそらく、次のアドレスからトレイラー部へのオフ
                                  セットに、下記の計算式を適用した値が格納されて
                                  いると思われます。
                                      {オフセットバイト数} + 0x40

     Preferences             4    "Preferences" メニューの設定が、下記の値の和で
     (設定)                       格納されています。
                                    0x00    Never show wallpaper.
                                    0x01    Always show wallpaper.
                                    0x02    Show wallpaper in bookmark folder.
                                    0x10    Show hidden files.
                                    0x20    Not "Show System folder".
                                    0x40    [Fn]+[Enter] to open multi files.

     Standard folderの       1    次のバイト以降に格納された、Standard Folderの
     パスの長さ                   パスの文字列長です。格納された値は以下の計算式
                                  により算出されたものです。
                                      {文字列長} * 4 + 2

     Standard folder    (可変長)  システムシェルの "Preferences" ダイアログにあ
                                  る "Standard folder" に設定されたパスです。

     Bookmark folderの       1    次のバイト以降に格納された、Bookmark Folderの
     パスの長さ                   パスの文字列長です。格納された値は以下の計算式
                                  により算出されたものです。
                                      {文字列長} * 4 + 2

     Bookmark folder    (可変長)  システムシェルの "Set bookmark" メニューで設定
                                  されたBookmarkフォルダのパスです。

     不明                    4    Symbian OS SDKの資料をご覧ください
                                  おそらく、標準サイズのツールバーのボタン数が格
                                  納されていると思われます。

     不明                    4    Symbian OS SDKの資料をご覧ください


     シルクスクリーン        1    シルクスクリーンアイコン情報の数が、下図の計算
     アイコン情報の数             式を適用して格納されています。
                                      {アイコン情報の数} * 2

     *** 次アドレス以降、シルクスクリーンアイコン情報が始まります。アイコン情報
         は数個繰り返して格納されています。

     シルクスクリーンアイコン情報:
     {
     位置番号                4    シルクスクリーンアイコンの位置番号です。番号は
                                  0(システムシェル)から始まります。
                                  Series 5mxでは、"Web"(UID:0x10000fc0)がインス
                                  トールされていない場合、11が欠番になることがあ
                                  ります。

     アプリケーションUID     4    割り当てられたアプリケーションUIDです。

     キャプション文字列長    1    次のバイト以降に格納された、キャプションの文字
                                  列長です。格納された値は以下の計算式により算出
                                  されたものです。
                                      {文字列長} * 4 + 2

     キャプション       (可変長)  Extrasバーに表示される、アプリケーションのキャ
                                  プションです。
     }

     壁紙ファイルのパスの    1    次のバイト以降に格納された、壁紙ファイルのパス
     パスの長さ                   の文字列長です。格納された値は以下の計算式によ
                                  り算出されたものです。
                                      {文字列長} * 4 + 2
                                  Psion Series 5には存在しません。

     壁紙ファイル       (可変長)  システムシェルの "Preferences" メニューで設定
                                  された壁紙ファイルのパスです。
                                  Psion Series 5には存在しません。

     標準Agendaファイルの    1    次のバイト以降に格納された、標準Agendaファイル
     パスの長さ                   のパスの文字列長です。格納された値は以下の計算
                                  式により算出されたものです。
                                      {文字列長} * 4 + 2
                                  Revoにのみ存在します。

     標準Agenda         (可変長)  "Today view"で表示される標準Agendaファイルの
     ファイル                     パスです。
                                  Revoにのみ存在します。

     *** 恐らく、次のアドレス以降がトレイラー部になります。

     不明               (可変長)  Symbian OS SDKの資料をご覧ください
                                  ハードリセット直後は11バイトあるようですが、一
                                  旦システムシェルの設定を変更すると、このブロッ
                                  クは消滅するようです。

     不明                   20    Symbian OS SDKの資料をご覧ください
                                  データは固定のようです。

     データブロックの        4    Preferencesメニューの設定情報が格納されている
     アドレス                     アドレスの、アドレス0x20からのオフセットです。

    ----------------------------------------------------------------------------


4. 関数
   ShIniOp.opoに定義された関数の使用方法を説明します。

   PSiVersion%:
      バージョン番号を返します。$101は "Version 1.01" を意味します。

   PSiGetAppUidFromFile&:(fname$, pos%)
      指定されたShell.iniファイルから、指定された位置のシルクスクリーンアイコン
      に割り当てられた、アプリケーションUIDを取得します。第一引数 "fname$" は
      Shell.iniファイルのパス、第二引数 "pos%" は、シルクスクリーンアイコンの位
      置番号です。
      取得に成功した場合はアプリケーションUIDを、失敗した場合は 0xffffffff を返
      します。

   PSiGetAppCaptionFromFile$:(fname$, pos%, uidp&)
      指定されたShell.iniファイルから、指定された位置のシルクスクリーンアイコン
      に割り当てられた、アプリケーションのキャプションを取得します。第一引数
      "fname$" はShell.iniファイルのパス、第二引数 "pos%" は、シルクスクリーンア
      イコンの位置番号です。第三引数の "uidp&" はアプリケーションUIDを格納する長
      整数のアドレスです。
      取得に成功した場合はアプリケーションのキャプションを返し、"uipd&" で与えら
      れたアドレスにアプリケーションUIDを格納します。失敗した場合は空文字列を返
      し、"uidp&" で与えられたアドレスには 0xffffffff を格納します。

   PSiSetAppUidToFile%:(fname$, pos%, uid&)
      指定されたShell.iniファイルの、指定された位置のシルクスクリーンアイコンに
      割り当てられた、アプリケーションUIDを上書きします。第一引数 "fname$" は
      Shell.iniファイルのパス、第二引数 "pos%" は、シルクスクリーンアイコンの位
      置番号です。第三引数の "uid&" は上書きする新しいアプリケーションUIDです。
      上書きに成功した場合は KTrue% を、失敗した場合は KFalse% を返します。

   PSiOpenShIni%:(fname$)
      指定されたShell.iniファイルを更新可能な状態で開きます。第一引数 "fname$"
      はShell.iniファイルのパスです。
      オープンに成功した場合は、ファイル記述子を返します。

   PSiOpenrShIni%:(fname$)
      指定されたShell.iniファイルを読み取り専用で開きます。第一引数 "fname$" は
      Shell.iniファイルのパスです。
      オープンに成功した場合は、ファイル記述子を返します。

   PSiCloseShIni:(fp%)
      開かれているShell.iniファイルを閉じます。引数 "fp%" は関数 PSiOpenShIni%:
      または PSiOpenrShIni%: から返されたファイル記述子です。

   PSiReadAppUid&:(fp%, no%)
      指定された位置のシルクスクリーンアイコンに割り当てられた、アプリケーション
      UIDを返します。第一引数 "fp%" は開かれているShell.iniファイルの記述子、第
      二引数 "no%" は、シルクスクリーンアイコンの位置番号です。
      UID取得に失敗した場合は 0xffffffff を返します。UIDを読み取ると、Shell.ini
      ファイルのファイルポインタは、次のシルクスクリーンアイコンの位置番号に移動
      します。

   PSiReadAppCaption$:(fp%, no%, uidp&)
      指定された位置のシルクスクリーンアイコンに割り当てられた、アプリケーション
      のキャプションを取得します。第一引数 "fp%" は開かれているShell.iniファイル
      の記述子、第二引数 "no%" は、シルクスクリーンアイコンの位置番号です。第三
      引数の "uidp&" はアプリケーションUIDを格納する長整数のアドレスです。
      取得に成功した場合はアプリケーションのキャプションを返し、"uipd&" で与えら
      れたアドレスにアプリケーションUIDを格納します。失敗した場合は空文字列を返
      し、"uidp&" で与えられたアドレスには 0xffffffff を格納します。キャプション
      を読み取ると、Shell.iniファイルのファイルポインタは、次のシルクスクリーン
      アイコンの位置番号に移動します。

   PSiWriteAppUid%:(fp%, no%, uid&)
      指定された位置のシルクスクリーンアイコンに割り当てられた、アプリケーション
      UIDを上書きします。第一引数 "fp%" は開かれているShell.iniファイルの記述子、
      第二引数 "pos%" はシルクスクリーンアイコンの位置番号です。第三引数の "uid&"
      は上書きする新しいアプリケーションUIDです。
      上書きに成功した場合は KTrue% を、失敗した場合は KFalse% を返します。UIDを
      上書きした後、Shell.iniファイルのファイルポインタは、次のシルクスクリーン
      アイコンの位置番号に移動します。

   PSiReadCurrentAppUid&:(fp%)
      現在のファイルポインタ位置から長整数を読み取り、アプリケーションUIDとして
      返します。引数 "fp%" は開かれているShell.iniファイルの記述子です。
      UIDを読み取ると、Shell.iniファイルのファイルポインタは、次のシルクスクリー
      ンアイコンの位置番号に移動します。

   PSiReadCurrentAppCaption$:(fp%, uidp&)
      現在位置のシルクスクリーンアイコンに割り当てられた、アプリケーションのキャ
      プションを取得します。ファイルポインタはシルクスクリーンアイコン情報のUID
      が格納されている位置になければなりません。第一引数の "fp%" は開かれている
      Shell.iniファイルの記述子、第二引数の "uidp&" はアプリケーションUIDを格納
      する長整数のアドレスです。
      取得に成功した場合はアプリケーションのキャプションを返し、"uipd&" で与えら
      れたアドレスにアプリケーションUIDを格納します。失敗した場合は空文字列を返
      し、"uidp&" で与えられたアドレスには 0xffffffff を格納します。キャプション
      を読み取ると、Shell.iniファイルのファイルポインタは、次のシルクスクリーン
      アイコンの位置番号に移動します。

   PSiWriteCurrentAppUid:(fp%, uid&)
      現在位置のシルクスクリーンアイコンに割り当てられた、アプリケーションUIDを
      上書きします。第一引数 "fp%" は開かれているShell.iniファイルの記述子、第二
      引数 "uid&" は上書きする新しいアプリケーションUIDです。
      UIDを書きした後、Shell.iniファイルのファイルポインタは、次のシルクスクリー
      ンアイコンの位置番号に移動します。

   PSiSeekAppDat%:(fp%, pos%)
      指定された位置のシルクスクリーンアイコン情報に、ファイルポインタを移動しま
      す。第一引数の "fp%" は開かれているShell.iniファイルの記述子、第二引数の
      "pos%" はシルクスクリーンアイコンの位置番号です。
      ファイルポインタの移動に成功した場合は KTrue% を、失敗した場合は KFalse%
      を返します。成功した場合、Shell.iniファイルのファイルポインタは、指定され
      たシルクスクリーンアイコンのUIDに移動します。

   PSiSetHeadOfAppDat&:(fp%)
      先頭のシルクスクリーンアイコン情報に、ファイルポインタを移動します。引数の
      "fp%" は開かれているShell.iniファイルの記述子です。
      ファイルポインタの移動に成功した場合は0を返します。成功した場合、Shell.ini
      ファイルのファイルポインタは、先頭のシルクスクリーンアイコンのUIDに移動し
      ます。

      *** この関数は互換性確保のために残してあります。この関数を使用する代りに、
          PSiSeekHeadOfAppDat&: を使用してください。

   PSiSeekHeadOfAppDat&:(fp%)
      先頭のシルクスクリーンアイコン情報に、ファイルポインタを移動します。引数の
      "fp%" は開かれているShell.iniファイルの記述子です。
      本関数の返り値はシルクスクリーンアイコン情報の個数です。ファイルポインタの
      移動に失敗した場合は0を返します。成功した場合、Shell.iniファイルのファイル
      ポインタは、先頭のシルクスクリーンアイコンのUIDに移動します。

   PSiSeekNextAppDat&:(fp%)
      次のシルクスクリーンアイコン情報に、ファイルポインタを移動します。引数の
      "fp%" は開かれているShell.iniファイルの記述子です。
      本関数の返り値は、次のシルクスクリーンアイコン情報の位置番号です。実行後、
      Shell.iniファイルのファイルポインタは、次のシルクスクリーンアイコン情報の
      UIDに移動します。

   PSiReadPosNo&:(fp%)
      現在のファイルポインタ位置から長整数を取得し、シルクスクリーンアイコンの位
      置番号とします。引数の "fp%" は開かれているShell.iniファイルの記述子です。
      本関数は現在のシルクスクリーンアイコン位置番号を返し、その番号は前のアイコ
      ンの位置番号の次の番号になっていると思われます。次の番号になっていない場合
      は、シルクスクリーンアイコンは終りに達しています。ただしSeries 5mxでは11番
      がしばしば欠番になっていることがあり、注意が必要です。11番が欠番の場合、10
      番の次は12番になります。
      実行後、Shell.iniファイルのファイルポインタは、現在のシルクスクリーンアイ
      コン情報のUIDに移動します。

   PSiReadStr$:(fp%)
      現在のファイルポインタ位置から文字列を読み出します。引数の "fp%" は開かれ
      ているShell.iniファイルの記述子です。関数の呼出し時には、ファイルポインタ
      は文字列長が格納されている、1バイトの領域になければいけません。
      本関数は読み出した文字列を返します。実行後、ファイルポインタは文字列の末尾
      の次のバイトに移動します。

   PSiSkipStr:(fp%)
      現在のファイルポインタ位置から文字列を読み飛ばします。引数の "fp%" は開か
      れているShell.iniファイルの記述子です。関数の呼出し時には、ファイルポイン
      タは文字列長が格納されている、1バイトの領域になければいけません。
      実行後、ファイルポインタは文字列の末尾の次のバイトに移動します。

   PSiReadStrLen%:(fp%)
      現在のファイルポインタ位置に格納されている文字列長を読み出します。引数の
      "fp%" は開かれているShell.iniファイルの記述子です。関数の呼出し時、ファイ
      ルポインタは文字列長が格納されている、1バイトの領域になければいけません。
      ファイルポインタは文字列の先頭に移動します。


5. 注意制限事項
   5.1. 本プログラムの関数は、Shell.iniファイルの有無およびアクセス権のチェック
        を行っていません。これらのチェックは、本モジュールの関数を呼び出す前に、
        親プロシージャ側で行ってください。

   5.2. Shell.iniファイルの変更内容は、システムシェルを再起動することで反映され
        ます。再起動の前にシステムシェルの設定を変更すると、Shell.iniファイルの
        変更は失われてしまいます。


6. 著作権・配布条件等
   6.1. 本プログラム、および一緒に配布される関連の生成物(ソースコード、アイコン、
        文書等)の著作権は、作者に属します。

   6.2. 本プログラムは著作権者によって、無償で配布されます。本プログラムの使用に
        あたっては、商用、非商用を問わず、いかなる費用も発生しません。

   6.3. 本プログラムを使用したことによる、身体的、精神的、物的、金銭的、社会的、
        宗教的、政治的、および他のあらゆる損害に対し、作者は一切、賠償責任を負い
        ません。本プログラムの使用にあたっては、上に述べたようなあらゆる損害に対
        する求償権を放棄しなくてはなりません。

   6.4. 本プログラムを入手したすべての人は、著作権者の承諾無しに、本プログラムの
        ソースコードの全部または一部を自身の著作物のために再利用すること、および
        商用、非商用を問わずその著作物を配布することが可能です。

   6.5. 本プログラムのソースコードを再利用して自身の著作物を作成する人は、本プロ
        グラムに関して他の人が所有する権利である、自由な配布、自由な使用、自由な
        再配布、自由な再利用のいずれをも制限してはなりません。

   9.6. 本章において上に掲げたすべての条項は、本プログラムを使用するか、あるいは
        ソースコードを再利用した時点で、同意したものとみなします。


7. 変更履歴
   Ver.1.00 (2002.06.01):
     ・初版公開。

   Ver.1.10 (2003.07.06):
     ・シルクスクリーンアイコン情報にシークする際に、正しい位置にシークしている
       かを確認するようにした。これに伴い、一部の関数の仕様を変更した。
     ・ハードリセット後に一度もシステムの設定を変更していない状態では、Shell.ini
       のレイアウトが異なっている点を見落しており、この点を修正した。
     ・本ドキュメント中のShell.iniの説明に誤りがあったので修正した。

   Ver.1.11 (2003.09.12):
     ・5mxではWeb(UID=0x10000fc0)がインストールされていないと、シルクスクリーン
       アイコン情報の位置番号11が欠番になる場合があり、この場合に以降のシルクス
       クリーンアイコン情報にアクセスできない不具合を修正した。

   Ver.1.12 (2004.10.25):
     ・関数 "PSiGetAppCaptionFromFile$:" を追加した。
     ・関数 "PSiReadPosNo&:" を追加した。
     ・関数 "PSiSeekHeadOfAppDat&:" を追加した。
     ・ヘッダファイルを書き直した。
     ・エントリポイントのプロシージャ "PsiShowInfo:" をサンプルプログラムとして
       書き直した。
     ・他のいくつかの関数を修正した。
     ・本ドキュメント内の、関数の仕様に関する記述を訂正した。