2013-01-26 15:00 UTC+0100 Viktor Szakats (harbour syenar.net)

- contrib/hbhpdf/error.prg
  + contrib/hbhpdf/errstr.prg
  * contrib/hbhpdf/hbhpdf.hbp
    ! renamed to not have the word 'error' in filename

  * src/rdd/usrrdd/rdds/arrayrdd.prg
    * patch by Quique:
      ! Fix '=' (comparative operator) in seek and scope
      ! Fix ADel()/AIns with 3 arguments
      ! Fix unlock records when change the pointer
      + Add locate
    ! my fixes: if() -> iif(), ending EOL, missing formatting,
      copyright line
This commit is contained in:
Viktor Szakats
2013-01-26 14:01:45 +00:00
parent 253b9d9116
commit c84fb7507f
4 changed files with 91 additions and 20 deletions

View File

@@ -10,6 +10,21 @@
* Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment
*/
2013-01-26 15:00 UTC+0100 Viktor Szakats (harbour syenar.net)
- contrib/hbhpdf/error.prg
+ contrib/hbhpdf/errstr.prg
* contrib/hbhpdf/hbhpdf.hbp
! renamed to not have the word 'error' in filename
* src/rdd/usrrdd/rdds/arrayrdd.prg
* patch by Quique:
! Fix '=' (comparative operator) in seek and scope
! Fix ADel()/AIns with 3 arguments
! Fix unlock records when change the pointer
+ Add locate
! my fixes: if() -> iif(), ending EOL, missing formatting,
copyright line
2013-01-24 23:13 UTC+0100 Viktor Szakats (harbour syenar.net)
+ contrib/hbhpdf/error.prg
+ contrib/hbhpdf/tests/test.prg

View File

@@ -35,7 +35,7 @@ fontkr.c
image.c
pdfa.c
error.prg
errstr.prg
misc.prg
3rd/libhpdf/libhpdf.hbc{HBMK_HAS_LIBHARU_LOCAL}

View File

