[HOME]  [全部表示 会議室風]  [全部表示 保存用]  [HOME]  [リストへもどる] [リストへもどる]

一括表示


  DOSVAXJ3 でクリップボードは - konno 24/10/03-20:02 No.11524
 ┣ ClpPst.def 改 DOSVAXJ3に仮対応 - konno 24/10/04-01:32 No.11525
 ┗ Re: DOSVAXJ3 でクリップボードは - konno 24/10/05-16:09 No.11526
  ┗ Re^2: DOSVAXJ3 でクリップボードは - たけだ 24/10/06-11:15 No.11527
   ┗ Re^3: DOSVAXJ3 でクリップボードは - konno 24/10/06-15:07 No.11528
    ┗ Re^4: DOSVAXJ3 でクリップボードは - たけだ 24/10/06-16:26 No.11529
     ┣ Re^5: DOSVAXJ3 でクリップボードは - たけだ 24/10/06-19:00 No.11530
     ┃ ┗ Re^6: DOSVAXJ3 でクリップボードは - たけだ 24/10/06-22:03 No.11531
     ┗ Re^5: DOSVAXJ3 でクリップボードは - konno 24/10/06-22:03 No.11532
      ┗ Re^6: DOSVAXJ3 でクリップボードは - たけだ 24/10/06-22:05 No.11533
       ┗ Re^7: DOSVAXJ3 でクリップボードは - konno 24/10/06-22:46 No.11534
        ┗ Re^8: DOSVAXJ3 でクリップボードは - たけだ 24/10/07-00:56 No.11535
         ┗ Re^9: DOSVAXJ3 でクリップボードは - konno 24/10/08-19:17 No.11536

(11524) 11524DOSVAXJ3 でクリップボードは  投稿者:konno   2024/10/03(木) 20:02
   コメント数 2

DOSVAXJ3 で CLPPST.DEF が使えなくてクリップボードのやり取りに悩んでいたのですが
最近過去ログ整理で読み直していたら、ファンクションコールで実現する記事がありました。
全文引用します。
-----------------------------------------------------------

#4898:Re^2: VTDOSインストチェック  投稿者: 文太   2010/01/21(木) 12:26

 1文字欠ける?

=== Macrotmp by B ===;
* M
50 ^^ "Macrotmp"
;	p="0123456789", 
	p="あいうえおかきくけこ", 
	&Sn(p) cx=r, si-,	;size etc  for SET func
	ax=gz, bx=p,		;ptr (ax->es)
	dx=1,			;type
	&>
	&m("finished").

0:	&i(3+$)."$
	$(50,B8,01,17,CD,2F,B8,02,17,CD,2F,07,B8,03,17,CD)$
	$(2F,B8,08,17,CD,2F,C3)$"

;	push ax
;	mov ax,1701h	;open
;	int 2Fh
;	mov ax,1702h	;clear
;	int 2Fh
;	pop es
;	mov ax,1703h	;set
;	int 2Fh
;	mov ax,1708h	;close
;	int 2Fh
;	ret

*
-----------------------------------------------------------

これをVTDOSで実行するとクリップボードにコピーできました。\(^^)/ ヤッタ-
本来 XP ではこのファンクションは使えないはずですが、10#さんが対応してくれたんですね。
で、1文字欠ける? というのは、XPの仕様どおりだと文字列の最後の1バイトが欠けるのですね。
それにも10#さんは対応してくれました。m(__)m

それで、ダメもとでこのマクロを DOSVAXJ3 で実行させたら、なんと! 動くではありませんか!!
おお!!!! と思いましたが、最後の1文字が欠けています。
これは、軟式さんに報告して直してもらおうと思います。
キーボードでコピーするのもうまく動かないのでそれも聞いてみます。

お忙しいでしょうから、返事がもらえるかわかりませんが、メールしてみますね。

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


(11524) 11525ClpPst.def 改 DOSVAXJ3に仮対応  投稿者:konno   2024/10/04(金) 01:32
    11524 番 konno さんへのコメント    コメント数 1

OSVAXJ3でも Fコールでクリップボードコピーが出来るのが分かったのでやってみました。
#1141 の H岡さんのマクロと文太さん情報で実現できました。\(^^)/ ヤッタ-

一応VZマクロの部屋に置きました。

  ClpPst.def 24-10-04
・寅次氏作のクリップボードマクロの改造版。DOSVAXJ3に仮対応。ほとんどテストしてません。
・環境変数 VZSYM に AXJ3 が必要です。 ※高橋版VZ以降が必要
 SET VZSYM = AXJ3

