  DOS でパソコン通信していた人に捧げる Linux でパソコン通信す
  る方法
  ぺー (NBB02702@niftyserve.or.jp)
  1993年3月9日

  この文書は、少しは UNIX やプログラミングの知識があり、かつ Linux を使
  い始めたばかりの人をおもな対象にします。UNIX をよく知っている人には不
  要な事柄も書いてありますが、気にしないで下さい。:-) make コマンドが何
  をするものか想像がつかない人は、初心者向けの UNIX 解説本やプログラミン
  グ関連の本等で少し知識を仕入れましょう。

  注意: この文書はかなり以前に書かれたものなので、いまどきの Linux 環境
  にはあてはまらない箇所があります。 (JF Project)

  1.  Linux でのパソコン通信

  Linux でのパソコン通信は DOS でのパソコン通信とほとんど同じです。通信
  ソフトを起動して対話的にホストへアクセスすることも可能ですし、マクロを
  書けば、いわゆるオートパイロットも可能です。また、cron 機能を使えば、
  希望の時間に通信ソフトを起動してオートパイロットで必要な所を巡回する、
  といった芸当も可能で、とても便利です。DOS でのパソコン通信と違うのは通
  信用のソフトウェア程度です。

  日本語が使える通信ソフトには、大抵の UNIX 互換環境に備わっている
  kermit や、B-Plus プロトコルや xmodem プロトコルが内蔵され機能も豊富な
  xc があります。また、もともと MINIX 向けに開発された minicom も Linux
  に移植されています。minicom はメニュー形式でいろいろな設定が可能です。
  いずれもマクロ言語を備えています。さらに、変り種としては、 mule や
  nemacs の中からの通信を可能にするSTK (super待機くん) というソフトウェ
  アもあります。これは Emacs LISP で書かれています。

  kermit は、バイナリがあればすぐにでも BBS 等にアクセスできます。
  minicom や xc は、日本語対応パッチを使用してコンパイルし直す必要があり
  ます。

  この文書では、以上のソフトウェアの基本を扱います。より詳しい情報が欲し
  い人は、各ソフトウェアのマニュアルを読んでください。また、この文書の
  ディレクトリ構成などは SLS 版の Linux を元にしています。

  2.  まず環境を整える

  日本語でパソコン通信を開始するにはいくつか前提条件があります。

  o  kon や kterm のように漢字を表示できるソフトウェアが稼働していること

  o  mule や nemacs のように日本語を編集できるソフトウェアが使えること

  この条件を満たしていない人は、まずこのような環境を整える必要がありま
  す。

  2.1.  文字コード

  BBS にアクセスする時に問題になるのが、ホストが扱う文字コードと自分の
  PC で扱う文字コードの相違です。Linux を含む UNIX システムでは、シフト
  JIS だけでなく JIS コードや EUC コードも一般的に使われます。むしろ JIS
  や EUC の方が一般的とも言えます。

  このため、Linux で稼働する日本語表示用のソフトウェアも、標準では文字が
  JIS や EUC コードであると解釈するように設定されているかもしれません。
  この状態で、シフト JIS コードが標準の BBS に接続すると、シフト JIS
  コードの文字はそれが漢字や仮名などの 2 バイト文字であるとは解釈され
  ず、 Linux 上では「化けて」読めません。BBS ホストが使用する文字コード
  と自分の PC の日本語表示用ソフトウェアが解釈できる文字コードを通信ソフ
  ト内で設定できれば、通信ソフトが入力と出力の際に内部で自動的に文字コー
  ドを変換するので、うまく対処できます。しかし、通信ソフトが複数の文字
  コードに対応していなければ、2 バイト文字の表示を扱う kon や kterm 側の
  設定で日本語の文字を正しく表示できるように対処しなければなりません。

  2.2.  kon の設定

  ここで特に扱うのは /usr/local/lib/kon.cfg ファイルの中の文字コードの設
  定項目です。このファイルの終り近くに

       SjisKanji:

  という行がありますので、この次の行が「Off」に設定されていれば「On」に
  変更します。こうすると、コンソールでシフト JIS コードを扱うことが可能
  になります。これが Off の状態では JIS コードと EUC コードだけが正しく
  表示され、シフト JIS コードは「化け」ます。

  この変更は、BBS のホストが入出力する文字コードがあくまでもシフト JIS
  であるということを前提にします。しかし、後にも述べるように、ホストが
  EUC コードなどで文字を入出力する時にはこの変更は不要です。

  その他の設定については kon のマニュアルを参照してください。

  2.3.  kterm の設定

  X11 上で動作する kterm で文字コードを指定するには、起動時に「-km <文字
  コード>」というオプションを使います。例えば kterm 内でシフト JIS コー
  ドを使って入出力する時には次のように指定します。

       kterm -km sjis ....その他のオプション....

  詳しいことは kterm のマニュアルを参照してください。重要なのは、 kterm
  が扱う文字コードと BBS のホストが扱う文字コードを一致させることです。

  2.4.  ホストが EUC コードで入出力する場合

  NIFTY-Serve では、ログイン時、通常は「SVC」と入力する所を「SVC/EUC」と
  入力することにより、ホストが EUC コードで文字を入出力します。こうして
  ログインする時には、kon や kterm が扱う文字コードは EUC でなければなり
  ません。

  kon では上で述べた設定を「OFF」にし、kterm ではオプションで「-km
  sjis」と指定する部分を「-km euc」に変更します。これで、いずれのソフト
  ウェアも EUC コードを正しく表示できます。繰り返しますが、重要なの
  は、kon や kterm が扱う文字コードと BBS のホストが扱う文字コードを一致
  させることです。どの文字コードが優れているという事ではありません。

  3.  xc

  さて、ようやく通信ソフトの設定です。この章では xc に関する情報を扱いま
  す。xc はマクロ言語を備えています。また、B-Plus プロトコルにも対応して
  いますから、NIFTY-Serve にアクセスする人には便利なソフトウェアでしょ
  う。

  3.1.  xc のコンパイルに必要なファイル

  xc を Linux で動かす際に必要なものを次に示します。すべて NIFTY-Serve
  UNIX フォーラム (FUNIX) の 1 番ライブラリ・「Free software UNIX
  source」にあります。

       ＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿

       番号  データ名
       235   xc32-news.tar.Z
       221   xc32ptahc.tar.Z  Xc3.2用SJIS対応パッチ
       220   xc32.tar.Z  Unix用通信ソフト
       ＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿

  3.2.  xc のコンパイル

  ☆ まず、各アーカイブからコンパイルに必要なファイルを取り出します。必
  要なファイルを次に示します。

          アーカイブ名   必要なファイル
       ---------------   ------------------------------
            xc32.tar.Z - 入っているファイル全部
       xc32ptahc.tar.Z - patch.all  README.j  convtbl.h
       xc32-news.tar.Z - ../patch.news  ./README.j.NEWS

  それぞれのアーカイブのファイルは一ヵ所 (全部同じディレクトリ) で解凍し
  て下さい。

       解凍例
       ------
       tar xfvz xc32.tar.Z
       tar xfvz xc32ptahc.tar.Z patch.all README.j convtbl.h
       tar xfvz xc32-news.tar.Z ../patch.news ./README.j.NEWS ; \
       mv ../patch.news .

  ☆ 解凍が済んだらパッチを当てます。次のコマンドを実行します。

       patch -p < patch.all ; patch -p1 < patch.news

  ☆ このままでは Linux 向けには設定されないので、コンパイルできません。
  少し修正が必要ですので、この文書に付属の patch.linux を使って次のコマ
  ンドを実行します。

       patch -p1 < patch.linux

  このパッチファイルを使うと、だいたい次のような変更が施されます。

  o  デバッグ用のオプションをコメントにする

  o  Linux 用に LINUX マクロを定義 (フロー制御のために使用)

  o  B-Plus 転送時にシリアルポートのフロー制御 (RTS/CTS) を使用
     これにより B-Plus プロトコルのアップロードが正しく動作する

  o  各種ファイルの置き場所を変更する

  o  NIFTY-Serve でホストが出力する ^@ (00h) はログに記録させない

  o  マクロの中で 2 バイト文字を正しく認識させる

  ※すでに Linux で xc を使っている人も、一からコンパイルをやり直してく
  ださい。つまり、前回のパッチに対する新たなパッチは存在しません。

  ☆ コンパイルとインストールは、スーパーユーザーになって以下のコマンド
  を実行します。

       make ; make install ; make man

  これで、プログラムのコンパイルとインストールが完了です。

  次に、設定ファイルをホームディレクトリにコピーします。必要なのは
  「.xc」ファイルだけです。コピーが済んだら、ファイルの所有者とグループ
  を正しく設定しておきましょう。

  3.3.  xc の設定法

  ~/.xc を適切に変更・設定します。

  −例−
  set bps 9600
  set cis "on"
  set sjis "off"
  set auto "on"

  最初はシリアル回線の速度指定です。モデムの繋がった RS-232C の速度が例
  えば 9600 BPS なら、「set bps 9600」です。

  NIFTY-Serve に接続する場合は、B-Plus プロトコルが使えますから、「set
  cis "on"」と設定しておきましょう。それ以外の BBS なら「set cis "off"」
  です。

  CompuServe に接続すると、B-Plus 転送を開始する印に使われる ^E がログイ
  ン直後にホストから出力され、意図しないところで xc が B-Plus 転送モード
  に入ってしまいます。ですから、「set cis "off"」と設定しておき、実際に
  B-Plus の転送が始まる時には xc のプロンプトに戻って、手動で B-Plus 転
  送を開始すると良いでしょう。

  次に、BBS のホストが Shift-JIS コードで入出力を行なう場合は、 set sjis
  "off" と設定します。これが「on」になっていると、もともと SJIS コードの
  文字をさらに SJIS コード変換ルーチンに通すことになり、表示が乱れます。

  また、通信のログを取っておきたい場合は、「set auto "on"」と設定しま
  す。ログは特に指定しなければ「./capture.log」へ出力されます。

  これで通信の準備が整いました。

  3.4.  いよいよ通信 (xc 編)

  シェルのプロンプトで「xc -l /dev/cua1」等とタイプすれば起動します。
  「-l /dev/cua1」はモデムが繋がったデバイスを指します。 xc のプロンプト
  は「<XC>」ですから、ここで「t」とタイプします。 (Enter キーも忘れず
  に。) これでターミナルモードになり、モデムの AT コマンドなどを使って通
  信を開始できます。ここから後、ログインして会議室などを巡回し、ログアウ
  トするまでの手順は、 DOS の通信ソフトとほぼ同じです。

  ターミナルモードからプロンプトに戻るには、「Ctrl-A X」とタイプします。
  終了は「q」です。

  B-Plus プロトコルでのダウンロードやアップロードを指定すると、転送が始
  まった時に xc の B-Plus ルーチンが自動的に起動されます。この時、画面に
  はあまり情報が表示されず、ソフトウェアがハングしたのかと思うかもしれま
  せん。しかし、ダウンロード中のファイルが入るべきディレクトリを、ダウン
  ロード時に別のシェルから監視するとわかるように、転送ルーチンは正しく動
  作しています。安心して終了を待ってください。

  4.  kermit

  この章では kermit に関する情報を扱います。kermit は再コンパイルは不要
  で、SLS 等に入っている標準的なもので日本語が通ります。

  4.1.  kermit の設定法

  kermit の設定ファイルは「~/.kermrc」です。日本語を表示させるためには、
  このファイルに最低限つぎの設定が必要です。
       set line /dev/cua1
       set speed 9600
       set parity none
       set modem hayes
       set terminal bytesize 8
       set command bytesize 8
       set escape 127

  o  「set line」はモデムが繋がっているデバイスを指定します。 COM2 にモ
     デムが繋がっていれば /dev/cua1 です。

  o  「set speed」はシリアル回線 (RS-232C) の速度を指定します。モデムの
     速度ではありません。

  o  「set modem」はモデムコマンドの体系を指定します。AT コマンドが使え
     るなら hayes です。

  o  「set terminal bytesize」と「set command bytesize」に 8 を設定する
     と、8 ビットのデータはマスクされず、日本語が正しく扱えます。

  o  「set escape 127」を設定しなければ、2 バイト文字が「化ける」ことが
     あります。

  4.2.  いよいよ通信 (kermit 編)

  シェルのプロンプトで「kermit」とタイプすれば起動します。起動すると、
  「C-Kermit>」という kermit のプロンプトが表示されます。ここで「c」とタ
  イプすると、ターミナルモードに入ります。ここからは、DOS の通信ソフトと
  同様に AT コマンド等が使えます。

  通信が終ったら「Ctrl-\ h」 (「set escape 127」を設定してあれば「DEL
  h」) でプロンプトに戻り、「q」で kermit を終了します。ターミナルモード
  から直接 kermit を終了するには「Ctrl-\(DEL) q」コマンドを使います。

  通信のログを残すには、kermit のプロンプトで次のようにタイプします。こ
  のコマンドは、通信を始める前、またはログの保存を開始する直前に実行しま
  す。

       C-Kermit> log session kermit.log

  最後の引数はログのファイル名です。好きな名称が使えます。また、ファイル
  名の後の引数に「 append」を指定すると、既存のファイルに追記します。

  5.  minicom

  この章では minicom に関する情報を扱います。minicom では各種設定をメ
  ニュー形式で行なえます。また、NIFTY-Serve・FUNIX で公開されている
  Linux 用パッチには、マクロ言語の例として日経 mix や NIFTY-Serve 用の
  オートパイロット・スクリプトが含まれています。

  minicom には B-Plus プロトコルは内蔵されていません。ですから、公式には
  minicom では B-Plus は使えないことになっています。しかし、他の通信ソフ
  ト (tipbp など) に入っている B-Plus プロトコルのルーチンを取り出して
  minicom に統合することは可能ですから、腕に覚えのある人は挑戦してみてく
  ださい。

  5.1.  minicom のコンパイルに必要なファイル

  minicom を Linux で動かす際に必要なものを次に示します。いずれも NIFTY-
  Serve UNIX フォーラム (FUNIX) の Linux 用ライブラリ (LIB 13) にありま
  す。SLS に入っている minicom のバイナリは日本語には対応していません。

       ＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿

       番号  データ名
        55   mc15b.tgz 通信ソフト minicom 1.5b
        61   mc15bj.tgz minicom1.5b用パッチセット
       ＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿

  55 番のものは minicom 本体で、61 番のものが Linux で使うためのパッチで
  す。

  5.2.  minicom のコンパイルと設定法

  minicom の実行形式を作成する方法は、上にも挙げた Linux 用のパッチに
  入っている「install.doc」にとても詳しく記されています。また、設定方法
  もこのファイルに書かれています。

  はじめて minicom を実行する時には、ルートの権限で

       minicom -s

  を実行しましょう。これにより各種の設定ができます。

  5.3.  いよいよ通信 (minicom 編)

  シェルのプロンプトで「minicom」とタイプすると起動します。minicom は他
  のソフトウェアと違って、起動するとターミナルモードになりますので、即
  AT コマンドなどを使用できます。

  ログを記録するにはターミナルモードで「Ctrl-A L」を使います。このコマン
  ドを実行すると、どのファイルに保存するかを指定する窓が開きます。適切な
  名前を指定しましょう。取り消しには ESC キーを使います。また、起動時に
  -l オプションを使うと、スクリプトファイルで指定した拡張子を使って、ロ
  グイン時に nif1208.log のようなログファイルを自動的に作成します。この
  場合も「Ctrl-A L」は有効です。

  「Ctrl-A Z」でヘルプメニューが表示されます。

  各種メニューでカーソルを動かすには、次のようなキーを使います。

              上 : k
       左 : h        右 : l
              下 : j

  /etc/termcap が適切に設定されていればカーソルキーも使えます。
  install.doc を参照してください。

  終了するには「Ctrl-A X」を使います。本当に終了するかどうかを聞かれます
  から、Yes にカーソルを合わせて Enter キーを押します。

  上記の「install.doc」はとてもよく書けていますから、minicom を使いたい
  人はぜひ読んでみましょう。cron の使い方まで記されています。

  6.  STK (super待機くん)

  STK は、基本的には NIFTY-Serve の RT や CB を支援するためのソフトウェ
  アで、 Emacs LISP で記述されています。つまり、通信が mule や nemacs の
  バッファ (窓) の中で実行されるのです。しかし、このソフトウェアはチャッ
  ト専用ではなく、普通の通信ソフトと同様に様々な BBS へのアクセスが可能
  です。しかも、通信の内容はすべてエディタのバッファに自動的に蓄積されま
  す。

  このソフトウェアは NIFTY-Serve のチャット専用のモードを備えていますか
  ら、NIFTY-Serve の RT や CB の愛好者にはうってつけでしょう。課金が増え
  てもしりません。:-)

  ちなみに、NIFTY-Serve・C 言語フォーラム (FC) では、週末の深夜などに
  Linux 愛好者がこの STK を使っておしゃべりしています。

  STK は、製作された方々のご好意により、この文書に付けることができまし
  た。

  6.1.  STK の導入

  stk では、実際の通信には kermit を使用します。ですから、まずこの文書の
  kermit の章で解説したように、kermit で通信ができるよう環境を整えてくだ
  さい。

  次に stk.tar を展開します。(展開例 : tar xfv stk.tar) 展開されたファイ
  ルの中にある stk.el が、Emacs LISP で書かれた stk のプログラムです。

  この stk.el は、各自の環境に合わせて設定を変更します。まず、stk.el の
  初めの方にある「(defvar **** ****)」の部分を適切に変更します。Emacs
  LISP を知らない人でも、それぞれの項目に何を記述するかは見れば解るで
  しょう。:-) 不明な点があれば stk.doc の「注解1.A．STKの調整」を参照し
  てください。

  変更が終ったら、mule か nemacs の中で「M-x byte-compile-file」コマンド
  を使って、stk.el をコンパイルします。このコマンドを実行すると、nemacs
  や mule がファイル名を入力するように促しますから、ここで stk.el の絶対
  パスを入力します。コンパイルが終ったら、stk.el と同じディレクトリに
  stk.elc というファイルが生成されますから、mule/nemacs の LISP ファイル
  を置くディレクトリ (/usr/local/mule/lisp など) に stk.elc を、ルートの
  権限でコピーします。パーミッションの設定も忘れずに。

  最後に

       (load-library "stk")

  の一行を ~/.emacs に追加してインストールは完了です。

  mule や nemacs で作業していた人は、stk を使う前に一度エディタを終了し
  ましょう。

  6.2.  いよいよ通信 (STK 編)

  mule や nemacs の中から「M-x kermit」とタイプすると、 kermit (と stk)
  が起動されます。ここで「M-x connect-to-nifty」とタイプすると、自動的に
  NIFTY-Serve にログインできます。 NIFTY-Serve 以外に接続する場合は、通
  常の kermit と同様の手順でログインしましょう。この部分は単なる kermit
  なのです。

  stk が本領を発揮する、NIFTY-serve の RT や CB に入ったら、「M-x chat」
  とタイプします。mule (nemacs) のバッファが三つの窓に分かれますね。これ
  が chat モードです。下側の窓が入力用です。このモードにはコマンドがいく
  つか用意されています。

  頻繁に使うのは「Control-C H」です。このコマンドを発行するとミニバッ
  ファに「だれ:」と表示されます。ここで *handle* というバッファから適切
  な名前を選び、その名前の左にあるアルファベットを選んでタイプしま
  す。(Enter キーも忘れずに。) こうすると、入力用の窓の発言の最後に「＞
  ぺーちゃん」のような文字が付加されます。

  「M-x chat-quit」でチャットモードを終了します。その他のコマンドの使い
  方は stk.doc を参照してください。

  通信が終了したら、ログを一度ファイルに保存してもいいですし、そのまま通
  信用のバッファを編集するのも良いでしょう。

  6.3.  注意

  stk.el を byte-compile-file すると、「M-x connect-to-nifty」が失敗する
  場合があるようです。もし自動ログインに失敗することがあれば
  /usr/local/mule/lisp/stk.elc を削除し、stk.el を同ディレクトリに入れて
  みましょう。

  6.4.  新春パッチ

  この文書に付属の stk.patch の使い方は、stk.patch に書かれています。お
  楽しみあれ！

  7.  マクロを作ってみる

  さて、通信ソフトがうまく動き出したら、マクロを書いてみるのもおもしろい
  でしょう。

  ここでは、kermit, xc, minicom のマクロの初歩を扱います。さらに詳しいこ
  とはそれぞれの解説文書などを参照してください。

  ここで紹介するマクロの例では例外の処理は行ないません。著者は以下のマク
  ロが動作することを確認していますが、場合によっては不具合があるでしょ
  う。
  7.1.  マクロの簡易デバッグ法

  マクロを作っているとき問題になるのは、いちいちホストに繋がないとマクロ
  の虫とりができない点です。

  そこで、ホストに繋がずにある程度のデバッグをすることを考えます。どうす
  るかというと、自分でホストとターミナルの二役を演じるのです。「馬鹿なこ
  とを」と思うかも知れませんが、これは効果的です。毎回ホストに電話して接
  続する時間が省けますから、デバッグの効率が上がります。しかもこうすれば
  無駄な電話代も不要になります。

  では実際に挑戦してみましょう。まず X11 なら xterm などのターミナルを二
  つ起動します。一つめが ttyp0、二つめが ttyp1 とします。ここで、通信ソ
  フトは ttyp0 で起動し、ttyp1 がホストの役を務めます。コンソールなら
  tty1 と tty2 がそれぞれ ttyp0 と ttyp1 に相当します。

  まず、ちょっと荒っぽいですが、/dev/ttyp1 に対して次のコマンドを実行し
  ます。(コンソールなら /dev/tty2 です。)

       chmod og+r /dev/ttyp1

  この後、ttyp1 (ホスト側) で次のコマンドを実行します。

       cat

  これだけです。簡単ですね。次に、ttyp0 に移ります。ここでは、通信ソフト
  のモデムのデバイスを指定する部分で、/dev/cua1 などの代わりに
  /dev/ttyp1 (仮ホスト側) を指定します。その後、 ttyp0 側のシェルで通信
  ソフトを起動します。例えば xc なら次のように起動します。

       xc -l ttyp1

  kermit の場合は、.kermrc の中の「set line」の行を

       set line /dev/ttyp1

  と設定し、このあと kermit を起動します。通信ソフトが無事起動できたら、
  その時点ですでに二つのターミナルが結ばれています。通信ソフトをターミナ
  ルモードにして、ttyp0 側で適当に文字を打ち込んでみましょう。どうです
  か。打ち込んだ文字が ttyp1 (ホスト側) に表示されますね。ホスト側から文
  字を入力すると、反対に ttyp0 に文字が出ます。これで「超簡易 BBS ホス
  ト」の完成です。:-)

  さて、ttyp0 で起動した通信ソフトでマクロを実行してみます。また、 ttyp1
  からは実際にホストが出力する文字を打ち込んでやります。この ttyp1 から
  の入力に対して、マクロが期待どおり反応すれば大成功です。うまく反応しな
  ければ、一度 ttyp0 の通信ソフトを終了し、エディタでマクロを書き直し、
  再度 ttyp0 で通信ソフトを起動します。あとはこの手順を繰り返します。

  マクロが完成したら、まず ttyp0 の通信ソフトを終了し、次に ttyp1 の
  「cat」を終了させます。「cat」がうまく終了しなければ、強引に kill して
  あげましょう。

  最後に次のコマンドを実行して作業が終了です。

       chmod og-r /dev/ttyp1

  これでかなりの部分まで虫とりができるでしょう。実際にホストにアクセスし
  てマクロがうまく動かなければ、また同じように虫をとれば良いのです。

  7.2.  kermit でマクロ

  ~/.kermrc には各種設定を書きました。このファイルにはマクロも記述できま
  す。では命令を見ていきましょう。

     set <項目など>....
        各種の設定を行ないます。kermit のプロンプトで「set ?」とタイプす
        れば何を設定できるかが表示されます。

     dial <電話番号>
        電話をかけます。

     input <数字> <文字列>
        <数字> 秒の間 <文字列> が送られてこないかを監視します。 <文字列>
        が届いたら <数字> 秒が経過していなくても次の命令に進みます。<数
        字> 秒たっても <文字列> が送られてこなければ、次に進みます。

     outut <文字列>
        <文字列> をホストに送ります。文字列の中にある \13 は改行文字をあ
        らわします。

     connect
        オンラインモードに移行します。

     define <マクロ名> マクロの本体 ....
        マクロを定義します。

        マクロ内で複数の命令を繋げるにはコンマ (,) を使います。

          input 10 *,    output C NIF\13

     マクロが複数の行にまたがる時には、行末にマイナス (-) を付加します。
          input 10 *,               output C NIF\13,-
          ,-
          input 10 Connection-ID,   output SVC\13

     マクロの中では空白行にも「,-」が必要です。

     :標識
        goto 命令の飛び先である標識は、最初にコロン (:) を付けて目印にし
        ます。

          :come_here

     if <条件> <命令>
        <条件> が真ならば <命令> を実行します。

     log session <ファイル>
        通信の記録を <ファイル> に保存します。

     quit, exit
        ともに kermit を終了します。

  kermit の命令 (予約語) は大文字か小文字かは区別されません。読みやすい
  と思うように大文字と小文字を使い分ければ良いでしょう。当然ですが、送受
  信する文字列では大文字と小文字は区別されます。

  これだけの記述法を覚えれば大抵のことができます。

  では、NIFTY-Serve のログインマクロを見てみましょう。このマクロは
  ROAD-2 用です。~/.kermrc にこれを追加し、 kermit のプロンプトで
  「nifty」とタイプすれば、このマクロが動きます。

       define nifty set input timeout-action proceed ,-
           set input echo on ,-
           set input case observe ,-
           set input silence 0 ,-
           ,-
           dial ここに電話番号を書きます,-
           :begin,-
             output @P\13,-
             input 2 NAME?,-
             if failure goto begin,-
           ,-
           input 10 *,              output C NIF\13,-
           input 10 Connection-ID,  output SVC\13,-
           input 10 User-ID,        output ここには ID を書きます\13,-
           input 10 Password,       output ここはパスワードです\13,-
           ,-
           log session ~/kermit.log append,-
           connect

  それそれの命令の使い方や意味は kermit のプロンプトで「help input」のよ
  うに入力すると表示されます。また、プロンプトで「?」を入力すると、その
  時点で入力できる命令などがぜんぶ表示されます。

  kermit の命令は、他にもここに書ききれないくらいの量がありますから、必
  要に応じて kermit のオンラインマニュアルや kermit のヘルプ機能を使って
  調べましょう。

  crontab に項目を加えれぱ kermit で自動運転することも可能です。 cron 機
  能の詳しい使い方は UNIX のシステム管理などの本を参考にしてください。

  kermit で自動運転を実現するマクロは、NIFTY-Serve・FUNIX の Linux 用 13
  番ライブラリにあります。 54 番の「kermitでNIFTY autoaccess」がそれで
  す。

  7.2.1.  kermit でマクロを書く際の問題点

  起動すると「C-Kermit 5A(188), 23 Nov 92, POSIX」と表示される kermit
  や、これより古い kermit では、2 バイト文字は input 命令などでは判定で
  きません。つまり

       input 10 Connection-ID

  は正常に処理されますが、漢字などを使って

       input 10 未読分

  のようには記述できないのです。このように書いたとしても、 kermit はその
  文字列がホストから送られてきたか判断できません。

  kermit のソースファイルを持っている人は、パッチを当ててコンパイルしな
  おせば、この問題が解決します。書き換えるのは ckuus4.c の以下の部分で
  す。

       int
       doinput(timo,s) int timo; char *s; {
         int x, y, i, icn;
         char *xp, *xq = (char *)0;
         CHAR c;
         ^^^^

  の下線部 "CHAR" を単に "char" に変更します。 reinput コマンドを実現し
  ている関数・doreinput() （同じく ckuus4.c にあり）も同様に変更します。
  これで、input コマンドの文字列中でシフト JIS 漢字コードを使用すること
  ができるそうです。

  また、この問題は「C-Kermit 5A(189), 30 June 93, POSIX」では解決されて
  いるそうです。
  この節の情報は川俣吉広さんに提供していただきました。感謝します。

  この文書の筆者は kermit のソースファイルを持っていませんので、このパッ
  チの動作は確認していません。

  7.3.  xc でマクロ

  xc のスクリプト (マクロ) 言語は Bourne シェルのスクリプト言語に似せて
  作られています。しかし、まったく同じではありません。

  kermit とは違い、xc では一つのファイルに一つのマクロだけを記述できま
  す。つまり、サブルーチンは別々のファイルに書かなければなりません。

  改行文字とセミコロン (;) は、ともにコマンド間の区切りに使います。

  「#」よりうしろの部分は注釈になり、xc には無視されます。

  以下はスクリプトで使える命令の一部です。

     dial <電話番号>
        電話をかけます。

     redial
        dial 命令で接続に失敗した時に、同じ番号にもう一度電話をかけ直し
        ます。

     waitfor <文字列> <数字>
        特定の文字列がホストから送られてくるのを待つために使います。 <数
        字> 秒の間 <文字列> を待ちます。<文字列> が送られてきた時点、ま
        たは <数字> 秒たった時点で次の命令に進みます。

     transmit "<文字列>"
        文字列をモデムに送ります。改行文字も送る時には ^M を使います。

     pause <数字>
        <数字> 秒のあいだ何もしません。

     if <条件> ; then <命令>
        <条件> が真ならば <命令> を実行します。

     capture "on|off"
        on で通信の内容をログに保存し、off で保存をやめます。

  では NIFTY-Serve 用のマクロ例です。これも ROAD-2 用です。

  このマクロは、ログイン後、新しくメールが届いていれば全部ダウンロードし
  ます。そのあと、ダウンロードしたメールをホストで削除し、ログアウトして
  回線を切ります。メールをダウンロードしている時にだけ、その内容をログに
  保存します。メールが届いていなければそのままログアウトして回線を切りま
  す。

  マクロの命令については、xc のマニュアルにさらに詳しいことが書かれてい
  ますから参照してください。

       # xc macro for NIFTY-Serve FENICS-ROAD 2

       dial "ここにホストに接続するための電話番号を書きます"
       while ! waitfor "CONNECT" 50
               do
                       redial
               done

       pause 1
       transmit "@P^M"
       while ! waitfor "HOST NAME?" 3
               do
                       transmit "@P^M"
               done

       waitfor "*" 5
       transmit "C NIF^M"

       waitfor "Enter Connection-ID  --->" 20
       transmit "SVC^M"

       waitfor "Enter User-ID  --->" 20
       transmit "ここに ID を書きます^M"

       waitfor "Enter Password --->" 20
       transmit "ここにパスワードを書きます^M"

       waitfor "LOG OUT"
       if waitfor "未読分" 10; then
               waitfor "E. " 30
               transmit "MAIL^M"
               waitfor "電子メール" 10
               pause 1
               transmit "DOWN NEW PROT:NON^M"
               pause 1
               transmit "1^M"
               waitfor "ロード開始−" 300      # メールの表示を開始
               capture "on"
               waitfor "ロード終了−" 600      # メールの表示が終了
               capture "off"
               transmit "1^M"                  # ホストでメールを削除
       endif

       waitfor "^M＞" 10

       transmit "off^M"
       waitfor "*" 30
       transmit "off^M"
       quit

       # end of NIFTY macro

  文字列の最初や最後にある「^M」は改行文字をあらわします。

  このマクロを実行するには、例えば nifty.xc というファイル名で保存し
  て、xc のプロンプトで

       s nifty.xc

  とタイプします。

  コマンドラインから次のようにタイプすると、xc はコマンドモードにならず
  に直接指定したマクロを実行し、マクロが終了したら xc も終了します。

       xc -l デバイス名 -s スクリプトファイル名

  このような項目を crontab に加えれば、指定した時間に自動的にマクロを走
  らせ、BBS にアクセスすることが可能になります。 (crontab をつかうには
  crond を動かしておかなければなりません。) cron 機能の詳しい使い方は
  UNIX のシステム管理などの本を参考にしてください。

  xc でオートパイロットを実現するマクロ集は、NIFTY-Serve・FUNIX の 1 番
  ライブラリ・「Free software UNIX source」にあります。 353 番・
  「xcscript.tar.gz xc用 オートパイロット」がそれです。

  7.4.  minicom でマクロ

  minicom のスクリプト言語は比較的命令数が少ないので、コツがつかめればあ
  とは楽にマクロを書けるでしょう。

  サブルーチンは、kermit と同様、ひとつのファイルの中にいくつも書くこと
  ができます。

  では命令などを見てみましょう。

     set <変数> <値>
        <変数> (アルファベットの a 〜 z が一文字だけ) に <値> を設定しま
        す。

     expect { }
        文字列を待つために使う命令です。この命令では一度に複数の文字列を
        待つことが可能です。

          expect {
                  "紅茶"                goto cafe
                  "ウイスキー"          goto bar
                  "オレンジジュース"    goto VendingMachine
                  timeout 10            goto end
          }

     { と } の間には各行に

          <文字列> <その文字列が来た時に実行する命令>

     と書きます。命令の部分がなければ、expect を終了して } の次の行に制
     御を移します。また { と } の中にある

          timeout <数字> <命令>

     「<数字> 秒だけ列挙された文字列を待ち、その後 <命令> を実行する」と
     いう意味です。<命令> 部分に break と書くと expect を終了して } の次
     の行に制御を移します。<命令> 部分を省略するとマクロを終了してしまい
     ますので注意してください。

     expect の中で timeout 命令を使わなければ 60 秒間だけ文字列を待ち、
     expect を終了します。

     send "<文字列>"
        <文字列> をモデムに送ります。ホストへの送信やモデムへの命令に使
        えます。文字列の最後には minicom が自動的に改行文字を付け加えて
        モデムに出力しますから、xc や kermit のように明示する必要はあり
        ません。

     sleep <数字>
        <数字> 秒の間、なにもしません。

     timeout <数字>
        expect 命令の外で使うと、<数字> 秒たったらマクロの実行を強制的に
        終了します。

     標識:
        goto や gosub 命令で飛んでくる所を示します。最後にコロン (:) を
        書きます。

     goto <標識>
        <標識> に飛びます。

     gosub <標識>
        サブルーチン・<標識> に飛び、サブルーチン内に return 命令かあれ
        ばこの次の行に戻ります。

     return
        サブルーチンを終了し、サブルーチンを呼び出した行の次の行に戻りま
        す。

     exit
        マクロを終了します。

     if <条件> <命令>
        <条件> が真ならば <命令> を実行します。

  マクロを実行するには、「Ctrl-A G」で開く窓の C の項目にマクロのファイ
  ル名を指定して、リターンキーを押します。

  実際にマクロの例を見れば、それぞれの命令をどう使うかがわかると思いま
  す。では、NIFTY-Serve・FENICS-ROAD2 用のマクロです。
       # NIFTY-Serve 用超簡易スクリプト

       # 画面に受信した文字を表示
       verbose on

       send    "ここに電話番号を書きます"
       timeout 3600
       set m 0
       sleep 1
       expect {
               "CONNECT"
       }
       sleep 1

       loop:
               send    "@P"
               expect {
                       "HOST NAME"
                       timeout 2       goto loop
               }

               expect {
                       "*"
               }
               send    "C NIF"
               expect {
                       "Connection-ID  --->"
               }
               send    "SVC"

               expect {
                       "User-ID  --->"
               }
               send    "ここに ID を書きます"

               expect {
                       "Password --->"
               }
               send    "ここはパスワードです"

               #
               # −−メールが１通届いています（未読分１通）−−
               # があれば新しいメールが届いている
               #
               expect {
                       "未読分"        set m 1
                       "続き"
                       "E. 終了"
                       timeout 20
               }

               if m = 1 gosub mail
               send "off"

               expect {
                       "HOST NAME"
               }
               expect {
                       "*"
               }
               send    "off"
               sleep   2
               exit

       #
       # 電子メールをダウンロードするサブルーチン
  #
  mail:
          send    "mail"
          expect {
                  "電子メール"
          }
          send    "down new prot:non"
          sleep   1

          # ダウンロード開始の許可
          send    "1"

          expect {
                  "−ダウンロード終了−"
          }

          # ホスト上のメールを削除
          send    "1"

          sleep   1
          return

  このマクロが実行することは、xc のマクロ例と同じです。ログイン後、新し
  くメールが届いていれば全部ダウンロードします。そのあと、ダウンロードし
  たメールをホストで削除し、ログアウトして回線を切ります。メールが届いて
  いなければそのままログアウトして回線を切ります。

  この例では使っていない命令も少しあります。興味がある人は minicom に付
  属の Manual.scr ファイルを参照してください。

  minicom の自動運転マクロは、5 章でも書いたように、 NIFTY-Serve・FUNIX
  の Linux 用ライブラリ(13 番) にある「mc15bj.tgz minicom1.5b用パッチ
  セット」の中に含まれています。

  8.  いわゆるオンライン入力

  ここでは、ホストに接続して直接電子メールを書いたり会議室などに発言を書
  く方法を扱います。

  仮名漢字変換サーバーが動いていないと日本語は入力できませんから、まずシ
  ステム上で Wnn (jserver) や canna (cannaserver) が動作する状態にしてく
  ださい。

  8.1.  uum 系

  kon 上や X11+kterm 上では Wnn 用の uum や canna 用の canuum を使って日
  本語が入力できます。これらのプログラムは通信ソフトを起動する前に動いて
  いなければなりません。

  起動法は、kon や kterm が扱う文字コードが SJIS なら

       uum -sS

  です。canuum も同じオプションを使います。文字コードが EUC なら

       uum -uU

  です。これで日本語が入力できるようになります。uum (canuum) を日本語入
  力モードにするには「Ctrl-o」キーを使います。もういちど「Ctrl-o」キーを
  使うと通常の英数字入力モードに戻ります。

  以上で、通信ソフト内でも日本語が入力できるようになります。

  8.2.  kinput2

  kinput2 は X11 用の日本語入力フロントエンド プログラムです。仮名漢字変
  換サーバーには Wnn, canna, sj3 が使えます。

  kterm で kinput2 を使うには、まず /usr/lib/X11/app-defaults/KTerm に次
  の設定を加えます。

       *VT100*translations: #override  Ctrl<Key>space: \
       begin-conversion(_JAPANESE_CONVERSION)

  次に kterm を起動します。そして最後に、kinput2 を起動します。 (この順
  番は前後しても問題ありません。) 使用する仮名漢字変換サーバーの種類によ
  り「-wnn」「-canna」「-sj3」のオプションのうちのひとつを使います。uum
  などと違い、kinput2 ではターミナルの漢字モードが何になっていても使えま
  す。

       起動例

       kinput2 -canna &

  kinput2 の起動には少し時間がかかります。うまく起動されたら、「Ctrl-ス
  ペース」キーで kinput2 の日本語入力モードが有効になります。このキーは
  上記の設定 (「Ctrl<Key>space」の部分) で任意のものに変更できます。日本
  語入力モードを終了するには「シフト＋スペース」キーを使います。

  以上で、通信ソフト内でも日本語が入力できるようになります。

  9.  付録 (stk)

  STK の製作者のご好意により、この文書に STK のプログラムなど一式を付け
  ることができました。stk を製作された皆様に感謝します。

  この文書に付属の stk.tar に対して次のようなコマンドを実行します。

  解凍例
  ------
  tar xfv stk.tar

  これで、カレントディレクトリに stk ディレクトリが作られ、その中に
  stk.el や解説など一式が入ります。この続きは、上に書いた STK の説明を読
  んでください。

  [編注：添付ファイル stk.tar, stk.patch, patch.linux は、
  <ftp://ftp.linet.gr.jp/pub/JF/html/BBS-access.tar.gz> に同梱されていま
  す。]

  10.  その他

  この文書の作成にあたり、つぎの方々が協力してくれました。感謝します。 (
  抜けている人がいればごめんなさいね。)

       川俣吉広さん  GHA02475 (NIFTY-Serve)
       仙石浩明さん  <sengoku@sdl.hitachi.co.jp>
       がお さん     MHD01611 (NIFTY-Serve)
       こやまさん    <koyama@tmit.ac.jp>
       January さん  GCC03454 (NIFTY-Serve)

  著者は NIFTY-Serve しか使っていませんので、その他の BBS やネットワーク
  ではプログラムをどこから入手できるのかわかりません。ご存知の方はご一報
  ください。

  Linux で動作する日本語対応の通信ソフトが他にもあれば、著者まで情報をお
  寄せください。また、この文書の改善案や間違いの指摘などもお待ちしていま
  す。電子メールの宛先は次の通りです。

       NBB02702@niftyserve.or.jp

  ぺーちゃん

