@q
@program cmd-@bootme
1 99999 d
i
( bootme.muf -- 6/23/95 by Squirrelly )
(
@bootme [#idle] -- Drop all but your least idle connect. Default.
@bootme #old -- Drop all but your most recent conect.
@bootme #all -- Drop all of your connections.
@bootme #list -- Show a numbered list of your connections.
@bootme <n> -- Boot connection{s} <n> from above #list.
@bootme #help
@bootme #u=<name>
)
$def TMAX 359999
lvar USER
lvar MVAL
lvar UNIDLECON
lvar UNIDLESEC
lvar TOT
: nsize ( i-val i-size -- s )
swap intostr "0000" swap strcat
dup strlen rot - strcut swap pop
;
: do_boot ( i -- )
dup "== BootMe Disconenect"
over condbref ME @ dbcmp not if " by " strcat ME @ name strcat then
" ==" strcat connotify
dup conboot
"--> Booted " over condbref name strcat " connection id # " strcat
over condescr intostr strcat " (idle " strcat
swap conidle intostr strcat " seconds)." strcat .tell
TOT @ 1 + TOT !
;
: bt_idle ( -- )
0 UNIDLECON !
mode MVAL ! preempt
USER @ descriptors
dup if swap descrcon dup UNIDLECON ! conidle UNIDLESEC ! 1 - then
begin
dup while
swap descrcon
dup conidle dup UNIDLESEC @ < if
UNIDLECON @ do_boot
UNIDLESEC !
UNIDLECON !
else
pop do_boot
then
1 -
repeat
MVAL @ setmode
pop
;
: bt_old ( -- )
mode MVAL ! preempt
USER @ descriptors
dup if swap pop 1 - then
begin
dup while
swap descrcon do_boot
1 -
repeat
MVAL @ setmode
pop
;
: bt_all ( -- )
mode MVAL ! preempt
USER @ descriptors
begin
dup while
swap descrcon do_boot
1 -
repeat
MVAL @ setmode
pop
;
: bt_n ( i -- i )
mode MVAL ! preempt
descrcon
dup if dup condbref USER @ dbcmp not else 1 then if
"BootMe: Invalid ID# given." .tell
MVAL @ setmode
pop 1 exit
then
do_boot
MVAL @ setmode
0
;
: set_user ( s -- i )
dup .pmatch
dup player? not if
pop "BootMe: Player '" swap strcat "' not found." strcat .tell
1 exit
then
swap pop
ME @ over controls not if
"BootMe: You can't select player '" swap name strcat
"'." strcat .tell
1 exit
then
"BootMe user selected: " over name strcat .tell
USER ! 0
;
: give_list ( -- )
ME @ USER @ dbcmp if "Your" else USER @ name "'s" strcat then
" connections:" strcat .tell
" ID# On-line Idle Host" .tell
mode MVAL ! preempt
USER @ descriptors
begin
dup while
swap dup intostr 7 .rstrfmt " " strcat
swap descrcon swap
over contime dup TMAX > if pop TMAX then
dup 3600 / 2 nsize
rot swap strcat ":" strcat swap 3600 %
dup 60 / 2 nsize
rot swap strcat ":" strcat swap 60 %
2 nsize strcat " " strcat
over conidle dup 9999 > if pop 9999 then
intostr 4 .rstrfmt strcat " " strcat
swap conhost strcat
.tell
1 -
repeat
MVAL @ setmode
pop
;
: give_help ( -- )
"BootMe.muf -- 6/23/95 by Squirrelly" .tell
" @bootme [#idle] -- Drop all but your least idle connect. Default."
.tell
" @bootme #old -- Drop all but your most recent conect." .tell
" @bootme #list -- Show a numbered list of your connections."
.tell
" @bootme #all -- Drop all of your connections." .tell
" @bootme <n> -- Boot connection(s) <n> from above #list."
.tell
.me_wiz? if
" @bootme #u=<name> - Set target player (Wizard only)." .tell
then
;
: main
"me" match dup ME ! USER !
strip tolower
dup not if pop ME @ "_bootme/def" getpropstr then
dup not if pop "#idle" then
0 TOT !
begin
dup while
" " .split swap strip
dup not if pop continue then
dup "#idle" strcmp not if pop bt_idle continue then
dup "#old" strcmp not if pop bt_old continue then
dup "#all" strcmp not if pop bt_all continue then
dup "#list" strcmp not if pop give_list continue then
dup number? if
atoi bt_n if break else continue then
then
dup "#help" strcmp not if pop give_help continue then
dup "#u=" 3 strncmp not if
3 strcut swap pop set_user if break else continue then
then
"Bootme: Unknown operation: '" swap strcat "'" strcat .tell
repeat
pop
"Done. " TOT @ intostr strcat " connection" strcat
TOT @ 1 = not if "s" strcat then " dropped." strcat .tell
;
.
c
q