From 984784374a9df6b6b43afae01bc3623f349acb26 Mon Sep 17 00:00:00 2001 From: michael Date: Wed, 14 Jun 2000 21:09:21 +0000 Subject: [PATCH] + Initial implementation --- docs/progex/ctest.c | 15 +++++++++++++++ docs/progex/ctest2.c | 23 +++++++++++++++++++++++ docs/progex/plsubs.pp | 24 ++++++++++++++++++++++++ docs/progex/psubs.pp | 14 ++++++++++++++ docs/progex/subs.pp | 24 ++++++++++++++++++++++++ 5 files changed, 100 insertions(+) create mode 100644 docs/progex/ctest.c create mode 100644 docs/progex/ctest2.c create mode 100644 docs/progex/plsubs.pp create mode 100644 docs/progex/psubs.pp create mode 100644 docs/progex/subs.pp diff --git a/docs/progex/ctest.c b/docs/progex/ctest.c new file mode 100644 index 0000000000..97b4beb30a --- /dev/null +++ b/docs/progex/ctest.c @@ -0,0 +1,15 @@ +#include + +extern char* SubStr(const char*, int, int); + +int main() +{ + char *s; + int FromPos, ToPos; + + s = strdup("Test"); + FromPos = 2; + ToPos = 3; + printf("Result from SubStr: '%s'\n", SubStr(s, FromPos, ToPos)); + return 0; +} diff --git a/docs/progex/ctest2.c b/docs/progex/ctest2.c new file mode 100644 index 0000000000..26802fb95d --- /dev/null +++ b/docs/progex/ctest2.c @@ -0,0 +1,23 @@ +#include +#include + +int main() +{ + void *lib; + char *s; + int FromPos, ToPos; + char* (*SubStr)(const char*, int*, int*); + printf("arh %d\n",RTLD_LAZY); + lib = dlopen("./libcaseudf.so", RTLD_LAZY); + printf("Result from dlopen (library handle): 0x%08x\n", lib); + SubStr = dlsym(lib, "SUBSTR"); + printf("Address of SubStr = 0x%08x, last error code = %i\n", + SubStr, dlerror()); + + s = strdup("Test"); + FromPos = 2; + ToPos = 3; + printf("Result from SubStr: '%s'\n", (*SubStr)(s, &FromPos, &ToPos)); + dlclose(lib); + return 0; +} diff --git a/docs/progex/plsubs.pp b/docs/progex/plsubs.pp new file mode 100644 index 0000000000..ce8c6c56bb --- /dev/null +++ b/docs/progex/plsubs.pp @@ -0,0 +1,24 @@ +program testsubs; + +Type + TSubStrFunc = function (const CString: PChar; FromPos, ToPos: longint): PChar; cdecl; + +Function dlopen(name : pchar; mode : longint) : pointer; cdecl; external 'dl'; +Function dlsym(lib : pointer; name : pchar) : pointer; cdecl;external 'dl'; +Function dlclose(lib : pointer) : longint; cdecl; external 'dl'; + +var + s: PChar; + FromPos, ToPos: Integer; + lib : pointer; + SubStr : TSubStrFunc; + +begin + s := 'Test'; + FromPos := 2; + ToPos := 3; + lib:=dlopen('libsubs.so',1); + Pointer(Substr):=dlsym(lib,'SubStr'); + WriteLn(SubStr(s, FromPos, ToPos)); + dlclose(lib); +end. diff --git a/docs/progex/psubs.pp b/docs/progex/psubs.pp new file mode 100644 index 0000000000..1da7e30d80 --- /dev/null +++ b/docs/progex/psubs.pp @@ -0,0 +1,14 @@ +program testsubs; + +function SubStr(const CString: PChar; FromPos, ToPos: longint): PChar; + cdecl; external 'subs'; + +var + s: PChar; + FromPos, ToPos: Integer; +begin + s := 'Test'; + FromPos := 2; + ToPos := 3; + WriteLn(SubStr(s, FromPos, ToPos)); +end. diff --git a/docs/progex/subs.pp b/docs/progex/subs.pp new file mode 100644 index 0000000000..d787364612 --- /dev/null +++ b/docs/progex/subs.pp @@ -0,0 +1,24 @@ +{ + Example library +} +library subs; + +function SubStr(CString: PChar; FromPos, ToPos: Longint): PChar; cdecl; export; +var + Length: Integer; +begin + Length := StrLen(CString); + SubStr := CString + Length; + if (FromPos > 0) and (ToPos >= FromPos) then + begin + if Length >= FromPos then + SubStr := CString + FromPos - 1; + if Length > ToPos then + CString[ToPos] := #0; + end; +end; + +exports + SubStr; + +end.