Further with Clipper

Table of Contents
#1: Development Cycle
#2: Variables and Statements
#3: Preprocessor
#4: Code-Block
#5: Array
#6: Programming Convention
#7: Functions and Libraries


pengunjung sejak
September 1, 2000

Web Counter is a service provided by Digits.com


Terakhir diperbaharui tgl
5 August 2005
by Hianoto Santoso

Copyright © 2002-2005
by Hianoto Santoso

Search Now:
In Association with Amazon.com

In Association with Amazon.com


Bab 1. Siklus Pengembangan


Bab ini akan membahas lebih detail mengenai siklus pengembangan yang akan kita hadapi saat menulis dan menyelesaikan aplikasi. Anda akan menemukan beberapa informasi penting, termasuk beberapa program bantu yang tersedia dalam CD buku ini.

Kompilasi
Link

  • Run-Time Error 6003
  • Menggunakan Blinker
  • Dual Mode
  • Setting Blinker
  • Link Script dalam Blinker
  • Fungsi-fungsi dalam Blinker
    Make
  • Lokasi File Berdasarkan Ekstensi
  • Aturan Ketergantungan
  • Menggunakan Macro
    Editor
    Online Help

    Kompilasi
    Untuk menjalankan suatu aplikasi yang ditulis dengan Clipper, Anda perlu melakukan proses kompilasi dan link, dimana proses kompilasi akan menerjemahkan kode sumber .PRG menjadi .OBJ dan proses link akan menggabungkan .OBJ yang kita buat dengan .LIB ataupun .OBJ lain yang dibutuhkan menjadi suatu aplikasi berbentuk .EXE.

    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.

    Go Top


    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
    Real Mode merupakan modus standar dari 8086 dan hanya mampu mengakses 1MB dari memory fisik yang ada. Sedangkan Protected Mode merupakan modus diperluas (enhanced) dari 80286 keatas, dan mampu mengakses hingga maksimum 16MB (bila 286 Protected Mode) ataupun 4GB (bila 386 Protected Mode) dari memori fisik yang ada. Dengan Protected Mode, kita dapat memperoleh kinerja yang lebih baik, karena aplikasi tidak perlu berhenti sejenak untuk memuat bagian code yang masih di disk (di-overlay).

    Go Top


    Run-Time Error 6003
    Pada saat aplikasi .EXE kita dijalankan pada komputer berkecepatan tinggi (Processor AMD, Cyrix, Intel Celeron, Pentium II keatas), kita akan menjumpai pesan kesalahan yang berbunyi "Run-time error R6003, integer divide by 0". Sebenarnya apa yang terjadi ??

    Saat startup, setiap aplikasi Clipper secara otomatis menentukan suatu nilai yang digunakan dalam timing loop. Pada mesin berkecepatan tinggi tadi, rutin tersebut akan mengembalikan nilai 0 sehingga saat inisialisasi pasti terjadi error, karena aplikasi kita membagi suatu nilai dengan 0.

    Untuk mengatasinya, Anda cukup menyertakan file __WAIT_B.obj yang juga saya sertakan pada CD buku ini. Perlu diingat, file ini harus diletakkan setelah file .OBJ utama, misalnya aplikasi kita mempunyai .OBJ utama bernama dRIP, maka perintah Link minimal adalah RTLINK FI dRIP, __WAIT_B, Menu, dst.

    Namun beberapa waktu yang lalu, Computer Associates telah menerbitkan update terbaru untuk CA Clipper Tools 3.0c yang juga telah memperbaiki kesalahan ini sehingga Anda tidak perlu menyertakan __WAIT_B.obj saat link aplikasi.

    Go Top


    Menggunakan Blinker
    Blinker dapat digunakan seperti halnya RTLink, jadi penggunaan seperti BLINKER FILE Utama, Menu,Brg LIB SIx3 itu sah-sah saja. Namun perlu diingat, Blinker mempunyai kemampuan Incremental Linking, artinya Blinker akan memberikan ruangan kosong (defaultnya 128 byte, maksimum 1024 byte) untuk setiap procedure/function yang di-link, sehingga bilamana procedure tersebut mengalami perubahan kecil maka Blinker akan menuliskan perubahan di bagian kecil .EXE sesuai dengan prosedur yang berubah saja. Hal ini akan mengakibatkan proses linking yang lebih cepat, namun mempunyai kekurangan yaitu membengkaknya file .EXE. Sebenarnya Blinker sendiri telah menunjukkan kinerja linking yang luar biasa dan menurut hemat saya, tidaklah perlu mengaktifkan kemampuan Incremental Linking. Untuk menonaktifkan ini, cukup tambahkan parameter BLINKER INCREMENTAL OFF.

    Go Top


    Dual Mode
    Blinker juga memperkenalkan konsep dual mode, yaitu aplikasi akan dijalankan secara Protected Mode bilamana pada mesin dan konfigurasi memungkinkan, bilamana tidak, maka aplikasi secara otomatis akan berjalan secara Real Mode. Namun agar bisa menggunakan modus ini, semua library yang digunakan dalam aplikasi Anda harus mendukung dual mode. Periksalah dokumentasi library yang Anda gunakan dan pastikan bahwa library tersebut mempunyai fasilitas tersebut.

    Go Top


    Setting Blinker
    Dibawah ini, ada beberapa setting Blinker yang bisa membantu meningkatkan kinerja aplikasi. Namun perlu diingat, parameter yang disertakan dalam contoh tersebut mungkin harus diatur ataupun dites dengan aplikasi yang Anda buat, mengingat perbedaan konfigurasi hardware, software, aplikasi, library tambahan, dan lain-lain.

    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.

    Go Top


    Link Script dalam Blinker
    Karena begitu banyak informasi yang harus diberikan kepada Blinker, lebih baik kita menggunakan link script, yaitu suatu text file yang berisi semua info untuk link. Selain itu, kita bisa menggunakan link script untuk membuat suatu aplikasi dengan spesifikasi khusus, misalnya RDD yang dipakai.

    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.

    # Nama: dRIP.lnk
    # Note: Link script standar untuk aplikasi dRIP

    blinker executable nodelete
    blinker incremental off
    #blinker executable compress 1
    blinker executable dual
    blinker executable clipper //F:119
    blinker environment override
    blinker environment clipper dRIP

    map s,a

    file __wait_b, errorLog, menu, help, funcs, funcsApp, funcsRpt
    file dataDict, initSys, exitSys, post, user, dRptMgr

    beginarea
      file setUpTbl, notes, info, about, utility, dispWelc
      file dBrowTxt, dEBUG, dInfo, dPay, dRegister
      file PO, trmPO, beli, payBeli, jual, payJual, prnJual, konversi
      file xferBrg, sldBrg, sldHtg, sldPtg, cr
      file rStkCard, r_brgExp, r_brgHar, r_sumInv, r_sldRek
    endarea

    lib gsdGpf2, osLib, cpmi, db-pro, dTBx, dNetLib, classy, ctp, blxClp52

    beginarea
      lib dQuery, sup3552, calc
    endarea

    @cl520mid.lnk

    Selanjutnya, kita membuat dua link script untuk masing-masing skenario aplikasi, yaitu untuk SIx dan AXS, seperti pada contoh berikut:

    # Nama: dRIPsix.lnk
    # Note: Link script dRIP untuk SIx3

    output dRIPsix.exe

    file SIxUK
    file SIxCDX

    @SIx3.lnk

    # Nama: dRIPaxs.lnk
    # Note: Link script dRIP untuk Advantage Xbase Server

    output dRIPaxs.exe

    file dbfCdxAx

    lib axsBcomm
    lib dbfAxs

    Nah saat link, kita cukup melakukan:

    blinker @dRIPsix.lnk
    blinker @dRIPaxs.lnk

    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:

    blinker executable serial AXS <InfoLain> di dRIPaxs.lnk
    blinker executable serial SIX <InfoLain> di dRIPsix.lnk

    Lalu kita buat suatu fungsi khusus untuk mendeteksi skenario RDD, seperti berikut:

    function isAXS()
    return subStr( bliSerNum(), 1, 3 ) == "AXS"

    function isSIX()
    return subStr( bliSerNum(), 1, 3 ) == "SIX"

    Sehingga dalam program, bilamana kita membutuhkan suatu penanganan khusus untuk suatu RDD, kita cukup melakukan:

    // Func: chkOptimize()
    // Note: Cek apakah ekspresi FOR bisa dioptimasi oleh RDD
    // Hasil 0 -> Tidak dapat dioptimasi
    //       1 -> Dapat dioptimasi sebagian
    //       2 -> Dapat dioptimasi seluruhnya
    function chkOptimize( cForExpr )
      local nOptimizable
      local nHandle

      if isSIX()
        nOptimizable := m6_IsOptimize( cForExpr )
      elseif isAXS()
        nHandle := aofCreateFilter( cForExpr )
        nOptimizable := aofGetOptLevel( nHandle )
        aofFreeFilter( nHandle )
      else
        nOptimizable := 0
      endif
    return nOptimizable

    Go Top


    Fungsi-fungsi dalam Blinker
    Blinker juga menyediakan beberapa fungsi yang sangat berguna, yaitu:

    Fungsi Blinker Keterangan
    bliDemDte() Mengambil nilai dari BLINKER DEMONSTRATION DATE, dalam bentuk string. Contoh penggunaan:

      cDemoLimit := bliDemDte()
      if len( cDemoLimit ) > 0
        ? "Demo akan berakhir pada " + cDemoLimit
      endif

    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
        bliDemMin( 60 )
      else
        bliDemMin( 0 )
      endif

    bliSerNum() Mengambil Nilai Serial Number yang ditempelkan pada aplikasi. Contoh sederhana:

      cInfo := bliSerNum()
      ? "Serial No:" + subStr( cInfo, 1, 6 )
      ? "Versi:" + subStr( cInfo, 7, 3 )
      ? "Nama Pembeli:" + subStr( cInfo, 10, 10 )

    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, "", "" )
        ? "Gagal menjalankan aplikasi Lotus 123"
        ? "Error: " + allTrim( str( swpErrMaj() ) ) + ;
          " " + allTrim( str( swpErrMin() ) )
      endif

    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.

    Go Top


    Make
    Untuk membangun aplikasi, ada baiknya kita menggunakan fasilitas Make, yang akan mempermudah dan mempercepat proses pemeliharaan file .OBJ dan .EXE. Program Make akan membandingkan tanggal dan jam file yang terkait dan melakukan serentetan tugas bilamana tanggal dan jam file dari file tujuan lebih tua dibanding file sumber. Tentu saja bilamana kita mempunyai suatu proyek aplikasi dengan lebih dari 50 .PRG misalnya, kita sangat diuntungkan jika menggunakan Make karena cukup melakukan kompilasi atas .PRG yang berubah saja, selanjutnya dilanjutkan dengan proses Link.

    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:

    // File: dRIP.rmk
    // Note: Build dRIPaxs and dRIPsix application

    // Define path for .PRGs, .OBJs and .EXE
    makepath[.ch] = .\prg
    makepath[.prg] = .\prg
    makepath[.obj] = .\obj
    makepath[.exe] = .\exe

    // Define inference rules
    .prg.obj:
    clipper $< /o.\obj\ /m /n /w /es2


    // Define macros
    Main = dRIP.obj errorLog.obj initSys.obj exitSys.obj
    Txn = PO.obj trmPO.obj beli.obj payBeli.obj jual.obj payJual.obj

    // Main modules
    dRIP.obj: dRIP.prg
    errorLog.obj: errorLog.prg
    initSys.obj: initSys.prg
    exitSys.obj: exitSys.prg

    // Transaction modules
    PO.obj: PO.prg
    trmPO.obj: trmPO.prg
    beli.obj: beli.prg
    payBeli.obj: payBeli.prg
    jual.obj: jual.prg
    payJual.obj: payJual.prg

    // Application
    dRIPaxs.exe: $(Main) $(Txn) dRIP.lnk dRIPaxs.lnk
      blinker file dRIP @dRIPaxs @dRIP verbose > exe\dRIPaxs.bli
      find /i "BLINKER :" exe\dRIPsix.bli

    dRIPsix.exe: $(Main) $(Txn) dRIP.lnk dRIPsix.lnk
      blinker file dRIP @dRIPsix @dRIP verbose > exe\dRIPsix.bli
      find /i "BLINKER :" exe\dRIPsix.bli

    Go Top


    Lokasi File Berdasarkan Ekstensi
    Saya selalu menggunakan struktur directory seperti berikut:

    \Projects
      - dRIP
        - Doc
        - Exe
        - Obj
        - Prg
        - Test

    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:

    makepath[.ch] = .\prg
    makepath[.prg] = .\prg
    makepath[.obj] = .\obj
    makepath[.exe] = .\exe

    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.

    Go Top


    Aturan Ketergantungan
    Aturan ketergantungan dikenal dengan istilah dependency rule, digunakan untuk menentukan aksi yang harus dilakukan bila file sumber yang lebih baru dibandingkan dengan file tujuan. Misalnya:

    PO.obj: PO.prg
    clipper PO /m /n /w /es2

    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:

    .prg.obj:
      clipper $< /o.\obj\ /m /n /w /es2

    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:

    dRIP.obj: dRIP.prg
    errorLog.obj: errorLog.prg
    initSys.obj: initSys.prg
    exitSys.obj: exitSys.prg

    Go Top


    Menggunakan Macro
    Bagaimana bila kita mempunyai begitu banyak daftar file sumber yang harus dicantumkan ?? Saya menggunakan macro, seperti berikut:

    Main = dRIP.obj errorLog.obj initSys.obj exitSys.obj
    Txn = PO.obj trmPO.obj beli.obj payBeli.obj jual.obj payJual.obj

    Lalu untuk mereferensikan macro tersebut, lihat contoh ini:

    dRIPaxs.exe: $(Main) $(Txn) dRIP.lnk dRIPaxs.lnk

    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:

    blinker file dRIP @dRIPaxs @dRIP verbose > exe\dRIPaxs.bli
    find /i "BLINKER :" exe\dRIPsix.bli

    Go Top


    Editor
    Sebagai pemrogram Clipper yang baik, kita perlu mengenal betul senjata pemrograman yang terpenting yaitu Editor, jangan sampai kita memilih editor yang kurang tepat mengingat pemrograman Clipper masih banyak menggunakan pengetikkan, bukan secara visual.

    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.

    Go Top


    Online Help
    Seperti yang Anda ketahui, CA-Clipper 5.x mempunyai on-line help dengan format Norton Guide, dan dalam instalasinya, telah disertakan program pembacanya yaitu Norton Guide Reader. Namun untuk penghematan memori dan fasilitas tambahan lain, kita perlu meninjau program lain yaitu Expert Help (lingkungan DOS) dan Windows Expert Guide (lingkungan Windows).

    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.

    Go Top