
===========
 BAPC1M29:    1998/04/14.          v2.44    * 5letek by Pila * THENCMD->DO *
===========
1. 3-tag felttelek:                     [BETATESZT!!!!!!!]
   pl.:  IF 5<AX<10 THEN...
   ltalnosan:
     IF a <mv1> b <mv2> c THEN...
   lefordtva:
     IF b <mv1> a AND b <mv2> c THEN...
   Teht 'b' nem lehet konstans, a CMP utasts miatt.
   MEGJ.: tesztelni sokat, gondok lehetnek mert nagy kavars kellett
          az IF2B.INC-be hogy mkdjn.

2. a 'THENCMD' helyett hasznlhat a 'DO' is.
   pl.: IF AX>5 DO AX:=5
   FAQ:  (by Pila)
    - Mirt jobb ez?  - Sokkal rvidebb! :)
    - Mirt rvidebb, mint a THEN? - Mert erre gyakrabban van szksg.


===========
 BAPC1M29:    1998/04/12-13.       v2.43    * 5letek by Pila * FUNCTIONS *
===========
1. FLAGcc felttel tdolgozva
     mostmr nem fogja az "IF FLAG_OPENED THEN XYZ"-t "J_OPENED XYZ"-nek
     fordtani.
   Problma: IF FLAGS THEN... ugyanis JS-t fordit, ami oke is, de a
   FLAGS sz lehet cimke is, van rtelme...

   s ami j: Jcc felttel!!!!     ( "Jcc" = "FLAG cc" )
   Teht pl:
     IF JC THENCMD WRITELN' CF=1 '

2. ERROR s WARNING szmlls. (A vgn kirja, hny volt)
2.a. A BAPC_ASM.EXE visszatrsi rtke:
      00 - sikeres
      01 - csak warning volt
      02 - error (is) volt
    ez alapjn (nemtudomhogy) lehet BATCH filet irni ami
    key-re varakozik hiba eseten... es csak akkor hivja a TASM-ot
    ha nem volt hiba a BAPC-nal...
    (valami IF ERRORLEVEL=... kell, nem? Sose prgztam BATCHban...)
2.b. javtva:  INCLUDEDB s INCLUDE esetn ha nem tudta megnyitni
     akkor se volt ++ERROR_DB, gy nem is jelezte a vgn.
     ("Cannot open file:"-t rt ki, ami nem "ERROR:"-al kezddtt...)

3. LDDI utasts:    (LoaD Dword Integer)
      LDDI r/m16:r/m16,imm32
   pl: LDDI DX:AX,12345678h     ->  DX:=1234h  AX:=5678h

4. C-style kommentek:      ... /* comment */ ...
   ennek sokkal nagyobb a prioritasa, mint a ;-nek, ezrt pl:
     /* ; */ megjegyzes
   sornl a "megjegyzes" forditodni fog, mert a ;-t kommentnek vettuk... :)
   Szoval eloszor ertekeli ki a /* */-t, es utana a ;-ket, majd a maradekot.

5. A programban is lehet lltani a LIBDIR vltozt:
     .LIBDIR=libpath1,libpath2,...
   - A libpath vgn ktelez a \ jel!!
   - A libpath-okat itt nem pontosvessz, hanem sima vessz vlasztja el,
     mivel a ";" a megjegyzs jele! (a CONFIG-fileban viszont ; kell!)
   - A .LIBDIR= teljesen fellrja az elz .LIBDIR (teht a configfileban
     levt is) rtkt!
   Megj.:
     pl.:
        .LIBDIR=C:\BAPC\GYS_LIB\
        USES XYZ
        .LIBDIR=H:\NEW\BAPC\NEWLIBS\
        USES EFG
     ez igy hulyeseg, mivel az USES-eket csak a fordts vgn fogja
     kirtkelni, a .LIBDIR= -t pedig azonnal. teht mindkt
     USES-nl a H:\NEW\BAPC\NEWLIBS\-ben fogja keresni!
     Megolds: mindkt PATH-ot megadjuk egy .LIBDIR=-nek, vagy pedig
     USES helyett INCLUDEPROC-ot kell hasznlni (lsd. DOC.)

6. fggvnyhvs []-en bellrl.        [BETATESZT!!!!!!!]
   pl:
     AL:=[ES:++BX]
     DX:=FS:[BX(++LODSB)]
     DX:=FS:[++BX:=LODSB]
     ...
   Lnyege: ha [y:x] vagy [x] formtumot tall, akkor x-re
   meghvja a FUNCTION_CALL rutint, ami a fv. kirtkel.
   Mg nem tkletes, tesztelni kell sokat!
   pl ezt nem szerette:  DX:=FS:[++BX:=ES:LODSB]
