|
パソコン通信用インタプリタ 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
|