Hi Viktor,

Below test code when run between Harbour and xHarbour demonstrates one difference specifically on the TBrowse column alignment. I was able to compile in Harbour my whole console application successfully but this difference, personally, is a show stopper. If it's not too much to ask, kindly assess if you can easily spot and adjust this difference and be included in 1.0. But if it would take you long, just don't mind it and I'll just wait when you'll have spare time.
Thanks and best regards,
Mario

/////////////////////////////////////////////////////////////////
#include "inkey.ch"
static scope

function main
local oJB_Br,oGL_Br
local key,x,y
local aM1Struct,aD1Struct
local lSwitch := .t.
local seek_key

scope :="ST10CRISP"

setmode(25,80)

cls

aM1Struct := { ;
              { "STORE_CODE", "C", 4, 0 }, ;
              { "BOOK_TYPE"  , "C",  2, 0 }, ;
              { "TR_TYPE"   , "C",  3, 0 }, ;
              { "DOC_CODE"     , "C",  2, 0 }, ;
              { "TR_NO"  , "C",  8, 0 } }

aD1Struct := { ;
              { "STORE_CODE", "C", 4, 0 }, ;
              { "BOOK_TYPE"  , "C",  2, 0 }, ;
              { "TR_DATE"  , "D",  8, 0 }, ;
              { "DOC_CODE"   , "C",  2, 0 }, ;
              { "TR_NO"     , "C",  8, 0 }, ;
              { "ACCT_CODE"  , "C",  4, 0 } }

DbCreate( "M1", aM1Struct, "DBFNTX" )
use M1  shared new  alias "JBTRAN"
index on jbtran->store_code+jbtran->book_type+jbtran->tr_type+jbtran->doc_code+jbtran->tr_no to M1
for x = 1 to 10
  JBTRAN->(DbAppend())
  JBTRAN->STORE_CODE := "ST10"
  JBTRAN->BOOK_TYPE  := "CR"
  JBTRAN->TR_TYPE    := "ISP"
  JBTRAN->DOC_CODE   := "03"
  JBTRAN->TR_NO      :=  StrZero(x,8)
next x


DbCreate( "D1", aD1Struct, "DBFNTX" )
use D1  shared new  alias "GLTRAN"
index on gltran->store_code+gltran->doc_code+gltran->tr_no+dtos(gltran->tr_date) to D1
for x = 1 to 10
  for y = 1 to if(lSwitch,4,3)
     GLTRAN->(DbAppend())
     GLTRAN->STORE_CODE := "ST10"
     GLTRAN->BOOK_TYPE  := "CR"
     GLTRAN->TR_DATE    := date()
     GLTRAN->DOC_CODE   := "03"
     GLTRAN->TR_NO      := StrZero(x,8)
     GLTRAN->ACCT_CODE  := StrZero(y,4)
  next y
  lSwitch := !lSwitch
next x

DbSelectArea("jbtran")

DbSetRelation("GLTRAN",{|| JBTRAN->STORE_CODE+JBTRAN->DOC_CODE+JBTRAN->TR_NO})
oJB_Br:=MHSBrow("JBTRAN",{3,2,13,77},  ;
   { {"StoreCode",{||JBTRAN->STORE_CODE}},     ;
    {"DocCode",{||JBTRAN->DOC_CODE}},     ;
    {"TrNo",{||JBTRAN->TR_NO}} },      ;
    scope ,;
    {"STORE_CODE","BOOK_TYPE","TR_TYPE"} )

************ GL BROW ************
oGL_Br:=GLBrow({14,2,21,77})
oGL_Br:goTopBlock :={| | PosWhile("top",JBTRAN->STORE_CODE+JBTRAN->DOC_CODE+JBTRAN->TR_NO,,,"GLTRAN")} oGL_Br:goBottomBlock:={| | PosWhile("bottom",JBTRAN->STORE_CODE+JBTRAN->DOC_CODE+JBTRAN->TR_NO,{|x| GLTRAN->STORE_CODE+GLTRAN->DOC_CODE+GLTRAN->TR_NO==x},,"GLTRAN")} oGL_Br:skipBlock :={|n| PosWhile("skip",JBTRAN->STORE_CODE+JBTRAN->DOC_CODE+JBTRAN->TR_NO,{|x| GLTRAN->STORE_CODE+GLTRAN->DOC_CODE+GLTRAN->TR_NO==x},n,"GLTRAN")}
oGL_Br:autoLite:=.F.
oGL_Br:deHilite()

jbtran->(DbGotop())

do while .t.

  oJB_Br:ForceStable()
  oGL_Br:ForceStable()

  key:=inkey(0)

  do case

    case navigate(oJB_Br,key)

       oGL_Br:ForceStable()
       oGL_Br:goTop()

       case upper(chr(key)) == "S"

         seek_key := scope+"9999999999" //space(10)
         JBTRAN->(DbSeek(seek_key,.t.))

          if JBTRAN->(eof())
             JBTRAN->(DbSkip(-1))
          endif

        oJB_Br:refreshAll()
        oGL_Br:refreshAll()

     case key==K_ESC
        exit
  endcase
enddo

return nil


**************************************
* MHSBrow()
**************************************
Function MHSBrow(dbAlias,aCoord,aHdr,scope,aFldScope)
local old_cursor :=setcursor(0)
local s:=""
local oBr
LOCAL nT,nL,nB,nR,x

