[HOME]  [リストへもどる]
一括表示

  SD,CF,ATA ベンチマーク - 文太 08/10/23-00:13 No.3344
    ┗ Re: SD,CF,ATA ベンチマーク - としき 08/10/23-15:39 No.3345
     ┗ Re^2: SD,CF,ATA ベンチマーク - 文太 08/10/23-17:40 No.3346
      ┣ Re^3: SD,CF,ATA ベンチマーク - konno 08/10/23-23:12 No.3347
      ┃┗ Re^4: SD,CF,ATA ベンチマーク - 文太 08/10/23-23:42 No.3348
      ┃ ┗ Re^5: SD,CF,ATA ベンチマーク - konno 08/10/25-01:16 No.3355
      ┃  ┗ Re^6: SD,CF,ATA ベンチマーク - 文太 08/10/25-11:51 No.3356
      ┃   ┣ Re^7: SD,CF,ATA ベンチマーク - 文太 08/10/25-23:56 No.3359
      ┃   ┃┗ こっそり差し替え(pst_time.awkなど) - 文太 08/10/26-11:54 No.3361
      ┃   ┃ ┣ FORのネスト付加@DOS - 文太 08/10/27-17:51 No.3367
      ┃   ┃ ┃┗ Re: FORのネスト付加@DOS - としき 08/10/27-23:10 No.3368
      ┃   ┃ ┗ pst_tm3.awk +@ - 文太 08/10/28-22:18 No.3370
      ┃   ┃  ┗ Re: pst_tm3.awk +@ - 文太 08/10/29-20:31 No.3372
      ┃   ┃   ┣ Re^2: pst_tm3.awk +@ - 文太 08/10/29-20:50 No.3374
      ┃   ┃   ┃┗ TIMEX.awk (with new timeb.com) - 文太 08/10/29-23:19 No.3375
      ┃   ┃   ┃ ┗ Re: TIMEX.awk (with new timeb.com) - としき 08/10/30-10:51 No.3376
      ┃   ┃   ┃  ┗ TIMEX2.awk - 文太 08/10/30-12:57 No.3377
      ┃   ┃   ┃   ┗ ddd.com(asm) by-product - 文太 08/10/31-23:16 No.3381
      ┃   ┃   ┃    ┗ blt.asm - 文太 08/11/03-01:06 No.3394
      ┃   ┃   ┃     ┣ blt2.asm - 文太 08/11/03-12:12 No.3395
      ┃   ┃   ┃     ┗ Re: blt.asm - konno 08/11/03-13:32 No.3396
      ┃   ┃   ┃      ┗ Re^2: blt.asm - 文太 08/11/03-16:27 No.3397
      ┃   ┃   ┃       ┗ Re^3: blt.asm - konno 08/11/04-00:06 No.3399
      ┃   ┃   ┃        ┗ Re^4: blt.asm - 文太 08/11/05-12:50 No.3404
      ┃   ┃   ┗ Re^2: pst_tm3.awk +@ - konno 08/10/31-07:34 No.3379
      ┃   ┃    ┗ Re^3: pst_tm3.awk +@ - 文太 08/10/31-11:18 No.3380
      ┃   ┃     ┗ Re^4: pst_tm3.awk +@ - konno 08/11/01-00:26 No.3382
      ┃   ┃      ┗ Re^5: pst_tm3.awk +@ - 文太 08/11/01-10:37 No.3383
      ┃   ┃       ┗ XPの標準出力をVZコンソールに - konno 08/11/01-21:51 No.3384
      ┃   ┃        ┗ Re: XPの標準出力をVZコンソールに - としき 08/11/02-10:25 No.3385
      ┃   ┃         ┣ toint29.exe!!! - 文太 08/11/02-12:39 No.3386
      ┃   ┃         ┃┣ Re: toint29.exe!!! - konno 08/11/02-16:02 No.3388
      ┃   ┃         ┃┃┗ Re^2: toint29.exe!!! - 文太 08/11/02-22:24 No.3392
      ┃   ┃         ┃┗ Re: toint29.exe!!! - としき 08/11/02-16:58 No.3389
      ┃   ┃         ┃ ┗ Re^2: toint29.exe!!! - としき 08/11/02-19:42 No.3391
      ┃   ┃         ┃  ┗ Re^3: toint29.exe!!! - 文太 08/11/02-22:25 No.3393
      ┃   ┃         ┗ Re^2: XPの標準出力をVZコンソールに - konno 08/11/02-15:37 No.3387
      ┃   ┃          ┗ Re^3: XPの標準出力をVZコンソールに - としき 08/11/02-17:18 No.3390
      ┃   ┃           ┗ Re^4: XPの標準出力をVZコンソールに - konno 08/11/04-00:51 No.3401
      ┃   ┃            ┗ Re^5: XPの標準出力をVZコンソールに - としき 08/11/04-22:50 No.3403
      ┃   ┃             ┗ Re^6: XPの標準出力をVZコンソールに - konno 08/11/06-01:21 No.3406
      ┃   ┗ Re^7:同じ XPでもいろいろ違いが - konno 08/10/26-02:20 No.3360
      ┃    ┗ Re^8:同じ XPでもいろいろ違いが - 文太 08/10/29-20:37 No.3373
      ┗ Re^3: SD,CF,ATA ベンチマーク - としき 08/10/24-00:28 No.3349
       ┗ Re^4: SD,CF,ATA ベンチマーク - 文太 08/10/24-00:51 No.3350
        ┗ Re^5: SD,CF,ATA ベンチマーク - としき 08/10/24-02:13 No.3351
         ┗ Re^6: SD,CF,ATA ベンチマーク - 文太 08/10/24-17:02 No.3352
          ┗ Re^7: SD,CF,ATA ベンチマーク - としき 08/10/24-19:41 No.3353
           ┗ Re^8: SD,CF,ATA ベンチマーク - 文太 08/10/24-20:58 No.3354
            ┗ Re^9: SD,CF,ATA ベンチマーク - としき 08/10/27-02:07 No.3363
             ┗ set /? (159行) - 文太 08/10/27-15:12 No.3365
              ┗ cmd /? (167行) - 文太 08/10/27-15:13 No.3366

(3344) 3344SD,CF,ATA ベンチマーク  投稿者:文太   2008/10/23(木) 00:13
   コメント数 1

 別スレッドにて失礼します。最後にお願いがありますので、心当たりのある
方は、よろしく。m(__)m

 以下、ベクタにあるディスク読み出し・書き込みベンチ計測ソフトBT.exe
の結果です。大容量メモリをPDAで使用中に、どれくらい重くなるのか、
というこが数字で知りたい(体感で納得できない)場合に有効かと思います。
 すべてモバでの計測です。

---512MB microSD---
A:\>BT 1024
Write 519.80 KBytes/Sec
Write 930.91 KBytes/Sec
Write 930.91 KBytes/Sec
平均 Write 736.69 KBytes/Sec

Read  239.25 KBytes/Sec
Read  239.25 KBytes/Sec
Read  242.08 KBytes/Sec
平均 Read  240.19 KBytes/Sec

---512MB CF---
A:\>BT 1024
Write 691.89 KBytes/Sec
Write 1034.34 KBytes/Sec
Write 1044.90 KBytes/Sec
平均 Write 890.43 KBytes/Sec

Read  265.97 KBytes/Sec
Read  265.97 KBytes/Sec
Read  262.56 KBytes/Sec
平均 Read  264.83 KBytes/Sec

---20MB ATA Flash---
A:\>BT 1024
Write 255.36 KBytes/Sec
Write 227.56 KBytes/Sec
Write 224.56 KBytes/Sec
平均 Write 235.04 KBytes/Sec

Read  211.57 KBytes/Sec
Read  212.01 KBytes/Sec
Read  212.01 KBytes/Sec
平均 Read  211.86 KBytes/Sec

---16MB Canon ---
A:\>BT 1024
Write 716.08 KBytes/Sec
Write 775.76 KBytes/Sec
Write 691.89 KBytes/Sec
平均 Write 726.24 KBytes/Sec

Read  244.98 KBytes/Sec
Read  245.56 KBytes/Sec
Read  248.54 KBytes/Sec
平均 Read  246.35 KBytes/Sec

---32MB Hagiwara---
A:\>BT 1024
Write 846.28 KBytes/Sec
Write 846.28 KBytes/Sec
Write 853.33 KBytes/Sec
平均 Write 848.62 KBytes/Sec

Read  255.36 KBytes/Sec
Read  255.36 KBytes/Sec
Read  255.36 KBytes/Sec
平均 Read  255.36 KBytes/Sec


=================================================
	512SD	512CF	20ATA	16Canon	32Hagi
Write	736.69	890.43	235.04	726.24	848.62
Read	240.19	264.83	211.86	246.35	255.36
=================================================

 書き出し(体感で目立つ)で、20MBが長い間愛されていた理由が分かりま
した。 読み出し(辞書引き)ではほとんど変わらないと言えますね。 やっぱり
microSD がかなり速かったようです。Vzでは、UFオプションで鬼金! イェイ!


 【お願い】実は、僕はメモリへのアクセス・スピードを知りたくてこのソフト
に辿り着いたのではないのです。だって、知っても諦めるしかないですから(ベ
ンチマークって、基本的にそういうものだとは思うのですが)。
 僕が本当にやりたかったのは、実行ファイルの速度測定です。
 たとえばこんな具合に。

>Here are my timings on gcc's source code,
>
>Both sed-only scripts: 4.3 sec
>sed+cat: 3.6 sec
>only sed /abc/i: 3.5 sec
>only cat -s: 0.1 sec

 これは某所で僕が  sed スクリプト添削以来をしたときに達人さんたちが(僕
をのけにして−−盛り上がっていただければ、そして添削していただければ依存
なしです、はい)していた会話の一部なのですが、スクリプトや実行ファイルの
測定結果です。
 これをDosでやりたいのですが、可能にしてくれるソフトってないでしょう
か。ベクターであたったのですが、どうもそれっぽいのがなくて。因みに上記は
UNIX での話のはずです。時間を計るのに使ったソフトは、もう前提になってる会
話のようでした。


      - No.3344 -    このTreeへ              [リストへもどる ] pre

(3344) 3345Re: SD,CF,ATA ベンチマーク  投稿者:としき   2008/10/23(木) 15:39
参照先:http://www.hinocatv.ne.jp/~toshiki/
    3344 番 文太 さんへのコメント    コメント数 1

>  すべてモバでの計測です。

前に、カードスロットの性能によって速度が変わる、という話がありましたよね。
最新のWindowsマシンで計測すると、もしかしたら大幅に異なった結果が出るかも
しれません。

>  書き出し(体感で目立つ)で、20MBが長い間愛されていた理由が分かりま

ごめんなさい、私にはこの数字からだけでは、20MBが愛された理由がわかり
ません。何か、他のファクターがあるのでしょうか?

>  僕が本当にやりたかったのは、実行ファイルの速度測定です。

いわゆる、プロファイラ、と呼ばれる種類のソフトを使います。
名著「ソフトウェア作法」では、profileに対して思いっきり素直に「輪郭」とい
う訳語が使われていて、これには馴染めませんでしたが、ま、そういうものです。
unixでは、メジャーかどうかは知りませんが、timexというコマンドを使えば測定
できる、という話を聞いたことがあります。もしかしたら、OSに標準で付いて
いるのかもしれません。

実行ファイル内部の関数毎の細かい数字が欲しいというのであれば別ですけど、
あるツールをある条件で動かした場合の速度を計る、というのであれば、簡単
にバッチファイルで

time
foo.exe > temp.$$$
time

というものを作れば十分に用が足りると思います。
もし、1回の実行速度が速すぎる、というのであれば、for でも使って100回
ループとか作ってやればよろしいでしょう。
自作のマクロやスクリプトの場合は、測定したいブロック毎に時間関係の出力ル
ーチンを組み込んでやれば、たとえばサブルーチン毎の測定も可能。具体例では
ないのですが、nifty:FGALDC/MES/15/#18233 前後で、誤ってこの関係のルーチン
を組み込んだままのマクロを提示しているのに、その内容の説明をサボってしま
っておしかりを受けている、なんていうシーンがありましたね。
 
      - No.3345 -    このTreeへ    コメント元:3344 へ    [リストへもどる ] pre

(3344) 3346Re^2: SD,CF,ATA ベンチマーク  投稿者:文太   2008/10/23(木) 17:40
    3345 番 としき さんへのコメント    コメント数 2

としきさん

 いつも、いつも知らないことを教えていただき感謝です。m(__)m

> 前に、カードスロットの性能によって速度が変わる、という話がありましたよね。
> 最新のWindowsマシンで計測すると、もしかしたら大幅に異なった結果が出るかも
> しれません。

 純粋に(?)カードの性能を知ろうというのであれば、違う条件でやると違う
結果が出て、よりデータが増えて…。
 なのですが、これらのカードはモバでしか使わないので、これはまあまあとい
うことで。

> ごめんなさい、私にはこの数字からだけでは、20MBが愛された理由がわかり
> ません。何か、他のファクターがあるのでしょうか?
>> =================================================
>> 	512SD	512CF	20ATA	16Canon	32Hagi
>> W	736.69	890.43	235.04	726.24	848.62
>> R	240.19	264.83	211.86	246.35	255.36
>> =================================================
>>  書き出し(体感で目立つ)で、20MBが長い間愛されていた理由が分かりま
>> した。

 思いっきし間違ってますね。ご指摘ありがとうございました。
 遅いんだ。テクノロジーの進歩に感謝。愛されていた(誤解されていた)理由
は、使い方ですね。ログ、辞書などのでかいファイルを入れることをまったくし
なかった=できなかったゆえの、使い方の違いだったんだ。辞書検索の遅さが僕
をワープロ的電子辞書に走らせました。検索結果をファイルに残すという向学心
がないとも言う…(これは嘘)。

> いわゆる、プロファイラ、と呼ばれる種類のソフトを使います。

 了解。

