Podrška #20079
Zatvorenjvm java bytecode, jni, gluecode, swig, valgrind, hawtjni
Dodano od Ernad Husremović prije skoro 16 godina. Izmjenjeno prije skoro 16 godina.
0%
Fajlovi
| vmspec.2nded.html.tar.gz (325 KB) vmspec.2nded.html.tar.gz | Ernad Husremović, 07.04.2010 23:58 | ||
| configure.ac.diff (928 Bajta) configure.ac.diff | Ernad Husremović, 10.04.2010 13:14 | ||
| _m2.tar.gz (10,3 MB) _m2.tar.gz | Ernad Husremović, 12.04.2010 19:48 |
Povezani tiketi 1 (0 otvoreno — 1 zatvoren)
Izmjenjeno od Ernad Husremović prije skoro 16 godina
Izmjenjeno od Ernad Husremović prije skoro 16 godina
- Fajl vmspec.2nded.html.tar.gz vmspec.2nded.html.tar.gz dodano
Izmjenjeno od Ernad Husremović prije skoro 16 godina
Izmjenjeno od Ernad Husremović prije skoro 16 godina
Izmjenjeno od Ernad Husremović prije skoro 16 godina
Izmjenjeno od Ernad Husremović prije skoro 16 godina
Izmjenjeno od Ernad Husremović prije skoro 16 godina
bringout@desk-c2:~/devel/java/test$ g++ -o libnativelib.so -shared -fPIC -I. -I/usr/lib/jvm/java-6-openjdk/include/ f1.c gensrc/native/TestFunction_JNI.c
Izmjenjeno od Ernad Husremović prije skoro 16 godina
bringout@desk-c2:~/devel/java/test$ cat RunTest.java
//import testfunction.TestFunction.one_plus;
import com.sun.gluegen.runtime.*;
class TestFunction
{
public static native int one_plus(int a);
}
public class RunTest {
public static void main(String[] args) {
System.out.print(TestFunction.one_plus(1));
}
}
bringout@desk-c2:~/devel/java/test$ javac -cp gluegen-rt.jar RunTest.java
Izmjenjeno od Ernad Husremović prije skoro 16 godina
bringout@desk-c2:~/devel/java/test$ java -cp gluegen-rt.jar:. RunTest
Exception in thread "main" java.lang.UnsatisfiedLinkError: TestFunction.one_plus(I)I
at TestFunction.one_plus(Native Method)
at RunTest.main(RunTest.java:23)
Izmjenjeno od Ernad Husremović prije skoro 16 godina
gcc a ne g++ !!
bringout@desk-c2:~/devel/java/test$ gcc -o libnativelib.so -shared -fPIC -I. -I/usr/lib/jvm/java-6-openjdk/include/ f1.c gensrc/native/TestFunction_JNI.c
Izmjenjeno od Ernad Husremović prije skoro 16 godina
bringout@desk-c2:~/devel/java/test$ nm libnativelib.so
000000000000062c T Java_testfunction_TestFunction_one_1plus__I
0000000000200e40 a _DYNAMIC
0000000000200fe8 a _GLOBAL_OFFSET_TABLE_
w _Jv_RegisterClasses
0000000000200e20 d __CTOR_END__
0000000000200e18 d __CTOR_LIST__
0000000000200e30 d __DTOR_END__
0000000000200e28 d __DTOR_LIST__
0000000000000720 r __FRAME_END__
0000000000200e38 d __JCR_END__
0000000000200e38 d __JCR_LIST__
0000000000201018 A __bss_start
w __cxa_finalize@@GLIBC_2.2.5
0000000000000660 t __do_global_ctors_aux
0000000000000570 t __do_global_dtors_aux
0000000000201010 d __dso_handle
w __gmon_start__
0000000000201018 A _edata
0000000000201028 A _end
0000000000000698 T _fini
0000000000000508 T _init
0000000000000550 t call_gmon_start
0000000000201018 b completed.7342
0000000000201020 b dtor_idx.7344
00000000000005f0 t frame_dummy
000000000000061c T one_plus <<<<<<<<<<<<<<<<<<
Izmjenjeno od Ernad Husremović prije skoro 16 godina
java.lang.UnsatisfiedLinkError usually occurs when the library can't be found, native function declarations aren't what they should be, or a C compiler has mangled the exported names of functions in the DLL. With Anywhere PE Viewer, you will be able to view the DLL export table and it will help you solve issues with java.lang.UnsatisfiedLinkError.
2bringout@desk-c2:~/devel/java/test$ cat RunTest_JNI.c
#include <jni.h>
#include <stdlib.h>
#include <assert.h>
#include "f1.h"
JNIEXPORT jint JNICALL
Java_RunTest_one_1plus__I(JNIEnv *env, jclass _unused, jint a) { <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ručno ispravio ime
int _res;
_res = one_plus((int) a);
return _res;
}
bringout@desk-c2:~/devel/java/test$ gcc -o libnativelib.so -shared -fPIC -I. -I/usr/lib/jvm/java-6-openjdk/include/ f1.c RunTest_JNI.c
Izmjenjeno od Ernad Husremović prije skoro 16 godina
konačna skraćena verzija
bringout@desk-c2:~/devel/java/test$ cat RunTest.java
import com.sun.gluegen.runtime.*;
public class RunTest {
public static native int one_plus(int a);
public static void main(String[] args) {
System.loadLibrary("nativelib");
System.out.println(one_plus(1));
}
}
i to je to
bringout@desk-c2:~/devel/java/test$ java -cp gluegen-rt.jar:. RunTest
2
Izmjenjeno od Ernad Husremović prije skoro 16 godina
ovo je orginalno izgenerisano
bringout@desk-c2:~/devel/java/test$ java -cp ../gluegen/build/gluegen.jar:antlr.jar com.sun.gluegen.GlueGen -I. -Ecom.sun.gluegen.JavaEmitter -Cf1.cfg f1.h
bringout@desk-c2:~/devel/java/test$ cat f1.cfg
Package testfunction Style AllStatic JavaClass TestFunction JavaOutputDir gensrc/java NativeOutputDir gensrc/native # Include the f1.h header in the generated glue code CustomCCode #include "f1.h"
bringout@desk-c2:~/devel/java/test$ cat gensrc/native/TestFunction_JNI.c
/* !---- DO NOT EDIT: This file autogenerated by com/sun/gluegen/JavaEmitter.java on Thu Apr 08 18:57:04 CEST 2010 ----! */
#include <jni.h>
#include <stdlib.h>
#include <assert.h>
#include "f1.h"
/* Java->C glue code:
* Java package: testfunction.TestFunction
* Java method: int one_plus(int a)
* C function: int one_plus(int a);
*/
JNIEXPORT jint JNICALL
Java_testfunction_TestFunction_one_1plus__I(JNIEnv *env, jclass _unused, jint a) {
int _res;
_res = one_plus((int) a);
return _res;
}
Izmjenjeno od Ernad Husremović prije skoro 16 godina
a pošto se radi o testfunction package-u, ovo je struktura
bringout@desk-c2:~/devel/java/test/gensrc$ tree
.
|-- java
| `-- testfunction
| |-- TestFunction.class
| `-- TestFunction.java
`-- native
`-- TestFunction_JNI.c
3 directories, 3 files
Izmjenjeno od Ernad Husremović prije skoro 16 godina
- Naslov promijenjeno iz jvm java bytecode u jvm java bytecode, jni, gluecode, swig
Izmjenjeno od Ernad Husremović prije skoro 16 godina
- Naslov promijenjeno iz jvm java bytecode, jni, gluecode, swig u jvm java bytecode, jni, gluecode, swig, valgrind
Izmjenjeno od Ernad Husremović prije skoro 16 godina
- Naslov promijenjeno iz jvm java bytecode, jni, gluecode, swig, valgrind u jvm java bytecode, jni, gluecode, swig, valgrind, hawtjni
HawtJNI¶
HawtJNI is a code generator that produces the JNI code needed to implement java native methods. It is based on the jnigen code generator that is part of the SWT Tools project which is used to generate all the JNI code which powers the eclipse platform.
Features
- JNI code generated declaratively from annotations on your java code
- Maven integration:
- Generates JNI source code
- Generates an autoconf and msbuild source project to build the native library. This gets attached to the maven project as as the native source zip file.
- Builds the native source tar for the current platform
- Built native library is stored in a platform specific jar. This gets attached to the maven project as a platform specific jar file.
Introduction¶
There are many open source JNI code generators available, but if your performance sensitive, the code generator used by the eclipse SWT project is by far the best option. The biggest problem is that it was not developed to be reused by other projects. It was tightly coupled to producing the SWT jni libraries and it could only be run within the eclipse platform.
HawtJNI has taken that code generator and made it easier to use and accessible to more projects.
git://github.com/chirino/hawtjni.git
Izmjenjeno od Ernad Husremović prije skoro 16 godina
Izmjenjeno od Ernad Husremović prije skoro 16 godina
Izmjenjeno od Ernad Husremović prije skoro 16 godina
bringout@desk-c2:~/devel/java/hawtjni/hawtjni-example/src$ tree
.
|-- main
| |-- java
| | `-- test
| | |-- Example.java
| | `-- ObjectiveCExample.java
| `-- native-package
| `-- src
| |-- foo.c
| |-- foo.h
| `-- hawtjni-example.h
`-- test
`-- java
`-- test
`-- ExampleTest.java
8 directories, 6 files
Izmjenjeno od Ernad Husremović prije skoro 16 godina
bringout@desk-c2:~/devel/java/hawtjni/hawtjni-example/target$ java -cp hawtjni-example-1.1-SNAPSHOT.jar:hawtjni-example-1.1-SNAPSHOT-linux64.jar test.Example
Checking Operating System Constants:
O_RDONLY: 0
O_WRONLY: 1
O_RDWR: 2
Allocating c structures on the heap...
Dump of the first 2 structures:
hhfoo@0x41653370: { a: 0, b: 1, c: "hello", prev: @(nil)}
foo@0x4164fe40: { a: 1, b: 1, c: "hello", prev: @0x41653370}
Passing a pointer array to a c function...
Function result (expecting 55): 55
freein up allocated memory.
Izmjenjeno od Ernad Husremović prije skoro 16 godina
public static native void printf(
@JniArg String message);
public static native void printf(
@JniArg String format,
@JniArg String msg );
public static native void printf(
@JniArg String format,
@JniArg long num );
poziv:
System.out.println("printf x 2:");
printf("hello world\n");
printf("hello from %s\n", "hernad");
printf("hello from %i\n", 1);
bringout@desk-c2:~/devel/java/hawtjni/hawtjni-example/target$ java -cp hawtjni-example-1.1-SNAPSHOT.jar:hawtjni-example-1.1-SNAPSHOT-linux64.jar test.Example
Checking Operating System Constants:
O_RDONLY: 0
O_WRONLY: 1
O_RDWR: 2
Allocating c structures on the heap...
printf x 2:
hello world <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
hello from hernad
hello from 100 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Dump of the first 2 structures:
foo@0x40acb760: { a: 0, b: 1, c: "hello", prev: @(nil)}
foo@0x40acb810: { a: 1, b: 1, c: "hello", prev: @0x40acb760}
Passing a pointer array to a c function...
Function result (expecting 55): 55
freein up allocated memory.
Izmjenjeno od Ernad Husremović prije skoro 16 godina
bringout@desk-c2:~/devel/java/test$ gcc -I/usr/local/include/harbour -L/usr/local/lib/harbour -lharbour jvm_1.c jvm_2.c jvm_3.c jvm_4.c jvm_main.c
Izmjenjeno od Ernad Husremović prije skoro 16 godina
bringout@desk-c2:~/devel/java/test$ ./a.out
hello
hello 2
6
kraj
Izmjenjeno od Ernad Husremović prije skoro 16 godina
- Fajl configure.ac.diff configure.ac.diff dodano
evo sta sam dodao u config.ac da bih dodao libharbour.so
Izmjenjeno od Ernad Husremović prije skoro 16 godina
ovo vraća vrijednost sa funkcijskog stack-a
harbour/src/vm$ vi estack.c
void hb_stackPopReturn( void )
{
HB_STACK_TLS_PRELOAD
HB_TRACE(HB_TR_DEBUG, ("hb_stackPopReturn()"));
if( HB_IS_COMPLEX( &hb_stack.Return ) )
hb_itemClear( &hb_stack.Return );
if( --hb_stack.pPos <= hb_stack.pBase )
hb_errInternal( HB_EI_STACKUFLOW, NULL, NULL, NULL );
hb_itemRawMove( &hb_stack.Return, * hb_stack.pPos );
}
Izmjenjeno od Ernad Husremović prije skoro 16 godina
HB_FUNC( SETCANCEL )
{
HB_STACK_TLS_PRELOAD
hb_retl( hb_setGetCancel() );
/* SETCANCEL() accepts only logical parameters */
hb_setSetItem( HB_SET_CANCEL, hb_param( 1, HB_IT_LOGICAL ) );
}
Izmjenjeno od Ernad Husremović prije skoro 16 godina
System.out.println("pozivam MAXROW");
hb_maxrow();
System.out.println("pozivam MAXCOL");
hb_maxcol();
System.out.println("parni-1");
System.out.println(hb_parni(-1)); ==============> vraća 150, rezultat maxcol()
System.out.println("parni-1");
System.out.println(hb_parni(-1)); ==============> opet vraća 150, rezultat maxcol()
Izmjenjeno od Ernad Husremović prije skoro 16 godina
itemapi je za nas najbitniji src/vm/itemapi.c
Izmjenjeno od Ernad Husremović prije skoro 16 godina
hb_itemClone
/* Internal API, not standard Clipper */
/* clone the given item */
PHB_ITEM hb_itemClone( PHB_ITEM pItem )
{
HB_TRACE(HB_TR_DEBUG, ("hb_itemClone(%p)", pItem));
if( HB_IS_ARRAY( pItem ) )
return hb_arrayClone( pItem );
else if( HB_IS_HASH( pItem ) )
return hb_hashClone( pItem );
else
return hb_itemNew( pItem );
}
Izmjenjeno od Ernad Husremović prije skoro 16 godina
hb_itemTypeStr
const char * hb_itemTypeStr( PHB_ITEM pItem )
{
HB_TRACE(HB_TR_DEBUG, ("hb_itemTypeStr(%p)", pItem));
if( pItem ) switch( HB_ITEM_TYPE( pItem ) )
{
case HB_IT_ARRAY:
return hb_arrayIsObject( pItem ) ? "O" : "A";
case HB_IT_BLOCK:
return "B";
case HB_IT_DATE:
return "D";
case HB_IT_TIMESTAMP:
return "T";
case HB_IT_LOGICAL:
return "L";
case HB_IT_INTEGER:
case HB_IT_LONG:
case HB_IT_DOUBLE:
return "N";
case HB_IT_STRING:
return "C";
case HB_IT_MEMO:
return "M";
case HB_IT_HASH:
return "H";
case HB_IT_POINTER:
return "P";
case HB_IT_SYMBOL:
return "S";
}
return "U";
}
Izmjenjeno od Ernad Husremović prije skoro 16 godina
- Fajl _m2.tar.gz _m2.tar.gz dodano
maven repository koji koristi hawtjni
Izmjenjeno od Ernad Husremović prije skoro 16 godina
hb_vmEvalBlock:
HB_ITEM_PTR hb_vmEvalBlock( HB_ITEM_PTR pBlock )
{
HB_STACK_TLS_PRELOAD
HB_TRACE(HB_TR_DEBUG, ("hb_vmEvalBlock(%p)", pBlock));
hb_vmPushEvalSym();
hb_vmPush( pBlock );
hb_vmSend( 0 );
return hb_stackReturnItem();
}
Izmjenjeno od Ernad Husremović prije skoro 16 godina
hb_vmPush
void hb_vmPush( PHB_ITEM pItem )
{
HB_STACK_TLS_PRELOAD
HB_TRACE(HB_TR_DEBUG, ("hb_vmPush(%p)", pItem));
hb_itemCopy( hb_stackAllocItem(), pItem );
}
Izmjenjeno od Ernad Husremović prije skoro 16 godina
bringout@nvostro-hernad:~/devel/harbour/harbour/harbour/src/rdd$ grep "HB_ERRCODE hb_rdd" *.c
wacore.c:HB_ERRCODE hb_rddSelectFirstAvailable( void ) wacore.c:HB_ERRCODE hb_rddIterateWorkAreas( WACALLBACK pCallBack, void * cargo ) wacore.c:HB_ERRCODE hb_rddSelectWorkAreaNumber( int iArea ) wacore.c:HB_ERRCODE hb_rddDetachArea( AREAP pArea, PHB_ITEM pCargo ) wafunc.c:HB_ERRCODE hb_rddVerifyAliasName( const char * szAlias ) wafunc.c:HB_ERRCODE hb_rddGetTempAlias( char * szAliasTmp ) wafunc.c:HB_ERRCODE hb_rddGetAliasNumber( const char * szAlias, int * iArea ) wafunc.c:HB_ERRCODE hb_rddSelectWorkAreaSymbol( PHB_SYMB pSymAlias ) wafunc.c:HB_ERRCODE hb_rddSelectWorkAreaAlias( const char * szAlias ) wafunc.c:HB_ERRCODE hb_rddFieldGet( HB_ITEM_PTR pItem, PHB_SYMB pFieldSymbol ) wafunc.c:HB_ERRCODE hb_rddFieldPut( HB_ITEM_PTR pItem, PHB_SYMB pFieldSymbol ) wafunc.c:HB_ERRCODE hb_rddGetFieldValue( HB_ITEM_PTR pItem, PHB_SYMB pFieldSymbol ) wafunc.c:HB_ERRCODE hb_rddPutFieldValue( HB_ITEM_PTR pItem, PHB_SYMB pFieldSymbol ) wafunc.c:HB_ERRCODE hb_rddOpenTable( const char * szFileName, const char * szDriver, wafunc.c:HB_ERRCODE hb_rddCreateTable( const char * szFileName, const char * szDriver, wafunc.c:HB_ERRCODE hb_rddCreateTableTemp( const char * szDriver, wafunc.c:HB_ERRCODE hb_rddTransRecords( AREAP pArea, wafunc.c:static HB_ERRCODE hb_rddCloseParentRel( AREAP pArea, void * pChildArea ) wafunc.c:HB_ERRCODE hb_rddCloseAllParentRelations( AREAP pArea ) wafunc.c:static HB_ERRCODE hb_rddEvalWABlock( AREAP pArea, void * pBlock ) wafunc.c:HB_ERRCODE hb_rddEvalWA( PHB_ITEM pBlock ) workarea.c:HB_ERRCODE hb_rddInherit( RDDFUNCS * pTable, const RDDFUNCS * pSubTable, RDDFUNCS * pSuperTable, const char * szDrvName )
Izmjenjeno od Ernad Husremović prije skoro 16 godina
bringout@nvostro-hernad:~/devel/harbour/harbour/harbour/src/rdd$ grep "HB_ERRCODE hb_wa" *
workarea.c:static HB_ERRCODE hb_waBof( AREAP pArea, HB_BOOL * pBof ) workarea.c:static HB_ERRCODE hb_waEof( AREAP pArea, HB_BOOL * pEof ) workarea.c:static HB_ERRCODE hb_waFound( AREAP pArea, HB_BOOL * pFound ) workarea.c:static HB_ERRCODE hb_waSkip( AREAP pArea, HB_LONG lToSkip ) workarea.c:static HB_ERRCODE hb_waSkipFilter( AREAP pArea, HB_LONG lUpDown ) workarea.c:static HB_ERRCODE hb_waAddField( AREAP pArea, LPDBFIELDINFO pFieldInfo ) workarea.c:static HB_ERRCODE hb_waCreateFields( AREAP pArea, PHB_ITEM pStruct ) workarea.c:static HB_ERRCODE hb_waFieldCount( AREAP pArea, HB_USHORT * uiFields ) workarea.c:static HB_ERRCODE hb_waFieldInfo( AREAP pArea, HB_USHORT uiIndex, HB_USHORT uiType, PHB_ITEM pItem ) workarea.c:static HB_ERRCODE hb_waFieldName( AREAP pArea, HB_USHORT uiIndex, char * szName ) workarea.c:static HB_ERRCODE hb_waSetFieldExtent( AREAP pArea, HB_USHORT uiFieldExtent ) workarea.c:static HB_ERRCODE hb_waAlias( AREAP pArea, char * szAlias ) workarea.c:static HB_ERRCODE hb_waClose( AREAP pArea ) workarea.c:static HB_ERRCODE hb_waInfo( AREAP pArea, HB_USHORT uiIndex, PHB_ITEM pItem ) workarea.c:static HB_ERRCODE hb_waOrderInfo( AREAP pArea, HB_USHORT index, LPDBORDERINFO pInfo ) workarea.c:static HB_ERRCODE hb_waNewArea( AREAP pArea ) workarea.c:static HB_ERRCODE hb_waOpen( AREAP pArea, LPDBOPENINFO pInfo ) workarea.c:static HB_ERRCODE hb_waOrderCondition( AREAP pArea, LPDBORDERCONDINFO param ) workarea.c:static HB_ERRCODE hb_waRelease( AREAP pArea ) workarea.c:static HB_ERRCODE hb_waStructSize( AREAP pArea, HB_USHORT * uiSize ) workarea.c:static HB_ERRCODE hb_waSysName( AREAP pArea, char * pBuffer ) workarea.c:static HB_ERRCODE hb_waEval( AREAP pArea, LPDBEVALINFO pEvalInfo ) workarea.c:static HB_ERRCODE hb_waLocate( AREAP pArea, HB_BOOL fContinue ) workarea.c:static HB_ERRCODE hb_waTrans( AREAP pArea, LPDBTRANSINFO pTransInfo ) workarea.c:static HB_ERRCODE hb_waTransRec( AREAP pArea, LPDBTRANSINFO pTransInfo ) workarea.c:static HB_ERRCODE hb_waChildEnd( AREAP pArea, LPDBRELINFO pRelInfo ) workarea.c:static HB_ERRCODE hb_waChildStart( AREAP pArea, LPDBRELINFO pRelInfo ) workarea.c:static HB_ERRCODE hb_waSyncChildren( AREAP pArea ) workarea.c:static HB_ERRCODE hb_waClearRel( AREAP pArea ) workarea.c:static HB_ERRCODE hb_waRelArea( AREAP pArea, HB_USHORT uiRelNo, HB_USHORT * pRelArea ) workarea.c:static HB_ERRCODE hb_waRelEval( AREAP pArea, LPDBRELINFO pRelInfo ) workarea.c:static HB_ERRCODE hb_waRelText( AREAP pArea, HB_USHORT uiRelNo, PHB_ITEM pExpr ) workarea.c:static HB_ERRCODE hb_waSetRel( AREAP pArea, LPDBRELINFO lpdbRelInf ) workarea.c:static HB_ERRCODE hb_waClearFilter( AREAP pArea ) workarea.c:static HB_ERRCODE hb_waClearLocate( AREAP pArea ) workarea.c:static HB_ERRCODE hb_waFilterText( AREAP pArea, PHB_ITEM pFilter ) workarea.c:static HB_ERRCODE hb_waSetFilter( AREAP pArea, LPDBFILTERINFO pFilterInfo ) workarea.c:static HB_ERRCODE hb_waSetLocate( AREAP pArea, LPDBSCOPEINFO pScopeInfo ) workarea.c:static HB_ERRCODE hb_waCompile( AREAP pArea, const char * pExpr ) workarea.c:static HB_ERRCODE hb_waError( AREAP pArea, PHB_ITEM pError ) workarea.c:static HB_ERRCODE hb_waEvalBlock( AREAP pArea, PHB_ITEM pBlock ) workarea.c:static HB_ERRCODE hb_waRddInfo( LPRDDNODE pRDD, HB_USHORT uiIndex, HB_ULONG ulConnection, PHB_ITEM pItem ) workarea.c:static HB_ERRCODE hb_waUnsupported( AREAP pArea ) workarea.c:static HB_ERRCODE hb_waRddUnsupported( LPRDDNODE pRDD ) workarea.c:static HB_ERRCODE hb_waNull( AREAP pArea )
Izmjenjeno od Ernad Husremović prije skoro 16 godina
bringout@nvostro-hernad:~/devel/harbour/harbour/harbour/src/rdd$ egrep "static|ERR.*hb_dbf" dbf1.c
static HB_USHORT s_uiRddId = ( HB_USHORT ) -1;
static RDDFUNCS dbfSuper;
static HB_ERRCODE hb_dbfErrorRT( DBFAREAP pArea,
static HB_MAXINT hb_dbfGetRowVer( DBFAREAP pArea, HB_USHORT uiField, HB_MAXINT * pValue )
static HB_MAXINT hb_dbfGetNextValue( DBFAREAP pArea, HB_USHORT uiField )
static void hb_dbfUpdateStampFields( DBFAREAP pArea )
static void hb_dbfSetBlankRecord( DBFAREAP pArea, int iType )
static void hb_dbfAllocNullFlag( DBFAREAP pArea, HB_USHORT uiField, HB_BOOL fLength )
static HB_BOOL hb_dbfGetNullFlag( DBFAREAP pArea, HB_USHORT uiBit )
static void hb_dbfSetNullFlag( HB_BYTE * pRecord, HB_USHORT uiNullOffset, HB_USHORT uiBit )
static void hb_dbfClearNullFlag( HB_BYTE * pRecord, HB_USHORT uiNullOffset, HB_USHORT uiBit )
static HB_BOOL hb_dbfTriggerDo( DBFAREAP pArea, int iEvent,
static void hb_dbfTriggerSet( DBFAREAP pArea, PHB_ITEM pTrigger )
static HB_ULONG hb_dbfCalcRecCount( DBFAREAP pArea )
static HB_BOOL hb_dbfReadRecord( DBFAREAP pArea )
static HB_BOOL hb_dbfWriteRecord( DBFAREAP pArea )
static HB_BOOL hb_dbfPasswordSet( DBFAREAP pArea, PHB_ITEM pPasswd, HB_BOOL fRaw )
static void hb_dbfTableCrypt( DBFAREAP pArea, PHB_ITEM pPasswd, HB_BOOL fEncrypt )
static HB_ERRCODE hb_dbfUnlockAllRecords( DBFAREAP pArea )
static HB_ERRCODE hb_dbfUnlockRecord( DBFAREAP pArea, HB_ULONG ulRecNo )
static HB_ERRCODE hb_dbfLockRecord( DBFAREAP pArea, HB_ULONG ulRecNo, HB_USHORT * pResult,
static HB_ERRCODE hb_dbfLockFile( DBFAREAP pArea, HB_USHORT * pResult )
static HB_ERRCODE hb_dbfUnlockFile( DBFAREAP pArea )
static HB_BOOL hb_dbfIsLocked( DBFAREAP pArea, HB_ULONG ulRecNo )
static void hb_dbfGetLockArray( DBFAREAP pArea, PHB_ITEM pItem )
* so I don't make it static
HB_ERRCODE hb_dbfGetEGcode( HB_ERRCODE errCode )
HB_ERRCODE hb_dbfGetMemoData( DBFAREAP pArea, HB_USHORT uiIndex,
HB_ERRCODE hb_dbfSetMemoData( DBFAREAP pArea, HB_USHORT uiIndex,
static HB_ERRCODE hb_dbfLockData( DBFAREAP pArea,
static HB_ERRCODE hb_dbfBof( DBFAREAP pArea, HB_BOOL * pBof )
static HB_ERRCODE hb_dbfEof( DBFAREAP pArea, HB_BOOL * pEof )
static HB_ERRCODE hb_dbfFound( DBFAREAP pArea, HB_BOOL * pFound )
static HB_ERRCODE hb_dbfGoBottom( DBFAREAP pArea )
static HB_ERRCODE hb_dbfGoTo( DBFAREAP pArea, HB_ULONG ulRecNo )
static HB_ERRCODE hb_dbfGoToId( DBFAREAP pArea, PHB_ITEM pItem )
static HB_ERRCODE hb_dbfGoTop( DBFAREAP pArea )
static HB_ERRCODE hb_dbfSkip( DBFAREAP pArea, HB_LONG lToSkip )
static HB_ERRCODE hb_dbfSkipRaw( DBFAREAP pArea, HB_LONG lToSkip )
static HB_ERRCODE hb_dbfAddField( DBFAREAP pArea, LPDBFIELDINFO pFieldInfo )
static HB_ERRCODE hb_dbfAppend( DBFAREAP pArea, HB_BOOL bUnLockAll )
static HB_ERRCODE hb_dbfDeleteRec( DBFAREAP pArea )
static HB_ERRCODE hb_dbfDeleted( DBFAREAP pArea, HB_BOOL * pDeleted )
static HB_ERRCODE hb_dbfFlush( DBFAREAP pArea )
static HB_ERRCODE hb_dbfGetRec( DBFAREAP pArea, HB_BYTE ** pBuffer )
static HB_ERRCODE hb_dbfGetValue( DBFAREAP pArea, HB_USHORT uiIndex, PHB_ITEM pItem )
static HB_ERRCODE hb_dbfGetVarLen( DBFAREAP pArea, HB_USHORT uiIndex, HB_SIZE * pLength )
static HB_ERRCODE hb_dbfGoCold( DBFAREAP pArea )
static HB_ERRCODE hb_dbfGoHot( DBFAREAP pArea )
static HB_ERRCODE hb_dbfPutRec( DBFAREAP pArea, const HB_BYTE * pBuffer )
static HB_ERRCODE hb_dbfPutValue( DBFAREAP pArea, HB_USHORT uiIndex, PHB_ITEM pItem )
static HB_ERRCODE hb_dbfRecall( DBFAREAP pArea )
static HB_ERRCODE hb_dbfRecCount( DBFAREAP pArea, HB_ULONG * pRecCount )
static HB_ERRCODE hb_dbfRecNo( DBFAREAP pArea, HB_ULONG * pulRecNo )
static HB_ERRCODE hb_dbfRecId( DBFAREAP pArea, PHB_ITEM pRecNo )
static HB_ERRCODE hb_dbfSetFieldExtent( DBFAREAP pArea, HB_USHORT uiFieldExtent )
static HB_ERRCODE hb_dbfClose( DBFAREAP pArea )
static HB_ERRCODE hb_dbfCreate( DBFAREAP pArea, LPDBOPENINFO pCreateInfo )
static HB_ERRCODE hb_dbfInfo( DBFAREAP pArea, HB_USHORT uiIndex, PHB_ITEM pItem )
static HB_ERRCODE hb_dbfFieldInfo( DBFAREAP pArea, HB_USHORT uiIndex, HB_USHORT uiType, PHB_ITEM pItem )
static HB_ERRCODE hb_dbfRecInfo( DBFAREAP pArea, PHB_ITEM pRecID, HB_USHORT uiInfoType, PHB_ITEM pInfo )
static HB_ERRCODE hb_dbfNewArea( DBFAREAP pArea )
static HB_ERRCODE hb_dbfOpen( DBFAREAP pArea, LPDBOPENINFO pOpenInfo )
static HB_ERRCODE hb_dbfStructSize( DBFAREAP pArea, HB_USHORT * uiSize )
static HB_ERRCODE hb_dbfPackRec( DBFAREAP pArea, HB_ULONG ulRecNo, HB_BOOL *fWritten )
static HB_ERRCODE hb_dbfPack( DBFAREAP pArea )
static HB_ERRCODE hb_dbfSort( DBFAREAP pArea, LPDBSORTINFO pSortInfo )
static HB_ERRCODE hb_dbfTrans( DBFAREAP pArea, LPDBTRANSINFO pTransInfo )
static HB_ERRCODE hb_dbfZap( DBFAREAP pArea )
static HB_ERRCODE hb_dbfChildEnd( DBFAREAP pArea, LPDBRELINFO pRelInfo )
static HB_ERRCODE hb_dbfChildStart( DBFAREAP pArea, LPDBRELINFO pRelInfo )
static HB_ERRCODE hb_dbfChildSync( DBFAREAP pArea, LPDBRELINFO pRelInfo )
static HB_ERRCODE hb_dbfForceRel( DBFAREAP pArea )
static HB_ERRCODE hb_dbfClearFilter( DBFAREAP pArea )
static HB_ERRCODE hb_dbfSetFilter( DBFAREAP pArea, LPDBFILTERINFO pFilterInfo )
static HB_ERRCODE hb_dbfRawLock( DBFAREAP pArea, HB_USHORT uiAction, HB_ULONG ulRecNo )
static HB_ERRCODE hb_dbfLock( DBFAREAP pArea, LPDBLOCKINFO pLockInfo )
static HB_ERRCODE hb_dbfUnLock( DBFAREAP pArea, PHB_ITEM pRecNo )
static HB_ERRCODE hb_dbfCreateMemFile( DBFAREAP pArea, LPDBOPENINFO pCreateInfo )
static HB_ERRCODE hb_dbfGetValueFile( DBFAREAP pArea, HB_USHORT uiIndex, const char * szFile, HB_USHORT uiMode )
static HB_ERRCODE hb_dbfOpenMemFile( DBFAREAP pArea, LPDBOPENINFO pOpenInfo )
static HB_ERRCODE hb_dbfPutValueFile( DBFAREAP pArea, HB_USHORT uiIndex, const char * szFile, HB_USHORT uiMode )
static HB_ERRCODE hb_dbfReadDBHeader( DBFAREAP pArea )
static HB_ERRCODE hb_dbfWriteDBHeader( DBFAREAP pArea )
static HB_ERRCODE hb_dbfDrop( LPRDDNODE pRDD, PHB_ITEM pItemTable, PHB_ITEM pItemIndex, HB_ULONG ulConnect )
static HB_ERRCODE hb_dbfExists( LPRDDNODE pRDD, PHB_ITEM pItemTable, PHB_ITEM pItemIndex, HB_ULONG ulConnect )
static HB_ERRCODE hb_dbfRename( LPRDDNODE pRDD, PHB_ITEM pItemTable, PHB_ITEM pItemIndex, PHB_ITEM pItemNew, HB_ULONG ulConnect )
static void hb_dbfInitTSD( void * Cargo )
static void hb_dbfDestroyTSD( void * Cargo )
static HB_ERRCODE hb_dbfInit( LPRDDNODE pRDD )
static HB_ERRCODE hb_dbfExit( LPRDDNODE pRDD )
static HB_ERRCODE hb_dbfRddInfo( LPRDDNODE pRDD, HB_USHORT uiIndex, HB_ULONG ulConnect, PHB_ITEM pItem )
static const RDDFUNCS dbfTable = { ( DBENTRYP_BP ) hb_dbfBof,
static void hb_dbfRddInit( void * cargo )
Izmjenjeno od Ernad Husremović prije skoro 16 godina
zapeo na pushiranje string parametara i ne mičem
Izmjenjeno od Ernad Husremović prije skoro 16 godina
- Status promijenjeno iz Novo u Zatvoreno