5: 2010-02-04 (木) 18:23:22 lina |
6: 2010-02-05 (金) 12:29:21 lina |
| | | |
| 第一引数をプログラム内に受け取るにはどうしたらえぇんじゃろ・・・見つからないなぁ・・・ | | 第一引数をプログラム内に受け取るにはどうしたらえぇんじゃろ・・・見つからないなぁ・・・ |
| + | |
| + | 引数をプログラム内に受け取ると思われる関数は以下のとおり。 |
| + | |
| + | |
| + | -g01_getcmdlin_exit1() __asm__ __volatile__("call _g01_execcmd0\n\t.byte 0x86,0xbf") |
| + | -g01_getcmdlin_fopen_s(i) |
| + | -g01_getcmdlin_fopen_o(i) |
| + | -g01_getcmdlin_fopen_m(i, j) |
| + | -g01_getcmdlin_fopen_s_0_4(i) __asm__ __volatile__("call _g01_execcmd0\n\t.byte 0x86,0x60,0x04"::"a"(i):"%esi","%edi","cc") |
| + | -g01_getcmdlin_fopen_s_3_5(i) __asm__ __volatile__("call _g01_execcmd0\n\t.byte 0x86,0x60,0x35"::"a"(i):"%esi","%edi","cc") |
| + | -g01_getcmdlin_fopen_m_0_4(int i, int j) |
| + | -g01_getcmdlin_fopen_o_0_4(int i) |
| + | -g01_getcmdlin_fopen_o_3_5(int i) |
| + | -g01_getcmdlin_flag_s(int i) |
| + | -g01_getcmdlin_flag_o(i) g01_getcmdlin_flag_s(i) |
| + | -g01_getcmdlin_int_s(i) g01_getcmdlin_flag_s(i) |
| + | -g01_getcmdlin_int_o(int i, int d) |
| + | -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") |
| + | -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) |
| + | -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") |
| + | -g01_getcmdlin_put1_s(i) __asm__ __volatile__("call _g01_execcmd0\n\t.byte 0x86,0xbd,0x60"::"a"(i):"%esi","%edi","cc") |
| + | -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)) |
| + | -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)) |
| + | -g01_cmdlin3s(int l) {} |
| + | -g01_cmdlin3m(int l, int i) {} |
| + | -g01_cmdlin4s(int l) {} |
| + | -g01_cmdlin4m(int l, int i) {} |
| + | -g01_cmdlin5s(int l) {} |
| + | -g01_cmdlin5m(int l, int i) {} |
| + | -g01_cmdlin6s1(int l, int n, void *p) {} |
| + | -g01_cmdlin6m1(int l, int i, int n, void *p) {} |
| + | -jg01_getcmdline0 jg01_getcmdlin1 |
| + | -jg01_getcmdline1 jg01_getcmdlin0 |
| + | -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") |
| + | |
| + | **引数受け取り関数の整理(予測ね。実験しながら・・・) [#y256f834] |
| + | 引数には、定義した順に0から番号が付いているらしい。 |
| + | |
| + | -int g01_getcmdlin_argc(int 引数番号) |
| + | --指定した番号の引数があるかないか。あれが1、なければ0を返す |
| + | たとえばこういう設定をしたとする。 |
| + | unsigned char cmdusage[] = { |
| + | 0x86, /* これは決まり文句なのでとりあえず変更しない */ |
| + | 0x55, /* 引数名省略可能モード */ |
| + | |
| + | 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 |
| + | |
| + | 0x40 /* 最後のこれも決まり文句なので変更しない */ |
| + | }; |
| + | |
| + | ↓Usage表示(コマンドラインの設定)はこうなる。 |
| + | usage>test.g01 [opt:option-file] out:output-file |
| + | |
| + | このプログラム内で |
| + | int i; i = g01_getcmdlin_argc(0); |
| + | こんなことしたとする。引数を付けて実行してみると・・・ |
| + | >hijk.exe test.g01 opt:hogehoge.txt out:ugougo.txt |
| + | i=1 ←0番目の引数が存在するぞ! |
| + | |
| + | >hijk.exe test.g01 out:ugougo.txt |
| + | i=0 ←0番目の引数は指定されてない(空)だぞ! |
| + | |
| + | ・・・・・こういうことでいいのかな・・・・・ |
| + | |
| + | たとえばこの例だと、0番引数optは、「もし指定があればそのファイル名を使え。でもなければ、ディフォルトのosalink1.optを使用してくれ」という動作をさせたい。とういう場合は・・・ |
| + | int i; |
| + | i = g01_getcmdlin_argc(0); |
| + | if( i == 0 ) { |
| + | g01_fopen(1,4,"osalink1.opt"); |
| + | }else { |
| + | g01_fopen(1,4,getcmdlinexxxxxxx); |
| + | } |
| + | |
| + | こういう処理をしてあげればいい・・・のかな・・・(これ合ってるかな) |
| + | |
| + | |
| + | |
| + | ***ファイル名取得&オープン系 [#e8caaf50] |
| + | まいったなこんなにあるよ・・・どれがどれだがよくわからん・・・ |
| + | |
| + | -g01_getcmdlin_fopen_s(i) |
| + | -g01_getcmdlin_fopen_o(i) |
| + | -g01_getcmdlin_fopen_m(i, j) |
| + | -g01_getcmdlin_fopen_s_0_4(i) |
| + | -g01_getcmdlin_fopen_s_3_5(i) |
| + | -g01_getcmdlin_fopen_m_0_4(int i, int j) |
| + | -g01_getcmdlin_fopen_o_0_4(int i) |
| + | -g01_getcmdlin_fopen_o_3_5(int i) |
| + | |
| + | 各関数のfopenの後ろの文字の意味。 |
| + | -o |
| + | --オプショナル型ということらしい。省略可能なものを扱うものらしい。 |
| + | -s |
| + | --シングル型。通常型らしい。つまり省略可能ではないものの場合に使う・・・のかな? |
| + | |
| + | *getcmdlin分類 [#e846e38b] |
| + | ダメだ・・・ちょっと分類を組み立てなおし! |
| + | |
| + | -g01_getcmdlinは引数をプログラム内に受け取る関数郡。 |
| + | |
| + | **g01_getcmdlin_int系 [#b5c59937] |
| + | 数字タイプの引数を受け取るもの。(intなので多分int型変数の制限を受けると思う。0~4294967295 or -2147483648~2147483647 とかの。) |
| + | |
| + | ***g01_getcmdlin_int_s系 [#v6ad5653] |
| + | 省略不可(普通?シングル型というらしい)の引数を取得する。省略不可なのだから、指定がなかったりすればエラーとなる(・・・はず・・・) |
| + | |
| + | int g; ←引数を受け取る変数 |
| + | int i; i = 0; ←引数番号を指定する。0なので、一番最初に定義された引数 |
| + | g = g01_getcmdlin_int_s(i); ←問題なければgに引数の内容が入る |
| + | |
| + | |
| + | ***g01_getcmdlin_int_o系 [#l0f77b1a] |
| + | 省略可能(オプショナル型というらしい)の引数を取得する。省略可能なのだから、指定がなかったりしてもエラーにならない |
| + | |
| + | **g01_getcmdlin_str系 [#t4f1bd5b] |
| + | 文字列型のデータを受け取る。 |
| + | |
| + | |
| + | |
| + | **g01_getcmdlin_fopen系 [#t3509916] |
| + | ファイルパスタイプのデータを受け取る。(ファイルパスを受け取って開かないわけはない!ということで、fopenと一体型になっているのだろう。きっと) |
| | | |
| *COLOR(red){オイラ的な備考} [#o91a8f8f] | | *COLOR(red){オイラ的な備考} [#o91a8f8f] |
| | | |
| このUsage表示(コマンドライン定義)では、省略形を使う場合はかならずソースにベタ書きをのこしておくといいと思う。 | | このUsage表示(コマンドライン定義)では、省略形を使う場合はかならずソースにベタ書きをのこしておくといいと思う。 |