人柱^H 動作報告お待ちしてます。(^^;


ここにも置いておきますね。
#txt:ClpPst.def

      - No.11525 -    このTreeへ    コメント元:11524 へ [リストへもどる] soft


(11524) 11526Re: DOSVAXJ3 でクリップボードは  投稿者:konno   2024/10/05(土) 16:09
    11524 番 konno さんへのコメント    コメント数 1

軟式さんにメールしたところ、対応テスト版をいただきました。
クリップボードへコピーは正常にできました。
ありがとうございます。

> この機能ですが、本家 DOSBox では実装されておらず、DOSVAXJ3 では
>Wengier 氏が作成した LFN とクリップボード対応 DOSBox からいろいろ
>移植した際に追加されたと思われます。その時点で 1 バイト欠けのバグ
>はあったようです。

ということのようです。
ClpPst.EXE が使えなくて困っていたので助かりました。
今ペーストの方を試行錯誤していますが、なかなか難しいです。

とりあえず @[F10] でペーストは出来るのですが、VZのインデントが効いてしまいます。

    ax$1705, cx=ax, dx+, &i($2F)	    ;GET Clipboard DATA

この実装がわからなくて頓挫しています。
どなたかお知恵を〜  m(__)m

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


(11524) 11527Re^2: DOSVAXJ3 でクリップボードは  投稿者:たけだ   2024/10/06(日) 11:15
    11526 番 konno さんへのコメント    コメント数 1

MS-DOS Playerでも、INT 2Fh, AH=17hを一部サポートしてみました。

ちょうど本業で、クリップボードを操作する処理を書いてまして(苦笑)
実にタイミングが良かったです。

#古いVB6のアプリで、UNICODEなファイルパスをテキストボックスにコピペする、
#みたいな処理を書いてました。
      - No.11527 -    このTreeへ    コメント元:11526 へ [リストへもどる] soft


(11524) 11528Re^3: DOSVAXJ3 でクリップボードは  投稿者:konno   2024/10/06(日) 15:07
    11527 番 たけだ さんへのコメント    コメント数 1

> MS-DOS Playerでも、INT 2Fh, AH=17hを一部サポートしてみました。

武田さん、ありがとうございます。
古い版の MS-DOS Player は INT2F 1700h 不可でしたが、CLPPST.EXEが使えるので問題ありませんでした。
新しい版を VZマクロで試してみました。

=== INT2F_17.DEF ===
* M
80 ^\ "INT2F 1700"
	?.
	ax=$1700, &i($2F)		;IDENTIFY WinOldAp VERSION
	&m("1700   ax:%x dx:%x",ax,dx) 
	(ax==$1700)?.			; ax$1700 なら未サポート
*

このマクロでは、ax101h とか出るのでインストチェックはOKです。
次に文太さんのコピーチェックマクロでは

=== Macrotmp by B ===;
* M
50 ^\ "Macrotmp"
;	p="0123456789", 
	p="あいうえおかきくけこ", 
	&Sn(p) cx=r, si-,	;size etc  for SET func
	ax=gz, bx=p,		;ptr (ax->es)
	dx=1,			;type
	&> a=r,
	&m("finished %d %s",a,p).

0:	&i(3+$)."$
	$(50,B8,01,17,CD,2F,B8,02,17,CD,2F,07,B8,03,17,CD)$
	$(2F,B8,08,17,CD,2F,C3)$"

;	push ax
;	mov ax,1701h	;open
;	int 2Fh
;	mov ax,1702h	;clear
;	int 2Fh
;	pop es
;	mov ax,1703h	;set
;	int 2Fh
;	mov ax,1708h	;close
;	int 2Fh
;	ret
*

これは MSDOS.EXE 起動直後に実行するとコピー出来ていないようです。
下のマクロを実行後はキチンとコピー出来たようです。
テストマクロでは何か初期化かパラメータが足りないのでしょうか。
 
次に H岡さんのマクロでは

=== cliput.def ===
*m
89 ^\ "ブロック箇所をテキストスタックとクリップボードへコピー"
    ?. (mb)??{ #> #b #< }		; ★ 非ブロックモードは1行コピー  追加
    #k 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
;E8FF:0000 8EC7           MOV    ES,DI
;E8FF:0002 CD2F           INT    2F
;E8FF:0004 C3             RET    
    ;DX=1:text
    ;ES:BX = data source ->di:bx
    ;SI:CX = data size   ->00:cx
    ax$1708, &i($2F)                                    ;Close Clipboard
*

コピーは出来ますが、文字列の最後に 02h+12h の文字コードが出ています。
これらのマクロは VTDOSや DOSVAXJ3テスト版では正常に動作しています。
よろしくお願いします。

コピーは出来たのですが、ペーストで躓いています。
ペーストのアセンブラプログラムなど教えてもらえないでしょうか。
今の私は頭が働かなくて、(;_;)

※ これは DOSVAXJ3 でコピーしてみました。あれ?最後に全角文字がある??
 と思ったら、01h が出ていました。
 cx++, の1バイト補完したままが原因でした。m(__)m
      - No.11528 -    このTreeへ    コメント元:11527 へ [リストへもどる] pre


(11524) 11529Re^4: DOSVAXJ3 でクリップボードは  投稿者:たけだ   2024/10/06(日) 16:26
    11528 番 konno さんへのコメント    コメント数 2

MS-DOS Player内のコードで、以下のような処理で検証をしています。

const char hoge[]="あいうえおかきくけこ";

// ES:BX = 0000:0000
CPU_LOAD_SREG(CPU_ES_INDEX, 0);
CPU_BX=0;
memcpy(mem + CPU_ES_BASE + CPU_BX, hoge, sizeof(hoge));

// クリップボードを開く
CPU_AX=0x1701;
msdos_int_2fh_17h();
// クリップボードを空にする
CPU_AX=0x1702;
msdos_int_2fh_17h();
// ES:BXからSI:DIだけクリップボードにコピーする
// 10バイトなので「あいうえお」だけコピーする
// ※ お尻にnull-terminatorを追加してコピーされる
CPU_SI=0;
CPU_DI=10;
CPU_DX=1;
CPU_AX=0x1703;
msdos_int_2fh_17h();
// クリップボードを閉じる
CPU_AX=0x1708;
msdos_int_2fh_17h();

// クリップボードを開く
CPU_AX=0x1701;
msdos_int_2fh_17h();
// クリップボード内のデータのサイズを取得
CPU_DX=1;
CPU_AX=0x1704;
msdos_int_2fh_17h();
// クリップボード内のデータをES:BXに取得
CPU_DX=1;
CPU_AX=0x1705;
msdos_int_2fh_17h();
// クリップボードを閉じる
CPU_AX=0x1708;
msdos_int_2fh_17h();

クリップボード内のデータサイズの取得は、GlobalSize()を使うよりも、
strlen()でデータの文字列長を取得するほうが良さげっぽいですね。
次のリリースで変更しておきます。
      - No.11529 -    このTreeへ    コメント元:11528 へ [リストへもどる] soft


(11524) 11530Re^5: DOSVAXJ3 でクリップボードは  投稿者:たけだ   2024/10/06(日) 19:00
    11529 番 たけだ さんへのコメント    コメント数 1

INT 2Fh, AX=1704hでクリップボード内のデータのサイズを取得できなかったときに、
DX=0にならない問題もありました。
これも次のリリースで直しておきます。
      - No.11530 -    このTreeへ    コメント元:11529 へ [リストへもどる] soft


(11524) 11531Re^6: DOSVAXJ3 でクリップボードは  投稿者:たけだ   2024/10/06(日) 22:03
    11530 番 たけだ さんへのコメント

もうちょっと色々修正してみました。
最新版だと如何でしょうか?
      - No.11531 -    このTreeへ    コメント元:11530 へ [リストへもどる] soft


(11524) 11532Re^5: DOSVAXJ3 でクリップボードは  投稿者:konno   2024/10/06(日) 22:03
    11529 番 たけだ さんへのコメント    コメント数 1

> MS-DOS Player内のコードで、以下のような処理で検証をしています。

わかりやすいソースをありがとうございます。
なんとか出来そうな気がしてきたのでこれを参考に試行錯誤してみます。
m(__)m

      - No.11532 -    このTreeへ    コメント元:11529 へ [リストへもどる] soft


(11524) 11533Re^6: DOSVAXJ3 でクリップボードは  投稿者:たけだ   2024/10/06(日) 22:05
    11532 番 konno さんへのコメント    コメント数 1

すみません、コピーするデータ長は、SI:DIでなくSI:CXでした。
先ほど修正したバージョンをリリースしています。
      - No.11533 -    このTreeへ    コメント元:11532 へ [リストへもどる] soft


(11524) 11534Re^7: DOSVAXJ3 でクリップボードは  投稿者:konno   2024/10/06(日) 22:46
    11533 番 たけだ さんへのコメント    コメント数 1

> すみません、コピーするデータ長は、SI:DIでなくSI:CXでした。

ありがとうございます。

> 先ほど修正したバージョンをリリースしています。

いただきました。テストマクロは正常に動作しているようです。

      - No.11534 -    このTreeへ    コメント元:11533 へ [リストへもどる] soft


(11524) 11535Re^8: DOSVAXJ3 でクリップボードは  投稿者:たけだ   2024/10/07(月) 00:56
    11534 番 konno さんへのコメント    コメント数 1

> いただきました。テストマクロは正常に動作しているようです。

ご確認ありがとうございます。
正常に動作して安心しました。
バグのせいで不必要な検証をしていただいて申し訳ないです。
      - No.11535 -    このTreeへ    コメント元:11534 へ [リストへもどる] soft


(11524) 11536Re^9: DOSVAXJ3 でクリップボードは  投稿者:konno   2024/10/08(火) 19:17
    11535 番 たけだ さんへのコメント

クリップボードからペーストも正常動作を確認できました。
マクロが上手く動かないので時間が掛かりました。m(__)m

メモリにペーストするところをファイルに入れようとして躓いていました。
張り付けるサイズ分を事前に確保しておかないと駄目なんですね。
DOSエミュ3種とも同じ動作になるので、仕様どおりなのだと思います。
・・・と思ったけど、VTDOSはヌルが残る場合が有りますね。

マクロはもう少し整理してから公開します。
ありがとうございました。
      - No.11536 -    このTreeへ    コメント元:11535 へ [リストへもどる] soft