6.a. taln szksg lenne a szegmens kirtkelsre is, nem?
     pl: AL:=[ES:=MEMSG:DI:=CIM1]
   DE EZT MG NEM TUDJA!!

7. POP mint fggvny.
   pl:  VAR XXX=POP AX
        CX:=POP DX
   csak 1 paramteres POP-al mkdik. (teht "POP", "POP AX,BX" stb. nem!)

7.a.  paramter nkli POP, de csak VAR-nl hasznlhat!
   pl.:  VAR ABC:DW=POP  ->  VAR ABC:DW//POP ABC
   pl:  VAR A,B,C:DW=POP ->  VAR A,B,C:DW // POP A//POP B//POP C

8. Utlagos ++/-- fggvnyek:
   pl:  AX:=BX++      ->  AX:=BX // ++BX
        AL:=[ES:DI++] ->  AL:=[ES:DI] // ++DI
   (j bels vltoz: INSTRBUFFER:STR, X_COMP_LINE() vgn rdik ki a
    tartalma, bele pedig a FUNCTON_CALL() pakolja a dolgokat.)

*: megjegyzs: most 14208 sor a fordt .ASM-ben,  .BP2-ben pedig 10417 sor
               az .ASM 240kB (.NOMEGJ s .BAPLINE OFF), .BAPLINE ON-al 506kB!

===========
 BAPC1M28:    1998/01/17.       v2.42    * PMODE/W *
===========
1. PMODE/W support
   - Bekapcs: .PMW a forrs elejn, vagy /PMW kapcsol a fordtnak
   - TASM-hoz generl PMODE/W-hez szksges fejlcet
   - WRITE[LN], REP*n  32 bitesen lesz fordtva
   - a PROC nev indirectet a kdszegmensge fordtja, a tbbit a DATA-ba!


===========
 BAPC1M28:    1997/12/24.       v2.41    * X_FELTETELES *
