OSASK

OSASK/Tips

OSASK関係で便利と思われることを紹介。そのうちOSASK-Wikiとか、HTML化するかも?


ARCINFO0.TXT


  • ARCINFO0.TXTとは、アーカイブの仕様書のようなものであり、常にアーカイブの先頭にあるファイルです。
  • テキストファイルに書いていますが、バイナリファイル扱いで、ほんの些細な省略や改行コードの変更もしてはいけません。気をつけてください。
  • それでは、ARCINFO0.TXT解説開始。
  1. まず、ヘッダ(128Bytes)。ココは常に固定。
    format_id:     "OSASKARC0000"!
    version:      0x00000000     !
    levels:       0x00000000     !
                                 !
  2. そして、各ファイルの説明。
    • ココで先頭のファイルが「主ファイル」。その後は全て「副ファイル」。起動すると、主ファイルが起動し、副ファイルを読んだりする。
      dos_name:      "HOGE    .BIN"!
      options:      0x00000100     !
      num:          0x00000000     !
                                   !
      dos_name:      "HOGEE   .BMP"!
      options:      0x00000001     !
      num:          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読み込みに何行も書くとごたつくので、関数にして見ました。
  • サイズがでかくなってしまうので、ncdplayでは没になりますた。。
    −作りたい人はこんな書式がオススメかも。中身はshibaiとかから持ってくるとよかね。
    void loadbmp(char *filename, struct LIB_WINDOW *window, struct LIB_GRAPHBOX *gbox)
    /* 書式:『bmpファイル(8:3形式)』を『Window』の『グラフィックボックス』に読み込む。 */

読み込んだBMPの色が違う謎

  • 濃い灰色にしたつもりが、薄い灰色に!!
  • これはWindowsとOSASKのパレット設定が違うからで、パレット設定をOSASKに直せばOK!
    • 一回直せばWindowsでも普通に見れますょん。

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);
    • そしてsは" 300"になります。

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

添付ファイル: filetek5Makefile 738件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-03-25 (木) 23:55:07