6: 2009-11-17 (火) 12:08:44 |
現: 2024-01-08 (月) 12:58:42 k-tan |
- | * ぐいぐい01に関するメモ-27 | + | TITLE:x |
| + | * ぐいぐい01に関するメモ-27 [#ud59caf8] |
| -(by [[K]], 2009.01.13) | | -(by [[K]], 2009.01.13) |
| -メモのうち重要な部分をそのうちまとめてまともなページを作る | | -メモのうち重要な部分をそのうちまとめてまともなページを作る |
- | *** (39) GOで「ぐいぐい01」アプリを作る(5) | + | *** (39) GOで「ぐいぐい01」アプリを作る(5) [#t6b647e1] |
| -[[GUIGUI01/memo26]]の続きです。 | | -[[GUIGUI01/memo26]]の続きです。 |
| ---- | | ---- |
| -今回の最初のプログラムは、いわゆるファイルダンプです。ファイルをオープンして、それを16進数でだだーっと書きます。ex0021.cです。 | | -今回の最初のプログラムは、いわゆるファイルダンプです。ファイルをオープンして、それを16進数でだだーっと書きます。ex0021.cです。 |
| #include <guigui01.h> | | #include <guigui01.h> |
| + | |
| unsigned char cmdusage[] = { | | unsigned char cmdusage[] = { |
| 0x86, 0x50, | | 0x86, 0x50, |
| 0x40 | | 0x40 |
| }; | | }; |
| + | |
| void sethex(char *s, int i, int n) | | void sethex(char *s, int i, int n) |
| { | | { |
| return; | | return; |
| } | | } |
| + | |
| void G01Main() | | void G01Main() |
| { | | { |
| >efg01 ex0021.g01 | | >efg01 ex0021.g01 |
| usage>ex0021.g01 [in:]input-file | | usage>ex0021.g01 [in:]input-file |
| + | |
| >efg01 ex0021.g01 make.bat | | >efg01 ex0021.g01 make.bat |
| offset +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF | | offset +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF |
| |0x3c|文字列型引数| | | |0x3c|文字列型引数| |
| -関数sethex()はsetdecを16進数用に改造しただけのものです。 | | -関数sethex()はsetdecを16進数用に改造しただけのものです。 |
- | -それでG01Main()の g01_getcmdlin_fopen_s_0_4(0); で、引数番号0に書かれたファイルをリードモードでオープンさせ、スロット番号4に割り当てています。これは本来は、 g01_getcmdlin_fopen_s(0, 4, 0); と書くべきところなのです。しかしこの関数をguigui01.hに書いておくのをすっかり忘れていました。それで、 g01_getcmdlin_fopen_s_0_4() というのは、スロット番号4にリードモードでオープンするのがあまりよくあるケースなので、関数の引数で指定しなくてもいいことにしたいわば省略形です。 | + | -それでG01Main()の g01_getcmdlin_fopen_s_0_4(0); で、引数番号0に書かれたファイルをリードモードでオープンさせ、スロット番号4に割り当てています。これは本来は、 g01_getcmdlin_fopen_s(0, 4, 0); と書くべきところなのです。しかしこの関数をguigui01.hに書いておくのをすっかり忘れていました。それで、 g01_getcmdlin_fopen_s_0_4() というのは、スロット番号4にリードモードでオープンするのがあまりによくあるケースなので、関数の引数で指定しなくてもいいことにしたいわば省略形です。 |
| -スロット番号というのはファイルハンドルの入れ物みたいなもので、ファイルのオープンに使う場合は4番から31番のどれかを使います。しかしまあ、たいていリードは4番で、ライトは5番でやります。どうしてかというと、 g01_getcmdlin_fopen_s_0_4() などの関数を使いたいからですね(サイズが節約できます)。 | | -スロット番号というのはファイルハンドルの入れ物みたいなもので、ファイルのオープンに使う場合は4番から31番のどれかを使います。しかしまあ、たいていリードは4番で、ライトは5番でやります。どうしてかというと、 g01_getcmdlin_fopen_s_0_4() などの関数を使いたいからですね(サイズが節約できます)。 |
| - j = jg01_fread1(4, 16, buf); というのは、スロット番号4のファイルから最大16バイトまで読み込んでbufにしまいます。そして読み込めたバイト数がjに入ります。これが0ならファイル終端です。 | | - j = jg01_fread1(4, 16, buf); というのは、スロット番号4のファイルから最大16バイトまで読み込んでbufにしまいます。そして読み込めたバイト数がjに入ります。これが0ならファイル終端です。 |
| -ASCIIのみのテキストファイルしか絶対にin:に指定しないとして、しかも常に2MB未満のサイズだと仮定して問題ないのなら、ここまで単純化できます。ex0023.cです。 | | -ASCIIのみのテキストファイルしか絶対にin:に指定しないとして、しかも常に2MB未満のサイズだと仮定して問題ないのなら、ここまで単純化できます。ex0023.cです。 |
| #include <guigui01.h> | | #include <guigui01.h> |
| + | |
| unsigned char cmdusage[] = { | | unsigned char cmdusage[] = { |
| 0x86, 0x50, | | 0x86, 0x50, |
| 0x40 | | 0x40 |
| }; | | }; |
| + | |
| void G01Main() | | void G01Main() |
| { | | { |
| >e ex0023 | | >e ex0023 |
| usage>ex0023 [in:]input-file | | usage>ex0023 [in:]input-file |
| + | |
| >e ex0023 make.bat | | >e ex0023 make.bat |
| ..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 | | ..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 |
| + | |
| >e ex0023 Makefile | | >e ex0023 Makefile |
| TARGET = ex0023 | | TARGET = ex0023 |
| MODE = g01 | | MODE = g01 |
| OBJS = ex0023.obj | | OBJS = ex0023.obj |
| + | |
| INCPATH = ../z_tools/guigui01/ | | INCPATH = ../z_tools/guigui01/ |
| include ../z_tools/com_mak.txt | | include ../z_tools/com_mak.txt |
| -ということで作ってみたex0024.cです。 | | -ということで作ってみたex0024.cです。 |
| #include <guigui01.h> | | #include <guigui01.h> |
| + | |
| unsigned char cmdusage[] = { | | unsigned char cmdusage[] = { |
| 0x86, 0x51, | | 0x86, 0x51, |
| 0x40 | | 0x40 |
| }; | | }; |
| + | |
| void G01Main() | | void G01Main() |
| { | | { |
| | | |
| | | |
- | * こめんと欄 | + | * こめんと欄 [#laba58b6] |
| - ex0022が351バイトになって我ながら感動したので、後日ASKAかnaskで全部書いてみようと思いました(註:abcdw012での話です)。半分くらいにならないかなあ? -- [[K]] &new{2009-01-13 (火) 23:51:38}; | | - ex0022が351バイトになって我ながら感動したので、後日ASKAかnaskで全部書いてみようと思いました(註:abcdw012での話です)。半分くらいにならないかなあ? -- [[K]] &new{2009-01-13 (火) 23:51:38}; |
| - とりあえず200バイトを切ることは確認。 -- ''K'' &new{2009-01-14 (水) 00:53:13}; | | - とりあえず200バイトを切ることは確認。 -- ''K'' &new{2009-01-14 (水) 00:53:13}; |