/**********************************************************
Perl/Tk Clinic : runcmd.pl - run command utility
di GNU/Linux
Released Sept,22,2005
by iko(iko_riyadi@yahoo.com)
www.geocities.com/iko94
***********************************************************/
Anda pernah merasa ribet untuk menjalankan sebuah aplikasi sementara anda
belum bisa menemukan ikon program tersebut di start menu ? Mungkin dengan membuka
X terminal masalah anda akan terselesaikan, tapi bagaimana dengan user biasa yang
masih awam (dengan X terminal) ? Masalah ini biasanya terjadi pada desktop manager
yang relatif sederhana seperti IceWM, blackbox, fluxbox, openbox ataupun twm.
Kali ini penulis akan mencoba mengatasi masalah sederhana tersebut. Anda
bisa melihat screenshotnya di www.geocities.com/iko94/runcmd.
Nah, bagaimana tampilannya ? Cukup lumayan bukan ? Dengan menggunakan
Perl/Tk, penulis berhasil menyelesaikannya dengan cukup mudah. Anda tidak percaya ?
Mari kita mulai membahasnya.
Persyaratan utama adalah anda harus running under X Window, kemudian anda
harus menginstall perl dan modul Tk-nya.
Berikut ini penulis sertakan source code-nya :
=======awal runcmd.pl=============
#!/usr/bin/perl -w
# runcmd - run command utility
# Copyright (c) Sept 2005 Iko Riyadi .
# GPL.
use Tk;
use Tk::Entry;
my $top = MainWindow->new();
$top->configure(-title=>'Run');
$top->geometry('+0+320');
$top->minsize(qw(300 100));
$top->maxsize(qw(300 100));
sub pork {
$anak=fork();
if (!defined($anak)) {
die("Gagal melakukan fork: $!");
} elsif ($anak == 0) {
exec("$hasil &");
} else {
waitpid($anak,0);
exit(0);
}
}
sub fileDialog {
my $w = shift;
my $ent = shift;
my $operation = shift;
my $types;
my $file;
# Type names Extension(s) Mac File Type(s)
#
#---------------------------------------------------------
@types =
(["Perl Scripts", '.pl', 'TEXT'],
["Text files", [qw/.txt .doc/]],
["Text files", '', 'TEXT'],
["C Source Files", ['.c', '.h']],
["All Source Files", [qw/.tcl .c .h/]],
["Image Files", '.gif'],
["Image Files", ['.jpeg', '.jpg']],
["Image Files", '', [qw/GIFF JPEG/]],
["All files", '*']
);
$file = $w->getOpenFile(-filetypes => \@types);
if (defined $file and $file ne ' ') {
$ent->delete(0, 'end');
$ent->insert(0, $file);
$ent->xview('end');
}
}
my $atas = $top->Frame->pack(qw/-side top -expand 1 -padx .5c -pady .5c/);
my $bawah = $top->Frame->pack(qw/-side bottom -expand 1/);
my $label = $atas->Label(-text => 'Run :', -anchor => 'e')->pack(-side=>'left');
my $entry = $atas->Entry(-width=>100)->pack(-side=>'left');
$entry->bind('' => sub {$hasil=$entry->get;
if ($hasil) {
print "Prentah : ".$hasil."\n";
&pork; } else {
print "Isikan sebuah prentah !!!\n"; }
});
$bawah->Button( -text => 'Run', -width=>8,
-command => sub{$hasil=$entry->get;
if ($hasil) {
print "Prentah : ".$hasil."\n";
&pork; } else {
print "Isikan sebuah prentah !!!\n"; }
} )->pack(-side=>'left',-expand=>1);
$bawah->Button( -text => 'Browse', -width=>8,
-command => sub{
fileDialog($top, $entry, 'open');
} )->pack(-side=>'left',-expand=>1);
MainLoop;
=======akhir runcmd.pl=============
Ada dua sub program, yaitu sub pork dan sub fileDialog. Sub pork
digunakan untuk melakukan forking, yaitu program yang diketikkan di
Tk::Entry akan dijalankan oleh anak proses dengan menekan tombol Run atau
menekan tombol Enter, setelah sebelumnya dicek dulu apakah usaha forking-nya
gagal atau tidak (jika gagal akan diketahui sebabnya dengan hash %! di Perl).
Setelah anak proses berhasil menjalankannya, maka induk proses akan segera
mengeluarkan kita dari program utamanya. Widget Entry di sini dibuat agar
bisa melakukan binding dengan memanggil Return atau Enter.
Sub fileDialog, digunakan untuk menampilkan menu untuk memilih dan
kemudian membuka sebuah file yang bisa ditentukan ekstensionnya (tipe filenya).
Sub fileDialog dijalankan oleh tombol Browse.
Cukup menarik bukan ? Selebihnya program kecil ini berisi handle
terhadap graphical user interface yang menggunakan Perl::Tk. Sehingga
tampilannya pun khas Tk banget gitu loh.
Akhir kata, seperti kata nenek moyang kita, bahwa "TAK ADA GADING
YANG TAK RETAK", maka penulis memohon maaf bila ada ketidaksempurnaan.
Penulis berharap akan ada banyak masukan dari para senior di se-antero
Indonesia. Thx.
Catatan : file-file dan gambar yang berhubungan dengan utility kecil ini,
dapat anda temukan di www.geocities.com/iko94/runcmd.
REFERENCES :
1.Perl Programmers Reference Guide (perl manual)
2.Perl::Tk documentation
3.Dasar Pemrograman Perl (Abdul Kadir)
THX TO :
1.G O D
2.My Lovely WIFE
3.GNU Team, Mandrake, Linus Torvalds & Larry Wall
4.qq & tiyox
5.1st team (boeboe yg jomblo & alphret)
6.neoteker team (kendi, zacka, geo)
MEREK DAGANG :
Seluruh merek dagang yang digunakan dalam artikel ini merupakan hak cipta
dari pemegang merek dagang masing-masing. Linux merupakan trade mark dari
Linus Torvalds. Linux di sini adalah singkatan dari GNU/Linux.
KONTAK :
1.iko_riyadi@yahoo.com
2.www.geocities.com/iko94
3.www.neoteker.or.id
               (
geocities.com/iko94)