5: 2009-01-13 (火) 20:11:00 |
現: 2024-01-08 (月) 12:58:42 k-tan |
- | * ぐいぐい01に関するメモ-26 | + | TITLE:x |
| + | * ぐいぐい01に関するメモ-26 [#tcc7397f] |
| -(by [[K]], 2009.01.12) | | -(by [[K]], 2009.01.12) |
| -メモのうち重要な部分をそのうちまとめてまともなページを作る | | -メモのうち重要な部分をそのうちまとめてまともなページを作る |
- | *** (38) GOで「ぐいぐい01」アプリを作る(4) | + | *** (38) GOで「ぐいぐい01」アプリを作る(4) [#e629ed35] |
| -[[GUIGUI01/memo25]]の続きです。仕様変更ももうそんなにはないと思うので、書いても問題はないかなと。 | | -[[GUIGUI01/memo25]]の続きです。仕様変更ももうそんなにはないと思うので、書いても問題はないかなと。 |
| ---- | | ---- |
| -と短く書けるのです。これで1バイト節約できます。同じようにして、他の部分を全部整理するとこうなります。ex0017.cです。 | | -と短く書けるのです。これで1バイト節約できます。同じようにして、他の部分を全部整理するとこうなります。ex0017.cです。 |
| #include <guigui01.h> | | #include <guigui01.h> |
| + | |
| unsigned char cmdusage[] = { | | unsigned char cmdusage[] = { |
| 0x86, 0x50, | | 0x86, 0x50, |
| 0x40 | | 0x40 |
| }; | | }; |
| + | |
| void G01Main() | | void G01Main() |
| { | | { |
| (ex0015.cと同じ内容) | | (ex0015.cと同じ内容) |
| } | | } |
- | -これをmakeすると139バイトになります。でも動作はex0016と完全に同じです。 | + | -これをmakeすると128バイトになります。でも動作はex0016と完全に同じです。 |
| ---- | | ---- |
| -じゃあもう一つ小さくする技を。ex0017では引数が「s:str」と「n:#」でしたが、これを「str:string」と「num:number」にしたいとしましょう。まあどうせ順序を覚えていれば「str:」や「num:」とタイプする必要はないですしね。それなら分かりやすいほうがいい、と考える人もいるでしょう。 | | -じゃあもう一つ小さくする技を。ex0017では引数が「s:str」と「n:#」でしたが、これを「str:string」と「num:number」にしたいとしましょう。まあどうせ順序を覚えていれば「str:」や「num:」とタイプする必要はないですしね。それなら分かりやすいほうがいい、と考える人もいるでしょう。 |
| -ということでex0018.cです。 | | -ということでex0018.cです。 |
| #include <guigui01.h> | | #include <guigui01.h> |
| + | |
| unsigned char cmdusage[] = { | | unsigned char cmdusage[] = { |
| 0x86, 0x50, | | 0x86, 0x50, |
| 0x02, 's', 't', 'r', 0x34, 0x01, 'i', 'n', 'g', | | 0x02, 's', 't', 'r', 0x34, 0x01, 'i', 'n', 'g', |
- | 0x12, 'n', 'u', 'm', 0x11, 0x01, 'b', 'e', 'r', | + | 0x12, 'n', 'u', 'm', 0x14, 0x01, 'b', 'e', 'r', |
| 0x40 | | 0x40 |
| }; | | }; |
| + | |
| void G01Main() | | void G01Main() |
| { | | { |
| } | | } |
| -ここでまたサイズを節約するテクニックを使いました。というのは引数説明のところで、0x01というのを使っているからです。これはusage表示するときに引数名に置換されます。これを使うことで 0x3c や 0x1c を使わずに済んでいますし、そもそも置換することでそれぞれ2バイト節約しています。 | | -ここでまたサイズを節約するテクニックを使いました。というのは引数説明のところで、0x01というのを使っているからです。これはusage表示するときに引数名に置換されます。これを使うことで 0x3c や 0x1c を使わずに済んでいますし、そもそも置換することでそれぞれ2バイト節約しています。 |
- | -makeすると147バイトになります。一応usage表示を見て確認しておきましょう。 | + | -makeすると136バイトになります。一応usage表示を見て確認しておきましょう。 |
| >efg01 ex0018.g01 | | >efg01 ex0018.g01 |
| usage>ex0018.g01 [str:]string [[num:]number] | | usage>ex0018.g01 [str:]string [[num:]number] |
| -ということでex0019.cです。 | | -ということでex0019.cです。 |
| #include <guigui01.h> | | #include <guigui01.h> |
| + | |
| unsigned char cmdusage[] = { | | unsigned char cmdusage[] = { |
| 0x86, 0x50, | | 0x86, 0x50, |
| 0x02, 's', 't', 'r', 0x34, 0x01, 'i', 'n', 'g', | | 0x02, 's', 't', 'r', 0x34, 0x01, 'i', 'n', 'g', |
| 0x87, | | 0x87, |
- | 0x12, 'n', 'u', 'm', 0x11, 0x01, 'b', 'e', 'r', | + | 0x12, 'n', 'u', 'm', 0x14, 0x01, 'b', 'e', 'r', |
| 0x40 | | 0x40 |
| }; | | }; |
| + | |
| void G01Main() | | void G01Main() |
| { | | { |
| (ex0015.cと同じ内容) | | (ex0015.cと同じ内容) |
| } | | } |
- | -これをmakeすると148バイトになりますが、注目ポイントは 0x87, です。これがあると、usage表示のときにここで改行します。それ以外の効果はありません。この改造をしてももちろん「num:」は引数番号1のままです(2になったりはしない)。 | + | -これをmakeすると137バイトになりますが、注目ポイントは 0x87, です。これがあると、usage表示のときにここで改行します。それ以外の効果はありません。この改造をしてももちろん「num:」は引数番号1のままです(2になったりはしない)。 |
| -これをusage表示させるとこうなります。 | | -これをusage表示させるとこうなります。 |
| >efg01 ex0019.g01 | | >efg01 ex0019.g01 |
| -さてここまでで整数型引数と文字列型引数を紹介してきましたが、次はフラグ型引数を紹介します。これは値を指定するのではなく、単にその引数名が現れたかどうかだけを問題にします。・・・どんな例にしましょうか。じゃあたとえば0からnまで数えるプログラムを使いましょう。ex0020.cです。 | | -さてここまでで整数型引数と文字列型引数を紹介してきましたが、次はフラグ型引数を紹介します。これは値を指定するのではなく、単にその引数名が現れたかどうかだけを問題にします。・・・どんな例にしましょうか。じゃあたとえば0からnまで数えるプログラムを使いましょう。ex0020.cです。 |
| #include <guigui01.h> | | #include <guigui01.h> |
| + | |
| unsigned char cmdusage[] = { | | unsigned char cmdusage[] = { |
| 0x86, 0x51, /* フラグ型は自動当てはめ対象からははずすようにする */ | | 0x86, 0x51, /* フラグ型は自動当てはめ対象からははずすようにする */ |
| 0x40 | | 0x40 |
| }; | | }; |
| + | |
| void setdec(char *s, int i, int n) | | void setdec(char *s, int i, int n) |
| { | | { |
| (ex0010.cと同じ内容) | | (ex0010.cと同じ内容) |
| } | | } |
| + | |
| void G01Main() | | void G01Main() |
| { | | { |
| return; | | return; |
| } | | } |
- | -これをmakeすると265バイトになります。そしてusageを出してみると、こうなります。 | + | -これをmakeすると249バイトになります。そしてusageを出してみると、こうなります。 |
| >efg01 ex0020.g01 | | >efg01 ex0020.g01 |
| usage>ex0020.g01 [down] [n:]# | | usage>ex0020.g01 [down] [n:]# |
| >efg01 ex0020.g01 10 | | >efg01 ex0020.g01 10 |
| 0 1 2 3 4 5 6 7 8 9 10 | | 0 1 2 3 4 5 6 7 8 9 10 |
| + | |
| >efg01 ex0020.g01 7 down | | >efg01 ex0020.g01 7 down |
| 7 6 5 4 3 2 1 0 | | 7 6 5 4 3 2 1 0 |
| -フラグがコマンドライン中に存在していれば、g01_getcmdlin_flag_o()の値が0以外になります。存在しなければ0です。 | | -フラグがコマンドライン中に存在していれば、g01_getcmdlin_flag_o()の値が0以外になります。存在しなければ0です。 |
| | | |
- | * こめんと欄 | + | * こめんと欄 [#jffae6b6] |
| - このシリーズは好評のようです。実際にアプリを作って遊んでくれる人も出てきました。 -- [[K]] &new{2009-01-13 (火) 11:07:16}; | | - このシリーズは好評のようです。実際にアプリを作って遊んでくれる人も出てきました。 -- [[K]] &new{2009-01-13 (火) 11:07:16}; |
| + | - abcdw014向けの記述に修正。 -- ''K'' &new{2009-01-16 (金) 22:12:08}; |
| | | |
| #comment | | #comment |