2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

日本語プログラミング言語Mindの小技 「カーソル位置設定」~PureMind5.2互換仮想ターミナルコマンド2~

Last updated at Posted at 2025-09-14

はじめに

日本語プログラミング言語Mindの小技「カーソル位置設定」について説明したいと思います。

対象読者

日本語プログラミング言語Mindのユーザー、または日本語プログラミング言語に興味のある方

この小技に関連するMind言語マニュアル

この小技に関連するMind言語仕様の記述はMind8プログラミングマニュアルに記載はありせん。

PureMind-KIHON-and-DOSV\KIHONSET#2\SRCLIB\SCREEN.SRCからの移植です。

本機能(本記事)は、下記のバージョンに対応しています。Mind8のLinux版は非対応です。Win32コンソールAPIでVT(仮想ターミナル)モードを有効化したほかに、クックドモードも無効化しています。

対応バージョン

■Mind7 ■Mind8 ■Mind9
■Windows版 □Linux版

小技の解説

「カーソル位置設定」は日本語プログラミング言語Mind5.2の基本的なコンソールスクリーンの制御機能のひとつです。WindowsコマンドプロンプトでVT(仮想ターミナル)モードがサポートされたのはWindows10以降で、それ以前にリリースされているMind7、8は機種依存性をさけるために廃止されました。

また、昨今のWindowsターミナルは昔のDOS画面コンソールとは微妙に異なり、固定行数桁数でのコンソール画面としてアプリケーション実装用途もほとんどなくなっているのが現状です。このためMind9でも復活予定はありませんが、あくまで実装サンプルとして情報共有いたします。

本記事ではVTモードを有効化した後に、エスケープシーケンスによる下記のコンソール制御単語をサポートしてみます。(ただし、これらの単語はエスケープシーケンスを出力するだけではなく、複雑なロジックの実装を含んでいます。)

カーソル位置設定   (行位置、桁位置 → ・)
カーソル設定     (行位置、桁位置 → ・) ※カーソル位置設定の等価語
カーソル位置     (・ → 行位置、桁位置)
カーソル行位置    (・ → 行位置)
カーソル桁位置    (・ → 桁位置)

Mindプログラムソース

ライブラリ

consolelib2.src
※PureMind5.2互換コンソールライブラリ
※win32consoleapi.srcのVTモード有効化を実行してください。
※win32consoleapi2.srcのクックドモード無効化を実行してください。
※PureMind KIHONSET SCREEN.SRCのカーソル制御関連単語のみ

ローカル。

成功は                         数値 1。
失敗は                         数値 0。

一文字直接入力とは  (・ → 文字)
    コンソール1文字読込し
    失敗に 等しい ならば 捨て 実行終わり つぎに。

キー入力有り?とは  (・ → 真偽)
    コンソール1文字読込し
    失敗に 等しい ならば 捨て 実行終わり つぎに
    ※複写し ダブル表示し 改行し
    (入力文字が) $$NULLに 等しい
    ならば 偽をかえし
    さもなければ 真をかえし
    つぎに。

_変換値とは      ワード変数。

_キー文字列を数値に変換しとは (文字 → 数値)
    _変換値を クリアし
    ここから
        一文字直接入力し
        複写したものが 数字?
            でなければ
                (文字を)  捨て
                打ち切り
            つぎに
        (文字を)  0FHと ANDし
        _変換値に 10を 掛け 加え _変換値に 入れ
    繰り返し
    _変換値を 返す。

_キーバッファは 文字列実体 長さ 40。

キーバッファを退避とは (・ → ・)
        カウンタは ワード変数
    カウンタを クリアし
    _キーバッファを クリアし
    ここから
        ※キー入力有り?
            文字列入力有り?
            ならば カウンタを クリアし
                入力文字を _キーバッファに 一文字追加し
            さもなければ
                カウンタを 一つ増加し
                カウンタが 4に 等しい
                    ならば 打ち切り
                    つぎに
            つぎに
    繰り返す。
    
キーバッファを復帰とは (・ → ・)
    _キーバッファを 先行入力文字列に 追加すること。


_数値を文字に変換して表示とは (数値 → ・)
        余り1は ワード変数
        商1は  ワード変数
    10で 余りと商をとり 余り1と 商1に 入れ
    商1が ゼロ以外
        ならば 商1に '0'を 加え 一文字表示し
        つぎに
    余り1に '0'を 加え 一文字表示する。


    グローバル。

