ページへ戻る
印刷
hideyosi/hijk/ファイル入出力
をテンプレートにして作成 ::
OSASK計画
osaskwiki
:hideyosi/hijk/ファイル入出力 をテンプレートにして作成
開始行:
*.g01のファイル入出力
解説読んだけど、どーもわからないのでもう面倒なので体当た...
cpycのソースを参考に。
*cpycの検証
これがソース。
#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!
[[ここ>http://osask.net/w/201.html#z2492927]]によると、こ...
#include <guigui01.h>
void G01Main()
{
int mode; mode = 1;
// いっけね・・・Cでは2進数表記ないんだっけ。
// 0000000000000000000000000...
// ??? 00 0 ...
// 書かないので 書かない ...
int slot = 4;
// スロットってなんだべか?あらかじめ用意された...
int pathlen = 8;
// パスの長さってことでいいのかな。test.txtだか...
static unsigned char path[] = { 't','e','s','t','....
// パス。カレントにあるのでファイル名だけでいい...
jg01_fopen(mode, slot, pathlen, path);
// ファイルをオープンしてみる
if( slot == -1 ) {
g01_putc('x') ;
return;
}
g01_putc('O') ;
return;
// スロットが-1なら失敗。x(バツ)を表示して終了。そ...
}
なーーーんでだよクッソぉ! jg01_fopenが使えないとか言わ...
ヘンダナァ・・・guigui01.h見ると、jg01_fopenはちゃんとあ...
うーん・・・pathlenを引っこ抜いたらとりあえずコンパイルは...
pathlenが廃止された? ってことは、パス文字列に終端が必要...
がーーん! ウッチャンがアドバイスくれた! そうだよ! ...
よーし! とりあえず O が表示されたぞおぉぉ! ウッチャ...
**読めるかな??
うーん。jg01_freadなんだが、これも引数が変更されているっ...
jg01_fread1(int s, int n, void *b) こういう構文だが、先...
げげげ! ↑のcpycのソースでは、なんか違う関数使ってる上に...
**わーかってきたぞぉぉwww
[[ここ>http://osask.net/w/346.html]]に詳しく書いてあった~♪
-まずは、g01_bss1a1。
--これはいわばmallocの簡易版みたいな位置づけらしい。とに...
--なので、別にこれを使わずにmallocを使ってもかまわないは...
-次。jg01_fread0_4(2 * 1024 * 1024, バッファ);
--これも同じくお便利命令と解釈できる。jg01_fread0 でピン...
さてそんなわけで。こういう風に改良してと・・・
#include <guigui01.h>
void G01Main()
{
int mode; mode = 1;
// ??? 00 0 ...
// 書かないので 書かない ...
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*102...
// バッファが2MBなので、上限2MBで読み込んでお...
g01_putstr0(buffer);
// バッファの内容を文字列として表示してみて!
g01_putc('O') ;
return;
}
うおぉぉ!! きたぞぉぉ!!!! よーし! 任せたぞアン...
**エラー処理
ちなみに、上の、ファイルが開けなかった場合の処理は大間違...
うーん・・・fopenの段階での「ファイル開けなかったよ!」っ...
jg01_freadには二種類あって、末尾に0が付くか1が付くかで...
-jg01_fread0系
--読み込んだものを文字列的にあつかう。''戻り値がないので...
--読み込んだデータのオケツに0(文字列終端判定コード?)を...
--たとえば1000のバッファを用意。読み込んだら、「neko」だ...
--バッファ全体は相変わらず1000あるが、内部では、 'n','e'...
--なので、普通にg01_putstr0すれば「neko」だけ表示し、5バ...
-jg01_fread1系
--読み込んだものを文字として扱わない。いうなれば、''その...
--このため読んだデータなのか、元々バッファに入ってたデー...
--戻り値に読み込んだデータのバイト数が入る。
--「読んだデータだけを取り出したい」って場合は、自分でバ...
*書いてみよう!
読めたんだから書いてもみようってなもんで!
まず、当然だが、ファイルをオープンしないといけない。書け...
int mode; mode = 1;
// いっけね・・・Cでは2進数表記ないんだっけ。
// 0000000000000000000000000...
// ??? 1 1 ...
// 新規モード? 書くよ と...
これでオープンしてあげればいいと!
そんでもって書いてみる。・・・例によってguigui01.hとニラ...
mode = 0x19;
slot = 5;
path = "newfile.txt";
char *hiyohiyo; hiyohiyo = "hiyokogumo! hiyohiyo ho-...
// いっけね・・・Cでは2進数表記ないんだっけ。
// 0000000000000000000000000...
// ??? 1 1 ...
// 新規モード? 書くよ と...
jg01_fopen(mode, slot, path);
jg01_fwrite0f_5(hiyohiyo);
これでメイクして走らせて・・・・って! 書けた!!!
うおぉぉぉ!!! %%パコかわゆす%% 書き込めたぞおぉぉ!...
終了行:
*.g01のファイル入出力
解説読んだけど、どーもわからないのでもう面倒なので体当た...
cpycのソースを参考に。
*cpycの検証
これがソース。
#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!
[[ここ>http://osask.net/w/201.html#z2492927]]によると、こ...
#include <guigui01.h>
void G01Main()
{
int mode; mode = 1;
// いっけね・・・Cでは2進数表記ないんだっけ。
// 0000000000000000000000000...
// ??? 00 0 ...
// 書かないので 書かない ...
int slot = 4;
// スロットってなんだべか?あらかじめ用意された...
int pathlen = 8;
// パスの長さってことでいいのかな。test.txtだか...
static unsigned char path[] = { 't','e','s','t','....
// パス。カレントにあるのでファイル名だけでいい...
jg01_fopen(mode, slot, pathlen, path);
// ファイルをオープンしてみる
if( slot == -1 ) {
g01_putc('x') ;
return;
}
g01_putc('O') ;
return;
// スロットが-1なら失敗。x(バツ)を表示して終了。そ...
}
なーーーんでだよクッソぉ! jg01_fopenが使えないとか言わ...
ヘンダナァ・・・guigui01.h見ると、jg01_fopenはちゃんとあ...
うーん・・・pathlenを引っこ抜いたらとりあえずコンパイルは...
pathlenが廃止された? ってことは、パス文字列に終端が必要...
がーーん! ウッチャンがアドバイスくれた! そうだよ! ...
よーし! とりあえず O が表示されたぞおぉぉ! ウッチャ...
**読めるかな??
うーん。jg01_freadなんだが、これも引数が変更されているっ...
jg01_fread1(int s, int n, void *b) こういう構文だが、先...
げげげ! ↑のcpycのソースでは、なんか違う関数使ってる上に...
**わーかってきたぞぉぉwww
[[ここ>http://osask.net/w/346.html]]に詳しく書いてあった~♪
-まずは、g01_bss1a1。
--これはいわばmallocの簡易版みたいな位置づけらしい。とに...
--なので、別にこれを使わずにmallocを使ってもかまわないは...
-次。jg01_fread0_4(2 * 1024 * 1024, バッファ);
--これも同じくお便利命令と解釈できる。jg01_fread0 でピン...
さてそんなわけで。こういう風に改良してと・・・
#include <guigui01.h>
void G01Main()
{
int mode; mode = 1;
// ??? 00 0 ...
// 書かないので 書かない ...
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*102...
// バッファが2MBなので、上限2MBで読み込んでお...
g01_putstr0(buffer);
// バッファの内容を文字列として表示してみて!
g01_putc('O') ;
return;
}
うおぉぉ!! きたぞぉぉ!!!! よーし! 任せたぞアン...
**エラー処理
ちなみに、上の、ファイルが開けなかった場合の処理は大間違...
うーん・・・fopenの段階での「ファイル開けなかったよ!」っ...
jg01_freadには二種類あって、末尾に0が付くか1が付くかで...
-jg01_fread0系
--読み込んだものを文字列的にあつかう。''戻り値がないので...
--読み込んだデータのオケツに0(文字列終端判定コード?)を...
--たとえば1000のバッファを用意。読み込んだら、「neko」だ...
--バッファ全体は相変わらず1000あるが、内部では、 'n','e'...
--なので、普通にg01_putstr0すれば「neko」だけ表示し、5バ...
-jg01_fread1系
--読み込んだものを文字として扱わない。いうなれば、''その...
--このため読んだデータなのか、元々バッファに入ってたデー...
--戻り値に読み込んだデータのバイト数が入る。
--「読んだデータだけを取り出したい」って場合は、自分でバ...
*書いてみよう!
読めたんだから書いてもみようってなもんで!
まず、当然だが、ファイルをオープンしないといけない。書け...
int mode; mode = 1;
// いっけね・・・Cでは2進数表記ないんだっけ。
// 0000000000000000000000000...
// ??? 1 1 ...
// 新規モード? 書くよ と...
これでオープンしてあげればいいと!
そんでもって書いてみる。・・・例によってguigui01.hとニラ...
mode = 0x19;
slot = 5;
path = "newfile.txt";
char *hiyohiyo; hiyohiyo = "hiyokogumo! hiyohiyo ho-...
// いっけね・・・Cでは2進数表記ないんだっけ。
// 0000000000000000000000000...
// ??? 1 1 ...
// 新規モード? 書くよ と...
jg01_fopen(mode, slot, path);
jg01_fwrite0f_5(hiyohiyo);
これでメイクして走らせて・・・・って! 書けた!!!
うおぉぉぉ!!! %%パコかわゆす%% 書き込めたぞおぉぉ!...
ページ名: