MSX Datapack wiki化計画

11章 日本語処理

※
※ このページは書きかけです。以下の可能性があります。
※ ・誤字、脱字等のチェックをおこなっていません。
※ ・テキスト、表などフォーマットがされていない。
※ ・画像が抜けている。
※
  1. BIOSを使用して文字を入出力している既存のプログラム(MSX-DOSを含む)なら変更なしに漢字入出力可能です。
  2. テキスト画面で文字にそれぞれ色指定が可能です。
  3. JIS第二水準の漢字をサポートします。
  4. 漢字プリンタへの漢字出力をサポートします。
  5. システムに仮想端末入力インターフェイス(MSX-JE)が存在しない場合も、単漢字変換機能によって漢字の入力が可能です。
  6. グラフィック画面に対し、LOCATE文、PRINT文などで、文字出力が可能です。

 11.1 この章の表記法

 この章では、以下の表記法を用います。

ステートメント名
機能

 命令の内容を簡単に説明しています。

書式
 命令の書き方を示します。<>で囲まれた項目は、必要とする数値や文字のデータを示します。[]で囲まれた項目は、省略可能であることを示します。
文例
 実際に命令を使った例を挙げています。
解説
 その命令についての詳しい説明と、使用するときの注意点などを述べています。

 11.2 MSX漢字ドライバ拡張BASICステートメント

 以下ではMSX漢字ドライバの拡張BASICステートメントについて説明します。

CALL KANJI
機能

 漢字ドライバを起動します。

書式
CALL KANJI[n]

文例
CALL KANJI
CALL KANJI0
CALL KANJI1
CALL KANJI2
CALL KANJI3
解説

 nは0、1、2、3のうちどれか1文字で、漢字フォントとスクリーンのインタレースモードを指定します。省略すると0と見なされます。
 CALL KANJI(またはCALL KANJI0)はフォントをMSXの標準漢字ROMからとり表示します。文字サイズは全角で横16ドット×縦16ドットです。
 CALL KANJI1はフォントをMSXの標準漢字ROMからとり、横16ドットを12ドットに圧縮して表示します。ただし、松下電器の仕様による12ドットフォントROMがシステムに存在する場合はこのROMからフォントをとり表示します。文字サイズは12×16です。
 CALL KANJI2はCALL KANJI(またはCALL KANJI0)と同じですが、インタレースモードが使用され縦方向の表示文字数が増加します。
 CALL KANJI3はCALL KANJI1と同じですが、インタレースモードが使用され縦方向の表示文字数が増加します。
 日本語FPは、このステートメントの実行時またはシステムの立ち上げ時に組み込まれます。
 MSXが立ち上がってから一番最初のCALL KANJIの実行時には注意が必要です。その時点でのHIMEM(CLEAR文による)の設定はキャンセルされ、すべての変数およびソフトウェアスタック(FOR・NEXT、GOSUB・RETURN用)がクリアされます。これは漢字ドライバのワークエリア(もしあれば日本語FPも)を常駐させる処理が行われるからです。2回目以降の実行は問題なく行われます。
 尚、本章中では、CALL KANJI命令などを実行し漢字表示が出来る状態を「漢字モード」と呼びます。さらに漢字モードでかつSCREENステートメントで0もしくは1が設定されている状態を「漢字テキストモード」と呼び、漢字モードでかつSCREENステートメントで2以上の画面モードが設定されている状態を「漢字グラフィックモード」と呼びます。
 BASICのコマンド待ちの状態では漢字テキストモードになっており、漢字の入出力が可能です。漢字グラフィックモードではプログラムによる漢字の出力のみが可能です。

漢字モードにおけるWIDTH

・漢字テキストモード
   CALL KANJI実行後のWIDTHはANKモードでのWIDTHを元に、以下のように決定されます。
  −ANKモードでSCREEN 0を使用していた場合。
   * KANJI0かKANJI2
     ANKモードでのWIDTHの値の4/5が漢字テキストモードでのWIDTHになります。
   * KANJI1かKANJI3
     ANKモードでのWIDTHの値がそのまま漢字テキストモードでのWIDTHになります。
  −ANKモードでSCREEN 1を使用していた場合。
   * KANJI0かKANJI2
     ANKモードでのWIDTHの値がそのまま漢字テキストモードでのWIDTHになります。
   * KANJI1かKANJI3
     ANKモードでのWIDTHの値の5/4が漢字テキストモードでのWIDTHになります。
     ただし、計算によって決まったWIDTHが26未満の時は26に設定されます。
・漢字グラフィックモード
   常に表示できる最大に設定されます。

WIDTHによるSCREENモードの選択

・KANJI0かKANJI2
   WIDTHが26〜32の時は256ドットモード(VDPのモードで言うとSCREEN 5)が、33〜64の時は512ドットモード(VDPのモードで言うとSCREEN 7)が選択されます。
・KANJI1かKANJI3
   WIDTHが26〜40の時は256ドットモード(VDPのモードで言うとSCREEN 5)が、41〜80の時は512ドットモード(VDPのモードで言うとSCREEN 7)が選択されます。

漢字入力

漢字ドライバは仮想端末インターフェイスを持つカートリッジが存在する場合は、起動時にこれをインストールします。直接入力モード(ANK)と間接入力モード(漢字)は、CTRL+SPACEもしくはGRAPH+SELECTによって切り替えられます。仮想端末入力インターフェイスが存在しないときは、単漢字変換機能(11.4「単漢字変換機能」を参照)が使用できます。

CALL ANK
機能

 漢字ドライバを終了します。

書式
 CALL ANK

文例
CALL ANK
解説

 漢字ドライバを終了します。ただし、漢字ドライバ用に確保したメモリは解放されません。

CALL AKCNV
機能

 文字を全角漢字に変換します。

書式
 CALL AKCNV(<文字変数>,<文字列>)

文例
CALL AKCNV(A$, "ABC漢字イロハ"):PRINT A$
ABC漢字イロハ
Ok
解説

 <文字列>の中のすべての文字を全角文字に変換して<文字変数>に代入します。

CALL JIS
機能

 文字を16進4桁のJISコードに変換します。

書式
 CALL JIS(<文字変数>,<文字列>)

文例
CALL JIS(A$, "漢字"):PRINT A$
3441
Ok
解説

 <文字列>の最初の2バイトを16進4桁のJISコードに変換して<文字変数>に代入します。

CALL SJIS
機能

 文字を16進4桁のシフトJISコードに変換します。

書式
 CALL SJIS(<文字変数>,<文字列>)

文例
CALL SJIS(A$, "漢字"):PRINT A$
3441
Ok
解説

 <文字列>の最初の2バイトを16進4桁のシフトJISコードに変換して<文字変数>に代入します。

CALL KACNV
機能

 文字を半角文字に変換します。

書式
 CALL KACNV(<文字変数>,<文字列>)

文例
CALL KACNV(A$, "私はプログラマです"):PRINT A$
私ハプログラマデス
Ok
解説

 <文字列>中の半角文字に変換できる文字をすべて半角文字に変換して<文字変数>に代入します。

CALL KEXT
機能

 文字列から半角文字だけ、もしくは全角文字だけを抜き出します。

書式
 CALL KEXT(<文字変数>,<文字列>,<機能>)

文例
CALL KEXT(A$, "今日ハ良イ天気デス",0):PRINT A$
ハイデス
Ok
CALL KEXT(A$, "今日ハ良イ天気デス",1):PRINT A$
今日良天気
Ok
解説

 <機能>が0なら<文字列>の中の半角文字だけを、1なら全角文字だけを抜き出し<文字変数>に代入します。

CALL KINSTR
機能

 文字列中から、指定した文字列を探します。

書式
 CALL KINSTR(<数値変数>[<数式>],<文字列1>,<文字列2>)

文例
CALL KINSTR(A, "A亜B", "B"):PRINT A
3
Ok
解説

 <文字列1>の中から<文字列2>を探し出し、見つかれば発見した位置を、見つからなければ0を<数値変数>に代入します。<数式>は探し始める位置を文字数を単位として指定するもので省略されると1とみなされます。

CALL KLEN
機能

 文字列の総文字数を計算します。

書式
 CALL KLEN(<数値変数>,<文字列>,<機能>])

文例
CALL KLEN(A, "今日ハ良イ天気です"):PRINT A
9
Ok
CALL KLEN(A, "今日ハ良イ天気です",1):PRINT A
2
Ok
CALL KLEN(A, "今日ハ良イ天気です",2):PRINT A
7
Ok
解説

 機能が0(もしくは省略)の時は<文字列>の全体の長さを、1の時は<文字列>中の半角文字の長さを、2の時は<文字列>中の全角文字の長さを<数値変数>に代入します。

CALL KMID
機能

 文字列中から指定した文字列を取り出します。