> 名著「ソフトウェア作法」では、profileに対して思いっきり素直に「輪郭」とい
> う訳語が使われていて、これには馴染めませんでしたが、ま、そういうものです。

 そういうものなのですかね。術語なんだから「プロファイラ」(profiler ??)と
でもしておけばいいのに。 そういえば大昔、EMSがらみで(DMPI だったかな?)
"paging"という単語が分からにゃい(文太)というのに、懐かしきDANNYさんと
としきさんに教えてもらいましたよね。m(__)m   術語は所詮意味が分からなければ
通じない、という話でした。それでも「輪郭」では余計に分からない…。

> time
> foo.exe > temp.$$$
> time

 これなんですが、

C:\>Command.com /cType toshi.bat
Command.com /cTime
Addtail2.exe <testk.log > temp.$$$
Command.com /cTime

C:\>Command.com /cType ss.bat
Command.com /cTime
Sed "" testk.log > temp.$$$
Command.com /cTime			(注)

 というので計測してみようと思ったわけです。(意地悪?)
 なのですが、

C:\>Toshi
現在の時刻は  17:13:43.89 です.
時刻を入力してください:			#ここでリターンを押すまでが
					#計測に入ってしまいますよね。
C:\>Addtail2.exe <testk.log > temp.$$$

現在の時刻は  17:13:46.31 です.
時刻を入力してください:

 このバッチではうまくないですよね。

(参考)
------------------------------------------------
C:\>time /?
システム時刻を表示または設定します。

TIME [/T | 時刻]

パラメータの指定がなければ、現在の設定が表示され、新しい時刻を入力できる
プロンプトになります。変更しない場合は、Enter キーを押してください。

コマンド拡張機能を有効にすると、TIME コマンドは、/T スイッチを
サポートするようになります。このスイッチを指定すると、現在の時刻
だけが表示され、新しい時刻を入力するためのプロンプトは表示されません。

C:\>time /T
17:22				#おい、単位が大雑把すぎるよ。
------------------------------------------------

 専用ソフトを探すしかありませんか? 知りませんか?
 Profiler 3.00は、パスカルのソースそのまんまでした。


(注)あのあたりでVzのメモアロが出るみたい。再現できたら報告を
試みます。やだなぁ。
 F03がぐちゃぐちゃになってる???

 念のためのvmap。どっかが変になってませんか>konnoさん?

0220 sys    1    3296  <config>
02EF sys    1     176  emm                        67
02FB sys    1    1248  himem
034A sys    1     352  atok8a
0361 sys    1   13984  atok8b                     10 16 60 CF D8 DE
06CC sys    5   17664  <config>
0B21 <--    1    3856  command                    2E
0C13        1     112  <free>
0C1B 0B21   1    5088  command (env)
0D5A <--    1   34720  dosx                       C4 FE
15D5 <--    1      48  vkeyc                      15
15D9 1A35   2    1376  command (env)
1631 <--    1    1648  vwx 1.08b -z2 -l6144 -x1 
1699 <--    1    3120  pansi
175D <--    1    3888  vz 1.60Q -z                1B 21 29
1851 1A35   1    1408  command                    EA
18AA <--    1    6304  kb16 JP,932,C:\WINDOWS\sy  09 2F
1A35 <--    1    3856  command                    22 23 24
1B27 <--    1  128704  キ 1.60Q -z                 E1 E5 E7 E9
3A94-9FFF   1  415392  <free>


      - No.3346 -    このTreeへ    コメント元:3345 へ    [リストへもどる ] pre

(3344) 3347Re^3: SD,CF,ATA ベンチマーク  投稿者:konno   2008/10/23(木) 23:12
    3346 番 文太 さんへのコメント    コメント数 1

>  このバッチではうまくないですよね。

たとえば、cr というファイルを作って、中身は、\n つまり、改行1個とします。
それをPATHの通ったところにおいて、BATのなかで、

TIME < CR

と指定すれば所定の結果を得られるでしょう。
COMMAND /C TIME
というように、COMMAND.COMをXPでの常駐VZで呼ぶとメモアロエラーになってしまう
と思います。

      - No.3347 -    このTreeへ    コメント元:3346 へ    [リストへもどる ] pre

(3344) 3348Re^4: SD,CF,ATA ベンチマーク  投稿者:文太   2008/10/23(木) 23:42
    3347 番 konno さんへのコメント    コメント数 1

konnoさん、即レスありがとうございました。うれじい。(T-T)

> たとえば、cr というファイルを作って、中身は、\n つまり、改行1個とします。
> それをPATHの通ったところにおいて、BATのなかで、
> TIME < CR
> と指定すれば所定の結果を得られるでしょう。

 こんなことができるんですね。DosというかDos窓も捨てたものじゃない。
 ヒデキ、感激ぃ〜。

> COMMAND /C TIME
> というように、COMMAND.COMをXPでの常駐VZで呼ぶとメモアロエラーになってしまう
> と思います。

 常識なの? いえ、たぶんご想像のとおり、command.com  /c はVzでコンソ
ールを取るために必要な処理で、実用的には、これらは素直に cmd.exe  にやっ
てもらっても不都合はないのです。でもねぇ。こんな風におさわがせしてるとき
しか真剣にVz(その他)研究をしない人なので、報告・実況中継したいわけな
のですよ…。

 でも、vz.defのエイリアスに

#if XP
t	Command.com /cType %1
d	Command.com /cDir %1
#endif

 なんて入れてしばらくになるのに(2年くらい)、あんなに分かりやすいメモ
アロは出なかったなぁ? 小文字の「command.co  /ctime」だと違いますでしょ
うか。大文字にして見やすくしたのは最近なのですが。

 とにかく、例のtoshi.bat(としきさん作成改行付加addtail2.exe使用)と
ss.bat(sed使用)では、じゃーん、

toshi.bat	0.28秒
ss.bat		0.49秒

 という結果でした。 やっぱ実行ファイルなんだ。行単位で読み込む sed の方
が速いだろうと思ったのだけど。
 くやしいなぁと、 sed で「最終行」を指定する「$」を使ったスクリプトを今
考えましたが、駄目ですね。パターンスペースに改行がないのだから、判定不能
だ。負けた。

因みにtestk.logという対象ファイルは、

TESTK    LOG   3030620 08-10-23   17:07

 というサイズの金野さんのところのログでした(ちょっと古い)。 「来て来て、
konnoヘルプ」な呪文が見事に効いてしまったみたい。うふ。ありがとうございま
した。m(__)m

 よし、これでスクリプトの速度が測れるぞ! \(^_^)/

      - No.3348 -    このTreeへ    コメント元:3347 へ    [リストへもどる ] pre

(3344) 3355Re^5: SD,CF,ATA ベンチマーク  投稿者:konno   2008/10/25(土) 01:16
    3348 番 文太 さんへのコメント    コメント数 1

>  なんて入れてしばらくになるのに(2年くらい)、あんなに分かりやすいメモ
> アロは出なかったなぁ? 小文字の「command.co  /ctime」だと違いますでしょ
> うか。大文字にして見やすくしたのは最近なのですが。

常駐VZでSW3の場合、大文字でCOMMAND.COMを呼ぶと、VZの領域が分断されるようで、
すぐにメモアロエラーになることがあるようです。こういう場合はかえって小文字
のほうがいいでしょう。

XPがSP3になってから、COMMAND.COMとVZの相性がさらに悪化したような気がします。
気のせいかもしれませんが。でもVistaよりはまだましか。

> toshi.bat	0.28秒
> ss.bat		0.49秒

この1/100秒台の桁はあてにならないようです。time コマンドを連続実行させると
一定にならず、バラバラになりますね。

