|
Further with Clipper Table of Contents
Terakhir diperbaharui tgl
|
Make Editor Online Help
Kompilasi Banyak diantara kita yang menggunakan cara kompilasi CLIPPER <NamaPrgUtama>. Walaupun cara ini sangatlah mudah, namun mempunyai kelemahan, yaitu untuk aplikasi besar dengan banyak .PRG maka kita tidak bisa menerapkan konsep kompilasi hanya atas kode sumber yang dirubah saja. Saya menggunakan parameter kompilasi /m /n /w /es2, dan itu sangat membantu saya dalam membuat aplikasi, khususnya waktu migrasi dari Clipper Summer 87 ke Clipper 5.x. Parameter /m menyebabkan kompilasi hanya dilakukan untuk .PRG yang disebutkan dalam parameter saja, dan tidak akan mengkompilasi .PRG yang disebutkan dalam perintah DO, SET FORMAT, dan SET PROCEDURE. Parameter /n akan menon-aktifkan definisi prosedur otomatis dengan nama yang sama dengan nama .PRG, karena sangat berguna saat mendeklarasikan variabel dengan ruang lingkup satu file .PRG (baca penjelasan lebih lanjut pada Bab selanjutnya). Parameter /w akan meminta Clipper untuk menampilkan warning/peringatan saat menjumpai variabel yang tidak dideklarasikan atau tidak jelas (ambiguous). Sedangkan parameter /es2 akan memaksa kita untuk memperbaiki semua error dan warning yang dijumpai saat kompilasi, karena Clipper tidak akan membuat .OBJ walaupun hanya ada satu warning yang sederhana. Bilamana kita butuh untuk melakukan debug, bisa menggunakan parameter tambahan /b. Namun bila akan mendistribusikan aplikasi tersebut, debug jangan diaktifkan karena membuat ukuran .EXE membengkak dan jalannya program menjadi lebih lambat. Anda cukup melakukan kompilasi ulang untuk semua .PRG tanpa menggunakan parameter /b dan link ulang. Ada suatu utility bernama ClearObj yang akan membantu Anda memeriksa apakah .OBJ tersebut dicompile dengan /b atau tidak. Bilamana iya, maka file .OBJ akan dihapus sehingga dari utility Make akan melakukan kompilasi ulang secara otomatis. Selain itu, ClearObj dapat memeriksa link script termasuk yang bersarang/bertingkat (nested linkscript), misalnya CLEAROBJ @myApp, maka semua .OBJ yang digunakan dalam myApp.lnk akan diperiksa semuanya. CLEAROBJ dibuat oleh rekan saya, Bambang Pranoto dan dapat Anda ambil dari CD yang menyertai buku ini. Link Setelah .PRG dikompilasi, maka kita harus melanjutkan ke proses link untuk membuat aplikasi berbentuk .EXE yang dapat dijalankan langsung. Dalam CA-Clipper 5.2x, disediakan utiliti link bernama RTLink; sedangkan dalam CA-Clipper 5.3x, disediakan Blinker (tapi terbatas) untuk Link dengan Real Mode dan Exospace untuk Link dengan Protected Mode. Ada beberapa produk yang dapat dipakai untuk proses Link, yaitu RTLink, Exospace, Blinker, CauseWay, dan lain-lain. Namun saya sangat menganjurkan penggunaan Blinker (namun bukan yang disertakan dalam Clipper 5.3x karena itu merupakan Blinker versi 1.x yang mempunyai kemampuan terbatas jika dibandingkan Blinker versi komersial, saat buku ini dibuat adalah versi 6.0 yang mampu menangani mouse dengan baik pada lingkungan Windows 2000) dan bilamana Anda memilih menggunakan 386 Protected Mode dengan kemampuan akses memori sampai 4GB, maka saya sarankan untuk menggunakan CauseWay. Dalam buku ini saya akan membahas penggunaan Blinker, mengingat cara menggunakan RTLink dapat Anda baca pada buku manual atau NG Clipper atapun pada buku Clipper yang lain. Bila Anda belum mempunyai Blinker ataupun menggunakan Blinker versi lama, maka Anda dapat meng-install Blinker versi demo yang telah disertakan pada CD buku ini.
Real Mode vs Protected Mode
|
| Setting Blinker | Keterangan |
| beginarea endarea |
Perintah BEGINAREA menandai awal dari overlay, dan ENDAREA menandai akhir overlay. Overlay sangat berguna bilamana kita menggunakan Real Mode dan besarnya program melebihi memori yang tersedia. Dengan overlay, aplikasi .EXE akan menyimpan rutin yang tidak dipakai ke disk dan memuat rutin yang diperlukan ke ruang memori yang baru saja dibebaskan. |
| blinker cache xms 512,25% | Menentukan besarnya XMS yang digunakan untuk overlay caching, dimana aplikasi akan menggunakan maksimum 512KB XMS namun menyisakan sedikitnya 25% dari total XMS yang ada. |
| blinker cache ems 512,25% | Sama seperti diatas, hanya menggunakan EMS. |
| blinker environment clipper app | Kita dapat merubah nama variabel lingkungan DOS, yang tadinya CLIPPER menjadi apapun juga (dalam contoh ini, menjadi APP). Saran saya, gunakanlah nama aplikasi, sehingga kita dapat menentukan setting untuk masing-masing aplikasi dan tidak bentrok. |
| blinker environment override | Saat kita mendefinisikan setting CLIPPER= melalui BLINKER EXECUTABLE CLIPPER, setting ini tidak dapat ditimpa oleh variabel lingkungan DOS. Dengan perintah ini, kita meminta Blinker untuk memperbolehkan setting tadi ditimpa oleh variabel lingkungan DOS, dan kita juga disarankan untuk mengubah nama variabel Clipper menjadi yang lain, lihat keterangan sebelumnya. |
| blinker executable clipper //f:100 | Disini kita mengisikan nilai setting CLIPPER= pada aplikasi .EXE secara langsung; sehingga kita tidak perlu membuat variabel DOS CLIPPER=, sehingga mengurangi kemungkinan kesalahan karena kita lupa mengatur hal ini pada komputer pemakai. |
| blinker executable compress 1 | Dalam Blinker versi 4 keatas, terdapat fasilitas kompresi aplikasi .EXE secara langsung (mirip PkLite, LZEXE, ataupun Shrinker). Hal ini selain mengurangi kebutuhan disk dan beban jaringan (bilamana program disimpan di Server), juga mengurangi kemungkinan program kita direkayasa balik (reverse engineering - decompile), yaitu dari .EXE menjadi .PRG kembali. Setting Compress 1 ini sebaiknya dilakukan bilamana aplikasi akan didistribusikan kepada pemakai akhir. Sedangkan saat pengembangan, Blinker secara default telah menggunakan kompresi tingkat sedang (compress 5) |
| blinker executable dual atau blinker executable extended atau blinker executable real | Kita meminta Blinker untuk menghasilkan aplikasi dengan Modus Dual, bilamana kita hanya ingin Protected Mode ataupun Real Mode saja, gunakan parameter BLINKER EXECUTABLE EXTENDED ataupun BLINKER EXECUTABLE REAL. |
| blinker executable nodelete | Bilamana Blinker menjumpai kesalahan/peringatan, dia secara otomatis akan menghapus file .EXE, padahal pada kasus tertentu, peringatan wajar dijumpai. Alhasil, kita harus mengaktifkan parameter ini. |
| blinker executable serial ABDEF-v01 | Menempelkan Serial Number pada aplikasi .EXE secara langsung. Sebenarnya informasi ini tidak terbatas pada Serial Number saja, yang penting panjangnya tidak melebihi 100 karakter. Informasi ini secara otomatis diacak sehingga tidaklah mudah untuk dibaca. |
|
blinker demonstration date 2100/01/01 blinker demonstration minutes 65535 |
Untuk beberapa produk decompiler, mereka secara sengaja tidak akan melakukan rekayasa balik bilamana menjumpai setting BLINKER DEMONSTRATION, baik DATE maupun MINUTES. Untuk itu, saya menyertakan setting ini saat melakukan proses link. |
| blinker incremental off | Menonaktifkan kemampuan Incremental Linking, seperti yang telah saya jelaskan sebelumnya. |
| blinker overlay opsize 80 | Menentukan ukuran dari overlay pool, defaultnya 40KB. Bila ukuran diperkecil, akan menghemat memory; bila diperbesar akan mengurangi akses ke disk yang dilakukan oleh overlay manager untuk memuat ulang prosedur yang diletakkan pada overlay. |
| blinker overlay pageframe on | Mengaktifkan penggunaan EMS pageframe untuk overlay, dimana overlay manager diperbolehkan untuk menggunakan EMS pageframe sebagai overlay pool (maksimum 64KB). |
| blinker overlay threshold 512 | Menentukan ukuran segmen terkecil yang akan dioverlay. Jika kita sering memanggil rutin- rutin berukuran kecil, maka kita perlu mengatur ukuran ini cukup besar agar rutin-rutin tadi diletakkan di root, bukan di overlay. |
| blinker procedure depth 100 | Bila kita bekerja pada proyek aplikasi yang cukup besar dan mempunyai hirarki pemanggilan rutin-rutin yang cukup banyak, maka kita perlu mengatur setting ini. Misalkan rutin X memanggil rutin Y kemudian memanggil rutin Z, maka kedalaman maksimal adalah 3. Namun bila rutin Y kembali terlebih dahulu ke rutin X, baru memanggil rutin Z, maka kedalaman maksimal adalah 2. |
| map s,a | Setting ini akan meminta Blinker untuk menghasilkan suatu file .MAP yang berisi informasi mengenai segmen dan simbol publik yang digunakan dalam aplikasi .EXE kita. File .MAP ini sangat penting untuk melakukan pelacakan bilamana terjadi GPF - General Protection Fault saat aplikasi berjalan dalam Protected Mode. |
Sebagai contoh, kita membuat suatu aplikasi bernama dRIP, namun kita harus memelihara dua versi RDD, yaitu SIx Driver dan Advantage Xbase Server (AXS). Untuk itu, kita buat terlebih dahulu, suatu link script standard yang berisi semua setting, file .OBJ dan .LIB yang digunakan secara umum pada kedua skenario aplikasi diatas. Namun perlu diperhatikan, file .OBJ utama (dalam hal ini adalah dRIP.obj) jangan disertakan dalam file link ini.
Selanjutnya, kita membuat dua link script untuk masing-masing skenario aplikasi, yaitu untuk SIx dan AXS, seperti pada contoh berikut:
Nah saat link, kita cukup melakukan:
Bagaimana dengan penulisan program, dimana kita harus melakukan suatu aksi untuk aplikasi dengan RDD tertentu ?? Ada beberapa cara, misalnya dengan memanfaatkan Preprocessor, namun karena saat ini kita masih berada pada tahap Link, maka kita akan memanfaatkan fasilitas Blinker sendiri yaitu Serial Number, seperti pada contoh berikut:
Pada masing-masing Link Script, tambahkan instruksi untuk serial number, misalnya:
Lalu kita buat suatu fungsi khusus untuk mendeteksi skenario RDD, seperti berikut:
Sehingga dalam program, bilamana kita membutuhkan suatu penanganan khusus untuk suatu RDD, kita cukup melakukan:
| Fungsi Blinker | Keterangan |
| bliDemDte() |
Mengambil nilai dari BLINKER DEMONSTRATION DATE, dalam bentuk string. Contoh penggunaan:
cDemoLimit := bliDemDte() |
| bliDemMin( [<nLimit>] ) |
Mengambil atau mengubah nilai BLINKER DEMONSTRATION MINUTES. Bisa digunakan untuk menonaktifkan
fasilitas demonstration minutes atau bahkan untuk memperpanjang sementara waktu. Contoh penggunaan:
if lDemo |
| bliSerNum() |
Mengambil Nilai Serial Number yang ditempelkan pada aplikasi. Contoh sederhana:
cInfo := bliSerNum() Untuk contoh yang lebih baik, silakan baca pada bagian Make - Membangun Aplikasi dengan Informasi Link Otomatis. |
| swpRunCmd( <cCommand>, <nMem>, <cRunPath>, <cTempPath> ) |
Menjalankan aplikasi lain dengan membebaskan memori konvensional yang digunakan oleh aplikasi pemanggil.
Daripada menggunakan perintah RUN pada Clipper yang hanya menyisakan sedikit memori bebas, kita sebaiknya
menggunakan fungsi swpRunCmd() ini. Contoh penggunaan:
if ! swpRunCmd( "123", 0, "", "" ) Berarti kita menjalankan program 123, dengan membebaskan memori konvensional sebanyak-banyaknya (0), menggunakan direktori aktif sebagai lokasi menjalankan program sekaligus juga lokasi pembuatan file swap sementara. |
CA-Clipper 5.x telah memberikan program ini dengan nama RMAKE.EXE, OOT: ada gosip yang menjelaskan bahwa karena pembuatnya bernama Richard McConnell makanya dinamakan Richard's Make alias RMAKE. Sekilas tentang penggunaan RMAKE, lihatlah contoh berikut:
Saya meletakkan file RMK, LNK, dan BAT pada directory aplikasi (misalnya dRIP), sedangkan directory Doc, Exe, Obj, dan Prg memuat file sesuai dengan namanya. Directory Test berisi semua file data untuk percobaan selama pengembangan aplikasi.
Oleh karenanya saya perlu mengatur lokasi directory dalam proses Make, dengan menggunakan makepath, contohnya:
Jadi saat RMake mencari keberadaan suatu file, dia akan mencari pada lokasi yang ditentukan pada setting makepath, misalnya .CH dan .PRG dicari pada sub-directory prg dari directory aktif sekarang.
Maka bila PO.prg lebih baru dibandingkan dengan PO.obj, maka RMake akan menjalankan perintah clipper PO /m /n /w /es2 secara otomatis. Namun, bila kita mempunyai banyak file dengan aturan ketergantungan yang sama (hanya berbeda nama file saja), kita dapat menggunakan inference rule, misalnya:
Pada contoh ini, terlihat aturan untuk .obj yang tergantung pada .prg, bilamana .prg lebih baru, akan melakukan perintah tersebut. Ada tanda $< yang berarti penerjemahan menjadi nama lengkap yang pertama untuk daftar file sumber. Perhatikan, saya menggunakan parameter /o.\obj\ yang meminta Clipper untuk meletakkan hasil .OBJ pada sub-directory OBJ dari directory aktif saat ini.
Setelah menggunakan inference rule, kita cukup mendefinisikan sbb:
Lalu untuk mereferensikan macro tersebut, lihat contoh ini:
Perhatikan juga, saya ingin menampilkan pesan kesalahan/peringatan Blinker, untuk itu, saya menggunakan parameter verbose dan disimpan pada file exe\dRIPaxs.bli. Selanjutnya, saya memanfaatkan program FIND yang bisa Anda ambil dari DOS/Windows seperti berikut:
Hindari editor yang bersifat TSR (Terminate and Stay Resident) karena menghabiskan memori konvensional, kecuali editor tersebut mampu menempatkan dirinya pada EMS ataupun XMS. Hindari juga editor yang mempunyai kemampuan terbatas, misalnya Microsoft EDIT, Notepad, NCEDIT, dan lain-lain.
Editor yang sangat membantu saya dalam pengetikan program adalah QEdit karena sangat sederhana dan dikemas dalam satu file saja sehingga mudah dibawa kemana saja. Namun ada editor yang sangat baik dan cocok untuk pemrograman, yaitu MultiEdit; dan program tambahannya yang bernama Evolve, khusus untuk menangani pemrograman Clipper.
Expert Help mempunyai banyak kelebihan, termasuk definisi format yang baru (EH) yang mampu menangani file Help dengan skala yang lebih besar, mampu menempatkan dirinya pada EMS/XMS, mampu menggunakan mouse, datang berikut compiler, linker, dan decompiler sehingga kita dapat membuat file NG/EH sendiri.
Windows Expert Guide dibuat oleh David Pearson, didistribusikan secara cuma-cuma, datang beserta source code Delphi, dan Anda diperkenankan untuk mendistribusikan ulang sekaligus mengadakan perubahan-perubahan sepanjang masih menuruti GNU General Public License (GPL) yang dipublikasikan oleh Free Software Foundation.
EH versi Demo dan WEG dapat Anda temui pada CD buku ini juga.