ページへ戻る

− Links

 印刷 

hideyosi​/hijk計画 のバックアップソース(No.4) :: OSASK計画

osaskwiki:hideyosi/hijk計画 のバックアップソース(No.4)

« Prev[4]  Next »[5]
*なんぞねこれ? [#o65d5156]
Kタンが作っている第二世代、efg01ってあるよね。あれを元にhideyosiが派生させたものです。~
派生させたんだから、もうオイラが好きに改良していくよ。

*バージョン番号表記 [#w11ede5a]
好きだねぇ~これwww

すこし調べてみると、.g01アプリの場合、ソース冒頭で引数の定義を行っている。で、それに対応して自動的にUsage表示をしてくれると。こういう仕組みになってた。

今までは普通のCのソースに''文字列''を書き足せばそれでよかった。~
(もちろん.g01だってそれは出来る。)~
・・・でもなぁ。なーんかそれじゃ、色気がないというか。欲が出てきた。
そこで、Usageと同じように、ソースヘッドに番号だけを埋め込んで、hijk側で制御するようにできないもんかなぁと。いかにもefg01の仕様っぽいし、サイズだって極限まで絞れ、無駄が出ないようにできるはず。(なにより、そういう統一的な形のほうがなんかカッコよくない??)

で、現在の妄想。バージョン番号を出したい場合はhijk側でオプションを付けるってのはどうだろう?

 >hijk.exe -v Nasuka.g01

 hijk Version 1.1
     Nasuka Version 1.3
     Usage>Nasuka in:filename out:filename

こんな感じに。

**バージョン番号の文字列の制限 [#o541cb97]
これはUsage(オプションの扱い)でも同じで、普通のC言語のように自由気ままにやらせちゃうと余計な容量やコードが入り込み、さらには非統一的にもなる。あえて出来ることを絞ることでこの問題は解消される。~
COLOR(blue){誤解してほしくないのだが別にそれを悪だと言ってるんじゃないよ。ヘンな突っ込み入れんといてね。}

たとえばこんな仕様。
-バージョン番号はあくまでも番号なので、数値のみで行う
-3つだけってことにする。(6.3.2とか)三つまでを許容しておけば、日付タイプにも対応できる(10/12/03版とか)
-各番号は256まで。(実際、バージョン189とかってなさそうだし、落とし所ではないかと)
-どうしても番号以外の場合は別にコードを打ち込むような仕様にする

どかな??

**できるかな? [#b7d309f9]
[[ここ>http://osask.net/w/538.html]]でいろいろ解析してみた。0x0cとか0x1cとかのコードを打ち込むことで、タイプや文字数を指摘している仕様らしい。

なんか余ってないかな? さっそくソースコードを読み解いてみる・・・

ここかなぁ・・・    func06_init();

 void func06_init()
 {
 	UCHAR *p;
 	func06str = malloc(sizeof (struct FUNC06STR));
 	func06str->flags &= 0;
 	func06str->usgs = 2;
 	func06str->def_arg0 = 1;
 	func06str->usg[0].tag[0] = '\0';
 	func06str->usg[0].flg = 0;
 	func06str->usg[0].usg[0] = '\0';
 	func06str->usg[0].typ = 0xff;
 	func06str->usg[1].tag[0] = '\0';
 	func06str->usg[1].flg = 3;
 	func06str->usg[1].usg[0] = '\0';
 	func06str->usg[1].typ = 0xfe;	/* 3:str */
 	for (func06str->argv0 = p = *main_argv; *p != '\0'; p++) {
 		if (*p == '\\' || *p == '/')
 			func06str->argv0 = p + 1;
 	}
 	return;
 }

うーん。この関数って、内部にコマンドライン情報を格納するための構造体を定義して、さらに初期化してる・・・のかなぁ???

102行目がそれかな。ここでFUNC06STR構造体を定義。さらに108行でそれをグローバル変数として生成・・・かなこれ?~
COLOR(blue){おっと!FUNC06STR内に、さらにFUNC06STR_SUB00構造体が入ってる。入れ子になってるのか}

***FUNC06STR構造体 [#u5ca8f2e]

|0 |usg|tag(32文字?)|usg(32文字?)|def(32文字)|typ(1文字)|flg(1文字)|dmy_c(2文字)|def_int(int×1)|dmy_i(int×6)|
|1 |usg|tag(32文字?)|usg(32文字?)|def(32文字)|typ(1文字)|flg(1文字)|dmy_c(2文字)|def_int(int×1)|dmy_i(int×6)|
|2 |usg|tag(32文字?)|usg(32文字?)|def(32文字)|typ(1文字)|flg(1文字)|dmy_c(2文字)|def_int(int×1)|dmy_i(int×6)|
|>|>|>|>|>|>|>|>|>|CENTER: ・ |
|62|usg|tag(32文字?)|usg(32文字?)|def(32文字)|typ(1文字)|flg(1文字)|dmy_c(2文字)|def_int(int×1)|dmy_i(int×6)|
|63|usg|tag(32文字?)|usg(32文字?)|def(32文字)|typ(1文字)|flg(1文字)|dmy_c(2文字)|def_int(int×1)|dmy_i(int×6)|
|>|>|>|>|>|>|>|>|>|LEFT:def_arg0(int×1)|
|>|>|>|>|>|>|>|>|>|LEFT:flags(int×1)|
|>|>|>|>|>|>|>|>|>|LEFT:usgs(int×1)|
|>|>|>|>|>|>|>|>|>|LEFT:*argv0(ポインタ)|
|>|>|>|>|>|>|>|>|>|LEFT:argv_f(256文字)|
|>|>|>|>|>|>|>|>|>|LEFT:argv_all(6万5千文字)|

-func06_initはなにをやってるのか?(ヘタレの予測)
--メモリをmallocを使って確保(全部でいくつになるんだこれ?掛け算ややこしいのでパスwww
--flagsをゼロに(なんで?)
--usgsを2に(とりあえず、引数は二個だよってことで初期化かな)
--def_arg0を1に(なんだろこれ。defっていうくらいだから、省略時の規定値・・・かな?)
--以降、とりあえず2列、usg(FUNC06STR_SUB00構造体)に値を当て込んでいる
---tag[0]に0を。(tagは文字列なので、頭に0を入れて空文字ってことにする?)
---flgを0に。(なんだろう。flgかぁ。なにを表すものかな?)
---usg[0]に0を。(同じく空文字化だと思う)
---typを0xffに(0xffはなんだろう?0xfeは文字列引数ってことらしいが・・・)
--次にforループはなにしてるんだろう? *main_argvって、たぶん与えられた引数(コマンドライン)丸々を格納している変数のポインタだと思うんだけど・・・文字列内に / か \ があったらargv0を一個増やす・・・いや違うなぁ

« Prev[4]  Next »[5]