標準コマンドで使えるのがもう一つありました。実は最初にこれを思いついたの
ですが、使い勝手が悪そうだったので、パスしてました。(^^; BATで、

PROMPT $t $g
echo >nul
実行コマンド
echo >nul

こんなのはどうでしょう。元に戻すのは、
PROMPT $p$g
かな。



      - No.3355 -    このTreeへ    コメント元:3348 へ    [リストへもどる ] pre

(3344) 3356Re^6: SD,CF,ATA ベンチマーク  投稿者:文太   2008/10/25(土) 11:51
    3355 番 konno さんへのコメント    コメント数 2

konnoさん

 なるほどプロンプトの時間を使うのですね。そっちならさすがにコンソール
参照できるなぁ…。

 メモアロな件、ありがとうございました。そうか、sw4 が推奨なんですよね。

> ■ スワップモード「SW4」
> -----------------------------
>  従来、「SW3」で常駐した時、SYMDEB.EXEを起動すると、SYMDEBの管理メモリの
> 先頭部に、VZ.COMをロードしてしまいました。
>  オプション「SW4」を指定すると、アプリケーション上のコマンドラインのフックを
> 抑止しますので、この不具合を解消できます。
(vz1.6\readme.docより)

 「よしsymdeb!」な頃に一度「SW4の山彦文太」になったはずだったのに、
なぜかsw3になってました。???
 ま、command /cは、小文字にしておきます。m(__)m

> XPがSP3になってから、COMMAND.COMとVZの相性がさらに悪化したような気がします。
> 気のせいかもしれませんが。でもVistaよりはまだましか。

 「気のせい」と仰っているので特定できないのでしょうが、どんな感じででし
ょうか。「こんな感じ」程度お教えいただけれと、注意が向いて「ほんとだ」と
か「そうでもないみたい」と認識できる可能性が高まるのですけれど。

------------------------------------------------------------------------

 はい、100回回しました。やっぱりaddtail2.exe(by としき)使用の
toshiki.batの勝利。
 たぶん、このFORの使い方はXPでしかできないでしょう。(バッチからなので
setと違い−−やば−−、cmd的なforが使われてくれた模様。/l オプション)
純Dosだと

for %%I in (1,1,1,1,1)
 みたくして、5回回す、(1,1,1)で3回回す、ってやり方しかないものなのかしら?

C:\>command.com /ctype toshi.bat
ver |time
@echo off
for /l %%I in (1,1,100) do addtail2 <TESTK.LOG >temp.$$$
@echo on
ver |time

C:\>command.com /ctype ss.bat
ver |time
@echo off
for /l %%I in (1,1,100) do Sed "" testk.log > temp.$$$
@echo on
ver |time

C:\>command.com /ctype sss.bat		#serow版sed使用
ver |time
@echo off
for /l %%I in (1,1,100) do Oldsed "" testk.log > temp.$$$
@echo on
ver |time

toshi.bat	30.28秒
ss.bat		51.11秒
sss.bat		37.72秒		(表現力の弱さはあるが、やはりserow版は速い)

 メモアロが恐くて(感謝> konno さん)、しょうがないから cmd.exe に ver,
time を頼んだのですが、そうすると、実況中継が出来なくて面白くない。
 だいたい画面から数字を紙に書き出して手で計算するなんて、「ださださじゃ
ないかぁー+」(c)Taku Shimura って気は大いにする。


      - No.3356 -    このTreeへ    コメント元:3355 へ    [リストへもどる ] pre

(3344) 3359Re^7: SD,CF,ATA ベンチマーク  投稿者:文太   2008/10/25(土) 23:56
    3356 番 文太 さんへのコメント    コメント数 1

 夜中までしつこい奴です、まったく >文太。
 でも、ちっ、情けない、と比較的つよく思っていたのですね。

>  だいたい画面から数字を紙に書き出して手で計算するなんて、「ださださじゃ
> ないかぁー+」(c)Taku Shimura って気は大いにする。

 ださださを解消して、以下のようなバッチ(awkスクリプト呼び出しを含む)で、
割と汎用的に時間の計測ができます。これで、UNIXなtimexに対抗(おいおい)できる
環境にはなったわけです。イエイ!
 自分のためなのですが、カスタマイズ箇所のコメントを多めに入れてあります。

 追伸。(もちろん誰も興味ないのですが)前回のsed versionは無意味でした。
標準DOS用GNU sedでは、最終行の改行追加ができないからです。
 追伸2:割と偏愛しているlogos版は、やはりserow版より100回回して10秒弱
遅いですね。

--- toshi2.bat ---
@echo off
REM 全てルートディレクトリで処理・通信されるという前提
REM Lsed == Logos sed

ver |time >kek
rem Customize: COMMAND to be repeated follows 'do' below, customize!
rem 100 can be easily and conveniently changed to 50 for instance.
for /l %%I in (1,1,100) do addtail2 <TESTK.LOG >temp.$$$
ver |time >>kek
rem 掲示板用:パイプの後は繋げてください。
Lsed "/^現在の時刻/!d" kek | Lsed "s/^[^:]*:[^:]*://; s/ です.$//" |
 Jgawk -f pst_time.awk
@echo on

------------------
# pst_time.awk (passed time awk == measure 'process time' by awk)
# Don't use this at 11:55 PM or later; wait until the new day begins ;-)
#input format (1st line; starttime : 2nd line; endtime), like below
#13:09.50
#13:53.43
BEGIN { FS="[:.]"; }
NR == 1 { m=$1; s=$2; ss=$3; }
NR == 2 { m=$1-m; s=$2-s; ss=$3-ss;
	if (ss < 0) { ss+=100; s--; }
	if (s  < 0) { s+=60; m--; }
	}
END { 	if (m==0) { printf "%d.%d秒",s,ss }
	else	  { printf "%d分%d.%d秒",m,s,ss }
}
------------------

      - No.3359 -    このTreeへ    コメント元:3356 へ    [リストへもどる ] pre

(3344) 3361こっそり差し替え(pst_time.awkなど)  投稿者:文太   2008/10/26(日) 11:54
    3359 番 文太 さんへのコメント    コメント数 2

--- toshi2.bat ---
@echo off
REM FORコマンドゆえXP用。Dos用なら根性でFORをネストする(>_<)
REM 全てルートディレクトリで処理・通信されるという前提
REM Lsed == Logos sed

ver |time >kek
rem Customize: COMMAND to be repeated follows 'do' below, customize!
rem 50 can be easily and conveniently changed to 30 for instance.
for /l %%I in (1,1,50) do addtail2 <TESTK.LOG >temp.$$$
ver |time >>kek
Lsed "/^新しい時刻/d; s/^[^:]*:[^:]*://; s/ です.$//" kek | Jgawk -f pst_time.awk
@echo on

------------------------------------------
# pst_time.awk (passed time awk == measure 'process time' by awk)
# measure time max: 59 minutes. 深夜24時をまたがないこと。
#input format (1st line; starttime : 2nd line; endtime), like below
#13:09.50
#13:53.43
BEGIN { FS="[:.]"; }
NR == 1 { m=$1; s=$2; ss=$3; }
NR == 2 { m=$1-m; s=$2-s; ss=$3-ss;
	if (ss < 0) { ss+=100; s--; }
	if (s  < 0) { s+=60; m--; }
	if (m  < 0) { m+=60; }
	}
END { 	if (m==0) { printf "%02d.%02d秒",s,ss }
	else	  { printf "%02d分%02d.%02d秒",m,s,ss }
}
------------------------------------------

 50回回しを10回やってみた結果。1〜2秒の誤差があり、50回ぐらいは
回してやり、それを10回程度やって平均をとる必要がある模様。平均をとる
スクリプトはさすがに書きません。
 遅いawkでも10秒実行時間を短縮するより、2時間の開発時間が15分で済
むよう自分の頭を鍛えるほうが先決。XPもバッチもawkも責めてはいけない>自分。
 事実、バッチ、スクリプトをいじっている2時間は楽しく、下で待たされていた
15秒、20秒の長かったこと、長かったこと。「き、機械に使われている…。
ださださじゃないかー」と。楽しい人生、これが大切。

C:\>toshi2		# addtail2.exe used
15.42秒
C:\>toshi2
14.83秒
C:\>toshi2
14.76秒
C:\>toshi2
15.44秒
C:\>toshi2
14.73秒
C:\>toshi2
14.89秒
C:\>toshi2
14.55秒		-
C:\>toshi2
14.84秒
C:\>toshi2
15.42秒
C:\>toshi2
15.57秒		+

C:\>ss2			#serow's sed used
18.94秒
C:\>ss2
19.20秒
C:\>ss2
19.00秒
C:\>ss2
19.27秒
C:\>ss2
19.16秒
C:\>ss2
20.72秒		+
C:\>ss2
18.56秒		-
C:\>ss2
20.06秒
C:\>ss2
18.99秒
C:\>ss2
18.70秒

      - No.3361 -    このTreeへ    コメント元:3359 へ    [リストへもどる ] pre

(3344) 3367FORのネスト付加@DOS  投稿者:文太   2008/10/27(月) 17:51
    3361 番 文太 さんへのコメント    コメント数 1

 ちょいとお疲れのご様子で、メモ・モード。

> REM FORコマンドゆえXP用。Dos用なら根性でFORをネストする(>_<)

>for %I IN (1,1) do for %%I IN (1,1) echo aaa
 で2*2で4回になるね、というつもりだったのですが、これ、純Dosでは
駄目でした。丁寧に「入れ子にできません」「cannot nest for」と教えて
くれました。XP(cmd.exe)では上記のように繰り返されるCOMMANDの部分
をバッチのように扱い「%%I」とするといけます。
 純Dosではたぶんコマンドラインの長さの制限までいけるのじゃないか
な、という感触(実験してません)。36回まで回ることを確認しました。
IN (0,1,2,...9,a,b,...z)のようにして。

      - No.3367 -    このTreeへ    コメント元:3361 へ    [リストへもどる ] pre

(3344) 3368Re: FORのネスト付加@DOS  投稿者:としき   2008/10/27(月) 23:10
参照先:http://www.hinocatv.ne.jp/~toshiki/
    3367 番 文太 さんへのコメント

>  ちょいとお疲れのご様子で、メモ・モード。

ご苦労様です。
できれば、重要な部分だけ抜き出して引用してほしかった、と思いつつ、でも、
全部重要なのかも。

さて。

>  で2*2で4回になるね、というつもりだったのですが、これ、純Dosでは
> 駄目でした。丁寧に「入れ子にできません」「cannot nest for」と教えて

そういえばそんな制限があったような。すっかり忘れていました。
かつて、この制限を突破するために何をやったかというと、再帰。
いやぁ、今見ると、ものすごい事をやったなぁ、と我ながら驚いてしまう。
具体例はこちら。
http://homepage3.nifty.com/~toshiki/nifty/fgalts/mes12/02907.txt

>  純Dosではたぶんコマンドラインの長さの制限までいけるのじゃないか
> な、という感触(実験してません)。36回まで回ることを確認しました。

例えば、100個のファイルがあるディレクトリをカレントにして、

for %%i in (*.*) do echo aaa

とやってやれば、きっちり100回繰返してくれます。しないけど。

      - No.3368 -    このTreeへ    コメント元:3367 へ    [リストへもどる ] pre

(3344) 3370pst_tm3.awk +@  投稿者:文太   2008/10/28(火) 22:18
    3361 番 文太 さんへのコメント    コメント数 1

 すいません、一人遊びです。お疲れなのです。グロンサンなのです。

 ディスク・アクセスは時間がいっぱいかかる。じゃ、パイプを排除するのが一
番。というわけで、sed を止めて、awk だけに処理してもらうことにした。

---toshi3.bat---
@echo off
REM FORコマンド /l ゆえXP用。Dos用なら根性でFORを回せ。
REM 全てルートディレクトリで処理・通信されるという前提

ver |time >kek
rem Customize: COMMAND to be repeated follows 'do' below, customize!
rem 50 can be easily and conveniently changed to 30 for instance.
for /l %%I in (1,1,50) do addtail2 <TESTK.LOG >temp.$$$
ver |time >>kek
Jgawk -f pst_tm3.awk kek
@echo on
----------------

---pst_tm3.awk
# pst_time.awk (passed time awk == measure 'process time' by awk)
# measure time max: 59 minutes. 深夜24時をまたがないこと。
#input: ver |time >kek; foo exe; ver |time >>kekのファイル
BEGIN { FS="[:.]"; }
	{
	m=$3; s=$4; ss=$5;
	getline;
	getline;
	m=$3-m; s=$4-s; ss=$5-ss;
	if (ss < 0) { ss+=100; s--; }
	if (s  < 0) { s+=60; m--; }
	if (m  < 0) { m+=60; }
	exit
	}
END { 	if (m==0) { printf "%02d.%02d秒",s,ss }
	else	  { printf "%02d分%02d.%02d秒",m,s,ss }
}
----------------
【結果】
toshi2.bat (average)
15.04秒
toshi3.bat (average)
15.14秒

 測定誤差の範囲内ですね、とほほ。 つまんない。awk、お前はそんなに遅いの
か。
 といいつつ、おお、awk スクリプトは進化したじゃない、と喜んでいるのです、
実は。でも、やっぱり、awkのほうがsedより、色々楽ですねぇ。

 としきさんの意図は読めました。 環境変数がうまく使えるなら「>」も「>>」
も  awk スクリプトの中だけでできるじゃない、ディスクアクセスなくなるじゃ
ない、って感じでしょうか。でも、ほんと? って感じ。setやcmdのお勉強、ひ
いては、cmd.exe環境とcommand.com環境のお勉強は、ま、いつかねぇ…。

 個人メモ(忘れないと思うけど):dirコマンドもXPでは拡張されてます。
どっかに、ファイルサイズの「,」を一生懸命削除してるsedスクリプトがありま
したけれど、>Dir /-C とすれば、桁区切り,が出力されません。Dos6.2にこの
オプションはありませんので、XPなら、です。W95以降は分かりません。
さすがにXP以外のWindows稼働マシンは押入れ以外にないです。

 追伸:としきさん、timex.exe作りませんか? なんでないの? ないほど
Dosを使っているかぎりまともな結果が出ないんだろうな、と今では想像して
おりますが、そもそも、そんなのあるだろうと思ってた。でも、izgrepの「iz」
さんとか、ちゃんと実行ファイルのベンチマークとってるのですけどねぇ???
何でやってたんでしょう? 「ver |time」なバッチ、なのか…。


      - No.3370 -    このTreeへ    コメント元:3361 へ    [リストへもどる ] pre

(3344) 3372Re: pst_tm3.awk +@  投稿者:文太   2008/10/29(水) 20:31
    3370 番 文太 さんへのコメント    コメント数 2

 ふらふらと。
 ファンクション・コールって2秒ずつってのは僕の聞き間違いでしたね(何の
話だったんだ?)ちゃんと(いちおう)1/100 まで返してくれるのですね。

=== Macro Tmp by Bunta ===;
* Macro
80 ^^"GET SYSTEM TIME"
        ax=$2c00,&i($21)
        &m("%02d:%02d:%02d.%02d",cx>>8,cx&$FF,dx>>8,dx&$FF)

*
--- interrup.lst ---
INT 21 - DOS 1+ - GET SYSTEM TIME
	AH = 2Ch
Return: CH = hour
	CL = minute
	DH = second
	DL = 1/100 seconds
Note:	on most systems, the resolution of the system clock is about 5/100sec,
	  so returned times generally do not increment by 1
	on some systems, DL may always return 00h
--------------------

 おお、できるじゃん。
 じゃ、というわけで、ナツメ社の『システムコール・ハンドブック』です。

--- timeb.asm ---
;p.148 をちょっとだけ改変
INCLUDE STDIO.H

GETTIME	MACRO
	mov	ah,2ch
	int	21h
	ENDM

	pmain
	gettime
	hex_bcd	ch,TIME
	hex_bcd	cl,MINUTE
	hex_bcd	dh,SECOND
	hex_bcd	dl,MSECOND
	print	TIME
	retms
TIME	db	?,?,':'
MINUTE	db	?,?,':'
SECOND	db	?,?,'.'
MSECOND	db	?,?,CR,LF,'$'
	pend
-----------------

 大昔(makedir.asmな頃)に書いておいたSTDIO.Hは以下。これがなかったら
やりませんでした。マクロ、偉大。(アセンブルするとき、下も同じディレクトリ
に入れておいてね。)

--- STDIO.H ---
; -----------------------------------------------------------------------
; *  s t d i o . h (スタンダードI/Oヘッダ)
; -----------------------------------------------------------------------
CR          EQU     0DH
LF          EQU     0AH

PSEG        MACRO                   ; プログラム開始
CODE        SEGMENT
            ASSUME  CS:CODE, DS:CODE, SS:CODE
            ENDM

PMAIN       MACRO                   ; プログラム開始2
CODE        SEGMENT
            ASSUME  CS:CODE, DS:CODE
            ORG     100H
START:
            ENDM
PEND        MACRO                   ; プログラムの終わり
CODE        ENDS
            END     START
            ENDM

RETMS       MACRO                   ;MS−DOSに戻る
            MOV     AH,4CH
            INT     21H
            ENDM

GETCHAR     MACRO                   ;1文字入力
            MOV     AH,1
            INT     21H
            ENDM

PUTCHAR     MACRO   ASC             ;1文字出力
            MOV     AH,2
            MOV     DL,ASC
            INT     21H
            ENDM

PRINT       MACRO   MSG             ;文字列の出力
            MOV     AH,9
            MOV     DX,OFFSET MSG
            INT     21H
            ENDM

INPUT       MACRO   CONBUF          ;文字列の入力
            MOV     AH,10
            MOV     DX,OFFSET CONBUF
            INT     21H
            putchar LF
            ENDM

NEWLINE     MACRO                   ;改行
            putchar CR
            putchar LF
            ENDM

HEX_ASC     MACRO   HEX,BUF         ;1バイトを2桁の16進数に
            LOCAL   BR1,BR2
            PUSH    AX
            PUSH    CX
            MOV     AL,HEX
            PUSH    AX
            AND     AL,0F0H
            MOV     CL,4
            SHR     AL,CL
            ADD     AL,'0'
            CMP     AL,'9'+1
            JC      BR1
            ADD     AL,7
BR1:        MOV     BYTE PTR BUF,AL
            POP     AX
            AND     AL,0FH
            ADD     AL,'O'
            CMP     AL,'9'+1
            JC      BR2
            ADD     AL,7
BR2:        MOV     BYTE PTR BUF+1,AL
            POP     CX
            POP     AX
            ENDM

CONV2       MACRO   HEX,BUF         ;2バイトを4桁の16進数文字に
            PUSH    AX
            MOV     AX,HEX
            hex_asc AH,BUF
            hex_asc AH,BUF+2
            POP     AX
            ENDM

HEX_BCD     MACRO   HEX,BUF         ;1バイトを2桁の10進文字に
            PUSH    CX
            MOV     AL,HEX
            XOR     AH,AH
            MOV     CL,10
            DIV     CL
            ADD     AL,'0'
            MOV     BYTE PTR BUF,AL
            ADD     AH,'0'
            MOV     BYTE PTR BUF+1,AH
            POP     CX
            ENDM

ASCIIZ      MACRO   BUF,NUM         ;ASCIIZ文字列の完成
            PUSH    BX
            MOV     BL,NUM
            XOR     BH,BH
            ADD     BX,OFFSET BUF
            MOV     BYTE PTR [BX],0
            POP     BX
            ENDM
---------------

C:\>ml timeb.asm
C:\>lld timeb.obj
C:\>exe2com timeb.exe
C:\>command.com /cdir timeb.com
TIMEB    COM       115 08-10-29   19:38

C:\>timeb
19:44:26.44

 これでパイプが2つ減った。

toshi2.bat (average)
15.04秒
toshi3.bat (average)
15.14秒
toshi4.bat (average) 	with timeb.com
15.13秒

 パイプがあるといっても常駐してるcommand.com相手に何をやっているのだか。
 あ、cmd.exeか。分かりません…。(-_-#)


      - No.3372 -    このTreeへ    コメント元:3370 へ    [リストへもどる ] pre

(3344) 3374Re^2: pst_tm3.awk +@  投稿者:文太   2008/10/29(水) 20:50
    3372 番 文太 さんへのコメント    コメント数 1

> toshi4.bat (average) 	with timeb.com
> 15.13秒
>  パイプがあるといっても常駐してるcommand.com相手に何をやっているのだか。
>  あ、cmd.exeか。分かりません…。(-_-#)

 あの、時間を出してから引き算をしてるので、ここで時間が縮まるわけがない
のですが…。あはははは。そういうば awk な時間や sed な時間もそうでした。
あはははは2。bat 全体の実行速度は気持ち上、速くなったのだ、ということで。
あはははは3。
 バッチ全体の速度を測定しないと>文太さん。あはははは4。疲れてる…。(-_-#)

      - No.3374 -    このTreeへ    コメント元:3372 へ    [リストへもどる ] pre

(3344) 3375TIMEX.awk (with new timeb.com)  投稿者:文太   2008/10/29(水) 23:19
    3374 番 文太 さんへのコメント    コメント数 1

 BEGIN{}の中では関数定義が使えないみたいでちょっと冗長な感じ…。
 でも、できたよん。timeb.comも最適化してあります(笑)。時間確認用
には使えなくなりました。「時」がなく、1/100秒の「.」区切り字が変更さ
れてます。普通の意味ではたいへん読みづらいです。
 因みに(個人メモです)、awkだけでは1/100秒が取れません。srand();srand()
でも、systime()でも、strftime()でも駄目。

-------------------------------------------------------
# timex.awk (>Jgawk -f timex.awk)
BEGIN{
# get starttime
	"timeb" |getline jikan1
	close("timeb")
	split(jikan1,tm,":")

##### exec COMMAND i times #####
	for(i=1;i<=50;i++)		#回数
		system("addtail2 <testk.log >tmp.$$$")		#コマンド
#		system("Oldsed \"\" TESTK.LOG >temp.$$$")	#コマンド

# get endtime
	"timeb" |getline jikan2
	close("timeb")
	split(jikan2,tmm,":")

# subtract & get time length
	ss = tmm[3]-tm[3]; s = tmm[2]-tm[2]; m = tmm[1]-tm[1]; 
	if (ss < 0) { ss+=100; s--; }
	if (s  < 0) { s+=60; m--; }
	if (m  < 0) { m+=60; }

# print the result
 	if (m==0) { printf "%02d.%02d秒",s,ss }
	else	  { printf "%02d分%02d.%02d秒",m,s,ss }
}
-------------------------------------------------------
-------------------------------------------------------
INCLUDE STDIO.H

GETTIME	MACRO
	mov	ah,2ch
	int	21h
	ENDM

	pmain
	gettime
	hex_bcd	cl,TIME_M
	hex_bcd	dh,SECOND
	hex_bcd	dl,MSECOND
	print	TIME_M
	retms
TIME_M	db	?,?,':'
SECOND	db	?,?,':'
MSECOND	db	?,?,CR,LF,'$'
	pend
-------------------------------------------------------

C:\>Jgawk -f timex.awk
12.47秒
C:\>Jgawk -f timex.awk
12.64秒
C:\>Jgawk -f timex.awk
12.47秒
C:\>Jgawk -f timex.awk
12.52秒

 たぶんバッチで50回回すより  awk のシステム関数を回すほうが速い、とい
うことなんでしょうね、たぶん…。

 疲れてるのによくやった>文太。
 うんにゃ、ビギナーズ・ラックが重なっただけだよ。寝よ、寝よ。


      - No.3375 -    このTreeへ    コメント元:3374 へ    [リストへもどる ] pre

(3344) 3376Re: TIMEX.awk (with new timeb.com)  投稿者:としき   2008/10/30(木) 10:51
参照先:http://www.hinocatv.ne.jp/~toshiki/
    3375 番 文太 さんへのコメント    コメント数 1

>  BEGIN{}の中では関数定義が使えないみたいでちょっと冗長な感じ…。

そりゃ、まぁ、関数の定義はBEGINの中ではできませんが。
別途定義した関数はBEGINの中でも使えるはずです。
と思ったんだけどなぁ。自信ない。
処理系によって違うとかあるかもしれない。
少なくとも、jgawkでは使用可能。

BEGIN{
print myfunc()
}

func myfunc(){
return 123
}

      - No.3376 -    このTreeへ    コメント元:3375 へ    [リストへもどる ] pre

(3344) 3377TIMEX2.awk  投稿者:文太   2008/10/30(木) 12:57
    3376 番 としき さんへのコメント    コメント数 1

# timex2.awk (>Jgawk -f timex2.awk); timeb.com, necessary.
BEGIN{
# get starttime in array by split(); [1]-[3]
	g_time(stt)

##### exec COMMAND i times #####
	for(i=1;i<=50;i++)					#回数
		system("addtail2 <testk.log >tmp.$$$")		#★コマンド

# get endtime in array
	g_time(edt)

# subtract & get time length
	ss = edt[3]-stt[3]; s = edt[2]-stt[2]; m = edt[1]-stt[1]; 
	if (ss < 0) { ss+=100; s--; }
	if (s  < 0) { s+=60; m--; }
	if (m  < 0) { m+=60; }

# print the result
 	if (m==0) { printf "%02d.%02d秒",s,ss }
	else	  { printf "%02d分%02d.%02d秒",m,s,ss }
}

function g_time(n,	jikan){
	"timeb" |getline jikan
	close("timeb")
	split(jikan,n,":")
	return n
}


C:\>Jgawk -f timex.awk		#last night version
12.74秒
C:\>Jgawk -f timex2.awk		#the newest (today) version with jimae func{}
12.63秒
C:\>Jgawk -f timex.awk
12.52秒
C:\>Jgawk -f timex2.awk
12.64秒
C:\>Jgawk -f timex.awk
12.90秒
C:\>Jgawk -f timex2.awk
12.47秒

 ま、違いは、ない、と言ってよいでしょう。
 しつこいなぁ、ここで違いは出るはずないし、出た違いはそういう意味じゃな
いって。では体感は? 違わないよー。
 ま、でも、関数定義、できちゃったということで。気持ち的に速い ???(^^ ゞ
{ }の位置がいけなかったようでした。m(__)m
 いつも、いつも、多謝>としきさん。じっつにドンピシャ、ピンポイントでし
た。m(__)m m(__)m m(__)m m(__)m


      - No.3377 -    このTreeへ    コメント元:3376 へ    [リストへもどる ] pre

(3344) 3381ddd.com(asm) by-product  投稿者:文太   2008/10/31(金) 23:16
    3377 番 文太 さんへのコメント    コメント数 1

 timebの副産物。多少見苦しいところあり。でも、とんちで解いた!
 マクロでやれよ。こっちは、ほんとに、は、はい。でも、それはつまらないもの。
 これなら、意味なくdirコマンドと同じく、意味なくdddしそうでしょ。
 もう思い残すことはない。バタッ。

;ddd.asm (not dasa-dasa-dasa but date-date-date)
;C:\>ddd
; 2008(平成20)年 10月 31日(金) 11:08:43 pm
; 90% from Asao Kasai, "Sys-Call Handbok," p.144, p.148

INCLUDE STDIO.H

spc	equ	20h

GETDATE	MACRO
	mov	ah,2ah
	int	21h
	ENDM
		; CX = year (1980-2099)		; DH = month
		; AL = day of week (00h=Sunday)	; DL = day
GETTIME	MACRO
	mov	ah,2ch
	int	21h
	ENDM
		; CH = hour	; CL = minute
		; DH = second	; DL = 1/100 seconds
	pmain
	getdate
	mov	bl,al		;get pos info from tbl
	xor	bh,bh
	add	bx,bx
	mov	ax,word ptr WEEKTBL[bx]	;store weekday
	mov	word ptr WEEKDAY,ax
	sub	cx,2000		;2008 -> 08 (w/o h == decimal)
	hex_bcd cl,YEAR
	add	cx,12		;+12 -> heisei (decimal, again)
	hex_bcd cl,GENGO
	hex_bcd dh,MONTH
	hex_bcd dl,DAY
	gettime
	hex_bcd	cl,MINUTE
	hex_bcd	dh,SECOND
	cmp	ch,12
	ja	PM
	mov	NOON,'a'
	mov	NOON+1,'m'
	jmp	NANJI
PM:	sub	ch,12
	mov	NOON,'p'
	mov	NOON+1,'m'
NANJI:	hex_bcd	ch,HOUR
	print	FF
	newline
	retms

FF	db	spc,'2','0'
YEAR	db	?,?,'(','平','成'
GENGO	db	?,?,')','年',spc
MONTH	db	?,?,'月',spc
DAY	db	?,?,'日','('
WEEKDAY	db	?,?,')',spc
HOUR	db	?,?,':'
MINUTE	db	?,?,':'
SECOND	db	?,?,spc
NOON	db	?,?,'$'
WEEKTBL	db	'日','月','火','水','木','金','土'
	pend

      - No.3381 -    このTreeへ    コメント元:3377 へ    [リストへもどる ] pre

(3344) 3394blt.asm  投稿者:文太   2008/11/03(月) 01:06
    3381 番 文太 さんへのコメント    コメント数 2

万が一、XP+AVG環境でアセンブルできなかったら、僕と同じです。純ドスで
アセンブルしてもXPへはコピーさせてくれません。いったい何なの? 使えない
じゃないの。ウィルス名はTrivialだそうですが、何かのバグでしょう。copyright
の祟りか。

; BLT.asm (B's lettace and tomato--no bacon tonght, I'm on a diet.): B's LisT
; copyleft
;  for original codes come, 80% from ecb, 19% from A.Kasai, and 1% from Bunta.
; Change one byte and assemble it, and it's all yours, but don't claim a copy-
; right, not because there're copyright holders but because there is no other
; way to write it in Ms-Dos, of course, except codelabels & variablenames.
; Which, of course, does not show in the final .com file.
; To be sure, you don't have to change one byte.  It's still all yours.
; And please don't file me in court!
;
; LIST NORMAL & READONLY FILES of current directory; no other info whatsoever.
; Use this in a batchfile, or for writing it.
; I cannot remember when I wanted this first.  I have wanted this for such
; a long time!

;Bits 	Description  in INT 21 AEh	(Table 01420) from Ralf
;5	archive		32
;4	directory	16
;3	volume label	8
;2	system		4
;1	hidden		2
;0	read-only	1
;			(your favorite combination. Add them,
;	& rewrite it onto * part. ml.exe & masm.exe accept decimal.)

INCLUDE STDIO.H

	pmain
	mov	ah,4eh
	mov	dx,offset FILE
	mov	cx,1h			;no directory but read-only OK *
	int	21h             	;FINDFIRST
MAIN:
	jc	BYEBYE
	call	DISP
	mov	ah,4fh
	int	21h             	;FINDNEXT
	jmp	MAIN
BYEBYE:
	retms
DISP:
	mov	ah,6			;-
	mov	si,offset 80h + 1Eh  ;DTA in PSP (starts at 80h, in 100h org)
	cld			     ;and found ASCIZ str = filename
 				     ;1Eh 13 BYTEs ASCIZ filename+extension
DISP_MAIN:
	lodsb
	cmp	al,0
	jz	DISP_END
	mov	dl,al			;-
	int	21h			;DIRECT CONSOLE OUTPUT
	jmp	DISP_MAIN
DISP_END:
	newline
	ret

FILE	db	'*.*',0
CODE	ENDS
	END	START

      - No.3394 -    このTreeへ    コメント元:3381 へ    [リストへもどる ] pre

(3344) 3395blt2.asm  投稿者:文太   2008/11/03(月) 12:12
    3394 番 文太 さんへのコメント

; BLT.asm (B's lettace and tomato--no bacon tonght, I'm on a diet.): B's LisT
; copyleft (possible copyright A.Kasai & edc)
; Next mornings sometimes bring you a miracle.
; Now you can assemble this at Win XP! (with stdio.h)
;
; >blt  (list normal & readonly files of currect directory, not directory etc)
; AAA
; ABC
; ABC.TXT

INCLUDE STDIO.H

	pmain
FILE	db	'*.*',0			;this used to cause alot of trouble
	mov	ah,4eh			;Gochya!
	mov	dx,offset FILE
	mov	cx,1h			;no directory but read-only OK *
	int	21h             	;FINDFIRST
MAIN:	jc	BYEBYE
	call	DISP
	mov	ah,4fh
	int	21h             	;FINDNEXT
	jmp	MAIN
BYEBYE:	retms
DISP:	mov	ah,6			;-
	mov	si,offset 80h + 1Eh  ;DTA in PSP (starts at 80h, in 100h org)
	cld			     ;and found ASCIZ str = filename
 				     ;1Eh 13 BYTEs ASCIZ filename+extension
DISP_MAIN:
	lodsb
	cmp	al,0
	jz	DISP_END
	mov	dl,al			;-
	int	21h			;DIRECT CONSOLE OUTPUT
	jmp	DISP_MAIN
DISP_END:
	newline
	ret

CODE	ENDS
	END	START

      - No.3395 -    このTreeへ    コメント元:3394 へ    [リストへもどる ] pre

(3344) 3396Re: blt.asm  投稿者:konno   2008/11/03(月) 13:32
    3394 番 文太 さんへのコメント    コメント数 1

> 万が一、XP+AVG環境でアセンブルできなかったら、僕と同じです。純ドスで
> アセンブルしてもXPへはコピーさせてくれません。いったい何なの? 使えない
> じゃないの。ウィルス名はTrivialだそうですが、何かのバグでしょう。

やってみましたが、EXEファイル生成時にAVGが警告して、失敗しますね。元ネタは
「アセンブラ入門」の練習問題の解答ですか。
http://www5c.biglobe.ne.jp/~ecb/assembler2/assembler10.html

> copyrightの祟りか。

案外そうだったりして。(^^; というのは半分冗談ですが、(^^;;
AVGは、ファイルの先頭部にこのバイナリパターンがあるかをチェックしている
ようですね。nop を挟み込んでも駄目でした。
;	mov	dx,offset FILE
	mov	si,offset FILE
	mov	dx,si
としたら大丈夫だったですが、すでに自己解決してますね。先頭にDATAを持ってくる
だけでよかったんですか。(++;

#まぁ、いきなりファイル検索から始まるプログラムなんて、ウイルスぐらい
でしょうから、練習問題の解答をそのまま使ったのが祟ってますね。(^^;

      - No.3396 -    このTreeへ    コメント元:3394 へ    [リストへもどる ] pre

(3344) 3397Re^2: blt.asm  投稿者:文太   2008/11/03(月) 16:27
    3396 番 konno さんへのコメント    コメント数 1

konnoさん

> やってみましたが、EXEファイル生成時にAVGが警告して、失敗しますね。元ネタは
> 「アセンブラ入門」の練習問題の解答ですか。
> http://www5c.biglobe.ne.jp/~ecb/assembler2/assembler10.html

 もちろん、そうです。 でも、ハンドルは「ecb」でしたね。間違えてた。祟り
だ。(T-T)

> AVGは、ファイルの先頭部にこのバイナリパターンがあるかをチェックしている
> ようですね。nop を挟み込んでも駄目でした。

 おお、さすが。そう考えそうやってみるのか(ってほど分かっているわけでは
ないのですけど… (^^;ゞ)。いえいえ、たぶん分かってます。

> ;	mov	dx,offset FILE
> 	mov	si,offset FILE
> 	mov	dx,si
> としたら大丈夫だったですが、すでに自己解決してますね。先頭にDATAを持ってくる
> だけでよかったんですか。(++;

 いえ、あれでは甘いようで、まだ悶々としていました。(AVGがいけないの
は、分かっていても…)
 いえ、いちおう書いておくと、大した使い方でなかったのでマクロを使わずに
全部書きだした asm ファイルでやったら、やっぱり引っかかってしまいまして。
DATAが先頭でもやっぱりダメだった。r86.exeでアセンブルしてみようと…。
そのあと七転び八起きに近いドタバタで嫌になってました。「動くのできたんだ
からいいじゃん。でも、気分が非常に悪い…」と。

> #まぁ、いきなりファイル検索から始まるプログラムなんて、ウイルスぐらい
> でしょうから、練習問題の解答をそのまま使ったのが祟ってますね。(^^;

 ま、祟りですね。警告さえ無視してしまったからなぁ。
 ウィルスって、いきなりファイル検索から始めるプログラムなんですかぁ。あ
るでしょう、そんなの。僕の切った貼ったマクロなんて、そんなのばっかだけど
なぁ。
#レベルが違う

 ただですね、あれがうまくいかないのの歴史は長いのですよ。たぶん1カ月前
にも同じところでひっかかり、それがAVGのせいだとさえ分からなかった。た
ぶん、その前は1年半くらい前??? でも、あれが欲しかった。このCXさえ
変えればいいのまで分かってるのに、なんでアセンブルだけできないんだ、と。
コードなんてこれしかありえねぇんだぞ、って。で、昨日、ふとモバでやったら
できてしまった。ところが、コピーさえ許してくれない…。名前だって、1月前
から用意されてたのにぃ。言い訳になってない。ダメ、ダメ、ダメ。(c)wolfles

 さっきは、例の黒本を頼りにジャンプを short にしてみたりしたけど、なんだ、
全く変わらないじゃないか…とか。

 すっごく助かりました。ありがとうございます。
 ほんと、欲しかったのですよ、この仕事してくれるツール。dir と sed では、
いちいちOSのヴァージョンで違うし、ダサダサだし。実は ddd も。timexは、
お勉強。
 ddd,to、bltと収穫だぁ。copyright の神様、怒らないでね。ガッツ
ありますから。


 これも書いちゃえ(祟られるぞ)。
 引用です。『We Love Vz Editor II』, p.194

 「VZのマクロにも、ほとんどウラ技と呼んでもいいような危ない機能がいく
つか隠されています。そして、これらを会得して初めて、VZのマクロを制覇し
たといえるでしょう。しかしその道のりは、前章で手とり足とり説明してきたよ
うな甘っちょろいものではありません。Cを修得している必要はいうまでもあり
ません。 付属するソースの MACRO.ASM と EXPR.ASM 程度は読んでいてあたりま
えです。作ったマクロの数が 20 や 30 ではまだまだです。「努力」と「根性」、
これがすべてです。」                     (兵藤嘉彦)

 ですって。がんばりますよ、使わせてもらいますよ、c.mos様。最近、ほんとに
神様みたいに思えてきた…。一生つき合うのか…。

 例の衝動買い週間のときに、買ってしまってました…。定価\2300。売価500円く
らいだったかな。ま、それほど読むところの多い本でもないのだけど、コレクター
なもんで。綺麗な本です。平成2年5月10日 改訂新版3刷。


      - No.3397 -    このTreeへ    コメント元:3396 へ    [リストへもどる ] pre

(3344) 3399Re^3: blt.asm  投稿者:konno   2008/11/04(火) 00:06
    3397 番 文太 さんへのコメント    コメント数 1

>  いえ、いちおう書いておくと、大した使い方でなかったのでマクロを使わずに
> 全部書きだした asm ファイルでやったら、やっぱり引っかかってしまいまして。
> DATAが先頭でもやっぱりダメだった。r86.exeでアセンブルしてみようと…。

??? DATAが先頭なら出来ましたよ。Win2000ですが。もしかして、obj ファイルが
残っていたのでは。これが残っていると、exeが更新されないので。それともXPだと
駄目なのかなぁ。今ちょっと空いてないので確認できないんです。(^^;

>  ウィルスって、いきなりファイル検索から始めるプログラムなんですかぁ。あ
> るでしょう、そんなの。

普通のプログラムなら必ず起動時メッセージがまず先にあるでしょう。逆にウイルスが
メッセージを出すわけないですからねぇ。(^^;

>  ただですね、あれがうまくいかないのの歴史は長いのですよ。たぶん1カ月前
> にも同じところでひっかかり、それがAVGのせいだとさえ分からなかった。た
> ぶん、その前は1年半くらい前???

げげ、そんな前から? (++; もっと早く書き込んでくれれば・・・


      - No.3399 -    このTreeへ    コメント元:3397 へ    [リストへもどる ] pre

(3344) 3404Re^4: blt.asm  投稿者:文太   2008/11/05(水) 12:50
    3399 番 konno さんへのコメント

konnoさん

> ??? DATAが先頭なら出来ましたよ。
 すいません、どうしても事態が再現できなくなってしまいました。つまり、う
まくいってしまうのです。ま、いっか。すいませんです。

> 普通のプログラムなら必ず起動時メッセージがまず先にあるでしょう。逆にウイルスが
> メッセージを出すわけないですからねぇ。(^^;
 なるほど。僕はDATAがたまたま出すアドレスがものすごい低い確率でウィ
ルス的コードと一致してしまったと推測して、移動させたのです。だって、あれ
はほんとにあれ以外書きようのないプログラムで、それが引っかかったわけです
から。
 でも、金野さん、お見事。&多謝。

> >  ただですね、あれがうまくいかないのの歴史は長いのですよ。
> げげ、そんな前から? (++; もっと早く書き込んでくれれば・・・
 書いたことに嘘はないのですが、自分の欲望が誇張されてるかな。Vzマクロ
でもできる(ねこさんのところにサンプルもある)のに、書かなかったのだから
(ネストが不必要に深いのですが、でも、マクロじゃなく .com が欲しかった)。
それで(も)、あれ、欲しかった。ずっとずっと欲しかった。ただレベル低すぎ
て(アセンブラが仕事してくれるだけで嬉しい)、質問も…。プロジェクトが次
から次ぎに出てくるのもあるなぁ…。
 ありがとうございました。次から素直に訊いてしまいます。m(__)m


      - No.3404 -    このTreeへ    コメント元:3399 へ    [リストへもどる ] pre

(3344) 3379Re^2: pst_tm3.awk +@  投稿者:konno   2008/10/31(金) 07:34
    3372 番 文太 さんへのコメント    コメント数 1

>  ファンクション・コールって2秒ずつってのは僕の聞き間違いでしたね

これはファイルのタイムスタンプが2秒単位ということではないですかね。

> --- timeb.asm ---
> ;p.148 をちょっとだけ改変

着実に進化していますね。(^_^)
私はやっとC++でHello.exeを作りました。(^^;
XPマシンならtimeb.comでもVZマクロのファンクションコールでもほとんど変わらない
ような気がします。(^^;

      - No.3379 -    このTreeへ    コメント元:3372 へ    [リストへもどる ] pre

(3344) 3380Re^3: pst_tm3.awk +@  投稿者:文太   2008/10/31(金) 11:18
    3379 番 konno さんへのコメント    コメント数 1

konnoさん

 微妙に話がずれているみたいで…。

> XPマシンならtimeb.comでもVZマクロのファンクションコールでもほとんど変わらない
> ような気がします。(^^;

 でも、バッチからもawkからも、Vzマクロは呼べないんですよぉ。
そういう意味なんです。

      - No.3380 -    このTreeへ    コメント元:3379 へ    [リストへもどる ] pre

(3344) 3382Re^4: pst_tm3.awk +@  投稿者:konno   2008/11/01(土) 00:26
    3380 番 文太 さんへのコメント    コメント数 1

>  でも、バッチからもawkからも、Vzマクロは呼べないんですよぉ。

だからぁ、VZマクロからテスト.exeを呼んで、時間計測をするということですよ。
何か勘違いしてるかなぁ。

      - No.3382 -    このTreeへ    コメント元:3380 へ    [リストへもどる ] pre

(3344) 3383Re^5: pst_tm3.awk +@  投稿者:文太   2008/11/01(土) 10:37
    3382 番 konno さんへのコメント    コメント数 1

konnoさん

> だからぁ、VZマクロからテスト.exeを呼んで、時間計測をするということですよ。
> 何か勘違いしてるかなぁ。

 してません。「そういえばVzマクロのほうに計測させればいいんだ」とか昨
晩、ようやく思いついていました。そう仰ってもらっていると気づかずに…。相
当いってしまっているみたいですねぇ。失礼いたしました。


      - No.3383 -    このTreeへ    コメント元:3382 へ    [リストへもどる ] pre

(3344) 3384XPの標準出力をVZコンソールに  投稿者:konno   2008/11/01(土) 21:51
    3383 番 文太 さんへのコメント    コメント数 1

>  してません。「そういえばVzマクロのほうに計測させればいいんだ」とか昨
> 晩、ようやく思いついていました。そう仰ってもらっていると気づかずに…。相
> 当いってしまっているみたいですねぇ。失礼いたしました。

文太さん、相当お疲れのようですね。ゆっくりいきましょう。(^^;

ところで話が変わりますが、いい物を見つけました。
toint29 : 標準入力からのデータをint 29h(コンソール出力)に振り向ける
http://www.vector.co.jp/soft/dos/hardware/se036407.html

主にNT, OS/2上でのVzのコンソールファイル用。
Windows NTやOS/2のDOS窓の画面出力はint 29hを経由していないため、
Vzエディタの子プロセス上での出力結果の取込が働かず不便である。
しかし、このプログラムを以下の例のようにコマンドライン最終段に
指定すれば、その出力結果についてはコンソールファイルへの取込が
可能となる。

    例:
      C:\>dir |toint29

ということで、XPのコマンドラインで32ビットなコマンドでもVZのコンソールに直接
出力できます。コマンド名が長いのはRENすればいいし、これは便利です。(^_^)

      - No.3384 -    このTreeへ    コメント元:3383 へ    [リストへもどる ] pre

(3344) 3385Re: XPの標準出力をVZコンソールに  投稿者:としき   2008/11/02(日) 10:25
参照先:http://www.hinocatv.ne.jp/~toshiki/
    3384 番 konno さんへのコメント    コメント数 2

> ところで話が変わりますが、いい物を見つけました。
> toint29 : 標準入力からのデータをint 29h(コンソール出力)に振り向ける

これってそういうものだったんだ。
大昔からアーカイブは取得していたのですが、ファイルリストを見てもドキュメ
ントが同梱されていなかったので、そのままほったらかしにしていたのでした。
あらためてソースを読んだら、コメントにきちんと明記してありましたね。

そのうち使ってみましょう。

      - No.3385 -    このTreeへ    コメント元:3384 へ    [リストへもどる ] pre

(3344) 3386toint29.exe!!!  投稿者:文太   2008/11/02(日) 12:39
    3385 番 としき さんへのコメント    コメント数 2

>       C:\>dir |toint29
>     bugs:
>     ・入力をバッファリングしてないので遅い
>     ・TABを展開していない
	(toint29.cより)

 「TABを展開しない」とは?

---abcd.txt---
aaa <tab> bbb <tab> ccc
--------------

C:\>type abcd.txt |toint29
aaa@bbb@ccc			#@はちょっと違うけど

ここで(Vz常駐です)、\[ESC]、じゃーん、

C:\>type abcd.txt |toint29
aaa <tab> bbb <tab> ccc

 やるじゃん! すごい! 欲しかったのよ、これ。ずぅーと、ずぅーと欲しか
ったの。Vz以外の楽な方向(コンソール・アプリ)で問題を解決したがるタイ
プなので。m(__)m
 ※「TABを展開しない」が「スペースに展開しない」を意味するなら、このま
まのほうがいいじゃん。


 すぐさまto.exeにリネーム。
C:\>type abcd.txt |to
aaa@bbb@ccc			#やりぃ!

 更に
C:\>dir c:\bin\to.exe |to
1996 05 20  02:38             2,300 TO.EXE

 こ、こんな大昔から…。

 よくぞ見つけてくれました! ぼ、ぼくぅは〜幸せだなぁ。>konnoさん
 m(_B_)m m(_B_)m m(_B_)m

--- toint29.c ---
/*  (c) ataru  */

#include <io.h>
#include <fcntl.h>

void dispchar(int c)		/* ここが関数, asm連係 */
{
	_asm {
		mov ax, c
		int 29h
	}
}

int main()
{
	unsigned char c;
	setmode(0, O_BINARY);	/* これがキモなんだろう。? */
	while (read(0, &c, 1)) {
		dispchar(c);	/* ここで呼んでる */
	}
	return 0;
}
 こ、これだけ…。でも、す、すごすぎる。

(参考、笑&汗)
--------D-29---------------------------------
INT 29 C - DOS 2+ - FAST CONSOLE OUTPUT
	AL = character to display
Return: nothing
	BX may be destroyed by some versions of DOS 3.3
Notes:	automatically called when writing to a device with bit 4 of its device
	  driver header set (see also INT 21/AH=52h)
	COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
	  vector and assume that ANSI.SYS is installed if the segment is larger
	the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
	the default handler under DESQview 2.2 understands the <Esc>[2J
	  screen-clearing sequence, calls INT 10/AH=0Eh for all others
SeeAlso: INT 21/AH=52h,INT 2F/AX=0802h,INT 79"AVATAR.SYS"

C:\LSI>lcc TOINT29.C
TOINT29.c 22: '_asm' undefined
TOINT29.c 22: syntax error near '{'
TOINT29.c 23: 'mov' undefined
TOINT29.c 23: syntax error near 'ax'
TOINT29.c 23: 'ax' undefined
TOINT29.c 24: syntax error near 'int'
TOINT29.c 24: syntax error near 'int'
TOINT29.c 24: bad number '29h'
TOINT29.c 25: Warning: useless expression
TOINT29.c 31: Warning: function 'setmode' undefined -- assumed to be int

 試食版では色々足りないみたい…。

      - No.3386 -    このTreeへ    コメント元:3385 へ    [リストへもどる ] pre

(3344) 3388Re: toint29.exe!!!  投稿者:konno   2008/11/02(日) 16:02
    3386 番 文太 さんへのコメント    コメント数 1

>  やるじゃん! すごい! 欲しかったのよ、これ。ずぅーと、ずぅーと欲しか
> ったの。Vz以外の楽な方向(コンソール・アプリ)で問題を解決したがるタイ
> プなので。m(__)m

だいぶ前に見つけてはいたんですが、目的と違っていたもので(^^;;(ぉぃ)
これの常駐型が欲しかったんですが、必要な時だけ指定すればいいので、
この方が良かったのかも。(^^;

>  ※「TABを展開しない」が「スペースに展開しない」を意味するなら、このま
> まのほうがいいじゃん。

そうですね。タブはタブのままのほうが良い場合が多いですしね。

>  すぐさまto.exeにリネーム。
> C:\>type abcd.txt |to

おお、これは良いネーミング。いただきます。(^_^)

> C:\>dir c:\bin\to.exe |to
> 1996 05 20  02:38             2,300 TO.EXE
>  こ、こんな大昔から…。
>  よくぞ見つけてくれました! ぼ、ぼくぅは〜幸せだなぁ。>konnoさん

隠し持っていたことに、若干の後ろめたさを感じていたりして。(^^;
作者は有名なanakataさんだったんですね。ん?何処かで聞いたような名前(^^;

>  試食版では色々足りないみたい…。

私もTC201で(初めて)やってみました。(^^;
TC は統合環境版なんですね。私が使っているTB(TurboBasic)とおんなじだ。
コマンドライン版はTCCですね。
で、これもやっぱりエラーになります。インラインアセンブルがTASMなので、
これでは出来なさそうですね。

      - No.3388 -    このTreeへ    コメント元:3386 へ    [リストへもどる ] pre

(3344) 3392Re^2: toint29.exe!!!  投稿者:文太   2008/11/02(日) 22:24
    3388 番 konno さんへのコメント

konnoさん、ま、結果オーライということで(まだ幸福モード)。

> だいぶ前に見つけてはいたんですが、目的と違っていたもので(^^;;(ぉぃ)
> これの常駐型が欲しかったんですが、必要な時だけ指定すればいいので、
> この方が良かったのかも。(^^;

 うーん、常駐まで欲張らなくても、と思いますが…。もちろん、止めませんし
完成の暁には使わせてもらうのにやぶさかではありませんけれど…。
 もちろん、すごく不便だったのですが(僕はTS的テキスト処理が好きだった
りするし)、それでもけっこう慣れるものですよね。なので、コンソールの完全
参照(純Dos状態に同じ)は、今や欲張りとバーを下げてしまっているわけで
toint29.exeですっかり幸せなのです

> >  すぐさまto.exeにリネーム。
> おお、これは良いネーミング。いただきます。(^_^)
 ほんと? 良心が疼いているだけでしょ。
 dddといいけっこう酷い。 ただタイピングが少ないに越したことはないので、
こっちは奮発して2文字コマンド。

> 隠し持っていたことに、若干の後ろめたさを感じていたりして。(^^;
 ま、ま。僕はまだ幸福感の雲の中です。

> 私もTC201で(初めて)やってみました。(^^;
 としきさんのすご技が参考になってくれればと念じておりまする。


      - No.3392 -    このTreeへ    コメント元:3388 へ    [リストへもどる ] pre

(3344) 3389Re: toint29.exe!!!  投稿者:としき   2008/11/02(日) 16:58
参照先:http://www.hinocatv.ne.jp/~toshiki/
    3386 番 文太 さんへのコメント    コメント数 1

前のOS付属ツールのヘルプメッセージの時も思ったのですが。
引用量があまり多いと著作権侵害になりかねないかと。
あるいは、他者の権利と同様に自己の権利にも無頓着だ、と誤解されたりして。
#いや、まぁ、その

> 	setmode(0, O_BINARY);	/* これがキモなんだろう。? */

0番ファイルをバイナリーモードに設定する、ということですよね。
おそらく、ファイルの0番は標準入力であろう、とか、明示的なオープンがない
という事は暗黙的にオープンされているのであろう、など、色々なことが推測で
きます。

>  試食版では色々足りないみたい…。

試食版てLSI Cのことですよね。
これはインラインアセンブラの構文が異なります。
インラインアセンブラというのはC言語の拡張部分であって標準化の対象外です
から、言語処理系ごとに構文が異なります。
toint29自身はBorlandC(またはTurboC)で記述されているようですね。
確か、マイクロソフトのCの場合は、さらに異なった構文だったはず。
でも、LSI Cでコンパイル可能なソースにすることも簡単と思えるくらいのサイズ
のプログラムですよね。

      - No.3389 -    このTreeへ    コメント元:3386 へ    [リストへもどる ] pre

(3344) 3391Re^2: toint29.exe!!!  投稿者:としき   2008/11/02(日) 19:42
参照先:http://www.hinocatv.ne.jp/~toshiki/
    3389 番 としき さんへのコメント    コメント数 1

とりあえず、LSI C-86でコンパイルを通すだけならこれだけ。

/*#include <fcntl.h> 不要*/

/*↓マクロ化*/
char    _asm_a();
#define dispchar(c) \
    _asm_a("\nmov ax, dx\nint 29h",_asm_a,_asm_a,_asm_a,c);

int main()
{
    unsigned char c;
/*  setmode(0, O_BINARY); 削除*/
(以下略)

ただし、動くかどうかはわかりません。
生DOSで、とりあえずハングアップしない事だけは確認したけど。

      - No.3391 -    このTreeへ    コメント元:3389 へ    [リストへもどる ] pre

(3344) 3393Re^3: toint29.exe!!!  投稿者:文太   2008/11/02(日) 22:25
    3391 番 としき さんへのコメント

--------------------------------------
C:\>lcc TO2.C
lld @link.i

C:\LSI>dir |to2
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 5094-14F9 です

 C:\LSI のディレクトリ
 以下、略。
--------------------------------------

 というわけで、XPで仕事してくれましたよ。としき移植版。おお、あんなも
のがさらさら翻訳できるわけかぁ。すごいなぁ。(゜-゜)トホイメ
 ま、作者のコンパイル済みがあるので、わざわざこっちを使うこともないんで
すけどね。

 著作権については、ちょいと見解の相違かな。copyleftな人生観は他人の権利
をちゃんと守ります。

--- toint29.c ---
/*  (c) ataru  */
 って書いたし、本から写させてもらったら、ページ数も入れてるし。ガッツも
あるし(笑)。

#いや、まぁ、その、な、わけですが、2。
 議論なしね。m(__)m

 追伸:黒い『MS-DOS ハンドブック』が出てきました。 買った日のことをまざ
まざと思い出せます。たぶん旧8PCを買って、3ケ月以内。『勝手に MS-DOS』
読了後1カ月以内。「こんなもの読めるわけねぇだろー。要らねーよー。間違え
た〜。 生協で \3200 も払っっちまったよ〜〜。(注文での取り寄せでした。お
昼ご飯の直前でした。)財布からだよ〜。昼飯ぬきだ。今日は、俺、すごく不幸
だ」と思った。貧しくて飢えてて、財産といえるのはガッツだけ(もちろんそん
なもの、当時は財産に勘定されるわけがない)。しかし、こいつをついに開くと
きが来たか。すっかりじいさんだ。
 あ、もちろん、MS-DOS ver.2.0 対象のものです。


      - No.3393 -    このTreeへ    コメント元:3391 へ    [リストへもどる ] pre

(3344) 3387Re^2: XPの標準出力をVZコンソールに  投稿者:konno   2008/11/02(日) 15:37
    3385 番 としき さんへのコメント    コメント数 1

> これってそういうものだったんだ。
> 大昔からアーカイブは取得していたのですが、ファイルリストを見てもドキュメ
> ントが同梱されていなかったので、そのままほったらかしにしていたのでした。

私もだいぶ前に落としてたんですが、目的が、ソースを参考にして、常駐型の
コンソール取り込みをやりたいと思っていた物で、こんなに便利に使えるとは
思ってもいませんでした。(^^;

で、32ビット常駐コンソールアプリのほうは未だ挫折中ですが、としきさんなら
これが出来そうですよね。(^^; やってみませんか? (^^;

      - No.3387 -    このTreeへ    コメント元:3385 へ    [リストへもどる ] pre

(3344) 3390Re^3: XPの標準出力をVZコンソールに  投稿者:としき   2008/11/02(日) 17:18
参照先:http://www.hinocatv.ne.jp/~toshiki/
    3387 番 konno さんへのコメント    コメント数 1

> で、32ビット常駐コンソールアプリのほうは未だ挫折中ですが、としきさんなら
> これが出来そうですよね。(^^; やってみませんか? (^^;

出来ませんからしません。(^.^;
32ビット常駐コンソールアプリなんて、作ろうと思ったこともありません。

      - No.3390 -    このTreeへ    コメント元:3387 へ    [リストへもどる ] pre

(3344) 3401Re^4: XPの標準出力をVZコンソールに  投稿者:konno   2008/11/04(火) 00:51
    3390 番 としき さんへのコメント    コメント数 1

> 出来ませんからしません。(^.^;
> 32ビット常駐コンソールアプリなんて、作ろうと思ったこともありません。

そ、そんなつれない・・・残念、釣れなかったか。(^^;
toint29のようなルーチンをコールバック関数に仕込むだけかと思ったんですが。
そんなに簡単なわけないですよね。参考になりそうなサイトはあるんですが、
結構敷居が高そうです。(++;

      - No.3401 -    このTreeへ    コメント元:3390 へ    [リストへもどる ] pre

(3344) 3403Re^5: XPの標準出力をVZコンソールに  投稿者:としき   2008/11/04(火) 22:50
参照先:http://www.hinocatv.ne.jp/~toshiki/
    3401 番 konno さんへのコメント    コメント数 1

> toint29のようなルーチンをコールバック関数に仕込むだけかと思ったんですが。

そうか、コールバック関数なんてものを使うのですね。
ということすらわかっていない人間なもので。

生DOSの場合だと、常駐ソフトを作る場合は、int21hのファンクションコール
等をフックする、というように作ります。でも、32ビットコンソールならば、
ファンクションコールなんてものは使わないと思っているのですよ。1文字表示
するにも、当然、WinAPI呼び出しを使うのだろうな、と。その場合、どうやって
呼び出しをフックするのだろう、と考えてしまうのですが、その考え方がそもそ
も間違っているんでしょうね。

> そんなに簡単なわけないですよね。参考になりそうなサイトはあるんですが、

そのサイト、教えていただけます?
サンプルソースが載っていれば見てみたいな、と思いまして。

ちなみに、私、向こう数週間で、Windows上で動くSNMPのトラップをあれやこれや
するソフトと、板塀のスクリプト改造と、UNIXのシェルスクリプトと、という感
じで、作りたいものはいっぱいあるのですが、なかなか能力が追いついていきま
せん。

      - No.3403 -    このTreeへ    コメント元:3401 へ    [リストへもどる ] pre

(3344) 3406Re^6: XPの標準出力をVZコンソールに  投稿者:konno   2008/11/06(木) 01:21
    3403 番 としき さんへのコメント

> そのサイト、教えていただけます?
> サンプルソースが載っていれば見てみたいな、と思いまして。

うう、どうやって検索したのか、見つかりません。申し訳ない。m(__)m
 
> ちなみに、私、向こう数週間で、Windows上で動くSNMPのトラップをあれやこれや
> するソフトと、板塀のスクリプト改造と、UNIXのシェルスクリプトと、という感
> じで、作りたいものはいっぱいあるのですが、なかなか能力が追いついていきま
> せん。

げげ、そんなにあるのでは、なおさら大変ですね。私は昔作ったプログラムも
直せなくなってきていて、もうだめぽ・・・
 
      - No.3406 -    このTreeへ    コメント元:3403 へ    [リストへもどる ] pre

(3344) 3360Re^7:同じ XPでもいろいろ違いが  投稿者:konno   2008/10/26(日) 02:20
    3356 番 文太 さんへのコメント    コメント数 1

>  なるほどプロンプトの時間を使うのですね。そっちならさすがにコンソール
> 参照できるなぁ…。

BATを直に実行すると、CMD.EXEが処理するので、コンソールには出ないですね。
ということは、command /c timer.bat という話ですね。
私の場合は、VZ.DEFのエイリアスに、
cm	command /c %1
と、登録しておいて、コマンドラインで
cm tt.bat
としてます。tt.batの中身は

PROMPT $t  .
echo >nul
test.exe
echo >nul

これで、メモアロエラーも出ないし、コンソールに出るし、出力後のプロンプトも
元のままです。しかし、このtt.batを直に実行した場合、自宅のXPHomeでは元の
プロンプトに戻るんですが、職場のXPproではプロンプトが時刻表示のままになって
しまいます。
普通に考えるとこっちが正常動作のようにも思えるんですが、BATの最後に
PROMPT $p$g
などとしても、効かないんですよね。なぜこんな違いがあるんでしょうね。

>  メモアロな件、ありがとうございました。そうか、sw4 が推奨なんですよね。
>  「よしsymdeb!」な頃に一度「SW4の山彦文太」になったはずだったのに、
> なぜかsw3になってました。???

XPではSW4で常駐すると、swapがうまくいかないようで、フリーメモリが減って
しまいます。結局XPではメモリの分断は解決できないようなので、SW3で小文字
か、非常駐で使うしかないんでしょうね。

>  「気のせい」と仰っているので特定できないのでしょうが、どんな感じででし
> ょうか。「こんな感じ」程度お教えいただけれと、注意が向いて「ほんとだ」と
> か「そうでもないみたい」と認識できる可能性が高まるのですけれど。

気のせいではないと思うんですが、もう忘れてしまっているので。(^^;
SP2のころはこんなにメモリの分断が起きなかったように思うんですよ。
SP3になって、大文字コマンドでスワップすると、そこに新たなcommand.com
が居座るようになったような気がするんです。SP2の環境があれば比較できる
と思うんですが・・・


      - No.3360 -    このTreeへ    コメント元:3356 へ    [リストへもどる ] pre

(3344) 3373Re^8:同じ XPでもいろいろ違いが  投稿者:文太   2008/10/29(水) 20:37
    3360 番 konno さんへのコメント

 色々な悩みその他があり、遅くなりました。m(__)m

> 私の場合は、VZ.DEFのエイリアスに、
> cm	command /c %1
> と、登録しておいて、

 これは賢い。いただきます。m(__)m

> としてます。tt.batの中身は
> PROMPT $t  .
> echo >nul
> test.exe
> echo >nul

 この話はとりあえずおいておきましょう。m(__)m

☆☆☆☆☆☆☆☆
> 結局XPではメモリの分断は解決できないようなので、SW3で小文字
> か、非常駐で使うしかないんでしょうね。
☆☆☆☆☆☆☆☆

 これが結論なんですね。了解しました。よく分かってないものですから、何度
も何度も同じ話を繰り返してしまいました。上の方針でいきます。SW3の小文
字派です。m(__)m

> 気のせいではないと思うんですが、もう忘れてしまっているので。(^^;
> SP2のころはこんなにメモリの分断が起きなかったように思うんですよ。
> SP3になって、大文字コマンドでスワップすると、そこに新たなcommand.com
> が居座るようになったような気がするんです。SP2の環境があれば比較できる
> と思うんですが・・・

 僕もさくっとSP3にしてしまって。うーん、詳細分かりませんが何かあった
らどうか相談にのってやってください。m(__)m

      - No.3373 -    このTreeへ    コメント元:3360 へ    [リストへもどる ] pre

(3344) 3349Re^3: SD,CF,ATA ベンチマーク  投稿者:としき   2008/10/24(金) 00:28
参照先:http://www.hinocatv.ne.jp/~toshiki/
    3346 番 文太 さんへのコメント    コメント数 1

>  このバッチではうまくないですよね。

厳密に測定しようとなると、おっしゃる通りですね。
私の場合、手がぽんぽんと2回続けてリターンを叩いてしまうので、1秒程度の
誤差で済むと思っています。100回とか1000回ループさせれば、1回あた
りの誤差は当然100分の1とか1000分の1になるわけですし。

あと、DOSのバージョンに依存するかもしれないのですが、昔は割と常套手段
だったらしいのが

ver | time

というもの。verコマンドの出力の改行をtimeコマンドに入力させる事で次の行に
遷移させる、というしくみです。少なくとも、PC-98のDOS6ではうまく動きます。

> (参考)

これ、OSは何でしょう?
噂によると、Win2k/XPでは、出力の表示形式をカスタマイズできるらしいのです
が、どうすればいいのかは知りませんし、そもそもガセかもしれません。

      - No.3349 -    このTreeへ    コメント元:3346 へ    [リストへもどる ] pre

(3344) 3350Re^4: SD,CF,ATA ベンチマーク  投稿者:文太   2008/10/24(金) 00:51
    3349 番 としき さんへのコメント    コメント数 1

としきさん

> 私の場合、手がぽんぽんと2回続けてリターンを叩いてしまうので、1秒程度の
> 誤差で済むと思っています。100回とか1000回ループさせれば、1回あた
> りの誤差は当然100分の1とか1000分の1になるわけですし。

 なるほどねぇ。すごいや。思いつきもつきませんでした。面白いです。m(__)m

> あと、DOSのバージョンに依存するかもしれないのですが、昔は割と常套手段
> だったらしいのが
> ver | time

 XPでも通りましたよ。すごい! 使えるもので工夫せよ、ですね。m(__)m
これは最初に思いついた人、すごいけど。

> > (参考)
> これ、OSは何でしょう?

 XPです。カスタマイズ法は…???
 ご存じのとおり、konnoさんの方法で結果が出せるようになりました。すごいなぁ
お二方。年季の入り方が違う。


      - No.3350 -    このTreeへ    コメント元:3349 へ    [リストへもどる ] pre

(3344) 3351Re^5: SD,CF,ATA ベンチマーク  投稿者:としき   2008/10/24(金) 02:13
参照先:http://www.hinocatv.ne.jp/~toshiki/
    3350 番 文太 さんへのコメント    コメント数 1

>  XPです。カスタマイズ法は…???

今のところ、噂はやっぱりガセのようです。
が、噂の出所のようなものは調べがつきました。以下、私の手元にXPマシンが
ないので直接確認はしていないという事は御了解いただくとして。

環境変数をセットする set というコマンドがあります。
新しいOSでは、このコマンドが随分と拡張されているらしいです。
それこそ、任意のフォーマットで日時を設定できるくらい。
でもって、環境変数の表示は echo コマンドで可能。
これは、古いDOSから変わっていない部分ですね。

この辺の技術を使うと、以下のようなバッチファイルが書けるらしい。

set starttime=%d%t
rem      ↑この辺は適当、正確なところは調べて下さい
foo.exe > temp.$$$
set endtime=%d%t
echo starttime
echo endtime

こういう事で、任意のフォーマットで日時が表示できる、というのが伝聞の過程
で、timeコマンドの出力がカスタマイズできる、ということに変化してしまった
らしいです。

      - No.3351 -    このTreeへ    コメント元:3350 へ    [リストへもどる ] pre

(3344) 3352Re^6: SD,CF,ATA ベンチマーク  投稿者:文太   2008/10/24(金) 17:02
    3351 番 としき さんへのコメント    コメント数 1

としきさん

 所期の目的は達したので、深追いなくていいのですが…。

> 環境変数をセットする set というコマンドがあります。
> 新しいOSでは、このコマンドが随分と拡張されているらしいです。
> それこそ、任意のフォーマットで日時を設定できるくらい。

 えーと、でも、setコマンドが日時データを取得できるわけではないですよね。

> この辺の技術を使うと、以下のようなバッチファイルが書けるらしい。
> set starttime=%d%t

set starttime=%d%%t%
みたく、%環境変数%でなく???(こんな文字列の連結みたいのは駄目でした。)

>echo %vzsym%
は効いたけど…。

 『ポケットリファレンス』にはないみたいです。

 でも、「ver | time」は、たいへん気に入りました。


      - No.3352 -    このTreeへ    コメント元:3351 へ    [リストへもどる ] pre

(3344) 3353Re^7: SD,CF,ATA ベンチマーク  投稿者:としき   2008/10/24(金) 19:41
参照先:http://www.hinocatv.ne.jp/~toshiki/
    3352 番 文太 さんへのコメント    コメント数 1

>  えーと、でも、setコマンドが日時データを取得できるわけではないですよね。

それが、できるらしいのです。
setコマンドを実行した日時、が使えるらしいとの事。
これもまた例によって、command.comとcmd.exeで結果が異なるかもしれません。
ヘルプメッセージでお調べください。
#今日は週休日だったので、会社のマシンで調べておく事ができませんでした。

      - No.3353 -    このTreeへ    コメント元:3352 へ    [リストへもどる ] pre

(3344) 3354Re^8: SD,CF,ATA ベンチマーク  投稿者:文太   2008/10/24(金) 20:58
    3353 番 としき さんへのコメント    コメント数 1

set %TIME% のようでした。純粋cmd.exe窓で、>set /?したら、長〜いヘルプ
メッセージが出ましたが、Vz窓から使えそうもないのと、以下が必要みたい
なので撤退。興味のある方、どうぞ。


たぶん、この「コマンド拡張機能」が必要。うちでは以下をしていないせいなの
でしょう、怒られて、結果を出してくれなかった。ver |timeでいいですぅ。

ttp://journal.mycom.co.jp/column/winxp/095/index.htmlより。

コマンド拡張機能の影響を受けるコマンドを数え上げると、  DEL/ERASE/CD/MD/
PROMPT ……とかなりの数となるため、Windows XP 下でコマンドプロンプトを活
用するユーザにとって、実は重要な設定ポイントと言えるでしょう。そこで今週
は、コマンドプロンプトのコマンド拡張機能の設定を確認する Tips を紹介しま
しょう。

1.<スタート>メニュー→<ファイル名を指定して実行>と選択。
2.「名前」に半角で「regedit」と入力し、<OK>ボタンをクリック。
3.「レジストリエディタ」が起動したら、HKEY_LOCAL_MACHINE→ Software
→ Microsoft→ Command Processorとキーをたどって開く。
4.右ウィンドウにある「EnableExtensions」をダブルクリックで開く(ない場合
は<編集>メニュー→<新規>→<DWORD値>と選択し、名前を「EnableExtensions」
に変更する)。
5.「値のデータ」を「1」に書き換えて<OK>ボタンをクリック(初期設定では「1」
となっています)。
6.レジストリエディタを終了し、Windows XPを再起動する。

この手順で  Windows XP 全体でコマンド拡張機能が有効になり、ステップ 5 の
値を「0」に変更することで同機能が無効になります。 ちなみにログオンするユ
ーザのみ設定する場合は、ステップ 3 のレジストリキーを「HKEY_CURRENT_USER\
Software\Microsoft\Command Processor」に読み替えてください。


      - No.3354 -    このTreeへ    コメント元:3353 へ    [リストへもどる ] pre

(3344) 3363Re^9: SD,CF,ATA ベンチマーク  投稿者:としき   2008/10/27(月) 02:07
参照先:http://www.hinocatv.ne.jp/~toshiki/
    3354 番 文太 さんへのコメント    コメント数 1

26日は出勤日でしたので、会社のマシンで色々と実験してみる予定でした。
が、多忙のため、結局あまりいろいろと試せず。
午前中は割とまったりとしていたのですが、休みだった数日間で溜ったメールの
処理に追われ、午後からは本業に追われ。まさか4時間も残業する羽目になると
は思わなかった。

それでも、少しは試せた事もあって。

> たぶん、この「コマンド拡張機能」が必要。うちでは以下をしていないせいなの

コマンド拡張機能を使うだけであれば、レジストリの書き換えは不要です。
cmd.exe のオプションで指定するだけです。詳細は cmd /? でどうぞ。

例えば、バッチファイルで、command /c hogehoge という構文は頻繁に使います
よね?
これと同じような感じで cmd.exe も使う事ができるらしいです。
って言っても、実はここだけ、チョイ自信なし。
この時、cmd.exe の引数としてバッチファイルを指定すれば、その中では当然、
コマンド拡張機能が使用可能。もちろん、同時に、拡張機能を使用するという
オプションも指定してやらねばなりませんが。
ただ、これ、自分で試しているわけではないので、どのような結果になるかは
不明です。普通に考えると、コンソールファイルに取得する事は全く不可能で
しょうね。とりあえず、XPの常駐Vzのコマンドラインでcmd.exeと叩いて常駐
させて、何もコマンドを実行せずにすぐにexitで脱出する、ということだけは
試しました。特に問題なくcommand.comに帰ってこれることは確認済みです。


で、コマンド拡張機能が使えるとどうなるか。

> set %TIME% のようでした。純粋cmd.exe窓で、>set /?したら、長〜いヘルプ

長〜いヘルプの、比較的上の方に出てくるはずですが、極めて興味深い記述があ
るはずです。会社から自宅に帰ってくるまでに3歩以上歩く必要があったために
構文は忘れてしまいましたが、環境変数の値の取出しの際に、文字列処理という
か、何文字目から何文字取り出す、という指定ができるのです。つまり、時刻を
表す環境変数の4文字目から2文字を取り出す、という指定ができます。すると、
例えば時刻が「14:53」だった場合、set mm=%time:4:2%(これは嘘っぱちかも)
みたいな指定をすると、mmという環境変数には「53」という文字列が代入される、
という寸法。
あ〜、でも、時刻の表示形式で秒まで表示させるという事は可能なのかな。
Win2Kのころは、コントロールパネルの地域の設定の中に日付や時刻の表示形式を
変更する部分があって、そこを変更したらDOS窓での表示形式も変わったよう
な記憶があるのですが、もはや忘却の彼方。

      - No.3363 -    このTreeへ    コメント元:3354 へ    [リストへもどる ] pre

(3344) 3365set /? (159行)  投稿者:文太   2008/10/27(月) 15:12
    3363 番 としき さんへのコメント    コメント数 1

cmd.exe 環境変数を表示、設定、または削除します。

SET [変数名=[文字列]]

  変数名   環境変数名を指定します。
  文字列   変数に割り当てる文字列を指定します。

現在の環境変数を表示するには、パラメータを指定せずに SET と入力してください。

コマンド拡張機能を有効にすると、SET は、次のように変更されます:

等号や値を指定せずに、変数名だけを指定して SET コマンドを実行すると、
SET コマンドに指定された名前に接頭辞が一致するすべての変数の値が
表示されます。たとえば、

    SET P

と入力すると、文字 'P' で始まるすべての変数が表示されます。

変数名が現在の環境に見つからない場合は、SET コマンドは、ERRORLEVEL を 
1 に設定します。

SET コマンドでは、変数の名前に等符号を使用することはできません。

SET コマンドには、2 つの新しいスイッチが追加されています:

    SET /A 式
    SET /P 変数=[プロンプト文字列]

/A スイッチは、等号の右側の文字列が、評価すべき数式であることを
指定します。式の評価はごく単純で、次の操作がサポートされます。
操作は、優先順位の高い順に示されています:

    ()                  - グループ化
    ! ~ -               - 単項演算子
    * / %               - 算術演算子
    + -                 - 算術演算子
    << >>               - 論理シフト
    &                   - ビット演算子 AND
    ^                   - ビット演算子排他的 OR
    |                   - ビット演算子 OR
    = *= /= %= += -=   - 代入
      &= ^= |= <<= >>=
    ,                   - 式の区切り記号

論理演算子またはモジュール演算子を使う場合は、式文字列を引用符で
囲む必要があります。式内の数値以外の文字列は環境変数文字列として
処理され、使用される前に数値に変換されます。指定された環境変数名が
現在の環境で定義されていない場合は、値として 0 が使用されます。
これにより、いくつもの % 記号を入力して値を取得しないでも、環境
変数の値を算術演算に使うことができます。
コマンド スクリプト外でコマンド ラインから SET /A を実行すると、式の
最終的な値が表示されます。割り当て演算子を使うには、割り当て演算子
の左側に環境変数名が必要です。数値は 10 進数ですが、接頭辞として 0x 
を付けると 16 進数、0 を付けると 8 進数になります。従って、0x12 は 18、
あるいは 022 と同じです。8 進表記を使う場合は、注意してください。08 や 
09 は、8 と 9 が有効な 8 進数ではないため、有効な数値ではありません。


/P はユーザーによって入力された入力行を変数の値として設定できるようにします。
入力行を読み取る前に、指定されたプロンプト文字列を表示します。プロンプト文
字列は空でもかまいません。

環境変数の置換は、次のように拡張されます:

    %PATH:文字列1=文字列2%

は、PATH 環境変数を展開し、その結果に含まれるすべての "文字列1" を 
"文字列2" に置き換えます。"文字列2" に空の文字列を指定すると、展開
された出力からすべての "文字列1" を削除することができます。"文字列1" 
をアスタリスクで始め、展開された出力の先頭から、文字列1 の残りの部分
が最初に現れるまでのすべてを一致させることもできます。

また、展開の副文字列を指定することもできます。

    %PATH:~10,5%

は、PATH 環境変数を展開し、展開結果の 11 番目 (オフセット 10) の文字
から始まる 5 文字だけを使います。長さが指定されなかった場合は、変数の
値の残りの長さを既定値とします。オフセットまたは長さのどちらかが負の値
の場合、環境変数の値の長さに指定されたオフセットまたは長さを足してその
数を使います。

    %PATH:~-10%

は、パス変数の最後の10 文字が展開されます。

    %PATH:~0,-2%

は最後の 2 文字以外のすべてが展開されます。

最後に、遅延環境変数の展開が追加されました。このサポートは常に既定で
無効になっていますが、CMD.EXE の /V: のコマンド ライン スイッチを使
って有効または無効にできます。CMD /? を参照してください。

遅延環境変数の展開は、実行時ではなく、テキスト行を読み取るときに展開
されるという現在の制限を避けるために役立ちます。
次の例は即時変数展開の問題を説明しています。

    set VAR=before
    if "%VAR%" == "before" (
        set VAR=after;
        if "%VAR%" == "after" @echo If you see this, it worked
    )

この例は、論理的には IF 文が別の IF 文の本体に含まれる複合文なので、
両方の IF 文の %VAR% が、最初の IF 文を読み取ったときに展開されます。
このため、メッセージは決して表示されません。複合文の中の IF では "before"
と "after" が比較され、決して等しくはなりません。同様に次の例も期待し
たようには動作しません。

    set LIST=
    for %i in (*) do set LIST=%LIST% %i
    echo %LIST%

この例では、現在のディレクトリのファイルの一覧は作成されず、代わりに最後
に見つけられたファイルが LIST 変数に設定されます。これは %LIST% が FOR 文
が読み取られるとき、一度だけ展開され、そのときは LIST 変数は、空だからです。
つまり、実際に実行されている FOR ループは

    for %i in (*) do set LIST= %i

で、LIST に最後にみつけられたファイルを設定し続けているだけです。

遅延環境変数の展開では、実行時に環境変数を展開するために異なった文字
(感嘆符)を使うことができます。遅延環境変数の展開が有効な場合、上記の
例は次のように書くと意図したように動作します。

    set VAR=before
    if "%VAR%" == "before" (
        set VAR=after
        if "!VAR!" == "after" @echo If you see this, it worked
    )

    set LIST=
    for %i in (*) do set LIST=!LIST! %i
    echo %LIST%

コマンド拡張機能が有効な場合、SET によって表示される変数の一覧には
現れないいくつかの動的な環境変数があります。これらの変数の値は、変数の
値が展開されるときに動的に計算されます。ユーザーがこれらの名前の変数を
明示的に定義する場合、その定義は下記の動的な定義を無効にします。

%CD% - 現在のディレクトリ文字列に展開します。

%DATE% - DATE コマンドと同じフォーマットで現在の日付に展開します。

%TIME% - TIME コマンドと同じフォーマットで現在の時刻に展開します。

%RANDOM% - 0 から 32767 の間の任意の 10 進数に展開します

%ERRORLEVEL% - 現在の ERRORLEVEL の値に展開します。

%CMDEXTVERSION% - 現在のコマンド プロセッサ拡張機能のバージョン番号に
                     展開します。

%CMDCMDLINE% - コマンド プロセッサを起動したオリジナル コマンドライン
                 に展開します。

      - No.3365 -    このTreeへ    コメント元:3363 へ    [リストへもどる ] pre

(3344) 3366cmd /? (167行)  投稿者:文太   2008/10/27(月) 15:13
    3365 番 文太 さんへのコメント

Windows XP コマンド インタープリタの新しいインスタンスを開始します。

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]

    [[/S] [/C | /K] 文字列]

/C      "文字列" に指定されたコマンドを実行した後、終了します。
/K      "文字列" に指定されたコマンドを実行しますが、終了しません。
/S      /C または /K の後の文字列の扱いを変更します (以下の説明を参照してくだ
        さい)。
/Q      エコーをオフにします。
/D      レジストリからの AutoRun コマンドの実行を無効にします
        (下記を参照してください)。
/A      内部コマンドの出力結果を ANSI でパイプまたはファイルに出力します。
/U      内部コマンドの出力結果を Unicode でパイプまたはファイルに出力します。
/T:fg   前景色および背景色を設定します (詳細は COLOR /? を参照してください)。
/E:ON   コマンド拡張機能を有効にします (以下の説明を参照してください)。
/E:OFF  コマンド拡張機能を無効にします (以下の説明を参照してください)。
/F:ON   ファイル名およびディレクトリ名補完文字を有効にします
        (以下の説明を参照してください)。
/F:OFF  ファイルおよびディレクトリ名補完文字を無効にします
        (以下の説明を参照してください)。
/V:ON   区切り文字として ! を使って遅延環境変数の展開を有効にします。
        たとえば、 /V:ON とすると、!var! は、実行時に変数 var を展開します。
        var 構文は、FOR ループ中とは違い、入力時に変数を展開します。
/V:OFF  遅延環境展開を無効にします。

コマンド セパレータ '&&' で区切られた複数のコマンドが引用符で囲まれている場合
は、"文字列" として指定されます。また互換性の理由から /X と /E:ON、/Y と
/E:OFF、および /R と /C は同じです。そのほかのスイッチは無視されます。

/C または /K が指定されている場合、スイッチの後の残りのコマンド ラインがコマ
ンド ラインとして処理されます。次のルールが引用符 (") の処理に使われます:

    1.  次のすべての条件に一致する場合、コマンド ラインの引用符が有効になり
        ます:

        - /S スイッチがない
        - 引用符が 1 組ある
        - 引用符の中に特殊文字がない
          (特殊文字は &<>()@^| です)
        - 引用符の中に 1 つ以上のスペースがある
        - 引用符の中の文字列が、実行可能ファイルの名前である

    2.  最初の文字が引用符であるにも関わらず上の条件に一致しない場合は、最初
        の引用符とコマンド ラインの最後の引用符が削除され、最後の引用符のあ
        とのテキストが有効になります。

コマンド ラインで /D が指定されなかった場合は、CMD.EXE の開始時に次の REG_SZ
または REG_EXPAND_SZ レジストリ変数が検索されます。次のレジストリ変数の両方ま
たはどちらかが存在する場合、それらを最初に実行します。

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

既定では、コマンド拡張機能は有効です。拡張機能を無効にして CMD.EXE を起動する
には、/E:OFF スイッチを使用します。コンピュータまたはユーザー ログオン セッ
ションで起動される CMD.EXE コマンドすべてに対して拡張機能を有効または無効に
するには、 REGEDIT32.EXE を使ってレジストリにある次の REG_DWORD 値を設定しま
す。
コンピュータに対しては、

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions

に 0x1 を設定すると有効になり、0x0 を設定すると無効になります。
ログオン セッションに対しては、

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions

に 0x1 を設定すると有効になり、 0x0 を設定すると無効になります。
ユーザー固有の設定は、コンピュータの設定より優先されます。
コマンド ライン スイッチは、レジストリの設定より優先されます。

コマンド拡張機能には、次のコマンドに対する変更または追加が含まれています。

    DEL または ERASE
    COLOR
    CD または CHDIR
    MD または MKDIR
    PROMPT
    PUSHD
    POPD
    SET
    SETLOCAL
    ENDLOCAL
    IF
    FOR
    CALL
    SHIFT
    GOTO
    START (外部コマンドの起動の変更を含みます)
    ASSOC
    FTYPE

詳細は、コマンド名の後に /? と入力すると表示されるヘルプを参照してください。

既定では、遅延環境変数の展開は有効ではありません。遅延環境変数の展開を有効また
は無効にして CMD.EXE を起動するには、/V:ON または /V:OFF スイッチを使います。
コンピュータまたはログオン セッションで起動される CMD.EXE コマンドすべてに対し
て補完を有効または無効にするには、REGEDIT32.EXE を使ってレジストリにある次の
REG_DWORD 値を設定します。
コンピュータに対しては、

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion

に 0x1 を設定すると有効になり、0x0 を設定すると無効になります。
ユーザー ログオン セッションに対しては、

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion

に 0x1 を設定すると有効になり、0x0 を設定すると無効になります。
ユーザー固有の設定は、コンピュータの設定より優先されます。
コマンド ライン スイッチは、レジストリの設定より優先されます。

遅延環境変数の展開が有効になっている場合、感嘆符を使うと実行時に環境変数の
値を置き換えることができます。

既定では、ファイルおよびディレクトリ名補完機能は有効ではありません。ファイル
名の補完機能を有効または無効にして CMD.EXE を起動するには、/F:ON または /F:OFF
スイッチを使います。コンピュータまたはログオン セッションで起動される CMD.EXE
コマンドすべてに対して補完機能を有効または無効にするには、REGEDIT32.EXE を使っ
てレジストリにある次の REG_DWORD 値を設定します。
コンピュータに対しては、

  HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar
  HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar

に特定の機能に使う 16 進の制御文字を設定します (例 0x4 は Ctrl-D、0x6 は
Ctrl-F)。
ユーザー ログオン セッションに対しては、

  HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar
  HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar

に特定の機能に使う 16 進の制御文字を指定します (例: 0x4 は Ctrl-D、0x6 は
Ctrl-F)。
ユーザー固有の設定は、コンピュータの設定より優先されます。
コマンド ライン スイッチは、レジストリの設定より優先されます。

/F:ON スイッチで補完機能を有効にした場合、2 つの制御文字 (Ctrl-D はディレクト
リ名補完機能、Ctrl-F はファイル名補完機能) が使用されます。
レジストリで特定の補完文字を無効にするには、制御文字として有効でないスペース 
(0x20) の値を使用します。

2 つの制御文字のどちらかを入力すると、補完機能が起動されます。パスが存在しな
い場合、プログラムはカーソルの左側のパス文字列にワイルド カード文字を付加し、
一致するパスの一覧を作成します。その後一致する最初のパスを表示します。
パスが一致しない場合、音を鳴らします。同じ制御文字を押し続けると一致するパス
の一覧を順に表示します。Shift キーを押しながら制御文字を押すと一覧を逆回り表
示します。行を編集して制御文字をもう一度押すと、保存されていた一致したパスの
一覧は破棄され、新しい一覧が作成されます。ファイル名補完機能とディレクトリ名
補完機能を切り替えたときも同様です。2 つの制御文字の違いは、ディレクトリ補完
文字がディレクトリ名だけを照合するのに対し、ファイル名補完文字はファイルと
ディレクトリ名の両方を照合する点です。ファイル補完機能が内部ディレクトリコマ
ンド (CD、MD または RD) に使用された場合、ディレクトリ補完機能と見なされま
す。

一致するパスの前後に引用符を付けると、補完機能コードでスペースまたはほかの特
別な文字を含むファイル名が使用できるようになります。また、行の前に戻って補完
機能を起動した場合、補完機能が呼び出された時点でカーソルの右側にあったテキス
トは破棄されます。

引用符が必要な特別な文字は次のとおりです:
     <スペース>
     &()[]{}^=;!'+,`~

      - No.3366 -    このTreeへ    コメント元:3365 へ    [リストへもどる ] pre