Parcourir la source

* fixed sample io1.pas

git-svn-id: trunk@11632 -
ivost il y a 17 ans
Parent
commit
e15b2039cb

+ 14 - 0
packages/libxml/examples/exutils.pas

@@ -5,8 +5,11 @@ interface
 {$mode objfpc}
 
 uses
+  ctypes,
+  libxml2,
   SysUtils;
 
+procedure docdump(doc: xmlDocPtr);
 procedure printf(const msg: string; const args: array of const);
 procedure printf(const msg: string);
 procedure printfn(const msg: string; const args: array of const);
@@ -14,6 +17,17 @@ procedure printfn(const msg: string);
 
 implementation
 
+procedure docdump(doc: xmlDocPtr);
+var
+  mem: xmlCharPtr;
+  size: cint;
+begin
+  mem := nil;
+  xmlDocDumpMemory(doc, mem, size);
+  writeln(mem);
+  xmlFree(mem);
+end;
+
 procedure printf(const msg: string; const args: array of const);
 begin
   write(Format(msg, args));

+ 34 - 28
packages/libxml/examples/io1.pas

@@ -18,7 +18,8 @@ program io1;
 uses
   ctypes,
   libxml2,
-  exutils;
+  exutils,
+  SysUtils;
 
 const
   include: pchar =
@@ -28,6 +29,11 @@ const
       '<xi:include href="sql:select_name_from_people"/>'#10+
     '</document>'#10;
 
+var
+  res: pchar = '<list><people>a</people><people>b</people></list>';
+  cur: pchar = nil;
+  rlen: cint = 0;
+
 
 (**
  * sqlMatch:
@@ -39,7 +45,7 @@ const
  *)
 function sqlMatch(URI: pchar): cint; cdecl;
 begin
-  if assigned(URI) {and (strncmp(URI, 'sql:', 4) = 0)} then
+  if assigned(URI) and (strlcomp(URI, 'sql:', 4) = 0) then
     result := 1
   else
     result := 0;
@@ -56,18 +62,14 @@ end;
  *)
 function sqlOpen(URI: pchar): pointer; cdecl;
 begin
-  if not assigned(URI) or (strncmp(URI, 'sql:', 4) <> 0) then
+  if not assigned(URI) or (strlcomp(URI, 'sql:', 4) <> 0) then
     exit(nil);
 
-  
+  cur := res;
+  rlen := strlen(res);
+
+  result := pointer(cur);
 end;
-{
-    if ((URI == NULL) || (strncmp(URI, "sql:", 4)))
-        return(NULL);
-    cur = result;
-    rlen = strlen(result);
-    return((void *) cur);
-}
 
 (**
  * sqlClose:
@@ -79,12 +81,14 @@ end;
  *)
 function sqlClose(context: pointer): cint; cdecl;
 begin
-end; {
-    if (context == NULL) return(-1);
-    cur = NULL;
-    rlen = 0;
-    return(0);
-}
+  if not assigned(context) then
+    exit(-1);
+
+  cur := nil;
+  rlen := 0;
+
+  result := 0;
+end;
 
 (**
  * sqlRead:
@@ -97,20 +101,21 @@ end; {
  * Returns the number of bytes read or -1 in case of error
  *)
 function sqlRead(context: pointer; buffer: pchar; len: cint): cint; cdecl;
+var
+  ptr: pchar;
 begin
-end;
-{
-   const char *ptr = (const char *) context;
+  if not assigned(context) or not assigned(buffer) or (len < 0) then
+    exit(-1);
 
-   if ((context == NULL) || (buffer == NULL) || (len < 0))
-       return(-1);
+  ptr := context;
+  if len > rlen then
+    len := rlen;
 
-   if (len > rlen) len = rlen;
-   memcpy(buffer, ptr, len);
-   rlen -= len;
-   return(len);
-}
+  move(ptr^, buffer^, len);
+  rlen := rlen - len;
 
+  result := len;
+end;
 
 var
   doc: xmlDocPtr;
@@ -160,7 +165,8 @@ begin
   (*
    * Free the document
    *)
-  xmlFreeDoc(doc);
+  //xmlDumpDoc(doc);
+  docdump(doc);
 
   (*
    * Cleanup function for the XML library.

+ 2 - 2
packages/libxml/src/tree.inc

@@ -769,8 +769,8 @@ function xmlReconciliateNs(doc: xmlDocPtr; tree: xmlNodePtr): cint; XMLCALL; XML
  * Saving.
  *)
 procedure xmlDocDumpFormatMemory(cur: xmlDocPtr; mem: xmlCharPtrPtr; size: pcint; format: cint); XMLCALL; XMLPUBFUN;
-procedure xmlDocDumpMemory(cur: xmlDocPtr; mem: xmlCharPtrPtr; size: pcint); XMLCALL; XMLPUBFUN;
-procedure xmlDocDumpMemoryEnc(out_doc: xmlDocPtr; doc_txt_ptr: xmlCharPtrPtr; doc_txt_len: pcint; txt_encoding: pchar); XMLCALL; XMLPUBFUN;
+procedure xmlDocDumpMemory(cur: xmlDocPtr; var mem: xmlCharPtr; var size: cint); XMLCALL; XMLPUBFUN;
+procedure xmlDocDumpMemoryEnc(out_doc: xmlDocPtr; var doc_txt_ptr: xmlCharPtr; var doc_txt_len: cint; txt_encoding: pchar); XMLCALL; XMLPUBFUN;
 procedure xmlDocDumpFormatMemoryEnc(out_doc: xmlDocPtr; doc_txt_ptr: xmlCharPtrPtr; doc_txt_len: pcint; txt_encoding: pchar; format: cint); XMLCALL; XMLPUBFUN;
 function xmlDocFormatDump(f: PFILE; cur: xmlDocPtr; format: cint): cint; XMLCALL; XMLPUBFUN;
 function xmlDocDump(f: PFILE; cur: xmlDocPtr): cint; XMLCALL; XMLPUBFUN;