NifTerm ログインスクリプト仕様 1997/04/10 (C) Daytime 1.目的 NifTerm のログインスクリプトは、NifTerm内蔵スクリプトで対応してるもの以外  の経路でNIFTY-Serve につなぎ NifTerm を使いたい、というご要望に応えるための  機能です。NifTerm の基本機能を拡張することを目的としていません。  注意:通信条件はノーパリティ/8ビット/1ストップビットに限られます。この条  件で接続できないネットは経由できません。 2.ログインスクリプトの内容 ログインスクリプトでは以下の部分を1個のファイルに記述します。 ・モデムから「CONNECT」が返った後、ホストから「Enter Connection-ID」が返る までの間(ログイン部分) ・ホストに「BYE」を送ったあと、回線切断までの間(ログアウト部分) 3.スクリプトファイルの作成 スクリプトファイルはシフトJIS のテキストファイルです。拡張子はLSC です。任 意のテキストエディタで作成することができます。  ご注意:エディタによっては、「名前をつけて保存」するとき指定したファイル名のう  しろに強制的に.TXTをつけて.LSC.TXTのような名前にしてしまうものがあります。エク  スプローラで拡張子を隠さないように設定してファイル名を確認の上、.LSC.TXTになっ  ていたら、.LSCにリネームしてください。 4.スクリプトファイルの使用 スクリプトファイルを使用するには、次の手順で指定します。 ・スクリプトファイルをNifTerm のデータ(SETTING.DATなど)と同じディレクトリ に置きます。 ・アクセスポイントの追加時に、ディレクトリにある拡張子「.LSC」を持つファイ ル名が「スクリプト」の欄に候補として表示※されるので、これを選びます。    ※スクリプトの欄ではファイル名の頭に外付けのスクリプトであることを示す    *がつきます。 5.スクリプトファイルの構成 小文字、大文字は区別されます。 全角文字は、文字列とコメントの中にのみ使用できます。   全角スペースを文字列、コメント以外のところに書いてしまわないようご注意くだ   さい。 ・ラベル ラベルは、スクリプトファイルの入り口、goto 文の飛び先を示すために使います。 ラベルには、A-Z、a-z、0-9、_(下線)が使えます。 ラベルを定義するには、行のはじめに「:」を置き、その後にラベルを続けます。 例 :login ・loginラベルとlogoutラベル ログイン部分とログアウト部分の始まりを記述します。これらのラベルは必須です。 ・コメント 行の「//」以降はコメントとして扱われます。コメントは実行時に無視されます。 ・文字列 いくつかの命令は文字列をパラメータとして使用します。文字列は「"」で囲みま す。文字列中には以下の特殊文字が使用できます。 \b バックスペース \n ラインフィード \r キャリッジリターン(Enterキー) \t 水平タブ(Tabキー) \v 垂直タブ \' 文字「'」 \" 文字「"」(「""」でも同じです) \\ 文字「\」 \ooo ooo は8進数3桁で文字コードを指定 \xhh hh は16進数2桁で文字コードを指定 ・命令 命令は1行にひとつだけ記述する必要があります。複数行にまたがる命令は不可で   す。 6.命令 (1)trace 命令 書式 trace on|off 例 trace on onでトレースを始めます。off で終わらせます。 トレース中は、実行したスクリプトの行番号を「scripttr.txt」というファイルに 出力します。スクリプトのデバッグに使用します。 (2)send 命令 書式 send 文字列 例 send "OFF\r" 文字列を送信します。改行は「\r」と記述します。 (3)sendx 命令 書式 send 文字列 例 send "OFF\r" telnet接続時、文字列を強制送信します。改行は「\r」と記述します。 telnet接続で、最初に何か改行などを送らないと通信がはじまらないサーバを経由   する場合、sendでうまく送れないときはsendxを使ってみてください。 (4)goto 命令 書式 goto ラベル 例 goto label1 ラベルのついた行に飛びます。 (5)end 命令 書式 end スクリプトの実行を終了します。 ログイン部分であれば、NifTerm の通常のオートパイロットに制御が移ります。 ログアウト部分であれば、オートパイロットを終了します。 (6)abort 命令 書式 abort 文字列 スクリプトの実行を異常終了します。 NifTerm はオートパイロットを終了し、文字列をエラーログに表示します。 (7)disconnect命令 書式 disconnect 回線を切断します。 (8)wait 命令 書式 wait 条件 [and 条件...] [goto ラベル] 例 wait left=="COM\r" 条件が満たされたとき、ラベルで指定された命令(ないときは次の命令、次の命   令がor命令の時はさらにその次)に移ります。 それまで先には進みません。 or 命令により、複数の条件を待つことができます。 条件には以下のものがあります。 left==文字列 受信した行の左端が文字列と一致したとき条件が満たされます。 right==文字列 受信した行の右端が文字列と一致したとき条件が満たされます。 mid==文字列 受信した行が文字列を含むとき条件が満たされます。 exact==文字列 受信した行が文字列と完全に一致したとき条件が満たされます。 elapsed 時間 wait文に入ってから、指定時間が経過したとき条件が満たされます。時間はミリ秒 で指定します(1000 = 1秒) (9)or 命令 書式 or 条件 [and 条件...] [goto ラベル] wait命令の代替条件を指定します。wait命令の直後または、or 命令の直後にしか 置けません。 wait命令の後に1個または複数のor命令を置くと、一連のwait命令または、or命令 のいずれかの条件が満たされるまで待つようにできます。 条件はwait 命令と同じです。 例: wait left=="COM" or left=="Clear" goto retry or elapsed 10000 goto error "COM" で始まる行が受信されると、or の次の行に、 "Clear" で始まる行が受信されると、「:retry」の行に、 どちらも受信されないまま10秒経つと、「:error」の行に飛びます。 (10)timeout 命令 (この機能はNifTerm 2.0から対応です)   書式  timeout 秒数   例   timeout 60 // 60秒でログイン・ログアウトできない場合はエラー   スクリプトの実行を開始してから完了(end命令を実行)するまでの許容時間を指定   します。この時間内にスクリプトの実行を完了しない場合はタイムアウトとしてア   ボートします。   この命令はスクリプト全体に対する宣言として機能します。スクリプトファイルの   うちどこの行に書いても効果は同じです。2個以上timeout を記述した場合は最後   のひとつだけが有効です。   0を指定するとタイムアウトなしになります。デフォルトは0です。 (11)code 命令 (この機能はNifTerm 2.0から対応です)   書式  code SJIS | NJIS | OJIS | EUC   例   code NJIS // 新JISを指定   接続してから切断するまでの間の通信に使う漢字コードを指定します。   この命令はスクリプト全体に対する宣言として機能します。スクリプトファイルの   うちどこの行に書いても効果は同じです。2個以上code を記述した場合は最後の   ひとつだけが有効です。   通信の途中(接続から切断までの間)で動的にコードを変えることはできません。   指定の意味は以下のとおりです。    SJIS  シフトJIS    NJIS  新JIS    OJIS  旧JIS    EUC   EUC   デフォルトはSJISです。   ※シフトJISが通信データ量が一番少なくなりますのでシフトJISが使えるアクセス   ポイントではシフトJISにする(デフォルトなので明示的な指定は不要です)のが有   利だと思います。 7.注意事項 goto 命令でループをくむときは、間にwait 命令が入るようにしてください。 wait 命令を実行せずにループすると、Windows がハング状態になります。 受信行が終わっているか(改行しているか)確認するためには、右端が「\r」とマ ッチするかで調べてください。複数行にまたがる文字列を1個のwait命令で検出す   ることはできません。   プロンプトを待った後、文字列を送信し、さらに同じプロンプトを待つ場合は、次   の※のようにして、送った行のエコーバックを受信し終わるまで待ってください。   ※の行を入れないと、次のwait命令では前の応答済みプロンプトにヒットしてしま   います wait left=":" send "1\r" wait right=="\r"//※1\rを送ったプロンプトの行が終わるのを待つ wait left=":" 8.作り方のコツ   まず、漢字コードだけ指定した何もしないスクリプトファイルを作ります。ファイ   ル名はアクセスポイントの種類がわかる名前をちゃんとつけておきます。 ------------------------------------------------------------------------------ code NJIS :login end :logout end ------------------------------------------------------------------------------   次に新しいアクセスポイントの設定を作ります。アクセスポイントの電話番号、ア   クセス方法などはもうここでちゃんと指定してしまっておきます。実行するとたぶ   んどこかのプロンプト待ちで止まります。そこでオートパイロット中断して、手で   ニフティにつなぐ、切断する、の手順をやってみます。   生ログファイルを開いて、どういうプロンプトにどういう応答を入れたかを確認し   ます(NifTermのターミナルウィンドウではスクロールアップしたとたんに化け文字   の行が消えたりしますので、生ログファイルをエディタで開いてください)。   その情報を元に、スクリプトの:loginとendの間、:logout とendの間を埋めます。 9.サンプル   実動するサンプルです。動かすときは点線の間を切り取って拡張子.LSCのファイル   にして4で説明したディレクトリに置いてください。 9.1 CIS AP用 ------------------------------------------------------------------------------ // NifTerm ログインスクリプトサンプル for CompuServe AP // これはサンプルです。実用を目的としたものではなく、スクリプトの文法の理解を // 助けることを目的としています。 // ログイン部分 // モデムから「CONNECT」 が返ったあと、 // ホストから「Enter Connection-ID」 が返る前までを記述します。 :login // このラベルで始める必要があります。 :login_send00 // 4秒待ちます wait elapsed 4000 // 改行 を送ります send "\r" // 化けた文字を待ちます // (化け文字は手でアクセスしたときのログ内容をYYMMDD.LOGからコピー) wait right == ":" // 化け文字が来たら次へ or elapsed 30000 goto login_error // 30 秒応答がなければ中止 // 「NIFTY」改行 をおくります send "NIFTY\r" // あとはEnter Connection-IDが来るのでスクリプトは終わり end :login_error disconnect // 回線切断 abort "ログインできません" // ログアウト部分 // NIFTY に「BYE\r」 を送ったあと、 // 回線切断までを記述します :logout // このラベルで始める必要があります // 化けた文字を待ちます // (化け文字は手でアクセスしたときのログ内容をYYMMDD.LOGからコピー) wait right == ":" // 化け文字が来たら次へ or elapsed 5000 goto logout_end // 5 秒応答がなければ中止 // 「off」改行 をおくります send "off\r" end :logout_end disconnect // 回線切断 end ------------------------------------------------------------------------------ 9.2 Connect Packet Service(旧称TYMNET)用 ------------------------------------------------------------------------------ // NifTerm ログインスクリプトサンプル for TYMNET AP // これはサンプルです。実用を目的としたものではなく、スクリプトの文法の理解を // 助けることを目的としています。 // ログイン部分 // モデムから「CONNECT」 が返ったあと、 // ホストから「Enter Connection-ID」 が返る前までを記述します。 :login // このラベルで始める必要があります // ifierで終わる行が来るのを待ちます。 // 化け文字が違うAPがあるので一定時間待ってもこない場合は先に行きます。 wait right=="ifier" or elapsed 5000 // 1文字 O を送ります。改行は不要です。 wait elapsed 2000 send "O" // please log in: を待ちます。 // 化け文字が違うAPがあるので一定時間待ってもこない場合は先に行きます。 wait right=="log in: " or elapsed 5000 // NIFTY 改行 を送ります send "NIFTY\r" end // ログアウト部分 // NIFTY に「BYE\r」 を送ったあと、 // 回線切断までを記述します :logout // please log in: を待って回線を切断します。 // 化け文字が違うAPがあるので一定時間待ってもこない場合は切ります。 wait right=="log in: " or elapsed 5000 disconnect end ------------------------------------------------------------------------------ 9.3 INFONET用(ニュージーランド以外) ------------------------------------------------------------------------------ // NifTerm ログインスクリプトサンプル for INFONET AP // これはサンプルです。実用を目的としたものではなく、スクリプトの文法の理解を // 助けることを目的としています。 code NJIS // 漢字コード新JISを指定します。 // 化け文字があまりにもでたらめなので // 送れば適当な時間内にホストが応答するものとして適当に待ちながら送ります。 // うまくいかないときは待ち時間を長くしてみてください。 // ログイン部分 // モデムから「CONNECT」 が返ったあと、 // ホストから「Enter Connection-ID」 が返る前までを記述します。 :login // 適当に間をおきながら改行を3回送ります wait elapsed 6000 send "\r" wait elapsed 1000 send "\r" wait elapsed 1000 send "\r" wait elapsed 1000 // C 改行 を送ります。 send "C\r" wait elapsed 5000 // NIF 改行を送ります。 send "NIF\r" // しばらく待ってもニフティに入れなかったらエラーにします。 wait right == "nter Connection-ID --->" or elapsed 30000 goto error end :error disconnect // 回線切断 abort "ログインできません" // ログアウト部分 // NIFTY に「BYE\r」 を送ったあと、 // 回線切断までを記述します :logout // ログアウト処理が終わりそうなくらいの時間を待って回線を切ります。 wait elapsed 5000 disconnect end ------------------------------------------------------------------------------                    -・-