テキストの文字列を取得後検索でマッチした場所の周辺で一定の置換を実行し, また元の位置に戻る…という作業を繰り返すことがあります. 置換を実行すると検索文字列が更新されてしまって, 履歴を遡及することが面倒だというときに使う超小物. = PS2JB^QA.def = *m 1 ^QA "" ?. &> ps[=r, #56 #e &Cr ps], 0: (5+$)."$(50,0)$[80]" * #e はケースバイケースで取ったり付けたり.
>テキストの文字列を取得後検索でマッチした場所の周辺で一定の置換を実行し,
>また元の位置に戻る…という作業を繰り返すことがあります.
= cleanPS.def = Search with clean PS PSを汚さない検索。シフトで上へ検索。ノーマルは下へ。 *m 10 ^NF "" ?. k=ks&1, &00 ps[=r, #F &Cr (r<0)? { ps], .} (k)? #c ? #r ps], 00: (5+$)."$(50,0)$[80]" 20 ^IF "" ?. k=ks&1, &01 ps[=r, #F &Cr (r<0)? { ps], .} (k)? #c ? #r ps], 01: (5+$)."$(50,0)$[80]" * ある場面でなら、これは僕にはかなり使えるマクロです。 psを汚されて、#e とかがかなり面倒という場面は、間違いなくあったから。 瞬間的に、擬似的に、#F (^F が僕のところのキーアサイン ) が、3種類でき るとか、、、。^NF とか ^IF とかせこいことを言わずに思い切って、^D, ^S に してしまえば、、、。ごちゃごちゃするかなぁ、、、。「後優先」はエライです。 再検索が効かないのがなんですねぇ。やはり #e が必要になってしまう、、、。 これ以上は求められないだろうなぁ、実力的に。 aa とかの2文字変数をフラグにして、再検索で #F (aa)? #e とすればよろし、 かな。甘いかな、、、。 こういうのは、使うときにマクロファイルを開いて再カスタマイズ、不要にな ったら、マクロメニューから手で消す、というのが得意な使い方です。ふだんか ら全部のマクロが使えるようになってる必要なんかないんだ、というのが7年位 前の発見でした。いつまでも進歩しつづけられるお得な性格&実力。 あまりにもコードに重複がおおいけど、グローバルマクロまたぎはいけないで しょうね、やっぱり。使い捨ては、これでいいと思う、、、。
グローバルまたぎをしてみて、反省しました。いけません、汚いです。 ほとんど進歩していませんが、これで保存します。あーん、これ、すてき、 めざらさんにヒントをもらったんだ、と思い出すことでしょう。 === CleanPS.def (ver 2) by B ===; Search with clean PS, shift heavy. #if 0 inspiration from mezala! PSを汚さないイミディエットサーチ。シフトで下方を、ノーマルで上方を検索。 2個目、3個目の検索コマンド。セカンド#F、サード#F。 いつでも#eします。違う文字列で検索するなら#xするか、★行をコメントアウト。 自前ヒストリーをPSとすりかえ、イミサーチにしてるだけ。 #endif * M 10 ^D "2nd #F" ?. k=ks&1, &00 ps[=a, #F #e ;★コメントアウトあり (k)? {&m(" Search ↓↓ ^r/^c不可")} ? {&m(" Search ↑↑ ^r/^c不可")} &Cr (r<0)? >z (k)? #c ? #r ; (k)? #r ? #c ;★下方サーチが多いならこっち (r)?? &m("%s",a) ; 上のメッセージも反転せよ :z ps], . 00: a=5+$,."$(50,0)$[80]" 20 ^S "3rd #F" ?. k=ks&1, &01 ps[=b, #F #e ;★コメントアウトあり (k)? {&m(" Search ↓↓ ^r/^c不可")} ? {&m(" Search ↑↑ ^r/^c不可")} &Cr (r<0)? >z (k)? #c ? #r ; (k)? #r ? #c ;★下方サーチが多いならこっち (r)?? &m("%s",b) ; 上のメッセージも反転せよ :z ps], . 01: b=5+$,."$(50,0)$[80]" *
題。とはいえ、現場では、ちょこちょこいじることになるのだろうと思う。 しつこーい。すいません。 頭の中は「検索」という概念。しかし実際には、検索文字列の設定と検索(カーソル移動) の2工程。 手動でやっても、#Fして#r(たとえば)する。3つ目のヒット箇所に飛びたいときには #rを3回ですよね。そこが違うだろう! というわけで、cm なんて昔懐かしい(15年は 使ってない)変数を使ってみました。連続実行ですぐです。止めてほしいときは、1つカーソル を動かせばいい。 === CleanPS.def (ver 3) by B ===; Search with clean PS, shift heavy. #if 0 inspiration from mezala! PSを汚さないイミディエットサーチ。シフトで下方を、ノーマルで上方を検索。 2個目、3個目の検索コマンド。セカンド#F、サード#F。 いつでも#eします。違う文字列で検索するなら#xするか、★行をコメントアウト。 自前ヒストリーをPSとすりかえ、イミサーチにしてるだけ。 連続実行で、検索文字列設定をスキップ、#r #rの感覚になる。 ^Q4で前の箇所へ。 #endif * M 10 ^D "2nd #F" ?. &#M(4) ;ver3 k=ks&1, &00 ps[=a, (cm==100)? >a ;ver3 #F #e ;★コメントアウトあり (k)? {&m(" Search ↓↓ ^r/^c不可")} ? {&m(" Search ↑↑ ^r/^c不可")} &Cr (r<0)? >z :a (k)? #c ? #r ; (k)? #r ? #c ;★下方サーチが多いならこっち (r)?? {cm=100, &m("Search Word: %s",a)} ; 上のメッセージも反転せよ :z ps], . 00: a=5+$,."$(50,0)$[80]" 20 ^S "3rd #F" ?. &#M(4) ;ver3 k=ks&1, &01 ps[=b, (cm==100)? >a ;ver3 #F #e ;★コメントアウトあり (k)? {&m(" Search ↓↓ ^r/^c不可")} ? {&m(" Search ↑↑ ^r/^c不可")} &Cr (r<0)? >z :a (k)? #c ? #r ; (k)? #r ? #c ;★下方サーチが多いならこっち (r)?? {cm=100, &m("Search Word: %s",b)} ; 上のメッセージも反転せよ :z ps], . 01: b=5+$,."$(50,0)$[80]" *
コメント,ありがとうございます. 怒涛のアップになかなか随いていけないでおりますが, まずひとつ反応しておきますと,〈グローバルまたぎ〉. これは VZ のコール/ジャンプの「ルール」(mac16.docに記述)に沿えば まったく問題なく,行儀が悪いことにはならないと考えています. ・実行位置以下のモジュール内を,ローカル/グローバルを問わずサーチ. ・見つからなければマクロバッファの先頭からグローバルのみサーチ. 少なくともプッシュ/ポップがまたいでいるより遥かに行儀よい(^-^; 例えば,榊原知さんの究極の名作「いきなりブロック」(注:手元の環境) 39 @[<--] "" &00 #s 39 @[-->] "" &00 #d 39 @[UP] "" &00 #e 39 @[DOWN] "" &00 #x 0: ?. (mb)?. #b 例えば,上村郁夫さんの痒届(何)名作「他画面スクロール」(注:手元の環境) 50 ^T "" c=#r, >01 50 ^V "" c=#c, >01 50 ^[UP] "" c=#w, >01 50 ^[DOWN] "" c=#z, >01 01: (s)?. (wt)??{ &o(c) . } &s #W &o(c) #W (ks&1)?&o(c) &d 例えば,手前味噌ですみません.(名作と並べるなっての ^^;) ;= ^QF.def = H_ear mp0常用者のいきなり検索・次検索 55 ^QF "" ?. k20&ks, mp[, (ks&1)?{ &j(10) } #F &Cr &j(-1) (r)?{ mp], . } &s (k)?#r ?#c >01 35 ^R "" ?. (ks&1)??{ #r . } c-, >00 36 ^C "" ?. (ks&1)??{ #c . } c+, >00 0: &s mp[=2, &o(#r+c) >> 1: (r)?{ &o(#c-(cm-35)) &b(2) } mp], &d (r)?{ &m(19) } ?{ &m("%c",cm+'÷' ) } ; ▲▽ (59:^_)('∞':↑↓) ;------ end of ^QF.def ------> cm なんて昔懐かしい(15年は使ってない)変数を使ってみました。そういえば滅多に使わないですね. …と言うか,ものすごく実用的なコマンド拡張常用マクロでは頻用されるのかな? わたしの#Fコマンド拡張でも,メッセージ表示に利用していましたね.表示だけ. うーん,イミディエートサーチか… いきなり検索よりネーミングかっこいいな
色々とごめんなさいね。そして、ありがとうございます。 勉強になります。またぎは、mac16.doc も読ませていただきました。要約うま いなぁ。微妙なところなんだけど。 3つのサンプル、これまた勉強になりました。他画面スクロール(とりわけキ ーアサイン)とmpですね。うーむ、マクロの中でない場合、mpを気にしな くても、ほとんど困らないような気もするし、あれっ? と思ったことがあった ことはあったような、、、。#FでのFEP制御も、、、うーん。シフトキーっ てけっこう押しづらいのですよね。#FしてからFEPは立ってますか? と自問 してますね。 C(論理ページング。何の略?)だけ、すごく気にする、当たり前。これ、 けっこう好き。秀丸にはないでしょう、きっとこんなの。 ただ、もうちょっと落ち着いて、慌てず、PC・Vz・自分の挙動と、 じっくり付き合ったほうが幸せなんじゃないか、とも思っています。mp を気にするとか。 ほとんど変わってはいないのですが、以下で可読性を保持しつつ少しまたがせ て、気になっていたcm値をばらしました。ローカルマクロの返り値の12回目 の復習をしたりして。 何かすごく気に入っているマクロになりました。すごく楽しい! 多謝 m(__)m あ、いきなりブロックは、僕は、さらに、えすてまさん技を入れているようでした (ぜんぜん使用頻度は高くないですが)。ときどき窓が邪魔になります。なるほど、 cmの正しい使い方みたいだ。あれ、なんで256足すんだっけ? けっこうネストしてるなぁ、、、。動けば正義。 50 @[UP] "Win ↑/イキナリブロック" (s-1)? >A ? {c2, >00} 50 @[DOWN] "Win ↓/イキナリブロック" (s-1)? >B ? {c10, >00} 50 @[<--] "Win ←/イキナリブロック" (s-1)? >C ? {c1, >00} 50 @[-->] "Win →/イキナリブロック" (s-1)? >D ? {c5, >>} 00: wl[=c, cm[, #[ &d &o(r]+256) wl],. :A &01 #e. ;"いきなりぶろっく"by tomo "Win↑"by えすてま PK(14)#03944 :B &01 #x. :C &01 #s. :D &01 #d. 01: (s==0)??. (mb)?. #b>うーん,イミディエートサーチか…。いきなり検索よりネーミングかっこいいなうーん、どうだか。いきなり検索のほうが字が少ないし。 むこうでああいう話をしているから、というお話です。けっこう深いから面倒 なのですが。 immedi"ate" (形容詞)は「エット」<「イット」と発音するのが正しく、 educ"ate" (動詞)は「エイト」と発音するのが、正しいです。 なかをとって、「エート」もありですが。 ready, ladyとかあって、後者をレディーみたいに発音するの止めませんか、 とは個人的に思っていたりして。レディースは特殊な意味をもっていると思うので、 それはもう日本語だからいいんだけど、、、とか。もちろん、後者はレイディー が良いです。 === CleanPS.def (ver 4) by B ===; Search with clean PS, shift heavy. #if 0 inspiration from mezala! セカンド#F、サード#F。 PSを汚さないイミディエットサーチ。 自前ヒストリー使用でPSとすり替えてのイミサーチ。 ノーマルで上方を、シフトで下方を検索。 連続実行で、検索文字列設定をスキップ、#r #rの感覚になる。 ^Q4、3で、前の箇所へ。 ★:ヒストリー呼び出し不要と方向反転のカスタマイズ箇所。 #endif * M 10 ^D "2nd #F" ?. k=ks&1, &#M(4) &00 ps[=a, ;buffer (cm==100)? >A &15 (r==0)? >Z ;set #F :A (k)? #c ? #r ;★ (r)? >Z cm=100, &m("^D Mark4, Search Word: %s",a) :Z ps], . 00: a=5+$,."$(50,0)$[80]" 20 ^S "3rd #F" ?. k=ks&1, &#M(3) &01 ps[=b, ;buffer (cm==99)? >A &15 (r==0)? >Z ;set #F :A (k)? #c ? #r ;★ (r)? >Z cm=99, &m("^S Mark3, Search Word: %s",b) :Z ps], . 01: b=5+$,."$(50,0)$[80]" ;---------- local, set #F ---------- 15: #F #e ;★ message below, too (k)? {&m(" Search ↓↓ ")} ? {&m(" Search ↑↑ ")} &Cr (r<0)? {&m("") (0)} *
#[ = #03 | #] = #85 途中で歯抜けはありますが、上のような並び。 ころころ変わるわけですが、多重実行で何かするなら、0,1,2,86 ... あたりが無難みたいでした。 lastcmd dw とのことなので、2バイトの入れ物ですね。 こんなのがありました。ありがたや、ありがたや = cmdlist = by tomo * M 89 ^\ "#命令 短縮一覧" ?. #n c='<', :A n=pv.(c-'<'), (n)?{&?("#%c = #%02d",c,n) #m} (c++ <= 'z')?>A * このあとは、sortfがオススメ。>SORTF -bf -t0x20 +2.1 c:\kekka1.txt > C:\kekka2.txtこんなので、いけるはずです。
めざらさん たいへんに、このうえもなく、瑣末な事柄ですが。 http://mezala.la.coocan.jp/vz/notes/segmap.html 05BE pv.5 byte 76 a A ;こうですよね? いやあ、こんなものを作ったc.mosさんもc.mosさんですが、 このサイトを作っためざらさんも、めざらさんです。 感動。 一生遊べますね。ソースがあるというのが、いけなかった のかなぁ。 どうでもいいのことなのですが、GDATAって、global data ってことなんですね。 Buをみて、あ、c.mosさん、一貫して、global > grobalの ミススペリングしてる、と気づきました。 ------------------------------------------------------- 独り言です。#88-#99もコマンドはあるのですが、ファイラー コマンドなので、cmに関係しません。でも、100以上にしておけば もっと覚えやすく、もっと安全かも(心理的に)。
> A ;こうですよね?
> 一貫して、global > grobalのミススペリングしてる、と気づきました。
めざらさん、 瑣末な修正以来2回目です。 コマンド拡張で学ぶVZマクロ入門 #31 #31 #w ^W \[PGUP](NEC-98:\[RLDN]) スクロールアップ s==3(ファイラーモード) 編集モードと同じ(FM+8で指定可能なのカーソルの循環はしない) ↓ ^^トル 編集モードと同じ(FM+8で指定可能なカーソルの循環はしない) #32 も同じです。 http://mezala.la.coocan.jp/vz/extcmd/cmd31.html http://mezala.la.coocan.jp/vz/extcmd/cmd32.html
めざらさま(もう様様な感じになってます。ま、後日。m(__)m) === Macrotmp by B ===; * M 50 ^^ "Macrotmp" d1+c1+b1+a0, ;得意になっている、えへへへ。 &m("%%d %d%% %d%% %d%% %d%% %%d",a,b,c,d) * 「トークン索引」で、$自体を表す$$はありますが、 %自体を表す%%はないみたいですね。「書式制御」の範疇とはいっても、 他のものと毛色がたしかに違うとは思うのですが。
> d1+c1+b1+a0, ;得意になっている、えへへへ。> &m("%%d %d%% %d%% %d%% %d%% %%d",a,b,c,d)す、凄い!! 普通のプログラム言語で考えたら全然仕組がわからない。 もう、VZマクロの動作を読み切ったカミ様のヨーダ。> 「トークン索引」で、$自体を表す$$はありますが、> %自体を表す%%はないみたいですね。「書式制御」の範疇とはいっても、> 他のものと毛色がたしかに違うとは思うのですが。VZMACRO.SHD を見ると 各種パラメータ エイリアスのパラメータ %1〜%9 1〜9 番目のパラメータ %* 全パラメータ %*n n 番目以降の全パラメータ %: パス名 %& ファイル名 %. 拡張子 %< パス名+ファイル名 %> ファイル名+拡張子 %:n n 番目のパラメータのパス名 %\ 直前が \ 以外の時 \ を補完 %- スイッチキャラクタ %% % 文字 というのがありました。 %の数が違うと動作不定になるようですね。
>す、凄い!! 普通のプログラム言語で考えたら全然仕組がわからない。
>もう、VZマクロの動作を読み切ったカミ様のヨーダ。
>%の数が違うと動作不定になるようですね。
> >%の数が違うと動作不定になるようですね。
> ありそうなことですが、あえて試してはみなくていいですね。そんな変なことするほうが変。
もちろん、お任せです。 言うまでもないことをお伝えさせていただきますね。 感動的な美術館にいる。ものすごい愛と情熱と、きっと祈りの気持ちさえあっ て作られている。すごい、すごい、とため息すら出ない。恍惚とすらしてしまう。 でも、部屋の片隅に埃がたまっているのに気づいてしまった。4つの角のうちの 1つだけに、奴はいる。取りたい、掃きだしたい、でも手が届かない。というわけ で、なんだか小姑みたいに、些細なことを、いちいちご報告している次第です。 最後になると思います。たぶん、めざらさんにはめざらさんのお考えがあるの だろうとは思うのですが。 サイトのステータスバー、上のかっちょいい黒と赤の帯のところです。細かい芸 を見てしまった。気づいてなかった。「め」とか。 で、以下のところに英訳がない。 コマンド拡張マクロ入門 Introduction to Vz Macro Language or Introduction to Macro Language: Power up your Vz commands! or Vz Commands Enhanced by Macro Language (Introduction) or Vz Commands Empowered by Macro Language VZマクロ関連覚書 Macro Language Notes この翻訳は難しい。内容を伝えればよいのでなく、格好良くないといけないから。 英語もつたないしなぁ。まぁ、ネイティブでも詩人でもないのでお許しくだされ。 もちろん、お任せですよ。めざらさんの作品なのですから。 おっと。>メタ文字って大抵,重ねるとメタ文字の否定を表す…という感じですね.一般論として、これには同意しかねますかね。少なくとも僕が生息している MS-DOS界隈の住人たちは、やりたい放題なんじゃないか、1つ1つ覚えるのかよ、 と(覚えないしメモすらきちんと取らないのだけど)思うことが多いです。 ;p="""", ;p="\"\"", p="$"$"", ;こうなんですねぇ &m("%s",p) ;これはあくまでVzマクロの話。 ;VWXの正規表現なら? コマンドラインは? ygrepは? izgrepは? jgawkを ;コマンドラインで-f (scriptfile)を使わないと? あうあう
>101キーボードで刻印通りのキー入力ができるとすると,これら3種類のキーはシフトキーを押しながら入力するということになるのでありましょうか。それとも,そのまま ^2 ^6 ^- で入力しても同じなのでしょうか。ご教示ください。
> はい、^2, ^6, ^- のままでいいようです。シフトキーを押すとダメでした。
>何と十三年ぶりの更新ができますよ!
>ああ,ようやく嵐の繁忙期が過ぎた.
>そして,読書・芸術・食欲の秋が到来するのだった……
>貧乏ヒマなし.
c:\vzsrc\cmos\macro.asm 194 ;--- Command symbol table --- 記号は人間に分かりやすく。それだけ。番号の振り方に意味がありますね。 public cmdsymtbl cmdsymtbl db 11 ; < cmd # #< == #11 db 0 ; = db 12 ; > db 29 ; ? db 0 ; D db 0 ; Z db 0 ; \ db 0 ; ` db 0 ; j db 0 ; o db 0 ; q === Macrotmp by B ===; * M 50 ^^ "M1" #D #Z #\ #` #j #o #q ;kekka: ####### 51 ^\ "M2" # ;what's this? * 超くだらない、お遊びでした。失礼しました。 macro interpreterが何をどうしているのか? 「アルファベットを見つけると……」 と誰かが言ってました。榊原さんなら、何が起こっているのか、教えてくれそうな気が しますね。 "M2"は、おやおやと面白いのですが、「##」「###」とかすると、正しすぎて、 まったく面白くありません。
=== Macrotmp by B ===; #08 のようにコマンド番号を書かなければならない場合、#8とゼロを抜いて 書いてはいけません。 もっとも、これら1ケタ台を数字で書くことは、ほとんどないと思いますが。 は、はまった。(;_;) * M 50 ^^ "Macrotmp" ?. &t ;#01 &?("#01 %d, ",cm) ;テンポラリーファイルエラー、VTDOS落ち、その他 #02 &?("#02 %d, ",cm) #03 &?("#03 %d, ",cm) #04 &?("#04 %d, ",cm) #05 &?("#05 %d, ",cm) #06 &?("#06 %d, ",cm) #07 &?("#07 %d, ",cm) #08 &?("#08 %d, ",cm) * kekka: #02 2, #03 3, #04 4, #05 5, #06 6, #07 7, #08 8, (整形済み) cmが返るには返るのです。私用では使わないほうがいいと思う。cm==1は outlawが使っています。 --- from vz.def --- 01 ^[ ;redo cmd 02 ^_ ;KBM; (^- @dosv) 03 [ESC] 04 ^M [CR] 05 ^E [UP] ;:↑ 06 ^X [DOWN] ;:↓ 07 ^S [<--] ;:← 08 ^D [-->] ;:→ 09 ^QA :Wd ← というわけで、やっぱり、100番以上が、個人の変な使用では、いいようです。 --- from my .shd --- @CM @Cm @cm グローバル変数 cm * 直前に実行したエディットコマンド番号 #nn のエディットコマンドの実行後に コマンド番号が保存される 0-2, 86- , 100ー255あたりが空いている(?)m.gann <-- これは書き換えですね。 0は多重実行で頻用されている <-- 「が、個人使用では100以上を」 また、窓の区別もcmで可能 編集モードでのみ、保存される。 非編集モードでは、cm+256 が r に返される。
ふて寝して引きこもりになる前に。 こんなにイライラすることになるとは思いませんでした。30時間ぐらいの リハビリでは足りなかったんだろうなぁ。あっち行ったりこっち行ったりしてる からねぇ。 はっきり言って、背伸び。mg..0と来ましたよ、rでない内部レジスタという 奴ではないでしょうか! ()で評価したらrに入るような気がしてしまいました。 前にも作ったことあるような気もするし、、、。 ズドーンと進んで6回ループします。下手でしょうか? 自前バッファじゃ足りない、やはりラムディスクのワークファイルだ。 自前バッファ(検索文字列が入ってる(^^;)を自動でファイルに書き出す マクロがあれば、貧乏症の僕も安心だ……。 でも、既存バッファがどれだけ使われているのか知ってからだろう、 そのワークファイル使用のマクロを書くのは(これは簡単なの)、と思って しまったのです。 はまった、、、。 記念に上げさせてください。 レスは明日、書きます。 === Hbufsize by B ===;disp history buffer size & used size in Ymenu ただ起動。Ymenuに6つのヒストリーバッファの使用状況を示す。 棒グラフにしたかったんだけどねぇ。もう気力ない、、、。 最後にYmenuの応用性の高いところを落としてしまいました、、、。 各種ヒストリーバッファに何か入れてから試したほうが、まだ楽しいような 気がします。いずれにしても面白くないか。シクシク。 * M 50 ^^ "Hbufsize" ?. a=pq..134, ;256 tmpbuf cmdlineLbuf,&g() b=a+12, ;<a> 12, hist size, <b> 12, used size c=b+12, ;<c> 12, used percentage d=c+12, ;<d> 12, usable bytes e=pq..135, ;256 tmpbuf2 alias,filer,&g() ;<e> 41*6=246, for work for data-gathering ; --- get size info of 6 hist buffs --- i-, :a (i)>?{ (ps) (pf) (px) (pw) (pr) (pa) } t=mg..0, ;<t>buffer top a..i=t..-1, ;buff size info ; --- get buff names --- (i)>?{ (m="PS") (m="PF") (m="PX") (m="PW") (m="PR") (m="PA") } ; --- get used sizes --- dx=dz, si=t, ax=t..-1, ;---strlen2 ; <-- dx = segment, si = offset, ax = buffersize (serch max) ; --> si = offset &i("$(52,1F,33,DB,39,1C,74,04,46,48,73,F8,C3)") b..i=si-t, ; --- get percentage of used size --- c..i=b..i*100/a..i, ; --- get usable bytes (diff) --- d..i=a..i-b..i, ; --- gather all info --- &Sp(e,"%c:(%4d) %3d%% used, %4d bytes usable.",(m..0)!!,a..i,c..i,d..i) e+=41, ;formatted result strlen 40+1(null) (i++ > 5)?? >a ;6 items, that is 5-times loop, 012345 ; --- make menu --- ;thanx for wanama, PK14 96/07/17 e=pq..135, ;gathered data top address #] ;-- make dummy macro -- n=pn..-27, ;pn..-27 linebuffer &01 &Sm(n,r,20) ;dummy macro (menu) n+=20, (14){n.0-, n++,} ;nulls for item area ??? &Sc(n,"HistBuff") n=r+1, ;menu title (6+1)*2=14 ??? &Sm(n,e,258) ;copy items rr[=pn..-27, &* rr], ;exec! 1: (3+$)."$(1,a,0,ff,ff,0)!01(r)$(0,e1,fc,0,2a,6)" ; ^^^^^^^^^ * used: a,b,c,d,e,i,m,t,(n in Ymenu) PS:(1023) 0% used, 1018 bytes usable. 41 (with null) 42*6=252=$fc 0 size fc $fc=252 2a menu幅 (42): strlen(40) +2(spaces) 6 item個数
一応,試用レポートです. "文字列"を'字'として出力する関係で,連続実行すると以下のように. 1回目 +- HistBuff -------------------------------+ | PS:( 325) 23% used, 248 bytes usable. | | PF:( 281) 24% used, 213 bytes usable. | | PX:( 127) 57% used, 54 bytes usable. | | PS:( 91) 7% used, 84 bytes usable. | | PS:( 127) 14% used, 109 bytes usable. | | PS:( 91) 9% used, 82 bytes usable. | +------------------------------------------+ 2回目 +- HistBuff -------------------------------+ | SP:( 325) 23% used, 248 bytes usable. | | FP:( 281) 24% used, 213 bytes usable. | | XP:( 127) 57% used, 54 bytes usable. | | WP:( 91) 7% used, 84 bytes usable. | | RP:( 127) 14% used, 109 bytes usable. | | AP:( 91) 9% used, 82 bytes usable. | +------------------------------------------+ &Sp(e,"%2s:(%4d) %3d%% used, %4d bytes usable.",m,a..i,c..i,d..i) …で済ましてしまってはいけないのかな…… あと,参考までに,rに入れようとするならローカルから戻す例. (i) &00 t=r, 00: >?{ (ps) (pf) (px) (pw) (pr) (pa) }
> めざらさんのヒストリーバッファの小ささにびっくり。僕のが無意味にでかすぎるんだなぁ。
> === Hbufsize by B ===;disp history buffer size & used size in Ymenu> ただ起動。Ymenuに6つのヒストリーバッファの使用状況を示す。おお、これ良いですね。早速試してみました。 レポートのために、&Sp を、&? に変えて> &Sp(e,"%c:(%4d) %3d%% used, %4d bytes usable.",(m..0)!!,a..i,c..i,d..i)↓ (k)? { &?(e,"%2s:(%4d) %3d%% used, %4d bytes usable.",m,a..i,c..i,d..i) #m} この場合シフトで動作を変える所ですが、遊びで起動キーで変えてみました。 50 ^\ "Hbufsize" k99, &50 k-, . 50 ^^ "Hbufsize" (k==99)? k1, ? k=ks&1, で、結果です。 PS:( 321) 23used, 247 bytes usable. PF:( 511) 39used, 308 bytes usable. PX:( 255) 25used, 190 bytes usable. PW:( 127) 32used, 86 bytes usable. PR:( 255) 7used, 237 bytes usable. PA:( 95) 3used, 92 bytes usable. あれ? % が出力されない? 私の環境だけかなぁ。? ちなみに、私のDEF環境は以下です。 Hs256 ;ps 文字列ヒストリー 〃 Hf512 ;256 ;pf ファイル名ヒストリーバッファ Hx256 ;128 ;px DOSコマンドラインヒストリーバッファ Hw128 ;pw ☆ワーク用ヒストリーバッファのフリーエリア Hn256 ;96 ;pr ☆リネーム時の一時ワークのフリーエリア Ha96 ;64 ;pa アプリケーションコマンドヒストリーバッファ ※V1.6無効 PS:( 321) が Hs256 より大きいのは、一周しているからでしょうかね? アドレスで引き算しているのかなぁ?
今ちょっとだけ手をつけてしまったので、再現できないのですが、 (k)? { &?(e,"%2s:(%4d) %3d%% used, %4d bytes usable.",m,a..i,c..i,d..i) #m} ↓ (k)? { &?("%2s:(%4d) %3d%% used, %4d bytes usable.",m,a..i,c..i,d..i) #m} こうしてみてください。はい、僕も&?()で試してます。>PS:( 321) が Hs256 より大きいのは、一周しているからでしょうかね?>アドレスで引き算しているのかなぁ?いえ、 PS:( 321) が Hs256 ps..-1を見ているだけです。きっと、Hs+初期文字列 in vz.defなのでしょう。string: だっけ(?)に何か設定してるでしょう。 eのせいなのか? Vzを起動して、#Fして#eしてみてください。そのぶんが加算されているんですよ、 きっと。
> (k)? { &?(e,"%2s:(%4d) %3d%% used, %4d bytes usable.",m,a..i,c..i,d..i) #m}> ↓> (k)? { &?("%2s:(%4d) %3d%% used, %4d bytes usable.",m,a..i,c..i,d..i) #m}> > こうしてみてください。はい、僕も&?()で試してます。そ、そうか、&? では、先頭の e, は書式が不正なんですね。> ps..-1を見ているだけです。きっと、Hs+初期文字列 in vz.defなのでしょう。string:> だっけ(?)に何か設定してるでしょう。なるほど、確かに初期文字列に61文字ほど入れていました。 256+61=317 なので、改行2つ足して321とかいう感じですかね。> Vzを起動して、#Fして#eしてみてください。そのぶんが加算されているんですよ、> きっと。納得しました。Hs の実容量は、Hs+PS初期文字列ということですね。 うう、どうやら私が一番VZマクロを忘れているようです。 シナプスが萎萎にぷすっと切れてしまってますね。(^^;
>そ、そうか、&? では
>納得しました。Hs の実容量は、Hs+PS初期文字列ということですね。
>うう、どうやら私が一番VZマクロを忘れているようです。
> ぜんぜん別の話ですが、?=プリント、というのは(中略)普遍的みたいですね。iがカウンタみたく。
> ノスタルジア、ぽろぽろ。
タブ、ばしばし入ってます。連打してます。い、いけないの? 「Vzユーザに捧げる」(『天国』『続天』) このマクロは、文太くんは、要らないでしょうけれど、「めざら資源至言」の 作者さまに捧げちゃいます。うへ。 よく見れば分かるとおり、 ここの末尾にある note1 の全てのバッファを塗り つぶしてから作業に入ります。これら7つ、連続してます。確認しました。 つまり、いまや容易に &?() のデバッグプリントが入れられなくなっています。 これに気づくのに1回プールで泳いでくるしかなかった。つまり、かなり時間が かかったということ。 これをやると、当然、Vzがお亡くなりになります。VTDOSも道連れです。 というわけで、ただ見て楽しんでください。 たぶん、いまや、Vzをそんなに簡単には落とさないと思います。 イメージですが、僕のところではこんな風に見えています。 可愛くないし、見やすくもないのですが、棒グラフの上が規定量(満杯マックス)、 下が使用量です。 +- HistBuff -------------------------------+ | PS:(1023) 28% used, 939 bytes usable. | | ************************************ | | ********** | | PF:( 511) 8% used, 467 bytes usable. | | *************** | | ** | | PX:(1045) 17% used, 970 bytes usable. | | ************************************** | | ****** | | PW:( 511) 3% used, 494 bytes usable. | | *************** | | ** | | PR:( 63) 38% used, 39 bytes usable. | | *** | | ** | | PA:( 127) 1% used, 125 bytes usable. | | ****** | | ** | +------------------------------------------+ 見栄えがあまりに面白くない、 という人は、星定数(star constant)を書き 換えてください。現在値は僕用に 28 です。 僕は 1045bytes なPXバッファ(最長)をもっているので、1045/39桁 (in menu)=26.7 -> 28 としています。ちょっと多めにしてください。 ★の箇所が(star constant=星定数)の場所です。スターコンスタント 「星定数」、なんか気に入ってしまって、この命名法を思いついたときに、 棒グラフ、完成させるところまで行くぞ! と力が入った。なので連呼してます。 (変数に出したりはしませんよ。近辺に下手っぽいのがあります。スルー してください) めざらさんの場合、 PS:( 325) 23% used, 248 bytes usable. これが最長のようですので、 325/39=8.3 -> 9 or 10 konnoさんの場合、 PF:( 511) 39% used, 308 bytes usable. ;% added by B これが最長のようですので、 511/39=13.1 -> 14 or 15 ぐらいでしょうか。 メニューが壊れたりしたら、Vzを再起動でもして、書き直してください。 1箇所、無茶してる。でも安心安全です。そういう意味ではありません。背伸び。 2箇所、情けない、です。 アルファベットの暗号ばっかりだよ、これ。英語じゃない。右で英語してる。 編集コマンド、たとえば、#F ちがうか、”あああ”とか、#fとか、&?() とか、#g、#rみたいなのがないマクロなんて、、、。可愛くないのは、間違いない。 === Hbufsize by B ===;disp history buffer size & used size in Ymenu #if 0 ただ起動。Ymenuに6つのヒストリーバッファの使用状況を示す。 (あんまり面白くない、役に立たない)棒グラフ付き。 いつかカーソルを消します。今回は(きっとかなりしばらく)断念。 「嘘だろぉ、これで消えるはずなんだけどなぁ」、ぶつぶつ、、、。 #endif * M 50 ^^ "Hbufsize" ?. ;-- thanx! mezala's Vz faq!! -- d12+c12+b12+a0=pq..139, ;flwork(194), DATA Buff ; a-d:12 bytes each ; a: hist size, b: used size ; c: used percentage ; d: usable bytes (12*6=72 max) f=pq..140, ;flwork2(194), STAR Work (max 80) e=pq..134, ;tmpbuf+, GATHERD Data (result), see note1 ; (256)+2(256)+3(160)+64+64=800 ; e: gathered data (41*18=738 max) l=297, p=e-4, ;see note2 below, kya kya kya (l){ &Im(p+=4,0) } ;clear all the 8 buffers (pq..134-140) i-, ;over all counter ; --- get max size --- :A (i)>?{ (ps) (pf) (px) (pw) (pr) (pa) } t=mg..0, ;<t> buffer top address a..i=t..-1, ;buff size ; --- get buff name --- (i)>?{ (m="PS") (m="PF") (m="PX") (m="PW") (m="PR") (m="PA") } ; --- get used size --- p=t, l-, ;<p>, <l> local :a &Sn(p) (r)?? >b l+=r++, p+=r++, >a :b b..i=l, ; --- get percentage --- c..i=b..i*100/a..i, ; --- get usable bytes (diff) --- d..i=a..i-b..i, ; --- gather all data --- ;thanx mezala! &Sp(e,"%2s:(%4d) %3d%% used, %4d bytes usable.",m,a..i,c..i,d..i) &Sn(e) e+=r+1, ; --- make 2-set stars in <f> buffer --- l=f, fy+, ;<l> local :c (fy)? v=a..i/28, ? v=b..i/28, ;<v> local, num of stars &Sm(l," ",1) l++, (v){ &Sm(l,"*",1) l++, } ; 28, star constant ★ l.0-, l++, ; divider 1045/39=26.7 -> 28 (fy)?? >d ; すごく下手っぽいと思う。 fy-, >c :d ; --- send stars to gathering buffer --- &Sm(e,f,l-f) ;end null already included in src e+=l-f, (i++ > 5)?? >A ;6 items, that is, 5-times loop, 012345 ; --- make Ymenu --- thanx for wanama, PK14 96/07/17 e=pq..134, ;gathered data, (menu items) &01 ;-- measurements #] n=pn..-27, ;linebuffer &02 &Sm(n,r,20) ;send dummy macro (+menu header) n.16=l+2, ;longest string = menu width (f), n.17=h, ;item num (4) "+2" added by B above ; w=n, ;added by B, dame dame k=h++*2, n..7=j+k+8, ;n..7 menu size (c0) n+=20, (k){ n.0-, n++, } ;nulls for items &Sc(n,"HistBuff") n=r+1, ;title (*) &Sm(n,e,j) ;items after title (*) ; w.18=-1, ;no cursor, added by B, dame dame rr[=pn..-27, &* rr], ;exec! 01: j=e, h-, l-, ;- measure longest item,item num, all (*) :a &Sn(j) (l<r)? l=r, ;longest string in <e> buf (r)? { j+=r++, h++, >a } ;strings (items) num j=j-e, ;all the length (*) 02: (3+$)."$(1,a,0,ff,ff,0)!01(r)$(0,e1,c0,0,f,4,0,0)" ; ^^^^ ^ ^ ^★ overwrite by this macro ; not successful (T_T) * used: a,b,c,d,e,f (buffer); i (overall counter), m (Hbuf name), t (Hbuf pointer) local: (easily destroyed & recyclable):l,p,v Ymenu: j,k,l,n,h for debug (don't use this or use discreetly, &?() work is being used!) &?("%2s:(%4d) %3d%% used, %4d bytes usable.",m,a..i,c..i,d..i) ei[-, #m ei], note1: tmpbuf 256 pq..134 cmdlineLbuf,&g() tmpbuf2 256 pq..135 alias,filer,&g() tmpbuf3 160 pq..136 DTA,smooth,&?(),#O pathbuf 64 pq..137 filer path pathbuf2 64 pq..138 filer mask flwork 194 pq..139 filer work flwork2 194 pq..140 filer work2 note2: 512+160+128+388=1188 1188/4=297
実はまだ小さい点が2点ほど、ありはするのですが。 でも、ま、いいでしょう。「嫌だなぁ」と思っていたところは潰しました。 おめでとう! 完成です! final versionでも、Vzを落とすことはないと思いますよ。大きな違いは、 カーソルを消した(消せた)だけです(final+1)。あとは、僕の小さなこだわり。 つまり、これで落ちたら、あっちでも落ちます。落ちないと思いますが、 万が一落ちたら、何が原因かお教えください。 === Hbufsize by B ===;disp history buffer size & used size in Ymenu #if 0 ただ起動。Ymenuに6つのヒストリーバッファの使用状況を示す。 (あんまり面白くない、役に立たない)棒グラフ付き。 #endif * M 50 ^^ "Hbufsize" ?. ;-- thanx! mezala's Vz faq!! -- d12+c12+b12+a0=pq..139, ;flwork(194), DATA Buff ; a-d:12 bytes each ; a: hist size, b: used size ; c: used percentage ; d: usable bytes (12*6=72 max) f=pq..140, ;flwork2(194), STAR Work (max 80) e=pq..134, ;tmpbuf+, GATHERED Data (result), see note1 ; (256)+2(256)+3(160)+64+64=800 ; e: gathered data (41*18=738 max) p=e-4, ;<p> local (297){ &Im(p+=4,0) } ;see note2 below, not necessary in fact ;clear all the 7 buffers (pq..134-140) i-, ;<i> overall counter/ptr (makes main loop) ; --- get buff name --- :A (i)>?{ (m="PS") (m="PF") (m="PX") (m="PW") (m="PR") (m="PA") } ;<m> ; --- get max size --- (i)>?{ (ps) (pf) (px) (pw) (pr) (pa) } t=mg..0, ;<t> HistB top a..i=t..-1, ;buff size ; --- get used size --- p=t, l-, ;<p>, <l> local :a &Sn(p) (r)?? >b l+=r++, p+=r++, >a :b b..i=l, ; --- get percentage --- c..i=b..i*100/a..i, ; --- get usable bytes (diff) --- d..i=a..i-b..i, ; --- gather all the data --- ;thanx mezala! &Sp(e,"%2s:(%4d) %3d%% used, %4d bytes usable.",m,a..i,c..i,d..i) &Sn(e) e+=r+1, ; --- make 2-set stars in STAR Work <f> --- l=f, fy+, ;<l> local (moving ptr) <- <f> buff :c (fy)? { v=a..i/28, } ? { v=b..i/28, } ;<v> local, num of stars &Sm(l," ",1) l++, ; 28, star constant ★ (v){ &Sm(l,"*",1) l++, } ; divider 1045/39=26.7 -> 28 l.0-, l++, ; mezala:10, konno:15, recommended (fy)? { fy!, >c } ; --- send stars to gathering buffer --- &Sm(e,f,l-f) ;end nulls already included in src e+=l-f, ;2 strings at once (i++ > 5) ?? >A ;6 items, that is, 5-times loop, 012345 ; --- make Ymenu --- thanx for wanama, PK14 96/07/17 e=pq..134, ;gathered data, (menu items) &01 ;-- measurements #] n=pn..-27, ;linebuffer &02 &Sm(n,r,20) ;send dummy macro (+menu header) n.16=l+2, ;longest string = menu width (f), n.17=h, ;item num (4) "+2" added by B above w=n, ; added by B, thanks to mezala k=h++*2, n..7=j+k+8, ;n..7 menu size (c0), formula ; <k> (h+1)*2 = formula, too ; see #1055 PK13, 93/08/15 neko-san n+=20, (k){ n.0-, n++, } ;nulls for items &Sc(n,"HistBuff") n=r+1, ;title (*) &Sm(n,e,j) ;items after title (*) w.19=-1, ;no cursor, added by B, thanks to mezala rr[=pn..-27, &* rr], ;exec! nozlog #1469 01: j=e, h-, l-, ;- measure longest item,item num, all (*) :a &Sn(j) (l<r)? l=r, ;longest string in <e> buf, length=<l> (r)? { j+=r++, h++, >a } ;items's num <h> j-=e, ;all the length (*) <j> 02: (3+$)."$(1,a,0,ff,ff,0)!01(r)$(0,e1,c0,0,f,4,0,-1)" ; ^^^^ ^ ^ ^overwrite by this macro * 14 16 17 18 19 c0 0 f 4 0 -1 used: a,b,c,d,e,f (buffer/var/ptr); i (overall counter/ptr), m (HistB name), t (HistB ptr) local: (easily destroyed & recyclable): l,p,v Ymenu: j,k,l,n,h for debug (don't use this or use discreetly, &?() work is being used!) &?("%2s:(%4d) %3d%% used, %4d bytes usable.",m,a..i,c..i,d..i) ei[-, #m ei], note1: tmpbuf 256 pq..134 cmdlineLbuf,&g() tmpbuf2 256 pq..135 alias,filer,&g() tmpbuf3 160 pq..136 DTA,smooth,&?(),#O pathbuf 64 pq..137 filer path pathbuf2 64 pq..138 filer mask flwork 194 pq..139 filer work flwork2 194 pq..140 filer work2 tmpbuf4 256 pq..149 &z() not used note2: 512+160+128+388=1188 1188/4=297
実行してみました。 とりあえず、何かが落ちるようなことはありませんでした。 バッファ大尽の私の場合、一度に全項目が表示されないのはちょっと残念。 スクロールさせれば済む話ですが。でも、Vzで許容される最大サイズの バッファの場合でもスクロールさせずに全項目を表示できてほしい 気もしますが、この辺、贅沢な悩みということで。 ちなみに私、Hs も Hf も Hx も 4096 に設定してあります。 あ、起動後にファイラーに行くと、パス表示がおかしくなる。 ま、でも、実害はないからいいや。
>バッファの場合でもスクロールさせずに全項目を表示できてほしい
>あ、起動後にファイラーに行くと、パス表示がおかしくなる。
> 「星定数」を適切に設定してください。
としきさん(台風の影響なの? 恐いのですけど……)>試しに、28という定数を100にしてみたのですが、メニュー枠そのものの>横幅が>縮んでしまいました。うん、それが狙われていました。>おそらく、メニュー枠そのものを縮めないようにすれば私の希望は達成でき>そうだ、それでは、 ; --- make Ymenu --- e=pq..134, ;gathered data, (menu items) &01 ;-- measurements #] n=pn..-27, ;linebuffer &02 &Sm(n,r,20) ;send dummy macro (+menu header) n.16=l+2, ;longest string = menu width (f), ↓ n.16=l+6, ;longest string = menu width (f), とでもしてみてください。これと「星定数」との兼ね合い。 星定数=100のまま、上の変更をしてゆく、「+6」や「+4」や「+8」とか。 これでメニュー枠の大きさが決まったら、星定数の最適値を探してみてください。 Ymenuの原理はあまり関係ないです。「星定数」と「l+6」の関係です。 いずれにせよ、全体としては、あまり面白い見栄えにはなりません。下2つ (PR, PA)なんて、ふつう意味ない、と割り切れば(僕です)、上の4つの 最適値が求められます。 めざらさんや、konnoさんのように「健全」なら、下2つを含め「全体」が 見られるのですが、不健全(ほんとに使えてる? editfileばかりになりま せん?)な人は、どっかで割り切るしかないのです。所詮これは「情報」 なのですから。 僕がこのマクロに最初から退廃を感じているのは、そんなわけです。 愚痴なのか!? 追伸:m.gannさんが、「ゴミ捨て場には、paよりpr」と。paの活用なんて……。 完全にゴミ捨て場になってる。これは、少しだけ有益な情報。puのことを考えて いたのです。
> とでもしてみてください。これと「星定数」との兼ね合い。
>わはは、いい感じになりました。
>どうもありがとうございました。
=== Ytest by B ===; PSの文字列からYmenuを作るサンプル。 * M 50 ^^ "Ytest" ; --- make Ymenu --- ;-- thanx to wanama, PK14 96/07/17 ;-- thanx to taneichi, PK14 96/01/29 ;-- of course, the biggest thanx to Yushi &01 ;-- measurements #] n=pn..-27, ;linebuffer &02 &Sm(n,r,20) ;send dummy macro (+menu header) n.16=l+2, ;longest string = menu width (f), n.17=h, ;item num (4) ; n.19=-1, ;cursor posit (-1, none) (A) k=2+h*2, n..7=8+k+j, ;n..7 menu size (c0), (B) n+=20, (k){ n.0-, n++, } ;nulls for rest of header (C) &Sc(n,"PS") n=r+1, ;title (*) &Sm(n,ps,j) ;items after title (*) rr[=pn..-27, &* rr], ;exec! (Z) 01: j=ps, h-, l-, ;measure longest item,item num,all len(*) :a &Sn(j) (l<r)? l=r, ;longest string in PS, length=<l> (r)? { j+=r++, h++, >a } ;num of items num <h> j-=ps, ;all the length of PS (*) <j> 02: (3+$)."$(1,a,0,ff,ff,0)!01(r)$(0,e1,c0,0,f,4,0,ff)" ; ^^^^ ^ ^overwrite by this macro * n: dummy macro + menu header (前半まで) ptr local: j: <- src address // -> length of all the item strings(アイテム全長) h: number of items (メニューアイテム個数) l: longest string (メニュー幅) 足りないので、枠ぶん増やす。+2 以下、S.KIN氏, 93/5/22, <nifty:FGALPK/MES/13/816> より メニュー番号 |E0h │ サイズ │ │ (items + 1)*2 bytes アイテム文字列(items 個) ↓ ↓ │← アイテム種類 →│ ↓ ┌┬─┬┬┬┬┬─┬─┬・・┬─┬─┬─────┬────┬─・・─┬─────┐ └┴─┴┴┴┴┴─┴─┴・・┴─┴─┴─────┴────┴─・・─┴─────┘ ↑↑↑↑ ↑ │││選択アイテム位置 タイトル文字列 ││パラメータのカラム数(中身の詳細についてはS.KINさんの後のねこさんへ) │アイテム数(items) 横幅 覚書をほんと簡単にしたためます。 (A) ローカル02のメニューヘッダを書き換えるところです。-1は19バイト目です。 ffのままでいいでしょう。(C)のヌル潰しから外れていますから。 (B) Kは何なのでしょうか。+8の8は何なのでしょうか。8は簡単。メニューヘッダ前半。 ffまでです。 h*2は間違いない。アイテム個数ぶんX2のアイテムタイプというものが入るそうです。 では、+2は? 「mn_ext メニュー作成ルーチンのアドレス(vz が初期化)」(和生 さんノートより)が入る。2バイトなので、上のS.Kinさんのように、「(items + 1)*2」 と書いても同じになりますが、いちおう正確をきしたつもり。 これで、すでにダミーで与えられているメニュー前半以降のメニューヘッダの長さが でました。Kのことです。kは*itemのとおり、可変です。 で、アイテムの全文字列長が(j)で、ヘッダ前半が8ですから、メニューサイズの n..7が埋まりました。 (C) nを20バイト進めるのは、ダミーマクロ+ダミーメニューヘッダ(前半)、つまり ローカル02が、20バイトだから。 で、後半以降、メニュータイトルまで(これがk)をヌルで潰す。 (Z) 高橋さん曰く(そのとおりですね、と賛同・理解できる自分が嬉しい)、これが Yメニューのキモ。 ご利用の際には、(*)の4箇所だけ書き換えれば、そのままごっくんで行けます。 何人もの方々がこんなことをしてきたはず。buftourにも感謝。 +-+--+-+-+-+-+--+--+--+--+----------+------+------+------+ |0|12|3|4|5|6|78|90|12|34|title str.|item1 |item2 |item3 | +-+--+-+-+-+-+--+--+--+--+----------+------+------+------+ ^ |-item*2-| === test by B ===; * M 50 ^^ "test" !01 . * P 1 "test",4,3,,-1 "aaa" "bbb" "ccc" * |->menu header 4448h: 00 21 30 31 2E 00 E1 1D-00 04 03 00 FF E8 BF 00 ・!01.・・・・・・・・・ソ・ 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ! 0 1 . mn size wd c vl sl ex ex ・ ^ 4458h: 00 00 00 00 00 74 65 73-74 00 61 61 61 00 62 62 ・・・・・test・aaa・bb 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 ・ ・ ・ ・ ・ t e s t ・ a a a ・ b b
c:\vzsrc\cmos\vz.inc 714 ;--- Menu record --- _menu struc ;type _menu = 6bytes mn_wd db ? mn_c db ? mn_valwd db ? mn_sel db ? ; if -1, no cursor mn_ext dw ? ; extern function ptr _menu ends 意味、ありません。 ちょっと通りすがりに、ふと「どこ?」と。みんなvz.incなんですね。
副産物です。割とちゃちゃちゃとできた。しかし、どんどんずれていく。 「これ、欲しい」と思ったときは、なかなかのアイディアじゃないかとか 思ったのけど、しょぼいな、、、。 メモをYメニューで見せてくれます。これだけ。 hist workという自前ヒストリーバッファに文字列をため込み(メニューの内容)、 それをラインバッファに送っておいてから、また自前バッファにYメニューを作り 直して、自前バッファのサイズを抑えています。これを思いついたときは、ちょっと 嬉しかった。(最初は、自前を2つ作っていた。1600*2なので馬鹿にならないなぁ とか思ってました)。 strlen2は、実は作りこんであります。(ムダに)色んな情報がでる、当時つき 合ってくれたkonnoさんに感謝。 "22行*68桁<>19行*78桁" とメッセージに入れてありますが、この程度のサイズの メモだと思ってください。桁数が小さければ、いちおうそれなりの行数は出ると思い ます。モバだどどうなるの? 行数が少ないので。 Vzのメニューには、もちろん、サイズとか画面書き換えとかの制約があるはず です。が、モバでのテストはやってません。 (めざらさん、コメントいただければ嬉しいですが、ご無理をなさらないように。 konnoさんのところとどっちにしよう? と思ったけど、いちおう前後の繋がりと、 マクロは「野ざらし」、という大まかなルールだったと思うので、こちらに上げ させていただきます。UOMですから、問題なしです。<- cf. DOM) === MemoMenu (v 1.00) by B ===; Memo displayed on Ymenu ・行ブロックで起動。メニューにそれが出ます。重要事項の参照用マクロです。 ・一画面のメニューの制限(Vz)は80字X20行程度。その程度に制限されています。 ・一度記憶されたら、それを何度も見せる。消えない。もちろん、マクロ自体がマクロ バッファから消えたら、消えるよ。 ・新規登録したい場合には、シフトで一度、バッファをクリア。 ・ほとんど常に複数ファイルを往復してるのだけど、その往復操作がヘタなので。 * M 50 ^^ "MemoMenu" ?. &10 p=r, ;hist work -> Ymenu buf (data going thru linebuf) ; --- SHIFT -> prep for new memo (del buff) (ks&1)? { p.0-, &m("Buff cleared. Now, ready for new items.") .} (p.0==0) ?? >c ;simply exec! You want to see the memo, again. ; --- initial check (mb==1)?? { &m("line block, please!") .} (xc<0)? { &m("up -> down, only.") .} (xc>25)? { &m("vertically too long!") .} ; ??? improvise! &s ; --- make workfile (nul) #k #B mx[+, #R "nul" #m (s)? 'y' mx], #i ; --- del empty line, first, on nul file ps[=pr, #56 "\n\n" #m "\n" #m "AY" :d #57 (r)? >d ps], ; --- clean up ps[=pr, #56 "\x ^[\s\t]+" #m "" #m "AY" #56 "\x [\s\t ]+$$" #m "" #m "AY" ; #56 "\x ^" #m " " #m "AY" ps], ; --- check the max length #^ #< l-, :f #> (lx>l)? l=lx, ;<l> max length #d (r<0)? >g ? >f :g (l>80)? { &m("sorry! too ugly.") . } l--, ;<l> adjusted ; --- check lines #_ #e v=ln, ;<v> line (l*v>1500)? { &m("too big. 22行*68桁<>19行*78桁.") . } ; --- prep for get strings #_ #s #< ; --- get strings loop (hist work) ps[=p, :a #b #> #G #< #s (r)? >b #< >a :b ps], mx[+, #C mx], ;close nul workfile ; --- strlen2 (upto 2 nulls) si=p, ax=p..-1, ;return <ax> or (r) &i("$(56,33,DB,39,1C,74,06,46,48,74,10,EB,F6,8B,FE,47,5B,2B,F3,8B)$ $(DE,46,8B,C6,40,EB,01,F9,C3)") ; --- move strings in <p> to linebuffer, w/o size info (p..-1) #] n=pn..-27, ;linebuffer &Sm(n,p,ax) ; --- Ymenu in <p> (hist work) from <n> (linebuf) &01 ;-- measurements &02 &Sm(p,r,20) ;send dummy macro (+menu header) p.16=l+2, ;longest string = menu width (f), p.17=h, ;item num (4) k=2+h*2, p..7=8+k+j, ;n..7 menu size (c0), p[, p+=20, (k){ p.0-, p++, } ;nulls for rest of header &Sc(p,"MEMO") p=r+1, ;title &Sm(p,n,j) ;items after title p], &d :c rr[=p, &* rr], . ;exec! 01: j=n, h-, l-, ;measure longest item,item num,all len(*) :a &Sn(j) (l<r)? l=r, ;longest string <l> (r)? { j+=r++, h++, >a } ;num of items <h> j-=n, ;all the length <j> 02: (3+$)."$(1,a,0,ff,ff,0)!01(r)$(0,e1,c0,0,f,4,0,ff)" 10: (5+$)."$(40,06)$[1600]" *
メニューの最大面積は? というテストをしました。 === MNtest by B ===;menu size test 以下、独り言です。 Vz: 80*20=1600 --> 80*19 これぐらいが見やすい。スクロールしない最大は80*19。 スクロールを許すなら、縦スクロールのみ。 * M 50 ^^ "MNtest" !01 (r<0)?. ;80*19=1520 max ;70桁*21行 ;69桁*22行 ;60桁*25行 * P 1 "menuscan",62,25,,-1 ; 横幅60、縦25 "012345678901234567890123456789012345678901234567890123456789" "123456789012345678901234567890123456789012345678901234567890" "234567890123456789012345678901234567890123456789012345678901" "345678901234567890123456789012345678901234567890123456789012" "456789012345678901234567890123456789012345678901234567890123" "567890123456789012345678901234567890123456789012345678901234" "678901234567890123456789012345678901234567890123456789012345" "789012345678901234567890123456789012345678901234567890123456" "890123456789012345678901234567890123456789012345678901234567" "901234567890123456789012345678901234567890123456789012345678" "012345678901234567890123456789012345678901234567890123456789" "123456789012345678901234567890123456789012345678901234567890" "234567890123456789012345678901234567890123456789012345678901" "345678901234567890123456789012345678901234567890123456789012" "456789012345678901234567890123456789012345678901234567890123" "567890123456789012345678901234567890123456789012345678901234" "678901234567890123456789012345678901234567890123456789012345" "789012345678901234567890123456789012345678901234567890123456" "890123456789012345678901234567890123456789012345678901234567" "901234567890123456789012345678901234567890123456789012345678" "012345678901234567890123456789012345678901234567890123456789" "123456789012345678901234567890123456789012345678901234567890" "234567890123456789012345678901234567890123456789012345678901" "345678901234567890123456789012345678901234567890123456789012" "456789012345678901234567890123456789012345678901234567890123" * 1 "menuscan",82,19,,-1 ;スクロールなし max, 80*19 (右1行アキ) "01234567890123456789012345678901234567890123456789012345678901234567890123456789" "12345678901234567890123456789012345678901234567890123456789012345678901234567890" "23456789012345678901234567890123456789012345678901234567890123456789012345678901" "34567890123456789012345678901234567890123456789012345678901234567890123456789012" "45678901234567890123456789012345678901234567890123456789012345678901234567890123" "56789012345678901234567890123456789012345678901234567890123456789012345678901234" "67890123456789012345678901234567890123456789012345678901234567890123456789012345" "78901234567890123456789012345678901234567890123456789012345678901234567890123456" "89012345678901234567890123456789012345678901234567890123456789012345678901234567" "90123456789012345678901234567890123456789012345678901234567890123456789012345678" "01234567890123456789012345678901234567890123456789012345678901234567890123456789" "12345678901234567890123456789012345678901234567890123456789012345678901234567890" "23456789012345678901234567890123456789012345678901234567890123456789012345678901" "34567890123456789012345678901234567890123456789012345678901234567890123456789012" "45678901234567890123456789012345678901234567890123456789012345678901234567890123" "56789012345678901234567890123456789012345678901234567890123456789012345678901234" "67890123456789012345678901234567890123456789012345678901234567890123456789012345" "78901234567890123456789012345678901234567890123456789012345678901234567890123456" "89012345678901234567890123456789012345678901234567890123456789012345678901234567" "90123456789012345678901234567890123456789012345678901234567890123456789012345678" 1 "menuscan",71,22,,-1 ;横幅69、縦22 "012345678901234567890123456789012345678901234567890123456789012345678" "123456789012345678901234567890123456789012345678901234567890123456789" "234567890123456789012345678901234567890123456789012345678901234567890" "345678901234567890123456789012345678901234567890123456789012345678901" "456789012345678901234567890123456789012345678901234567890123456789012" "567890123456789012345678901234567890123456789012345678901234567890123" "678901234567890123456789012345678901234567890123456789012345678901234" "789012345678901234567890123456789012345678901234567890123456789012345" "890123456789012345678901234567890123456789012345678901234567890123456" "901234567890123456789012345678901234567890123456789012345678901234567" "012345678901234567890123456789012345678901234567890123456789012345678" "123456789012345678901234567890123456789012345678901234567890123456789" "234567890123456789012345678901234567890123456789012345678901234567890" "345678901234567890123456789012345678901234567890123456789012345678901" "456789012345678901234567890123456789012345678901234567890123456789012" "567890123456789012345678901234567890123456789012345678901234567890123" "678901234567890123456789012345678901234567890123456789012345678901234" "789012345678901234567890123456789012345678901234567890123456789012345" "890123456789012345678901234567890123456789012345678901234567890123456" "901234567890123456789012345678901234567890123456789012345678901234567" "012345678901234567890123456789012345678901234567890123456789012345678" "123456789012345678901234567890123456789012345678901234567890123456789"
> なかなかのアイディアじゃないかとか思ったのけど、しょぼいな、、、。
> (xc<0)? { &m("up -> down, only.") .}
> (xc>25)? { &m("vertically too long!") .} ; ??? improvise!
> マクロは「野ざらし」、という大まかなルールだったと思うので、
>いえ,色々と応用可能な部品が満載だと思いました.なので,今の仕様では>「これだけ」かもしれませんが,この先,使える場面がきっと来ますよ.どうもどうも、ありがとうございます。考えるところの多いレスでした。 :A 何より、ほんと、その人が欲しいものって、傾向があるなぁ、ということ。 実用派だと、とりわけ。まあ、たとえばEmmettさんとかは、その傾向がかなり広範囲 に及んでいたのだなぁ、とか思いますが。寅二さんとか高橋さんみたいのは、僕は、 あまり実用派だと思ってない(別にぜんぜん悪いことじゃないですが。もー、頭あが りませんし)、そんな意味で。 矩形ブロック、大事ですよね。僕は読もうとしたことないけど。 僕は、一つには検索ですね。マシン語やっても、検索だけマスターする、とか 思ってますし。 話を戻すと、はい、満載なんかじゃないですが、でも流用していこうとは思っ てます。m(__)m>ほんとに動的メニューって便利!>で,思うのは,メニュー構築部という核を中心に,入出力のバリエーションこれですよね、ほんとに。今はしょぼいのですが(やっぱり)、ココですね。 stkhelp が検索対象として、フォーマットされたテキストファイルをもってる、 ここがすごいんだな、と。 ただそんなにいつも辞書つくってるわけにもいかないのですけどねぇ。動的辞 書はないかな、僕に特化したので。 (ちょっと小さくジャンプして。editfile コレクション、統合・整理マクロ を作ろうか、とか思ってます。自分の検索語・ファイル・コマンドラインだから、 特化してそうでしょ。)>> (xc<0)? { &m("up -> down, only.") .}"> ちょっと懐が浅くない?って.#Bではいかんのかしら.了解。宿題、やります。下から上へブロックをしたことがないもので。勝手に 禁止しました。外に出さなければ、このチェックすら、してなかったでしょう。 お気づきだと思いますが、エラーチェック部分は後知恵でつけました。ラベル Aから作り始めて、動いた、じゃ、エラーチェック部分かな、とか。分かってる から、そんなチェック要らないとか思い、やがて、一人でどつぼにはまるタイプ。 明日の自分は赤の他人。あはは。>> (xc>25)? { &m("vertically too long!") .} ; ??? improvise!"> xcの取り得る値は,1,0,-1 だったかと……おほほほほ。 ありがとうございます。「どうする? 25 とかにしとこ」みた いな気のゆるみがもろ出てる。improvise は、ここで、「tekito」と書くのは失礼 みたいな気がして、「即興せよ」という意味でした。>LXに入ってるのと比べてみたら,〔Eijiroの〕ファイルによって大きさがバーラバラ!あはははは。ありますか、めざらさんでも。たまには使ってあげましょう。 僕が思いついたのは、 (1)エネループ。20個ぐらいの充電がやっと終わりました。たまにはチェ ックしよう! 充電器も含め新品も買いました。4つとも高速モードで充電でき るんですよ。たいへんにインテリジェント。evolta もできるよ。 (2)住所録、過去ログ。僕のとこでも(?)、壊れてました。復旧に1週間 ぐらいかかりました。リードオンリーにふだんはしてるのですが、時々、メモい れちゃったりするので。ああ、あの環境であの時、とか。そうそう、どうでもい いことですが、ログ→住所録のジャンプマクロは当然として、住所録内ジャンプ マクロまで書いてしまいました。 で、そのときに気づいたのは、たぶん、YASAT さん担当部分かな、と思われるところで、タブと全角スペースのフォーマット不 正がありました。自分で書いた部分かもしれませんが。上村さんのとこが割とシ ステマティックに。マクロを書くと、こういうのしらみつぶしのチェックしちゃ うじゃないですか。で、気づきました。そのとき sed が大活躍。 (3)sed って、偉いっす。そのうち、としきさんのところで。長年の課題が 解けた! >Aとか。 使うなら、logos sed を。s/srch/repl/3 が使えます。桁的にとても大 事かと。矩形ブロックの置換みたいなものです。僕はエンバグに気づいてません。 僕がマクロにしろ、スクリプトにしろ書くのは、相手がだいたいコンピ ュータの出力なんだよなぁ、と思う今日この頃。使ってるのだか使われているの だか。で、一瞬だけ、攻略の興奮に酔う。 (4)Eijiro。 最新版は、もう SJIS ではないのですって。UTF-8? YASAT さんの話により、Vzの敵であると、、、。 (5)文脈ジャンプ。MemoMenu が欲しかったのは、こんなデータを何度も何 度も見たかったから。 ----- sed.shd ----- @version2 その他1 version2 1988/03/02 06:11 15,366 OLDSED.EXE ;serow 1992/06/17 11:00 25,108 LSED.EXE ;logos 1994/06/02 19:17 70,111 SED.EXE ;GNU 1.18 +m 1.03 ; \{n,m\} OK 1999/06/20 12:41 99,854 GSED3.EXE ;GNU 3.02 +m 1.07 (hgc02147) ; stack overflow in VTDOS 1999/06/20 13:40 90,112 sed32.exe ;GNU 3.02 +m 1.07 (=) ERE Perl5 2003/05/17 02:29 86,016 egsed.exe E ;GNU 4.07 -r 2005/02/11 11:14 98,816 SSED.EXE E ;3.62, based on GNU 4.1 -r -R 2005/08/24 06:32 311,296 OSED.EXE ;GNU 4.1.4 +Onig 2.4.2 -r -R 2007/07/13 09:22 159,744 mbsed.exe ;GNU 4.1.4 (Bruce.) -r ; \{n,m\} OK 2009/10/01 01:45 278,528 onigsed.exe ;GNU 4.1.5 +Onig 2.5.0 -r -R ------------------- ^^^^^^ 注意> 双方でそれぞれ壊れているファイルがあるというオチでした.最近はEijiroを引く>頻度が極度に低いにしても,たまには引いてあげましょう、アゲン。文太のマクロ(コメント)も何かの役 に立ったか。☆\(^^;)>い,いえ,それはルールではなくて,単にわたしの希望だっただけで….いえいえ。細かく深いコメント、多謝です。ま、ルールとか言わずとも、その ときの雰囲気で臨機応変に。 私めは渡り鳥。ぶんちょう。
> MemoMenu が欲しかったのは、こんなデータを何度も何度も見たかったから。
> たまには引いてあげましょう、アゲン。
> 私めは渡り鳥。ぶんちょう。
>躁期に向かっている証左と言えなくもない…のかも.(はっきりしねぇな)あはははは。不謹慎、不謹慎。で、でも、これ、すごく受けてしまった。 今日はいい日。さて、どう時間配分しようか……。ダイコンにネットを かけるのが最初だな……。6年目の種、芽がでました。種袋の種ぜんぶ、 使いきりました。v(^^) 閑話休題。 そんな大きなファイルを、エディタで何とかしようとするのは……。 --- eijicut.sed --- # >Onigsed -f eijicut.sed eijiv58.txt 1,/^■A/Iw 0.ejr #1行目から■Aまで /^■A /I,/^■B/Iw A.ejr /^■B /I,/^■C/Iw B.ejr 中略 /^■X /I,/^■Y/Iw X.ejr /^■Y /I,/^■Z/Iw Y.ejr /^■Z /I,$w Z.ejr #■Zから$(最終行)まで ------------------- 行数指定,/regex/ あるいは /regex/,/regex/ のアドレッシングで範囲指定して、 //I のフラグで、ignorecaseして(serow sedにはきっとない-注-)、 w (write) A.ejr (出力先ファイル)指定 こんな感じで。 次回はないか? (テンポラリーファイルエラーの連発くうと、鬱になりますよね。ボソ) -注-:serow版で対処するには、きっとignorecaseフラグなんてないだろうから、 テキストのフォーマットをよく見て、正規表現を工夫するしかないでしょう。 1,/^■[Aa]/w 0.ejr #1行目から■Aまで これで足りるのかは、やってみないと。 大変すぎるので、Onigsedで。 eijiro.org 171,258,595 2016-01-09 10:32 これがS-JIS最終版に近いもののサイズ。タイムスタンプはあてになりません。 でも、これくらいかな。v.141ぐらいだったような記憶? 最新版を買って、UTF-8とやらについて教えてください。 僕は、上の範囲指定を /^■AC/I,/^■AD/Iw AC.ejr みたく、頭2字にして、110個くらいのファイルに切り分けているみたいでした。 ac.ejr 1,282,942 2017-03-29 23:06 一つが、これぐらいのサイズ。 切り分けは、スクリプトファイル4つをバッチで次々動かすみたい。 これだけしてあると、すいません、はしたない自慢ですが、検索は一瞬です。m(__)m LXで全ての作業をすると、きっとスリリングな3分とかを経験できそう。 「仕事中なの? それともハングしたの?」みたく。sedは非対話型。 やっぱり母艦のパワーのあるWindowsマシンで、Onigsedを使ってというのが オススメですね。 小物マクロの住所録 2009/01 nifty:FGALDC/MES/02/ 03037 文太 WAEI.DEF(謹賀新年) 03052 文太 WAEI.DEF 03088 文太 英辞郎切り分け法 03089 文太 eiji.def (v.0.1) この辺りにあるはずなんですが、ログの復旧が済んでなかった! く、くそう。 鬱&ブルー。ど、どこだ? 最後に。 英辞郎は立派です。そんなに新語でもない表現で、「これって決まった言い方 でしょ」(独立単語の連なり以上イディオム未満)というを、出すことができた のが英辞郎だけ、ということが3回以上ありました。(不必要に細かくいうと、 例辞郎の例文中において、という意味です) 日本人の辞書作りにかける情熱は、世界一です。 PS: 旅、しましょうよ。僕は2月ころ、毎年、むしょうに旅に出たくなります。 PPS: 「壊れていたのは結局 i だけ」 improviseの呪い。あるいは僥倖。 「いまや i で始まる単語も引けます!」 占い師いわく「思いつきの行動を運命が求めているようです。衝動的に 行き先も決めず、旅に出るなど」(improvise)
>01113/01113 SDI00000 中島 ○ フォーラム終了のお知らせ
>( 2) 05/01/12 10:26
>■■■■■■■■■■■フォーラム終了のお知らせ■■■■■■■■■■■
>英辞郎の最新版を買って、UTF-8をVzでどう処理するかblogjumpは飛んでくれませんが(分からにゃい、でかすぎだよ、あのマクロ)、 NIFTY閉鎖後のログは大まかに整理しました。秀丸のお世話になりました。 「テンポラリーファイル・エラー」ブルー。 そして、UTF-8 -> SJISへの変換は、nkfでできるみたいなことも了解。 来年度になったら、英辞郎の最新版を買います。 eiji.defの完成版が、HDフォーマットで失われていることも判明。くくく。 立川で焼肉をくったときには、あったのにぃ 実務的には、もっぱらDDWINなもので。英辞郎をEPWINGにして、DDWINで引く 方法はありますよ。ネットで足りますね。シソーラスはないです、はい。 腹がくくれたので、>それまで旅は禁止! improviseも禁止!これは取り下げます。旅にいって来てください。旅先で人格豹変させて、もう トリックスター。寅さんみたく、超無責任だけど、持ち前に熱さで、人生を おおいに楽しんで来る! (そうもいかない場合には) お庭の雑草抜き、暑さは引いたようなので、のんびりやると、なごみますよ。 もう奴ら体力ありません。弱っていくところを突く。卑怯な行為ではありません。 自然の摂理です。 毎日、ちょっとずつ変化するんですよね、庭。ダイコンの種は蒔きましたで しょうか? そんな時期ですよ。 あー、片付けが進まない。やばい、やばい。 ダイコンにネットを掛けることすらできなかった。 明日、というか今日、やる。
>blogjumpは飛んでくれませんが
> まずひとつ反応しておきますと,〈グローバルまたぎ〉.
> これは VZ のコール/ジャンプの「ルール」(mac16.docに記述)に沿えば
> まったく問題なく,行儀が悪いことにはならないと考えています.
> ・実行位置以下のモジュール内を,ローカル/グローバルを問わずサーチ.
> ・見つからなければマクロバッファの先頭からグローバルのみサーチ.
> 少なくともプッシュ/ポップがまたいでいるより遥かに行儀よい(^-^;
> 例えば,榊原知さんの究極の名作「いきなりブロック」(注:手元の環境)
> 例えば,上村郁夫さんの痒届(何)名作「他画面スクロール」(注:手元の環境)
> 例えば,手前味噌ですみません.(名作と並べるなっての ^^;)
> ;= ^QF.def = H_ear mp0常用者のいきなり検索・次検索
> うーん,イミディエートサーチか…
> いきなり検索よりネーミングかっこいいな
> 「後優先」はエライです。
> aa とかの2文字変数をフラグにして、再検索で #F (aa)? #e とすれば
>汎用変数を使うくらいなら,どうせ自前バッファがあるのだから,
>ごめんね,別に添削とかいう意味じゃなくて,
>3バイトほどマクロバッファが空くなと思って.
>次の版では :z ps], に飛ばしてますね.気にしたんだ.(笑)
>深いも深いのですが,それ以上に個々の環境がひどく異なる上に VZ 特有の「手抜き」が絡み,そしてさらに個々の思い入れがそれ以上に異なるというところが,算譜制作の面白難しいところでありますね.こればかりは「自分ならこうするけど」とまでしか言えない.
>YASAT さん,文字コード。
>わたしは流石にワークファイルまでは手が出ないなぁ
> すっかり過去の人にされてる(^^)