書式
 CALL KMID(<文字変数>,<文字列>,<数式1>[,<数式2>])

文例
CALL KMID(A$, "今日はヨい天気です", 3, 3):PRINT A$
はヨい
Ok
解説

 <文字列>中の<数式1>番目の文字から<数式2>文字分だけ抜き出して<文字変数>に代入します。<数式2>が省略された場合は<数式1>の文字から終わりまですべての文字が代入されます。

CALL KNJ
機能

 指定した漢字コードに相当する漢字を文字変数に代入します。

書式
 CALL KNJ(<文字変数>,<文字列>)

文例
CALL KNJ(A$, "3441"):PRINT A$
漢
Ok
解説

 <文字列>で指定される4桁の漢字コードに相当する漢字1文字を<文字変数>に代入します。漢字コードが8000H未満の時はJIS、以上の時はシフトJISとみなされます。

CALL KTYPE
機能

 文字のタイプ(半角なら0、全角なら1)を数値変数に代入します。

書式
 CALL KTYPE(<数値変数>,<文字列>,<数式>)

文例
10 A$="今日ハ良イ天気です"
20 CALL KLEN(L, A$)
30 FOR I=1 TO L
40 CALL KTYPE(T, A$, I):PRINT T;
50 NEXT I
RUN
 1  1  0  1  0  1  1  1  1
Ok
解説

 <文字列>中の<数式>番目の文字のタイプ(半角なら0、全角なら1)を<数値変数>に代入します。

CALL CLS
機能

 画面をクリアします。

書式
 CALL CLS

文例
CALL CLS
解説

 CALL KANJIステートメントにより画面を漢字モードにしたときに、画面をクリアするために使用します。漢字モードでないときでも使用できます。

CALL PALETTE
機能

 カラーパレットの初期化または設定を行います。

書式
 CALL PALETTE[(<パレット番号>,<赤輝度>,<緑輝度>,<青輝度>)]

文例
CALL PALETTE( 15, 4, 4, 4 )
Ok
解説

 CALL KANJIステートメントにより画面を漢字テキストモードにしたときに、パレットを変更するために使用します。漢字モードでないときでも使用できます。
 パラメータをすべて省略した場合は、パレットを初期状態にします。
 パラメータが指定された場合、<パレット番号>で指定されたパレットを<赤輝度>、<緑輝度>、<青輝度>の色に設定します。なお、パレット番号や各輝度を省略することは出来ません。

WIDTH
機能

 1行に表示する文字数を設定します。

書式
 WIDTH <桁数>

文例
WIDTH 28
解説

 WIDTHステートメントは漢字モードの時には以下のように動作します。
 ・漢字テキストモードの場合
  −KANJI0かKANJI2の場合
    <桁数>の指定は26〜64が有効です。
  −KANJI1かKANJI3の場合
    <桁数>の指定は26〜80が有効です。
  上記以外の値が指定されると「Illegal function call」となります。
 ・漢字グラフィックモードの場合
    常に「Illegal function call」となります。

 11.3 漢字モードでの注意点

11.3.1 漢字グラフィックモードでのPRINT文

 漢字グラフィックモードではPRINT文によって文字出力が可能になりました。ただしこれを使用する際には以下の注意が必要です。

  1. LOCATE文で指定するカーソルポジションは、半角単位です。
  2. カーソルポジションを保持しているエリアは1つしかないので、アクティブページを変更しながらPRINTしていくと他のページでのカーソルポジションの影響を受けます。
  3. インタレースモード(KANJI2、KANJI3)で文字出力をする際は、SCREEN文でEVEN・ODDのインタレースモード(SCREEN,,,,,3)に設定して、SET PAGE文で表示ページを奇数ページに、アクティブページを表示ページ-1に設定しなければなりません。

11.3.2 SCREEN文

 従来SCREENモードを変更しただけでは、スプライト表示禁止ビット(VDPレジスタ8)やインタレースモード(VDPレジスタ9)は変化しませんでしたが、漢字モードでは両方ともクリアされます。ただし後者に関しては、SCREEN文の第6パラメータを同時に指定した場合は、正しく設定されます。

 11.4 単漢字変換機能

