ページへ戻る

− Links

 印刷 

gg00man​/file のバックアップソース(No.2) :: OSASK計画

osaskwiki:gg00man編集/file のバックアップソース(No.2)

« Prev[4]  Next »[5]
* ファイル関係 [[GUIGUI00_man]]
#contents

***lib_readCSd
 int lib_readCSd(int offset) :

 機能:コードセグメントの任意のダブルワードを読み込んでその値を返す。

   コードセグメントには主にプログラムのバイナリーコードが書かれていますが、一部
 の領域は特別な値が書かれており、主にそれを参照するために使います。なお、offset
 はコードセグメントの範囲をはみ出すような指定をしてはいけません。

     offset = 0x0010 : stack + スタティックデーター + mallocの合計サイズをページ
       単位(4KB単位)に切り上げた値。ここからfile領域が始まっている。fpの初期化で
       ここをよく使う。

     offset = 0x0014 : この値の上位20bitは、file:で指定した値が書き込まれている
       。下位12bitはリザーブなので、その値に依存しないようにすること。file:は4KB
       単位で指定するので、上位20bitだけで指定できる。

 参考になるサンプル:tviewc00(introc), test016

***lib_initmodulehandle0
 void lib_initmodulehandle0(int opt, int slot) :

 機能: スロットをモジュールハンドルとして初期化し,アプリ専用ディレクトリに移動。

   opt == 8 だとユーザディレクトリ、opt == 12 だとマシンディレクトリに移動する。
   現状ではどちらも同じに見えるが、マシンディレクトリだと全ユーザ共通となる。
   モジュールハンドルはスロットを一つ使う。
   たいていの場合、lib_steppath0()と組み合わせて使われる。

 参考になるサンプル:test016

***lib_initmodulehandle1
 void lib_initmodulehandle1(int slot, int num, int sig) :

 機能: スロットをモジュールハンドルとして初期化し、どこのディレクトリに移動
       するかはシェル (人間) に任せる。

     モジュールハンドルはスロットを一つ使う。
     numは番号で、コマンドラインから制御するために機能別に通し番号をふる。
     sigは成功シグナル。成功した場合はsigが、失敗した場合はsig+1~sig+15の
   シグナルが来る。どれがどんなエラーを示すかは未定。
     成功か失敗のシグナルが返ってくるまで、このコマンドを再実行してはいけない。

 ネタ元: introc/tviewc00.c

***lib_steppath0
 void lib_steppath0(int opt, int slot, const char *name, int sig) :

 機能:パスをたどることで、モジュールハンドルを移動。

 このコマンドを使う前にスロットをモジュールハンドルに初期化して適当な
 ディレクトリに移動させておくこと。そのディレクトリの中を検索する。

   (1) opt == 0
       name : モジュールネーム。
           必ず大文字で、12文字。9文字目はピリオドでなければならない。12文字に満
         たない場合、スペースで補う。例:"TEST016 .C  "
       sig  : 完了シグナル。
           成功の場合はこの値が返ってくる。失敗の場合は+1~+15された値が返ってく
         る。値と失敗の原因についての関係は今のところ未定。

 参考になるサンプル:test016

***lib_mapmodule
 void lib_mapmodule(0, int slot, int attr, int len, int offset, int moffset) :

 機能: モジュールをメモリ空間にマッピングする。

     slotはモジュールに移動させたモジュールハンドル。一つのハンドルで複数
   マッピングしてはいけない。
     attrは読み書き属性。5で読み込み専用、7で書き込み可能。
     lenはマッピングする長さ。0より大きい4096の倍数。モジュールの大きさとlen
   のうち、短いほうでマッピングが打ち切られる。
     offsetはマッピング領域のポインタ。典型的にはilb_readCSd(0x10)を使うが、
   複数のファイルを同時にマッピングするときは重ならないようにずらす。
     moffsetはモジュール内のオフセット。制限はとくにないらしい。

 参考になるサンプル:tviewc00(introc)

***lib_unmapmodule
 void lib_unmapmodule(0, int size, int addr) :

 機能: モジュールマッピング解除。

     addrで始まる長さsizeバイトの領域のモジュールをはがす。
     モジュールをリサイズしたり、ハンドルにしたスロットを再利用したりするまえに
    マッピングを全てはがしておくこと。

***lib_readmodulesize
 int ilb_readmodulesize(int slot) :

 機能: モジュールの大きさを返す。

     slotはモジュールハンドル。

 参考になるサンプル:tviewc00(introc)

* こめんと欄
#comment

« Prev[4]  Next »[5]