ページへ戻る
印刷
hideyosi/hijk/引数やUsage
をテンプレートにして作成 ::
OSASK計画
osaskwiki
:hideyosi/hijk/引数やUsage をテンプレートにして作成
開始行:
guigui01の仕様の整理とかそういうの。
*オレ様リンク集
-http://osask.net/w/264.html
-http://osask.net/w/174.html
-http://osask.net/w/346.html
*複雑・・・
・・・解ってきたぞ。つまり、これは単なるUsage表示だけじゃ...
#include <guigui01.h>
/* これは関数の外で宣言するのが望ましい */
unsigned char cmdusage[] = {
0x86, 0x55, /* この2つは決まり文句なのでとりあえず変...
0x0c, 0, 'n', 0x1c, 1, '#', /* この説明は本文で */
0x40 /* 最後のこれも決まり文句なので変更しない */
};
この設定で表示されるUsage。
usage>ex0012.g01 n:#
どうもUsage表示は関数化されているようだ。どうすれば自由に...
*解析
|0x86, 0x55|これは頭に付ける決まり文句らしい。(でも0x50...
|0x0c, 0, 'n', 0x1c, 1, '#',|これらはコマンドになるらしい|
|0x40|お尻につける決まり文句|
どうもこれでワンセットになるらしい。
|0x0c | (引数名の文字数-1) | (引数名) | 0x1c | (説明部分...
たとえば上の例だと・・・
|0x0c|コマンド| |
|(引数名の文字数-1)|0|引数名は''n''。一個。 1 - 1 = 0|
|(引数名)| 'n' | 一個しか置けない。|
|0x1c|コマンド| |
|(説明部分の文字数)|1| 説明は一文字だけなので1?|
|(説明)|'#'| この#一文字が説明ってことかな??|
*実験的に逆に考えてみる・・・
この部分は''Usageを表示する''んじゃなくて、そもそも''コマ...
で!~
この定義に沿って、自動的にUsageメッセージを作って表示して...
**引数先頭のコマンド
|0x86, 0x55|通常モード|
|0x86, 0x5c, 0|引数名省略可能モード|
http://osask.net/w/264.html
省略が可能。
上記 0x86, 0x5c, 0 は、 0x86, 0x50 と縮めて書くことが...
COLOR(blue){おそらく、0x5x の一桁目が合成できるってこと...
**省略できない引数
省略したり順番が違うとエラーになってほしい引数
|''0x0c''|(引数名の文字数-1)|(引数名)|''0x1c''|(説明部分...
|これは省略不可の引数だというサイン| | |この引数は数値で...
|>|合成が可能。コマンドの一桁目を引数名の文字列-に置き換...
**省略可能な引数
省略することもある引数
|''0x1c''|(引数名の文字数-1)|(引数名)|0x1c|(説明部分の文...
|これは省略可能な引数だというサイン| | |この引数は数値で...
-Usage表示では自動的に [ ] で括られて表示される
**引数が文字列の場合
0x0c, 0, 's', 0x3c, 3, 's', 't', 'r', /* 0x3cは文字列型...
|0x0c|(引数名の文字数-1)|(引数名)|''0x3c''|(説明部分の文...
|これは省略不可な引数だというサイン| | |この引数は文字列...
**引数がファイルパスである場合
0x0c, 1, 'i','n', 0x3c, 10, 'i', 'n', 'p','u','t','-','f...
|0x0c|(引数名の文字数-1)|(引数名)|''0x0c''|(説明部分の文...
|これは省略不可な引数だというサイン| | |この引数はファイ...
***超省略形
-[in:]input-file の形でかまわないなら、 単に 0x88と書...
-↑と同じで、さらに省略可能形式なら、0x89と書けばいい。
*説明時に引数名の文字列を使う
引数名はよく略称を使われる。たとえば、文字列(string)の引...
str:
なんてのを使う。Usageでは、str:引数の後の説明は当然、
str:string
になる。(つまり、s と t と r がかぶっている。)
普通にUsage表示(コマンドライン定義)をしたい場合は、
0x0c, 2, 's', 't', 'r', 0x3c, 6, 's', 't', 'r', 'i', 'n'...
となるが、文字が勿体ない場合、0x01 を置くと前で定義した引...
COLOR(red){ただし注意。上記のようにベタに書くと「string]...
0x0c, 2, 's', 't', 'r', 0x3c, 4, 0x01, 'i', 'n', 'g'
**改行
0x87,
**スイッチ
引数ではなくスイッチ?な場合。
0x1c, 3, 'd', 'o', 'w', 'n', 0x20,
|0x1c| 3| 'd', 'o', 'w', 'n'| 0x20|
|省略可能なオプションであるサイン|downなので、4-1で3| |ス...
*引数の受け取り
getcmdline系で受け取るらしいんだけど、どうもわからん。例...
unsigned char cmdusage[] = {
0x86, /* これは決まり文句なのでとりあえず変更しない */
0x55, /* 引数名省略可能モード */
0x1c, 2, 'o','p','t', 0x0c, 9, 0x01, 'i', 'o', 'n', '-...
0x0c, 2, 'o','u','t', 0x0c, 9, 0x01, 'p', 'u', 't', '-...
0x40 /* 最後のこれも決まり文句なので変更しない */
};
第一引数をプログラム内に受け取るにはどうしたらえぇんじゃ...
COLOR(blue){関数で、戻り値があるのかないのかは、guiguo01....
引数をプログラム内に受け取ると思われる関数は以下のとおり。
-Void g01_getcmdlin_exit1()
-Void g01_getcmdlin_fopen_s(i)
-Void g01_getcmdlin_fopen_o(i)
-Void g01_getcmdlin_fopen_m(i, j)
-Void g01_getcmdlin_fopen_s_0_4(i)
-Void g01_getcmdlin_fopen_s_3_5(i)
-int g01_getcmdlin_fopen_m_0_4(int i, int j)
-int g01_getcmdlin_fopen_o_0_4(int i)
-int g01_getcmdlin_fopen_o_3_5(int i)
-int g01_getcmdlin_flag_s(int i)
-Void g01_getcmdlin_flag_o(i)
-Void g01_getcmdlin_int_s(i) COLOR(red){あっれえぇ?これ...
-int g01_getcmdlin_int_o(int i, int d)
-Void g01_getcmdlin_str_s0(i, n, p)
-Void g01_getcmdlin_str_s0_0(n, p)
-int 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_argc(int i)
-Void g01_getcmdlin_put0_s(i)
-Void g01_getcmdlin_put1_s(i)
-Void g01_getcmdlin_put0_m_exit1(i, j)
-Void g01_getcmdlin_put1_m_exit1(i, j)
-int g01_cmdlin3s(int l) {}
-int g01_cmdlin3m(int l, int i) {}
-int g01_cmdlin4s(int l) {}
-int g01_cmdlin4m(int l, int i) {}
-int g01_cmdlin5s(int l) {}
-int g01_cmdlin5m(int l, int i) {}
-int g01_cmdlin6s1(int l, int n, void *p) {}
-int g01_cmdlin6m1(int l, int i, int n, void *p) {}
-Void jg01_getcmdline0
-Void jg01_getcmdline1
-int jg01_getcmdlin0(int n, void *p)
-Void jg01_getcmdlin1(n, p)
**引数受け取り関数の整理(予測ね。実験しながら・・・)
引数には、定義した順に0から番号が付いているらしい。
-int g01_getcmdlin_argc(int 引数番号)
--指定した番号の引数があるかないか。あれが1、なければ0を...
たとえばこういう設定をしたとする。
unsigned char cmdusage[] = {
0x86, /* これは決まり文句なのでとりあえず変更しない */
0x55, /* 引数名省略可能モード */
0x1c, 2, 'o','p','t', 0x0c, 9, 0x01, 'i', 'o', 'n', '-...
0x0c, 2, 'o','u','t', 0x0c, 9, 0x01, 'p', 'u', 't', '-...
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 ...
>hijk.exe test.g01 out:ugougo.txt
i=0 ...
・・・・・こういうことでいいのかな・・・・・
たとえばこの例だと、0番引数optは、「もし指定があればその...
int i;
i = g01_getcmdlin_argc(0);
if( i == 0 ) {
g01_fopen(1,4,"osalink1.opt");
}else {
g01_fopen(1,4,getcmdlinexxxxxxx);
}
こういう処理をしてあげればいい・・・のかな・・・(これ合...
***ファイル名取得&オープン系
まいったなこんなにあるよ・・・どれがどれだがよくわからん...
-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分類
ダメだ・・・ちょっと分類を組み立てなおし!
-g01_getcmdlinは引数をプログラム内に受け取る関数郡。
**g01_getcmdlin_int系
数字タイプの引数を受け取るもの。(intなので多分int型変数...
***g01_getcmdlin_int_s系
省略不可(普通?シングル型というらしい)の引数を取得する...
int g; ←引数を受け取る変数
int i; i = 0; ←引数番号を指定する。0...
g = g01_getcmdlin_int_s(i); ←問題なければgに引数の...
-g01_getcmdlin_int_s(i)
***g01_getcmdlin_int_o系
省略可能(オプショナル型というらしい)の引数を取得する。...
省略された場合の規定値が必要になる。第二引数の int d が...
int g; ←引数を受け取る変数
int i; i = 0; ←引数番号を指定する...
g = g01_getcmdlin_int_o(i,100); ←問題なければgに引...
もしこの引数が指...
(規定値)とみなし...
-g01_getcmdlin_int_o(int i, int d)
**g01_getcmdlin_str系
文字列型のデータを受け取る。
***g01_getcmdlin_str_s0系
シングル型。省略不可の引数の場合に使う。(s0となっている...
COLOR(red){戻り値を持たないことに注意!}
int i; i = 0; ←取得する引数...
int n; n = 16; ←取得する文字...
char s[16]; ←取得した引数...
g01_getcmdlin_str_s0(i, n, s) ←戻り値なし。...
-g01_getcmdlin_str_s0(i, n, p)
-g01_getcmdlin_str_s0_0(n, p)
COLOR(red){ダメダ・・・これも規定値の扱いがわからん・・・...
-g01_getcmdlin_str_o0(int i, int n, void *p)
-g01_getcmdlin_str_m0_1(int j, int n, void *p)
COLOR(blue){うっちゃんの予測を検証すべく、実験をしてみた}
COLOR(red){ちなみにオイラの予想してたこと。intタイプと同...
例:
intタイプは戻り値として取得したコマンドラインパラメータ...
g = g01_getcmdlin_int_s(0); // 0番目の引数を取...
省略可能の場合・・・
g = g01_getcmdlin_int_o(0,100); // 0番目の引数...
100を返す
この流れで行くとstrタイプも・・・・
*g = g01_getcmdlin_str_s0(0); // 0番目の文字型...
省略可能の場合・・・
*g = g01_getcmdlin_str_s0(0,"イカ自身"); // 0...
も...
「...
しかし、実際には戻り値がないタイプだったのでこれは間違い。
こんなコードを書いてみる。
#include <guigui01.h>
#include <stdio.h>
unsigned char cmdusage[] = {
0x86, /* これは決まり文句なのでとりあえず変更しない */
0x55, /* 通常モード(引数名省略不可) */
0x0c, 2, 'o','p','t', 0x3c, 9, 0x01, 'i', 'o', 'n', '-...
0x40 /* 最後のこれも決まり文句なので変更しない */
};
void G01Main()
{
g01_setcmdlin(cmdusage); //コマンドライン定義
char *buffer = g01_bss1a1; //お便利バッファ2MB...
g01_getcmdlin_str_s0(0,100,buffer); //引数受け取り
g01_putstr0(buffer);
return;
}
-これは問題ない。引数無指定ならUsageが表示される。
-opt:uniba-G! なんて引数を与えると、ちゃんと画面に表示さ...
-ここで、引数のタイプを省略可能にしてみる。 0x1c, 2, 'o'...
-このままコンパイルしても、エラーになってしまう。(引数指...
-なので、受け取り側も省略可能タイプと指定。 g01_getcmdli...
-これでいままでと同じように動作する。(しいて違いを言えば...
うーん・・・やはり、intが特殊だったって法則でいいのかな。...
**g01_getcmdlin_fopen系
ファイルパスタイプのデータを受け取る。(ファイルパスを受...
***g01_getcmdlin_fopen_s系
省略不可に設定されたファイルパスを取得し、オープンする?...
-g01_getcmdlin_fopen_s(i)
COLOR(red){・・・この流れで行けばoは省略可能の場合だと思...
COLOR(red){iは?? スロットの指摘? 引数番号??}
COLOR(red){困ったなぁ 載ってないぞ・・・・}
-g01_getcmdlin_fopen_o(i)
-g01_getcmdlin_fopen_m(i, j)
-g01_getcmdlin_fopen_s_0_4(i)
COLOR(red){こいつの正体はわかってるけど省略形なので後回し...
-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)
COLOR(blue){うっちゃんの予測を検証すべく、実験をしてみた}
こんなコードを書く。
#include <guigui01.h>
#include <stdio.h>
unsigned char cmdusage[] = {
0x86, /* これは決まり文句なのでとりあえず変更しない */
0x55, /* 通常モード(引数名省略不可) */
0x0c, 2, 'o','p','t', 0x0c, 9, 0x01, 'i', 'o', 'n', '-...
0x40 /* 最後のこれも決まり文句なので変更しない */
};
void G01Main()
{
g01_setcmdlin(cmdusage); //コマンドライン定義
char *buffer = g01_bss1a1; //お便利バッファ2MB...
g01_getcmdlin_fopen_s_0_4(0); //引数受け取り&ファ...
jg01_fread0_4(2 * 1024 * 1024, buffer); /* 最大2MB, 終...
g01_putstr0(buffer);
return;
}
-まずこれは正常に動作した。引数は省略不可なので指定しない...
-次に、引数側を省略可能にした。つまりこう。 0x1c, 2, 'o',...
-引数を指定しないと跳んでしまう・・・・
-引数を前回と同じもので指定しても、エラーが返される。
debug: cmdlin_fopen: 4 56 test.txt
c_api: junk_fopen: error
省略可能引数なので、それに合わせるべく、fopen側をイジる。...
-跳ばない。でもUsageを表示せずに終了(・・・これはええと...
-引数(ファイル名)を指定すると、最初の引数省略不可の場合...
**m系列・・・?
if (g01_getcmdlin_fopen_m_0_4(0, j) == 0)
cpyのソース内でこんなことしてる・・・ぞ? m系列はあえて...
**g01_getcmdlin_argc
指定した引数番号の引数が指定されているかどうかを判定する。
int g; ←引数の状態を受け取る...
int i; i = 0; ←何番の引数について調...
g = g01_getcmdlin_argc(i); ←引数番号0の引数が指定...
指定されていれば1...
-g01_getcmdlin_argc(int i)
**g01_getcmdlin_flag系
g01_getcmdlin_flag_o(0)
-g01_getcmdlin_flag_s(int i)
-g01_getcmdlin_flag_o(i)
-g01_getcmdlin_flag_s(i)
-g01_getcmdlin_flag_s(i)
**未分類
-g01_getcmdlin_exit1()
-g01_getcmdlin_put0_s(i)
-g01_getcmdlin_put1_s(i)
-g01_getcmdlin_put0_m_exit1(i, j)
-g01_getcmdlin_put1_m_exit1(i, 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)
*COLOR(red){オイラ的な備考}
このUsage表示(コマンドライン定義)では、省略形を使う場合...
終了行:
guigui01の仕様の整理とかそういうの。
*オレ様リンク集
-http://osask.net/w/264.html
-http://osask.net/w/174.html
-http://osask.net/w/346.html
*複雑・・・
・・・解ってきたぞ。つまり、これは単なるUsage表示だけじゃ...
#include <guigui01.h>
/* これは関数の外で宣言するのが望ましい */
unsigned char cmdusage[] = {
0x86, 0x55, /* この2つは決まり文句なのでとりあえず変...
0x0c, 0, 'n', 0x1c, 1, '#', /* この説明は本文で */
0x40 /* 最後のこれも決まり文句なので変更しない */
};
この設定で表示されるUsage。
usage>ex0012.g01 n:#
どうもUsage表示は関数化されているようだ。どうすれば自由に...
*解析
|0x86, 0x55|これは頭に付ける決まり文句らしい。(でも0x50...
|0x0c, 0, 'n', 0x1c, 1, '#',|これらはコマンドになるらしい|
|0x40|お尻につける決まり文句|
どうもこれでワンセットになるらしい。
|0x0c | (引数名の文字数-1) | (引数名) | 0x1c | (説明部分...
たとえば上の例だと・・・
|0x0c|コマンド| |
|(引数名の文字数-1)|0|引数名は''n''。一個。 1 - 1 = 0|
|(引数名)| 'n' | 一個しか置けない。|
|0x1c|コマンド| |
|(説明部分の文字数)|1| 説明は一文字だけなので1?|
|(説明)|'#'| この#一文字が説明ってことかな??|
*実験的に逆に考えてみる・・・
この部分は''Usageを表示する''んじゃなくて、そもそも''コマ...
で!~
この定義に沿って、自動的にUsageメッセージを作って表示して...
**引数先頭のコマンド
|0x86, 0x55|通常モード|
|0x86, 0x5c, 0|引数名省略可能モード|
http://osask.net/w/264.html
省略が可能。
上記 0x86, 0x5c, 0 は、 0x86, 0x50 と縮めて書くことが...
COLOR(blue){おそらく、0x5x の一桁目が合成できるってこと...
**省略できない引数
省略したり順番が違うとエラーになってほしい引数
|''0x0c''|(引数名の文字数-1)|(引数名)|''0x1c''|(説明部分...
|これは省略不可の引数だというサイン| | |この引数は数値で...
|>|合成が可能。コマンドの一桁目を引数名の文字列-に置き換...
**省略可能な引数
省略することもある引数
|''0x1c''|(引数名の文字数-1)|(引数名)|0x1c|(説明部分の文...
|これは省略可能な引数だというサイン| | |この引数は数値で...
-Usage表示では自動的に [ ] で括られて表示される
**引数が文字列の場合
0x0c, 0, 's', 0x3c, 3, 's', 't', 'r', /* 0x3cは文字列型...
|0x0c|(引数名の文字数-1)|(引数名)|''0x3c''|(説明部分の文...
|これは省略不可な引数だというサイン| | |この引数は文字列...
**引数がファイルパスである場合
0x0c, 1, 'i','n', 0x3c, 10, 'i', 'n', 'p','u','t','-','f...
|0x0c|(引数名の文字数-1)|(引数名)|''0x0c''|(説明部分の文...
|これは省略不可な引数だというサイン| | |この引数はファイ...
***超省略形
-[in:]input-file の形でかまわないなら、 単に 0x88と書...
-↑と同じで、さらに省略可能形式なら、0x89と書けばいい。
*説明時に引数名の文字列を使う
引数名はよく略称を使われる。たとえば、文字列(string)の引...
str:
なんてのを使う。Usageでは、str:引数の後の説明は当然、
str:string
になる。(つまり、s と t と r がかぶっている。)
普通にUsage表示(コマンドライン定義)をしたい場合は、
0x0c, 2, 's', 't', 'r', 0x3c, 6, 's', 't', 'r', 'i', 'n'...
となるが、文字が勿体ない場合、0x01 を置くと前で定義した引...
COLOR(red){ただし注意。上記のようにベタに書くと「string]...
0x0c, 2, 's', 't', 'r', 0x3c, 4, 0x01, 'i', 'n', 'g'
**改行
0x87,
**スイッチ
引数ではなくスイッチ?な場合。
0x1c, 3, 'd', 'o', 'w', 'n', 0x20,
|0x1c| 3| 'd', 'o', 'w', 'n'| 0x20|
|省略可能なオプションであるサイン|downなので、4-1で3| |ス...
*引数の受け取り
getcmdline系で受け取るらしいんだけど、どうもわからん。例...
unsigned char cmdusage[] = {
0x86, /* これは決まり文句なのでとりあえず変更しない */
0x55, /* 引数名省略可能モード */
0x1c, 2, 'o','p','t', 0x0c, 9, 0x01, 'i', 'o', 'n', '-...
0x0c, 2, 'o','u','t', 0x0c, 9, 0x01, 'p', 'u', 't', '-...
0x40 /* 最後のこれも決まり文句なので変更しない */
};
第一引数をプログラム内に受け取るにはどうしたらえぇんじゃ...
COLOR(blue){関数で、戻り値があるのかないのかは、guiguo01....
引数をプログラム内に受け取ると思われる関数は以下のとおり。
-Void g01_getcmdlin_exit1()
-Void g01_getcmdlin_fopen_s(i)
-Void g01_getcmdlin_fopen_o(i)
-Void g01_getcmdlin_fopen_m(i, j)
-Void g01_getcmdlin_fopen_s_0_4(i)
-Void g01_getcmdlin_fopen_s_3_5(i)
-int g01_getcmdlin_fopen_m_0_4(int i, int j)
-int g01_getcmdlin_fopen_o_0_4(int i)
-int g01_getcmdlin_fopen_o_3_5(int i)
-int g01_getcmdlin_flag_s(int i)
-Void g01_getcmdlin_flag_o(i)
-Void g01_getcmdlin_int_s(i) COLOR(red){あっれえぇ?これ...
-int g01_getcmdlin_int_o(int i, int d)
-Void g01_getcmdlin_str_s0(i, n, p)
-Void g01_getcmdlin_str_s0_0(n, p)
-int 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_argc(int i)
-Void g01_getcmdlin_put0_s(i)
-Void g01_getcmdlin_put1_s(i)
-Void g01_getcmdlin_put0_m_exit1(i, j)
-Void g01_getcmdlin_put1_m_exit1(i, j)
-int g01_cmdlin3s(int l) {}
-int g01_cmdlin3m(int l, int i) {}
-int g01_cmdlin4s(int l) {}
-int g01_cmdlin4m(int l, int i) {}
-int g01_cmdlin5s(int l) {}
-int g01_cmdlin5m(int l, int i) {}
-int g01_cmdlin6s1(int l, int n, void *p) {}
-int g01_cmdlin6m1(int l, int i, int n, void *p) {}
-Void jg01_getcmdline0
-Void jg01_getcmdline1
-int jg01_getcmdlin0(int n, void *p)
-Void jg01_getcmdlin1(n, p)
**引数受け取り関数の整理(予測ね。実験しながら・・・)
引数には、定義した順に0から番号が付いているらしい。
-int g01_getcmdlin_argc(int 引数番号)
--指定した番号の引数があるかないか。あれが1、なければ0を...
たとえばこういう設定をしたとする。
unsigned char cmdusage[] = {
0x86, /* これは決まり文句なのでとりあえず変更しない */
0x55, /* 引数名省略可能モード */
0x1c, 2, 'o','p','t', 0x0c, 9, 0x01, 'i', 'o', 'n', '-...
0x0c, 2, 'o','u','t', 0x0c, 9, 0x01, 'p', 'u', 't', '-...
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 ...
>hijk.exe test.g01 out:ugougo.txt
i=0 ...
・・・・・こういうことでいいのかな・・・・・
たとえばこの例だと、0番引数optは、「もし指定があればその...
int i;
i = g01_getcmdlin_argc(0);
if( i == 0 ) {
g01_fopen(1,4,"osalink1.opt");
}else {
g01_fopen(1,4,getcmdlinexxxxxxx);
}
こういう処理をしてあげればいい・・・のかな・・・(これ合...
***ファイル名取得&オープン系
まいったなこんなにあるよ・・・どれがどれだがよくわからん...
-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分類
ダメだ・・・ちょっと分類を組み立てなおし!
-g01_getcmdlinは引数をプログラム内に受け取る関数郡。
**g01_getcmdlin_int系
数字タイプの引数を受け取るもの。(intなので多分int型変数...
***g01_getcmdlin_int_s系
省略不可(普通?シングル型というらしい)の引数を取得する...
int g; ←引数を受け取る変数
int i; i = 0; ←引数番号を指定する。0...
g = g01_getcmdlin_int_s(i); ←問題なければgに引数の...
-g01_getcmdlin_int_s(i)
***g01_getcmdlin_int_o系
省略可能(オプショナル型というらしい)の引数を取得する。...
省略された場合の規定値が必要になる。第二引数の int d が...
int g; ←引数を受け取る変数
int i; i = 0; ←引数番号を指定する...
g = g01_getcmdlin_int_o(i,100); ←問題なければgに引...
もしこの引数が指...
(規定値)とみなし...
-g01_getcmdlin_int_o(int i, int d)
**g01_getcmdlin_str系
文字列型のデータを受け取る。
***g01_getcmdlin_str_s0系
シングル型。省略不可の引数の場合に使う。(s0となっている...
COLOR(red){戻り値を持たないことに注意!}
int i; i = 0; ←取得する引数...
int n; n = 16; ←取得する文字...
char s[16]; ←取得した引数...
g01_getcmdlin_str_s0(i, n, s) ←戻り値なし。...
-g01_getcmdlin_str_s0(i, n, p)
-g01_getcmdlin_str_s0_0(n, p)
COLOR(red){ダメダ・・・これも規定値の扱いがわからん・・・...
-g01_getcmdlin_str_o0(int i, int n, void *p)
-g01_getcmdlin_str_m0_1(int j, int n, void *p)
COLOR(blue){うっちゃんの予測を検証すべく、実験をしてみた}
COLOR(red){ちなみにオイラの予想してたこと。intタイプと同...
例:
intタイプは戻り値として取得したコマンドラインパラメータ...
g = g01_getcmdlin_int_s(0); // 0番目の引数を取...
省略可能の場合・・・
g = g01_getcmdlin_int_o(0,100); // 0番目の引数...
100を返す
この流れで行くとstrタイプも・・・・
*g = g01_getcmdlin_str_s0(0); // 0番目の文字型...
省略可能の場合・・・
*g = g01_getcmdlin_str_s0(0,"イカ自身"); // 0...
も...
「...
しかし、実際には戻り値がないタイプだったのでこれは間違い。
こんなコードを書いてみる。
#include <guigui01.h>
#include <stdio.h>
unsigned char cmdusage[] = {
0x86, /* これは決まり文句なのでとりあえず変更しない */
0x55, /* 通常モード(引数名省略不可) */
0x0c, 2, 'o','p','t', 0x3c, 9, 0x01, 'i', 'o', 'n', '-...
0x40 /* 最後のこれも決まり文句なので変更しない */
};
void G01Main()
{
g01_setcmdlin(cmdusage); //コマンドライン定義
char *buffer = g01_bss1a1; //お便利バッファ2MB...
g01_getcmdlin_str_s0(0,100,buffer); //引数受け取り
g01_putstr0(buffer);
return;
}
-これは問題ない。引数無指定ならUsageが表示される。
-opt:uniba-G! なんて引数を与えると、ちゃんと画面に表示さ...
-ここで、引数のタイプを省略可能にしてみる。 0x1c, 2, 'o'...
-このままコンパイルしても、エラーになってしまう。(引数指...
-なので、受け取り側も省略可能タイプと指定。 g01_getcmdli...
-これでいままでと同じように動作する。(しいて違いを言えば...
うーん・・・やはり、intが特殊だったって法則でいいのかな。...
**g01_getcmdlin_fopen系
ファイルパスタイプのデータを受け取る。(ファイルパスを受...
***g01_getcmdlin_fopen_s系
省略不可に設定されたファイルパスを取得し、オープンする?...
-g01_getcmdlin_fopen_s(i)
COLOR(red){・・・この流れで行けばoは省略可能の場合だと思...
COLOR(red){iは?? スロットの指摘? 引数番号??}
COLOR(red){困ったなぁ 載ってないぞ・・・・}
-g01_getcmdlin_fopen_o(i)
-g01_getcmdlin_fopen_m(i, j)
-g01_getcmdlin_fopen_s_0_4(i)
COLOR(red){こいつの正体はわかってるけど省略形なので後回し...
-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)
COLOR(blue){うっちゃんの予測を検証すべく、実験をしてみた}
こんなコードを書く。
#include <guigui01.h>
#include <stdio.h>
unsigned char cmdusage[] = {
0x86, /* これは決まり文句なのでとりあえず変更しない */
0x55, /* 通常モード(引数名省略不可) */
0x0c, 2, 'o','p','t', 0x0c, 9, 0x01, 'i', 'o', 'n', '-...
0x40 /* 最後のこれも決まり文句なので変更しない */
};
void G01Main()
{
g01_setcmdlin(cmdusage); //コマンドライン定義
char *buffer = g01_bss1a1; //お便利バッファ2MB...
g01_getcmdlin_fopen_s_0_4(0); //引数受け取り&ファ...
jg01_fread0_4(2 * 1024 * 1024, buffer); /* 最大2MB, 終...
g01_putstr0(buffer);
return;
}
-まずこれは正常に動作した。引数は省略不可なので指定しない...
-次に、引数側を省略可能にした。つまりこう。 0x1c, 2, 'o',...
-引数を指定しないと跳んでしまう・・・・
-引数を前回と同じもので指定しても、エラーが返される。
debug: cmdlin_fopen: 4 56 test.txt
c_api: junk_fopen: error
省略可能引数なので、それに合わせるべく、fopen側をイジる。...
-跳ばない。でもUsageを表示せずに終了(・・・これはええと...
-引数(ファイル名)を指定すると、最初の引数省略不可の場合...
**m系列・・・?
if (g01_getcmdlin_fopen_m_0_4(0, j) == 0)
cpyのソース内でこんなことしてる・・・ぞ? m系列はあえて...
**g01_getcmdlin_argc
指定した引数番号の引数が指定されているかどうかを判定する。
int g; ←引数の状態を受け取る...
int i; i = 0; ←何番の引数について調...
g = g01_getcmdlin_argc(i); ←引数番号0の引数が指定...
指定されていれば1...
-g01_getcmdlin_argc(int i)
**g01_getcmdlin_flag系
g01_getcmdlin_flag_o(0)
-g01_getcmdlin_flag_s(int i)
-g01_getcmdlin_flag_o(i)
-g01_getcmdlin_flag_s(i)
-g01_getcmdlin_flag_s(i)
**未分類
-g01_getcmdlin_exit1()
-g01_getcmdlin_put0_s(i)
-g01_getcmdlin_put1_s(i)
-g01_getcmdlin_put0_m_exit1(i, j)
-g01_getcmdlin_put1_m_exit1(i, 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)
*COLOR(red){オイラ的な備考}
このUsage表示(コマンドライン定義)では、省略形を使う場合...
ページ名: