OSASK
OSASK関係で便利と思われることを紹介。そのうちOSASK-Wikiとか、HTML化するかも?
ARCINFO0.TXT
- Jenny8以降で使えるようになったアーカイブの作り方。
- ARCINFO0.TXTとは、アーカイブの仕様書のようなものであり、常にアーカイブの先頭にあるファイルです。
- テキストファイルに書いていますが、バイナリファイル扱いで、ほんの些細な省略や改行コードの変更もしてはいけません。気をつけてください。
- それでは、ARCINFO0.TXT解説開始。
- まず、ヘッダ(128Bytes)。ココは常に固定。
format_id: "OSASKARC0000"!
version: 0x00000000 !
levels: 0x00000000 !
!
- そして、各ファイルの説明。
- dos_nameについて
- ファイル名はファイル名8:拡張子3形式。ファイル名が8文字より少ない場合、半角スペースを入れて8:3形式になるようにします。
- optionsについて
- 主ファイルは必ず0x00000100です。
- bit0-2(0x0000000*)の3bitはアプリからのダイレクトネームアクセス要求に対するレスポンスについて。
0:dos_nameが一致したら無条件でアーカイブ内のファイルで対応
1:dos_nameが一致してかつディスク内に同名のファイルがないときだけ、アーカイブ内のファイルで対応
7:ダイレクトネームアクセス要求には反応しない
- bit4-6(0x000000*0)の3bitはアプリからファイルセレクタによるアクセス要求に対するレスポンスについて。
0:num値が一致したら無条件でアーカイブ内のファイルで対応
1:numが一致してかつオーダーがないときだけ、アーカイブ内のファイルで対応
7:num値フィールドは無効なので常に反応しない
- num値はファイルセレクタを開くときに指定したint numのこと。大抵は1にする。
- オーダーとは、これから処理を判断されるファイルたちの溜まり場のようなところ(例:.TXTファイルがTEDITC02.BINで開かれるとき)。ここでは、アプリがこの溜まり場でファイルを見つけた時にどちらを優先するかのオプション。
tek5を便利に設定できるMakefile
- tekの切り替えが簡単にできるMakefileを作りました。
- osadirしりーずには使えないかも。
bmp関数
読み込んだBMPの色が違う謎
- 濃い灰色にしたつもりが、薄い灰色に!!
- これはWindowsとOSASKのパレット設定が違うからで、パレット設定をOSASKに直せばOK!
bmp読み込みの設定アレコレ
- MINSIZEやらMMAREAやらよくワカランアレについて。
Written by K -- 2004-05-29 (Sat) 13:11:18
MINSIZEはBMPファイルとしての最低サイズを書きます。
とりあえず僕だったら14にするかなあ。というのはofsを読み取るためにfp[0x0d]まではア
クセスしなきゃいけないから、それより小さいとさすがにまずそうなので。MMAREAは自分
が想定しているBMPファイルの大きさの最大値から決めます。XSIZEとYSIZEが分かっていて
しかも16色のことしか考えないなら、結構簡単に見積もれるんじゃないかな?
- えーっと、ncdplay.bmpは14.4KBだから、こんな感じでいいのかな?
MINSIZE → 14
MMAREA → (16 * 1024)
- これにあわせて、Makefileも変えてみよう。こんな感じかな。
STACKSIZE = 10k
MALLOCSIZE = 50k
MMAREA = 20k
よく使う資料
何個でもタイマーシグナル
- タイマーシグナルは何個作ってもOK。0x01c0はもう使っているので、0x0300あたりに作るといい。
setdecを改造しよう
- test029から持ってきたsetdec3
void setdec3(unsigned int i, char *s)
{
int j;
j = 2;
do {
s[j--] = (i % 10) + '0';
if ((i /= 10) == 0)
break;
} while (j >= 0);
while (j >= 0)
s[j--] = ' ';
return;
}
- int j; j = 2;がケタをあらわしているので、これを引数にすれば終わりです。ついでにsetdec3からsetdecに変更します。
void setdec(unsigned int i, char *s, int j)
{
do {
s[j--] = (i % 10) + '0';
if ((i /= 10) == 0)
break;
} while (j >= 0);
while (j >= 0)
s[j--] = ' ';
return;
}
- ちなみに、使い方はこんな感じになります(この場合は4桁出力)。
char s[5];
int i;
s[4] = '\0';
i = 300;
setdec(i, s, 3);
lib_openwindow(通常版)とlib_openwindow_nm(_nm版)の違い
(メモのつもりがメルマガ風になってしまったが、気にしない。)
OSASKではたまにlib_openwindow_nmとか言うのが出てきますが、これはNo malloc版のlib_openwindowです。しかし、lib_openwindowでも、ウィンドウ名を指定してやれば同じ事ができるんだそうです。
lib_openwindowは、関数の最初に指定する引数、普段AUTO_MALLOCにしているところ)でmallocするかしないかを決めるんだそうです。AUTO_MALLOCにすると、lib_openwindowがmalloc作業をしてくれて、struct LIB_OPENWINDOWで宣言された変数が指定されればmallocしない、そんな仕組みになっています。ということは、中ではif文なんかを使っていますよね。おいらはここでやっとAUTO_MALLOCというdefine名の意味がわかりました(爆)。
一方、lib_openwindow_nmは、最初から「mallocしないでくれ」と思っている人たちが使う関数なので、if文で分岐するまでもなくmalloc作業をしません。削れる命令文はif文、malloc文だけです(推測)。でも、たしかmallocするってサイズ的に大きいですよね?そうだとしたら、使う側であるアプリのサイズはぐっと縮みます。mallocがそんなにサイズに影響しなくても、それなりに縮みます。
……そんなアプリのサイズに敏感な人のためだけに_nm系の関数があるわけです。……OSASKらしい理由ですね(笑)。
コメント欄
- わくわくどきどき -- K 2004-09-14 (火) 23:51:38