#!/usr/local/bin/perl -w
my
$top
= MainWindow->new;
my
$status
=
"Ready for job ..."
;
$top
->Label(
-textvariable
=> \
$status
,
-anchor
=>
'w'
)->
pack
(
-side
=>
'bottom'
,
-fill
=>
'x'
,
-anchor
=>
'w'
);
my
$t
=
$top
->Text(
"-relief"
=>
"raised"
,
"-bd"
=>
"2"
,
"-setgrid"
=>
"true"
);
my
$s
=
$top
->Scrollbar(
"-command"
=> [
"yview"
,
$t
]);
$t
->configure(
"-yscrollcommand"
=> [
"set"
,
$s
] );
$fh
= Tk::IO->new(
-linecommand
=> [
$t
,
'insert'
,
'end'
],
-childcommand
=> \
&Child
);
$cmd
=
'ls -l'
;
$e
=
$top
->Entry(
"-width"
=> 40,
"-textvariable"
=> \
$cmd
);
$e
->
pack
(
"-side"
=>
"bottom"
);
$b
=
$top
->Button(
"-text"
=>
"Do It"
,
"-command"
=> [\
&DoIt
,
$fh
,
$e
]);
$b
->
pack
(
"-side"
=>
"bottom"
);
$b
=
$top
->Button(
"-text"
=>
"Quit"
,
"-command"
=> [
'destroy'
,
$top
]);
$b
->
pack
(
"-side"
=>
"bottom"
);
$b
=
$top
->Button(
"-text"
=>
"Kill"
,
"-command"
=>
sub
{
$fh
->killpg(3)} );
$b
->
pack
(
"-side"
=>
"bottom"
);
$s
->
pack
(
"-side"
=>
"left"
,
"-fill"
=>
"y"
);
$t
->
pack
(
"-side"
=>
"left"
,
"-expand"
=>
"y"
,
"-fill"
=>
"both"
);
$t
->
bind
(
"<Any-Enter>"
,
sub
{
$t
->focus });
$e
->update;
$e
->focus;
Tk::MainLoop;
sub
Child
{
my
(
$code
,
$fh
) =
@_
;
my
$cmd
=
join
(
' '
,
$fh
->command);
$status
=
"code=$code from $cmd"
;
}
sub
DoIt
{
my
$fh
=
shift
;
my
$e
=
shift
;
$fh
->
exec
(
$e
->get);
}