11: 2010-02-07 (日) 11:57:31 lina[6] [7] | 現: 2024-01-08 (月) 12:58:58 lina[6] [8] | ||
---|---|---|---|
Line 12: | Line 12: | ||
#include <guigui01.h> | #include <guigui01.h> | ||
+ | |||
/* これは関数の外で宣言するのが望ましい */ | /* これは関数の外で宣言するのが望ましい */ | ||
unsigned char cmdusage[] = { | unsigned char cmdusage[] = { | ||
Line 19: | Line 19: | ||
0x40 /* 最後のこれも決まり文句なので変更しない */ | 0x40 /* 最後のこれも決まり文句なので変更しない */ | ||
}; | }; | ||
+ | |||
この設定で表示されるUsage。 | この設定で表示されるUsage。 | ||
usage>ex0012.g01 n:# | usage>ex0012.g01 n:# | ||
Line 136: | Line 136: | ||
0x86, /* これは決まり文句なのでとりあえず変更しない */ | 0x86, /* これは決まり文句なのでとりあえず変更しない */ | ||
0x55, /* 引数名省略可能モード */ | 0x55, /* 引数名省略可能モード */ | ||
+ | |||
0x1c, 2, 'o','p','t', 0x0c, 9, 0x01, 'i', 'o', 'n', '-', 'f', 'i', 'l', 'e', | 0x1c, 2, 'o','p','t', 0x0c, 9, 0x01, 'i', 'o', 'n', '-', 'f', 'i', 'l', 'e', | ||
0x0c, 2, 'o','u','t', 0x0c, 9, 0x01, 'p', 'u', 't', '-', 'f', 'i', 'l', 'e', | 0x0c, 2, 'o','u','t', 0x0c, 9, 0x01, 'p', 'u', 't', '-', 'f', 'i', 'l', 'e', | ||
+ | |||
0x40 /* 最後のこれも決まり文句なので変更しない */ | 0x40 /* 最後のこれも決まり文句なので変更しない */ | ||
}; | }; | ||
第一引数をプログラム内に受け取るにはどうしたらえぇんじゃろ・・・見つからないなぁ・・・ | 第一引数をプログラム内に受け取るにはどうしたらえぇんじゃろ・・・見つからないなぁ・・・ | ||
+ | |||
+ | COLOR(blue){関数で、戻り値があるのかないのかは、guiguo01.h内を見ればわかるらしい。strct inlune int なんてやってるのは、int型の戻り値を持つもの!・・・だと思う。多分・・・} | ||
引数をプログラム内に受け取ると思われる関数は以下のとおり。 | 引数をプログラム内に受け取ると思われる関数は以下のとおり。 | ||
- | + | -Void g01_getcmdlin_exit1() | |
- | + | -Void g01_getcmdlin_fopen_s(i) | |
- | -g01_getcmdlin_exit1() __asm__ __volatile__("call _g01_execcmd0\n\t.byte 0x86,0xbf") | + | -Void g01_getcmdlin_fopen_o(i) |
- | -g01_getcmdlin_fopen_s(i) | + | -Void g01_getcmdlin_fopen_m(i, j) |
- | -g01_getcmdlin_fopen_o(i) | + | -Void g01_getcmdlin_fopen_s_0_4(i) |
- | -g01_getcmdlin_fopen_m(i, j) | + | -Void g01_getcmdlin_fopen_s_3_5(i) |
- | -g01_getcmdlin_fopen_s_0_4(i) __asm__ __volatile__("call _g01_execcmd0\n\t.byte 0x86,0x60,0x04"::"a"(i):"%esi","%edi","cc") | + | -int g01_getcmdlin_fopen_m_0_4(int i, int j) |
- | -g01_getcmdlin_fopen_s_3_5(i) __asm__ __volatile__("call _g01_execcmd0\n\t.byte 0x86,0x60,0x35"::"a"(i):"%esi","%edi","cc") | + | -int g01_getcmdlin_fopen_o_0_4(int i) |
- | -g01_getcmdlin_fopen_m_0_4(int i, int j) | + | -int g01_getcmdlin_fopen_o_3_5(int i) |
- | -g01_getcmdlin_fopen_o_0_4(int i) | + | -int g01_getcmdlin_flag_s(int i) |
- | -g01_getcmdlin_fopen_o_3_5(int i) | + | -Void g01_getcmdlin_flag_o(i) |
- | -g01_getcmdlin_flag_s(int i) | + | -Void g01_getcmdlin_int_s(i) COLOR(red){あっれえぇ?これはdevineなのに戻り値があるはず? 法則がわからん・・・} |
- | -g01_getcmdlin_flag_o(i) g01_getcmdlin_flag_s(i) | + | -int g01_getcmdlin_int_o(int i, int d) |
- | -g01_getcmdlin_int_s(i) g01_getcmdlin_flag_s(i) | + | -Void g01_getcmdlin_str_s0(i, n, p) |
- | -g01_getcmdlin_int_o(int i, int d) | + | -Void g01_getcmdlin_str_s0_0(n, p) |
- | -g01_getcmdlin_str_s0(i, n, p) __asm__ __volatile__("call _g01_execcmd0\n\t.byte 0x86, 0x61, 0x36, 0x02"::"c"(i),"a"(n),"d"(p):"%esi","%edi","cc","memory") | + | -int g01_getcmdlin_str_o0(int i, int n, void *p) |
- | -g01_getcmdlin_str_s0_0(n, p) __asm__ __volatile__("call _g01_execcmd0\n\t.byte 0x86, 0x03, 0x60, 0x20"::"a"(n),"d"(p):"%esi","%edi","cc","memory") | + | |
- | -g01_getcmdlin_str_o0(int i, int n, void *p) | + | |
-int g01_getcmdlin_str_m0_1(int j, int n, void *p) | -int g01_getcmdlin_str_m0_1(int j, int n, void *p) | ||
- | -g01_getcmdlin_argc(int i) | + | -int g01_getcmdlin_argc(int i) |
- | -g01_getcmdlin_put0_s(i) __asm__ __volatile__("call _g01_execcmd0\n\t.byte 0x86,0xbc,0x60"::"a"(i):"%esi","%edi","cc") | + | -Void g01_getcmdlin_put0_s(i) |
- | -g01_getcmdlin_put1_s(i) __asm__ __volatile__("call _g01_execcmd0\n\t.byte 0x86,0xbd,0x60"::"a"(i):"%esi","%edi","cc") | + | -Void g01_getcmdlin_put1_s(i) |
- | -g01_getcmdlin_put0_m_exit1(i, j) __asm__ __volatile__("call _g01_execcmd0\n\t.byte 0x38,0x6b,0xc6,0x01,0x43,0x10"::"a"(i),"c"(j)) | + | -Void g01_getcmdlin_put0_m_exit1(i, j) |
- | -g01_getcmdlin_put1_m_exit1(i, j) __asm__ __volatile__("call _g01_execcmd0\n\t.byte 0x38,0x6b,0xd6,0x01,0x43,0x10"::"a"(i),"c"(j)) | + | -Void g01_getcmdlin_put1_m_exit1(i, j) |
- | -g01_cmdlin3s(int l) {} | + | -int g01_cmdlin3s(int l) {} |
- | -g01_cmdlin3m(int l, int i) {} | + | -int g01_cmdlin3m(int l, int i) {} |
- | -g01_cmdlin4s(int l) {} | + | -int g01_cmdlin4s(int l) {} |
- | -g01_cmdlin4m(int l, int i) {} | + | -int g01_cmdlin4m(int l, int i) {} |
- | -g01_cmdlin5s(int l) {} | + | -int g01_cmdlin5s(int l) {} |
- | -g01_cmdlin5m(int l, int i) {} | + | -int g01_cmdlin5m(int l, int i) {} |
- | -g01_cmdlin6s1(int l, int n, void *p) {} | + | -int g01_cmdlin6s1(int l, int n, void *p) {} |
- | -g01_cmdlin6m1(int l, int i, int n, void *p) {} | + | -int g01_cmdlin6m1(int l, int i, int n, void *p) {} |
- | -jg01_getcmdline0 jg01_getcmdlin1 | + | -Void jg01_getcmdline0 |
- | -jg01_getcmdline1 jg01_getcmdlin0 | + | -Void jg01_getcmdline1 |
- | -jg01_getcmdlin0(int n, void *p) | + | -int jg01_getcmdlin0(int n, void *p) |
- | -jg01_getcmdlin1(n, p) __asm__ __volatile__("call _g01_execcmd0\n\t.byte 0x7b,0x99,0x80,0x10,0x36,0x02"::"a"(n),"d"(p):"%esi","%edi","cc") | + | -Void jg01_getcmdlin1(n, p) |
**引数受け取り関数の整理(予測ね。実験しながら・・・) [#y256f834] | **引数受け取り関数の整理(予測ね。実験しながら・・・) [#y256f834] | ||
Line 192: | Line 192: | ||
0x86, /* これは決まり文句なのでとりあえず変更しない */ | 0x86, /* これは決まり文句なのでとりあえず変更しない */ | ||
0x55, /* 引数名省略可能モード */ | 0x55, /* 引数名省略可能モード */ | ||
+ | |||
0x1c, 2, 'o','p','t', 0x0c, 9, 0x01, 'i', 'o', 'n', '-', 'f', 'i', 'l', 'e', ←引数番号0 | 0x1c, 2, 'o','p','t', 0x0c, 9, 0x01, 'i', 'o', 'n', '-', 'f', 'i', 'l', 'e', ←引数番号0 | ||
0x0c, 2, 'o','u','t', 0x0c, 9, 0x01, 'p', 'u', 't', '-', 'f', 'i', 'l', 'e', ←引数番号1 | 0x0c, 2, 'o','u','t', 0x0c, 9, 0x01, 'p', 'u', 't', '-', 'f', 'i', 'l', 'e', ←引数番号1 | ||
+ | |||
0x40 /* 最後のこれも決まり文句なので変更しない */ | 0x40 /* 最後のこれも決まり文句なので変更しない */ | ||
}; | }; | ||
+ | |||
↓Usage表示(コマンドラインの設定)はこうなる。 | ↓Usage表示(コマンドラインの設定)はこうなる。 | ||
usage>test.g01 [opt:option-file] out:output-file | usage>test.g01 [opt:option-file] out:output-file | ||
Line 207: | Line 207: | ||
>hijk.exe test.g01 opt:hogehoge.txt out:ugougo.txt | >hijk.exe test.g01 opt:hogehoge.txt out:ugougo.txt | ||
i=1 ←0番目の引数が存在するぞ! | i=1 ←0番目の引数が存在するぞ! | ||
+ | |||
>hijk.exe test.g01 out:ugougo.txt | >hijk.exe test.g01 out:ugougo.txt | ||
i=0 ←0番目の引数は指定されてない(空)だぞ! | i=0 ←0番目の引数は指定されてない(空)だぞ! | ||
Line 288: | Line 288: | ||
int n; n = 16; ←取得する文字列の最大長(この場合は16バイト分) | int n; n = 16; ←取得する文字列の最大長(この場合は16バイト分) | ||
char s[16]; ←取得した引数(文字列)を格納する配列orポインタ | char s[16]; ←取得した引数(文字列)を格納する配列orポインタ | ||
+ | |||
g01_getcmdlin_str_s0(i, n, s) ←戻り値なし。引数がs[]に格納され、末尾に0が付く | g01_getcmdlin_str_s0(i, n, s) ←戻り値なし。引数がs[]に格納され、末尾に0が付く | ||
Line 317: | Line 317: | ||
g = g01_getcmdlin_int_o(0,100); // 0番目の引数を取得し、もしなかったら規定値として | g = g01_getcmdlin_int_o(0,100); // 0番目の引数を取得し、もしなかったら規定値として | ||
100を返す | 100を返す | ||
+ | |||
この流れで行くとstrタイプも・・・・ | この流れで行くとstrタイプも・・・・ | ||
*g = g01_getcmdlin_str_s0(0); // 0番目の文字型引数を取得し、gに渡す | *g = g01_getcmdlin_str_s0(0); // 0番目の文字型引数を取得し、gに渡す | ||
Line 330: | Line 330: | ||
#include <guigui01.h> | #include <guigui01.h> | ||
#include <stdio.h> | #include <stdio.h> | ||
+ | |||
unsigned char cmdusage[] = { | unsigned char cmdusage[] = { | ||
0x86, /* これは決まり文句なのでとりあえず変更しない */ | 0x86, /* これは決まり文句なのでとりあえず変更しない */ | ||
0x55, /* 通常モード(引数名省略不可) */ | 0x55, /* 通常モード(引数名省略不可) */ | ||
+ | |||
0x0c, 2, 'o','p','t', 0x3c, 9, 0x01, 'i', 'o', 'n', '-', 'f', 'i', 'l', 'e', | 0x0c, 2, 'o','p','t', 0x3c, 9, 0x01, 'i', 'o', 'n', '-', 'f', 'i', 'l', 'e', | ||
+ | |||
0x40 /* 最後のこれも決まり文句なので変更しない */ | 0x40 /* 最後のこれも決まり文句なので変更しない */ | ||
}; | }; | ||
+ | |||
void G01Main() | void G01Main() | ||
{ | { | ||
g01_setcmdlin(cmdusage); //コマンドライン定義 | g01_setcmdlin(cmdusage); //コマンドライン定義 | ||
+ | |||
char *buffer = g01_bss1a1; //お便利バッファ2MBを宣言 | char *buffer = g01_bss1a1; //お便利バッファ2MBを宣言 | ||
g01_getcmdlin_str_s0(0,100,buffer); //引数受け取り | g01_getcmdlin_str_s0(0,100,buffer); //引数受け取り | ||
+ | |||
g01_putstr0(buffer); | g01_putstr0(buffer); | ||
return; | return; | ||
Line 404: | Line 404: | ||
#include <guigui01.h> | #include <guigui01.h> | ||
#include <stdio.h> | #include <stdio.h> | ||
+ | |||
unsigned char cmdusage[] = { | unsigned char cmdusage[] = { | ||
0x86, /* これは決まり文句なのでとりあえず変更しない */ | 0x86, /* これは決まり文句なのでとりあえず変更しない */ | ||
0x55, /* 通常モード(引数名省略不可) */ | 0x55, /* 通常モード(引数名省略不可) */ | ||
+ | |||
0x0c, 2, 'o','p','t', 0x0c, 9, 0x01, 'i', 'o', 'n', '-', 'f', 'i', 'l', 'e', | 0x0c, 2, 'o','p','t', 0x0c, 9, 0x01, 'i', 'o', 'n', '-', 'f', 'i', 'l', 'e', | ||
+ | |||
0x40 /* 最後のこれも決まり文句なので変更しない */ | 0x40 /* 最後のこれも決まり文句なので変更しない */ | ||
}; | }; | ||
+ | |||
void G01Main() | void G01Main() | ||
{ | { | ||
g01_setcmdlin(cmdusage); //コマンドライン定義 | g01_setcmdlin(cmdusage); //コマンドライン定義 | ||
+ | |||
char *buffer = g01_bss1a1; //お便利バッファ2MBを宣言 | char *buffer = g01_bss1a1; //お便利バッファ2MBを宣言 | ||
g01_getcmdlin_fopen_s_0_4(0); //引数受け取り&ファイルオープン | g01_getcmdlin_fopen_s_0_4(0); //引数受け取り&ファイルオープン | ||
+ | |||
jg01_fread0_4(2 * 1024 * 1024, buffer); /* 最大2MB, 終端に0がつく */ | jg01_fread0_4(2 * 1024 * 1024, buffer); /* 最大2MB, 終端に0がつく */ | ||
g01_putstr0(buffer); | g01_putstr0(buffer); | ||
Line 437: | Line 437: | ||
-跳ばない。でもUsageを表示せずに終了(・・・これはええと。正しい動作なのかな???たぶん) | -跳ばない。でもUsageを表示せずに終了(・・・これはええと。正しい動作なのかな???たぶん) | ||
-引数(ファイル名)を指定すると、最初の引数省略不可の場合と同じ動作をしてくれる(つまり、正常動作?) | -引数(ファイル名)を指定すると、最初の引数省略不可の場合と同じ動作をしてくれる(つまり、正常動作?) | ||
+ | |||
+ | **m系列・・・? [#d3122612] | ||
+ | |||
+ | if (g01_getcmdlin_fopen_m_0_4(0, j) == 0) | ||
+ | |||
+ | cpyのソース内でこんなことしてる・・・ぞ? m系列はあえて後回しにしてたんだけど、これは戻り値をもっている?? | ||
**g01_getcmdlin_argc [#t240815c] | **g01_getcmdlin_argc [#t240815c] |
(This host) = http://osask.net