(4113)
4113:
@キーって使えるのね
投稿者:
文太
2009/09/05(土) 23:59
コメント数 2
めざらさんのところのほうが適切なような気もするのですが…。ごめんなさい。
一発投稿記事なので。
マクロ起動キーの話です。
僕のvz.defの冒頭は、こんな風に定義されています。
00 ^Q ^K [ESC] ^O ^I ^N ;2ストロークキー(最大6個)
そして、
http://homepage3.nifty.com/mezala/vz/extcmd/cmd00.html
を見ていたら、ふと、気になってしまい、それほど起動キーに困ってはいないの
ですが、調べてしまいました。
おお、けっこう覚えやすいのが5つも手に入ったな、と(NECのF11-F15の代用
になるものを昔から探していたのです。即席マクロ・シリーズ用キー(ズ))。
^@ (exceptionally SHIFT, too), ^Q@, ^K@, [ESC]@, ^O@, ^I@, ^N@
計8個がOKです。
=== Macrotmp by B ===;
* M
50 ^@ "Macrotmp"
(ks&1)? >a
&m("^@ です")
&w(60) &m("").
:a &m("^\@ です") ;OK. 例外ということで。
&w(60) &m("").
51 ^Q@ "Macrotmp"
(ks&1)? >a
&m("^Q@ です")
&w(60) &m("").
:a &m("^Q\@ です") ;NG
&w(60) &m("").
52 ^K@ "Macrotmp"
(ks&1)? >a
&m("^K@ です")
&w(60) &m("").
:a &m("^K\@ です") ;NG
&w(60) &m("").
53 [ESC]@ "Macrotmp"
(ks&1)? >a
&m("[ESC]@ です")
&w(60) &m("").
:a &m("[ESC]\@ です") ;NG
&w(60) &m("").
54 ^O@ "Macrotmp"
(ks&1)? >a
&m("^O@ です")
&w(60) &m("").
:a &m("^O\@ です") ;NG
&w(60) &m("").
55 ^I@ "Macrotmp"
(ks&1)? >a
&m("^I@ です")
&w(60) &m("").
:a &m("^I\@ です") ;NG
&w(60) &m("").
56 ^N@ "Macrotmp"
(ks&1)? >a
&m("^N@ です")
&w(60) &m("").
:a &m("^N\@ です") ;NG
&w(60) &m("").
*
- No.4113 -
このTreeへ
[リストへもどる]
pre
(4113)
4114:
Re: @キーって使えるのね
投稿者:
めざら
2009/09/06(日) 10:52
参照先:http://homepage3.nifty.com/mezala/
4113 番 文太 さんへのコメント
マニュアルのp167〜168を読みましょう。
文字コード 40h〜5Fh に当たるキーは「全部」使えるのです。
(一部,NEC-98では [, ], _ と [Grph]の組み合わせは不可。)
^K^ とか ^K_ とか ^Q[ とか ^Q] とか,製品版のサンプルvzibmj.defにあります。
@もまったく同じです。プリフィクスの2番目のキーとしてシフト併用できないのは,
受け取り方が違うからと思われます。(おそらく文字として受け取っている。)
これは例えば(キーボードによって異なりますが),シフトキーを不完全に押して
'_'を入力したつもりが,'\'が入力されてしまう場合と同じ。
それじゃどうしてアルファベットはシフトが通るのかというと,
(アルファベットに限らずカナはテーブルにしているわけですが)
それなりに文字コードをシフトして英大文字の範囲にしてるから。
(らしい)
ただひとつの注意点は ^N_(6番目のプリフィクス+'_')を使うなってことだけ。
- No.4114 -
このTreeへ
コメント元:4113 へ
[リストへもどる]
soft
(4113)
4116:
Re: @キーが使えない
投稿者:
konno
2009/09/07(月) 01:27
4113 番 文太 さんへのコメント コメント数 1
> ^@ (exceptionally SHIFT, too), ^Q@, ^K@, [ESC]@, ^O@, ^I@, ^N@
> 計8個がOKです。
おお、これはいいですね。っと思っていたら、重大なことに気がついてしまいました。
VZk07s2は$ffの未定義キーを無視するようにしましたが、^@ って、$FFなんですね。
調べてみたところ、編集画面ではOKでしたが、ファイラーでは効かなくなってしまって
ました。(++;
修正いたしますので、しばしお待ちを。m(__)m
- No.4116 -
このTreeへ
コメント元:4113 へ
[リストへもどる]
soft
(4113)
4119:
Re^2: @キーが使えない
投稿者:
文太
2009/09/08(火) 00:43
4116 番 konno さんへのコメント コメント数 1
めざらさん、
即レスありがとうございました。知っていたのですが、投稿が自分にしかほと
んど意味がない文脈でなされていました。とはいえ、アルファベット以外のキー
では、@は圧倒的に有利で、使われていない可能性も高いのではないか、という
割と普遍的な目論見もあってのことです。誰にでも「あ、知ってたつもりだった
のに盲点だったなぁ、使わないのはもったいないな」というところはあるでしょ
う、たぶん。
konnoさん、
僕の発見は、 プリフィクスを除いた起動キーで(^KA なら A の部分)、アル
ファベットと記号が大きく違う(シフト併用時)、^(ctrl) と @(alt) も記号キ
ー使用時に大きく違う、というものでした。この辺のメカニズムをいつかソース
解説というかたちでなさってくだされば、僥倖です。僕は、(随分と身勝手な話
ですが)、そういうアプローチがちっともないのが残念であり、「ユーザーは生
かさず殺さず」の c.mos 精神があればなぁ、と前から思っていたのです。回り
くどくなくいえば、情報提供は帰ってくるものと信じているのですね。key.asm,
keyibm.asm の、略語解説が konno さん以外の誰にでも必要でしょう。konno さ
んにとってさえ、難しいのだろうとは思うのですが。
でも、あの3つのキーを実用可能にできたのですから…。
我が侭ばかり申しました。
- No.4119 -
このTreeへ
コメント元:4116 へ
[リストへもどる]
soft
(4113)
4121:
Re^3: VZのキー
投稿者:
konno
2009/09/09(水) 22:34
4119 番 文太 さんへのコメント コメント数 1
> 僕の発見は、 プリフィクスを除いた起動キーで(^KA なら A の部分)、アル
> ファベットと記号が大きく違う(シフト併用時)、^(ctrl) と @(alt) も記号キ
> ー使用時に大きく違う、というものでした。
これ、最初意味がわかりませんでしたが、もしかしたら、記号キーはシフト併用
出来ない。という話ですかね。だとしたら、ある意味、当然でしょう。
アルファベットはシフトキーを押しても同じアルファベットになりますよね。
ソース的には、toupper を通すことで大文字小文字の区別がなくなります。
記号の場合はシフトで別の記号になってしまうから出来ないのだと思います。
2ストロークキーでない場合だけキーコードの変換をしているのでしょう。
いや、ソースは読んでないので、想像ですが。(^^;
> この辺のメカニズムをいつかソース解説というかたちでなさってくだされば、僥倖です。
う〜ん、高橋さんほどのレベルならともかく、私はあんまりわかってないんですよね。
それに、間違った解釈や記憶違いがけっこうあるので、とても解説できるレベルでは
ないです。
> key.asm,keyibm.asm の、略語解説が konno さん以外の誰にでも必要でしょう。
ということは、ソースを読むという前提ですよね。私は自分でもわからなくなる為、
少しはコメントを入れるようにしているので、それを参考にしてもらうしかないかと
思いますが。
というだけではあんまりなので、少しだけ。(^^;
keyibm.asm で、
tb_xkeycvt 主にAltキーや特殊キーの変換テーブル? BIOS CALL でのAXの返り値
の、AH(スキャンコード)のテーブル。101キーボードの並び順になっている?
う〜ん、VZのキー入力関係は複雑怪奇すぎるので、アイドルを仕込むにも苦労したんですよ。
これからはなるべくソースのコメントを充実させて、マメにアップするように心がけます。
質問があれば、出来る範囲では応えるようにしますんで、よろしくです。
- No.4121 -
このTreeへ
コメント元:4119 へ
[リストへもどる]
soft
(4113)
4141:
Re^4: VZのキー
投稿者:
文太
2009/09/17(木) 02:14
4121 番 konno さんへのコメント コメント数 1
konnoさん、
ここだけとりあえず、レスさせていただきます。m(__)m
>> 僕の発見は、 プリフィクスを除いた起動キーで(^KA なら A の部分)、アル
>> ファベットと記号が大きく違う(シフト併用時)、^(ctrl) と @(alt) も記号キ
>> ー使用時に大きく違う、というものでした。
>これ、最初意味がわかりませんでしたが、もしかしたら、記号キーはシフト併用
>出来ない。という話ですかね。だとしたら、ある意味、当然でしょう。
>
>アルファベットはシフトキーを押しても同じアルファベットになりますよね。
>ソース的には、toupper を通すことで大文字小文字の区別がなくなります。
>記号の場合はシフトで別の記号になってしまうから出来ないのだと思います。
「toupper を通すことで大文字小文字の区別がなくな」る、この部分は、とて
も深く納得しました。シフトはシフトで別判別と。
ただ、「だとしたら、ある意味、当然でしょう」の部分は、一瞬、そうなのか、
と思いましたが、いえいえ、それは直感に反しますし、ソースの成り立ち的にそ
う考えるのは、あまり有益ではないのではないでしょうか、と、とりあえず思って
おります。
^^, ^\ はシフトが効きますよね(「別の記号」にもかかわらず)。^\_ は、
シフトでしか使えません。それ以外は、2ストロークでは、シフト不可ですよね。
だとすると、「記号の場合はシフトで別の記号になってしまう」は、あまり、現
象的には、あるいは説明としては、うまくないのじゃないか、と思いました。
^(ctrl)と@(alt)の振る舞いの違いも、複雑。
ソースを読んでも、統一的に 容易に【説明】できないのだから、とりあえず使
うだけの目的なら、全部調べて、「使える」「使えない」を表にするのが一番な
んだろうな、と思っております。
うん、ほんと、「ここの記号はなんなんでしょう?」「あ、そうか! なるほ
ど! それで、なんなことができたんですね!」とソース・レベルのお話しをお
伺いしたいものです。怠惰をお許しください。
- No.4141 -
このTreeへ
コメント元:4121 へ
[リストへもどる]
soft
(4113)
4179:
Re^5: VZのキー
投稿者:
konno
2009/09/26(土) 19:26
4141 番 文太 さんへのコメント コメント数 1
文太さん、亀レスです
> ^^, ^\ はシフトが効きますよね(「別の記号」にもかかわらず)。^\_ は、
> シフトでしか使えません。それ以外は、2ストロークでは、シフト不可ですよね。
> だとすると、「記号の場合はシフトで別の記号になってしまう」は、あまり、現
> 象的には、あるいは説明としては、うまくないのじゃないか、と思いました。
VZのキーは98をベースにしているので、DOS/Vキーボードでは無理やり合わせているだけ。
という気がします。98の場合を知らないので、またまた想像になってしまいますが。
というだけではなんなので、toupperでグレップしてみました。
わかってはいないのですが、目に止まった所を一部だけ引用します。
key.asm
306:getkey proc
359: cmp ax,0FF9Ah ; [ESC]キーをプリフィクスキーとするか?
406: cmp ax,0FFDCh ; ##151.10 [CTRL]+[BS] 何だっけ?
687:getalpha proc
call wait_key ; bios_k2 00h ;get-key
call clrkeymode
call fep_act
tst al
_if z
cmp ah,1Ah ; ^@
jne getal_x
_endif
cmp al,20h ; SPC
jb getal8 ; al < 20h
call toupper ; a --> A
cmp al,40h ; @
jb cvpf_x ; al < 40h プリフィクスキー?
cmp al,5Fh ; _
ja cvpf_x ; al > 5Fh プリフィクスキー?
and al,1Fh
getal8: clc ; cf0
ret
getal_x:stc ; cf1
ret
getalpha endp
INST.ASM
1050:scankey proc
scank1:
lodsb
cmp al,KSYM_L ; al =! '[' 2番目の[ESC]?
jne scank11
cmp byte ptr [si],SPC ; [si] =< $20
jbe scank11
cmp byte ptr [si+1],SPC ; [si+1] > $20
ja scank2
scank11:tst dl
js scank_x
call toupper ; a --> A($41)
sub al,40h ; al = al - $40
jb scank_x
cmp al,1Fh ; ^_
ja scank_x
jmps scank_o
scank2:
1173:scanpkey proc
1178: cmp al,'0' ; [ESC]0 個人的にはこっちに興味が
1144:;--- Check prefix key --- ここもプリフィクスキー関連?
全然的外れかもしれませんが、今回はここまでで力つきました。(^^;
> うん、ほんと、「ここの記号はなんなんでしょう?」「あ、そうか! なるほ
> ど! それで、なんなことができたんですね!」とソース・レベルのお話しをお
> 伺いしたいものです。
現状上のようなレベルなので、早くそういう会話ができるようになりたいですね。(^^;
- No.4179 -
このTreeへ
コメント元:4141 へ
[リストへもどる]
pre
(4113)
4183:
Re^6: VZのキー
投稿者:
文太
2009/09/26(土) 20:53
4179 番 konno さんへのコメント
konnoさん
>VZのキーは98をベースにしているので、DOS/Vキーボードでは無理やり合わせて
>いるだけ。という気がします。
これは確かにありますね。そして今や我々は、DOS/V キーボードを中心として
見てしまうのを習慣としている…。「_」がらみも(NFER がらみ)、それかな、
とか空想。
vkeycを当たり前にしてるからあれですが、
======== vz.def ========
* C コマンドキー
02 ^_ ;KBM; (^- @dosv)
ここも、「_」でなく「-」するのが、DOS/V版Vzの仕様でしたよね。
>というだけではなんなので、toupperでグレップしてみました。
あ、ありがたい。ぐすん。
ですが、今は、申し訳ありません、駄目です。
>わかってはいないのですが、目に止まった所を一部だけ引用します。
多謝。m(__)m
key.asm
306:getkey proc
359: cmp ax,0FF9Ah ; [ESC]キーをプリフィクスキーとするか?
406: cmp ax,0FFDCh ; ##151.10 [CTRL]+[BS] 何だっけ?
特殊な奴は、1つ1つチェックして合わせるのですかぁ。
以下、コメントに涙。ここだけ、少し読めるような気がしてしまうのは、妄想
ですね、やっぱり。
------------------------------------------------------
cmp ah,1Ah ; ^@
cmp al,20h ; SPC
jb getal8 ; al < 20h
call toupper ; a --> A
cmp al,40h ; @
jb cvpf_x ; al < 40h プリフィクスキー?
cmp al,5Fh ; _
ja cvpf_x ; al > 5Fh プリフィクスキー?
getal8: clc ; cf0
ret
getal_x:stc ; cf1
ret
------------------------------------------------------
>全然的外れかもしれませんが、今回はここまでで力つきました。(^^;
イエイ! \(゚ロ\)(/ロ゚)/ フレーフレー!
>> うん、ほんと、「ここの記号はなんなんでしょう?」「あ、そうか! なるほ
>> ど! それで、こんなことができたんですね!」とソース・レベルのお話しをお
>> 伺いしたいものです。
>現状上のようなレベルなので、早くそういう会話ができるようになりたいですね。(^^;
ほんとうのほんとうのほんとうに。m(_B_)m
- No.4183 -
このTreeへ
コメント元:4179 へ
[リストへもどる]
pre