パソコン通信用インタプリタ for MS-DOS (1993年2月)
【概 要】 このプログラムは,MS-DOS全盛時代に,パソコン通信ホストへのアクセスやアーティクルの読み書き,プログラムのダウンロードなどを自動的に実行してくれるプログラムとして開発しました. 通信用簡易言語で書かれたコマンドファイルを読み込み,書かれた命令を逐次解釈しながら通信を自動的に実行する一種のコマンドインタプリタです.用意されているコマンド(命令)には通信処理用だけでなくファイルを取り扱うものも含まれていますのでバッチファイルとしての応用も可能でした.通信処理用のシェルプログラムという意味でCMSH.EXE(Communication Shell)と呼んでいます。 このプログラムは,工学社発行のI/O誌平成5年4月号に掲載されました。 以下,当時に作成しました説明書の中から特徴などを抜き書きしてみました。 【特 徴】 CMSH.EXEの特徴は次のとおりです. ・大域変数だけでなく局所変数が使用できる. ・引数付きのサブルーチンやユーザー定義関数が記述できる. ・サブルーチンやユーザー定義関数は再帰呼出しが可能である. ・予約語や変数名などの識別子は,大文字小文字の区別がある.予約語は全て小文字に統一されている. ・構造化プログラミングが可能である. 【動作環境】 次の機種でMS-DOSバージョン3以上にて動作可能です. ・PC-9801(初期のものやハイレゾタイプは除きます.EPSON互換機でも動くと思います) ・J3100,FMR,IBM-PC(各シリーズ機全機種について動作確認した訳ではありません) それぞれ実行ファイルは次のとおりです. CMSH_98.EXE (PC-9801用) CMSH_FM.EXE (FMR用) CMSH_AT.EXE (IBM-PC用) CMSH_J3.EXE (J3100用) お好きなものをCMSH.EXEにリネームして使用してください. 【起動方法】 DOSプロンプトから >cmsh commandfile [argument ... ] で起動します. command fileは,この後に述べる簡易言語文法に従って記述されたコマンドファイルであるものとします.commandfileの実行を終わると特に指定がない限りDOSに戻ります.後述しますonexitコマンドの指定によりターミナルモードとすることもできます. commandfileに続くargumentはcommandfileに引き渡すことができます.実行中のプログラムはESCキーを押すことにより強制停止させることもできます.commandfileは約64キロバイトまでの大きさのものが実行できます.これを越えるような場合には起動時にエラー表示を行いDOSに戻ります. 【ダウンロード】
◎ プログラムサンプル ◎ BBS『ATLAS』への自動ログインを題材に,CMSH簡易言語文法によるプログラム例を一つ示します. 『ATLAS』は,私が個人運営している草の根BBSのネット名です.(現在は閉局しています) ; ; ATLAS 自動ログイン ; ;------------------------------------------------------------------------- ; 定数変数の設定 ;------------------------------------------------------------------------- OFF = SUCCESS = SJIS = CR = 0 ON = FAIL = JIS = !OFF CRLF = 2 ;------------------------------------------------------------------------- ; ID, PASSWORD 等の設定(この部分を書き換えて利用する) ;------------------------------------------------------------------------- speed = 1200 port = 1 $mdminit = "atz\r" $mdmset = "atx4\r" $dial = "atdp 0785815610\r" $atlasid = "GUEST\r" $atlaspsw = "ATLAS\r" ;------------------------------------------------------------------------- ; 通信ポート等の設定 ;------------------------------------------------------------------------- parameter speed, 8, 1, 0, port ; 8bit, 1stop, non_parity xflow ON ; XON/XOFF flow controle on rscsflow ON ; RTS/CTS flow controle on code ON, SJIS ; S controle off, Using Sjis kanji termcode CR, CRLF ; terminate charactor type setting monitor ON ; display monitoring on ;------------------------------------------------------------------------- ; モデムの準備チェック ;------------------------------------------------------------------------- if( getcts() == 0 ) then print "モデムが準備できていません. 確認をしてください." while( !getcts() ) ; モデムレディになるまでループ endwh endif ;------------------------------------------------------------------------- ; 接続リトライ回数等の設定 ;------------------------------------------------------------------------- retrys = 3 ; リトライ回数 3 回 retrytime = 5 ; リトライ間隔 5 秒 ;------------------------------------------------------------------------- ; ホストへアクセス ;------------------------------------------------------------------------- print "ATLASに接続します." while( (retrys = retrys -1) >= 0 ) send $mdminit ; モデム初期化 waittime 2 send $mdmset ; モデム設定 waittime 2 send $dial ; ダイヤリング ; 回線接続待ち timeout 60 waitstr "BUSY", "NO CARRIER", "NO DIALTONE", "CONNECT" if(status == 4) then if(instr($status, "REL")) then mnp = ON else mnp = OFF endif else switch( status ) case 1: print "話中です." break case 2: print "接続失敗です." break case 3: print "NTT からのダイヤルトーンが検出できません." break default: print "タイムアウトです." endsw waittime retrytime continue endif ; ログイン手続き timeout 5 waitstr "User ID =" if( status ) then send $atlasid waitstr "PASSWORD=" if( status ) then send $atlaspsw break endif endif print "ログイン失敗です." dtr OFF ; 回線強制切断 waittime retrytime dtr ON continue endwh if(retrys < 0) then print "規定回数リトライしましたが全て失敗です." exit FAIL else print "ログインしました." endif ;------------------------------------------------------------------------- ; マニュアル操作に切換え ;------------------------------------------------------------------------- terminal exit SUCCESS |