これがソース。
#include <guigui01.h> void G01Main() { static unsigned char cmdlin[] = { 0x86, 0x50, 0x8a, 0x8c, 0x40 }; int i, j; g01_setcmdlin(cmdlin); g01_getcmdlin_fopen_s_3_5(1); for (j = 0;; j++) { if (g01_getcmdlin_fopen_m_0_4(0, j) == 0) break; do { i = jg01_fread1_4(2 * 1024 * 1024, g01_bss1a1); jg01_fwrite1f_5(i, g01_bss1a1); } while (i != 0); } return; }
・・・どうも、ファイルのオープンとコマンドラインはセットになってるようだぞ???
うーん。これはちょっと後回し。とにかく、決まりきったファイルをオープンしてみたいな。
こんなファイルを用意。名前はtest.txt
arusyuno kan yo! kokorono hirameki yo. onnnanoko ni ha nanntonaku wakarunoyo!
ここによると、こんなコードになるのかな・・・
#include <guigui01.h> void G01Main() { int mode; mode = 1; // いっけね・・・Cでは2進数表記ないんだっけ。 // 00000000000000000000000000000001 // ??? 00 0 001 // 書かないので 書かない とりあえず1 int slot = 4; // スロットってなんだべか?あらかじめ用意されたファイルハンドルってことでいい? int pathlen = 8; // パスの長さってことでいいのかな。test.txtだから、8でいいのかな。 static unsigned char path[] = { 't','e','s','t','.','t','x','t' }; // パス。カレントにあるのでファイル名だけでいいはず・・・ jg01_fopen(mode, slot, pathlen, path); // ファイルをオープンしてみる if( slot == -1 ) { g01_putc('x') ; return; } g01_putc('O') ; return; // スロットが-1なら失敗。x(バツ)を表示して終了。そうでなければOを表示 }
なーーーんでだよクッソぉ! jg01_fopenが使えないとか言われるぞ??
ヘンダナァ・・・guigui01.h見ると、jg01_fopenはちゃんとあるんだけど、引数が3つしかないぞ?pathlenが廃止された???
うーん・・・pathlenを引っこ抜いたらとりあえずコンパイルは通ったけど、オープンに失敗するなぁ・・・
pathlenが廃止された? ってことは、パス文字列に終端が必要なのかなってんで、お尻に0を置いてみたけど変わらないなぁ・・・
がーーん! ウッチャンがアドバイスくれた! そうだよ! 大勘違いしてた!!!!!
よーし! とりあえず O が表示されたぞおぉぉ! ウッチャン大感謝! (まーだポインタが怪しいとは。オイラってばもう!)
うーん。jg01_freadなんだが、これも引数が変更されているっぽいなぁ。guigui01.hに従おう・・・
jg01_fread1(int s, int n, void *b) こういう構文だが、先頭のsはスロットらしいので4でいいか。第二引数と第三引数はなんだろ??これ???
げげげ! ↑のcpycのソースでは、なんか違う関数使ってる上に引数が2個・・・それに戻り値があるぞ? なんだべこれ???
ここに詳しく書いてあった~♪
さてそんなわけで。こういう風に改良してと・・・
#include <guigui01.h> void G01Main() { int mode; mode = 1; // ??? 00 0 001 // 書かないので 書かない とりあえず1 int slot = 4; // スロットってなんだべか?あらかじめ用意されたファイルハンドルってことでいい? char *path; path = "test.txt"; // パス。カレントにあるのでファイル名だけでいいはず・・・ jg01_fopen(mode, slot, path); // ファイルをオープンしてみる if( slot == -1 ) { g01_putc('x') ; return; } char *buffer = g01_bss1a1; // 2Mのバッファを確保してと・・・ jg01_fread0_4(2 * 1024 * 1024, buffer); /* 2*1024*1024でちょうど2MB */ // バッファが2MBなので、上限2MBで読み込んでおくれ! g01_putstr0(buffer); // バッファの内容を文字列として表示してみて! g01_putc('O') ; return; }
うおぉぉ!! きたぞぉぉ!!!! よーし! 任せたぞアンジェ!!!
ちなみに、上の、ファイルが開けなかった場合の処理は大間違いでございまする・・・orz・・・
うーん・・・fopenの段階での「ファイル開けなかったよ!」って場合の処理がわからんなぁ。もしかして、意図的に省いている??
jg01_freadには二種類あって、末尾に0が付くか1が付くかで性質が変化するのでこれで判定するのかな???
読めたんだから書いてもみようってなもんで!
まず、当然だが、ファイルをオープンしないといけない。書けるようにファイルを開けるには・・・
int mode; mode = 1; // いっけね・・・Cでは2進数表記ないんだっけ。 // 00000000000000000000000000011001 // ??? 1 1 001 // 新規モード? 書くよ とりあえず1
これでオープンしてあげればいいと!
そんでもって書いてみる。・・・例によってguigui01.hとニラメっこ・・・なるほどなるほど・・・・
mode = 0x19; slot = 5; path = "newfile.txt"; char *hiyohiyo; hiyohiyo = "hiyokogumo! hiyohiyo ho---!"; // いっけね・・・Cでは2進数表記ないんだっけ。 // 00000000000000000000000000011001 // ??? 1 1 001 // 新規モード? 書くよ とりあえず1 jg01_fopen(mode, slot, path); jg01_fwrite0f_5(hiyohiyo);
これでメイクして走らせて・・・・って! 書けた!!!
うおぉぉぉ!!! パコかわゆす 書き込めたぞおぉぉ!!!
一般用コメント一覧