
                    7.5. PACKAGE-k hasznlata        [v3.0pre2]
                   

  A 'package' elnevezs (s tlet) a PERL nyelvbl (UNIX-script) szrmazik.
  Lnyege: kijellhetk terletek (ltkrk, rvnyessgi krk, scope-ok),
  s az azon bell definlt dolgok (vltozk, cimkk, makrk, stb.) nem
  ltszanak kvlrl!  Megknnyti a kln rt programok egybeptst,
  nem fognak keveredni a vltoznevek.

  Hasznlata:
  ~~~~~~~~~~~

    .PACKAGE nv   ; a 'nv' nev ltkrt nyitja meg

    .PACKAGE OFF   ; kikapcsolja a ltkrt

    .PACKAGE       ; az utoljra hasznlt ltkrt kapcsolja vissza
                   ; megj.: ez eddig bugos volt s mindig a 'MAIN' nevt
                   ;        kapcsolta be, mostantl (v3.0pre2) j!

    .PACKAGE MASK=n ; a ltkr hatskrt lltja be, lsd ksbb.

  Plda:
  ~~~~~~
  VAR I,J:DW
  I:=17
  J:=99
  IF AX=7 THEN CIMKE  ; Na, ez vajon melyik CIMKE-re ugrik? Nan, hogy a 2.-ra
  .PACKAGE VALAMI     ; Ltkr kezdete
  VAR I:DW      ; Ez az I vltoz tk fggetlen az elztl
  CIMKE:        ; Cimkket is lehet hasznlni...
  I:=22         ; Vigyzat! Ltkrkben a VAR-nak elbb kell lenni, mint az
  J:=23         ;   els hivatkozsnak, _kivve_ ha 2 menetben fordtunk!
  .PACKAGE OFF  ; Ltkr vge.
  CIMKE:        ; Ez mintha mr lett volna!? Persze, de msik ltkrben.
  BX:=I         ; BX rtke 17 lesz. (nem 22, mert az egy msik ltkrben van)
  CX:=J         ; CX rtke 23 lesz, mivel az nincs jradefinlva a ltkrben
                ; teht az eredeti J vltozra vonatkozott a 2. rtkads is


  Definls sorrendje:
  ~~~~~~~~~~~~~~~~~~~~
  Egy menetes fordts esetn a defincnak mindenkpp elbb kell lennie
  mint a hivatkozs, klnben az elz definc rvnyes:
  Pl.:
         VAR I:DW        ; Ezt nevezzk "A" vltoznak
         .PACKAGE AKARMI
         I:=17           ; A:=17
         VAR I:DW        ; Ez legyen a "B" vltoz
         I:=22           ; B:=22

  rthet?  Szval amg nincs jradefinlva egy vltoz, addig az elz
  ltszik. Teht az I:=17 az elszr definlt I vltozra vonatkozik,
  nem pedig a package-n bellire. Erre val a .LABEL:  (csak BAPC2-ben!)
  Ha a .PACKAGE AKARMI utn odairjuk: .LABEL I  akkor mind2 a B-re vonatkozik

  2 menetes fordts esetn ez nem rvnyes, akkor a sorrend telejsen
  mindegy, csak az szmt hogy a definc melyik ltkrben van.
  Az elbbi plda 2 menetes fordtssal:

         VAR I:DW        ; Ezt nevezzk "A" vltoznak
         .PACKAGE AKARMI
         I:=17           ; B:=17                       <-= !!!
         VAR I:DW        ; Ez legyen a "B" vltoz
         I:=22           ; B:=22


  Kompatibilits:
  ~~~~~~~~~~~~~~~
  - A v2.x verzikban a ".PACKAGE" hibsan mkdtt (lsd fent)
  - A v2.x verzikban - 2 menetes fordts hinyban - a .LABEL utasts
    hasznlatval lehetett megoldani a sorrendfggetlen defincit.
    Ez tbbet nem mkdik! Ehelyett hasznld a 2 menetes fordtst.
    A .LABEL utastsra a BAPC3 fordt hibazenetet ad.


  A ltkr hatskre, MASZKja:     [v3.0pre2+]
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  A ltkr CSAK a BAPC-szintaxissal definlt dolgokra vonatkozik,
  teht ezekre pl. nem:
    nv DB ...           (TASM-szintaxis vltoz definci)
    VAR: nv DB ...      (TASM vltoz definci a VAR indirect-ben)
    nv MACRO ...        (TASM makr)

  A ltkr maszkja azt adja meg (bitenknt) hogy mire NE vonatkozzon
  a ltkr, azaz mi legyen globlis a krn bell:
  Alaprtk 0, teht mindenre vonatkozik.
      1  -  LABEL  cimkk,   pl. VALAMI:
      2  -  PROC   rutinok,  pl. VALAMI::
      4  -  DATA   vltozk, pl. VAR VALAMI:DD vagy CONST VALAMI:IW
      8  -  MACRO  makrk,   pl. #VALAMI(AX):SI=!XYZ
     16  -  EQU    konstansok, pl. VALAMI EQU 5, vagy VALAMI=17+3
  A megfelel rtkek sszeadsval kapjuk a maszkot, ezt kell a
  .PACKAGE MASK=szm  paranccsal megadni.

  A leggyakoribb felhasznlsa ennek, mikor egy msik programrszt
  importlunk a programunkba, s azt szeretnnk hogy a rutinok
  nevein kvl semmi se legyen lthat belle, azaz ne legyen
  kevereds a cimkk, makrk neveivel:

     ....                  ; a mi programunk
     .PACKAGE VALAMI       ; a 'VALAMI' nev ltkr kezdete
     .PACKAGE MASK=2       ; csak a rutinok neve legyen globlis
     INCLUDE VALAMI.INC    ; az importlt, kls programrsz
     .PACKAGE OFF          ; ltkr vge
     ....



