=== ClpPst.def for W32 v05e6 === 2024/10/15 #if 0 ■クリップボードへコピー、クリップボードからペースト  VZで Windows95 のクリップボードへのテキスト文字のコピー、カット&ペーストを行うマクロです。  以前「 Word の文章をクリップした後にVZの文章をクリップしても、Word のクリップ内容がそのまま残る」という報告を会議室でいただきましたので、クリップ時には一度クリップボードの内容をカラにしてから作業をするようにしています。  このバグ報告をくださったJonoさんには「VZでテキストを TAB で区切ってからクリップし Excel にペーストすると、データをして1つ1つのセルに入れてくれる」という情報もいただきました。多謝多謝です>Jonoさん ■ 〜 v05  ・v05 からはめでたく文字列ブロックの挿入にも正式に対応しました。また、画面分割時の不具合も解消しました。  これは会議室で耳而夢斎さんに報告&要望をしていただいたんですが、「忙しいからマクロはそっちで作ってくれぇ」というマクロ師にあるまじき我侭に(笑)、氏が快く応じてくださったおかげです。 耳而夢斎さん多謝多謝です。 ■ 〜 v05b  ・キー監視型マクロから起動された時に mx+ のまま外部マクロが起動できなかったバグを修正。 ■ 〜 v05c (耳而夢斎による)2004/09/21  ・巨大ブロックのカット時に64KBを超える部分がブロックとして残らないようにした  ・カットしたブロックがテキストスタックに残らないようにした  ・非ブロックコピー時にカーソル位置を動かさないようにした(*)  (*)コピー/カットのフラグを逆転して対応 ■ 〜 v05d (耳而夢斎による)2010/04/12  ・v05cのカーソル位置戻しで不正なcpを参照しないようにした   (cpを参照したときにラインバッファを指していると戻れない?)  2010年3月頃,急にコピー後のカーソルがとんでもない場所に飛ぶようになった。そのようなときはコマンドラインから戻ったとき常に行番号が不正になっていた。行番号が不正な数字を示していたためだと思っていたのだが,理由はわからなかった。真の理由は解らないままだが,取り敢えず#]でカーソルをテキストバッファに戻してから実行させるようにしてみた。 ■ 〜 v05e5 (DOSVAXJ3対応)2024/10/11 ・INT2F 使用時は、コピー64k以内、ペーストBL(8192)以内の制限があります。 ■組み込み方法  まず同梱の clppst.exe を VZDEF ディレクトリにコピーします。 そして vz.def をオープンしてマクロの登録場所にこのように登録してください。もちろんキーアサインは好みのものに変えてもかまいませんが、他のマクロ、コマンドキーとのバッティングには気をつけてください。 -------------------------------------------------------------------- 85 ^KC "コピー" ;outlaw 無しで組込む &Zs("ClpPst") (r)?? &z("ClpPst") (rr)??. >* 85 ^KX "カット" &Zs("ClpPst",1) (r)?? &z("ClpPst",1) (rr)??. >* 85 ^KV "ペースト" &Zs("ClpPst",2) (r)?? &z("ClpPst",2) (rr)??. >* ;85 ^KC "ClpPst 60" &88 ;outlaw で組込む ;85 ^KX "ClpPst 61" &88 ;85 ^KV "ClpPst 62" &88 -------------------------------------------------------------------- ■使い方  編集モードでのみの起動できます。  ・[Ctrl]KC : コピー ブロック指定(マウスで範囲指定ではなく、あくまでもVZ のブロック指定です、なお矩形は不可(^^;)した部分をクリ ップボードにコピーします。 ブロック指定が無い場合はカーソルのある論理行をコピーし ます。  ・[Ctrl]KX : カット 上記コピー機能のブロックカット版です。  ・[Ctrl]KV : ペースト クリップボードの内容(テキストに限る)をVZの編集画面 にペーストします。 #endif * M 60 "コピー" f+, >03 61 "カット" f-, >03 03: (s)?. &02 ;----------------------------- ;機種チェック #05e (c<2)?>a ;★ DOSVAXJ3以外なら >a (mb)??{ #> #b #< } #k ;非ブロックなら1行 &04 (ct!=1)?{#b #_ #> ux[+, ;CLPPST.TMP open :g #y (mb)?>g ux],} ;内容をクリア #p #W (mb)?{ &d #W #C (s)? 'n' &m(" buf over!") .} dz[=kz, cx=kp..-1, bx=kp-3-cx, dz], ; cx++, ;★★ 1バイト補完 ax$1701, &i($2F) ;Open Clipboard ax$1702, &i($2F) ;Empty Clipboard ax$1703, dx+, si-, di=kz, &i("$(8E,C7,CD,2F,C3)") ;Set Clipboard Data ax$1708, &i($2F) ;Close Clipboard #W #C (s)? 'y' ;クローズ &d &m("INT2F: Text >> ClipBoard!") . :a &00 ;---------------------- ; CLPPST.EXE (mb)??{ ; 非ブロック起動 (f)?{ f++, #] a=cp, } ; コピーならカーソル位置を保存 #05c #> #b #< ; #]はcpの確定:#05d } &s #S &?("%sCLPPST.TMP",pi) #m (s)?'Y' (f)?{ ; コピーの場合 mb-, ; #b 解除 (f-1)?cp=a, ; 非ブロック起動なら元位置に戻す #05c (0) }?{ ; カットの場合 ux[+, ; スタックに残さない #05c :y #y (mb)?>y ; 巨大ブロック対応 #05c ux], } ss2, #E &?("%s /R %sCLPPST.TMP",pr,pi) #m #[ :B &d &m("Text >> ClipBoard!") 62 "ペースト" ?. &02 ;------------------------------------- ;機種チェック #05e (c<2)?>A ;★ DOSVAXJ3以外なら >a &s &04 #^ #< #b #_ #> ux[+, ;CLPPST.TMP open :b #y (mb)?>b ux], d-, ;内容をクリア ax$1701, &i($2F) ;Open Clipboard ax$1704, dx+, &i($2F) ;GET Clipboard DATA SIZE (dx)?{ #C (s)? 'n' &m("%x:%d buf over! 1",dx,cx) .} ;65535 over! cx=ax, &s (cx>=bl)?{ #C (s)? 'n' &m("%d buf over! 2",cx) .} ;bl 8192 over! &Sc(pw,pq) &Sy(pw) bx.0-, d-, ; pq のディレクトリ抽出 mx[+, sn[+, pf[=pr, #O &?("%sclip.tmp",pw) #m ; TMP 一時ファイル open (s)? { d+, 'y' } pf], sn], mx], (d)??>t ; 有ればスキップ &s (4095){" "} #m &d &s #b #^ #k #p #] #S #m ; 無ければ最初は作る :t ; &m(" ax:%x %d",ax,ax) &d mr$ff, #^ #< #28 bx=cp, ax$1705, dx+, si-, di=gz, ;8ec7 mov es,di ;Set Clipboard Data &i("$(8E,C7,CD,2F,C3)") ;cd2f int 2fh ;Set Clipboard Data ax$1708, &i($2F) ;c3 ret ;Close Clipboard #] &d #^ #< #b ps[=pa, #F &o(0) #m #c ;ヌルがあれば検索 ; (r)?{#] &d #b ps], #W sn[+, #C (s)? 'n' &m("buf err!! 3") sn], .} ;err! ★★★ (r)?{#] &d #C ps], sn[+, #C (s)? 'n' &m("buf err!! 3") sn], .} ;err! ヌルがない ps], #k #C :K #p #C (s)? 'y' ;クローズ #i &d &m("INT2F: ClipBoard >> Text!") . :A &00 ;-------------------------------------- ;CLPPST.EXE &m("ClipBoard >> Text") (wt)?{ #W b=id, } &s ss2, #E &?("%s /W %sCLPPST.TMP",pr,pi) #m #[ &04 ;CLPPST.TMP open ps[=pr, #56 &o($1b) #m #m "AY" ps], #_ #> #b #^ #< ek[+, ex[-, :C #k (mb)?{ #W #< #i #W >C } mr-, #C (wt)?{ &#T(-b) #W } #i ex], ek], :E &d &m("ClipBoard >> Text!") 00: &Sp(pr,"%sCLPPST.EXE",pi) ;--- CLPPST.EXE --- &01 (r==0)? { &m("Windows95 上で実行してください") &q . } (r==-1)?{ &m("CLPPST.EXE が VZDEF ディレクトリにありません") &q . } 01: &Sc(pa,pi,3) dx=pa, di=pa+5, ;--- Win check --- bx-, cx=50, ax=$71A0, &i($21) (ax==$7100 || r)?{ (0) . } ax$4300, dx=pr, &i($21) (r)?{ (-1) . } (1) 02: c-, ;--- int2f frag check --- ax=$1700, &i($2F) ;IDENTIFY WinOldAp VERSIO ( ax == $1700 )??c++, ; WinOldAp サポートなら c+1 ax=$7476,bx=$0000,cx=$6F64, ;VTDOS:0 MSP:1 DOSVAXJ3:7476 &i($2F) ;VTDOS check $7476なら DOSVAXJ3 ( ax == $7476 )? c=c+2, ;DOSVAXJ3なら c+2 ; &m("7476 ax:%x c:%d",ax,c) ;ax=7476 なら未サポート 04: a-, mx[+, sn[-, #O &?("%sCLPPST.TMP",pi) #m ;--- CLPPST.TMP --- (s)?{ #[ #[ a+, } sn], mx], (a)?{ &m("クリップボードがカラかテキスト以外です") &d . } * ; a,b,c,d,f,p 使用 ;8ec7 mov ES,BX ;cd2f int 2Fh ;c3 ret