6点入力がしたいNo.32418
tetchan さん 13/07/15 22:02
 
こんなことをお願いできるのかどうか知りませんが、点字の6点入力がしたいのです。
アスキー文字の「21h」から「5Fh」までの入力をするだけですので、点字フォント
http://www.duxburysystems.org/downloads/Duxbury%20Braille%20fonts.zip」を
インストールすれば、秀丸エディタでなくても普通にキーボードから入力できます。
これを入力が簡単な6点入力でできないかと考えています。
6点入力とは「FDSJKL」のキーを点字の第1点から第6点までに見立てて入力
する方法です。アルファベットの「a」は点字では「1点」で6点入力の場合は「F」
です。「b」は点字では「1+2点」で6点入力の場合は「FD」です。これは「F」と
「D」を同時にたたきます。「=」は「1+2+3+4+5+6点」で「FDSJKL」と6つのキーを
同時にたたきます。
本当は6点入力IMEがあればワードなどでも使えるのですが、たぶん実在しないの
で、秀丸エディタで入力できないかと思いました。
マクロを考えてみたのですが、全く思いつきません。BASICの「INKEY$」のようなも
のがあれば、どうにかなりそうなのですが・・・。
全く無理な話でしたら、無視していただいて結構です。

[ ]
RE:32418 6点入力がしたいNo.32419
IKKI さん 13/07/16 00:27
 
tetchanさん、こんばんは。ユーザーのIKKIと申します。

点字入力でしたら、秀丸ではなく点字専用のソフトを使うのが何かと好都合なのでは
ないでしょうか。
ちょっと探してみたところ、いろいろなソフトがあるようです。
http://j7p.net/soft/
http://www.ttools.co.jp/product/eyes/BES/
http://www.nbs.co.jp/winbrl.htm

Pc-talker 付属の KTOS という点字 IME もあるようです。
http://www.aok-net.com/products/pttokutyo.htm

秀丸マクロで6点入力方式のようなものを満足に実装することは、できないとは言い
ませんが、満足の行くものは作れないと思います。

追って秀丸担当さんから公式な回答があると思いますが、とりあえずご参考までに…

[ ]
RE:32419 6点入力がしたいNo.32420
tetchan さん 13/07/16 11:08
 
IKKIさん、コメントありがとうございます。
実は現在ラオスで視覚障害者の支援をしています。
点字専用のソフトはいろいろ調べてみました。いろいろな機能を備えていてすばらし
いものです。
日本語の点字ソフトであれば「Tエディタ」 というのが、無料で使えて機能は抜群に
優れています。これがあれば、他の有料ソフトは必要ないと思っています。問題は日
本語のソフトであることと、単純なテキストファイルの出力ができないことです。す
なわち点字用の余分なヘッダーがついてしまいます。

日本語や英語の点字ソフトはいいものが多くあるのですが、それはそれぞれの言語に
特化していて、他の言語では非常に使いにくいものです。
点字そのものはアスキー文字の「21h」から「5Fh」までを使うだけで、万国共通です。
ですから、単純に6点入力でアスキーのテキストファイルができれば、世界中で使え
るのです。その他の機能は一切必要ありません。

Googleで調べると、いろんな国の人が私と同じようにこういうソフトを探しています
が、いいものがないようです。ただひとつ、Duxbury Perky Duck という良いソフト
が無料で配布されているのですが、残念ながらテキストファイルの出力はできても、
読み込みができないのです。要するにPerky Duckで作ったものは秀丸で読めても、秀
丸で作ったものが、Perky Duckでは読み込めません。

世界中にいろいろな言語のIMEがあるのに、なぜ、6点入力のIMEがないのか不思議で
す。これさえあれば、発展途上国で視覚障害者の支援をしている人の多くが助かると
思います。

6点入力のIMEがないので「秀丸+6点入力」を思いついたわけです。
ラオス語のテキストファイルを点訳するのは秀丸のマクロを使ってほぼ出来上がりま
した。これに、6点入力が加われば最高です。

[ ]
RE:32420 6点入力がしたいNo.32424
秀丸担当 さん 13/07/16 12:00
 

6キーの同時押しとなると、全てのキーボードが対応しているわけではなさそう
で、汎用的なソフトとしてはたぶん難しいのではないかと思います。
いわゆるNキーロールオーバーに対応したキーボードでないとできなさそうです。

試しに秀丸マクロで以下のようなマクロを作ってみたところでは、いつも自分の
使っているキーボードでは2〜5キーの同時押しまでしかできませんでしたが、
Realforceというキーボードを使ってみたところでは6キーでもできました。
できないほうのキーボードではハードウェア的な制約によってキーの組み合わせ
によって同時押しの具合が変わるようです。

