/********************************************************** 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