AmigaOSのシャットダウン用スクリプト作成
(2005.03.28)
AmigaOSを使っている間、distributed.netのRC5-72(RSA Challenge 5 for 72 bits)のクライアントを常駐させています。パソコン
を使わない時は、クライアントの処理性能が高いLinuxで動作させるため、再起動してネットワークからLinuxをブートしています。
元々、AmigaOSは電源をいきなり切ってもよいようにできていますけれど、その前にクライアントを終了させて、処理中のデータを
保存させなければ成果がご破算になってもったいないです。これまでは再起動の直前にシャットダウンが必要なプログラムを手作業
で終了させていましたけれど、面倒になってきましたので、再起動の直前に自動的に終了させることにしました。制御の流れは、メ
ニュー「Tools|Reboot」選択→reboot.rexx起動→reboot.script起動→shutdown.rexx起動→dnetc_quit.rexx起動→クライアント終
了といったところ。将来、別のソフトも終了させる必要が出てきたらWBShutdownに終了用のスクリプトを追加すればOKという訳です
。
reboot.script
再起動のメニューを選択した際にこのスクリプトが起動されるので、シャットダウンのスクリプトを起動後、3秒間待ちます。
;
; $VER: reboot PC. Ver 1.1, 2005/03/28
;
IF "1" EQ `REQUESTCHOICE "Amithlon" "Reboot for Amithlon,*NRealy?" "Ok" "Cancel"`
stack 20000
projvol:scripts/shutdown.rexx
WAIT 3
reboot
ENDIF
shutdown.rexx
フォルダWBShutdownの中にあるスクリプトを1個ずつ実行します。ToolTypesを参照できないため、頭に設定(フォルダ位置)を入れて
あります。ファイル名の末尾が「.info」のファイルはスクリプトのアイコン情報なので実行しません。
/*
$VER: quit programs before shutdown. Ver 1.0 2005/03/28
This fllowing lines are config.
WBSHUTDOWN=SYS:WBShutdown/
*/
OPTIONS RESULTS
IF ~ SHOW('L', "rexxsupport.library") THEN DO
IF ADDLIB('rexxsupport.library', 0, -30, 0) THEN DO
SAY "Added rexxsupport.library."
END
ELSE DO
SAY 'ARexx support library not available, exiting'
EXIT 10
END
END
wbsdpath = getlinetype('WBSHUTDOWN', 'SYS:WBShutdown')
sd = SHOWDIR(wbsdpath, 'FILE', '"')
slen = LENGTH(sd)
p1 = 1
DO WHILE p1 < slen
p2 = INDEX(sd, '"', p1)
IF 0 = p2 THEN DO
p2 = slen + 1
END
item = wbsdpath""SUBSTR(sd, p1, p2 - p1)
IF UPPER(RIGHT(item, 5)) ~== '.INFO' THEN DO
ADDRESS COMMAND item
END
p1 = p2 + 1
END
EXIT
getlinetype: PROCEDURE
PARSE ARG typename, def
v = def
linenum = SOURCELINE()
i = 1
DO WHILE '*/' ~== SOURCELINE(i) & i <= linenum
sl = SOURCELINE(i)
IF 1 = INDEX(sl, typename'=') THEN DO
v = SUBSTR(sl, INDEX(sl, '=') + 1)
LEAVE
END
i = i + 1
END
RETURN v
dnetc_quit.rexx
これをWBShutdownに入れておき、シャットダウン時にクライアントを終了させます。
/*
$VER: Quit dnetc. Ver 1.0 2005/3/23
*/
OPTIONS RESULTS
ADDRESS "DNETC.1"
QUIT