@@ -7,8 +7,8 @@
* ARRAY RDD
*
* Copyright 2006 Francesco Saverio Giudice <info / at / fsgiudice / dot / com>
* Copyright 2011-2013 Quique <quique@quiquesoft.com> (Index, locate and filter Support)
* www - http://harbour-project.org
* www - http://www.xharbour.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -56,9 +56,6 @@
* This is a Array RDD, or Memory RDD.
* It works only in memory and actually supports standard dbf commands
* excepts relations
*
* Index and Set Filter Support by Quique <quique@quiquesoft.com> - 2011
*
*/
#include "rddsys.ch"
@@ -72,6 +69,8 @@
#xtranslate Throw( <oErr> ) => ( Eval( ErrorBlock(), <oErr> ), Break( <oErr> ) )
#define LEFTEQUAL( l, r ) iif( ValType( l ) $ "CM", Left( l, Len( r ) ) == r, l == r )
ANNOUNCE ARRAYRDD
#define DATABASE_FILENAME 1
@@ -101,7 +100,8 @@ ANNOUNCE ARRAYRDD
#define WADATA_WAORDINFO 13
#define WADATA_ORDRECNO 14
#define WADATA_FILTERINFO 15
#define WADATA_SIZEOF 15
#define WADATA_LOCATE 16
#define WADATA_SIZEOF 16
#define RECDATA_DELETED 1
#define RECDATA_LOCKED 2
@@ -175,14 +175,15 @@ STATIC FUNCTION AR_WADATAINIT()
0, ; /* WADATA_INDEX */
{}, ; /* WADATA_WAORDINFO */
0, ; /* WADATA_ORDRECNO */
NIL; /* WADATA_FILTERINFO */
NIL,; /* WADATA_FILTERINFO */
array( UR_SI_SIZE ); /* WADATA_LOCATE */
}
STATIC FUNCTION AR_RECDATAINIT()
RETURN { ;
.F., ; /* RECDATA_DELETED */
0; /* RECDATA_LOCKED - which work area lock? */
0; /* RECDATA_LOCKED (Number of area) */
}
STATIC FUNCTION AR_INDEXINIT()
@@ -530,6 +531,8 @@ STATIC FUNCTION AR_GOTO( nWA, nRecord )
ENDIF
AR_UNLOCK( nWA )
HB_TRACE( HB_TR_DEBUG, hb_StrFormat( "aWAData[ WADATA_BOF ] = %1$s, aWAData[ WADATA_EOF ] = %2$s, aWAData[ WADATA_RECNO ] = %3$d", ;
hb_ValToExp( aWAData[ WADATA_BOF ] ), hb_ValToExp( aWAData[ WADATA_EOF ] ), aWAData[ WADATA_RECNO ] ) )
@@ -580,6 +583,8 @@ STATIC FUNCTION AR_GOTOP( nWA )
ENDIF
ENDIF
AR_UNLOCK( nWA )
RETURN nResult
STATIC FUNCTION AR_GOBOTTOM( nWA )
@@ -621,6 +626,8 @@ STATIC FUNCTION AR_GOBOTTOM( nWA )
ENDIF
AR_UNLOCK( nWA )
RETURN nResult
STATIC FUNCTION AR_SETFILTER( nWa, aDbFilterInfo )
@@ -1063,10 +1070,15 @@ STATIC FUNCTION AR_PACK( nWA )
FOR nRec := Len( aRecInfo ) TO 1 STEP -1
IF aRecInfo[ nRec, RECDATA_DELETED ]
ADel( aRecInfo, nRec, .T. )
ADel( aRecords, nRec, .T. )
ADel( aRecInfo, nRec )
ADel( aRecords, nRec )
nDel++
ENDIF
NEXT
IF nDel > 0
ASize( aRecInfo, Len( aRecInfo ) - nDel )
ASize( aRecords, Len( aRecInfo ) )
ENDIF
AR_GOTOP( nWA )
RETURN SUCCESS
@@ -1137,7 +1149,7 @@ STATIC FUNCTION AR_SEEK( nWa, lSoftSeek, xSeek, lLast )
aWAData[ WADATA_FOUND ] := .F.
nResult := AR_GOTO( nWA, 0 )
ELSE
aWAData[ WADATA_FOUND ] := aIndexes[ nIndex, INDEX_RECORDS, aWAData[ WADATA_ORDRECNO ], INDEXKEY_KEY ] = xSeek
aWAData[ WADATA_FOUND ] := LEFTEQUAL( aIndexes[ nIndex, INDEX_RECORDS, aWAData[ WADATA_ORDRECNO ], INDEXKEY_KEY ], xSeek )
nResult := AR_GOTO( nWA, aIndexes[ nIndex, INDEX_RECORDS, aWAData[ WADATA_ORDRECNO ], INDEXKEY_RECORD ] )
ENDIF
@@ -1358,7 +1370,7 @@ STATIC FUNCTION AR_ORDINFO( nWA, nMsg, aOrderInfo )
aOrderInfo[ UR_ORI_RESULT ] := aWAData[ WADATA_ORDRECNO ]
ELSE
nPos := Seek( aWAData[ WADATA_WAORDINFO, nIndex, WAOI_SCOPE_0 ], .T., .F., aIndexes[ nIndex ] )
IF nPos > 0 .AND. ! aIndexes[ nIndex, INDEX_RECORDS, nPos, INDEXKEY_KEY ] = aWAData[ WADATA_WAORDINFO, nIndex, WAOI_SCOPE_1 ]
IF nPos > 0 .AND. ! LEFTEQUAL( aIndexes[ nIndex, INDEX_RECORDS, nPos, INDEXKEY_KEY ], aWAData[ WADATA_WAORDINFO, nIndex, WAOI_SCOPE_1 ] )
IF nPos > 1 .AND. aIndexes[ nIndex, INDEX_RECORDS, nPos - 1, INDEXKEY_KEY ] >= aWAData[ WADATA_WAORDINFO, nIndex, WAOI_SCOPE_0 ]
nPos--
ELSE
@@ -1434,6 +1446,43 @@ STATIC FUNCTION AR_ORDINFO( nWA, nMsg, aOrderInfo )
RETURN HB_SUCCESS
STATIC FUNCTION AR_CLEARLOCATE( nWA )
USRRDD_AREADATA( nWA )[ WADATA_LOCATE ] := Array( UR_SI_SIZE )
RETURN HB_SUCCESS
STATIC FUNCTION AR_SETLOCATE( nWA, aScopeInfo )
USRRDD_AREADATA( nWA )[ WADATA_LOCATE ] := aScopeInfo
RETURN HB_SUCCESS
STATIC FUNCTION AR_LOCATE( nWA, lContinue )
LOCAL aWAData := USRRDD_AREADATA( nWA )
LOCAL aScopeInfo := aWAData[ WADATA_LOCATE ]
LOCAL bFor := aScopeInfo[ UR_SI_BFOR ]
LOCAL bWhile := aScopeInfo[ UR_SI_BWHILE ]
LOCAL bLocate
IF lContinue
AR_SKIPRAW( nWA, 1 )
ENDIF
IF bWhile == nil
bLocate := {|| ! Eval( bFor ) }
IF !lContinue .AND. aScopeInfo[ UR_SI_NEXT ] == nil .AND. aScopeInfo[ UR_SI_RECORD ] == nil .AND. !aScopeInfo[ UR_SI_REST ]
AR_GOTOP( nWA )
ENDIF
ELSE
bLocate := {|| ! Eval( bFor ) .AND. Eval( bWhile ) }
ENDIF
dbEval( {|| NIL },, bLocate, aScopeInfo[ UR_SI_NEXT ], aScopeInfo[ UR_SI_RECORD ], aScopeInfo[ UR_SI_REST ] .OR. lContinue )
aWAData[ WADATA_FOUND ] := !aWAData[ WADATA_EOF ] .AND. Eval( bFor )
RETURN HB_SUCCESS
STATIC FUNCTION AR_DUMMY()
RETURN HB_SUCCESS
@@ -1487,6 +1536,9 @@ FUNCTION ARRAYRDD_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, pSu
aMyFunc[ UR_ORDLSTFOCUS ] := ( @AR_ORDLSTFOCUS() )
aMyFunc[ UR_ORDCREATE ] := ( @AR_ORDCREATE() )
aMyFunc[ UR_ORDINFO ] := ( @AR_ORDINFO() )
aMyFunc[ UR_CLEARLOCATE ] := ( @AR_CLEARLOCATE() )
aMyFunc[ UR_SETLOCATE ] := ( @AR_SETLOCATE() )
aMyFunc[ UR_LOCATE ] := ( @AR_LOCATE() )
RETURN USRRDD_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, ;
cSuperRDD, aMyFunc, pSuperRddID )
@@ -1635,6 +1687,10 @@ FUNCTION hb_FileArrayRdd( cFullName )
RETURN nReturn == HB_SUCCESS
/*
hb_SetArrayRdd( aArray ) --> NIL
This function set DBF with aArray like APPEND FROM aArray in an empty DBF
*/
FUNCTION hb_SetArrayRdd( aArray )
LOCAL aRecInfo
@@ -1722,14 +1778,14 @@ STATIC FUNCTION hb_Decode( ... )
CASE nParams > 1 /* More parameters, real CASE */
xVal := aParams[ 1 ]
ADel( aParams, 1, .T. ) /* Resize params */
hb_ADel( aParams, 1, .T. ) /* Resize params */
nParams := Len( aParams )
/* if I have a odd number of members, last is DEFAULT */
IF ( nParams % 2 ) != 0
xDefault := ATail( aParams )
/* Resize again deleting last */
ADel( aParams, nParams, .T. )
hb_ADel( aParams, nParams, .T. )
nParams := Len( aParams )
ENDIF
@@ -1794,7 +1850,7 @@ STATIC FUNCTION hb_Decode( ... )
ENDIF
/* Then add Decoding value at beginning */
AIns( aParams, 1, xVal, .T. )
hb_AIns( aParams, 1, xVal, .T. )
/* And run decode() again */
xRet := hb_ExecFromArray( @hb_Decode(), aParams )
@@ -1939,7 +1995,7 @@ STATIC FUNCTION Seek( xSeek, lSoft, lLast, aIndexInfo, nRec )
nPos := 0
EXIT
CASE 1 /* Archive with 1 record */
IF aIndex[ 1 ] == NIL .OR. iif( lSoft, iif( aIndexInfo[ INDEX_ORCR, UR_ORCR_CONDINFO, UR_ORC_DESCEND ], aIndex[ 1, INDEXKEY_KEY ] <= xSeek, aIndex[ 1, INDEXKEY_KEY ] >= xSeek ), aIndex[ 1, INDEXKEY_KEY ] == xSeek ) /* TOFIX: == comparison? */
IF aIndex[ 1 ] == NIL .OR. iif( lSoft, iif( aIndexInfo[ INDEX_ORCR, UR_ORCR_CONDINFO, UR_ORC_DESCEND ], aIndex[ 1, INDEXKEY_KEY ] <= xSeek, aIndex[ 1, INDEXKEY_KEY ] >= xSeek ), LEFTEQUAL( aIndex[ 1, INDEXKEY_KEY ], xSeek ) )
nPos := 1
ELSE
nPos := 0
@@ -1967,7 +2023,7 @@ STATIC FUNCTION Seek( xSeek, lSoft, lLast, aIndexInfo, nRec )
nIni := nPos + 1
ELSE
IF lLast
IF nPos < nEnd .AND. aIndex[ nPos + 1 ] != NIL .AND. aIndex[ nPos + 1, INDEXKEY_KEY ] == xSeek /* TOFIX: == comparison? */
IF nPos < nEnd .AND. aIndex[ nPos + 1 ] != NIL .AND. LEFTEQUAL( aIndex[ nPos + 1, INDEXKEY_KEY ], xSeek )
nIni := nPos + 1
ELSE
EXIT
@@ -1990,7 +2046,7 @@ STATIC FUNCTION Seek( xSeek, lSoft, lLast, aIndexInfo, nRec )
IF nIni <= nEnd .AND. ! Empty( aIndex ) .AND. aIndex[ nPos ] != NIL .AND. nRec != aIndex[ nPos, INDEXKEY_RECORD ]
nEnd := Len( aIndex )
FOR nPos := nIni TO nEnd
IF aIndex[ nPos ] == NIL .OR. !( xSeek == aIndex[ nPos, INDEXKEY_KEY ] ) /* TOFIX: == comparison? */
IF aIndex[ nPos ] == NIL .OR. ! LEFTEQUAL( xSeek, aIndex[ nPos, INDEXKEY_KEY ] )
nPos := 0
EXIT
ELSEIF aIndex[ nPos, INDEXKEY_RECORD ] == nRec
@@ -2002,7 +2058,7 @@ STATIC FUNCTION Seek( xSeek, lSoft, lLast, aIndexInfo, nRec )
ENDIF
ENDIF
ELSEIF ! lSoft
IF nPos > Len( aIndex ) .OR. !( aIndex[ nPos, INDEXKEY_KEY ] == xSeek ) /* TOFIX: == comparison? */
IF nPos > Len( aIndex ) .OR. ! LEFTEQUAL( aIndex[ nPos, INDEXKEY_KEY ], xSeek )
nPos := 0
ENDIF
ENDIF
@@ -2016,7 +2072,7 @@ STATIC FUNCTION SeekScope( aIndex, aOrdInfo, lBottom )
LOCAL nPos := Seek( aOrdInfo[ WAOI_SCOPE_0 ], .T., lBottom, aIndex )
IF nPos > 0 .AND. ! aIndex[ INDEX_RECORDS, nPos, INDEXKEY_KEY ] == aOrdInfo[ WAOI_SCOPE_1 ] /* TOFIX: == comparison? */
IF nPos > 0 .AND. ! LEFTEQUAL( aIndex[ INDEX_RECORDS, nPos, INDEXKEY_KEY ], aOrdInfo[ WAOI_SCOPE_1 ] )
IF nPos > 1 .AND. aIndex[ INDEX_RECORDS, nPos - 1, INDEXKEY_KEY ] >= aOrdInfo[ WAOI_SCOPE_0 ]
nPos--
ELSE