if aCoord==nil
  nT:=14
  nL:=2
  nB:=21
  nR:=77
else
  nT:=aCoord[1]
  nL:=aCoord[2]
  nB:=aCoord[3]
  nR:=aCoord[4]
endif


oBr:=TBrowseDB(nT,nL,nB,nR)

for x = 1 to len(aHdr)

  oBr:AddColumn(TBColumnNew(aHdr[x,1], aHdr[x,2] ))

next x

oBr:headSep:="ÄÂÄ"
oBr:colSep :=" ³ "
oBr:footSep:="ÄÁÄ"
oBr:freeze:=1

if scope <> nil

  for x = 1 to len(aFldScope)
     s+=dbAlias+"->"+aFldScope[x] + if(x < len(aFldScope),"+","")
  next x

  oBr:goTopBlock   :={| | PosWhile("top",scope,,,(dbAlias) )}
oBr:goBottomBlock:={| | PosWhile("bottom",scope,{|x| &(s) ==x},,(dbAlias) )} oBr:skipBlock :={|n| PosWhile("skip",scope,{|x| &(s) ==x},n,(dbAlias) )}
endif

return oBr

**************************************
Function GLBrow(aCoord)
local old_cursor:=setcursor(0)
local prev_color:=setcolor()
local maincolor := if(Iscolor(), 'w/b', 'w/n')
local oBr
LOCAL nT,nL,nB,nR

if aCoord==nil
  nT:=14
  nL:=2
  nB:=21
  nR:=77
else
  nT:=aCoord[1]
  nL:=aCoord[2]
  nB:=aCoord[3]
  nR:=aCoord[4]
endif


oBr:=TBrowseDB(nT,nL,nB,nR)
oBr:AddColumn(TBColumnNew("StoreCode",{||GLTRAN->STORE_CODE}))
oBr:AddColumn(TBColumnNew("DocCode",{||GLTRAN->DOC_CODE}))
oBr:AddColumn(TBColumnNew("TrNo",{||GLTRAN->TR_NO}))
oBr:AddColumn(TBColumnNew("AcctCode",{||GLTRAN->ACCT_CODE}))

oBr:headSep:="ÄÂÄ"
oBr:colSep :=" ³ "
oBr:footSep:="ÄÁÄ"
oBr:freeze:=1


return oBr

*** POSWHILE ***
Function PosWhile(how, firstkey, condition, howMany,_Alias)
local actual:=0

if _Alias==nil;_Alias:=alias();endif

do case
  case how=="top"
     (_Alias)->(DbSeek(firstkey))
  case how=="bottom"
     (_Alias)->(DbSeek( firstkey+chr(255),.T.))
     (_Alias)->(DbSkip(-1))
     if (.not. eval(condition,firstkey))
        (_Alias)->( DbGoto( (_Alias)->(lastrec()) +1) )
     endif
  case how=="skip"
     if .not. (_Alias)->(eof())
     do case
        case howmany < 0
           do while (actual > howmany) .and. (.not. (_Alias)->(bof()));
                    .and. eval(condition,firstkey)
              (_Alias)->(DbSkip(-1))
              if (.not. (_Alias)->(bof())) .and. eval(condition,firstkey)
                 actual--
              endif
           enddo
           if (.not. eval(condition,firstkey))
              (_Alias)->(DbSkip(+1))
              if (.not. eval(condition,firstkey))
                 (_Alias)->(DbGoto(lastrec()+1))
              endif
           endif

        case howmany > 0
           do while (actual < howmany) .and. (.not. (_Alias)->(eof()));
                    .and. eval(condition,firstkey)
              (_Alias)->(DbSkip(+1))
              if (.not. (_Alias)->(eof())) .and. eval(condition,firstkey)
                 actual++
              endif
           enddo
           if (.not. eval(condition,firstkey))
              (_Alias)->(DbSkip(-1))
              if (.not. eval(condition,firstkey))
                 (_Alias)->(DbGoto(lastrec()+1))
              endif
           endif
        otherwise
           (_Alias)->(DbSkip(0))
     endcase
  endif
  endcase
return actual

*** NAVIGATE ***
Function Navigate(b,k)
local n,keys_:={;
       {K_UP       , {||b:up()}}      , {K_DOWN     , {||b:down()}},;
       {K_LEFT     , {||b:left()}}    , {K_RIGHT    , {||b:right()}},;
       {K_PGUP     , {||b:pageUp()}}  , {K_PGDN     , {||b:pageDown()}},;
       {K_CTRL_PGUP, {||b:goTop()}}   , {K_CTRL_PGDN, {||b:goBottom()}},;
       {K_HOME     , {||b:home()}}    , {K_END      , {||b:end()}},;
       {K_CTRL_HOME, {||b:panHome()}} , {K_CTRL_END , {||b:panEnd()}},;
       {K_TAB      , {||b:panRight()}}, {K_SH_TAB   , {||b:panLeft()}} ;
        }

n:=ascan(keys_,{ |pair| k==pair[1] })
if n <> 0
  eval(keys_[n,2])
endif
return (n <> 0)
/////////////////////////////////////////////////////////////////////////////////////////
_______________________________________________
Harbour mailing list
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to