もし6キーの同時押しにも対応しているキーボードをお持ちであれば以下のマク
ロを改変することでなんとかなるのではないかと思います。

newfile;
$prev="";
while(1){
  $a="";
  if(iskeydown(70)) $a=$a+char(70);
  if(iskeydown(68)) $a=$a+char(68);
  if(iskeydown(83)) $a=$a+char(83);
  if(iskeydown(74)) $a=$a+char(74);
  if(iskeydown(75)) $a=$a+char(75);
  if(iskeydown(76)) $a=$a+char(76);
  if($a!="" && $a!=$prev){
    insert $a+"\n";
  }
  $prev=$a;
}
endmacro;

(ずっとループしているマクロなので終了させるにはEscキーでマクロを中断さ
せます)

[ ]
RE:32420 6点入力がしたいNo.32426
K'zawa さん 13/07/16 15:00
 
tetchanさん、こんにちは。
K'zawaです。

この程度でよければどうぞ。
6個同時押しに対応さえしていれば動くと思います。

点字キー以外の機能
ESC = マクロ終了
Tab = タブ記号入力
Enter = エンター
; = エンター
@ = バックスペース
Space = 空白入力

// マクロここから
  setcompatiblemode 0x0F;
  while ( 1 ) {
    #n = inputchar( "macro is running" );
    if ( #n == 9 ) insert "\t";
    else if ( #n == 13 ) insertreturn;
    else if ( #n == 27 ) break;
    else if ( #n == 28 ) left;
    else if ( #n == 29 ) up;
    else if ( #n == 30 ) right;
    else if ( #n == 31 ) down;
    else if ( #n == 32 ) insert " ";
    else {
      call Keys;
      call Char ##return;
      insert $$return;
    }
  }
  endmacro;

Keys:
  while ( iskeydown(70) | iskeydown(68) | iskeydown(83)
        | iskeydown(74) | iskeydown(75) | iskeydown(76) ) {
      if ( iskeydown(70) ) ##k = ##k | 0x01;
      if ( iskeydown(68) ) ##k = ##k | 0x02;
      if ( iskeydown(83) ) ##k = ##k | 0x04;
      if ( iskeydown(74) ) ##k = ##k | 0x08;
      if ( iskeydown(75) ) ##k = ##k | 0x10;
      if ( iskeydown(76) ) ##k = ##k | 0x20;
  }
  return ##k;

Char:
  if ( ##1 == 1 ) $$c = "A";
  else if ( ##1 == 2 ) $$c = "1";
  else if ( ##1 == 3 ) $$c = "B";
  else if ( ##1 == 4 ) $$c = "'";
  else if ( ##1 == 5 ) $$c = "K";
  else if ( ##1 == 6 ) $$c = "2";
  else if ( ##1 == 7 ) $$c = "L";
  else if ( ##1 == 8 ) $$c = "@";
  else if ( ##1 == 9 ) $$c = "C";
  else if ( ##1 == 10 ) $$c = "I";
  else if ( ##1 == 11 ) $$c = "F";
  else if ( ##1 == 12 ) $$c = "/";
  else if ( ##1 == 13 ) $$c = "M";
  else if ( ##1 == 14 ) $$c = "S";
  else if ( ##1 == 15 ) $$c = "P";
  else if ( ##1 == 16 ) $$c = "\"";
  else if ( ##1 == 17 ) $$c = "E";
  else if ( ##1 == 18 ) $$c = "3";
  else if ( ##1 == 19 ) $$c = "H";
  else if ( ##1 == 20 ) $$c = "9";
  else if ( ##1 == 21 ) $$c = "O";
  else if ( ##1 == 22 ) $$c = "6";
  else if ( ##1 == 23 ) $$c = "R";
  else if ( ##1 == 24 ) $$c = "^";
  else if ( ##1 == 25 ) $$c = "D";
  else if ( ##1 == 26 ) $$c = "J";
  else if ( ##1 == 27 ) $$c = "G";
  else if ( ##1 == 28 ) $$c = ">";
  else if ( ##1 == 29 ) $$c = "N";
  else if ( ##1 == 30 ) $$c = "T";
  else if ( ##1 == 31 ) $$c = "Q";
  else if ( ##1 == 32 ) $$c = ",";
  else if ( ##1 == 33 ) $$c = "*";
  else if ( ##1 == 34 ) $$c = "5";
  else if ( ##1 == 35 ) $$c = "<";
  else if ( ##1 == 36 ) $$c = "−";
  else if ( ##1 == 37 ) $$c = "U";
  else if ( ##1 == 38 ) $$c = "8";
  else if ( ##1 == 39 ) $$c = "V";
  else if ( ##1 == 40 ) $$c = ".";
  else if ( ##1 == 41 ) $$c = "%";
  else if ( ##1 == 42 ) $$c = "[";
  else if ( ##1 == 43 ) $$c = "$";
  else if ( ##1 == 44 ) $$c = "+";
  else if ( ##1 == 45 ) $$c = "X";
  else if ( ##1 == 46 ) $$c = "!";
  else if ( ##1 == 47 ) $$c = "&";
  else if ( ##1 == 48 ) $$c = ";";
  else if ( ##1 == 49 ) $$c = ":";
  else if ( ##1 == 50 ) $$c = "4";
  else if ( ##1 == 51 ) $$c = "\\";
  else if ( ##1 == 52 ) $$c = "0";
  else if ( ##1 == 53 ) $$c = "Z";
  else if ( ##1 == 54 ) $$c = "7";
  else if ( ##1 == 55 ) $$c = "(";
  else if ( ##1 == 56 ) $$c = "_";
  else if ( ##1 == 57 ) $$c = "?";
  else if ( ##1 == 58 ) $$c = "W";
  else if ( ##1 == 59 ) $$c = "]";
  else if ( ##1 == 60 ) $$c = "#";
  else if ( ##1 == 61 ) $$c = "Y";
  else if ( ##1 == 62 ) $$c = ")";
  else if ( ##1 == 63 ) $$c = "=";
else beep;
  return $$c;

[ ]
RE:32424 6点入力がしたいNo.32427
tetchan さん 13/07/16 15:01
 
ありがとうございます。このマクロをそのまま実行すると、次のようになります。
キーを押し下げるときとキーを離すときの状態が表示されるのだと思います。

L
JL
JKL
SJKL
FSJKL
FDSJKL
FDSJK
FDSJ
FD
D

ループの速度を遅くするために、次のようにポーズのためのループを入れてみました。

$prev="";
while(1){
  $a="";
  if(iskeydown(70)) $a=$a+char(70);
  if(iskeydown(68)) $a=$a+char(68);
  if(iskeydown(83)) $a=$a+char(83);
  if(iskeydown(74)) $a=$a+char(74);
  if(iskeydown(75)) $a=$a+char(75);
  if(iskeydown(76)) $a=$a+char(76);

#j = 0;while(#j < 300000) {#j = #j+1;} //ポーズのためのループ

  if($a!="" && $a!=$prev){
    insert $a+"\n";
  }
  $prev=$a;
}

これで、どうにか入力ができますが、ポーズのためのループの間に押されたキーは無
視されるようで、ループを抜け出す分の長さだけキーを押し下げていなければならな
いようです。

6つのキーだけですので、変数を6つ用意してそれぞれに0か1を代入し対応する6
ビットのアスキー文字を表示すれば案外簡単にできそうです。出来た時点で報告しま
す。

[ ]
RE:32426 6点入力がしたいNo.32428
tetchan さん 13/07/16 16:55
 
K'zawaさん
すごいです。大げさですが、ノーベル賞ものです。

実は、6点入力に対応していないキーボードでも、ほんの少し遅らせて右のの3つの
キーをたたけばほとんどのキーボードで6点入力できるようなのです。
このマクロも、6点入力に対応、非対応両方のキーボードで十分入力できます。
ありがとうございました。
ところで、このマクロ、将来公開してもいいですよね。

[ ]
RE:32428 6点入力がしたいNo.32431
K'zawa さん 13/07/16 18:57
 
tetchanさん、こんにちは。
K'zawaです。

>ところで、このマクロ、将来公開してもいいですよね。

いかようにもお好きなようにしてください。

[ ]
RE:32428 6点入力がしたいNo.32433
K'zawa さん 13/07/16 23:27
 
tetchanさん、こんにちは。
K'zawaです。

    else if ( #n == 32 ) insert " ";
    else {

のところですが、2行ほど抜けてました。
本当は、
    else if ( #n == 32 ) insert " ";
    else if ( #n == 59 ) insertreturn;
    else if ( #n == 64 ) backspace;
    else {

でした。すいません。

[ ]
RE:32433 6点入力がしたいNo.32437
tetchan さん 13/07/17 13:20
 
K'zawaさん

ありがとうございます。
一応動作確認して、気がついたところを修正しています。
日本語キーボードとはキーボードの配置が違うので、それも修正します。


[ ]