11.4.1 概要

 単漢字変換機能は、仮想端末入力インターフェイスがないシステムであってもBASICおよびMSX-DOS上で漢字の入力を行うことができる機能で、これを用いることによって、プログラムやテキストなどで全角文字を取り扱うことができます。ただし仮想端末入力インターフェイスがある場合は、そちらが優先的に立ち上がります。
 この機能は以下の特徴を持ちます。

  1. 変換は漢字の音読みによって行います。
  2. カーソルキーを用いて、容易に目的の漢字や特殊文字を選択することができます。
  3. 第二水準漢字ROMがあれば、カーソルキーによって選択・表示が可能です。
  4. すべての漢字モード、スクリーンモードに対応します。

11.4.2 単漢字入力モード

 CALL KANJIを実行し、漢字モードでCTRL+SPACEもしくはGRAPH+SELECTを押すことによって画面最下行が反転し、単漢字入力モードになります。この機能で、CTRL+SPACE(あるいはGRAPH+SELECT)はトグルスイッチになっており、再びこのキーを押すことによって単漢字入力モードが終了します。

11.4.3 単漢字の入力方法

漢字の入力

 前記の方法で単漢字入力モードに移行すると、仮想的な25行目に仮名漢字変換ウィンドウが反転表示され、単漢字変換が可能になります。
 ここで「漢字」という文字を入力する場合を例に挙げます。
1.CTRL+SPACEによって漢字入力モードに入ります。画面最下行が反転表示されます。
2.かな、もしくはSHIFT+かな(ローマ字モード)を押して、「か」を入力します。

下化仮何伽値佳加可嘉

(表示される文字数は最大10文字。文字数は漢字モード、スクリーンモードによって異なります)
のように、「か」で始まる漢字が表示されます。
3.続いて「ん」を入力すると、

乾侃冠寒刊勘勧巻喚堪

「かん」で始まる漢字が表示されます。
4.変換ウィンドウ内のカーソルを上、下、左、右またはSPACEキーで移動し、目的の「漢」に合わせて、⏎(リターン)キーで決定します。すると、画面に「漢」が表示され、変換ウィンドウ内はクリアされます。
5.次に「し」、「゛」を入力(ローマ字変換の場合は、直接「じ」を入力)。
6.同様にカーソルを「字」に合わせて⏎(リターン)キーを押します。

変換中の訂正

 変換中の訂正はESCキーを押すことで可能です。ESCキーを押すと変換ウィンドウ内がクリアされ、読み入力の状態に戻ります。

各種文字の入力方法

・全角ひらがなかなランプが点灯している状態で入力します。
・全角カタカナ単漢字入力モードでかな、CAPS(CAPS LOCK)キーの両方が点灯している状態で入力します。
・半角カタカナCAPS(CAPS LOCK)キーの両方が点灯している状態で入力します。
・全角記号 単漢字入寮モードで、かなランプが点灯している状態で「を」や「ぁ」を入力すると、変換ウィンドウに記号が表示されるので、カーソルを表示したい特殊文字や記号に合わせて⏎(リターン)キーを押します。
・全角英数 単漢字入力モードでかなランプが点灯していない状態で入力します。
・第二水準漢字システムに第二水準漢字ROMがある場合は、単漢字入力モードで、かなランプが点灯している状態で「ん」などを入力し、カーソルを表示したい漢字に合わせて⏎(リターン)キーを押します。

その他

  • 入力された読みが存在しないときは、もっとも近い読みの漢字が表示されます。
  • 目的の漢字が「音・訓」どちらの読みで登録されているかは、別表を参照して下さい。
  • ローマ字変換機能については、MSX本体のローマ字変換機能と同様です。
  • 変換ウィンドウが開いているときCTRLキーを押しながら連続して「0〜9、A〜F」のキーを4桁入力すると、それをJISコードとして、そのコードから始まる漢字を表示します。選択方法は上に同じです。

 11.5 漢字プリンタの取り扱い

 MSX-DOSでは、漢字を画面に出力できるだけでなく、漢字プリンタにも出力できます。出力可能なプリンタはMSX標準の漢字プリンタとそれに準拠するものです。MSX-DOSでは漢字をプリンタに出力する場合は、漢字イン(ESC K)や漢字アウト(ESC H)を必要に応じて挿入します。(漢字モード時)
 MSX-DOS2上から漢字を含んだファイルをプリンタに出力したい場合には次のようにします。

COPY KNJFILE PRN

 また、ファイル名やディレクトリ名が漢字を含んでいるときでも、リダイレクトを利用してディレクトリをプリンタに出力することが出来ます。

DIR > PRN

 BASIC環境では、LLIST、LPRINT、LFILESコマンドによってプリンタへの漢字出力できます。