hpwakeのフロントエンド
(2005.11.20)
パソコンをLANから電源ONできる設定を6台のパソコンに設定しましてAmigaからコマンドhpwakeを実行すると見事ONします。
ただしhpwakeはMACアドレスを指定する必要があるためにMACアドレス一覧表を見ながら指定することになります。それでは面倒
ですからテキストファイルにホスト名とMACアドレスの一覧を入れておいてホスト名を選択するとhpwakeを実行できるようにARexxで
スクリプトを作りました。
まずは設定ファイルから。
-----wakeup.config-----
abortive 01:23:45:67:89:ab
bade 01:23:45:67:89:ab
callback
darkages
easterner 01:23:45:67:89:ab
fallen 01:23:45:67:89:ab
garb 01:23:45:67:89:ab
halfhourly
iffy
jeep 01:23:45:67:89:ab
key 01:23:45:67:89:ab
----------
2005.11.20
MACアドレスの末尾につける記号がセミコロンだったのでコロンに修正しました。
そしてARexxスクリプト。
-----wakeup.rexx-----
/*
$VER: wake up on lan. 1.0, 2005/11/04
CONFIG=wakeup.config
*/
OPTIONS RESULTS
config = getlinetype('CONFIG', 'PROGDIR:wakeup.config')
isopenconfig = OPEN(config_handle, config, READ)
hostcount = 0
IF isopenconfig THEN DO
DO WHILE ~EOF(config_handle)
linebuff = READLN(config_handle)
IF 0 = LENGTH(linebuff) THEN DO
END
ELSE IF '#' = LEFT(linebuff, 1) THEN DO
END
ELSE IF 2 ~= WORDS(linebuff) THEN DO
END
ELSE DO
host = WORD(linebuff, 1)
mac = WORD(linebuff, 2)
hosttable.hostcount.hostname = host
hosttable.hostcount.macaddress = mac
hostcount = hostcount + 1
END
END
END
hostlist = ''
i = 0
DO WHILE i < hostcount
IF '' = hostlist THEN DO
hostlist = '"'hosttable.i.hostname'"'
END
ELSE DO
hostlist = hostlist' "'hosttable.i.hostname'"'
END
i = i + 1
END
ADDRESS COMMAND 'REQUESTCHOICE >ram:wakeup.temp wakeup "select host to wakeup" 'hostlist' "Cancel"'
selindex = -1
isopenselect = OPEN(select_handle, 'ram:wakeup.temp', READ)
IF isopenselect THEN DO
linebuff = READLN(select_handle)
IF 0 < linebuff THEN DO
selindex = linebuff - 1
END
END
IF 0 <= selindex THEN DO
ADDRESS COMMAND 'toolsvol:hpwake/hpwake 'hosttable.selindex.macaddress
END
IF isopenconfig THEN DO
junk = CLOSE(config_handle)
isopenconfig = 0
END
IF isopenselect THEN DO
junk = CLOSE(select_handle)
isopenselect = 0
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
----------