#!/usr/bin/perl -w use Tk; use Tk::Menubar; use Cwd; require Tk::Dialog; require Tk::ROText; use strict; #------------------------------------------------------------------- # Main Window Setup and configuration #------------------------------------------------------------------- my $MW = MainWindow->new(); $MW->title("TESTGUI "); #------------------------------------------------------------------- # Menubar #------------------------------------------------------------------- my $menubar = $MW->Menubar; #------------------------------------------------------------------- # Menubuttons #------------------------------------------------------------------- my $f = $menubar->Menubutton( -text => 'File', -underline => 0 ); my $run = $menubar->Menubutton( -text => 'Run', -underline => 0 ); #------------------------------------------------------------------- # Menu sub-buttons #------------------------------------------------------------------- $f->command( -label => 'Close', -command => sub { exit }, -underline => 0 ); $run->command( -label => 'RUN PING COMMAND', -command => [ \&run_pc ] ); #------------------------------------------------------------------- # Frame 1 - INPUT VARIABLES FRAME (Main body frame) #------------------------------------------------------------------- my $N = 1; my $frm1 = $MW->Frame; my $tl1 = $frm1->Label( -text => "NOT IMPORTANT, JUST USED SPACE FOR SETTING VARIABLES", -relief => 'raised', -background => "gray" )->grid( -row => 0, -column => 0, -sticky => 'nsew', -columnspan => 2 ); $frm1->pack; MainLoop; #------------------------------------------------------------------- # Run PC subroutine #------------------------------------------------------------------- sub run_pc { my $pcwin = new MainWindow( -title => "PC OUTPUT LOG WINDOW" ); `ping -c 20 localhost > pc_output.log &`; my $pidpc = open( RUNCOMMANDD, "tail -f pc_output.log |" ) || die $!; my $outputtext = $pcwin->Scrolled( "Text", -scrollbars => "e", -width => 80, -height => 45, -wrap => "word" )->pack(); my $quitbutn = $pcwin->Button( -text => "Close", -command => sub { close(RUNCOMMANDD); kill 'TERM', $pidpc; `echo "bye" >> pc_output.log`; $pcwin->fileevent( \*RUNCOMMANDD, 'readable' => '' ); $pcwin->destroy; } )->pack(); $pcwin->fileevent( \*RUNCOMMANDD, 'readable', [ \&fill_text_widget, $outputtext ] ); } sub fill_text_widget { my ($widgett) = @_; my ( $stat, $data ); $stat = sysread( RUNCOMMANDD, $data, 4096 ); die "sysread error: $!" unless defined $stat; $widgett->insert( 'end', $data ); $widgett->yview('end'); }