===========
1. Fordtskor kirtkel IF!!!
   Egyelre NAGYON alfatesztes:
     Ha felttelnl ismert eredmny felttelt rsz be, akkor
     azt fordtskor kirtkeli.
     s a plne az egszben az hogy keverhet a normlis felttelekkel:
     Pl.:
        OVERFLOW_FIGYELES EQU 1 ; vagy EQU 0 is lehet
        IF AX=5 OR (OVERFLOW_FIGYELES AND DX<>0) THEN ^ERROR
     s az OVERFLOW_FIGYELES rtktl fggen fog vagy
        IF AX=5 OR DX<>0 THEN ^ERROR
     vagy
        IF AX=5 ^ERROR
     fordtdni.
   Na, egyelre az EQU-kat mg nem rtkeli ki, de a .T. s .F. -et elfogadja.
   Pl. lehet szivatni:
     IF ((.T. OR .F.) AND (.T. AND .F.)) OR .T. THEN ^CIMKE
   HIBK:
     1. generl jpr felesleges cimkt
     2. az AND-OR prioritssal gondok vannak mg
         IF (.T. OR .F.) AND (.T. AND .F.) OR .T. THEN ^CIMKE
        ez TRUE kne legyen, de az els AND-nl kilp mivel ".F. AND valami"-t
        kap s az elvileg biztos .F.-et jelentene  ...ha nem lenne
        utna "OR valami2" is! Zrjelezssel kivdhet.
     3. A kirtkelhet felttelnek elbb kell lennie mint a fordtandnak
        klnben generl pr felesleges utastst (pl. "JNZ CIMKE//CIMKE:")
        Ez a hiba nem javthat! Elre vgig kne nzni az sszes felttelt
        de ez a makrk miatt nem lehetsges. :(
   Az eredmny kezelse:
     - "IF felt THENCMD mag" tpus BIZTOS .F. esetn nem fordtja a mag-ot
     - "IF felt THEN cimke" tpus BIZTOS .T. esetn fordt egy "JMP cimke"-t
     Kell a tbbi tpus+eset kezelse is. Pl. THEN/ELSE/ENDIF
   Nzegettem a pascal-t is:
     - ha az egsz kirtkelhet fordtskor (pl REPEAT..UNTIL FALSE) akkor
       kirtkeli, klnben bnzik:
          MOV AL,0
          OR AL,AL
          JNZ cimke

2. BUG az X_FELTETELES-ben:
     IF (a) AND (b) OR c THEN...
                    ^^- ezt nem veszi figyelembe mivel azt hiszi hogy
                        a 2. zrjelesben (b) van.
     -> nem elg 3 zrjelet keresni, hanem 4-et kell!
     st, szerintem egy menetben vgig kne scannelni az egsz sort
     s keresni OR-t, AND-ot, zrjeleket, IPOS-osan.
     Az AND s OR keresst csak zrjelszint=0 esetn!

2.A. TELJESEN JRART AND,OR,zrjel keres rutin!!!!
     => 2. BUG megoldva!!!
; *** Zrjel, AND s OR keres  v2.0  (C) 1997.12.25. by GyikSoft ***
; Keresi  - az els 4 nulls szinten lev zrjel pozicijt -> ^ZJ1..^ZJ4
;         - az els nulls szinten lev OR s AND pozicijt -> ^P1 s ^P2
;         - kijelzi ha hinyzik "(" vagy ")"
;
     Megj: vglis elg az els 2 zrjelet keresni, a 3. csak a zjszint=0
           miatt kellett rgen, de ez most alapbl biztostva van!

PROBLMK:
~~~~~~~~~~
 Amikor holtciklusban van (IF .F. THEN .... ENDIF) akkor honnt
 tudja hogy mikor van vge a holtciklusnak?
 1. ne legyen holtciklus, csak ugorja t egy JMP-al :(
 2. kln rutin ami csak az IF-eket figyeli
 3. telerakom IF-el a fordtst hogy fordtsa le a holtciklust
    is de ne generljon outputot. Nehz nagyon, makrk stb...
 4. j utasts: .IF ... .ELSE ... .ENDIF
    - ez nem engedn csak a biztos esemnyeket felttelnek
      vagy CMP-generls helyett IFDEF elven mkdne
    - csak a sor elejn lehetne -> COMPILE_FILE kirtkeln


4. BUGFIX:  WITH ^VALAMI

5. /MASM javtsa, mostmr mkdik a BPT[xS:y] is!!!
   (Ha nem SPACE van a "[" eltt akkor beszr egyet!)

6. PMODE esetn fordt egy SMALL direktvt is, mivel a TASM 3.2+
   nem volt hajland lefordtani a MOV DX,OFFSET 32bitescimke
   utastst...

GONDOLKOZNI RAJTA:
- ELSE ELOTTI JUMP
- TOBBSOROS MAKROK

===========
 BAPC1M27:    1997/12/22.       v2.33    *  *
===========
1. Megcsinltam vgre a "->VAR"-t!
   pl.:   DX->VAR PUFFER:DB*128
  { Kne mg:  DX->VAR PUFFER:DB*CX:=8000 }
   Sajnos nagyon bele kellett avatkozni a //-keresbe :(

2. Megreformltam a CONST-ot!!!  (a VAR-t copy+paste s kicsit trtam...)
   lehetnek mg gondok vele, sok megoldatlan krds van
   Mostmr teljesen szabadon varil6:
   pl.: CONST MUT1,MUT2->PUFFER     ; 2 db DW mutatt csinl
        CONST SZOVEG DB*3 'Hello'   ; 3x lesz a Hello
        CONST XYZ:DW=123
        ...

3. Rgi vgyunk teljeslt:
     VAR CS:VALAMI=AX
     lefordtva:
        MOV CS:VALAMI,AX
        {VAR VALAMI DW ?}

4. BUGFIX: 3. miatt: nem nzte meg hogy eltte van-e chr vagy nincs:
     VAR ^LINES:DB=48
             ^^^- azt hitte hogy segreg!!!


===========
 BAPC1M26:    1997/12/11.       BETA    *  *
===========
                  *** 5letek by PilaSoft ***

1. STOSxy'A',..
   Teht nem kell SPACE az idzjel (') eltt!

2. @1:, @-2:, hasonlkra ERROR-t ad
   @A1:, @B-3:, hasonlkra WARNING-ot ad
   Ha cimkeknt hivatkozunk kukacosra (pl "JMP @VALAMI") akkor azt nem
   prblja BPC_LOCxxx-re cserlni (pl MASM-rl trt .ASM-ek tele vannak
   kukaccal)

3. "egszsoros" indirect-vltsnl a ''-szmll nveldik, teht:
pl.:   NOP//LOOP //CONST: SZOVEG DB 'Hello',0//SZOVEGSIZE=$-OFS //LOOP 
       ^<<         ^<<<<
   Remlem, ebbl nem lesznek kompatibilitsi gondok, igaz erre mr elbb
   kellett volna gondolni...


