では、バイト制御系の関数仕様を決めていこうと思います。
------ここから------
・バイト確保
書式:バイト確保([int]バイト数、[int]初期値)
戻値:[int]ハンドル
説明:バイト数に1,2,4の何れかを指定して、変数を確保し、初期値を
代入する。以降、戻り値のハンドルを使用して、値を読み書き
出来る。
確保されるメモリ領域は内部でunsignedで扱われる。この値は
なでしこ側から見るとグローバルな領域になるので、関数内等
ローカルスコープから本関数をコールした場合も、変数自体は
グローバルに確保されていることに注意すること(つまり、
なでしこの関数を抜けても、変数領域は解放されない)。
確保が成功した場合には0以上の整数が、失敗した場合には-1
が返される。使用が終了した場合はハンドルを解放すること。
・バイト読込
書式:バイト読込([int]ハンドル)
戻値:[int]変数値
説明:バイト確保命令で取得したハンドルの、現在の値を取得する。
戻り値は整数型になる。無効なハンドル値を指定した場合には
常に0が返される。
・バイト書込
書式:バイト書込([int]ハンドル、[int]値)
戻値:[int]結果
説明:バイト確保命令で取得したハンドルに対して、指定した値を
書き込む。書き込める値の範囲は確保されている領域サイズに
より異なり、範囲外の値を指定した場合にはエラーとなる。
書込が成功した場合には0が、失敗した場合には-1が返される。
・バイト右シフト
書式:バイト書込([int]ハンドル、[int]シフト量)
戻値:[int]結果
説明:ハンドルで確保されているバイトに対して、シフト量で指定
した分、右シフトを実施する。シフト量は確保されている
バイトのサイズにより、1byteの場合は7、2byteの場合は15、
4byteの場合は31となる。
成功した場合、シフト後の値が元の値に上書きされ、0が
返される。失敗した場合には-1が返される。
・バイト左シフト
書式:バイト書込([int]ハンドル、[int]シフト量)
戻値:[int]結果
説明:ハンドルで確保されているバイトに対して、シフト量で指定
した分、左シフトを実施する。シフト量は確保されている
バイトのサイズにより、1byteの場合は7、2byteの場合は15、
4byteの場合は31となる。
成功した場合、シフト後の値が元の値に上書きされ、0が
返される。失敗した場合には-1が返される。
・エンディアン変換
書式:エンディアン変換([int]ハンドル)
戻値:[int]結果
説明:バイト確保命令で取得したハンドルに対応する値のエンディアン
変換を実施する。変換後の値はハンドル対応値に上書きされる。
成功した場合は0が、無効なハンドルを指定した場合は-1が
返される。
------ここまで------
なでしこでは、その他現代風の高級言語(スクリプト、ですかね)
に似て、変数の型を指定しなくても関数の結果を受けられますが、
「整数」「数値」など指定することも可能です。
「整数」と言うとCで言うところのintで宣言されて、サイズ的には4byte
の空間(メモリ)が確保されている様です。
バイナリデータを扱う場合は、サイズとして1,2,4byteのデータを
意識的に確保して使用することが多いので、バッファと一部被る
部分はありますが「バイト確保」関数を準備しました。
バイト制御系の関数に限らず、このDLLでは「~確保」関数を
用いてDLL内で必要なメモリ等を確保してます。メモリや構造体を
そのままなでしこに渡すことは出来ないので、なでしこに対して
渡すのは「ハンドル」値です。これはなでしこで言うところの「整数」
です。以降、このDLLのその他の関数を使用して操作を行う
場合は、引数にこの「ハンドル」を指定します。