カーソル位置とは    (・ → 行位置、桁位置)
    キーバッファを退避し
    ※※※※※※※※※※※※※※※※
    "&ESC&[6n"を 表示し              ※カーソル位置レポート要求
    一文字直接入力し 捨て             ※ESC を捨てる
    一文字直接入力し 捨て             ※[  を捨てる
    _キー文字列を数値に変換し   (→行位置)  ※~; まで受信
    _キー文字列を数値に変換し   (→桁位置)  ※~R まで受信
    ※※※※※※※※※※※※※※※※
    キーバッファを復帰すること。

カーソル行位置とは    (・ → 行位置)
    カーソル位置をとり 捨ること。

カーソル桁位置とは    (・ → 桁位置)
    カーソル位置をとり (→行、桁) 二番目を捨てること。

カーソル位置設定とは  (行位置、桁位置 → ・) 処理単語 NN XSW
        行は ワード変数
        桁は ワード変数
    行と 桁に 入れ
    "&ESC&["を 表示し
    行を _数値を文字に変換して表示し
    ';'を 一文字表示し
    桁を _数値を文字に変換して表示し
    'H'を 一文字表示する。

カーソル設定は カーソル位置設定と 等価。

ローカル語を捨てる。

テスト用実行メイン

concursor.src
"win32consoleapi"を コンパイルする。
"win32consoleapi2"を コンパイルする。
"consolelib"を コンパイルする。
"consolelib2"を コンパイルする。

成功は                         数値 1。
失敗は                         数値 0。

コンソールモード設定するとは (・ → ・)
    VTモードを有効化し
    失敗に 等しい ならば 実行終わり つぎに
    「VTモードを有効化しました。」を 一行表示し
    クックドモードを無効化し
    失敗に 等しい ならば 実行終わり つぎに
    「クックドモードを無効化しました。」を 一行表示すること。

コンソールモード復帰するとは (・ → ・)
    クックドモードを有効化し
    「クックドモードを有効化しました。」を 一行表示し
    VTモードを無効化し
    「VTモードを無効化しました。」を 一行表示すること。

メインとは  (・ → ・) 
        行位置は 変数
        桁位置は 変数
    コンソールモード設定し
    
    画面クリアし
    10と 10で カーソル位置設定し
    カーソル行位置を 行位置に 入れ
    カーソル桁位置を 桁位置に 入れ
    「カーソル行位置」を 表示し 行位置を 数値表示し 改行し
    「カーソル桁位置」を 表示し 桁位置を 数値表示し 改行し
    
    コンソールモード復帰すること。

先に注意点をお伝えしておきますと、「カーソル位置」取得関連単語は動作しませんでした。そのため、上記ソースコードはコメントアウトしています。(コンパイル自体は通過しています。前回記事で実装した下位単語の「一文字直接入力」の動作が適合していないようです。)

2025/09/14 追記
「一文字直接入力」の動作は適合している模様で、「キー入力有?」を使っている「キーバッファを退避」の使用を一時的にオミットすることで、行位置、桁位置は見かけ上取得できるようになっています。

さらに「キーバッファを退避」が使用している「キー入力有?」を「文字列入力有?」で代替することで「キーバッファを退避」の実行を復活しても動作するようになりました。

コンパイル結果

ではコンパイルしてみます。下位ライブラリはfileを指定します。

Mind9

下図はMind9βです。

C:\developments\vscode\mind9>mind concursor file   

日本語プログラミング言語 Mind Version 8.11 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. C:\mind9-beta\mind9-beta\bin\mindex.exe --> concursor.exe

Mind8

C:\developments\vscode\mind9>mind concursor file

日本語プログラミング言語 Mind Version 8.07 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> concursor.exe

Mind7

C:\developments\vscode\mind9>mind concursor file
日本語プログラミング言語 Mind Version 7.5 for Windows
          Copyright(C) 1985-2004 Scripts Lab. Inc.
          Single user license.  Serial No:********
コンパイル中 - 終了
Coping.. C:\mind7\bin\mindexec.exe -> concursor.exe

実行結果

つづいて実行してみます。
Mind8の結果です。記述は割愛していますがMind7/9βも同じです。

C:\developments\vscode\mind9>concursor
VTモードを有効化しました。
クックドモードを無効化しました。









         クックドモードを有効化しました。
VTモードを無効化しました。

C:\developments\vscode\mind9>

いかがでしょうか?イメージつかみにくいかと思いますが、「クックドモード有効化しました。」の出力位置が「クックドモード無効化しました。」の出力行から10行下で、10桁目から開始となっていることから「カーソル位置設定」は動作したことがわかります。

「カーソル位置」取得系の単語は動作しませんでした。Win32ApiのReadConsoleWによる「一文字直接入力」の実装が適合していない模様です。これは機会を改めてリトライしてみます。

2025/09/14 追記
「カーソル位置」で使用されている「キーバッファを退避」の使用を一時的にオミットすることで、行位置、桁位置は見かけ上取得できるようになっています。

C:\developments\vscode\mind9>concursor
VTモードを有効化しました。
クックドモードを無効化しました。









         カーソル行位置10
カーソル桁位置10
クックドモードを有効化しました。
VTモードを無効化しました。

C:\developments\vscode\mind9>  

さらに「キーバッファを退避」が使用している「キー入力有?」を「文字列入力有?」で代替することで「キーバッファを退避」の実行を復活しても動作するようになりました。結果は上記と同じです。

参考情報

この小技「カーソル位置設定」を使った記述例の記事はまだありません。

おわりに

いかがでしたでしょうか?なにかの参考になれば幸いです。2025年は日本語プログラミング言語Mind生誕40周年です。

本記事シリーズのご紹介

本記事シリーズ「日本語プログラミング言語Mindの小技」は「日本語プログラミング言語Mind生誕40周年プロジェクト」の一環です。

興味を持たれた方は日本語プログラミング言語Mind公式サイトにアクセスすると、Mindコンパイラをダウンロードできますよ。

面白い!、楽しい、カンタン、難しいのも書ける!みんなでやってみよう:relaxed:

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?