summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <andreas@andreas-laptop>2010-03-14 01:25:25 +0100
committerAndreas Rumpf <andreas@andreas-laptop>2010-03-14 01:25:25 +0100
commit7bf98411b6d4dfd203371b5d2ec0a5ef3a2305df (patch)
tree23f76f650800ca9508e17869cc83fc8061d1f310
parent3dafd6856bfd644e9cf518b36e5bfedc3220a702 (diff)
downloadNim-7bf98411b6d4dfd203371b5d2ec0a5ef3a2305df.tar.gz
version 0.8.8
-rwxr-xr-xconfig/nimdoc.cfg8
-rwxr-xr-xconfig/nimrod.cfg1
-rwxr-xr-xdoc/lib.txt6
-rwxr-xr-xdoc/manual.txt20
-rwxr-xr-xdoc/theindex.txt12609
-rwxr-xr-xexamples/parsecfgex.nim25
-rwxr-xr-xlib/impure/graphics.nim313
-rwxr-xr-xlib/oldwrappers/zip/libzip_all.c4189
-rwxr-xr-xlib/pure/htmlparser.nim4
-rwxr-xr-xlib/pure/httpclient.nim6
-rwxr-xr-xlib/pure/macros.nim3
-rwxr-xr-xlib/pure/os.nim11
-rwxr-xr-xlib/pure/parsecfg.nim6
-rwxr-xr-xlib/pure/pegs.nim2
-rwxr-xr-xlib/pure/strtabs.nim6
-rwxr-xr-xlib/pure/unidecode/unidecode.nim4
-rwxr-xr-xlib/pure/xmltree.nim34
-rwxr-xr-xlib/wrappers/gtk/libglade2.nim3
-rwxr-xr-xlib/wrappers/sdl/sdl.nim116
-rwxr-xr-xlib/wrappers/sdl/sdl_ttf.nim8
-rwxr-xr-xlib/wrappers/zip/libzip_all.c4189
-rwxr-xr-xrod/ccgexprs.nim9
-rwxr-xr-xrod/evals.nim52
-rwxr-xr-xrod/extccomp.nim6
-rwxr-xr-xrod/msgs.nim4
-rwxr-xr-xrod/nimrod.ini23
-rwxr-xr-xrod/nimrod.nim2
-rwxr-xr-xrod/nversion.nim2
-rwxr-xr-xrod/passes.nim60
-rwxr-xr-xrod/semexprs.nim9
-rwxr-xr-xrod/sigmatch.nim45
-rwxr-xr-xrod/syntaxes.nim6
-rwxr-xr-xtests/accept/compile/tconvcolors.nim5
-rwxr-xr-xtests/accept/compile/tdialogs.nim2
-rwxr-xr-xtests/accept/compile/tgtk.nim40
-rwxr-xr-xtests/accept/compile/tlexer.nim2
-rwxr-xr-xtests/accept/compile/tlibs.nim5
-rw-r--r--tests/accept/compile/tnoargopenarray.nim7
-rwxr-xr-xtests/accept/run/spec.csv1
-rw-r--r--tests/accept/run/tcgbug.nim17
-rwxr-xr-xtests/accept/run/txmlgen.nim6
-rwxr-xr-xtests/accept/run/txmltree.nim6
-rwxr-xr-xtests/reject/spec.csv4
-rwxr-xr-xtests/reject/tambsym2.nim6
-rwxr-xr-xtests/reject/tinc.nim2
-rwxr-xr-xtests/tester.nim7
-rwxr-xr-xtools/sunset.tmpl2
-rwxr-xr-xweb/download.txt4
-rwxr-xr-xweb/news.txt11
-rwxr-xr-xweb/nimrod.ini6
-rwxr-xr-xweb/question.txt12
-rwxr-xr-xweb/ticker.txt5
52 files changed, 15735 insertions, 6196 deletions
diff --git a/config/nimdoc.cfg b/config/nimdoc.cfg
index 300b5e509..46249dcd2 100755
--- a/config/nimdoc.cfg
+++ b/config/nimdoc.cfg
@@ -138,7 +138,7 @@ pre, span.tok {
   border-width: 1px 1px 1px 2px;
   color: black;
   line-spacing: 110%;
-  padding: 5px;
+  padding: 2px;
 }
 
 span.red {
@@ -264,8 +264,10 @@ table.docutils td, table.docutils th,
 table.docinfo td, table.docinfo th {padding-left: 0.5em;padding-right: 0.5em;
   vertical-align: top;}
 
-table.docutils td, table.docutils th { border-bottom:1px solid #9D9D9D; color: #4d4d4d}
-table.docutils td:hover, table.docinfo td:hover {color: #000000}
+table.docutils td, table.docutils th { border-bottom:1px solid #9D9D9D; }
+/* color: #4d4d4d} */
+
+/* table.docutils td:hover, table.docinfo td:hover {color: #000000} */
   
 
 table.docutils th.field-name, table.docinfo th.docinfo-name {
diff --git a/config/nimrod.cfg b/config/nimrod.cfg
index 2c93e167e..22dc35f5a 100755
--- a/config/nimrod.cfg
+++ b/config/nimrod.cfg
@@ -28,6 +28,7 @@ path="$lib/wrappers/zip"
 path="$lib/windows"
 path="$lib/posix"
 path="$lib/ecmas"
+path="$lib/pure/unidecode"
 
 @if release or quick:
   obj_checks:off
diff --git a/doc/lib.txt b/doc/lib.txt
index b6a75377f..a56aa5bf4 100755
--- a/doc/lib.txt
+++ b/doc/lib.txt
@@ -43,7 +43,7 @@ String handling
   string into uppercase, splitting a string into substrings, searching for
   substrings, replacing substrings.
 
-* `parseutils <parseutils.html>`
+* `parseutils <parseutils.html>`_
   This module contains helpers for parsing tokens, numbers, identifiers, etc.
 
 * `strtabs <strtabs.html>`_
@@ -119,7 +119,7 @@ Internet Protocols and Support
 * `cgi <cgi.html>`_
   This module implements helpers for CGI applictions. 
 
-* `sockets <sockets.html>`
+* `sockets <sockets.html>`_
   This module implements a simple portable type-safe sockets layer.
 
 * `browsers <browsers.html>`_
@@ -208,7 +208,7 @@ Multimedia support
 Impure libraries
 ================
 
-* `graphics <graphics>`_
+* `graphics <graphics.html>`_
   This module implements graphical output for Nimrod; the current
   implementation uses SDL but the interface is meant to support multiple
   backends some day. 
diff --git a/doc/manual.txt b/doc/manual.txt
index d2bfde138..3f2f9c404 100755
--- a/doc/manual.txt
+++ b/doc/manual.txt
@@ -441,7 +441,7 @@ Ordinal types
 - Ordinal values have a largest possible value. Trying to count further
   than the largest value gives a checked runtime or static error.
 
-Integers, bool, characters and enumeration types (and subrange of these
+Integers, bool, characters and enumeration types (and subranges of these
 types) belong to ordinal types.
 
 
@@ -451,8 +451,8 @@ These integer types are pre-defined:
 
 ``int``
   the generic signed integer type; its size is platform dependent
-  (the compiler chooses the processor's fastest integer type)
-  this type should be used in general. An integer literal that has no type
+  (the compiler chooses the processor's fastest integer type).
+  This type should be used in general. An integer literal that has no type
   suffix is of this type.
 
 intXX
@@ -502,8 +502,8 @@ The following floating point types are pre-defined:
 
 ``float``
   the generic floating point type; its size is platform dependent
-  (the compiler chooses the processor's fastest floating point type)
-  this type should be used in general
+  (the compiler chooses the processor's fastest floating point type).
+  This type should be used in general.
 
 floatXX
   an implementation may define additional floating point types of XX bits using
@@ -2193,6 +2193,8 @@ special ``:`` syntax:
 In the example the two ``writeln`` statements are bound to the ``actions``
 parameter. 
 
+**Note:** Symbol binding rules in templates might change!
+
 Symbol binding within templates happens after template instantation: 
 
 .. code-block:: nimrod
@@ -2476,7 +2478,7 @@ or ``ref T`` or ``ptr T`` this means no locations are modified. It is a static
 error to mark a proc/iterator to have no side effect if the compiler cannot
 verify this.
 
-**Possible future**: ``func`` may become a keyword and syntactic sugar for a
+**Future directions**: ``func`` may become a keyword and syntactic sugar for a
 proc with no side effects:
 
 .. code-block:: nimrod
@@ -2521,7 +2523,7 @@ information that this cannot happen to the GC. If the programmer uses the
 ``acyclic`` pragma for data types that are in reality cyclic, the GC may leak
 memory, but nothing worse happens.
 
-**Possible future**: The ``acyclic`` pragma may become a property of a
+**Future directions**: The ``acyclic`` pragma may become a property of a
 ``ref`` type:
 
 .. code-block:: nimrod
@@ -2544,8 +2546,8 @@ The `pure`:idx: pragma serves two completely different purposes:
 1) To mark a procedure that Nimrod should not generate any exit statements like
    ``return result;`` in the generated code. This is useful for procs that only
    consist of an assembler statement.
-2) To mark an object type that Nimrod should omit its type field. This is
-   necessary for compatibility with other compiled languages.
+2) To mark an object type so that its type field should be omitted. This is
+   necessary for binary compatibility with other compiled languages.
 
 
 error pragma
diff --git a/doc/theindex.txt b/doc/theindex.txt
index 06cec5d19..b734046af 100755
--- a/doc/theindex.txt
+++ b/doc/theindex.txt
@@ -1,5744 +1,6865 @@
-

-=====

-Index

-=====

-

-.. index::

-

-

-   `!`:idx:

-     * `pegs.html#115 <pegs.html#115>`_

-     * `macros.html#114 <macros.html#114>`_

-

-   `!=`:idx:

-     `system.html#353 <system.html#353>`_

-

-   `$`:idx:

-     * `system.html#428 <system.html#428>`_

-     * `system.html#429 <system.html#429>`_

-     * `system.html#430 <system.html#430>`_

-     * `system.html#431 <system.html#431>`_

-     * `system.html#432 <system.html#432>`_

-     * `system.html#433 <system.html#433>`_

-     * `system.html#434 <system.html#434>`_

-     * `system.html#435 <system.html#435>`_

-     * `times.html#109 <times.html#109>`_

-     * `times.html#110 <times.html#110>`_

-     * `pegs.html#133 <pegs.html#133>`_

-     * `macros.html#115 <macros.html#115>`_

-     * `ropes.html#119 <ropes.html#119>`_

-

-   `%`:idx:

-     * `strutils.html#109 <strutils.html#109>`_

-     * `strutils.html#110 <strutils.html#110>`_

-     * `strtabs.html#112 <strtabs.html#112>`_

-     * `ropes.html#120 <ropes.html#120>`_

-

-   `%%`:idx:

-     * `system.html#298 <system.html#298>`_

-     * `system.html#299 <system.html#299>`_

-     * `system.html#300 <system.html#300>`_

-     * `system.html#301 <system.html#301>`_

-     * `system.html#302 <system.html#302>`_

-

-   `&`:idx:

-     * `system.html#367 <system.html#367>`_

-     * `system.html#368 <system.html#368>`_

-     * `system.html#369 <system.html#369>`_

-     * `system.html#370 <system.html#370>`_

-     * `system.html#471 <system.html#471>`_

-     * `system.html#472 <system.html#472>`_

-     * `system.html#473 <system.html#473>`_

-     * `pegs.html#114 <pegs.html#114>`_

-     * `ropes.html#109 <ropes.html#109>`_

-     * `ropes.html#110 <ropes.html#110>`_

-     * `ropes.html#111 <ropes.html#111>`_

-     * `ropes.html#112 <ropes.html#112>`_

-

-   `*`:idx:

-     * `system.html#218 <system.html#218>`_

-     * `system.html#219 <system.html#219>`_

-     * `system.html#220 <system.html#220>`_

-     * `system.html#221 <system.html#221>`_

-     * `system.html#222 <system.html#222>`_

-     * `system.html#317 <system.html#317>`_

-     * `system.html#325 <system.html#325>`_

-     * `complex.html#107 <complex.html#107>`_

-     * `pegs.html#111 <pegs.html#111>`_

-

-   `*%`:idx:

-     * `system.html#288 <system.html#288>`_

-     * `system.html#289 <system.html#289>`_

-     * `system.html#290 <system.html#290>`_

-     * `system.html#291 <system.html#291>`_

-     * `system.html#292 <system.html#292>`_

-

-   `+`:idx:

-     * `system.html#193 <system.html#193>`_

-     * `system.html#194 <system.html#194>`_

-     * `system.html#195 <system.html#195>`_

-     * `system.html#196 <system.html#196>`_

-     * `system.html#197 <system.html#197>`_

-     * `system.html#208 <system.html#208>`_

-     * `system.html#209 <system.html#209>`_

-     * `system.html#210 <system.html#210>`_

-     * `system.html#211 <system.html#211>`_

-     * `system.html#212 <system.html#212>`_

-     * `system.html#313 <system.html#313>`_

-     * `system.html#315 <system.html#315>`_

-     * `system.html#326 <system.html#326>`_

-     * `complex.html#103 <complex.html#103>`_

-     * `pegs.html#113 <pegs.html#113>`_

-

-   `+%`:idx:

-     * `system.html#278 <system.html#278>`_

-     * `system.html#279 <system.html#279>`_

-     * `system.html#280 <system.html#280>`_

-     * `system.html#281 <system.html#281>`_

-     * `system.html#282 <system.html#282>`_

-

-   `-`:idx:

-     * `system.html#198 <system.html#198>`_

-     * `system.html#199 <system.html#199>`_

-     * `system.html#200 <system.html#200>`_

-     * `system.html#201 <system.html#201>`_

-     * `system.html#202 <system.html#202>`_

-     * `system.html#213 <system.html#213>`_

-     * `system.html#214 <system.html#214>`_

-     * `system.html#215 <system.html#215>`_

-     * `system.html#216 <system.html#216>`_

-     * `system.html#217 <system.html#217>`_

-     * `system.html#314 <system.html#314>`_

-     * `system.html#316 <system.html#316>`_

-     * `system.html#327 <system.html#327>`_

-     * `complex.html#104 <complex.html#104>`_

-     * `complex.html#105 <complex.html#105>`_

-     * `times.html#113 <times.html#113>`_

-

-   `-%`:idx:

-     * `system.html#283 <system.html#283>`_

-     * `system.html#284 <system.html#284>`_

-     * `system.html#285 <system.html#285>`_

-     * `system.html#286 <system.html#286>`_

-     * `system.html#287 <system.html#287>`_

-

-   `-+-`:idx:

-     `system.html#328 <system.html#328>`_

-

-   `/`:idx:

-     * `system.html#318 <system.html#318>`_

-     * `os.html#124 <os.html#124>`_

-     * `complex.html#106 <complex.html#106>`_

-     * `pegs.html#108 <pegs.html#108>`_

-

-   `/%`:idx:

-     * `system.html#293 <system.html#293>`_

-     * `system.html#294 <system.html#294>`_

-     * `system.html#295 <system.html#295>`_

-     * `system.html#296 <system.html#296>`_

-     * `system.html#297 <system.html#297>`_

-

-   `/../`:idx:

-     `os.html#128 <os.html#128>`_

-

-   `<`:idx:

-     * `system.html#268 <system.html#268>`_

-     * `system.html#269 <system.html#269>`_

-     * `system.html#270 <system.html#270>`_

-     * `system.html#271 <system.html#271>`_

-     * `system.html#272 <system.html#272>`_

-     * `system.html#321 <system.html#321>`_

-     * `system.html#345 <system.html#345>`_

-     * `system.html#346 <system.html#346>`_

-     * `system.html#347 <system.html#347>`_

-     * `system.html#348 <system.html#348>`_

-     * `system.html#349 <system.html#349>`_

-     * `system.html#350 <system.html#350>`_

-     * `system.html#351 <system.html#351>`_

-     * `system.html#352 <system.html#352>`_

-     * `times.html#114 <times.html#114>`_

-

-   `<%`:idx:

-     `unicode.html#104 <unicode.html#104>`_

-

-   `<%`:idx:

-     * `system.html#308 <system.html#308>`_

-     * `system.html#309 <system.html#309>`_

-     * `system.html#310 <system.html#310>`_

-     * `system.html#311 <system.html#311>`_

-     * `system.html#312 <system.html#312>`_

-

-   `<=`:idx:

-     `times.html#115 <times.html#115>`_

-

-   `<=`:idx:

-     * `system.html#263 <system.html#263>`_

-     * `system.html#264 <system.html#264>`_

-     * `system.html#265 <system.html#265>`_

-     * `system.html#266 <system.html#266>`_

-     * `system.html#267 <system.html#267>`_

-     * `system.html#320 <system.html#320>`_

-     * `system.html#338 <system.html#338>`_

-     * `system.html#339 <system.html#339>`_

-     * `system.html#340 <system.html#340>`_

-     * `system.html#341 <system.html#341>`_

-     * `system.html#342 <system.html#342>`_

-     * `system.html#343 <system.html#343>`_

-     * `system.html#344 <system.html#344>`_

-

-   `<=%`:idx:

-     * `system.html#303 <system.html#303>`_

-     * `system.html#304 <system.html#304>`_

-     * `system.html#305 <system.html#305>`_

-     * `system.html#306 <system.html#306>`_

-     * `system.html#307 <system.html#307>`_

-

-   `<=%`:idx:

-     `unicode.html#103 <unicode.html#103>`_

-

-   `==`:idx:

-     * `md5.html#107 <md5.html#107>`_

-     * `system.html#258 <system.html#258>`_

-     * `system.html#259 <system.html#259>`_

-     * `system.html#260 <system.html#260>`_

-     * `system.html#261 <system.html#261>`_

-     * `system.html#262 <system.html#262>`_

-     * `system.html#319 <system.html#319>`_

-     * `system.html#329 <system.html#329>`_

-     * `system.html#330 <system.html#330>`_

-     * `system.html#331 <system.html#331>`_

-     * `system.html#332 <system.html#332>`_

-     * `system.html#333 <system.html#333>`_

-     * `system.html#334 <system.html#334>`_

-     * `system.html#335 <system.html#335>`_

-     * `system.html#336 <system.html#336>`_

-     * `system.html#337 <system.html#337>`_

-     * `system.html#474 <system.html#474>`_

-     * `complex.html#102 <complex.html#102>`_

-     * `unicode.html#105 <unicode.html#105>`_

-     * `macros.html#116 <macros.html#116>`_

-     * `macros.html#117 <macros.html#117>`_

-

-   `=~`:idx:

-     `regexprs.html#111 <regexprs.html#111>`_

-

-   `=~`:idx:

-     `pegs.html#140 <pegs.html#140>`_

-

-   `>`:idx:

-     `system.html#355 <system.html#355>`_

-

-   `>%`:idx:

-     `system.html#427 <system.html#427>`_

-

-   `>=`:idx:

-     `system.html#354 <system.html#354>`_

-

-   `>=%`:idx:

-     `system.html#426 <system.html#426>`_

-

-   `?`:idx:

-     `pegs.html#110 <pegs.html#110>`_

-

-   `@`:idx:

-     * `system.html#363 <system.html#363>`_

-     * `pegs.html#112 <pegs.html#112>`_

-

-   `[]`:idx:

-     `ropes.html#115 <ropes.html#115>`_

-

-   `[]`:idx:

-     `strtabs.html#107 <strtabs.html#107>`_

-

-   `[]`:idx:

-     `macros.html#112 <macros.html#112>`_

-

-   `[]=`:idx:

-     `strtabs.html#106 <strtabs.html#106>`_

-

-   `[]=`:idx:

-     `macros.html#113 <macros.html#113>`_

-

-   `[ESC]`:idx:

-     `manual.html#134 <manual.html#134>`_

-

-   `a`:idx:

-     `xmlgen.html#107 <xmlgen.html#107>`_

-

-   `abs`:idx:

-     * `system.html#273 <system.html#273>`_

-     * `system.html#274 <system.html#274>`_

-     * `system.html#275 <system.html#275>`_

-     * `system.html#276 <system.html#276>`_

-     * `system.html#277 <system.html#277>`_

-     * `system.html#322 <system.html#322>`_

-     * `complex.html#108 <complex.html#108>`_

-

-   `accumulateResult`:idx:

-     `system.html#493 <system.html#493>`_

-

-   `acronym`:idx:

-     `xmlgen.html#108 <xmlgen.html#108>`_

-

-   `acyclic`:idx:

-     `manual.html#238 <manual.html#238>`_

-

-   `add`:idx:

-     * `system.html#371 <system.html#371>`_

-     * `system.html#372 <system.html#372>`_

-     * `system.html#373 <system.html#373>`_

-     * `system.html#374 <system.html#374>`_

-     * `system.html#375 <system.html#375>`_

-     * `parsesql.html#108 <parsesql.html#108>`_

-     * `macros.html#119 <macros.html#119>`_

-     * `macros.html#120 <macros.html#120>`_

-     * `ropes.html#113 <ropes.html#113>`_

-     * `ropes.html#114 <ropes.html#114>`_

-

-   `addf`:idx:

-     * `strutils.html#111 <strutils.html#111>`_

-     * `ropes.html#121 <ropes.html#121>`_

-

-   `addFile`:idx:

-     * `zipfiles.html#105 <zipfiles.html#105>`_

-     * `zipfiles.html#106 <zipfiles.html#106>`_

-     * `zipfiles.html#107 <zipfiles.html#107>`_

-

-   `addFileExt`:idx:

-     `os.html#137 <os.html#137>`_

-

-   `addQuitProc`:idx:

-     `system.html#412 <system.html#412>`_

-

-   `address`:idx:

-     `xmlgen.html#109 <xmlgen.html#109>`_

-

-   `addSep`:idx:

-     `strutils.html#150 <strutils.html#150>`_

-

-   `alert`:idx:

-     `manual.html#131 <manual.html#131>`_

-

-   `allCharsInSet`:idx:

-     `strutils.html#151 <strutils.html#151>`_

-

-   `alloc`:idx:

-     `system.html#419 <system.html#419>`_

-

-   `alloc0`:idx:

-     `system.html#420 <system.html#420>`_

-

-   `ALLOC_MAX_BLOCK_TO_DROP`:idx:

-     `mysql.html#317 <mysql.html#317>`_

-

-   `ALLOC_MAX_BLOCK_USAGE_BEFORE_DROP`:idx:

-     `mysql.html#318 <mysql.html#318>`_

-

-   `AltSep`:idx:

-     `os.html#104 <os.html#104>`_

-

-   `and`:idx:

-     * `system.html#121 <system.html#121>`_

-     * `system.html#243 <system.html#243>`_

-     * `system.html#244 <system.html#244>`_

-     * `system.html#245 <system.html#245>`_

-     * `system.html#246 <system.html#246>`_

-     * `system.html#247 <system.html#247>`_

-

-   `any`:idx:

-     `pegs.html#117 <pegs.html#117>`_

-

-   `any character`:idx:

-     `pegs.html#116 <pegs.html#116>`_

-

-   `any rune`:idx:

-     `pegs.html#118 <pegs.html#118>`_

-

-   `anyRune`:idx:

-     `pegs.html#119 <pegs.html#119>`_

-

-   `apostrophe`:idx:

-     `manual.html#129 <manual.html#129>`_

-

-   `AppendFileExt`:idx:

-     `os.html#138 <os.html#138>`_

-

-   `arccos`:idx:

-     `math.html#122 <math.html#122>`_

-

-   `arcsin`:idx:

-     `math.html#123 <math.html#123>`_

-

-   `arctan`:idx:

-     `math.html#124 <math.html#124>`_

-

-   `arctan2`:idx:

-     `math.html#125 <math.html#125>`_

-

-   `area`:idx:

-     `xmlgen.html#110 <xmlgen.html#110>`_

-

-   `arithmetic bit shifts`:idx:

-     `tut1.html#110 <tut1.html#110>`_

-

-   `array`:idx:

-     * `tut1.html#117 <tut1.html#117>`_

-     * `system.html#129 <system.html#129>`_

-

-   `array properties`:idx:

-     `tut2.html#106 <tut2.html#106>`_

-

-   `Arrays`:idx:

-     `manual.html#159 <manual.html#159>`_

-

-   `assembler`:idx:

-     `manual.html#205 <manual.html#205>`_

-

-   `assert`:idx:

-     `system.html#424 <system.html#424>`_

-

-   `AST`:idx:

-     `macros.html#101 <macros.html#101>`_

-

-   `attrKey`:idx:

-     `parsexml.html#113 <parsexml.html#113>`_

-

-   `attrValue`:idx:

-     `parsexml.html#114 <parsexml.html#114>`_

-

-   `AUTO_INCREMENT_FLAG`:idx:

-     `mysql.html#133 <mysql.html#133>`_

-

-   `Automatic type conversion`:idx:

-     * `manual.html#145 <manual.html#145>`_

-     * `tut1.html#111 <tut1.html#111>`_

-

-   `b`:idx:

-     `xmlgen.html#111 <xmlgen.html#111>`_

-

-   `backslash`:idx:

-     * `manual.html#127 <manual.html#127>`_

-     * `regexprs.html#101 <regexprs.html#101>`_

-

-   `backspace`:idx:

-     `manual.html#132 <manual.html#132>`_

-

-   `base`:idx:

-     `xmlgen.html#112 <xmlgen.html#112>`_

-

-   `base type`:idx:

-     `manual.html#180 <manual.html#180>`_

-

-   `big`:idx:

-     `xmlgen.html#113 <xmlgen.html#113>`_

-

-   `BiggestFloat`:idx:

-     `system.html#382 <system.html#382>`_

-

-   `BiggestInt`:idx:

-     `system.html#381 <system.html#381>`_

-

-   `BINARY_FLAG`:idx:

-     `mysql.html#131 <mysql.html#131>`_

-

-   `BINCMP_FLAG`:idx:

-     `mysql.html#141 <mysql.html#141>`_

-

-   `binom`:idx:

-     `math.html#105 <math.html#105>`_

-

-   `BLOB_FLAG`:idx:

-     `mysql.html#128 <mysql.html#128>`_

-

-   `block`:idx:

-     `manual.html#201 <manual.html#201>`_

-

-   `blockquote`:idx:

-     `xmlgen.html#114 <xmlgen.html#114>`_

-

-   `body`:idx:

-     `xmlgen.html#115 <xmlgen.html#115>`_

-

-   `bool`:idx:

-     `system.html#109 <system.html#109>`_

-

-   `boolean`:idx:

-     * `manual.html#153 <manual.html#153>`_

-     * `tut1.html#107 <tut1.html#107>`_

-

-   `br`:idx:

-     `xmlgen.html#116 <xmlgen.html#116>`_

-

-   `break`:idx:

-     `manual.html#202 <manual.html#202>`_

-

-   `breakpoint`:idx:

-     `endb.html#103 <endb.html#103>`_

-

-   `button`:idx:

-     `xmlgen.html#117 <xmlgen.html#117>`_

-

-   `Byte`:idx:

-     `system.html#133 <system.html#133>`_

-

-   `calling conventions`:idx:

-     `manual.html#170 <manual.html#170>`_

-

-   `capitalize`:idx:

-     `strutils.html#117 <strutils.html#117>`_

-

-   `caption`:idx:

-     `xmlgen.html#118 <xmlgen.html#118>`_

-

-   `capture`:idx:

-     `pegs.html#122 <pegs.html#122>`_

-

-   `card`:idx:

-     `system.html#181 <system.html#181>`_

-

-   `carriage return`:idx:

-     `manual.html#122 <manual.html#122>`_

-

-   `case`:idx:

-     `manual.html#190 <manual.html#190>`_

-

-   `cchar`:idx:

-     `system.html#383 <system.html#383>`_

-

-   `cdecl`:idx:

-     `manual.html#172 <manual.html#172>`_

-

-   `cdouble`:idx:

-     `system.html#390 <system.html#390>`_

-

-   `cfloat`:idx:

-     `system.html#389 <system.html#389>`_

-

-   `cgiError`:idx:

-     `cgi.html#106 <cgi.html#106>`_

-

-   `ChangeFileExt`:idx:

-     `os.html#136 <os.html#136>`_

-

-   `char`:idx:

-     `system.html#110 <system.html#110>`_

-

-   `character type`:idx:

-     `manual.html#154 <manual.html#154>`_

-

-   `character with decimal value d`:idx:

-     `manual.html#130 <manual.html#130>`_

-

-   `character with hex value HH`:idx:

-     `manual.html#135 <manual.html#135>`_

-

-   `character_set`:idx:

-     `mysql.html#351 <mysql.html#351>`_

-

-   `charData`:idx:

-     `parsexml.html#109 <parsexml.html#109>`_

-

-   `charSet`:idx:

-     `pegs.html#107 <pegs.html#107>`_

-

-   `CHARSET_INFO`:idx:

-     `mysql.html#348 <mysql.html#348>`_

-

-   `charset_info_st`:idx:

-     `mysql.html#347 <mysql.html#347>`_

-

-   `checked runtime error`:idx:

-     `manual.html#110 <manual.html#110>`_

-

-   `checkedSymAddr`:idx:

-     `dynlib.html#105 <dynlib.html#105>`_

-

-   `check_scramble`:idx:

-     `mysql.html#279 <mysql.html#279>`_

-

-   `check_scramble_323`:idx:

-     `mysql.html#273 <mysql.html#273>`_

-

-   `chr`:idx:

-     `system.html#183 <system.html#183>`_

-

-   `cint`:idx:

-     `system.html#386 <system.html#386>`_

-

-   `cite`:idx:

-     `xmlgen.html#119 <xmlgen.html#119>`_

-

-   `classify`:idx:

-     `math.html#104 <math.html#104>`_

-

-   `CLIENT_COMPRESS`:idx:

-     `mysql.html#161 <mysql.html#161>`_

-

-   `CLIENT_CONNECT_WITH_DB`:idx:

-     `mysql.html#159 <mysql.html#159>`_

-

-   `CLIENT_FOUND_ROWS`:idx:

-     `mysql.html#157 <mysql.html#157>`_

-

-   `CLIENT_IGNORE_SIGPIPE`:idx:

-     `mysql.html#168 <mysql.html#168>`_

-

-   `CLIENT_IGNORE_SPACE`:idx:

-     `mysql.html#164 <mysql.html#164>`_

-

-   `CLIENT_INTERACTIVE`:idx:

-     `mysql.html#166 <mysql.html#166>`_

-

-   `CLIENT_LOCAL_FILES`:idx:

-     `mysql.html#163 <mysql.html#163>`_

-

-   `CLIENT_LONG_FLAG`:idx:

-     `mysql.html#158 <mysql.html#158>`_

-

-   `CLIENT_LONG_PASSWORD`:idx:

-     `mysql.html#156 <mysql.html#156>`_

-

-   `CLIENT_MULTI_QUERIES`:idx:

-     `mysql.html#203 <mysql.html#203>`_

-

-   `CLIENT_MULTI_RESULTS`:idx:

-     `mysql.html#173 <mysql.html#173>`_

-

-   `CLIENT_MULTI_STATEMENTS`:idx:

-     `mysql.html#172 <mysql.html#172>`_

-

-   `CLIENT_NET_READ_TIMEOUT`:idx:

-     `mysql.html#292 <mysql.html#292>`_

-

-   `CLIENT_NET_WRITE_TIMEOUT`:idx:

-     `mysql.html#293 <mysql.html#293>`_

-

-   `CLIENT_NO_SCHEMA`:idx:

-     `mysql.html#160 <mysql.html#160>`_

-

-   `CLIENT_ODBC`:idx:

-     `mysql.html#162 <mysql.html#162>`_

-

-   `CLIENT_PROTOCOL_41`:idx:

-     `mysql.html#165 <mysql.html#165>`_

-

-   `CLIENT_REMEMBER_OPTIONS`:idx:

-     `mysql.html#174 <mysql.html#174>`_

-

-   `CLIENT_RESERVED`:idx:

-     `mysql.html#170 <mysql.html#170>`_

-

-   `CLIENT_SECURE_CONNECTION`:idx:

-     `mysql.html#171 <mysql.html#171>`_

-

-   `CLIENT_SSL`:idx:

-     `mysql.html#167 <mysql.html#167>`_

-

-   `CLIENT_TRANSACTIONS`:idx:

-     `mysql.html#169 <mysql.html#169>`_

-

-   `clong`:idx:

-     `system.html#387 <system.html#387>`_

-

-   `clongdouble`:idx:

-     `system.html#391 <system.html#391>`_

-

-   `clonglong`:idx:

-     `system.html#388 <system.html#388>`_

-

-   `close`:idx:

-     * `lexbase.html#105 <lexbase.html#105>`_

-     * `parsecfg.html#105 <parsecfg.html#105>`_

-     * `parsexml.html#108 <parsexml.html#108>`_

-     * `parsecsv.html#109 <parsecsv.html#109>`_

-     * `zipfiles.html#103 <zipfiles.html#103>`_

-     * `httpserver.html#106 <httpserver.html#106>`_

-

-   `Close`:idx:

-     * `system.html#510 <system.html#510>`_

-     * `db_postgres.html#117 <db_postgres.html#117>`_

-     * `db_mysql.html#117 <db_mysql.html#117>`_

-

-   `CloseFile`:idx:

-     `system.html#509 <system.html#509>`_

-

-   `closure`:idx:

-     `manual.html#177 <manual.html#177>`_

-

-   `cmdLineRest`:idx:

-     `parseopt.html#106 <parseopt.html#106>`_

-

-   `cmp`:idx:

-     * `system.html#361 <system.html#361>`_

-     * `system.html#362 <system.html#362>`_

-

-   `cmpIgnoreCase`:idx:

-     `strutils.html#135 <strutils.html#135>`_

-

-   `cmpIgnoreStyle`:idx:

-     `strutils.html#136 <strutils.html#136>`_

-

-   `cmpPaths`:idx:

-     `os.html#139 <os.html#139>`_

-

-   `cmpRunesIgnoreCase`:idx:

-     `unicode.html#120 <unicode.html#120>`_

-

-   `code`:idx:

-     `xmlgen.html#120 <xmlgen.html#120>`_

-

-   `col`:idx:

-     `xmlgen.html#121 <xmlgen.html#121>`_

-

-   `colgroup`:idx:

-     `xmlgen.html#122 <xmlgen.html#122>`_

-

-   `comma separated value`:idx:

-     `parsecsv.html#102 <parsecsv.html#102>`_

-

-   `comment pieces`:idx:

-     * `manual.html#115 <manual.html#115>`_

-     * `tut1.html#103 <tut1.html#103>`_

-

-   `Comments`:idx:

-     * `manual.html#114 <manual.html#114>`_

-     * `tut1.html#102 <tut1.html#102>`_

-

-   `commonAttr`:idx:

-     `xmlgen.html#105 <xmlgen.html#105>`_

-

-   `COMP_HEADER_SIZE`:idx:

-     `mysql.html#266 <mysql.html#266>`_

-

-   `CompileDate`:idx:

-     `system.html#399 <system.html#399>`_

-

-   `CompileTime`:idx:

-     `system.html#400 <system.html#400>`_

-

-   `compileTime`:idx:

-     `manual.html#236 <manual.html#236>`_

-

-   `complex statements`:idx:

-     `manual.html#184 <manual.html#184>`_

-

-   `const`:idx:

-     `manual.html#188 <manual.html#188>`_

-

-   `constant expressions`:idx:

-     `manual.html#108 <manual.html#108>`_

-

-   `Constants`:idx:

-     * `manual.html#140 <manual.html#140>`_

-     * `tut1.html#104 <tut1.html#104>`_

-

-   `contains`:idx:

-     * `system.html#356 <system.html#356>`_

-     * `system.html#476 <system.html#476>`_

-     * `strutils.html#137 <strutils.html#137>`_

-     * `strutils.html#138 <strutils.html#138>`_

-     * `strutils.html#139 <strutils.html#139>`_

-     * `pegs.html#141 <pegs.html#141>`_

-     * `pegs.html#142 <pegs.html#142>`_

-

-   `continue`:idx:

-     `manual.html#204 <manual.html#204>`_

-

-   `copy`:idx:

-     * `system.html#413 <system.html#413>`_

-     * `system.html#414 <system.html#414>`_

-

-   `copyFile`:idx:

-     `os.html#142 <os.html#142>`_

-

-   `copyMem`:idx:

-     `system.html#416 <system.html#416>`_

-

-   `copyNimNode`:idx:

-     `macros.html#136 <macros.html#136>`_

-

-   `copyNimTree`:idx:

-     `macros.html#137 <macros.html#137>`_

-

-   `coreAttr`:idx:

-     `xmlgen.html#103 <xmlgen.html#103>`_

-

-   `cos`:idx:

-     `math.html#126 <math.html#126>`_

-

-   `cosh`:idx:

-     `math.html#127 <math.html#127>`_

-

-   `countBits32`:idx:

-     `math.html#109 <math.html#109>`_

-

-   `countdown`:idx:

-     `system.html#445 <system.html#445>`_

-

-   `countProcessors`:idx:

-     `osproc.html#117 <osproc.html#117>`_

-

-   `countup`:idx:

-     `system.html#446 <system.html#446>`_

-

-   `cpuEndian`:idx:

-     `system.html#405 <system.html#405>`_

-

-   `createDir`:idx:

-     * `os.html#159 <os.html#159>`_

-     * `zipfiles.html#104 <zipfiles.html#104>`_

-

-   `create_random_string`:idx:

-     `mysql.html#269 <mysql.html#269>`_

-

-   `cschar`:idx:

-     `system.html#384 <system.html#384>`_

-

-   `cshort`:idx:

-     `system.html#385 <system.html#385>`_

-

-   `cstring`:idx:

-     `system.html#112 <system.html#112>`_

-

-   `cstringArray`:idx:

-     `system.html#392 <system.html#392>`_

-

-   `cstringArrayToSeq`:idx:

-     * `system.html#537 <system.html#537>`_

-     * `system.html#538 <system.html#538>`_

-

-   `CSV`:idx:

-     `parsecsv.html#101 <parsecsv.html#101>`_

-

-   `cuint`:idx:

-     `mysql.html#109 <mysql.html#109>`_

-

-   `CurDir`:idx:

-     `os.html#101 <os.html#101>`_

-

-   `CURLAUTH_ANY`:idx:

-     `libcurl.html#192 <libcurl.html#192>`_

-

-   `CURLAUTH_ANYSAFE`:idx:

-     `libcurl.html#194 <libcurl.html#194>`_

-

-   `CURLAUTH_BASIC`:idx:

-     `libcurl.html#193 <libcurl.html#193>`_

-

-   `CURLAUTH_DIGEST`:idx:

-     `libcurl.html#195 <libcurl.html#195>`_

-

-   `CURLAUTH_GSSNEGOTIATE`:idx:

-     `libcurl.html#196 <libcurl.html#196>`_

-

-   `CURLAUTH_NONE`:idx:

-     `libcurl.html#197 <libcurl.html#197>`_

-

-   `CURLAUTH_NTLM`:idx:

-     `libcurl.html#198 <libcurl.html#198>`_

-

-   `CURLE_ALREADY_COMPLETE`:idx:

-     `libcurl.html#199 <libcurl.html#199>`_

-

-   `curl_easy_cleanup`:idx:

-     `libcurl.html#304 <libcurl.html#304>`_

-

-   `curl_easy_duphandle`:idx:

-     `libcurl.html#306 <libcurl.html#306>`_

-

-   `curl_easy_escape`:idx:

-     `libcurl.html#284 <libcurl.html#284>`_

-

-   `curl_easy_getinfo`:idx:

-     `libcurl.html#305 <libcurl.html#305>`_

-

-   `curl_easy_init`:idx:

-     `libcurl.html#301 <libcurl.html#301>`_

-

-   `curl_easy_perform`:idx:

-     `libcurl.html#303 <libcurl.html#303>`_

-

-   `curl_easy_reset`:idx:

-     `libcurl.html#307 <libcurl.html#307>`_

-

-   `curl_easy_setopt`:idx:

-     `libcurl.html#302 <libcurl.html#302>`_

-

-   `curl_easy_strerror`:idx:

-     `libcurl.html#299 <libcurl.html#299>`_

-

-   `curl_easy_unescape`:idx:

-     `libcurl.html#286 <libcurl.html#286>`_

-

-   `CURLE_FTP_BAD_DOWNLOAD_RESUME`:idx:

-     `libcurl.html#200 <libcurl.html#200>`_

-

-   `CURLE_FTP_PARTIAL_FILE`:idx:

-     `libcurl.html#201 <libcurl.html#201>`_

-

-   `CURLE_HTTP_NOT_FOUND`:idx:

-     `libcurl.html#202 <libcurl.html#202>`_

-

-   `CURLE_HTTP_PORT_FAILED`:idx:

-     `libcurl.html#203 <libcurl.html#203>`_

-

-   `CURLE_OPERATION_TIMEDOUT`:idx:

-     `libcurl.html#204 <libcurl.html#204>`_

-

-   `CURL_ERROR_SIZE`:idx:

-     `libcurl.html#205 <libcurl.html#205>`_

-

-   `curl_escape`:idx:

-     `libcurl.html#285 <libcurl.html#285>`_

-

-   `curl_formadd`:idx:

-     `libcurl.html#279 <libcurl.html#279>`_

-

-   `CURL_FORMAT_OFF_T`:idx:

-     `libcurl.html#206 <libcurl.html#206>`_

-

-   `curl_formfree`:idx:

-     `libcurl.html#281 <libcurl.html#281>`_

-

-   `curl_formget`:idx:

-     `libcurl.html#280 <libcurl.html#280>`_

-

-   `curl_free`:idx:

-     `libcurl.html#288 <libcurl.html#288>`_

-

-   `curl_getdate`:idx:

-     `libcurl.html#294 <libcurl.html#294>`_

-

-   `curl_getenv`:idx:

-     `libcurl.html#282 <libcurl.html#282>`_

-

-   `CURL_GLOBAL_ALL`:idx:

-     `libcurl.html#210 <libcurl.html#210>`_

-

-   `curl_global_cleanup`:idx:

-     `libcurl.html#291 <libcurl.html#291>`_

-

-   `CURL_GLOBAL_DEFAULT`:idx:

-     `libcurl.html#211 <libcurl.html#211>`_

-

-   `curl_global_init`:idx:

-     `libcurl.html#289 <libcurl.html#289>`_

-

-   `curl_global_init_mem`:idx:

-     `libcurl.html#290 <libcurl.html#290>`_

-

-   `CURL_GLOBAL_NOTHING`:idx:

-     `libcurl.html#207 <libcurl.html#207>`_

-

-   `CURL_GLOBAL_SSL`:idx:

-     `libcurl.html#208 <libcurl.html#208>`_

-

-   `CURL_GLOBAL_WIN32`:idx:

-     `libcurl.html#209 <libcurl.html#209>`_

-

-   `CURLINFO_DOUBLE`:idx:

-     `libcurl.html#212 <libcurl.html#212>`_

-

-   `CURLINFO_HTTP_CODE`:idx:

-     `libcurl.html#213 <libcurl.html#213>`_

-

-   `CURLINFO_LONG`:idx:

-     `libcurl.html#214 <libcurl.html#214>`_

-

-   `CURLINFO_MASK`:idx:

-     `libcurl.html#215 <libcurl.html#215>`_

-

-   `CURLINFO_SLIST`:idx:

-     `libcurl.html#216 <libcurl.html#216>`_

-

-   `CURLINFO_STRING`:idx:

-     `libcurl.html#217 <libcurl.html#217>`_

-

-   `CURLINFO_TYPEMASK`:idx:

-     `libcurl.html#218 <libcurl.html#218>`_

-

-   `CURL_IPRESOLVE_V4`:idx:

-     `libcurl.html#219 <libcurl.html#219>`_

-

-   `CURL_IPRESOLVE_V6`:idx:

-     `libcurl.html#220 <libcurl.html#220>`_

-

-   `CURL_IPRESOLVE_WHATEVER`:idx:

-     `libcurl.html#221 <libcurl.html#221>`_

-

-   `CURL_MAX_WRITE_SIZE`:idx:

-     `libcurl.html#222 <libcurl.html#222>`_

-

-   `CURLM_CALL_MULTI_SOCKET`:idx:

-     `libcurl.html#223 <libcurl.html#223>`_

-

-   `curl_multi_add_handle`:idx:

-     `libcurl.html#309 <libcurl.html#309>`_

-

-   `curl_multi_assign`:idx:

-     `libcurl.html#320 <libcurl.html#320>`_

-

-   `curl_multi_cleanup`:idx:

-     `libcurl.html#313 <libcurl.html#313>`_

-

-   `curl_multi_fdset`:idx:

-     `libcurl.html#311 <libcurl.html#311>`_

-

-   `curl_multi_info_read`:idx:

-     `libcurl.html#314 <libcurl.html#314>`_

-

-   `curl_multi_init`:idx:

-     `libcurl.html#308 <libcurl.html#308>`_

-

-   `curl_multi_perform`:idx:

-     `libcurl.html#312 <libcurl.html#312>`_

-

-   `curl_multi_remove_handle`:idx:

-     `libcurl.html#310 <libcurl.html#310>`_

-

-   `curl_multi_setopt`:idx:

-     `libcurl.html#319 <libcurl.html#319>`_

-

-   `curl_multi_socket`:idx:

-     `libcurl.html#316 <libcurl.html#316>`_

-

-   `curl_multi_socket_all`:idx:

-     `libcurl.html#317 <libcurl.html#317>`_

-

-   `curl_multi_strerror`:idx:

-     `libcurl.html#315 <libcurl.html#315>`_

-

-   `curl_multi_timeout`:idx:

-     `libcurl.html#318 <libcurl.html#318>`_

-

-   `CURLOPT_CLOSEFUNCTION`:idx:

-     `libcurl.html#224 <libcurl.html#224>`_

-

-   `CURLOPT_FTPASCII`:idx:

-     `libcurl.html#225 <libcurl.html#225>`_

-

-   `CURLOPT_HEADERDATA`:idx:

-     `libcurl.html#226 <libcurl.html#226>`_

-

-   `CURLOPT_HTTPREQUEST`:idx:

-     `libcurl.html#227 <libcurl.html#227>`_

-

-   `CURLOPT_MUTE`:idx:

-     `libcurl.html#228 <libcurl.html#228>`_

-

-   `CURLOPT_PASSWDDATA`:idx:

-     `libcurl.html#229 <libcurl.html#229>`_

-

-   `CURLOPT_PASSWDFUNCTION`:idx:

-     `libcurl.html#230 <libcurl.html#230>`_

-

-   `CURLOPT_PASV_HOST`:idx:

-     `libcurl.html#231 <libcurl.html#231>`_

-

-   `CURLOPT_READDATA`:idx:

-     `libcurl.html#232 <libcurl.html#232>`_

-

-   `CURLOPT_SOURCE_HOST`:idx:

-     `libcurl.html#233 <libcurl.html#233>`_

-

-   `CURLOPT_SOURCE_PATH`:idx:

-     `libcurl.html#234 <libcurl.html#234>`_

-

-   `CURLOPT_SOURCE_PORT`:idx:

-     `libcurl.html#235 <libcurl.html#235>`_

-

-   `CURLOPT_SSLKEYPASSWD`:idx:

-     `libcurl.html#191 <libcurl.html#191>`_

-

-   `CURLOPTTYPE_FUNCTIONPOINT`:idx:

-     `libcurl.html#236 <libcurl.html#236>`_

-

-   `CURLOPTTYPE_LONG`:idx:

-     `libcurl.html#237 <libcurl.html#237>`_

-

-   `CURLOPTTYPE_OBJECTPOINT`:idx:

-     `libcurl.html#238 <libcurl.html#238>`_

-

-   `CURLOPTTYPE_OFF_T`:idx:

-     `libcurl.html#239 <libcurl.html#239>`_

-

-   `CURLOPT_WRITEDATA`:idx:

-     `libcurl.html#240 <libcurl.html#240>`_

-

-   `CURL_POLL_IN`:idx:

-     `libcurl.html#241 <libcurl.html#241>`_

-

-   `CURL_POLL_INOUT`:idx:

-     `libcurl.html#242 <libcurl.html#242>`_

-

-   `CURL_POLL_NONE`:idx:

-     `libcurl.html#243 <libcurl.html#243>`_

-

-   `CURL_POLL_OUT`:idx:

-     `libcurl.html#244 <libcurl.html#244>`_

-

-   `CURL_POLL_REMOVE`:idx:

-     `libcurl.html#245 <libcurl.html#245>`_

-

-   `CURL_READFUNC_ABORT`:idx:

-     `libcurl.html#246 <libcurl.html#246>`_

-

-   `curl_share_cleanup`:idx:

-     `libcurl.html#297 <libcurl.html#297>`_

-

-   `curl_share_init`:idx:

-     `libcurl.html#295 <libcurl.html#295>`_

-

-   `curl_share_setopt`:idx:

-     `libcurl.html#296 <libcurl.html#296>`_

-

-   `curl_share_strerror`:idx:

-     `libcurl.html#300 <libcurl.html#300>`_

-

-   `curl_slist_append`:idx:

-     `libcurl.html#292 <libcurl.html#292>`_

-

-   `curl_slist_free_all`:idx:

-     `libcurl.html#293 <libcurl.html#293>`_

-

-   `CURL_SOCKET_BAD`:idx:

-     `libcurl.html#247 <libcurl.html#247>`_

-

-   `CURL_SOCKET_TIMEOUT`:idx:

-     `libcurl.html#248 <libcurl.html#248>`_

-

-   `curl_strequal`:idx:

-     `libcurl.html#277 <libcurl.html#277>`_

-

-   `curl_strnequal`:idx:

-     `libcurl.html#278 <libcurl.html#278>`_

-

-   `curl_unescape`:idx:

-     `libcurl.html#287 <libcurl.html#287>`_

-

-   `curl_version`:idx:

-     `libcurl.html#283 <libcurl.html#283>`_

-

-   `CURL_VERSION_ASYNCHDNS`:idx:

-     `libcurl.html#249 <libcurl.html#249>`_

-

-   `CURL_VERSION_CONV`:idx:

-     `libcurl.html#250 <libcurl.html#250>`_

-

-   `CURL_VERSION_DEBUG`:idx:

-     `libcurl.html#251 <libcurl.html#251>`_

-

-   `CURL_VERSION_GSSNEGOTIATE`:idx:

-     `libcurl.html#252 <libcurl.html#252>`_

-

-   `CURL_VERSION_IDN`:idx:

-     `libcurl.html#253 <libcurl.html#253>`_

-

-   `curl_version_info`:idx:

-     `libcurl.html#298 <libcurl.html#298>`_

-

-   `CURL_VERSION_IPV6`:idx:

-     `libcurl.html#254 <libcurl.html#254>`_

-

-   `CURL_VERSION_KERBEROS4`:idx:

-     `libcurl.html#255 <libcurl.html#255>`_

-

-   `CURL_VERSION_LARGEFILE`:idx:

-     `libcurl.html#256 <libcurl.html#256>`_

-

-   `CURL_VERSION_LIBZ`:idx:

-     `libcurl.html#257 <libcurl.html#257>`_

-

-   `CURLVERSION_NOW`:idx:

-     `libcurl.html#258 <libcurl.html#258>`_

-

-   `CURL_VERSION_NTLM`:idx:

-     `libcurl.html#259 <libcurl.html#259>`_

-

-   `CURL_VERSION_SPNEGO`:idx:

-     `libcurl.html#260 <libcurl.html#260>`_

-

-   `CURL_VERSION_SSL`:idx:

-     `libcurl.html#261 <libcurl.html#261>`_

-

-   `CURL_VERSION_SSPI`:idx:

-     `libcurl.html#262 <libcurl.html#262>`_

-

-   `CursorBackward`:idx:

-     `terminal.html#107 <terminal.html#107>`_

-

-   `CursorDown`:idx:

-     `terminal.html#105 <terminal.html#105>`_

-

-   `CursorForward`:idx:

-     `terminal.html#106 <terminal.html#106>`_

-

-   `CursorUp`:idx:

-     `terminal.html#104 <terminal.html#104>`_

-

-   `dangling else problem`:idx:

-     `manual.html#185 <manual.html#185>`_

-

-   `dbError`:idx:

-     * `db_postgres.html#107 <db_postgres.html#107>`_

-     * `db_mysql.html#106 <db_mysql.html#106>`_

-

-   `dbgLineHook`:idx:

-     `system.html#441 <system.html#441>`_

-

-   `dbQueryOpt`:idx:

-     `db_mysql.html#107 <db_mysql.html#107>`_

-

-   `dd`:idx:

-     `xmlgen.html#123 <xmlgen.html#123>`_

-

-   `deadCodeElim`:idx:

-     `manual.html#247 <manual.html#247>`_

-

-   `dealloc`:idx:

-     `system.html#422 <system.html#422>`_

-

-   `debugger`:idx:

-     `nimrodc.html#106 <nimrodc.html#106>`_

-

-   `dec`:idx:

-     `system.html#172 <system.html#172>`_

-

-   `decodeData`:idx:

-     * `cgi.html#107 <cgi.html#107>`_

-     * `cgi.html#108 <cgi.html#108>`_

-

-   `defined`:idx:

-     `system.html#118 <system.html#118>`_

-

-   `definedInScope`:idx:

-     `system.html#119 <system.html#119>`_

-

-   `del`:idx:

-     * `system.html#376 <system.html#376>`_

-     * `xmlgen.html#124 <xmlgen.html#124>`_

-     * `macros.html#121 <macros.html#121>`_

-

-   `delete`:idx:

-     * `system.html#377 <system.html#377>`_

-     * `strutils.html#157 <strutils.html#157>`_

-

-   `deleteStr`:idx:

-     * `strutils.html#124 <strutils.html#124>`_

-     * `strutils.html#158 <strutils.html#158>`_

-

-   `dfn`:idx:

-     `xmlgen.html#125 <xmlgen.html#125>`_

-

-   `Digits`:idx:

-     `strutils.html#104 <strutils.html#104>`_

-

-   `digits`:idx:

-     `pegs.html#126 <pegs.html#126>`_

-

-   `DirSep`:idx:

-     `os.html#103 <os.html#103>`_

-

-   `disableCache`:idx:

-     `ropes.html#107 <ropes.html#107>`_

-

-   `discard`:idx:

-     `manual.html#186 <manual.html#186>`_

-

-   `div`:idx:

-     * `system.html#223 <system.html#223>`_

-     * `system.html#224 <system.html#224>`_

-     * `system.html#225 <system.html#225>`_

-     * `system.html#226 <system.html#226>`_

-     * `system.html#227 <system.html#227>`_

-     * `xmlgen.html#126 <xmlgen.html#126>`_

-

-   `dl`:idx:

-     `xmlgen.html#127 <xmlgen.html#127>`_

-

-   `domain specific languages`:idx:

-     `manual.html#222 <manual.html#222>`_

-

-   `downloadFile`:idx:

-     `httpclient.html#110 <httpclient.html#110>`_

-

-   `dt`:idx:

-     `xmlgen.html#128 <xmlgen.html#128>`_

-

-   `dynamic type`:idx:

-     `manual.html#104 <manual.html#104>`_

-

-   `DYNAMIC_ARRAY`:idx:

-     `mysql.html#340 <mysql.html#340>`_

-

-   `dynlib`:idx:

-     `manual.html#252 <manual.html#252>`_

-

-   `E`:idx:

-     `math.html#102 <math.html#102>`_

-

-   `EAccessViolation`:idx:

-     `system.html#149 <system.html#149>`_

-

-   `each`:idx:

-     `system.html#478 <system.html#478>`_

-

-   `EArithmetic`:idx:

-     `system.html#146 <system.html#146>`_

-

-   `EAssertionFailed`:idx:

-     `system.html#150 <system.html#150>`_

-

-   `EAsynch`:idx:

-     `system.html#139 <system.html#139>`_

-

-   `E_Base`:idx:

-     `system.html#138 <system.html#138>`_

-

-   `ECgi`:idx:

-     `cgi.html#104 <cgi.html#104>`_

-

-   `echo`:idx:

-     `system.html#494 <system.html#494>`_

-

-   `EControlC`:idx:

-     `system.html#151 <system.html#151>`_

-

-   `EDb`:idx:

-     * `db_postgres.html#104 <db_postgres.html#104>`_

-     * `db_mysql.html#104 <db_mysql.html#104>`_

-

-   `editDistance`:idx:

-     `strutils.html#165 <strutils.html#165>`_

-

-   `EDivByZero`:idx:

-     `system.html#147 <system.html#147>`_

-

-   `EFloatDivByZero`:idx:

-     * `manual.html#146 <manual.html#146>`_

-     * `system.html#163 <system.html#163>`_

-

-   `EFloatInexact`:idx:

-     * `manual.html#149 <manual.html#149>`_

-     * `system.html#166 <system.html#166>`_

-

-   `EFloatingPoint`:idx:

-     * `manual.html#150 <manual.html#150>`_

-     * `system.html#161 <system.html#161>`_

-

-   `EFloatInvalidOp`:idx:

-     `system.html#162 <system.html#162>`_

-

-   `EFloatOverflow`:idx:

-     * `manual.html#147 <manual.html#147>`_

-     * `system.html#164 <system.html#164>`_

-

-   `EFloatUnderflow`:idx:

-     * `manual.html#148 <manual.html#148>`_

-     * `system.html#165 <system.html#165>`_

-

-   `EHttpRequestErr`:idx:

-     `httpclient.html#103 <httpclient.html#103>`_

-

-   `EInvalidCsv`:idx:

-     `parsecsv.html#105 <parsecsv.html#105>`_

-

-   `EInvalidField`:idx:

-     `system.html#155 <system.html#155>`_

-

-   `EInvalidIndex`:idx:

-     `system.html#154 <system.html#154>`_

-

-   `EInvalidLibrary`:idx:

-     `system.html#144 <system.html#144>`_

-

-   `EInvalidObjectAssignment`:idx:

-     `system.html#159 <system.html#159>`_

-

-   `EInvalidObjectConversion`:idx:

-     `system.html#160 <system.html#160>`_

-

-   `EInvalidPeg`:idx:

-     `pegs.html#150 <pegs.html#150>`_

-

-   `EInvalidProtocol`:idx:

-     `httpclient.html#102 <httpclient.html#102>`_

-

-   `EInvalidRegEx`:idx:

-     `regexprs.html#104 <regexprs.html#104>`_

-

-   `EInvalidSql`:idx:

-     `parsesql.html#103 <parsesql.html#103>`_

-

-   `EInvalidValue`:idx:

-     `system.html#152 <system.html#152>`_

-

-   `EIO`:idx:

-     `system.html#142 <system.html#142>`_

-

-   `elementName`:idx:

-     `parsexml.html#111 <parsexml.html#111>`_

-

-   `em`:idx:

-     `xmlgen.html#129 <xmlgen.html#129>`_

-

-   `Embedded Nimrod Debugger`:idx:

-     `endb.html#101 <endb.html#101>`_

-

-   `enableCache`:idx:

-     `ropes.html#108 <ropes.html#108>`_

-

-   `ENDB`:idx:

-     `endb.html#102 <endb.html#102>`_

-

-   `EndOfFile`:idx:

-     * `system.html#511 <system.html#511>`_

-     * `lexbase.html#101 <lexbase.html#101>`_

-

-   `endsWith`:idx:

-     * `strutils.html#149 <strutils.html#149>`_

-     * `pegs.html#144 <pegs.html#144>`_

-

-   `ENoExceptionToReraise`:idx:

-     * `manual.html#193 <manual.html#193>`_

-     * `system.html#158 <system.html#158>`_

-

-   `entityName`:idx:

-     `parsexml.html#112 <parsexml.html#112>`_

-

-   `enum_cursor_type`:idx:

-     `mysql.html#237 <mysql.html#237>`_

-

-   `Enumeration`:idx:

-     `manual.html#155 <manual.html#155>`_

-

-   `enumeration`:idx:

-     `tut1.html#113 <tut1.html#113>`_

-

-   `enum_field_types`:idx:

-     `mysql.html#202 <mysql.html#202>`_

-

-   `ENUM_FLAG`:idx:

-     `mysql.html#132 <mysql.html#132>`_

-

-   `enum_mysql_set_option`:idx:

-     `mysql.html#238 <mysql.html#238>`_

-

-   `enum_mysql_stmt_state`:idx:

-     `mysql.html#376 <mysql.html#376>`_

-

-   `enum_server_command`:idx:

-     `mysql.html#119 <mysql.html#119>`_

-

-   `enum_stmt_attr_type`:idx:

-     `mysql.html#383 <mysql.html#383>`_

-

-   `envPairs`:idx:

-     `os.html#151 <os.html#151>`_

-

-   `EOS`:idx:

-     `system.html#143 <system.html#143>`_

-

-   `EOutOfMemory`:idx:

-     `system.html#153 <system.html#153>`_

-

-   `EOutOfRange`:idx:

-     * `tut1.html#112 <tut1.html#112>`_

-     * `system.html#156 <system.html#156>`_

-

-   `EOverflow`:idx:

-     `system.html#148 <system.html#148>`_

-

-   `equalMem`:idx:

-     `system.html#418 <system.html#418>`_

-

-   `equalsFile`:idx:

-     * `ropes.html#122 <ropes.html#122>`_

-     * `ropes.html#123 <ropes.html#123>`_

-

-   `EraseLine`:idx:

-     `terminal.html#108 <terminal.html#108>`_

-

-   `EraseScreen`:idx:

-     `terminal.html#109 <terminal.html#109>`_

-

-   `ERessourceExhausted`:idx:

-     `system.html#145 <system.html#145>`_

-

-   `error`:idx:

-     * `manual.html#233 <manual.html#233>`_

-     * `manual.html#241 <manual.html#241>`_

-     * `macros.html#138 <macros.html#138>`_

-

-   `errorMsg`:idx:

-     `parsexml.html#120 <parsexml.html#120>`_

-

-   `errorMsgExpected`:idx:

-     `parsexml.html#121 <parsexml.html#121>`_

-

-   `errorStr`:idx:

-     `parsecfg.html#110 <parsecfg.html#110>`_

-

-   `errorStream`:idx:

-     `osproc.html#116 <osproc.html#116>`_

-

-   `escape`:idx:

-     * `manual.html#133 <manual.html#133>`_

-     * `strutils.html#162 <strutils.html#162>`_

-

-   `escape sequences`:idx:

-     `manual.html#120 <manual.html#120>`_

-

-   `EStackOverflow`:idx:

-     `system.html#157 <system.html#157>`_

-

-   `ESynch`:idx:

-     `system.html#140 <system.html#140>`_

-

-   `ESystem`:idx:

-     `system.html#141 <system.html#141>`_

-

-   `eventAttr`:idx:

-     `xmlgen.html#104 <xmlgen.html#104>`_

-

-   `except`:idx:

-     `manual.html#196 <manual.html#196>`_

-

-   `exception handlers`:idx:

-     `manual.html#195 <manual.html#195>`_

-

-   `exceptions`:idx:

-     `tut2.html#107 <tut2.html#107>`_

-

-   `excl`:idx:

-     `system.html#180 <system.html#180>`_

-

-   `exclFilePermissions`:idx:

-     `os.html#165 <os.html#165>`_

-

-   `execCmd`:idx:

-     `osproc.html#105 <osproc.html#105>`_

-

-   `execProcess`:idx:

-     `osproc.html#103 <osproc.html#103>`_

-

-   `execProcesses`:idx:

-     `osproc.html#118 <osproc.html#118>`_

-

-   `execShellCmd`:idx:

-     `os.html#146 <os.html#146>`_

-

-   `executeCommand`:idx:

-     `osproc.html#106 <osproc.html#106>`_

-

-   `executeProcess`:idx:

-     `osproc.html#104 <osproc.html#104>`_

-

-   `executeShellCommand`:idx:

-     `os.html#145 <os.html#145>`_

-

-   `ExeExt`:idx:

-     `os.html#107 <os.html#107>`_

-

-   `existsCookie`:idx:

-     `cgi.html#147 <cgi.html#147>`_

-

-   `existsDir`:idx:

-     `os.html#115 <os.html#115>`_

-

-   `existsEnv`:idx:

-     `os.html#148 <os.html#148>`_

-

-   `existsFile`:idx:

-     `os.html#114 <os.html#114>`_

-

-   `exp`:idx:

-     `math.html#119 <math.html#119>`_

-

-   `expandFilename`:idx:

-     `os.html#132 <os.html#132>`_

-

-   `expectKind`:idx:

-     `macros.html#147 <macros.html#147>`_

-

-   `expectLen`:idx:

-     `macros.html#149 <macros.html#149>`_

-

-   `expectMinLen`:idx:

-     `macros.html#148 <macros.html#148>`_

-

-   `exportc`:idx:

-     `manual.html#250 <manual.html#250>`_

-

-   `expr`:idx:

-     `system.html#115 <system.html#115>`_

-

-   `expression macros`:idx:

-     `tut2.html#111 <tut2.html#111>`_

-

-   `extractDir`:idx:

-     `os.html#130 <os.html#130>`_

-

-   `extractFileExt`:idx:

-     `os.html#134 <os.html#134>`_

-

-   `extractFilename`:idx:

-     `os.html#131 <os.html#131>`_

-

-   `extractFileTrunk`:idx:

-     `os.html#135 <os.html#135>`_

-

-   `ExtSep`:idx:

-     `os.html#109 <os.html#109>`_

-

-   `fac`:idx:

-     `math.html#106 <math.html#106>`_

-

-   `fastcall`:idx:

-     `manual.html#175 <manual.html#175>`_

-

-   `FastRows`:idx:

-     * `db_postgres.html#110 <db_postgres.html#110>`_

-     * `db_mysql.html#110 <db_mysql.html#110>`_

-

-   `fastRuneAt`:idx:

-     `unicode.html#108 <unicode.html#108>`_

-

-   `fatal`:idx:

-     `manual.html#242 <manual.html#242>`_

-

-   `FFI`:idx:

-     `manual.html#248 <manual.html#248>`_

-

-   `fieldset`:idx:

-     `xmlgen.html#130 <xmlgen.html#130>`_

-

-   `FIELD_TYPE_BIT`:idx:

-     `mysql.html#231 <mysql.html#231>`_

-

-   `FIELD_TYPE_BLOB`:idx:

-     `mysql.html#225 <mysql.html#225>`_

-

-   `FIELD_TYPE_CHAR`:idx:

-     `mysql.html#228 <mysql.html#228>`_

-

-   `FIELD_TYPE_DATE`:idx:

-     `mysql.html#215 <mysql.html#215>`_

-

-   `FIELD_TYPE_DATETIME`:idx:

-     `mysql.html#217 <mysql.html#217>`_

-

-   `FIELD_TYPE_DECIMAL`:idx:

-     `mysql.html#204 <mysql.html#204>`_

-

-   `FIELD_TYPE_DOUBLE`:idx:

-     `mysql.html#210 <mysql.html#210>`_

-

-   `FIELD_TYPE_ENUM`:idx:

-     `mysql.html#220 <mysql.html#220>`_

-

-   `FIELD_TYPE_FLOAT`:idx:

-     `mysql.html#209 <mysql.html#209>`_

-

-   `FIELD_TYPE_GEOMETRY`:idx:

-     `mysql.html#230 <mysql.html#230>`_

-

-   `FIELD_TYPE_INT24`:idx:

-     `mysql.html#214 <mysql.html#214>`_

-

-   `FIELD_TYPE_INTERVAL`:idx:

-     `mysql.html#229 <mysql.html#229>`_

-

-   `FIELD_TYPE_LONG`:idx:

-     `mysql.html#208 <mysql.html#208>`_

-

-   `FIELD_TYPE_LONG_BLOB`:idx:

-     `mysql.html#224 <mysql.html#224>`_

-

-   `FIELD_TYPE_LONGLONG`:idx:

-     `mysql.html#213 <mysql.html#213>`_

-

-   `FIELD_TYPE_MEDIUM_BLOB`:idx:

-     `mysql.html#223 <mysql.html#223>`_

-

-   `FIELD_TYPE_NEWDATE`:idx:

-     `mysql.html#219 <mysql.html#219>`_

-

-   `FIELD_TYPE_NEWDECIMAL`:idx:

-     `mysql.html#205 <mysql.html#205>`_

-

-   `FIELD_TYPE_NULL`:idx:

-     `mysql.html#211 <mysql.html#211>`_

-

-   `FIELD_TYPE_SET`:idx:

-     `mysql.html#221 <mysql.html#221>`_

-

-   `FIELD_TYPE_SHORT`:idx:

-     `mysql.html#207 <mysql.html#207>`_

-

-   `FIELD_TYPE_STRING`:idx:

-     `mysql.html#227 <mysql.html#227>`_

-

-   `FIELD_TYPE_TIME`:idx:

-     `mysql.html#216 <mysql.html#216>`_

-

-   `FIELD_TYPE_TIMESTAMP`:idx:

-     `mysql.html#212 <mysql.html#212>`_

-

-   `FIELD_TYPE_TINY`:idx:

-     `mysql.html#206 <mysql.html#206>`_

-

-   `FIELD_TYPE_TINY_BLOB`:idx:

-     `mysql.html#222 <mysql.html#222>`_

-

-   `FIELD_TYPE_VAR_STRING`:idx:

-     `mysql.html#226 <mysql.html#226>`_

-

-   `FIELD_TYPE_YEAR`:idx:

-     `mysql.html#218 <mysql.html#218>`_

-

-   `fileHandle`:idx:

-     `system.html#536 <system.html#536>`_

-

-   `fileNewer`:idx:

-     `os.html#119 <os.html#119>`_

-

-   `FILE_OFFSET_BITS`:idx:

-     `libcurl.html#263 <libcurl.html#263>`_

-

-   `FILESIZEBITS`:idx:

-     `libcurl.html#264 <libcurl.html#264>`_

-

-   `FileSystemCaseSensitive`:idx:

-     `os.html#106 <os.html#106>`_

-

-   `final`:idx:

-     `manual.html#239 <manual.html#239>`_

-

-   `finally`:idx:

-     `manual.html#197 <manual.html#197>`_

-

-   `find`:idx:

-     * `system.html#475 <system.html#475>`_

-     * `strutils.html#119 <strutils.html#119>`_

-     * `strutils.html#120 <strutils.html#120>`_

-     * `strutils.html#121 <strutils.html#121>`_

-     * `regexprs.html#109 <regexprs.html#109>`_

-     * `regexprs.html#110 <regexprs.html#110>`_

-     * `pegs.html#138 <pegs.html#138>`_

-     * `pegs.html#139 <pegs.html#139>`_

-

-   `float`:idx:

-     `system.html#106 <system.html#106>`_

-

-   `float32`:idx:

-     `system.html#107 <system.html#107>`_

-

-   `float64`:idx:

-     `system.html#108 <system.html#108>`_

-

-   `floatChecks`:idx:

-     `manual.html#152 <manual.html#152>`_

-

-   `floatVal`:idx:

-     `macros.html#124 <macros.html#124>`_

-

-   `floatVal=`:idx:

-     `macros.html#130 <macros.html#130>`_

-

-   `FlushFile`:idx:

-     `system.html#513 <system.html#513>`_

-

-   `for`:idx:

-     * `manual.html#214 <manual.html#214>`_

-     * `tut1.html#105 <tut1.html#105>`_

-

-   `form`:idx:

-     `xmlgen.html#131 <xmlgen.html#131>`_

-

-   `form feed`:idx:

-     `manual.html#124 <manual.html#124>`_

-

-   `forward`:idx:

-     `manual.html#209 <manual.html#209>`_

-

-   `frexp`:idx:

-     `math.html#120 <math.html#120>`_

-

-   `functional`:idx:

-     * `manual.html#169 <manual.html#169>`_

-     * `tut1.html#124 <tut1.html#124>`_

-

-   `FUNCTIONPOINT`:idx:

-     `libcurl.html#265 <libcurl.html#265>`_

-

-   `functions`:idx:

-     `manual.html#207 <manual.html#207>`_

-

-   `GC_disable`:idx:

-     `system.html#479 <system.html#479>`_

-

-   `GC_disableMarkAndSweep`:idx:

-     `system.html#485 <system.html#485>`_

-

-   `GC_enable`:idx:

-     `system.html#480 <system.html#480>`_

-

-   `GC_enableMarkAndSweep`:idx:

-     `system.html#484 <system.html#484>`_

-

-   `GC_fullCollect`:idx:

-     `system.html#481 <system.html#481>`_

-

-   `GC_getStatistics`:idx:

-     `system.html#486 <system.html#486>`_

-

-   `GC_ref`:idx:

-     * `system.html#487 <system.html#487>`_

-     * `system.html#488 <system.html#488>`_

-     * `system.html#489 <system.html#489>`_

-

-   `GC_setStrategy`:idx:

-     `system.html#483 <system.html#483>`_

-

-   `GC_unref`:idx:

-     * `system.html#490 <system.html#490>`_

-     * `system.html#491 <system.html#491>`_

-     * `system.html#492 <system.html#492>`_

-

-   `generalized raw string literal`:idx:

-     `manual.html#136 <manual.html#136>`_

-

-   `generic character types`:idx:

-     `regexprs.html#102 <regexprs.html#102>`_

-

-   `Generics`:idx:

-     * `manual.html#218 <manual.html#218>`_

-     * `tut2.html#109 <tut2.html#109>`_

-

-   `get`:idx:

-     `httpclient.html#106 <httpclient.html#106>`_

-

-   `GetAllRows`:idx:

-     * `db_postgres.html#111 <db_postgres.html#111>`_

-     * `db_mysql.html#111 <db_mysql.html#111>`_

-

-   `getApplicationDir`:idx:

-     `os.html#169 <os.html#169>`_

-

-   `getApplicationFilename`:idx:

-     `os.html#168 <os.html#168>`_

-

-   `getClockStr`:idx:

-     `times.html#112 <times.html#112>`_

-

-   `getColNumber`:idx:

-     `lexbase.html#107 <lexbase.html#107>`_

-

-   `getColumn`:idx:

-     * `parsecfg.html#107 <parsecfg.html#107>`_

-     * `parsexml.html#117 <parsexml.html#117>`_

-

-   `getConfigDir`:idx:

-     `os.html#167 <os.html#167>`_

-

-   `getContent`:idx:

-     `httpclient.html#107 <httpclient.html#107>`_

-

-   `getContentLength`:idx:

-     `cgi.html#111 <cgi.html#111>`_

-

-   `getContentType`:idx:

-     `cgi.html#112 <cgi.html#112>`_

-

-   `getCookie`:idx:

-     `cgi.html#146 <cgi.html#146>`_

-

-   `getCreationTime`:idx:

-     `os.html#118 <os.html#118>`_

-

-   `getCurrentDir`:idx:

-     `os.html#120 <os.html#120>`_

-

-   `getCurrentExceptionMsg`:idx:

-     `system.html#437 <system.html#437>`_

-

-   `getCurrentLine`:idx:

-     `lexbase.html#106 <lexbase.html#106>`_

-

-   `getDateStr`:idx:

-     `times.html#111 <times.html#111>`_

-

-   `getDocumentRoot`:idx:

-     `cgi.html#113 <cgi.html#113>`_

-

-   `getEnv`:idx:

-     `os.html#147 <os.html#147>`_

-

-   `getFilename`:idx:

-     * `parsecfg.html#109 <parsecfg.html#109>`_

-     * `parsexml.html#119 <parsexml.html#119>`_

-

-   `getFilePermissions`:idx:

-     `os.html#162 <os.html#162>`_

-

-   `getFilePos`:idx:

-     `system.html#533 <system.html#533>`_

-

-   `getFileSize`:idx:

-     `system.html#525 <system.html#525>`_

-

-   `getFreeMem`:idx:

-     `system.html#443 <system.html#443>`_

-

-   `getGatewayInterface`:idx:

-     `cgi.html#114 <cgi.html#114>`_

-

-   `getGMTime`:idx:

-     `times.html#107 <times.html#107>`_

-

-   `getHomeDir`:idx:

-     `os.html#166 <os.html#166>`_

-

-   `getHttpAccept`:idx:

-     `cgi.html#115 <cgi.html#115>`_

-

-   `getHttpAcceptCharset`:idx:

-     `cgi.html#116 <cgi.html#116>`_

-

-   `getHttpAcceptEncoding`:idx:

-     `cgi.html#117 <cgi.html#117>`_

-

-   `getHttpAcceptLanguage`:idx:

-     `cgi.html#118 <cgi.html#118>`_

-

-   `getHttpConnection`:idx:

-     `cgi.html#119 <cgi.html#119>`_

-

-   `getHttpCookie`:idx:

-     `cgi.html#120 <cgi.html#120>`_

-

-   `getHttpHost`:idx:

-     `cgi.html#121 <cgi.html#121>`_

-

-   `getHttpReferer`:idx:

-     `cgi.html#122 <cgi.html#122>`_

-

-   `getHttpUserAgent`:idx:

-     `cgi.html#123 <cgi.html#123>`_

-

-   `getLastAccessTime`:idx:

-     `os.html#117 <os.html#117>`_

-

-   `getLastModificationTime`:idx:

-     `os.html#116 <os.html#116>`_

-

-   `getLine`:idx:

-     * `parsecfg.html#108 <parsecfg.html#108>`_

-     * `parsexml.html#118 <parsexml.html#118>`_

-

-   `getLocalTime`:idx:

-     `times.html#106 <times.html#106>`_

-

-   `getMD5`:idx:

-     `md5.html#106 <md5.html#106>`_

-

-   `getOccupiedMem`:idx:

-     `system.html#442 <system.html#442>`_

-

-   `getopt`:idx:

-     `parseopt.html#108 <parseopt.html#108>`_

-

-   `getPathInfo`:idx:

-     `cgi.html#124 <cgi.html#124>`_

-

-   `getPathTranslated`:idx:

-     `cgi.html#125 <cgi.html#125>`_

-

-   `getQueryString`:idx:

-     `cgi.html#126 <cgi.html#126>`_

-

-   `getRefcount`:idx:

-     `system.html#436 <system.html#436>`_

-

-   `getRemoteAddr`:idx:

-     `cgi.html#127 <cgi.html#127>`_

-

-   `getRemoteHost`:idx:

-     `cgi.html#128 <cgi.html#128>`_

-

-   `getRemoteIdent`:idx:

-     `cgi.html#129 <cgi.html#129>`_

-

-   `getRemotePort`:idx:

-     `cgi.html#130 <cgi.html#130>`_

-

-   `getRemoteUser`:idx:

-     `cgi.html#131 <cgi.html#131>`_

-

-   `getRequestMethod`:idx:

-     `cgi.html#132 <cgi.html#132>`_

-

-   `getRequestURI`:idx:

-     `cgi.html#133 <cgi.html#133>`_

-

-   `getRestOfCommandLine`:idx:

-     `parseopt.html#107 <parseopt.html#107>`_

-

-   `get_salt_from_password`:idx:

-     `mysql.html#280 <mysql.html#280>`_

-

-   `get_salt_from_password_323`:idx:

-     `mysql.html#274 <mysql.html#274>`_

-

-   `getScriptFilename`:idx:

-     `cgi.html#134 <cgi.html#134>`_

-

-   `getScriptName`:idx:

-     `cgi.html#135 <cgi.html#135>`_

-

-   `getServerAddr`:idx:

-     `cgi.html#136 <cgi.html#136>`_

-

-   `getServerAdmin`:idx:

-     `cgi.html#137 <cgi.html#137>`_

-

-   `getServerName`:idx:

-     `cgi.html#138 <cgi.html#138>`_

-

-   `getServerPort`:idx:

-     `cgi.html#139 <cgi.html#139>`_

-

-   `getServerProtocol`:idx:

-     `cgi.html#140 <cgi.html#140>`_

-

-   `getServerSignature`:idx:

-     `cgi.html#141 <cgi.html#141>`_

-

-   `getServerSoftware`:idx:

-     `cgi.html#142 <cgi.html#142>`_

-

-   `getStartMilsecs`:idx:

-     `times.html#116 <times.html#116>`_

-

-   `getStream`:idx:

-     `zipfiles.html#109 <zipfiles.html#109>`_

-

-   `getTime`:idx:

-     `times.html#105 <times.html#105>`_

-

-   `getTotalMem`:idx:

-     `system.html#444 <system.html#444>`_

-

-   `get_tty_password`:idx:

-     `mysql.html#282 <mysql.html#282>`_

-

-   `GetValue`:idx:

-     * `db_postgres.html#113 <db_postgres.html#113>`_

-     * `db_mysql.html#113 <db_mysql.html#113>`_

-

-   `gptr`:idx:

-     `mysql.html#105 <mysql.html#105>`_

-

-   `GROUP_FLAG`:idx:

-     `mysql.html#139 <mysql.html#139>`_

-

-   `h1`:idx:

-     `xmlgen.html#132 <xmlgen.html#132>`_

-

-   `h2`:idx:

-     `xmlgen.html#133 <xmlgen.html#133>`_

-

-   `h3`:idx:

-     `xmlgen.html#134 <xmlgen.html#134>`_

-

-   `h4`:idx:

-     `xmlgen.html#135 <xmlgen.html#135>`_

-

-   `h5`:idx:

-     `xmlgen.html#136 <xmlgen.html#136>`_

-

-   `h6`:idx:

-     `xmlgen.html#137 <xmlgen.html#137>`_

-

-   `HandleCR`:idx:

-     `lexbase.html#108 <lexbase.html#108>`_

-

-   `HandleLF`:idx:

-     `lexbase.html#109 <lexbase.html#109>`_

-

-   `hash`:idx:

-     * `hashes.html#103 <hashes.html#103>`_

-     * `hashes.html#104 <hashes.html#104>`_

-     * `hashes.html#105 <hashes.html#105>`_

-     * `hashes.html#106 <hashes.html#106>`_

-     * `hashes.html#107 <hashes.html#107>`_

-

-   `hashData`:idx:

-     `hashes.html#102 <hashes.html#102>`_

-

-   `hashIgnoreCase`:idx:

-     `hashes.html#109 <hashes.html#109>`_

-

-   `hashIgnoreStyle`:idx:

-     `hashes.html#108 <hashes.html#108>`_

-

-   `hash_password`:idx:

-     `mysql.html#270 <mysql.html#270>`_

-

-   `hasKey`:idx:

-     `strtabs.html#108 <strtabs.html#108>`_

-

-   `head`:idx:

-     `xmlgen.html#138 <xmlgen.html#138>`_

-

-   `header`:idx:

-     `nimrodc.html#102 <nimrodc.html#102>`_

-

-   `high`:idx:

-     `system.html#126 <system.html#126>`_

-

-   `hint`:idx:

-     * `manual.html#231 <manual.html#231>`_

-     * `manual.html#244 <manual.html#244>`_

-     * `macros.html#140 <macros.html#140>`_

-

-   `hostCPU`:idx:

-     `system.html#407 <system.html#407>`_

-

-   `HOSTNAME_LENGTH`:idx:

-     `mysql.html#111 <mysql.html#111>`_

-

-   `hostOS`:idx:

-     `system.html#406 <system.html#406>`_

-

-   `hr`:idx:

-     `xmlgen.html#140 <xmlgen.html#140>`_

-

-   `html`:idx:

-     `xmlgen.html#139 <xmlgen.html#139>`_

-

-   `HTML`:idx:

-     * `parsexml.html#102 <parsexml.html#102>`_

-     * `xmlgen.html#102 <xmlgen.html#102>`_

-

-   `HTTPPOST_BUFFER`:idx:

-     `libcurl.html#266 <libcurl.html#266>`_

-

-   `HTTPPOST_FILENAME`:idx:

-     `libcurl.html#267 <libcurl.html#267>`_

-

-   `HTTPPOST_PTRBUFFER`:idx:

-     `libcurl.html#268 <libcurl.html#268>`_

-

-   `HTTPPOST_PTRCONTENTS`:idx:

-     `libcurl.html#269 <libcurl.html#269>`_

-

-   `HTTPPOST_PTRNAME`:idx:

-     `libcurl.html#270 <libcurl.html#270>`_

-

-   `HTTPPOST_READFILE`:idx:

-     `libcurl.html#271 <libcurl.html#271>`_

-

-   `hypot`:idx:

-     `math.html#128 <math.html#128>`_

-

-   `i`:idx:

-     `xmlgen.html#141 <xmlgen.html#141>`_

-

-   `ident`:idx:

-     * `pegs.html#130 <pegs.html#130>`_

-     * `macros.html#126 <macros.html#126>`_

-

-   `ident=`:idx:

-     `macros.html#132 <macros.html#132>`_

-

-   `identChars`:idx:

-     `pegs.html#128 <pegs.html#128>`_

-

-   `IdentChars`:idx:

-     `strutils.html#105 <strutils.html#105>`_

-

-   `identifier`:idx:

-     `manual.html#105 <manual.html#105>`_

-

-   `Identifiers`:idx:

-     `manual.html#116 <manual.html#116>`_

-

-   `IdentStartChars`:idx:

-     `strutils.html#106 <strutils.html#106>`_

-

-   `identStartChars`:idx:

-     `pegs.html#129 <pegs.html#129>`_

-

-   `if`:idx:

-     `manual.html#189 <manual.html#189>`_

-

-   `img`:idx:

-     `xmlgen.html#142 <xmlgen.html#142>`_

-

-   `implicit block`:idx:

-     `manual.html#216 <manual.html#216>`_

-

-   `import`:idx:

-     * `manual.html#227 <manual.html#227>`_

-     * `tut1.html#128 <tut1.html#128>`_

-

-   `importc`:idx:

-     `manual.html#249 <manual.html#249>`_

-

-   `in`:idx:

-     `system.html#357 <system.html#357>`_

-

-   `inc`:idx:

-     `system.html#171 <system.html#171>`_

-

-   `incl`:idx:

-     `system.html#179 <system.html#179>`_

-

-   `inclFilePermissions`:idx:

-     `os.html#164 <os.html#164>`_

-

-   `include`:idx:

-     `tut1.html#129 <tut1.html#129>`_

-

-   `indentation sensitive`:idx:

-     `manual.html#113 <manual.html#113>`_

-

-   `inf`:idx:

-     `system.html#438 <system.html#438>`_

-

-   `InfChecks`:idx:

-     `manual.html#151 <manual.html#151>`_

-

-   `information hiding`:idx:

-     * `manual.html#225 <manual.html#225>`_

-     * `tut1.html#126 <tut1.html#126>`_

-

-   `init`:idx:

-     `parseopt.html#104 <parseopt.html#104>`_

-

-   `initOptParser`:idx:

-     `parseopt.html#103 <parseopt.html#103>`_

-

-   `inline`:idx:

-     `manual.html#174 <manual.html#174>`_

-

-   `input`:idx:

-     `xmlgen.html#143 <xmlgen.html#143>`_

-

-   `inputStream`:idx:

-     `osproc.html#114 <osproc.html#114>`_

-

-   `ins`:idx:

-     `xmlgen.html#144 <xmlgen.html#144>`_

-

-   `insert`:idx:

-     `system.html#378 <system.html#378>`_

-

-   `InsertID`:idx:

-     * `db_postgres.html#115 <db_postgres.html#115>`_

-     * `db_mysql.html#115 <db_mysql.html#115>`_

-

-   `int`:idx:

-     `system.html#101 <system.html#101>`_

-

-   `int16`:idx:

-     `system.html#103 <system.html#103>`_

-

-   `int32`:idx:

-     `system.html#104 <system.html#104>`_

-

-   `int64`:idx:

-     `system.html#105 <system.html#105>`_

-

-   `int8`:idx:

-     `system.html#102 <system.html#102>`_

-

-   `INTERNAL_NUM_FIELD`:idx:

-     `mysql.html#306 <mysql.html#306>`_

-

-   `intToStr`:idx:

-     `strutils.html#141 <strutils.html#141>`_

-

-   `intVal`:idx:

-     `macros.html#123 <macros.html#123>`_

-

-   `intVal=`:idx:

-     `macros.html#129 <macros.html#129>`_

-

-   `is`:idx:

-     `system.html#359 <system.html#359>`_

-

-   `isAlpha`:idx:

-     `unicode.html#116 <unicode.html#116>`_

-

-   `IS_BLOB`:idx:

-     `mysql.html#304 <mysql.html#304>`_

-

-   `isLower`:idx:

-     `unicode.html#114 <unicode.html#114>`_

-

-   `isMainModule`:idx:

-     `system.html#398 <system.html#398>`_

-

-   `isNil`:idx:

-     * `system.html#465 <system.html#465>`_

-     * `system.html#466 <system.html#466>`_

-     * `system.html#467 <system.html#467>`_

-     * `system.html#468 <system.html#468>`_

-     * `system.html#469 <system.html#469>`_

-     * `system.html#470 <system.html#470>`_

-

-   `is_not`:idx:

-     `system.html#360 <system.html#360>`_

-

-   `IS_NOT_NULL`:idx:

-     `mysql.html#303 <mysql.html#303>`_

-

-   `IS_NUM`:idx:

-     `mysql.html#305 <mysql.html#305>`_

-

-   `IS_NUM_FIELD`:idx:

-     `mysql.html#307 <mysql.html#307>`_

-

-   `isPowerOfTwo`:idx:

-     `math.html#107 <math.html#107>`_

-

-   `IS_PRI_KEY`:idx:

-     `mysql.html#302 <mysql.html#302>`_

-

-   `isTitle`:idx:

-     `unicode.html#117 <unicode.html#117>`_

-

-   `isUpper`:idx:

-     `unicode.html#115 <unicode.html#115>`_

-

-   `isWhiteSpace`:idx:

-     `unicode.html#118 <unicode.html#118>`_

-

-   `Item_result`:idx:

-     `mysql.html#255 <mysql.html#255>`_

-

-   `items`:idx:

-     * `system.html#459 <system.html#459>`_

-     * `system.html#460 <system.html#460>`_

-     * `system.html#461 <system.html#461>`_

-     * `system.html#462 <system.html#462>`_

-     * `system.html#463 <system.html#463>`_

-     * `system.html#464 <system.html#464>`_

-     * `ropes.html#117 <ropes.html#117>`_

-

-   `iterator`:idx:

-     `manual.html#215 <manual.html#215>`_

-

-   `iterOverEnvironment`:idx:

-     `os.html#150 <os.html#150>`_

-

-   `join`:idx:

-     * `strutils.html#153 <strutils.html#153>`_

-     * `strutils.html#154 <strutils.html#154>`_

-

-   `JoinPath`:idx:

-     * `os.html#122 <os.html#122>`_

-     * `os.html#123 <os.html#123>`_

-

-   `kbd`:idx:

-     `xmlgen.html#145 <xmlgen.html#145>`_

-

-   `keywords`:idx:

-     `manual.html#117 <manual.html#117>`_

-

-   `kind`:idx:

-     * `parsexml.html#110 <parsexml.html#110>`_

-     * `macros.html#122 <macros.html#122>`_

-

-   `l-values`:idx:

-     `manual.html#107 <manual.html#107>`_

-

-   `label`:idx:

-     `xmlgen.html#146 <xmlgen.html#146>`_

-

-   `leaves`:idx:

-     `ropes.html#116 <ropes.html#116>`_

-

-   `legend`:idx:

-     `xmlgen.html#147 <xmlgen.html#147>`_

-

-   `len`:idx:

-     * `system.html#174 <system.html#174>`_

-     * `system.html#175 <system.html#175>`_

-     * `system.html#176 <system.html#176>`_

-     * `system.html#177 <system.html#177>`_

-     * `system.html#178 <system.html#178>`_

-     * `strtabs.html#109 <strtabs.html#109>`_

-     * `parsesql.html#107 <parsesql.html#107>`_

-     * `macros.html#118 <macros.html#118>`_

-     * `ropes.html#103 <ropes.html#103>`_

-

-   `letters`:idx:

-     `pegs.html#125 <pegs.html#125>`_

-

-   `Letters`:idx:

-     `strutils.html#103 <strutils.html#103>`_

-

-   `li`:idx:

-     `xmlgen.html#148 <xmlgen.html#148>`_

-

-   `LIBCURL_VERSION`:idx:

-     `libcurl.html#272 <libcurl.html#272>`_

-

-   `LIBCURL_VERSION_MAJOR`:idx:

-     `libcurl.html#273 <libcurl.html#273>`_

-

-   `LIBCURL_VERSION_MINOR`:idx:

-     `libcurl.html#274 <libcurl.html#274>`_

-

-   `LIBCURL_VERSION_NUM`:idx:

-     `libcurl.html#275 <libcurl.html#275>`_

-

-   `LIBCURL_VERSION_PATCH`:idx:

-     `libcurl.html#276 <libcurl.html#276>`_

-

-   `line feed`:idx:

-     `manual.html#123 <manual.html#123>`_

-

-   `lineDir`:idx:

-     `nimrodc.html#103 <nimrodc.html#103>`_

-

-   `lines`:idx:

-     * `system.html#534 <system.html#534>`_

-     * `system.html#535 <system.html#535>`_

-

-   `lineTrace`:idx:

-     `nimrodc.html#105 <nimrodc.html#105>`_

-

-   `link`:idx:

-     `xmlgen.html#149 <xmlgen.html#149>`_

-

-   `ln`:idx:

-     `math.html#116 <math.html#116>`_

-

-   `load_defaults`:idx:

-     `mysql.html#285 <mysql.html#285>`_

-

-   `LoadLib`:idx:

-     `dynlib.html#102 <dynlib.html#102>`_

-

-   `local type inference`:idx:

-     `tut1.html#101 <tut1.html#101>`_

-

-   `LOCAL_HOST`:idx:

-     `mysql.html#115 <mysql.html#115>`_

-

-   `LOCAL_HOST_NAMEDPIPE`:idx:

-     `mysql.html#116 <mysql.html#116>`_

-

-   `LOCAL_INFILE_ERROR_LEN`:idx:

-     `mysql.html#424 <mysql.html#424>`_

-

-   `locations`:idx:

-     `manual.html#101 <manual.html#101>`_

-

-   `log10`:idx:

-     `math.html#117 <math.html#117>`_

-

-   `log2`:idx:

-     `math.html#118 <math.html#118>`_

-

-   `low`:idx:

-     `system.html#127 <system.html#127>`_

-

-   `Macros`:idx:

-     `manual.html#221 <manual.html#221>`_

-

-   `make_password_from_salt`:idx:

-     `mysql.html#281 <mysql.html#281>`_

-

-   `make_password_from_salt_323`:idx:

-     `mysql.html#275 <mysql.html#275>`_

-

-   `make_scrambled_password`:idx:

-     `mysql.html#277 <mysql.html#277>`_

-

-   `make_scrambled_password_323`:idx:

-     `mysql.html#271 <mysql.html#271>`_

-

-   `MANAGER_ACCESS`:idx:

-     `mysql.html#336 <mysql.html#336>`_

-

-   `MANAGER_CLIENT_ERR`:idx:

-     `mysql.html#337 <mysql.html#337>`_

-

-   `MANAGER_INFO`:idx:

-     `mysql.html#335 <mysql.html#335>`_

-

-   `MANAGER_INTERNAL_ERR`:idx:

-     `mysql.html#338 <mysql.html#338>`_

-

-   `MANAGER_OK`:idx:

-     `mysql.html#334 <mysql.html#334>`_

-

-   `map`:idx:

-     `xmlgen.html#150 <xmlgen.html#150>`_

-

-   `match`:idx:

-     * `regexprs.html#106 <regexprs.html#106>`_

-     * `regexprs.html#107 <regexprs.html#107>`_

-     * `pegs.html#134 <pegs.html#134>`_

-     * `pegs.html#135 <pegs.html#135>`_

-

-   `matchLen`:idx:

-     * `regexprs.html#108 <regexprs.html#108>`_

-     * `pegs.html#136 <pegs.html#136>`_

-     * `pegs.html#137 <pegs.html#137>`_

-

-   `max`:idx:

-     * `system.html#324 <system.html#324>`_

-     * `system.html#453 <system.html#453>`_

-     * `system.html#454 <system.html#454>`_

-     * `system.html#455 <system.html#455>`_

-     * `system.html#456 <system.html#456>`_

-     * `system.html#457 <system.html#457>`_

-     * `system.html#458 <system.html#458>`_

-

-   `MAX_BIGINT_WIDTH`:idx:

-     `mysql.html#194 <mysql.html#194>`_

-

-   `MAX_BLOB_WIDTH`:idx:

-     `mysql.html#196 <mysql.html#196>`_

-

-   `MAX_CHAR_WIDTH`:idx:

-     `mysql.html#195 <mysql.html#195>`_

-

-   `MAX_INT_WIDTH`:idx:

-     `mysql.html#193 <mysql.html#193>`_

-

-   `MAX_MEDIUMINT_WIDTH`:idx:

-     `mysql.html#192 <mysql.html#192>`_

-

-   `MAX_MYSQL_MANAGER_ERR`:idx:

-     `mysql.html#332 <mysql.html#332>`_

-

-   `MAX_MYSQL_MANAGER_MSG`:idx:

-     `mysql.html#333 <mysql.html#333>`_

-

-   `MAX_SMALLINT_WIDTH`:idx:

-     `mysql.html#191 <mysql.html#191>`_

-

-   `MaxSubpatterns`:idx:

-     * `regexprs.html#105 <regexprs.html#105>`_

-     * `pegs.html#132 <pegs.html#132>`_

-

-   `MAX_TINYINT_WIDTH`:idx:

-     `mysql.html#190 <mysql.html#190>`_

-

-   `MD5Context`:idx:

-     `md5.html#102 <md5.html#102>`_

-

-   `MD5Digest`:idx:

-     `md5.html#101 <md5.html#101>`_

-

-   `MD5Final`:idx:

-     `md5.html#105 <md5.html#105>`_

-

-   `MD5Init`:idx:

-     `md5.html#103 <md5.html#103>`_

-

-   `MD5Update`:idx:

-     `md5.html#104 <md5.html#104>`_

-

-   `mean`:idx:

-     `math.html#111 <math.html#111>`_

-

-   `MEM_ROOT`:idx:

-     `mysql.html#325 <mysql.html#325>`_

-

-   `meta`:idx:

-     `xmlgen.html#151 <xmlgen.html#151>`_

-

-   `method call syntax`:idx:

-     `tut2.html#105 <tut2.html#105>`_

-

-   `methods`:idx:

-     `manual.html#206 <manual.html#206>`_

-

-   `min`:idx:

-     * `system.html#323 <system.html#323>`_

-     * `system.html#447 <system.html#447>`_

-     * `system.html#448 <system.html#448>`_

-     * `system.html#449 <system.html#449>`_

-     * `system.html#450 <system.html#450>`_

-     * `system.html#451 <system.html#451>`_

-     * `system.html#452 <system.html#452>`_

-

-   `mod`:idx:

-     * `system.html#228 <system.html#228>`_

-     * `system.html#229 <system.html#229>`_

-     * `system.html#230 <system.html#230>`_

-     * `system.html#231 <system.html#231>`_

-     * `system.html#232 <system.html#232>`_

-

-   `modify_defaults_file`:idx:

-     `mysql.html#284 <mysql.html#284>`_

-

-   `module`:idx:

-     * `manual.html#223 <manual.html#223>`_

-     * `tut1.html#125 <tut1.html#125>`_

-

-   `moveFile`:idx:

-     `os.html#143 <os.html#143>`_

-

-   `moveMem`:idx:

-     `system.html#417 <system.html#417>`_

-

-   `Multi-methods`:idx:

-     `manual.html#213 <manual.html#213>`_

-

-   `multi-methods`:idx:

-     `tut2.html#104 <tut2.html#104>`_

-

-   `MULTIPLE_KEY_FLAG`:idx:

-     `mysql.html#127 <mysql.html#127>`_

-

-   `my_bool`:idx:

-     `mysql.html#101 <mysql.html#101>`_

-

-   `MY_CHARSET_INFO`:idx:

-     `mysql.html#352 <mysql.html#352>`_

-

-   `my_connect`:idx:

-     `mysql.html#252 <mysql.html#252>`_

-

-   `my_init`:idx:

-     `mysql.html#286 <mysql.html#286>`_

-

-   `my_net_init`:idx:

-     `mysql.html#240 <mysql.html#240>`_

-

-   `my_net_local_init`:idx:

-     `mysql.html#241 <mysql.html#241>`_

-

-   `my_net_read`:idx:

-     `mysql.html#249 <mysql.html#249>`_

-

-   `my_net_write`:idx:

-     `mysql.html#246 <mysql.html#246>`_

-

-   `myodbc_remove_escape`:idx:

-     `mysql.html#465 <mysql.html#465>`_

-

-   `my_rnd`:idx:

-     `mysql.html#268 <mysql.html#268>`_

-

-   `my_socket`:idx:

-     `mysql.html#107 <mysql.html#107>`_

-

-   `mySQL`:idx:

-     `db_mysql.html#101 <db_mysql.html#101>`_

-

-   `MYSQL`:idx:

-     `mysql.html#357 <mysql.html#357>`_

-

-   `mysql_add_slave`:idx:

-     `mysql.html#435 <mysql.html#435>`_

-

-   `mysql_affected_rows`:idx:

-     `mysql.html#399 <mysql.html#399>`_

-

-   `mysql_autocommit`:idx:

-     `mysql.html#503 <mysql.html#503>`_

-

-   `MYSQL_BIND`:idx:

-     `mysql.html#379 <mysql.html#379>`_

-

-   `mysql_change_user`:idx:

-     `mysql.html#411 <mysql.html#411>`_

-

-   `mysql_character_set_name`:idx:

-     `mysql.html#407 <mysql.html#407>`_

-

-   `mysql_close`:idx:

-     `mysql.html#506 <mysql.html#506>`_

-

-   `mysql_commit`:idx:

-     `mysql.html#501 <mysql.html#501>`_

-

-   `mysql_connect`:idx:

-     `mysql.html#510 <mysql.html#510>`_

-

-   `MYSQL_COUNT_ERROR`:idx:

-     `mysql.html#310 <mysql.html#310>`_

-

-   `mysql_create_db`:idx:

-     `mysql.html#511 <mysql.html#511>`_

-

-   `MYSQL_DATA`:idx:

-     `mysql.html#329 <mysql.html#329>`_

-

-   `mysql_data_seek`:idx:

-     `mysql.html#454 <mysql.html#454>`_

-

-   `MYSQL_DATA_TRUNCATED`:idx:

-     `mysql.html#508 <mysql.html#508>`_

-

-   `mysql_debug`:idx:

-     `mysql.html#464 <mysql.html#464>`_

-

-   `mysql_disable_reads_from_master`:idx:

-     `mysql.html#430 <mysql.html#430>`_

-

-   `mysql_disable_rpl_parse`:idx:

-     `mysql.html#427 <mysql.html#427>`_

-

-   `mysql_drop_db`:idx:

-     `mysql.html#512 <mysql.html#512>`_

-

-   `mysql_dump_debug_info`:idx:

-     `mysql.html#437 <mysql.html#437>`_

-

-   `mysql_embedded`:idx:

-     `mysql.html#467 <mysql.html#467>`_

-

-   `mysql_enable_reads_from_master`:idx:

-     `mysql.html#429 <mysql.html#429>`_

-

-   `mysql_enable_rpl_parse`:idx:

-     `mysql.html#426 <mysql.html#426>`_

-

-   `mysql_enum_shutdown_level`:idx:

-     `mysql.html#236 <mysql.html#236>`_

-

-   `mysql_eof`:idx:

-     `mysql.html#393 <mysql.html#393>`_

-

-   `MYSQL_ERRMSG_SIZE`:idx:

-     `mysql.html#185 <mysql.html#185>`_

-

-   `mysql_errno`:idx:

-     `mysql.html#401 <mysql.html#401>`_

-

-   `mysql_errno_to_sqlstate`:idx:

-     `mysql.html#283 <mysql.html#283>`_

-

-   `mysql_error`:idx:

-     `mysql.html#402 <mysql.html#402>`_

-

-   `mysql_escape_string`:idx:

-     `mysql.html#461 <mysql.html#461>`_

-

-   `mysql_fetch_field`:idx:

-     `mysql.html#459 <mysql.html#459>`_

-

-   `mysql_fetch_field_direct`:idx:

-     `mysql.html#394 <mysql.html#394>`_

-

-   `mysql_fetch_fields`:idx:

-     `mysql.html#395 <mysql.html#395>`_

-

-   `mysql_fetch_lengths`:idx:

-     `mysql.html#458 <mysql.html#458>`_

-

-   `mysql_fetch_row`:idx:

-     `mysql.html#457 <mysql.html#457>`_

-

-   `MYSQL_FIELD`:idx:

-     `mysql.html#296 <mysql.html#296>`_

-

-   `mysql_field_count`:idx:

-     `mysql.html#398 <mysql.html#398>`_

-

-   `MYSQL_FIELD_OFFSET`:idx:

-     `mysql.html#301 <mysql.html#301>`_

-

-   `mysql_field_seek`:idx:

-     `mysql.html#456 <mysql.html#456>`_

-

-   `mysql_field_tell`:idx:

-     `mysql.html#397 <mysql.html#397>`_

-

-   `mysql_free_result`:idx:

-     `mysql.html#453 <mysql.html#453>`_

-

-   `mysql_get_character_set_info`:idx:

-     `mysql.html#423 <mysql.html#423>`_

-

-   `mysql_get_client_info`:idx:

-     `mysql.html#444 <mysql.html#444>`_

-

-   `mysql_get_client_version`:idx:

-     `mysql.html#445 <mysql.html#445>`_

-

-   `mysql_get_host_info`:idx:

-     `mysql.html#446 <mysql.html#446>`_

-

-   `mysql_get_parameters`:idx:

-     `mysql.html#388 <mysql.html#388>`_

-

-   `mysql_get_proto_info`:idx:

-     `mysql.html#448 <mysql.html#448>`_

-

-   `mysql_get_server_info`:idx:

-     `mysql.html#443 <mysql.html#443>`_

-

-   `mysql_get_server_version`:idx:

-     `mysql.html#447 <mysql.html#447>`_

-

-   `mysql_hex_string`:idx:

-     `mysql.html#462 <mysql.html#462>`_

-

-   `mysql_info`:idx:

-     `mysql.html#405 <mysql.html#405>`_

-

-   `mysql_init`:idx:

-     `mysql.html#409 <mysql.html#409>`_

-

-   `mysql_insert_id`:idx:

-     `mysql.html#400 <mysql.html#400>`_

-

-   `mysql_kill`:idx:

-     `mysql.html#439 <mysql.html#439>`_

-

-   `mysql_library_end`:idx:

-     `mysql.html#387 <mysql.html#387>`_

-

-   `mysql_library_init`:idx:

-     `mysql.html#386 <mysql.html#386>`_

-

-   `mysql_list_dbs`:idx:

-     `mysql.html#449 <mysql.html#449>`_

-

-   `mysql_list_fields`:idx:

-     `mysql.html#460 <mysql.html#460>`_

-

-   `mysql_list_processes`:idx:

-     `mysql.html#451 <mysql.html#451>`_

-

-   `mysql_list_tables`:idx:

-     `mysql.html#450 <mysql.html#450>`_

-

-   `MYSQL_LONG_DATA_HEADER`:idx:

-     `mysql.html#291 <mysql.html#291>`_

-

-   `MYSQL_MANAGER`:idx:

-     `mysql.html#370 <mysql.html#370>`_

-

-   `mysql_manager_close`:idx:

-     `mysql.html#470 <mysql.html#470>`_

-

-   `mysql_manager_command`:idx:

-     `mysql.html#471 <mysql.html#471>`_

-

-   `mysql_manager_connect`:idx:

-     `mysql.html#469 <mysql.html#469>`_

-

-   `mysql_manager_fetch_line`:idx:

-     `mysql.html#472 <mysql.html#472>`_

-

-   `mysql_manager_init`:idx:

-     `mysql.html#468 <mysql.html#468>`_

-

-   `mysql_master_query`:idx:

-     `mysql.html#419 <mysql.html#419>`_

-

-   `mysql_master_send_query`:idx:

-     `mysql.html#420 <mysql.html#420>`_

-

-   `MYSQL_METHODS`:idx:

-     `mysql.html#366 <mysql.html#366>`_

-

-   `mysql_more_results`:idx:

-     `mysql.html#504 <mysql.html#504>`_

-

-   `MYSQL_NAMEDPIPE`:idx:

-     `mysql.html#117 <mysql.html#117>`_

-

-   `mysql_next_result`:idx:

-     `mysql.html#505 <mysql.html#505>`_

-

-   `MYSQL_NO_DATA`:idx:

-     `mysql.html#507 <mysql.html#507>`_

-

-   `mysql_num_fields`:idx:

-     `mysql.html#392 <mysql.html#392>`_

-

-   `mysql_num_rows`:idx:

-     `mysql.html#391 <mysql.html#391>`_

-

-   `mysql_option`:idx:

-     `mysql.html#331 <mysql.html#331>`_

-

-   `mysql_options`:idx:

-     `mysql.html#452 <mysql.html#452>`_

-

-   `MYSQL_PARAMETERS`:idx:

-     `mysql.html#374 <mysql.html#374>`_

-

-   `mysql_ping`:idx:

-     `mysql.html#441 <mysql.html#441>`_

-

-   `mysql_protocol_type`:idx:

-     `mysql.html#345 <mysql.html#345>`_

-

-   `mysql_query`:idx:

-     `mysql.html#414 <mysql.html#414>`_

-

-   `mysql_read_query_result`:idx:

-     `mysql.html#473 <mysql.html#473>`_

-

-   `mysql_reads_from_master_enabled`:idx:

-     `mysql.html#431 <mysql.html#431>`_

-

-   `mysql_real_connect`:idx:

-     `mysql.html#412 <mysql.html#412>`_

-

-   `mysql_real_escape_string`:idx:

-     `mysql.html#463 <mysql.html#463>`_

-

-   `mysql_real_query`:idx:

-     `mysql.html#416 <mysql.html#416>`_

-

-   `mysql_refresh`:idx:

-     `mysql.html#438 <mysql.html#438>`_

-

-   `mysql_reload`:idx:

-     * `mysql.html#509 <mysql.html#509>`_

-     * `mysql.html#513 <mysql.html#513>`_

-

-   `MYSQL_RES`:idx:

-     `mysql.html#361 <mysql.html#361>`_

-

-   `mysql_rollback`:idx:

-     `mysql.html#502 <mysql.html#502>`_

-

-   `MYSQL_ROW`:idx:

-     `mysql.html#299 <mysql.html#299>`_

-

-   `MYSQL_ROW_OFFSET`:idx:

-     `mysql.html#316 <mysql.html#316>`_

-

-   `MYSQL_ROWS`:idx:

-     `mysql.html#313 <mysql.html#313>`_

-

-   `mysql_row_seek`:idx:

-     `mysql.html#455 <mysql.html#455>`_

-

-   `mysql_row_tell`:idx:

-     `mysql.html#396 <mysql.html#396>`_

-

-   `mysql_rpl_parse_enabled`:idx:

-     `mysql.html#428 <mysql.html#428>`_

-

-   `mysql_rpl_probe`:idx:

-     `mysql.html#433 <mysql.html#433>`_

-

-   `mysql_rpl_query_type`:idx:

-     `mysql.html#432 <mysql.html#432>`_

-

-   `mysql_rpl_type`:idx:

-     `mysql.html#346 <mysql.html#346>`_

-

-   `mysql_select_db`:idx:

-     `mysql.html#413 <mysql.html#413>`_

-

-   `mysql_send_query`:idx:

-     `mysql.html#415 <mysql.html#415>`_

-

-   `mysql_server_end`:idx:

-     `mysql.html#385 <mysql.html#385>`_

-

-   `mysql_server_init`:idx:

-     `mysql.html#384 <mysql.html#384>`_

-

-   `MYSQL_SERVICENAME`:idx:

-     `mysql.html#118 <mysql.html#118>`_

-

-   `mysql_set_character_set`:idx:

-     `mysql.html#408 <mysql.html#408>`_

-

-   `mysql_set_local_infile_default`:idx:

-     `mysql.html#425 <mysql.html#425>`_

-

-   `mysql_set_master`:idx:

-     `mysql.html#434 <mysql.html#434>`_

-

-   `mysql_set_server_option`:idx:

-     `mysql.html#440 <mysql.html#440>`_

-

-   `mysql_shutdown`:idx:

-     `mysql.html#436 <mysql.html#436>`_

-

-   `MYSQL_SHUTDOWN_KILLABLE_CONNECT`:idx:

-     `mysql.html#232 <mysql.html#232>`_

-

-   `MYSQL_SHUTDOWN_KILLABLE_LOCK_TABLE`:idx:

-     `mysql.html#234 <mysql.html#234>`_

-

-   `MYSQL_SHUTDOWN_KILLABLE_TRANS`:idx:

-     `mysql.html#233 <mysql.html#233>`_

-

-   `MYSQL_SHUTDOWN_KILLABLE_UPDATE`:idx:

-     `mysql.html#235 <mysql.html#235>`_

-

-   `mysql_slave_query`:idx:

-     `mysql.html#421 <mysql.html#421>`_

-

-   `mysql_slave_send_query`:idx:

-     `mysql.html#422 <mysql.html#422>`_

-

-   `mysql_sqlstate`:idx:

-     `mysql.html#403 <mysql.html#403>`_

-

-   `mysql_ssl_set`:idx:

-     `mysql.html#410 <mysql.html#410>`_

-

-   `mysql_stat`:idx:

-     `mysql.html#442 <mysql.html#442>`_

-

-   `mysql_status`:idx:

-     `mysql.html#344 <mysql.html#344>`_

-

-   `MYSQL_STMT`:idx:

-     `mysql.html#382 <mysql.html#382>`_

-

-   `mysql_stmt_affected_rows`:idx:

-     `mysql.html#498 <mysql.html#498>`_

-

-   `mysql_stmt_attr_get`:idx:

-     `mysql.html#482 <mysql.html#482>`_

-

-   `mysql_stmt_attr_set`:idx:

-     `mysql.html#481 <mysql.html#481>`_

-

-   `mysql_stmt_bind_param`:idx:

-     `mysql.html#483 <mysql.html#483>`_

-

-   `mysql_stmt_bind_result`:idx:

-     `mysql.html#484 <mysql.html#484>`_

-

-   `mysql_stmt_close`:idx:

-     `mysql.html#485 <mysql.html#485>`_

-

-   `mysql_stmt_data_seek`:idx:

-     `mysql.html#496 <mysql.html#496>`_

-

-   `mysql_stmt_errno`:idx:

-     `mysql.html#491 <mysql.html#491>`_

-

-   `mysql_stmt_error`:idx:

-     `mysql.html#492 <mysql.html#492>`_

-

-   `mysql_stmt_execute`:idx:

-     `mysql.html#476 <mysql.html#476>`_

-

-   `mysql_stmt_fetch`:idx:

-     `mysql.html#477 <mysql.html#477>`_

-

-   `mysql_stmt_fetch_column`:idx:

-     `mysql.html#478 <mysql.html#478>`_

-

-   `mysql_stmt_field_count`:idx:

-     `mysql.html#500 <mysql.html#500>`_

-

-   `mysql_stmt_free_result`:idx:

-     `mysql.html#487 <mysql.html#487>`_

-

-   `MYSQL_STMT_HEADER`:idx:

-     `mysql.html#290 <mysql.html#290>`_

-

-   `mysql_stmt_init`:idx:

-     `mysql.html#474 <mysql.html#474>`_

-

-   `mysql_stmt_insert_id`:idx:

-     `mysql.html#499 <mysql.html#499>`_

-

-   `mysql_stmt_num_rows`:idx:

-     `mysql.html#497 <mysql.html#497>`_

-

-   `mysql_stmt_param_count`:idx:

-     `mysql.html#480 <mysql.html#480>`_

-

-   `mysql_stmt_param_metadata`:idx:

-     `mysql.html#490 <mysql.html#490>`_

-

-   `mysql_stmt_prepare`:idx:

-     `mysql.html#475 <mysql.html#475>`_

-

-   `mysql_stmt_reset`:idx:

-     `mysql.html#486 <mysql.html#486>`_

-

-   `mysql_stmt_result_metadata`:idx:

-     `mysql.html#489 <mysql.html#489>`_

-

-   `mysql_stmt_row_seek`:idx:

-     `mysql.html#494 <mysql.html#494>`_

-

-   `mysql_stmt_row_tell`:idx:

-     `mysql.html#495 <mysql.html#495>`_

-

-   `mysql_stmt_send_long_data`:idx:

-     `mysql.html#488 <mysql.html#488>`_

-

-   `mysql_stmt_sqlstate`:idx:

-     `mysql.html#493 <mysql.html#493>`_

-

-   `mysql_stmt_store_result`:idx:

-     `mysql.html#479 <mysql.html#479>`_

-

-   `mysql_store_result`:idx:

-     `mysql.html#417 <mysql.html#417>`_

-

-   `mysql_thread_end`:idx:

-     `mysql.html#390 <mysql.html#390>`_

-

-   `mysql_thread_id`:idx:

-     `mysql.html#406 <mysql.html#406>`_

-

-   `mysql_thread_init`:idx:

-     `mysql.html#389 <mysql.html#389>`_

-

-   `mysql_thread_safe`:idx:

-     `mysql.html#466 <mysql.html#466>`_

-

-   `mysql_use_result`:idx:

-     `mysql.html#418 <mysql.html#418>`_

-

-   `mysql_warning_count`:idx:

-     `mysql.html#404 <mysql.html#404>`_

-

-   `my_thread_end`:idx:

-     `mysql.html#288 <mysql.html#288>`_

-

-   `my_thread_init`:idx:

-     `mysql.html#287 <mysql.html#287>`_

-

-   `my_ulonglong`:idx:

-     `mysql.html#308 <mysql.html#308>`_

-

-   `NAME_LEN`:idx:

-     `mysql.html#110 <mysql.html#110>`_

-

-   `namespace`:idx:

-     `manual.html#224 <manual.html#224>`_

-

-   `nan`:idx:

-     `system.html#440 <system.html#440>`_

-

-   `natural`:idx:

-     `pegs.html#131 <pegs.html#131>`_

-

-   `Natural`:idx:

-     `system.html#134 <system.html#134>`_

-

-   `neginf`:idx:

-     `system.html#439 <system.html#439>`_

-

-   `nestList`:idx:

-     `macros.html#152 <macros.html#152>`_

-

-   `NET`:idx:

-     `mysql.html#199 <mysql.html#199>`_

-

-   `net_clear`:idx:

-     `mysql.html#243 <mysql.html#243>`_

-

-   `net_end`:idx:

-     `mysql.html#242 <mysql.html#242>`_

-

-   `net_flush`:idx:

-     `mysql.html#245 <mysql.html#245>`_

-

-   `NET_HEADER_SIZE`:idx:

-     `mysql.html#265 <mysql.html#265>`_

-

-   `net_new_transaction`:idx:

-     `mysql.html#239 <mysql.html#239>`_

-

-   `NET_READ_TIMEOUT`:idx:

-     `mysql.html#186 <mysql.html#186>`_

-

-   `net_realloc`:idx:

-     `mysql.html#244 <mysql.html#244>`_

-

-   `net_real_write`:idx:

-     `mysql.html#248 <mysql.html#248>`_

-

-   `net_safe_read`:idx:

-     `mysql.html#514 <mysql.html#514>`_

-

-   `NET_WAIT_TIMEOUT`:idx:

-     `mysql.html#188 <mysql.html#188>`_

-

-   `net_write_command`:idx:

-     `mysql.html#247 <mysql.html#247>`_

-

-   `NET_WRITE_TIMEOUT`:idx:

-     `mysql.html#187 <mysql.html#187>`_

-

-   `new`:idx:

-     * `system.html#124 <system.html#124>`_

-     * `system.html#125 <system.html#125>`_

-

-   `newCall`:idx:

-     * `macros.html#150 <macros.html#150>`_

-     * `macros.html#151 <macros.html#151>`_

-

-   `newFileStream`:idx:

-     * `streams.html#120 <streams.html#120>`_

-     * `streams.html#121 <streams.html#121>`_

-

-   `newFloatLitNode`:idx:

-     `macros.html#143 <macros.html#143>`_

-

-   `newIdentNode`:idx:

-     * `macros.html#144 <macros.html#144>`_

-     * `macros.html#145 <macros.html#145>`_

-

-   `newIntLitNode`:idx:

-     `macros.html#142 <macros.html#142>`_

-

-   `newline`:idx:

-     * `manual.html#121 <manual.html#121>`_

-     * `pegs.html#120 <pegs.html#120>`_

-

-   `newLine`:idx:

-     `pegs.html#121 <pegs.html#121>`_

-

-   `NewLines`:idx:

-     `lexbase.html#102 <lexbase.html#102>`_

-

-   `newNimNode`:idx:

-     `macros.html#135 <macros.html#135>`_

-

-   `newNonTerminal`:idx:

-     `pegs.html#124 <pegs.html#124>`_

-

-   `newSeq`:idx:

-     `system.html#173 <system.html#173>`_

-

-   `newString`:idx:

-     `system.html#366 <system.html#366>`_

-

-   `newStringStream`:idx:

-     `streams.html#117 <streams.html#117>`_

-

-   `newStringTable`:idx:

-     * `strtabs.html#104 <strtabs.html#104>`_

-     * `strtabs.html#105 <strtabs.html#105>`_

-

-   `newStrLitNode`:idx:

-     `macros.html#141 <macros.html#141>`_

-

-   `next`:idx:

-     * `parseopt.html#105 <parseopt.html#105>`_

-     * `parsecfg.html#106 <parsecfg.html#106>`_

-     * `parsexml.html#122 <parsexml.html#122>`_

-     * `httpserver.html#105 <httpserver.html#105>`_

-

-   `nextPowerOfTwo`:idx:

-     `math.html#108 <math.html#108>`_

-

-   `nimcall`:idx:

-     `manual.html#176 <manual.html#176>`_

-

-   `NimrodMajor`:idx:

-     `system.html#402 <system.html#402>`_

-

-   `NimrodMinor`:idx:

-     `system.html#403 <system.html#403>`_

-

-   `NimrodPatch`:idx:

-     `system.html#404 <system.html#404>`_

-

-   `NimrodVersion`:idx:

-     `system.html#401 <system.html#401>`_

-

-   `noconv`:idx:

-     `manual.html#179 <manual.html#179>`_

-

-   `noDecl`:idx:

-     `nimrodc.html#101 <nimrodc.html#101>`_

-

-   `NO_DEFAULT_VALUE_FLAG`:idx:

-     `mysql.html#136 <mysql.html#136>`_

-

-   `nonterminal`:idx:

-     `pegs.html#123 <pegs.html#123>`_

-

-   `noreturn`:idx:

-     `manual.html#237 <manual.html#237>`_

-

-   `normalize`:idx:

-     `strutils.html#118 <strutils.html#118>`_

-

-   `noscript`:idx:

-     `xmlgen.html#152 <xmlgen.html#152>`_

-

-   `noSideEffect`:idx:

-     `manual.html#234 <manual.html#234>`_

-

-   `not`:idx:

-     * `system.html#120 <system.html#120>`_

-     * `system.html#203 <system.html#203>`_

-     * `system.html#204 <system.html#204>`_

-     * `system.html#205 <system.html#205>`_

-     * `system.html#206 <system.html#206>`_

-     * `system.html#207 <system.html#207>`_

-

-   `not_in`:idx:

-     `system.html#358 <system.html#358>`_

-

-   `NOT_NULL_FLAG`:idx:

-     `mysql.html#124 <mysql.html#124>`_

-

-   `NULL_LENGTH`:idx:

-     `mysql.html#289 <mysql.html#289>`_

-

-   `Numerical constants`:idx:

-     `manual.html#137 <manual.html#137>`_

-

-   `NUM_FLAG`:idx:

-     `mysql.html#137 <mysql.html#137>`_

-

-   `object`:idx:

-     * `manual.html#162 <manual.html#162>`_

-     * `xmlgen.html#153 <xmlgen.html#153>`_

-

-   `octet2hex`:idx:

-     `mysql.html#276 <mysql.html#276>`_

-

-   `ol`:idx:

-     `xmlgen.html#154 <xmlgen.html#154>`_

-

-   `ONLY_KILL_QUERY`:idx:

-     `mysql.html#189 <mysql.html#189>`_

-

-   `Open`:idx:

-     * `system.html#507 <system.html#507>`_

-     * `system.html#508 <system.html#508>`_

-     * `db_postgres.html#118 <db_postgres.html#118>`_

-     * `db_mysql.html#118 <db_mysql.html#118>`_

-

-   `open`:idx:

-     * `lexbase.html#104 <lexbase.html#104>`_

-     * `parsecfg.html#104 <parsecfg.html#104>`_

-     * `parsexml.html#107 <parsexml.html#107>`_

-     * `parsecsv.html#106 <parsecsv.html#106>`_

-     * `zipfiles.html#102 <zipfiles.html#102>`_

-     * `httpserver.html#103 <httpserver.html#103>`_

-

-   `openarray`:idx:

-     * `tut1.html#119 <tut1.html#119>`_

-     * `system.html#130 <system.html#130>`_

-

-   `openDefaultBrowser`:idx:

-     `browsers.html#101 <browsers.html#101>`_

-

-   `OpenFile`:idx:

-     * `system.html#505 <system.html#505>`_

-     * `system.html#506 <system.html#506>`_

-

-   `operator`:idx:

-     `manual.html#139 <manual.html#139>`_

-

-   `Operators`:idx:

-     `manual.html#211 <manual.html#211>`_

-

-   `optgroup`:idx:

-     `xmlgen.html#155 <xmlgen.html#155>`_

-

-   `option`:idx:

-     `xmlgen.html#156 <xmlgen.html#156>`_

-

-   `or`:idx:

-     * `system.html#122 <system.html#122>`_

-     * `system.html#248 <system.html#248>`_

-     * `system.html#249 <system.html#249>`_

-     * `system.html#250 <system.html#250>`_

-     * `system.html#251 <system.html#251>`_

-     * `system.html#252 <system.html#252>`_

-

-   `ord`:idx:

-     `system.html#182 <system.html#182>`_

-

-   `Ordinal`:idx:

-     `system.html#114 <system.html#114>`_

-

-   `ordinal`:idx:

-     `tut1.html#114 <tut1.html#114>`_

-

-   `Ordinal types`:idx:

-     `manual.html#142 <manual.html#142>`_

-

-   `OSError`:idx:

-     `os.html#112 <os.html#112>`_

-

-   `outputStream`:idx:

-     `osproc.html#115 <osproc.html#115>`_

-

-   `p`:idx:

-     `xmlgen.html#157 <xmlgen.html#157>`_

-

-   `packet_error`:idx:

-     `mysql.html#201 <mysql.html#201>`_

-

-   `pairs`:idx:

-     `strtabs.html#110 <strtabs.html#110>`_

-

-   `parallelReplace`:idx:

-     `pegs.html#146 <pegs.html#146>`_

-

-   `param`:idx:

-     `xmlgen.html#158 <xmlgen.html#158>`_

-

-   `paramCount`:idx:

-     `os.html#110 <os.html#110>`_

-

-   `paramStr`:idx:

-     `os.html#111 <os.html#111>`_

-

-   `ParDir`:idx:

-     `os.html#102 <os.html#102>`_

-

-   `parentDir`:idx:

-     `os.html#127 <os.html#127>`_

-

-   `parseBiggestFloat`:idx:

-     `parseutils.html#110 <parseutils.html#110>`_

-

-   `ParseBiggestInt`:idx:

-     `strutils.html#143 <strutils.html#143>`_

-

-   `parseBiggestInt`:idx:

-     `parseutils.html#108 <parseutils.html#108>`_

-

-   `parseCmdLine`:idx:

-     `os.html#160 <os.html#160>`_

-

-   `ParseFloat`:idx:

-     `strutils.html#144 <strutils.html#144>`_

-

-   `parseFloat`:idx:

-     `parseutils.html#111 <parseutils.html#111>`_

-

-   `parseHex`:idx:

-     `parseutils.html#101 <parseutils.html#101>`_

-

-   `ParseHexInt`:idx:

-     `strutils.html#145 <strutils.html#145>`_

-

-   `parseIdent`:idx:

-     `parseutils.html#103 <parseutils.html#103>`_

-

-   `ParseInt`:idx:

-     `strutils.html#142 <strutils.html#142>`_

-

-   `parseInt`:idx:

-     `parseutils.html#109 <parseutils.html#109>`_

-

-   `parseOct`:idx:

-     `parseutils.html#102 <parseutils.html#102>`_

-

-   `ParseOctInt`:idx:

-     `strutils.html#159 <strutils.html#159>`_

-

-   `parsePeg`:idx:

-     `pegs.html#151 <pegs.html#151>`_

-

-   `parseSQL`:idx:

-     `parsesql.html#109 <parsesql.html#109>`_

-

-   `parseToken`:idx:

-     `parseutils.html#104 <parseutils.html#104>`_

-

-   `PART_KEY_FLAG`:idx:

-     `mysql.html#138 <mysql.html#138>`_

-

-   `PathSep`:idx:

-     `os.html#105 <os.html#105>`_

-

-   `pcDirectory`:idx:

-     `os.html#154 <os.html#154>`_

-

-   `Pcharacter_set`:idx:

-     `mysql.html#350 <mysql.html#350>`_

-

-   `Pcharset_info_st`:idx:

-     `mysql.html#349 <mysql.html#349>`_

-

-   `pcLinkToDirectory`:idx:

-     `os.html#155 <os.html#155>`_

-

-   `PCURL`:idx:

-     `libcurl.html#139 <libcurl.html#139>`_

-

-   `Pcurl_calloc_callback`:idx:

-     `libcurl.html#101 <libcurl.html#101>`_

-

-   `Pcurl_closepolicy`:idx:

-     `libcurl.html#102 <libcurl.html#102>`_

-

-   `PCURLcode`:idx:

-     `libcurl.html#123 <libcurl.html#123>`_

-

-   `PCURLFORMcode`:idx:

-     `libcurl.html#124 <libcurl.html#124>`_

-

-   `PCURLformoption`:idx:

-     `libcurl.html#125 <libcurl.html#125>`_

-

-   `Pcurl_forms`:idx:

-     `libcurl.html#103 <libcurl.html#103>`_

-

-   `Pcurl_ftpauth`:idx:

-     `libcurl.html#104 <libcurl.html#104>`_

-

-   `Pcurl_ftpmethod`:idx:

-     `libcurl.html#105 <libcurl.html#105>`_

-

-   `Pcurl_ftpssl`:idx:

-     `libcurl.html#106 <libcurl.html#106>`_

-

-   `Pcurl_httppost`:idx:

-     `libcurl.html#108 <libcurl.html#108>`_

-

-   `PCURL_HTTP_VERSION`:idx:

-     `libcurl.html#107 <libcurl.html#107>`_

-

-   `PCURLINFO`:idx:

-     `libcurl.html#126 <libcurl.html#126>`_

-

-   `Pcurl_infotype`:idx:

-     `libcurl.html#110 <libcurl.html#110>`_

-

-   `Pcurliocmd`:idx:

-     `libcurl.html#127 <libcurl.html#127>`_

-

-   `Pcurlioerr`:idx:

-     `libcurl.html#128 <libcurl.html#128>`_

-

-   `Pcurl_lock_access`:idx:

-     `libcurl.html#111 <libcurl.html#111>`_

-

-   `Pcurl_lock_data`:idx:

-     `libcurl.html#112 <libcurl.html#112>`_

-

-   `PCURLM`:idx:

-     `libcurl.html#129 <libcurl.html#129>`_

-

-   `Pcurl_malloc_callback`:idx:

-     `libcurl.html#113 <libcurl.html#113>`_

-

-   `PCURLMcode`:idx:

-     `libcurl.html#130 <libcurl.html#130>`_

-

-   `PCURLMoption`:idx:

-     `libcurl.html#131 <libcurl.html#131>`_

-

-   `PCURLMSG`:idx:

-     `libcurl.html#132 <libcurl.html#132>`_

-

-   `PCURL_NETRC_OPTION`:idx:

-     `libcurl.html#114 <libcurl.html#114>`_

-

-   `PCURLoption`:idx:

-     `libcurl.html#133 <libcurl.html#133>`_

-

-   `Pcurl_proxytype`:idx:

-     `libcurl.html#115 <libcurl.html#115>`_

-

-   `Pcurl_realloc_callback`:idx:

-     `libcurl.html#116 <libcurl.html#116>`_

-

-   `PCURLSH`:idx:

-     `libcurl.html#134 <libcurl.html#134>`_

-

-   `PCURLSHcode`:idx:

-     `libcurl.html#135 <libcurl.html#135>`_

-

-   `PCURLSHoption`:idx:

-     `libcurl.html#136 <libcurl.html#136>`_

-

-   `Pcurl_slist`:idx:

-     `libcurl.html#117 <libcurl.html#117>`_

-

-   `Pcurl_socket`:idx:

-     `libcurl.html#118 <libcurl.html#118>`_

-

-   `PCURL_SSL_VERSION`:idx:

-     `libcurl.html#119 <libcurl.html#119>`_

-

-   `Pcurl_strdup_callback`:idx:

-     `libcurl.html#120 <libcurl.html#120>`_

-

-   `PCURL_TIMECOND`:idx:

-     `libcurl.html#121 <libcurl.html#121>`_

-

-   `PCURLversion`:idx:

-     `libcurl.html#137 <libcurl.html#137>`_

-

-   `Pcurl_version_info_data`:idx:

-     `libcurl.html#122 <libcurl.html#122>`_

-

-   `peg`:idx:

-     `pegs.html#152 <pegs.html#152>`_

-

-   `Pfd_set`:idx:

-     `libcurl.html#138 <libcurl.html#138>`_

-

-   `PFileStream`:idx:

-     `streams.html#118 <streams.html#118>`_

-

-   `PFloat32`:idx:

-     `system.html#394 <system.html#394>`_

-

-   `PFloat64`:idx:

-     `system.html#395 <system.html#395>`_

-

-   `Pgptr`:idx:

-     `mysql.html#104 <mysql.html#104>`_

-

-   `PI`:idx:

-     `math.html#101 <math.html#101>`_

-

-   `PIName`:idx:

-     `parsexml.html#115 <parsexml.html#115>`_

-

-   `PInt32`:idx:

-     `system.html#397 <system.html#397>`_

-

-   `PInt64`:idx:

-     `system.html#396 <system.html#396>`_

-

-   `PIRest`:idx:

-     `parsexml.html#116 <parsexml.html#116>`_

-

-   `PItem_result`:idx:

-     `mysql.html#256 <mysql.html#256>`_

-

-   `PMEM_ROOT`:idx:

-     `mysql.html#326 <mysql.html#326>`_

-

-   `Pmy_bool`:idx:

-     `mysql.html#102 <mysql.html#102>`_

-

-   `PMY_CHARSET_INFO`:idx:

-     `mysql.html#353 <mysql.html#353>`_

-

-   `Pmy_socket`:idx:

-     `mysql.html#106 <mysql.html#106>`_

-

-   `PMYSQL`:idx:

-     `mysql.html#358 <mysql.html#358>`_

-

-   `PMYSQL_BIND`:idx:

-     `mysql.html#380 <mysql.html#380>`_

-

-   `PMYSQL_DATA`:idx:

-     `mysql.html#330 <mysql.html#330>`_

-

-   `PMYSQL_FIELD`:idx:

-     `mysql.html#297 <mysql.html#297>`_

-

-   `PMYSQL_FIELD_OFFSET`:idx:

-     `mysql.html#300 <mysql.html#300>`_

-

-   `PMYSQL_MANAGER`:idx:

-     `mysql.html#371 <mysql.html#371>`_

-

-   `PMYSQL_METHODS`:idx:

-     `mysql.html#367 <mysql.html#367>`_

-

-   `PMYSQL_PARAMETERS`:idx:

-     `mysql.html#375 <mysql.html#375>`_

-

-   `PMYSQL_RES`:idx:

-     `mysql.html#362 <mysql.html#362>`_

-

-   `PMYSQL_ROW`:idx:

-     `mysql.html#298 <mysql.html#298>`_

-

-   `PMYSQL_ROW_OFFSET`:idx:

-     `mysql.html#315 <mysql.html#315>`_

-

-   `PMYSQL_ROWS`:idx:

-     `mysql.html#314 <mysql.html#314>`_

-

-   `PMYSQL_STMT`:idx:

-     `mysql.html#364 <mysql.html#364>`_

-

-   `Pmy_ulonglong`:idx:

-     `mysql.html#309 <mysql.html#309>`_

-

-   `PNET`:idx:

-     `mysql.html#200 <mysql.html#200>`_

-

-   `PNimrodNode`:idx:

-     `macros.html#111 <macros.html#111>`_

-

-   `PNimrodSymbol`:idx:

-     `macros.html#110 <macros.html#110>`_

-

-   `PNimrodType`:idx:

-     `macros.html#109 <macros.html#109>`_

-

-   `PNonTerminal`:idx:

-     `pegs.html#101 <pegs.html#101>`_

-

-   `PObject`:idx:

-     `system.html#137 <system.html#137>`_

-

-   `pointer`:idx:

-     `system.html#113 <system.html#113>`_

-

-   `pointers`:idx:

-     * `manual.html#165 <manual.html#165>`_

-     * `tut1.html#120 <tut1.html#120>`_

-

-   `pop`:idx:

-     `system.html#477 <system.html#477>`_

-

-   `port`:idx:

-     `httpserver.html#104 <httpserver.html#104>`_

-

-   `Positive`:idx:

-     `system.html#135 <system.html#135>`_

-

-   `post`:idx:

-     `httpclient.html#108 <httpclient.html#108>`_

-

-   `postContent`:idx:

-     `httpclient.html#109 <httpclient.html#109>`_

-

-   `PostgreSQL`:idx:

-     `db_postgres.html#101 <db_postgres.html#101>`_

-

-   `pow`:idx:

-     `math.html#132 <math.html#132>`_

-

-   `PPByte`:idx:

-     `mysql.html#108 <mysql.html#108>`_

-

-   `PPcurl_httppost`:idx:

-     `libcurl.html#109 <libcurl.html#109>`_

-

-   `PPPChar`:idx:

-     `sqlite3.html#174 <sqlite3.html#174>`_

-

-   `PProcess`:idx:

-     `osproc.html#101 <osproc.html#101>`_

-

-   `PPSqlite3`:idx:

-     `sqlite3.html#176 <sqlite3.html#176>`_

-

-   `PPsqlite3_stmt`:idx:

-     `sqlite3.html#179 <sqlite3.html#179>`_

-

-   `PPsqlite3_value`:idx:

-     `sqlite3.html#181 <sqlite3.html#181>`_

-

-   `Prand_struct`:idx:

-     `mysql.html#253 <mysql.html#253>`_

-

-   `pre`:idx:

-     `xmlgen.html#159 <xmlgen.html#159>`_

-

-   `pred`:idx:

-     `system.html#170 <system.html#170>`_

-

-   `PRI_KEY_FLAG`:idx:

-     `mysql.html#125 <mysql.html#125>`_

-

-   `procedural type`:idx:

-     * `manual.html#168 <manual.html#168>`_

-     * `tut1.html#123 <tut1.html#123>`_

-

-   `procedures`:idx:

-     `manual.html#208 <manual.html#208>`_

-

-   `processedRows`:idx:

-     `parsecsv.html#107 <parsecsv.html#107>`_

-

-   `processID`:idx:

-     `osproc.html#112 <osproc.html#112>`_

-

-   `procvar`:idx:

-     `manual.html#235 <manual.html#235>`_

-

-   `programming by contracts`:idx:

-     `system.html#423 <system.html#423>`_

-

-   `PRope`:idx:

-     `ropes.html#102 <ropes.html#102>`_

-

-   `Psockaddr`:idx:

-     `mysql.html#250 <mysql.html#250>`_

-

-   `Psqlite3`:idx:

-     `sqlite3.html#175 <sqlite3.html#175>`_

-

-   `Psqlite3_context`:idx:

-     `sqlite3.html#177 <sqlite3.html#177>`_

-

-   `Psqlite3_stmt`:idx:

-     `sqlite3.html#178 <sqlite3.html#178>`_

-

-   `Psqlite3_value`:idx:

-     `sqlite3.html#180 <sqlite3.html#180>`_

-

-   `PSqlNode`:idx:

-     `parsesql.html#104 <parsesql.html#104>`_

-

-   `Pst_dynamic_array`:idx:

-     `mysql.html#341 <mysql.html#341>`_

-

-   `Pst_mem_root`:idx:

-     `mysql.html#323 <mysql.html#323>`_

-

-   `Pst_mysql`:idx:

-     `mysql.html#355 <mysql.html#355>`_

-

-   `Pst_mysql_bind`:idx:

-     `mysql.html#377 <mysql.html#377>`_

-

-   `Pst_mysql_data`:idx:

-     `mysql.html#327 <mysql.html#327>`_

-

-   `Pst_mysql_field`:idx:

-     `mysql.html#294 <mysql.html#294>`_

-

-   `Pst_mysql_manager`:idx:

-     `mysql.html#368 <mysql.html#368>`_

-

-   `Pst_mysql_methods`:idx:

-     `mysql.html#354 <mysql.html#354>`_

-

-   `Pst_mysql_options`:idx:

-     `mysql.html#342 <mysql.html#342>`_

-

-   `Pst_mysql_parameters`:idx:

-     `mysql.html#372 <mysql.html#372>`_

-

-   `Pst_mysql_res`:idx:

-     `mysql.html#359 <mysql.html#359>`_

-

-   `Pst_mysql_rows`:idx:

-     `mysql.html#311 <mysql.html#311>`_

-

-   `Pst_mysql_stmt`:idx:

-     `mysql.html#363 <mysql.html#363>`_

-

-   `Pst_net`:idx:

-     `mysql.html#197 <mysql.html#197>`_

-

-   `PStream`:idx:

-     `streams.html#101 <streams.html#101>`_

-

-   `PStringStream`:idx:

-     `streams.html#115 <streams.html#115>`_

-

-   `PStringTable`:idx:

-     `strtabs.html#103 <strtabs.html#103>`_

-

-   `Pst_udf_args`:idx:

-     `mysql.html#257 <mysql.html#257>`_

-

-   `Pst_udf_init`:idx:

-     `mysql.html#261 <mysql.html#261>`_

-

-   `Pst_used_mem`:idx:

-     `mysql.html#319 <mysql.html#319>`_

-

-   `PUDF_ARGS`:idx:

-     `mysql.html#260 <mysql.html#260>`_

-

-   `PUDF_INIT`:idx:

-     `mysql.html#264 <mysql.html#264>`_

-

-   `pure`:idx:

-     `manual.html#240 <manual.html#240>`_

-

-   `PUSED_MEM`:idx:

-     `mysql.html#322 <mysql.html#322>`_

-

-   `push`:idx:

-     `math.html#134 <math.html#134>`_

-

-   `push/pop`:idx:

-     `manual.html#245 <manual.html#245>`_

-

-   `putEnv`:idx:

-     `os.html#149 <os.html#149>`_

-

-   `PVIO`:idx:

-     `mysql.html#103 <mysql.html#103>`_

-

-   `PZipFileStream`:idx:

-     `zipfiles.html#108 <zipfiles.html#108>`_

-

-   `q`:idx:

-     `xmlgen.html#160 <xmlgen.html#160>`_

-

-   `Query`:idx:

-     * `db_postgres.html#109 <db_postgres.html#109>`_

-     * `db_mysql.html#109 <db_mysql.html#109>`_

-

-   `QueryAffectedRows`:idx:

-     * `db_postgres.html#116 <db_postgres.html#116>`_

-     * `db_mysql.html#116 <db_mysql.html#116>`_

-

-   `quit`:idx:

-     * `system.html#497 <system.html#497>`_

-     * `system.html#498 <system.html#498>`_

-

-   `QuitFailure`:idx:

-     `system.html#496 <system.html#496>`_

-

-   `QuitSuccess`:idx:

-     `system.html#495 <system.html#495>`_

-

-   `quotation mark`:idx:

-     `manual.html#128 <manual.html#128>`_

-

-   `quoteIfContainsWhite`:idx:

-     `strutils.html#152 <strutils.html#152>`_

-

-   `random`:idx:

-     `math.html#113 <math.html#113>`_

-

-   `randominit`:idx:

-     `mysql.html#267 <mysql.html#267>`_

-

-   `randomize`:idx:

-     `math.html#114 <math.html#114>`_

-

-   `rand_struct`:idx:

-     `mysql.html#254 <mysql.html#254>`_

-

-   `range`:idx:

-     `system.html#128 <system.html#128>`_

-

-   `re-raised`:idx:

-     `manual.html#192 <manual.html#192>`_

-

-   `readBool`:idx:

-     `streams.html#106 <streams.html#106>`_

-

-   `readBuffer`:idx:

-     `system.html#528 <system.html#528>`_

-

-   `ReadBytes`:idx:

-     `system.html#526 <system.html#526>`_

-

-   `readChar`:idx:

-     * `system.html#512 <system.html#512>`_

-     * `streams.html#105 <streams.html#105>`_

-

-   `ReadChars`:idx:

-     `system.html#527 <system.html#527>`_

-

-   `readData`:idx:

-     `cgi.html#109 <cgi.html#109>`_

-

-   `readFile`:idx:

-     `system.html#514 <system.html#514>`_

-

-   `readFloat32`:idx:

-     `streams.html#111 <streams.html#111>`_

-

-   `readFloat64`:idx:

-     `streams.html#112 <streams.html#112>`_

-

-   `readInt16`:idx:

-     `streams.html#108 <streams.html#108>`_

-

-   `readInt32`:idx:

-     `streams.html#109 <streams.html#109>`_

-

-   `readInt64`:idx:

-     `streams.html#110 <streams.html#110>`_

-

-   `readInt8`:idx:

-     `streams.html#107 <streams.html#107>`_

-

-   `readLine`:idx:

-     * `system.html#522 <system.html#522>`_

-     * `streams.html#114 <streams.html#114>`_

-

-   `readRow`:idx:

-     `parsecsv.html#108 <parsecsv.html#108>`_

-

-   `readStr`:idx:

-     `streams.html#113 <streams.html#113>`_

-

-   `realloc`:idx:

-     `system.html#421 <system.html#421>`_

-

-   `reBinary`:idx:

-     `regexprs.html#116 <regexprs.html#116>`_

-

-   `Recursive module dependencies`:idx:

-     `manual.html#228 <manual.html#228>`_

-

-   `reEmail`:idx:

-     `regexprs.html#119 <regexprs.html#119>`_

-

-   `reFloat`:idx:

-     `regexprs.html#118 <regexprs.html#118>`_

-

-   `REFRESH_DES_KEY_FILE`:idx:

-     `mysql.html#154 <mysql.html#154>`_

-

-   `REFRESH_FAST`:idx:

-     `mysql.html#151 <mysql.html#151>`_

-

-   `REFRESH_GRANT`:idx:

-     `mysql.html#142 <mysql.html#142>`_

-

-   `REFRESH_HOSTS`:idx:

-     `mysql.html#145 <mysql.html#145>`_

-

-   `REFRESH_LOG`:idx:

-     `mysql.html#143 <mysql.html#143>`_

-

-   `REFRESH_MASTER`:idx:

-     `mysql.html#149 <mysql.html#149>`_

-

-   `REFRESH_QUERY_CACHE`:idx:

-     `mysql.html#152 <mysql.html#152>`_

-

-   `REFRESH_QUERY_CACHE_FREE`:idx:

-     `mysql.html#153 <mysql.html#153>`_

-

-   `REFRESH_READ_LOCK`:idx:

-     `mysql.html#150 <mysql.html#150>`_

-

-   `REFRESH_SLAVE`:idx:

-     `mysql.html#148 <mysql.html#148>`_

-

-   `REFRESH_STATUS`:idx:

-     `mysql.html#146 <mysql.html#146>`_

-

-   `REFRESH_TABLES`:idx:

-     `mysql.html#144 <mysql.html#144>`_

-

-   `REFRESH_THREADS`:idx:

-     `mysql.html#147 <mysql.html#147>`_

-

-   `REFRESH_USER_RESOURCES`:idx:

-     `mysql.html#155 <mysql.html#155>`_

-

-   `register`:idx:

-     `manual.html#246 <manual.html#246>`_

-

-   `reHex`:idx:

-     `regexprs.html#115 <regexprs.html#115>`_

-

-   `reIdentifier`:idx:

-     `regexprs.html#112 <regexprs.html#112>`_

-

-   `reInteger`:idx:

-     `regexprs.html#114 <regexprs.html#114>`_

-

-   `removeDir`:idx:

-     `os.html#158 <os.html#158>`_

-

-   `removeFile`:idx:

-     `os.html#144 <os.html#144>`_

-

-   `reNatural`:idx:

-     `regexprs.html#113 <regexprs.html#113>`_

-

-   `renderSQL`:idx:

-     `parsesql.html#110 <parsesql.html#110>`_

-

-   `reOctal`:idx:

-     `regexprs.html#117 <regexprs.html#117>`_

-

-   `repeatChar`:idx:

-     `strutils.html#147 <strutils.html#147>`_

-

-   `replace`:idx:

-     * `strutils.html#155 <strutils.html#155>`_

-     * `strutils.html#156 <strutils.html#156>`_

-     * `pegs.html#145 <pegs.html#145>`_

-

-   `replaceStr`:idx:

-     * `strutils.html#122 <strutils.html#122>`_

-     * `strutils.html#123 <strutils.html#123>`_

-

-   `repr`:idx:

-     `system.html#379 <system.html#379>`_

-

-   `request`:idx:

-     `httpclient.html#105 <httpclient.html#105>`_

-

-   `ResetAttributes`:idx:

-     `terminal.html#110 <terminal.html#110>`_

-

-   `result`:idx:

-     * `manual.html#199 <manual.html#199>`_

-     * `manual.html#210 <manual.html#210>`_

-

-   `resume`:idx:

-     `osproc.html#109 <osproc.html#109>`_

-

-   `return`:idx:

-     `manual.html#198 <manual.html#198>`_

-

-   `reURL`:idx:

-     `regexprs.html#120 <regexprs.html#120>`_

-

-   `rope`:idx:

-     * `ropes.html#101 <ropes.html#101>`_

-     * `ropes.html#104 <ropes.html#104>`_

-     * `ropes.html#105 <ropes.html#105>`_

-     * `ropes.html#106 <ropes.html#106>`_

-

-   `round`:idx:

-     `math.html#121 <math.html#121>`_

-

-   `Rows`:idx:

-     * `db_postgres.html#112 <db_postgres.html#112>`_

-     * `db_mysql.html#112 <db_mysql.html#112>`_

-

-   `run`:idx:

-     `httpserver.html#107 <httpserver.html#107>`_

-

-   `runeAt`:idx:

-     `unicode.html#109 <unicode.html#109>`_

-

-   `runeLen`:idx:

-     `unicode.html#106 <unicode.html#106>`_

-

-   `runeLenAt`:idx:

-     `unicode.html#107 <unicode.html#107>`_

-

-   `runes`:idx:

-     `unicode.html#119 <unicode.html#119>`_

-

-   `running`:idx:

-     `osproc.html#111 <osproc.html#111>`_

-

-   `safe`:idx:

-     `manual.html#112 <manual.html#112>`_

-

-   `safecall`:idx:

-     `manual.html#173 <manual.html#173>`_

-

-   `sameFile`:idx:

-     `os.html#140 <os.html#140>`_

-

-   `sameFileContent`:idx:

-     `os.html#141 <os.html#141>`_

-

-   `samp`:idx:

-     `xmlgen.html#161 <xmlgen.html#161>`_

-

-   `scope`:idx:

-     * `manual.html#106 <manual.html#106>`_

-     * `manual.html#229 <manual.html#229>`_

-

-   `scramble`:idx:

-     `mysql.html#278 <mysql.html#278>`_

-

-   `scramble_323`:idx:

-     `mysql.html#272 <mysql.html#272>`_

-

-   `SCRAMBLED_PASSWORD_CHAR_LENGTH`:idx:

-     `mysql.html#122 <mysql.html#122>`_

-

-   `SCRAMBLED_PASSWORD_CHAR_LENGTH_323`:idx:

-     `mysql.html#123 <mysql.html#123>`_

-

-   `SCRAMBLE_LENGTH`:idx:

-     `mysql.html#120 <mysql.html#120>`_

-

-   `SCRAMBLE_LENGTH_323`:idx:

-     `mysql.html#121 <mysql.html#121>`_

-

-   `script`:idx:

-     `xmlgen.html#162 <xmlgen.html#162>`_

-

-   `ScriptExt`:idx:

-     `os.html#108 <os.html#108>`_

-

-   `select`:idx:

-     `xmlgen.html#163 <xmlgen.html#163>`_

-

-   `separate compilation`:idx:

-     * `manual.html#226 <manual.html#226>`_

-     * `tut1.html#127 <tut1.html#127>`_

-

-   `seq`:idx:

-     `system.html#131 <system.html#131>`_

-

-   `sequence`:idx:

-     `pegs.html#109 <pegs.html#109>`_

-

-   `Sequences`:idx:

-     * `manual.html#160 <manual.html#160>`_

-     * `tut1.html#118 <tut1.html#118>`_

-

-   `SERVER_MORE_RESULTS_EXISTS`:idx:

-     `mysql.html#178 <mysql.html#178>`_

-

-   `SERVER_QUERY_NO_GOOD_INDEX_USED`:idx:

-     `mysql.html#179 <mysql.html#179>`_

-

-   `SERVER_QUERY_NO_INDEX_USED`:idx:

-     `mysql.html#180 <mysql.html#180>`_

-

-   `SERVER_STATUS_AUTOCOMMIT`:idx:

-     `mysql.html#176 <mysql.html#176>`_

-

-   `SERVER_STATUS_CURSOR_EXISTS`:idx:

-     `mysql.html#181 <mysql.html#181>`_

-

-   `SERVER_STATUS_DB_DROPPED`:idx:

-     `mysql.html#183 <mysql.html#183>`_

-

-   `SERVER_STATUS_IN_TRANS`:idx:

-     `mysql.html#175 <mysql.html#175>`_

-

-   `SERVER_STATUS_LAST_ROW_SENT`:idx:

-     `mysql.html#182 <mysql.html#182>`_

-

-   `SERVER_STATUS_MORE_RESULTS`:idx:

-     `mysql.html#177 <mysql.html#177>`_

-

-   `SERVER_STATUS_NO_BACKSLASH_ESCAPES`:idx:

-     `mysql.html#184 <mysql.html#184>`_

-

-   `SERVER_VERSION_LENGTH`:idx:

-     `mysql.html#113 <mysql.html#113>`_

-

-   `set`:idx:

-     `system.html#132 <system.html#132>`_

-

-   `set type`:idx:

-     * `manual.html#164 <manual.html#164>`_

-     * `tut1.html#116 <tut1.html#116>`_

-

-   `setBackgroundColor`:idx:

-     `terminal.html#116 <terminal.html#116>`_

-

-   `setCookie`:idx:

-     `cgi.html#145 <cgi.html#145>`_

-

-   `setCurrentDir`:idx:

-     `os.html#121 <os.html#121>`_

-

-   `setCursorPos`:idx:

-     `terminal.html#101 <terminal.html#101>`_

-

-   `setCursorXPos`:idx:

-     `terminal.html#102 <terminal.html#102>`_

-

-   `setCursorYPos`:idx:

-     `terminal.html#103 <terminal.html#103>`_

-

-   `setFilePermissions`:idx:

-     `os.html#163 <os.html#163>`_

-

-   `setFilePos`:idx:

-     `system.html#532 <system.html#532>`_

-

-   `SET_FLAG`:idx:

-     `mysql.html#135 <mysql.html#135>`_

-

-   `setForegroundColor`:idx:

-     `terminal.html#115 <terminal.html#115>`_

-

-   `setLen`:idx:

-     * `system.html#364 <system.html#364>`_

-     * `system.html#365 <system.html#365>`_

-

-   `setTestData`:idx:

-     `cgi.html#143 <cgi.html#143>`_

-

-   `shl`:idx:

-     * `system.html#238 <system.html#238>`_

-     * `system.html#239 <system.html#239>`_

-     * `system.html#240 <system.html#240>`_

-     * `system.html#241 <system.html#241>`_

-     * `system.html#242 <system.html#242>`_

-

-   `shr`:idx:

-     * `system.html#233 <system.html#233>`_

-     * `system.html#234 <system.html#234>`_

-     * `system.html#235 <system.html#235>`_

-     * `system.html#236 <system.html#236>`_

-     * `system.html#237 <system.html#237>`_

-

-   `simple assertions`:idx:

-     `regexprs.html#103 <regexprs.html#103>`_

-

-   `simple statements`:idx:

-     `manual.html#183 <manual.html#183>`_

-

-   `sinh`:idx:

-     `math.html#129 <math.html#129>`_

-

-   `sizeof`:idx:

-     `system.html#168 <system.html#168>`_

-

-   `skip`:idx:

-     `parseutils.html#106 <parseutils.html#106>`_

-

-   `skipIgnoreCase`:idx:

-     `parseutils.html#107 <parseutils.html#107>`_

-

-   `skipWhitespace`:idx:

-     `parseutils.html#105 <parseutils.html#105>`_

-

-   `sleep`:idx:

-     `os.html#170 <os.html#170>`_

-

-   `small`:idx:

-     `xmlgen.html#164 <xmlgen.html#164>`_

-

-   `sockaddr`:idx:

-     `mysql.html#251 <mysql.html#251>`_

-

-   `span`:idx:

-     `xmlgen.html#165 <xmlgen.html#165>`_

-

-   `split`:idx:

-     * `strutils.html#126 <strutils.html#126>`_

-     * `strutils.html#127 <strutils.html#127>`_

-     * `strutils.html#133 <strutils.html#133>`_

-     * `strutils.html#134 <strutils.html#134>`_

-     * `pegs.html#148 <pegs.html#148>`_

-     * `pegs.html#149 <pegs.html#149>`_

-

-   `splitFile`:idx:

-     `os.html#129 <os.html#129>`_

-

-   `SplitFilename`:idx:

-     `os.html#133 <os.html#133>`_

-

-   `splitLines`:idx:

-     * `strutils.html#128 <strutils.html#128>`_

-     * `strutils.html#132 <strutils.html#132>`_

-

-   `splitLinesSeq`:idx:

-     `strutils.html#129 <strutils.html#129>`_

-

-   `SplitPath`:idx:

-     * `os.html#125 <os.html#125>`_

-     * `os.html#126 <os.html#126>`_

-

-   `splitSeq`:idx:

-     * `strutils.html#130 <strutils.html#130>`_

-     * `strutils.html#131 <strutils.html#131>`_

-

-   `sql`:idx:

-     `db_postgres.html#106 <db_postgres.html#106>`_

-

-   `sqlite3_aggregate_context`:idx:

-     `sqlite3.html#261 <sqlite3.html#261>`_

-

-   `sqlite3_aggregate_count`:idx:

-     `sqlite3.html#249 <sqlite3.html#249>`_

-

-   `sqlite3_bind_blob`:idx:

-     * `sqlite3.html#216 <sqlite3.html#216>`_

-     * `sqlite3.html#223 <sqlite3.html#223>`_

-

-   `sqlite3_bind_double`:idx:

-     `sqlite3.html#217 <sqlite3.html#217>`_

-

-   `sqlite3_bind_int`:idx:

-     `sqlite3.html#218 <sqlite3.html#218>`_

-

-   `sqlite3_bind_int64`:idx:

-     `sqlite3.html#219 <sqlite3.html#219>`_

-

-   `sqlite3_bind_null`:idx:

-     `sqlite3.html#220 <sqlite3.html#220>`_

-

-   `sqlite3_bind_parameter_count`:idx:

-     `sqlite3.html#226 <sqlite3.html#226>`_

-

-   `sqlite3_bind_parameter_index`:idx:

-     `sqlite3.html#228 <sqlite3.html#228>`_

-

-   `sqlite3_bind_parameter_name`:idx:

-     `sqlite3.html#227 <sqlite3.html#227>`_

-

-   `sqlite3_bind_text`:idx:

-     * `sqlite3.html#221 <sqlite3.html#221>`_

-     * `sqlite3.html#224 <sqlite3.html#224>`_

-

-   `sqlite3_bind_text16`:idx:

-     * `sqlite3.html#222 <sqlite3.html#222>`_

-     * `sqlite3.html#225 <sqlite3.html#225>`_

-

-   `sqlite3_busy_handler`:idx:

-     `sqlite3.html#198 <sqlite3.html#198>`_

-

-   `sqlite3_busy_timeout`:idx:

-     `sqlite3.html#199 <sqlite3.html#199>`_

-

-   `sqlite3_changes`:idx:

-     `sqlite3.html#193 <sqlite3.html#193>`_

-

-   `sqlite3_close`:idx:

-     `sqlite3.html#190 <sqlite3.html#190>`_

-

-   `sqlite3_collation_needed`:idx:

-     `sqlite3.html#279 <sqlite3.html#279>`_

-

-   `sqlite3_collation_needed16`:idx:

-     `sqlite3.html#280 <sqlite3.html#280>`_

-

-   `sqlite3_column_blob`:idx:

-     `sqlite3.html#236 <sqlite3.html#236>`_

-

-   `sqlite3_column_bytes`:idx:

-     `sqlite3.html#237 <sqlite3.html#237>`_

-

-   `sqlite3_column_bytes16`:idx:

-     `sqlite3.html#238 <sqlite3.html#238>`_

-

-   `sqlite3_column_count`:idx:

-     `sqlite3.html#229 <sqlite3.html#229>`_

-

-   `sqlite3_column_decltype`:idx:

-     `sqlite3.html#232 <sqlite3.html#232>`_

-

-   `sqlite3_column_decltype16`:idx:

-     `sqlite3.html#233 <sqlite3.html#233>`_

-

-   `sqlite3_column_double`:idx:

-     `sqlite3.html#239 <sqlite3.html#239>`_

-

-   `sqlite3_column_int`:idx:

-     `sqlite3.html#240 <sqlite3.html#240>`_

-

-   `sqlite3_column_int64`:idx:

-     `sqlite3.html#241 <sqlite3.html#241>`_

-

-   `sqlite3_column_name`:idx:

-     `sqlite3.html#230 <sqlite3.html#230>`_

-

-   `sqlite3_column_name16`:idx:

-     `sqlite3.html#231 <sqlite3.html#231>`_

-

-   `sqlite3_column_text`:idx:

-     `sqlite3.html#242 <sqlite3.html#242>`_

-

-   `sqlite3_column_text16`:idx:

-     `sqlite3.html#243 <sqlite3.html#243>`_

-

-   `sqlite3_column_type`:idx:

-     `sqlite3.html#244 <sqlite3.html#244>`_

-

-   `sqlite3_commit_hook`:idx:

-     `sqlite3.html#208 <sqlite3.html#208>`_

-

-   `sqlite3_complete`:idx:

-     `sqlite3.html#196 <sqlite3.html#196>`_

-

-   `sqlite3_complete16`:idx:

-     `sqlite3.html#197 <sqlite3.html#197>`_

-

-   `sqlite3_create_collation`:idx:

-     `sqlite3.html#277 <sqlite3.html#277>`_

-

-   `sqlite3_create_collation16`:idx:

-     `sqlite3.html#278 <sqlite3.html#278>`_

-

-   `sqlite3_create_function`:idx:

-     `sqlite3.html#247 <sqlite3.html#247>`_

-

-   `sqlite3_create_function16`:idx:

-     `sqlite3.html#248 <sqlite3.html#248>`_

-

-   `sqlite3_data_count`:idx:

-     `sqlite3.html#235 <sqlite3.html#235>`_

-

-   `sqlite3_errcode`:idx:

-     `sqlite3.html#211 <sqlite3.html#211>`_

-

-   `sqlite3_errmsg`:idx:

-     `sqlite3.html#212 <sqlite3.html#212>`_

-

-   `sqlite3_errmsg16`:idx:

-     `sqlite3.html#213 <sqlite3.html#213>`_

-

-   `sqlite3_exec`:idx:

-     `sqlite3.html#191 <sqlite3.html#191>`_

-

-   `sqlite3_finalize`:idx:

-     `sqlite3.html#245 <sqlite3.html#245>`_

-

-   `sqlite3_free`:idx:

-     `sqlite3.html#203 <sqlite3.html#203>`_

-

-   `sqlite3_free_table`:idx:

-     `sqlite3.html#201 <sqlite3.html#201>`_

-

-   `sqlite3_get_auxdata`:idx:

-     `sqlite3.html#263 <sqlite3.html#263>`_

-

-   `sqlite3_get_table`:idx:

-     `sqlite3.html#200 <sqlite3.html#200>`_

-

-   `sqlite3_interrupt`:idx:

-     `sqlite3.html#195 <sqlite3.html#195>`_

-

-   `sqlite3_last_insert_rowid`:idx:

-     `sqlite3.html#192 <sqlite3.html#192>`_

-

-   `sqlite3_libversion`:idx:

-     `sqlite3.html#281 <sqlite3.html#281>`_

-

-   `sqlite3_libversion_number`:idx:

-     `sqlite3.html#283 <sqlite3.html#283>`_

-

-   `sqlite3_mprintf`:idx:

-     `sqlite3.html#202 <sqlite3.html#202>`_

-

-   `sqlite3_open`:idx:

-     `sqlite3.html#209 <sqlite3.html#209>`_

-

-   `sqlite3_open16`:idx:

-     `sqlite3.html#210 <sqlite3.html#210>`_

-

-   `sqlite3_prepare`:idx:

-     `sqlite3.html#214 <sqlite3.html#214>`_

-

-   `sqlite3_prepare16`:idx:

-     `sqlite3.html#215 <sqlite3.html#215>`_

-

-   `sqlite3_progress_handler`:idx:

-     `sqlite3.html#207 <sqlite3.html#207>`_

-

-   `sqlite3_reset`:idx:

-     `sqlite3.html#246 <sqlite3.html#246>`_

-

-   `sqlite3_result_blob`:idx:

-     `sqlite3.html#265 <sqlite3.html#265>`_

-

-   `sqlite3_result_double`:idx:

-     `sqlite3.html#266 <sqlite3.html#266>`_

-

-   `sqlite3_result_error`:idx:

-     `sqlite3.html#267 <sqlite3.html#267>`_

-

-   `sqlite3_result_error16`:idx:

-     `sqlite3.html#268 <sqlite3.html#268>`_

-

-   `sqlite3_result_int`:idx:

-     `sqlite3.html#269 <sqlite3.html#269>`_

-

-   `sqlite3_result_int64`:idx:

-     `sqlite3.html#270 <sqlite3.html#270>`_

-

-   `sqlite3_result_null`:idx:

-     `sqlite3.html#271 <sqlite3.html#271>`_

-

-   `sqlite3_result_text`:idx:

-     `sqlite3.html#272 <sqlite3.html#272>`_

-

-   `sqlite3_result_text16`:idx:

-     `sqlite3.html#273 <sqlite3.html#273>`_

-

-   `sqlite3_result_text16be`:idx:

-     `sqlite3.html#275 <sqlite3.html#275>`_

-

-   `sqlite3_result_text16le`:idx:

-     `sqlite3.html#274 <sqlite3.html#274>`_

-

-   `sqlite3_result_value`:idx:

-     `sqlite3.html#276 <sqlite3.html#276>`_

-

-   `sqlite3_set_authorizer`:idx:

-     `sqlite3.html#205 <sqlite3.html#205>`_

-

-   `sqlite3_set_auxdata`:idx:

-     `sqlite3.html#264 <sqlite3.html#264>`_

-

-   `sqlite3_snprintf`:idx:

-     `sqlite3.html#204 <sqlite3.html#204>`_

-

-   `sqlite3_step`:idx:

-     `sqlite3.html#234 <sqlite3.html#234>`_

-

-   `SQLITE3_TEXT`:idx:

-     `sqlite3.html#106 <sqlite3.html#106>`_

-

-   `sqlite3_total_changes`:idx:

-     `sqlite3.html#194 <sqlite3.html#194>`_

-

-   `sqlite3_trace`:idx:

-     `sqlite3.html#206 <sqlite3.html#206>`_

-

-   `sqlite3_user_data`:idx:

-     `sqlite3.html#262 <sqlite3.html#262>`_

-

-   `sqlite3_value_blob`:idx:

-     `sqlite3.html#250 <sqlite3.html#250>`_

-

-   `sqlite3_value_bytes`:idx:

-     `sqlite3.html#251 <sqlite3.html#251>`_

-

-   `sqlite3_value_bytes16`:idx:

-     `sqlite3.html#252 <sqlite3.html#252>`_

-

-   `sqlite3_value_double`:idx:

-     `sqlite3.html#253 <sqlite3.html#253>`_

-

-   `sqlite3_value_int`:idx:

-     `sqlite3.html#254 <sqlite3.html#254>`_

-

-   `sqlite3_value_int64`:idx:

-     `sqlite3.html#255 <sqlite3.html#255>`_

-

-   `sqlite3_value_text`:idx:

-     `sqlite3.html#256 <sqlite3.html#256>`_

-

-   `sqlite3_value_text16`:idx:

-     `sqlite3.html#257 <sqlite3.html#257>`_

-

-   `sqlite3_value_text16be`:idx:

-     `sqlite3.html#259 <sqlite3.html#259>`_

-

-   `sqlite3_value_text16le`:idx:

-     `sqlite3.html#258 <sqlite3.html#258>`_

-

-   `sqlite3_value_type`:idx:

-     `sqlite3.html#260 <sqlite3.html#260>`_

-

-   `sqlite3_version`:idx:

-     `sqlite3.html#282 <sqlite3.html#282>`_

-

-   `SQLITE_ABORT`:idx:

-     `sqlite3.html#116 <sqlite3.html#116>`_

-

-   `SQLITE_ALTER_TABLE`:idx:

-     `sqlite3.html#167 <sqlite3.html#167>`_

-

-   `SQLITE_ANY`:idx:

-     `sqlite3.html#111 <sqlite3.html#111>`_

-

-   `SQLITE_ATTACH`:idx:

-     `sqlite3.html#165 <sqlite3.html#165>`_

-

-   `SQLITE_AUTH`:idx:

-     `sqlite3.html#135 <sqlite3.html#135>`_

-

-   `SQLITE_BLOB`:idx:

-     `sqlite3.html#103 <sqlite3.html#103>`_

-

-   `SQLITE_BUSY`:idx:

-     `sqlite3.html#117 <sqlite3.html#117>`_

-

-   `SQLITE_CANTOPEN`:idx:

-     `sqlite3.html#126 <sqlite3.html#126>`_

-

-   `SQLITE_CONSTRAINT`:idx:

-     `sqlite3.html#131 <sqlite3.html#131>`_

-

-   `SQLITE_COPY`:idx:

-     `sqlite3.html#141 <sqlite3.html#141>`_

-

-   `SQLITE_CORRUPT`:idx:

-     `sqlite3.html#123 <sqlite3.html#123>`_

-

-   `SQLITE_CREATE_INDEX`:idx:

-     `sqlite3.html#142 <sqlite3.html#142>`_

-

-   `SQLITE_CREATE_TABLE`:idx:

-     `sqlite3.html#143 <sqlite3.html#143>`_

-

-   `SQLITE_CREATE_TEMP_INDEX`:idx:

-     `sqlite3.html#144 <sqlite3.html#144>`_

-

-   `SQLITE_CREATE_TEMP_TABLE`:idx:

-     `sqlite3.html#145 <sqlite3.html#145>`_

-

-   `SQLITE_CREATE_TEMP_TRIGGER`:idx:

-     `sqlite3.html#146 <sqlite3.html#146>`_

-

-   `SQLITE_CREATE_TEMP_VIEW`:idx:

-     `sqlite3.html#147 <sqlite3.html#147>`_

-

-   `SQLITE_CREATE_TRIGGER`:idx:

-     `sqlite3.html#148 <sqlite3.html#148>`_

-

-   `SQLITE_CREATE_VIEW`:idx:

-     `sqlite3.html#149 <sqlite3.html#149>`_

-

-   `SQLITE_DELETE`:idx:

-     `sqlite3.html#150 <sqlite3.html#150>`_

-

-   `SQLITE_DENY`:idx:

-     `sqlite3.html#169 <sqlite3.html#169>`_

-

-   `SQLITE_DETACH`:idx:

-     `sqlite3.html#166 <sqlite3.html#166>`_

-

-   `SQLITE_DONE`:idx:

-     `sqlite3.html#140 <sqlite3.html#140>`_

-

-   `SQLITE_DROP_INDEX`:idx:

-     `sqlite3.html#151 <sqlite3.html#151>`_

-

-   `SQLITE_DROP_TABLE`:idx:

-     `sqlite3.html#152 <sqlite3.html#152>`_

-

-   `SQLITE_DROP_TEMP_INDEX`:idx:

-     `sqlite3.html#153 <sqlite3.html#153>`_

-

-   `SQLITE_DROP_TEMP_TABLE`:idx:

-     `sqlite3.html#154 <sqlite3.html#154>`_

-

-   `SQLITE_DROP_TEMP_TRIGGER`:idx:

-     `sqlite3.html#155 <sqlite3.html#155>`_

-

-   `SQLITE_DROP_TEMP_VIEW`:idx:

-     `sqlite3.html#156 <sqlite3.html#156>`_

-

-   `SQLITE_DROP_TRIGGER`:idx:

-     `sqlite3.html#157 <sqlite3.html#157>`_

-

-   `SQLITE_DROP_VIEW`:idx:

-     `sqlite3.html#158 <sqlite3.html#158>`_

-

-   `SQLITE_EMPTY`:idx:

-     `sqlite3.html#128 <sqlite3.html#128>`_

-

-   `SQLITE_ERROR`:idx:

-     `sqlite3.html#113 <sqlite3.html#113>`_

-

-   `SQLITE_FLOAT`:idx:

-     `sqlite3.html#102 <sqlite3.html#102>`_

-

-   `SQLITE_FORMAT`:idx:

-     `sqlite3.html#136 <sqlite3.html#136>`_

-

-   `SQLITE_FULL`:idx:

-     `sqlite3.html#125 <sqlite3.html#125>`_

-

-   `SQLITE_IGNORE`:idx:

-     `sqlite3.html#170 <sqlite3.html#170>`_

-

-   `SQLITE_INSERT`:idx:

-     `sqlite3.html#159 <sqlite3.html#159>`_

-

-   `sqlite_int64`:idx:

-     `sqlite3.html#173 <sqlite3.html#173>`_

-

-   `SQLITE_INTEGER`:idx:

-     `sqlite3.html#101 <sqlite3.html#101>`_

-

-   `SQLITE_INTERNAL`:idx:

-     `sqlite3.html#114 <sqlite3.html#114>`_

-

-   `SQLITE_INTERRUPT`:idx:

-     `sqlite3.html#121 <sqlite3.html#121>`_

-

-   `SQLITE_IOERR`:idx:

-     `sqlite3.html#122 <sqlite3.html#122>`_

-

-   `SQLITE_LOCKED`:idx:

-     `sqlite3.html#118 <sqlite3.html#118>`_

-

-   `SQLITE_MISMATCH`:idx:

-     `sqlite3.html#132 <sqlite3.html#132>`_

-

-   `SQLITE_MISUSE`:idx:

-     `sqlite3.html#133 <sqlite3.html#133>`_

-

-   `SQLITE_NOLFS`:idx:

-     `sqlite3.html#134 <sqlite3.html#134>`_

-

-   `SQLITE_NOMEM`:idx:

-     `sqlite3.html#119 <sqlite3.html#119>`_

-

-   `SQLITE_NOTADB`:idx:

-     `sqlite3.html#138 <sqlite3.html#138>`_

-

-   `SQLITE_NOTFOUND`:idx:

-     `sqlite3.html#124 <sqlite3.html#124>`_

-

-   `SQLITE_NULL`:idx:

-     `sqlite3.html#104 <sqlite3.html#104>`_

-

-   `SQLITE_OK`:idx:

-     `sqlite3.html#112 <sqlite3.html#112>`_

-

-   `SQLITE_PERM`:idx:

-     `sqlite3.html#115 <sqlite3.html#115>`_

-

-   `SQLITE_PRAGMA`:idx:

-     `sqlite3.html#160 <sqlite3.html#160>`_

-

-   `SQLITE_PROTOCOL`:idx:

-     `sqlite3.html#127 <sqlite3.html#127>`_

-

-   `SQLITE_RANGE`:idx:

-     `sqlite3.html#137 <sqlite3.html#137>`_

-

-   `SQLITE_READ`:idx:

-     `sqlite3.html#161 <sqlite3.html#161>`_

-

-   `SQLITE_READONLY`:idx:

-     `sqlite3.html#120 <sqlite3.html#120>`_

-

-   `SQLITE_REINDEX`:idx:

-     `sqlite3.html#168 <sqlite3.html#168>`_

-

-   `SQLITE_ROW`:idx:

-     `sqlite3.html#139 <sqlite3.html#139>`_

-

-   `SQLITE_SCHEMA`:idx:

-     `sqlite3.html#129 <sqlite3.html#129>`_

-

-   `SQLITE_SELECT`:idx:

-     `sqlite3.html#162 <sqlite3.html#162>`_

-

-   `SQLITE_STATIC`:idx:

-     `sqlite3.html#171 <sqlite3.html#171>`_

-

-   `SQLITE_TEXT`:idx:

-     `sqlite3.html#105 <sqlite3.html#105>`_

-

-   `SQLITE_TOOBIG`:idx:

-     `sqlite3.html#130 <sqlite3.html#130>`_

-

-   `SQLITE_TRANSACTION`:idx:

-     `sqlite3.html#163 <sqlite3.html#163>`_

-

-   `SQLITE_TRANSIENT`:idx:

-     `sqlite3.html#172 <sqlite3.html#172>`_

-

-   `SQLITE_UPDATE`:idx:

-     `sqlite3.html#164 <sqlite3.html#164>`_

-

-   `SQLITE_UTF16`:idx:

-     `sqlite3.html#110 <sqlite3.html#110>`_

-

-   `SQLITE_UTF16BE`:idx:

-     `sqlite3.html#109 <sqlite3.html#109>`_

-

-   `SQLITE_UTF16LE`:idx:

-     `sqlite3.html#108 <sqlite3.html#108>`_

-

-   `SQLITE_UTF8`:idx:

-     `sqlite3.html#107 <sqlite3.html#107>`_

-

-   `SQLSTATE_LENGTH`:idx:

-     `mysql.html#114 <mysql.html#114>`_

-

-   `sqrt`:idx:

-     * `math.html#115 <math.html#115>`_

-     * `complex.html#109 <complex.html#109>`_

-

-   `stackTrace`:idx:

-     `nimrodc.html#104 <nimrodc.html#104>`_

-

-   `standardDeviation`:idx:

-     `math.html#136 <math.html#136>`_

-

-   `startProcess`:idx:

-     `osproc.html#107 <osproc.html#107>`_

-

-   `startsWith`:idx:

-     * `strutils.html#148 <strutils.html#148>`_

-     * `pegs.html#143 <pegs.html#143>`_

-

-   `statement macros`:idx:

-     `tut2.html#112 <tut2.html#112>`_

-

-   `Statements`:idx:

-     `manual.html#182 <manual.html#182>`_

-

-   `static error`:idx:

-     `manual.html#109 <manual.html#109>`_

-

-   `static type`:idx:

-     `manual.html#103 <manual.html#103>`_

-

-   `stdcall`:idx:

-     `manual.html#171 <manual.html#171>`_

-

-   `stderr`:idx:

-     `system.html#504 <system.html#504>`_

-

-   `stdin`:idx:

-     `system.html#502 <system.html#502>`_

-

-   `stdout`:idx:

-     `system.html#503 <system.html#503>`_

-

-   `st_dynamic_array`:idx:

-     `mysql.html#339 <mysql.html#339>`_

-

-   `st_mem_root`:idx:

-     `mysql.html#324 <mysql.html#324>`_

-

-   `stmt`:idx:

-     `system.html#116 <system.html#116>`_

-

-   `st_mysql`:idx:

-     `mysql.html#356 <mysql.html#356>`_

-

-   `st_mysql_bind`:idx:

-     `mysql.html#378 <mysql.html#378>`_

-

-   `st_mysql_data`:idx:

-     `mysql.html#328 <mysql.html#328>`_

-

-   `st_mysql_field`:idx:

-     `mysql.html#295 <mysql.html#295>`_

-

-   `st_mysql_manager`:idx:

-     `mysql.html#369 <mysql.html#369>`_

-

-   `st_mysql_methods`:idx:

-     `mysql.html#365 <mysql.html#365>`_

-

-   `st_mysql_options`:idx:

-     `mysql.html#343 <mysql.html#343>`_

-

-   `st_mysql_parameters`:idx:

-     `mysql.html#373 <mysql.html#373>`_

-

-   `st_mysql_res`:idx:

-     `mysql.html#360 <mysql.html#360>`_

-

-   `st_mysql_rows`:idx:

-     `mysql.html#312 <mysql.html#312>`_

-

-   `st_mysql_stmt`:idx:

-     `mysql.html#381 <mysql.html#381>`_

-

-   `st_net`:idx:

-     `mysql.html#198 <mysql.html#198>`_

-

-   `string`:idx:

-     * `manual.html#157 <manual.html#157>`_

-     * `system.html#111 <system.html#111>`_

-

-   `string interpolation`:idx:

-     `strutils.html#108 <strutils.html#108>`_

-

-   `String literals`:idx:

-     `manual.html#119 <manual.html#119>`_

-

-   `strip`:idx:

-     `strutils.html#112 <strutils.html#112>`_

-

-   `strong`:idx:

-     `xmlgen.html#166 <xmlgen.html#166>`_

-

-   `structured type`:idx:

-     `manual.html#158 <manual.html#158>`_

-

-   `strVal`:idx:

-     `macros.html#128 <macros.html#128>`_

-

-   `strVal=`:idx:

-     `macros.html#134 <macros.html#134>`_

-

-   `st_udf_args`:idx:

-     `mysql.html#258 <mysql.html#258>`_

-

-   `st_udf_init`:idx:

-     `mysql.html#262 <mysql.html#262>`_

-

-   `st_used_mem`:idx:

-     `mysql.html#320 <mysql.html#320>`_

-

-   `style`:idx:

-     `xmlgen.html#167 <xmlgen.html#167>`_

-

-   `style-insensitive`:idx:

-     `manual.html#118 <manual.html#118>`_

-

-   `sub`:idx:

-     `xmlgen.html#168 <xmlgen.html#168>`_

-

-   `subrange`:idx:

-     * `manual.html#156 <manual.html#156>`_

-     * `tut1.html#115 <tut1.html#115>`_

-

-   `substitution`:idx:

-     `strutils.html#107 <strutils.html#107>`_

-

-   `succ`:idx:

-     `system.html#169 <system.html#169>`_

-

-   `sum`:idx:

-     `math.html#110 <math.html#110>`_

-

-   `sup`:idx:

-     `xmlgen.html#169 <xmlgen.html#169>`_

-

-   `suspend`:idx:

-     `osproc.html#108 <osproc.html#108>`_

-

-   `swap`:idx:

-     `system.html#425 <system.html#425>`_

-

-   `symAddr`:idx:

-     `dynlib.html#104 <dynlib.html#104>`_

-

-   `symbol`:idx:

-     `macros.html#125 <macros.html#125>`_

-

-   `symbol=`:idx:

-     `macros.html#131 <macros.html#131>`_

-

-   `syscall`:idx:

-     `manual.html#178 <manual.html#178>`_

-

-   `system`:idx:

-     `manual.html#230 <manual.html#230>`_

-

-   `table`:idx:

-     `xmlgen.html#170 <xmlgen.html#170>`_

-

-   `tabulator`:idx:

-     `manual.html#125 <manual.html#125>`_

-

-   `TAddress`:idx:

-     `system.html#380 <system.html#380>`_

-

-   `tan`:idx:

-     `math.html#130 <math.html#130>`_

-

-   `tanh`:idx:

-     `math.html#131 <math.html#131>`_

-

-   `TBackgroundColor`:idx:

-     `terminal.html#114 <terminal.html#114>`_

-

-   `TBaseLexer`:idx:

-     `lexbase.html#103 <lexbase.html#103>`_

-

-   `Tbind_destructor_func`:idx:

-     `sqlite3.html#183 <sqlite3.html#183>`_

-

-   `tbody`:idx:

-     `xmlgen.html#171 <xmlgen.html#171>`_

-

-   `TCfgEvent`:idx:

-     `parsecfg.html#102 <parsecfg.html#102>`_

-

-   `TCfgEventKind`:idx:

-     `parsecfg.html#101 <parsecfg.html#101>`_

-

-   `TCfgParser`:idx:

-     `parsecfg.html#103 <parsecfg.html#103>`_

-

-   `TCharSet`:idx:

-     `strutils.html#101 <strutils.html#101>`_

-

-   `TCmdLineKind`:idx:

-     `parseopt.html#101 <parseopt.html#101>`_

-

-   `TComplex`:idx:

-     `complex.html#101 <complex.html#101>`_

-

-   `Tcreate_function_final_func`:idx:

-     `sqlite3.html#186 <sqlite3.html#186>`_

-

-   `Tcreate_function_func_func`:idx:

-     `sqlite3.html#185 <sqlite3.html#185>`_

-

-   `Tcreate_function_step_func`:idx:

-     `sqlite3.html#184 <sqlite3.html#184>`_

-

-   `TCsvParser`:idx:

-     `parsecsv.html#104 <parsecsv.html#104>`_

-

-   `TCsvRow`:idx:

-     `parsecsv.html#103 <parsecsv.html#103>`_

-

-   `TCurl`:idx:

-     `libcurl.html#140 <libcurl.html#140>`_

-

-   `Tcurl_calloc_callback`:idx:

-     `libcurl.html#153 <libcurl.html#153>`_

-

-   `Tcurl_closepolicy`:idx:

-     `libcurl.html#174 <libcurl.html#174>`_

-

-   `TCURLcode`:idx:

-     `libcurl.html#156 <libcurl.html#156>`_

-

-   `Tcurl_conv_callback`:idx:

-     `libcurl.html#157 <libcurl.html#157>`_

-

-   `Tcurl_debug_callback`:idx:

-     `libcurl.html#155 <libcurl.html#155>`_

-

-   `TCURLFORMcode`:idx:

-     `libcurl.html#170 <libcurl.html#170>`_

-

-   `Tcurl_formget_callback`:idx:

-     `libcurl.html#171 <libcurl.html#171>`_

-

-   `TCURLformoption`:idx:

-     `libcurl.html#168 <libcurl.html#168>`_

-

-   `Tcurl_forms`:idx:

-     `libcurl.html#169 <libcurl.html#169>`_

-

-   `Tcurl_free_callback`:idx:

-     `libcurl.html#150 <libcurl.html#150>`_

-

-   `Tcurl_ftpauth`:idx:

-     `libcurl.html#161 <libcurl.html#161>`_

-

-   `Tcurl_ftpmethod`:idx:

-     `libcurl.html#162 <libcurl.html#162>`_

-

-   `Tcurl_ftpssl`:idx:

-     `libcurl.html#160 <libcurl.html#160>`_

-

-   `Tcurl_httppost`:idx:

-     `libcurl.html#141 <libcurl.html#141>`_

-

-   `TCURL_HTTP_VERSION`:idx:

-     `libcurl.html#164 <libcurl.html#164>`_

-

-   `TCURLINFO`:idx:

-     `libcurl.html#173 <libcurl.html#173>`_

-

-   `Tcurl_infotype`:idx:

-     `libcurl.html#154 <libcurl.html#154>`_

-

-   `Tcurliocmd`:idx:

-     `libcurl.html#147 <libcurl.html#147>`_

-

-   `Tcurl_ioctl_callback`:idx:

-     `libcurl.html#148 <libcurl.html#148>`_

-

-   `Tcurlioerr`:idx:

-     `libcurl.html#146 <libcurl.html#146>`_

-

-   `Tcurl_lock_access`:idx:

-     `libcurl.html#176 <libcurl.html#176>`_

-

-   `Tcurl_lock_data`:idx:

-     `libcurl.html#175 <libcurl.html#175>`_

-

-   `Tcurl_lock_function`:idx:

-     `libcurl.html#177 <libcurl.html#177>`_

-

-   `TCURLM`:idx:

-     `libcurl.html#184 <libcurl.html#184>`_

-

-   `Tcurl_malloc_callback`:idx:

-     `libcurl.html#149 <libcurl.html#149>`_

-

-   `TCURLMcode`:idx:

-     `libcurl.html#186 <libcurl.html#186>`_

-

-   `TCURLMoption`:idx:

-     `libcurl.html#190 <libcurl.html#190>`_

-

-   `TCURLMsg`:idx:

-     `libcurl.html#188 <libcurl.html#188>`_

-

-   `TCURLMSGEnum`:idx:

-     `libcurl.html#187 <libcurl.html#187>`_

-

-   `TCURL_NETRC_OPTION`:idx:

-     `libcurl.html#165 <libcurl.html#165>`_

-

-   `TCURLoption`:idx:

-     `libcurl.html#163 <libcurl.html#163>`_

-

-   `Tcurl_passwd_callback`:idx:

-     `libcurl.html#145 <libcurl.html#145>`_

-

-   `Tcurl_progress_callback`:idx:

-     `libcurl.html#142 <libcurl.html#142>`_

-

-   `Tcurl_proxytype`:idx:

-     `libcurl.html#159 <libcurl.html#159>`_

-

-   `Tcurl_read_callback`:idx:

-     `libcurl.html#144 <libcurl.html#144>`_

-

-   `Tcurl_realloc_callback`:idx:

-     `libcurl.html#151 <libcurl.html#151>`_

-

-   `TCURLSH`:idx:

-     `libcurl.html#179 <libcurl.html#179>`_

-

-   `TCURLSHcode`:idx:

-     `libcurl.html#180 <libcurl.html#180>`_

-

-   `TCURLSHoption`:idx:

-     `libcurl.html#181 <libcurl.html#181>`_

-

-   `Tcurl_slist`:idx:

-     `libcurl.html#172 <libcurl.html#172>`_

-

-   `Tcurl_socket`:idx:

-     `libcurl.html#185 <libcurl.html#185>`_

-

-   `Tcurl_socket_callback`:idx:

-     `libcurl.html#189 <libcurl.html#189>`_

-

-   `Tcurl_ssl_ctx_callback`:idx:

-     `libcurl.html#158 <libcurl.html#158>`_

-

-   `TCURL_SSL_VERSION`:idx:

-     `libcurl.html#166 <libcurl.html#166>`_

-

-   `Tcurl_strdup_callback`:idx:

-     `libcurl.html#152 <libcurl.html#152>`_

-

-   `TCURL_TIMECOND`:idx:

-     `libcurl.html#167 <libcurl.html#167>`_

-

-   `Tcurl_unlock_function`:idx:

-     `libcurl.html#178 <libcurl.html#178>`_

-

-   `TCURLversion`:idx:

-     `libcurl.html#182 <libcurl.html#182>`_

-

-   `Tcurl_version_info_data`:idx:

-     `libcurl.html#183 <libcurl.html#183>`_

-

-   `Tcurl_write_callback`:idx:

-     `libcurl.html#143 <libcurl.html#143>`_

-

-   `td`:idx:

-     `xmlgen.html#172 <xmlgen.html#172>`_

-

-   `TDbConn`:idx:

-     * `db_postgres.html#102 <db_postgres.html#102>`_

-     * `db_mysql.html#102 <db_mysql.html#102>`_

-

-   `template`:idx:

-     `manual.html#220 <manual.html#220>`_

-

-   `TEndian`:idx:

-     `system.html#393 <system.html#393>`_

-

-   `term`:idx:

-     * `pegs.html#103 <pegs.html#103>`_

-     * `pegs.html#106 <pegs.html#106>`_

-

-   `termIgnoreCase`:idx:

-     `pegs.html#104 <pegs.html#104>`_

-

-   `termIgnoreStyle`:idx:

-     `pegs.html#105 <pegs.html#105>`_

-

-   `terminate`:idx:

-     `osproc.html#110 <osproc.html#110>`_

-

-   `textarea`:idx:

-     `xmlgen.html#173 <xmlgen.html#173>`_

-

-   `TFile`:idx:

-     `system.html#499 <system.html#499>`_

-

-   `TFileHandle`:idx:

-     `system.html#501 <system.html#501>`_

-

-   `TFileMode`:idx:

-     `system.html#500 <system.html#500>`_

-

-   `TFilePermission`:idx:

-     `os.html#161 <os.html#161>`_

-

-   `TFileStream`:idx:

-     `streams.html#119 <streams.html#119>`_

-

-   `TFloatClass`:idx:

-     `math.html#103 <math.html#103>`_

-

-   `tfoot`:idx:

-     `xmlgen.html#174 <xmlgen.html#174>`_

-

-   `TForegroundColor`:idx:

-     `terminal.html#113 <terminal.html#113>`_

-

-   `TFormatFlag`:idx:

-     `strtabs.html#111 <strtabs.html#111>`_

-

-   `TGC_Strategy`:idx:

-     `system.html#482 <system.html#482>`_

-

-   `th`:idx:

-     `xmlgen.html#175 <xmlgen.html#175>`_

-

-   `THash`:idx:

-     `hashes.html#101 <hashes.html#101>`_

-

-   `thead`:idx:

-     `xmlgen.html#176 <xmlgen.html#176>`_

-

-   `THttpMethod`:idx:

-     `httpclient.html#104 <httpclient.html#104>`_

-

-   `TimeInfoToTime`:idx:

-     `times.html#108 <times.html#108>`_

-

-   `TIMESTAMP_FLAG`:idx:

-     `mysql.html#134 <mysql.html#134>`_

-

-   `title`:idx:

-     `xmlgen.html#177 <xmlgen.html#177>`_

-

-   `TLibHandle`:idx:

-     `dynlib.html#101 <dynlib.html#101>`_

-

-   `TMonth`:idx:

-     `times.html#101 <times.html#101>`_

-

-   `TNimNodeKinds`:idx:

-     `macros.html#103 <macros.html#103>`_

-

-   `TNimrodIdent`:idx:

-     `macros.html#108 <macros.html#108>`_

-

-   `TNimrodNodeKind`:idx:

-     `macros.html#102 <macros.html#102>`_

-

-   `TNimrodSymKind`:idx:

-     `macros.html#106 <macros.html#106>`_

-

-   `TNimrodTypeKind`:idx:

-     `macros.html#104 <macros.html#104>`_

-

-   `TNimSymKinds`:idx:

-     `macros.html#107 <macros.html#107>`_

-

-   `TNimTypeKinds`:idx:

-     `macros.html#105 <macros.html#105>`_

-

-   `toBiggestFloat`:idx:

-     `system.html#409 <system.html#409>`_

-

-   `toBiggestInt`:idx:

-     `system.html#411 <system.html#411>`_

-

-   `toBin`:idx:

-     `strutils.html#161 <strutils.html#161>`_

-

-   `TObject`:idx:

-     `system.html#136 <system.html#136>`_

-

-   `toFloat`:idx:

-     `system.html#408 <system.html#408>`_

-

-   `toHex`:idx:

-     `strutils.html#140 <strutils.html#140>`_

-

-   `toInt`:idx:

-     `system.html#410 <system.html#410>`_

-

-   `toLower`:idx:

-     * `strutils.html#113 <strutils.html#113>`_

-     * `strutils.html#114 <strutils.html#114>`_

-     * `unicode.html#111 <unicode.html#111>`_

-

-   `toOct`:idx:

-     `strutils.html#160 <strutils.html#160>`_

-

-   `toOctal`:idx:

-     `strutils.html#125 <strutils.html#125>`_

-

-   `TOptParser`:idx:

-     `parseopt.html#102 <parseopt.html#102>`_

-

-   `toString`:idx:

-     `strutils.html#146 <strutils.html#146>`_

-

-   `toStrLit`:idx:

-     `macros.html#146 <macros.html#146>`_

-

-   `toTitle`:idx:

-     `unicode.html#113 <unicode.html#113>`_

-

-   `toU16`:idx:

-     `system.html#191 <system.html#191>`_

-

-   `toU32`:idx:

-     `system.html#192 <system.html#192>`_

-

-   `toU8`:idx:

-     `system.html#190 <system.html#190>`_

-

-   `toUpper`:idx:

-     * `strutils.html#115 <strutils.html#115>`_

-     * `strutils.html#116 <strutils.html#116>`_

-     * `unicode.html#112 <unicode.html#112>`_

-

-   `toUTF8`:idx:

-     `unicode.html#110 <unicode.html#110>`_

-

-   `TPathComponent`:idx:

-     `os.html#153 <os.html#153>`_

-

-   `TPeg`:idx:

-     `pegs.html#102 <pegs.html#102>`_

-

-   `TProcessOption`:idx:

-     `osproc.html#102 <osproc.html#102>`_

-

-   `tr`:idx:

-     `xmlgen.html#178 <xmlgen.html#178>`_

-

-   `traced`:idx:

-     * `manual.html#166 <manual.html#166>`_

-     * `tut1.html#121 <tut1.html#121>`_

-

-   `transformFile`:idx:

-     `pegs.html#147 <pegs.html#147>`_

-

-   `TRequestMethod`:idx:

-     `cgi.html#105 <cgi.html#105>`_

-

-   `TResponse`:idx:

-     `httpclient.html#101 <httpclient.html#101>`_

-

-   `TResult`:idx:

-     `system.html#167 <system.html#167>`_

-

-   `TRow`:idx:

-     * `db_postgres.html#103 <db_postgres.html#103>`_

-     * `db_mysql.html#103 <db_mysql.html#103>`_

-

-   `TRune`:idx:

-     `unicode.html#101 <unicode.html#101>`_

-

-   `TRune16`:idx:

-     `unicode.html#102 <unicode.html#102>`_

-

-   `TRunningStat`:idx:

-     `math.html#133 <math.html#133>`_

-

-   `try`:idx:

-     * `manual.html#194 <manual.html#194>`_

-     * `tut2.html#108 <tut2.html#108>`_

-

-   `TryInsertID`:idx:

-     * `db_postgres.html#114 <db_postgres.html#114>`_

-     * `db_mysql.html#114 <db_mysql.html#114>`_

-

-   `TryQuery`:idx:

-     * `db_postgres.html#108 <db_postgres.html#108>`_

-     * `db_mysql.html#108 <db_mysql.html#108>`_

-

-   `TServer`:idx:

-     `httpserver.html#102 <httpserver.html#102>`_

-

-   `Tsqlite3_callback`:idx:

-     `sqlite3.html#182 <sqlite3.html#182>`_

-

-   `Tsqlite3_collation_needed_func`:idx:

-     `sqlite3.html#189 <sqlite3.html#189>`_

-

-   `Tsqlite3_create_collation_func`:idx:

-     `sqlite3.html#188 <sqlite3.html#188>`_

-

-   `Tsqlite3_result_func`:idx:

-     `sqlite3.html#187 <sqlite3.html#187>`_

-

-   `TSqlLexer`:idx:

-     `parsesql.html#101 <parsesql.html#101>`_

-

-   `TSqlNode`:idx:

-     `parsesql.html#105 <parsesql.html#105>`_

-

-   `TSqlNodeKind`:idx:

-     `parsesql.html#102 <parsesql.html#102>`_

-

-   `TSqlParser`:idx:

-     `parsesql.html#106 <parsesql.html#106>`_

-

-   `TSqlQuery`:idx:

-     * `db_postgres.html#105 <db_postgres.html#105>`_

-     * `db_mysql.html#105 <db_mysql.html#105>`_

-

-   `TStream`:idx:

-     `streams.html#102 <streams.html#102>`_

-

-   `TStringStream`:idx:

-     `streams.html#116 <streams.html#116>`_

-

-   `TStringTable`:idx:

-     `strtabs.html#102 <strtabs.html#102>`_

-

-   `TStringTableMode`:idx:

-     `strtabs.html#101 <strtabs.html#101>`_

-

-   `TStyle`:idx:

-     `terminal.html#111 <terminal.html#111>`_

-

-   `tt`:idx:

-     `xmlgen.html#179 <xmlgen.html#179>`_

-

-   `TTime`:idx:

-     `times.html#103 <times.html#103>`_

-

-   `TTimeInfo`:idx:

-     `times.html#104 <times.html#104>`_

-

-   `tuple`:idx:

-     `manual.html#161 <manual.html#161>`_

-

-   `tuple unpacking`:idx:

-     `manual.html#212 <manual.html#212>`_

-

-   `TWeekDay`:idx:

-     `times.html#102 <times.html#102>`_

-

-   `TXmlError`:idx:

-     `parsexml.html#104 <parsexml.html#104>`_

-

-   `TXmlEventKind`:idx:

-     `parsexml.html#103 <parsexml.html#103>`_

-

-   `TXmlParseOption`:idx:

-     `parsexml.html#105 <parsexml.html#105>`_

-

-   `TXmlParser`:idx:

-     `parsexml.html#106 <parsexml.html#106>`_

-

-   `typ`:idx:

-     `macros.html#127 <macros.html#127>`_

-

-   `typ=`:idx:

-     `macros.html#133 <macros.html#133>`_

-

-   `type`:idx:

-     * `manual.html#102 <manual.html#102>`_

-     * `manual.html#141 <manual.html#141>`_

-     * `manual.html#217 <manual.html#217>`_

-

-   `type casts`:idx:

-     `tut2.html#101 <tut2.html#101>`_

-

-   `type conversions`:idx:

-     `tut2.html#102 <tut2.html#102>`_

-

-   `type parameters`:idx:

-     * `manual.html#219 <manual.html#219>`_

-     * `tut2.html#110 <tut2.html#110>`_

-

-   `type suffix`:idx:

-     `manual.html#138 <manual.html#138>`_

-

-   `typeDesc`:idx:

-     `system.html#117 <system.html#117>`_

-

-   `TZipArchive`:idx:

-     `zipfiles.html#101 <zipfiles.html#101>`_

-

-   `UDF_ARGS`:idx:

-     `mysql.html#259 <mysql.html#259>`_

-

-   `UDF_INIT`:idx:

-     `mysql.html#263 <mysql.html#263>`_

-

-   `ul`:idx:

-     `xmlgen.html#180 <xmlgen.html#180>`_

-

-   `unchecked runtime error`:idx:

-     `manual.html#111 <manual.html#111>`_

-

-   `UNIQUE_FLAG`:idx:

-     `mysql.html#140 <mysql.html#140>`_

-

-   `UNIQUE_KEY_FLAG`:idx:

-     `mysql.html#126 <mysql.html#126>`_

-

-   `units`:idx:

-     `manual.html#181 <manual.html#181>`_

-

-   `unixTimeToWinTime`:idx:

-     `times.html#117 <times.html#117>`_

-

-   `UnixToNativePath`:idx:

-     `os.html#113 <os.html#113>`_

-

-   `UnloadLib`:idx:

-     `dynlib.html#103 <dynlib.html#103>`_

-

-   `unsigned integer`:idx:

-     * `manual.html#143 <manual.html#143>`_

-     * `tut1.html#108 <tut1.html#108>`_

-

-   `unsigned operations`:idx:

-     * `manual.html#144 <manual.html#144>`_

-     * `tut1.html#109 <tut1.html#109>`_

-

-   `UNSIGNED_FLAG`:idx:

-     `mysql.html#129 <mysql.html#129>`_

-

-   `untraced`:idx:

-     * `manual.html#167 <manual.html#167>`_

-     * `tut1.html#122 <tut1.html#122>`_

-

-   `URLdecode`:idx:

-     `cgi.html#102 <cgi.html#102>`_

-

-   `URLencode`:idx:

-     `cgi.html#101 <cgi.html#101>`_

-

-   `URLretrieveStream`:idx:

-     `web.html#101 <web.html#101>`_

-

-   `URLretrieveString`:idx:

-     `web.html#102 <web.html#102>`_

-

-   `USED_MEM`:idx:

-     `mysql.html#321 <mysql.html#321>`_

-

-   `USERNAME_LENGTH`:idx:

-     `mysql.html#112 <mysql.html#112>`_

-

-   `validateData`:idx:

-     `cgi.html#110 <cgi.html#110>`_

-

-   `validEmailAddress`:idx:

-     `strutils.html#163 <strutils.html#163>`_

-

-   `validIdentifier`:idx:

-     `strutils.html#164 <strutils.html#164>`_

-

-   `var`:idx:

-     `xmlgen.html#181 <xmlgen.html#181>`_

-

-   `Var`:idx:

-     `manual.html#187 <manual.html#187>`_

-

-   `varargs`:idx:

-     `manual.html#251 <manual.html#251>`_

-

-   `variance`:idx:

-     * `math.html#112 <math.html#112>`_

-     * `math.html#135 <math.html#135>`_

-

-   `variant`:idx:

-     * `manual.html#163 <manual.html#163>`_

-     * `tut2.html#103 <tut2.html#103>`_

-

-   `verbose`:idx:

-     `regexprs.html#121 <regexprs.html#121>`_

-

-   `vertical tabulator`:idx:

-     `manual.html#126 <manual.html#126>`_

-

-   `volatile`:idx:

-     `nimrodc.html#107 <nimrodc.html#107>`_

-

-   `waitForExit`:idx:

-     `osproc.html#113 <osproc.html#113>`_

-

-   `walkDir`:idx:

-     `os.html#156 <os.html#156>`_

-

-   `walkDirRec`:idx:

-     `os.html#157 <os.html#157>`_

-

-   `walkFiles`:idx:

-     * `os.html#152 <os.html#152>`_

-     * `zipfiles.html#110 <zipfiles.html#110>`_

-

-   `warning`:idx:

-     * `manual.html#232 <manual.html#232>`_

-     * `manual.html#243 <manual.html#243>`_

-     * `macros.html#139 <macros.html#139>`_

-

-   `when`:idx:

-     * `manual.html#191 <manual.html#191>`_

-     * `tut1.html#106 <tut1.html#106>`_

-

-   `while`:idx:

-     `manual.html#203 <manual.html#203>`_

-

-   `whitespace`:idx:

-     `pegs.html#127 <pegs.html#127>`_

-

-   `Whitespace`:idx:

-     `strutils.html#102 <strutils.html#102>`_

-

-   `winTimeToUnixTime`:idx:

-     `times.html#118 <times.html#118>`_

-

-   `write`:idx:

-     * `system.html#515 <system.html#515>`_

-     * `system.html#516 <system.html#516>`_

-     * `system.html#517 <system.html#517>`_

-     * `system.html#518 <system.html#518>`_

-     * `system.html#519 <system.html#519>`_

-     * `system.html#520 <system.html#520>`_

-     * `system.html#521 <system.html#521>`_

-     * `streams.html#103 <streams.html#103>`_

-     * `streams.html#104 <streams.html#104>`_

-     * `ropes.html#118 <ropes.html#118>`_

-

-   `writeBuffer`:idx:

-     `system.html#531 <system.html#531>`_

-

-   `writeBytes`:idx:

-     `system.html#529 <system.html#529>`_

-

-   `writeChars`:idx:

-     `system.html#530 <system.html#530>`_

-

-   `writeContentType`:idx:

-     `cgi.html#144 <cgi.html#144>`_

-

-   `writeln`:idx:

-     * `system.html#523 <system.html#523>`_

-     * `system.html#524 <system.html#524>`_

-

-   `WriteStyled`:idx:

-     `terminal.html#112 <terminal.html#112>`_

-

-   `wwwNL`:idx:

-     `httpserver.html#101 <httpserver.html#101>`_

-

-   `XML`:idx:

-     * `parsexml.html#101 <parsexml.html#101>`_

-     * `xmlgen.html#101 <xmlgen.html#101>`_

-

-   `xmlCheckedTag`:idx:

-     `xmlgen.html#106 <xmlgen.html#106>`_

-

-   `XMLencode`:idx:

-     `cgi.html#103 <cgi.html#103>`_

-

-   `xor`:idx:

-     * `system.html#123 <system.html#123>`_

-     * `system.html#253 <system.html#253>`_

-     * `system.html#254 <system.html#254>`_

-     * `system.html#255 <system.html#255>`_

-     * `system.html#256 <system.html#256>`_

-     * `system.html#257 <system.html#257>`_

-

-   `yield`:idx:

-     `manual.html#200 <manual.html#200>`_

-

-   `ze`:idx:

-     * `system.html#184 <system.html#184>`_

-     * `system.html#185 <system.html#185>`_

-

-   `ze64`:idx:

-     * `system.html#186 <system.html#186>`_

-     * `system.html#187 <system.html#187>`_

-     * `system.html#188 <system.html#188>`_

-     * `system.html#189 <system.html#189>`_

-

-   `ZEROFILL_FLAG`:idx:

-     `mysql.html#130 <mysql.html#130>`_

-

-   `zeroMem`:idx:

-     `system.html#415 <system.html#415>`_
\ No newline at end of file
+
+=====
+Index
+=====
+
+.. index::
+
+
+   `!`:idx:
+     * `pegs.html#116 <pegs.html#116>`_
+     * `macros.html#114 <macros.html#114>`_
+
+   `!=`:idx:
+     `system.html#353 <system.html#353>`_
+
+   `$`:idx:
+     * `sockets.html#111 <sockets.html#111>`_
+     * `system.html#429 <system.html#429>`_
+     * `system.html#430 <system.html#430>`_
+     * `system.html#431 <system.html#431>`_
+     * `system.html#432 <system.html#432>`_
+     * `system.html#433 <system.html#433>`_
+     * `system.html#434 <system.html#434>`_
+     * `system.html#435 <system.html#435>`_
+     * `system.html#436 <system.html#436>`_
+     * `times.html#109 <times.html#109>`_
+     * `times.html#110 <times.html#110>`_
+     * `pegs.html#136 <pegs.html#136>`_
+     * `macros.html#115 <macros.html#115>`_
+     * `ropes.html#119 <ropes.html#119>`_
+     * `xmldom.html#206 <xmldom.html#206>`_
+     * `xmltree.html#125 <xmltree.html#125>`_
+     * `colors.html#248 <colors.html#248>`_
+
+   `%`:idx:
+     * `strutils.html#109 <strutils.html#109>`_
+     * `strutils.html#110 <strutils.html#110>`_
+     * `strtabs.html#112 <strtabs.html#112>`_
+     * `ropes.html#120 <ropes.html#120>`_
+
+   `%%`:idx:
+     * `system.html#298 <system.html#298>`_
+     * `system.html#299 <system.html#299>`_
+     * `system.html#300 <system.html#300>`_
+     * `system.html#301 <system.html#301>`_
+     * `system.html#302 <system.html#302>`_
+
+   `&`:idx:
+     * `system.html#367 <system.html#367>`_
+     * `system.html#368 <system.html#368>`_
+     * `system.html#369 <system.html#369>`_
+     * `system.html#370 <system.html#370>`_
+     * `system.html#472 <system.html#472>`_
+     * `system.html#473 <system.html#473>`_
+     * `system.html#474 <system.html#474>`_
+     * `pegs.html#115 <pegs.html#115>`_
+     * `ropes.html#109 <ropes.html#109>`_
+     * `ropes.html#110 <ropes.html#110>`_
+     * `ropes.html#111 <ropes.html#111>`_
+     * `ropes.html#112 <ropes.html#112>`_
+
+   `*`:idx:
+     * `system.html#218 <system.html#218>`_
+     * `system.html#219 <system.html#219>`_
+     * `system.html#220 <system.html#220>`_
+     * `system.html#221 <system.html#221>`_
+     * `system.html#222 <system.html#222>`_
+     * `system.html#317 <system.html#317>`_
+     * `system.html#325 <system.html#325>`_
+     * `complex.html#107 <complex.html#107>`_
+     * `pegs.html#112 <pegs.html#112>`_
+
+   `*%`:idx:
+     * `system.html#288 <system.html#288>`_
+     * `system.html#289 <system.html#289>`_
+     * `system.html#290 <system.html#290>`_
+     * `system.html#291 <system.html#291>`_
+     * `system.html#292 <system.html#292>`_
+
+   `+`:idx:
+     * `system.html#193 <system.html#193>`_
+     * `system.html#194 <system.html#194>`_
+     * `system.html#195 <system.html#195>`_
+     * `system.html#196 <system.html#196>`_
+     * `system.html#197 <system.html#197>`_
+     * `system.html#208 <system.html#208>`_
+     * `system.html#209 <system.html#209>`_
+     * `system.html#210 <system.html#210>`_
+     * `system.html#211 <system.html#211>`_
+     * `system.html#212 <system.html#212>`_
+     * `system.html#313 <system.html#313>`_
+     * `system.html#315 <system.html#315>`_
+     * `system.html#326 <system.html#326>`_
+     * `complex.html#103 <complex.html#103>`_
+     * `pegs.html#114 <pegs.html#114>`_
+     * `colors.html#103 <colors.html#103>`_
+
+   `+%`:idx:
+     * `system.html#278 <system.html#278>`_
+     * `system.html#279 <system.html#279>`_
+     * `system.html#280 <system.html#280>`_
+     * `system.html#281 <system.html#281>`_
+     * `system.html#282 <system.html#282>`_
+
+   `-`:idx:
+     * `system.html#198 <system.html#198>`_
+     * `system.html#199 <system.html#199>`_
+     * `system.html#200 <system.html#200>`_
+     * `system.html#201 <system.html#201>`_
+     * `system.html#202 <system.html#202>`_
+     * `system.html#213 <system.html#213>`_
+     * `system.html#214 <system.html#214>`_
+     * `system.html#215 <system.html#215>`_
+     * `system.html#216 <system.html#216>`_
+     * `system.html#217 <system.html#217>`_
+     * `system.html#314 <system.html#314>`_
+     * `system.html#316 <system.html#316>`_
+     * `system.html#327 <system.html#327>`_
+     * `complex.html#104 <complex.html#104>`_
+     * `complex.html#105 <complex.html#105>`_
+     * `times.html#113 <times.html#113>`_
+     * `colors.html#104 <colors.html#104>`_
+
+   `-%`:idx:
+     * `system.html#283 <system.html#283>`_
+     * `system.html#284 <system.html#284>`_
+     * `system.html#285 <system.html#285>`_
+     * `system.html#286 <system.html#286>`_
+     * `system.html#287 <system.html#287>`_
+
+   `-+-`:idx:
+     `system.html#328 <system.html#328>`_
+
+   `/`:idx:
+     * `system.html#318 <system.html#318>`_
+     * `system.html#412 <system.html#412>`_
+     * `os.html#124 <os.html#124>`_
+     * `complex.html#106 <complex.html#106>`_
+     * `pegs.html#109 <pegs.html#109>`_
+
+   `/%`:idx:
+     * `system.html#293 <system.html#293>`_
+     * `system.html#294 <system.html#294>`_
+     * `system.html#295 <system.html#295>`_
+     * `system.html#296 <system.html#296>`_
+     * `system.html#297 <system.html#297>`_
+
+   `/../`:idx:
+     `os.html#128 <os.html#128>`_
+
+   `<`:idx:
+     * `system.html#268 <system.html#268>`_
+     * `system.html#269 <system.html#269>`_
+     * `system.html#270 <system.html#270>`_
+     * `system.html#271 <system.html#271>`_
+     * `system.html#272 <system.html#272>`_
+     * `system.html#321 <system.html#321>`_
+     * `system.html#345 <system.html#345>`_
+     * `system.html#346 <system.html#346>`_
+     * `system.html#347 <system.html#347>`_
+     * `system.html#348 <system.html#348>`_
+     * `system.html#349 <system.html#349>`_
+     * `system.html#350 <system.html#350>`_
+     * `system.html#351 <system.html#351>`_
+     * `system.html#352 <system.html#352>`_
+     * `times.html#114 <times.html#114>`_
+
+   `<%`:idx:
+     * `system.html#308 <system.html#308>`_
+     * `system.html#309 <system.html#309>`_
+     * `system.html#310 <system.html#310>`_
+     * `system.html#311 <system.html#311>`_
+     * `system.html#312 <system.html#312>`_
+
+   `<%`:idx:
+     `unicode.html#104 <unicode.html#104>`_
+
+   `<=`:idx:
+     * `system.html#263 <system.html#263>`_
+     * `system.html#264 <system.html#264>`_
+     * `system.html#265 <system.html#265>`_
+     * `system.html#266 <system.html#266>`_
+     * `system.html#267 <system.html#267>`_
+     * `system.html#320 <system.html#320>`_
+     * `system.html#338 <system.html#338>`_
+     * `system.html#339 <system.html#339>`_
+     * `system.html#340 <system.html#340>`_
+     * `system.html#341 <system.html#341>`_
+     * `system.html#342 <system.html#342>`_
+     * `system.html#343 <system.html#343>`_
+     * `system.html#344 <system.html#344>`_
+
+   `<=`:idx:
+     `times.html#115 <times.html#115>`_
+
+   `<=%`:idx:
+     * `system.html#303 <system.html#303>`_
+     * `system.html#304 <system.html#304>`_
+     * `system.html#305 <system.html#305>`_
+     * `system.html#306 <system.html#306>`_
+     * `system.html#307 <system.html#307>`_
+
+   `<=%`:idx:
+     `unicode.html#103 <unicode.html#103>`_
+
+   `<>`:idx:
+     `xmltree.html#127 <xmltree.html#127>`_
+
+   `==`:idx:
+     * `md5.html#107 <md5.html#107>`_
+     * `sockets.html#109 <sockets.html#109>`_
+     * `sockets.html#110 <sockets.html#110>`_
+     * `system.html#258 <system.html#258>`_
+     * `system.html#259 <system.html#259>`_
+     * `system.html#260 <system.html#260>`_
+     * `system.html#261 <system.html#261>`_
+     * `system.html#262 <system.html#262>`_
+     * `system.html#319 <system.html#319>`_
+     * `system.html#329 <system.html#329>`_
+     * `system.html#330 <system.html#330>`_
+     * `system.html#331 <system.html#331>`_
+     * `system.html#332 <system.html#332>`_
+     * `system.html#333 <system.html#333>`_
+     * `system.html#334 <system.html#334>`_
+     * `system.html#335 <system.html#335>`_
+     * `system.html#336 <system.html#336>`_
+     * `system.html#337 <system.html#337>`_
+     * `system.html#475 <system.html#475>`_
+     * `complex.html#102 <complex.html#102>`_
+     * `unicode.html#105 <unicode.html#105>`_
+     * `macros.html#116 <macros.html#116>`_
+     * `macros.html#117 <macros.html#117>`_
+     * `colors.html#102 <colors.html#102>`_
+
+   `=~`:idx:
+     `regexprs.html#111 <regexprs.html#111>`_
+
+   `=~`:idx:
+     `pegs.html#143 <pegs.html#143>`_
+
+   `=~`:idx:
+     `re.html#115 <re.html#115>`_
+
+   `>`:idx:
+     `system.html#355 <system.html#355>`_
+
+   `>%`:idx:
+     `system.html#428 <system.html#428>`_
+
+   `>=`:idx:
+     `system.html#354 <system.html#354>`_
+
+   `>=%`:idx:
+     `system.html#427 <system.html#427>`_
+
+   `?`:idx:
+     `pegs.html#111 <pegs.html#111>`_
+
+   `@`:idx:
+     * `system.html#363 <system.html#363>`_
+     * `pegs.html#113 <pegs.html#113>`_
+
+   `[,]`:idx:
+     `graphics.html#112 <graphics.html#112>`_
+
+   `[,]=`:idx:
+     `graphics.html#114 <graphics.html#114>`_
+
+   `[]`:idx:
+     `strtabs.html#107 <strtabs.html#107>`_
+
+   `[]`:idx:
+     `macros.html#112 <macros.html#112>`_
+
+   `[]`:idx:
+     `ropes.html#115 <ropes.html#115>`_
+
+   `[]`:idx:
+     `xmltree.html#114 <xmltree.html#114>`_
+
+   `[]`:idx:
+     `graphics.html#111 <graphics.html#111>`_
+
+   `[]=`:idx:
+     `strtabs.html#106 <strtabs.html#106>`_
+
+   `[]=`:idx:
+     `macros.html#113 <macros.html#113>`_
+
+   `[]=`:idx:
+     `graphics.html#113 <graphics.html#113>`_
+
+   `[ESC]`:idx:
+     `manual.html#134 <manual.html#134>`_
+
+   `a`:idx:
+     `xmlgen.html#107 <xmlgen.html#107>`_
+
+   `abs`:idx:
+     * `system.html#273 <system.html#273>`_
+     * `system.html#274 <system.html#274>`_
+     * `system.html#275 <system.html#275>`_
+     * `system.html#276 <system.html#276>`_
+     * `system.html#277 <system.html#277>`_
+     * `system.html#322 <system.html#322>`_
+     * `complex.html#108 <complex.html#108>`_
+
+   `accept`:idx:
+     `sockets.html#120 <sockets.html#120>`_
+
+   `accumulateResult`:idx:
+     `system.html#494 <system.html#494>`_
+
+   `acronym`:idx:
+     `xmlgen.html#108 <xmlgen.html#108>`_
+
+   `acyclic`:idx:
+     `manual.html#238 <manual.html#238>`_
+
+   `add`:idx:
+     * `system.html#371 <system.html#371>`_
+     * `system.html#372 <system.html#372>`_
+     * `system.html#373 <system.html#373>`_
+     * `system.html#374 <system.html#374>`_
+     * `system.html#375 <system.html#375>`_
+     * `parsesql.html#108 <parsesql.html#108>`_
+     * `macros.html#119 <macros.html#119>`_
+     * `macros.html#120 <macros.html#120>`_
+     * `ropes.html#113 <ropes.html#113>`_
+     * `ropes.html#114 <ropes.html#114>`_
+     * `xmltree.html#111 <xmltree.html#111>`_
+     * `xmltree.html#123 <xmltree.html#123>`_
+
+   `addEscaped`:idx:
+     `xmltree.html#121 <xmltree.html#121>`_
+
+   `addf`:idx:
+     * `strutils.html#111 <strutils.html#111>`_
+     * `ropes.html#121 <ropes.html#121>`_
+
+   `addFile`:idx:
+     * `zipfiles.html#105 <zipfiles.html#105>`_
+     * `zipfiles.html#106 <zipfiles.html#106>`_
+     * `zipfiles.html#107 <zipfiles.html#107>`_
+
+   `addFileExt`:idx:
+     `os.html#137 <os.html#137>`_
+
+   `addQuitProc`:idx:
+     `system.html#413 <system.html#413>`_
+
+   `address`:idx:
+     `xmlgen.html#109 <xmlgen.html#109>`_
+
+   `addSep`:idx:
+     `strutils.html#150 <strutils.html#150>`_
+
+   `alert`:idx:
+     `manual.html#131 <manual.html#131>`_
+
+   `allCharsInSet`:idx:
+     `strutils.html#151 <strutils.html#151>`_
+
+   `alloc`:idx:
+     `system.html#420 <system.html#420>`_
+
+   `alloc0`:idx:
+     `system.html#421 <system.html#421>`_
+
+   `ALLOC_MAX_BLOCK_TO_DROP`:idx:
+     `mysql.html#317 <mysql.html#317>`_
+
+   `ALLOC_MAX_BLOCK_USAGE_BEFORE_DROP`:idx:
+     `mysql.html#318 <mysql.html#318>`_
+
+   `AltSep`:idx:
+     `os.html#104 <os.html#104>`_
+
+   `and`:idx:
+     * `system.html#121 <system.html#121>`_
+     * `system.html#243 <system.html#243>`_
+     * `system.html#244 <system.html#244>`_
+     * `system.html#245 <system.html#245>`_
+     * `system.html#246 <system.html#246>`_
+     * `system.html#247 <system.html#247>`_
+
+   `any`:idx:
+     `pegs.html#118 <pegs.html#118>`_
+
+   `any character`:idx:
+     `pegs.html#117 <pegs.html#117>`_
+
+   `any rune`:idx:
+     `pegs.html#119 <pegs.html#119>`_
+
+   `anyRune`:idx:
+     `pegs.html#120 <pegs.html#120>`_
+
+   `apostrophe`:idx:
+     `manual.html#129 <manual.html#129>`_
+
+   `appendChild`:idx:
+     `xmldom.html#165 <xmldom.html#165>`_
+
+   `AppendFileExt`:idx:
+     `os.html#138 <os.html#138>`_
+
+   `arccos`:idx:
+     `math.html#122 <math.html#122>`_
+
+   `arcsin`:idx:
+     `math.html#123 <math.html#123>`_
+
+   `arctan`:idx:
+     `math.html#124 <math.html#124>`_
+
+   `arctan2`:idx:
+     `math.html#125 <math.html#125>`_
+
+   `area`:idx:
+     `xmlgen.html#110 <xmlgen.html#110>`_
+
+   `arithmetic bit shifts`:idx:
+     `tut1.html#110 <tut1.html#110>`_
+
+   `array`:idx:
+     * `tut1.html#117 <tut1.html#117>`_
+     * `system.html#129 <system.html#129>`_
+
+   `array properties`:idx:
+     `tut2.html#106 <tut2.html#106>`_
+
+   `Arrays`:idx:
+     `manual.html#159 <manual.html#159>`_
+
+   `assembler`:idx:
+     `manual.html#205 <manual.html#205>`_
+
+   `assert`:idx:
+     `system.html#425 <system.html#425>`_
+
+   `AST`:idx:
+     `macros.html#101 <macros.html#101>`_
+
+   `attr`:idx:
+     `xmltree.html#116 <xmltree.html#116>`_
+
+   `attr=`:idx:
+     `xmltree.html#117 <xmltree.html#117>`_
+
+   `AttributeNode`:idx:
+     `xmldom.html#118 <xmldom.html#118>`_
+
+   `attrKey`:idx:
+     `parsexml.html#113 <parsexml.html#113>`_
+
+   `attrLen`:idx:
+     `xmltree.html#118 <xmltree.html#118>`_
+
+   `attrValue`:idx:
+     `parsexml.html#114 <parsexml.html#114>`_
+
+   `AUTO_INCREMENT_FLAG`:idx:
+     `mysql.html#133 <mysql.html#133>`_
+
+   `Automatic type conversion`:idx:
+     * `manual.html#145 <manual.html#145>`_
+     * `tut1.html#111 <tut1.html#111>`_
+
+   `b`:idx:
+     `xmlgen.html#111 <xmlgen.html#111>`_
+
+   `backref`:idx:
+     `pegs.html#124 <pegs.html#124>`_
+
+   `backrefIgnoreCase`:idx:
+     `pegs.html#125 <pegs.html#125>`_
+
+   `backrefIgnoreStyle`:idx:
+     `pegs.html#126 <pegs.html#126>`_
+
+   `backslash`:idx:
+     * `regexprs.html#101 <regexprs.html#101>`_
+     * `manual.html#127 <manual.html#127>`_
+     * `re.html#101 <re.html#101>`_
+
+   `backspace`:idx:
+     `manual.html#132 <manual.html#132>`_
+
+   `base`:idx:
+     `xmlgen.html#112 <xmlgen.html#112>`_
+
+   `base type`:idx:
+     `manual.html#180 <manual.html#180>`_
+
+   `big`:idx:
+     `xmlgen.html#113 <xmlgen.html#113>`_
+
+   `BiggestFloat`:idx:
+     `system.html#382 <system.html#382>`_
+
+   `BiggestInt`:idx:
+     `system.html#381 <system.html#381>`_
+
+   `BINARY_FLAG`:idx:
+     `mysql.html#131 <mysql.html#131>`_
+
+   `BINCMP_FLAG`:idx:
+     `mysql.html#141 <mysql.html#141>`_
+
+   `bindAddr`:idx:
+     `sockets.html#118 <sockets.html#118>`_
+
+   `binom`:idx:
+     `math.html#105 <math.html#105>`_
+
+   `blit`:idx:
+     `graphics.html#115 <graphics.html#115>`_
+
+   `BLOB_FLAG`:idx:
+     `mysql.html#128 <mysql.html#128>`_
+
+   `block`:idx:
+     `manual.html#201 <manual.html#201>`_
+
+   `blockquote`:idx:
+     `xmlgen.html#114 <xmlgen.html#114>`_
+
+   `BlockTags`:idx:
+     `htmlparser.html#103 <htmlparser.html#103>`_
+
+   `body`:idx:
+     `xmlgen.html#115 <xmlgen.html#115>`_
+
+   `bool`:idx:
+     `system.html#109 <system.html#109>`_
+
+   `boolean`:idx:
+     * `manual.html#153 <manual.html#153>`_
+     * `tut1.html#107 <tut1.html#107>`_
+
+   `br`:idx:
+     `xmlgen.html#116 <xmlgen.html#116>`_
+
+   `break`:idx:
+     `manual.html#202 <manual.html#202>`_
+
+   `breakpoint`:idx:
+     `endb.html#103 <endb.html#103>`_
+
+   `button`:idx:
+     `xmlgen.html#117 <xmlgen.html#117>`_
+
+   `Byte`:idx:
+     `system.html#133 <system.html#133>`_
+
+   `calling conventions`:idx:
+     `manual.html#170 <manual.html#170>`_
+
+   `capitalize`:idx:
+     `strutils.html#117 <strutils.html#117>`_
+
+   `caption`:idx:
+     `xmlgen.html#118 <xmlgen.html#118>`_
+
+   `capture`:idx:
+     `pegs.html#123 <pegs.html#123>`_
+
+   `card`:idx:
+     `system.html#181 <system.html#181>`_
+
+   `carriage return`:idx:
+     `manual.html#122 <manual.html#122>`_
+
+   `case`:idx:
+     `manual.html#190 <manual.html#190>`_
+
+   `cchar`:idx:
+     `system.html#383 <system.html#383>`_
+
+   `CDataSectionNode`:idx:
+     `xmldom.html#120 <xmldom.html#120>`_
+
+   `cdecl`:idx:
+     `manual.html#172 <manual.html#172>`_
+
+   `cdouble`:idx:
+     `system.html#390 <system.html#390>`_
+
+   `cfloat`:idx:
+     `system.html#389 <system.html#389>`_
+
+   `cgiError`:idx:
+     `cgi.html#106 <cgi.html#106>`_
+
+   `ChangeFileExt`:idx:
+     `os.html#136 <os.html#136>`_
+
+   `char`:idx:
+     `system.html#110 <system.html#110>`_
+
+   `character type`:idx:
+     `manual.html#154 <manual.html#154>`_
+
+   `character with decimal value d`:idx:
+     `manual.html#130 <manual.html#130>`_
+
+   `character with hex value HH`:idx:
+     `manual.html#135 <manual.html#135>`_
+
+   `character_set`:idx:
+     `mysql.html#351 <mysql.html#351>`_
+
+   `charData`:idx:
+     `parsexml.html#109 <parsexml.html#109>`_
+
+   `charSet`:idx:
+     `pegs.html#108 <pegs.html#108>`_
+
+   `CHARSET_INFO`:idx:
+     `mysql.html#348 <mysql.html#348>`_
+
+   `charset_info_st`:idx:
+     `mysql.html#347 <mysql.html#347>`_
+
+   `checked runtime error`:idx:
+     `manual.html#110 <manual.html#110>`_
+
+   `checkedSymAddr`:idx:
+     `dynlib.html#105 <dynlib.html#105>`_
+
+   `check_scramble`:idx:
+     `mysql.html#279 <mysql.html#279>`_
+
+   `check_scramble_323`:idx:
+     `mysql.html#273 <mysql.html#273>`_
+
+   `chr`:idx:
+     `system.html#183 <system.html#183>`_
+
+   `cint`:idx:
+     `system.html#386 <system.html#386>`_
+
+   `cite`:idx:
+     `xmlgen.html#119 <xmlgen.html#119>`_
+
+   `classify`:idx:
+     `math.html#104 <math.html#104>`_
+
+   `CLIENT_COMPRESS`:idx:
+     `mysql.html#161 <mysql.html#161>`_
+
+   `CLIENT_CONNECT_WITH_DB`:idx:
+     `mysql.html#159 <mysql.html#159>`_
+
+   `clientData`:idx:
+     `xmltree.html#119 <xmltree.html#119>`_
+
+   `clientData=`:idx:
+     `xmltree.html#120 <xmltree.html#120>`_
+
+   `CLIENT_FOUND_ROWS`:idx:
+     `mysql.html#157 <mysql.html#157>`_
+
+   `CLIENT_IGNORE_SIGPIPE`:idx:
+     `mysql.html#168 <mysql.html#168>`_
+
+   `CLIENT_IGNORE_SPACE`:idx:
+     `mysql.html#164 <mysql.html#164>`_
+
+   `CLIENT_INTERACTIVE`:idx:
+     `mysql.html#166 <mysql.html#166>`_
+
+   `CLIENT_LOCAL_FILES`:idx:
+     `mysql.html#163 <mysql.html#163>`_
+
+   `CLIENT_LONG_FLAG`:idx:
+     `mysql.html#158 <mysql.html#158>`_
+
+   `CLIENT_LONG_PASSWORD`:idx:
+     `mysql.html#156 <mysql.html#156>`_
+
+   `CLIENT_MULTI_QUERIES`:idx:
+     `mysql.html#203 <mysql.html#203>`_
+
+   `CLIENT_MULTI_RESULTS`:idx:
+     `mysql.html#173 <mysql.html#173>`_
+
+   `CLIENT_MULTI_STATEMENTS`:idx:
+     `mysql.html#172 <mysql.html#172>`_
+
+   `CLIENT_NET_READ_TIMEOUT`:idx:
+     `mysql.html#292 <mysql.html#292>`_
+
+   `CLIENT_NET_WRITE_TIMEOUT`:idx:
+     `mysql.html#293 <mysql.html#293>`_
+
+   `CLIENT_NO_SCHEMA`:idx:
+     `mysql.html#160 <mysql.html#160>`_
+
+   `CLIENT_ODBC`:idx:
+     `mysql.html#162 <mysql.html#162>`_
+
+   `CLIENT_PROTOCOL_41`:idx:
+     `mysql.html#165 <mysql.html#165>`_
+
+   `CLIENT_REMEMBER_OPTIONS`:idx:
+     `mysql.html#174 <mysql.html#174>`_
+
+   `CLIENT_RESERVED`:idx:
+     `mysql.html#170 <mysql.html#170>`_
+
+   `CLIENT_SECURE_CONNECTION`:idx:
+     `mysql.html#171 <mysql.html#171>`_
+
+   `CLIENT_SSL`:idx:
+     `mysql.html#167 <mysql.html#167>`_
+
+   `CLIENT_TRANSACTIONS`:idx:
+     `mysql.html#169 <mysql.html#169>`_
+
+   `cloneNode`:idx:
+     `xmldom.html#166 <xmldom.html#166>`_
+
+   `clong`:idx:
+     `system.html#387 <system.html#387>`_
+
+   `clongdouble`:idx:
+     `system.html#391 <system.html#391>`_
+
+   `clonglong`:idx:
+     `system.html#388 <system.html#388>`_
+
+   `Close`:idx:
+     * `system.html#512 <system.html#512>`_
+     * `db_postgres.html#117 <db_postgres.html#117>`_
+     * `db_mysql.html#117 <db_mysql.html#117>`_
+     * `db_sqlite.html#117 <db_sqlite.html#117>`_
+
+   `close`:idx:
+     * `sockets.html#121 <sockets.html#121>`_
+     * `lexbase.html#105 <lexbase.html#105>`_
+     * `parsecfg.html#105 <parsecfg.html#105>`_
+     * `parsexml.html#108 <parsexml.html#108>`_
+     * `parsecsv.html#109 <parsecsv.html#109>`_
+     * `zipfiles.html#103 <zipfiles.html#103>`_
+     * `httpserver.html#106 <httpserver.html#106>`_
+
+   `CloseFile`:idx:
+     `system.html#511 <system.html#511>`_
+
+   `closure`:idx:
+     `manual.html#177 <manual.html#177>`_
+
+   `cmdLineRest`:idx:
+     `parseopt.html#106 <parseopt.html#106>`_
+
+   `cmp`:idx:
+     * `system.html#361 <system.html#361>`_
+     * `system.html#362 <system.html#362>`_
+
+   `cmpIgnoreCase`:idx:
+     `strutils.html#135 <strutils.html#135>`_
+
+   `cmpIgnoreStyle`:idx:
+     `strutils.html#136 <strutils.html#136>`_
+
+   `cmpPaths`:idx:
+     `os.html#139 <os.html#139>`_
+
+   `cmpRunesIgnoreCase`:idx:
+     `unicode.html#120 <unicode.html#120>`_
+
+   `code`:idx:
+     `xmlgen.html#120 <xmlgen.html#120>`_
+
+   `col`:idx:
+     `xmlgen.html#121 <xmlgen.html#121>`_
+
+   `colAliceBlue`:idx:
+     `colors.html#108 <colors.html#108>`_
+
+   `colAntiqueWhite`:idx:
+     `colors.html#109 <colors.html#109>`_
+
+   `colAqua`:idx:
+     `colors.html#110 <colors.html#110>`_
+
+   `colAquamarine`:idx:
+     `colors.html#111 <colors.html#111>`_
+
+   `colAzure`:idx:
+     `colors.html#112 <colors.html#112>`_
+
+   `colBeige`:idx:
+     `colors.html#113 <colors.html#113>`_
+
+   `colBisque`:idx:
+     `colors.html#114 <colors.html#114>`_
+
+   `colBlack`:idx:
+     `colors.html#115 <colors.html#115>`_
+
+   `colBlanchedAlmond`:idx:
+     `colors.html#116 <colors.html#116>`_
+
+   `colBlue`:idx:
+     `colors.html#117 <colors.html#117>`_
+
+   `colBlueViolet`:idx:
+     `colors.html#118 <colors.html#118>`_
+
+   `colBrown`:idx:
+     `colors.html#119 <colors.html#119>`_
+
+   `colBurlyWood`:idx:
+     `colors.html#120 <colors.html#120>`_
+
+   `colCadetBlue`:idx:
+     `colors.html#121 <colors.html#121>`_
+
+   `colChartreuse`:idx:
+     `colors.html#122 <colors.html#122>`_
+
+   `colChocolate`:idx:
+     `colors.html#123 <colors.html#123>`_
+
+   `colCoral`:idx:
+     `colors.html#124 <colors.html#124>`_
+
+   `colCornflowerBlue`:idx:
+     `colors.html#125 <colors.html#125>`_
+
+   `colCornsilk`:idx:
+     `colors.html#126 <colors.html#126>`_
+
+   `colCrimson`:idx:
+     `colors.html#127 <colors.html#127>`_
+
+   `colCyan`:idx:
+     `colors.html#128 <colors.html#128>`_
+
+   `colDarkBlue`:idx:
+     `colors.html#129 <colors.html#129>`_
+
+   `colDarkCyan`:idx:
+     `colors.html#130 <colors.html#130>`_
+
+   `colDarkGoldenRod`:idx:
+     `colors.html#131 <colors.html#131>`_
+
+   `colDarkGray`:idx:
+     `colors.html#132 <colors.html#132>`_
+
+   `colDarkGreen`:idx:
+     `colors.html#133 <colors.html#133>`_
+
+   `colDarkKhaki`:idx:
+     `colors.html#134 <colors.html#134>`_
+
+   `colDarkMagenta`:idx:
+     `colors.html#135 <colors.html#135>`_
+
+   `colDarkOliveGreen`:idx:
+     `colors.html#136 <colors.html#136>`_
+
+   `colDarkorange`:idx:
+     `colors.html#137 <colors.html#137>`_
+
+   `colDarkOrchid`:idx:
+     `colors.html#138 <colors.html#138>`_
+
+   `colDarkRed`:idx:
+     `colors.html#139 <colors.html#139>`_
+
+   `colDarkSalmon`:idx:
+     `colors.html#140 <colors.html#140>`_
+
+   `colDarkSeaGreen`:idx:
+     `colors.html#141 <colors.html#141>`_
+
+   `colDarkSlateBlue`:idx:
+     `colors.html#142 <colors.html#142>`_
+
+   `colDarkSlateGray`:idx:
+     `colors.html#143 <colors.html#143>`_
+
+   `colDarkTurquoise`:idx:
+     `colors.html#144 <colors.html#144>`_
+
+   `colDarkViolet`:idx:
+     `colors.html#145 <colors.html#145>`_
+
+   `colDeepPink`:idx:
+     `colors.html#146 <colors.html#146>`_
+
+   `colDeepSkyBlue`:idx:
+     `colors.html#147 <colors.html#147>`_
+
+   `colDimGray`:idx:
+     `colors.html#148 <colors.html#148>`_
+
+   `colDodgerBlue`:idx:
+     `colors.html#149 <colors.html#149>`_
+
+   `colFireBrick`:idx:
+     `colors.html#150 <colors.html#150>`_
+
+   `colFloralWhite`:idx:
+     `colors.html#151 <colors.html#151>`_
+
+   `colForestGreen`:idx:
+     `colors.html#152 <colors.html#152>`_
+
+   `colFuchsia`:idx:
+     `colors.html#153 <colors.html#153>`_
+
+   `colGainsboro`:idx:
+     `colors.html#154 <colors.html#154>`_
+
+   `colGhostWhite`:idx:
+     `colors.html#155 <colors.html#155>`_
+
+   `colGold`:idx:
+     `colors.html#156 <colors.html#156>`_
+
+   `colGoldenRod`:idx:
+     `colors.html#157 <colors.html#157>`_
+
+   `colGray`:idx:
+     `colors.html#158 <colors.html#158>`_
+
+   `colGreen`:idx:
+     `colors.html#159 <colors.html#159>`_
+
+   `colGreenYellow`:idx:
+     `colors.html#160 <colors.html#160>`_
+
+   `colgroup`:idx:
+     `xmlgen.html#122 <xmlgen.html#122>`_
+
+   `colHoneyDew`:idx:
+     `colors.html#161 <colors.html#161>`_
+
+   `colHotPink`:idx:
+     `colors.html#162 <colors.html#162>`_
+
+   `colIndianRed`:idx:
+     `colors.html#163 <colors.html#163>`_
+
+   `colIndigo`:idx:
+     `colors.html#164 <colors.html#164>`_
+
+   `colIvory`:idx:
+     `colors.html#165 <colors.html#165>`_
+
+   `colKhaki`:idx:
+     `colors.html#166 <colors.html#166>`_
+
+   `colLavender`:idx:
+     `colors.html#167 <colors.html#167>`_
+
+   `colLavenderBlush`:idx:
+     `colors.html#168 <colors.html#168>`_
+
+   `colLawnGreen`:idx:
+     `colors.html#169 <colors.html#169>`_
+
+   `colLemonChiffon`:idx:
+     `colors.html#170 <colors.html#170>`_
+
+   `colLightBlue`:idx:
+     `colors.html#171 <colors.html#171>`_
+
+   `colLightCoral`:idx:
+     `colors.html#172 <colors.html#172>`_
+
+   `colLightCyan`:idx:
+     `colors.html#173 <colors.html#173>`_
+
+   `colLightGoldenRodYellow`:idx:
+     `colors.html#174 <colors.html#174>`_
+
+   `colLightGreen`:idx:
+     `colors.html#176 <colors.html#176>`_
+
+   `colLightGrey`:idx:
+     `colors.html#175 <colors.html#175>`_
+
+   `colLightPink`:idx:
+     `colors.html#177 <colors.html#177>`_
+
+   `colLightSalmon`:idx:
+     `colors.html#178 <colors.html#178>`_
+
+   `colLightSeaGreen`:idx:
+     `colors.html#179 <colors.html#179>`_
+
+   `colLightSkyBlue`:idx:
+     `colors.html#180 <colors.html#180>`_
+
+   `colLightSlateGray`:idx:
+     `colors.html#181 <colors.html#181>`_
+
+   `colLightSteelBlue`:idx:
+     `colors.html#182 <colors.html#182>`_
+
+   `colLightYellow`:idx:
+     `colors.html#183 <colors.html#183>`_
+
+   `colLime`:idx:
+     `colors.html#184 <colors.html#184>`_
+
+   `colLimeGreen`:idx:
+     `colors.html#185 <colors.html#185>`_
+
+   `colLinen`:idx:
+     `colors.html#186 <colors.html#186>`_
+
+   `colMagenta`:idx:
+     `colors.html#187 <colors.html#187>`_
+
+   `colMaroon`:idx:
+     `colors.html#188 <colors.html#188>`_
+
+   `colMediumAquaMarine`:idx:
+     `colors.html#189 <colors.html#189>`_
+
+   `colMediumBlue`:idx:
+     `colors.html#190 <colors.html#190>`_
+
+   `colMediumOrchid`:idx:
+     `colors.html#191 <colors.html#191>`_
+
+   `colMediumPurple`:idx:
+     `colors.html#192 <colors.html#192>`_
+
+   `colMediumSeaGreen`:idx:
+     `colors.html#193 <colors.html#193>`_
+
+   `colMediumSlateBlue`:idx:
+     `colors.html#194 <colors.html#194>`_
+
+   `colMediumSpringGreen`:idx:
+     `colors.html#195 <colors.html#195>`_
+
+   `colMediumTurquoise`:idx:
+     `colors.html#196 <colors.html#196>`_
+
+   `colMediumVioletRed`:idx:
+     `colors.html#197 <colors.html#197>`_
+
+   `colMidnightBlue`:idx:
+     `colors.html#198 <colors.html#198>`_
+
+   `colMintCream`:idx:
+     `colors.html#199 <colors.html#199>`_
+
+   `colMistyRose`:idx:
+     `colors.html#200 <colors.html#200>`_
+
+   `colMoccasin`:idx:
+     `colors.html#201 <colors.html#201>`_
+
+   `colNavajoWhite`:idx:
+     `colors.html#202 <colors.html#202>`_
+
+   `colNavy`:idx:
+     `colors.html#203 <colors.html#203>`_
+
+   `colOldLace`:idx:
+     `colors.html#204 <colors.html#204>`_
+
+   `colOlive`:idx:
+     `colors.html#205 <colors.html#205>`_
+
+   `colOliveDrab`:idx:
+     `colors.html#206 <colors.html#206>`_
+
+   `colOrange`:idx:
+     `colors.html#207 <colors.html#207>`_
+
+   `colOrangeRed`:idx:
+     `colors.html#208 <colors.html#208>`_
+
+   `colOrchid`:idx:
+     `colors.html#209 <colors.html#209>`_
+
+   `colPaleGoldenRod`:idx:
+     `colors.html#210 <colors.html#210>`_
+
+   `colPaleGreen`:idx:
+     `colors.html#211 <colors.html#211>`_
+
+   `colPaleTurquoise`:idx:
+     `colors.html#212 <colors.html#212>`_
+
+   `colPaleVioletRed`:idx:
+     `colors.html#213 <colors.html#213>`_
+
+   `colPapayaWhip`:idx:
+     `colors.html#214 <colors.html#214>`_
+
+   `colPeachPuff`:idx:
+     `colors.html#215 <colors.html#215>`_
+
+   `colPeru`:idx:
+     `colors.html#216 <colors.html#216>`_
+
+   `colPink`:idx:
+     `colors.html#217 <colors.html#217>`_
+
+   `colPlum`:idx:
+     `colors.html#218 <colors.html#218>`_
+
+   `colPowderBlue`:idx:
+     `colors.html#219 <colors.html#219>`_
+
+   `colPurple`:idx:
+     `colors.html#220 <colors.html#220>`_
+
+   `colRed`:idx:
+     `colors.html#221 <colors.html#221>`_
+
+   `colRosyBrown`:idx:
+     `colors.html#222 <colors.html#222>`_
+
+   `colRoyalBlue`:idx:
+     `colors.html#223 <colors.html#223>`_
+
+   `colSaddleBrown`:idx:
+     `colors.html#224 <colors.html#224>`_
+
+   `colSalmon`:idx:
+     `colors.html#225 <colors.html#225>`_
+
+   `colSandyBrown`:idx:
+     `colors.html#226 <colors.html#226>`_
+
+   `colSeaGreen`:idx:
+     `colors.html#227 <colors.html#227>`_
+
+   `colSeaShell`:idx:
+     `colors.html#228 <colors.html#228>`_
+
+   `colSienna`:idx:
+     `colors.html#229 <colors.html#229>`_
+
+   `colSilver`:idx:
+     `colors.html#230 <colors.html#230>`_
+
+   `colSkyBlue`:idx:
+     `colors.html#231 <colors.html#231>`_
+
+   `colSlateBlue`:idx:
+     `colors.html#232 <colors.html#232>`_
+
+   `colSlateGray`:idx:
+     `colors.html#233 <colors.html#233>`_
+
+   `colSnow`:idx:
+     `colors.html#234 <colors.html#234>`_
+
+   `colSpringGreen`:idx:
+     `colors.html#235 <colors.html#235>`_
+
+   `colSteelBlue`:idx:
+     `colors.html#236 <colors.html#236>`_
+
+   `colTan`:idx:
+     `colors.html#237 <colors.html#237>`_
+
+   `colTeal`:idx:
+     `colors.html#238 <colors.html#238>`_
+
+   `colThistle`:idx:
+     `colors.html#239 <colors.html#239>`_
+
+   `colTomato`:idx:
+     `colors.html#240 <colors.html#240>`_
+
+   `colTurquoise`:idx:
+     `colors.html#241 <colors.html#241>`_
+
+   `colViolet`:idx:
+     `colors.html#242 <colors.html#242>`_
+
+   `colWheat`:idx:
+     `colors.html#243 <colors.html#243>`_
+
+   `colWhite`:idx:
+     `colors.html#244 <colors.html#244>`_
+
+   `colWhiteSmoke`:idx:
+     `colors.html#245 <colors.html#245>`_
+
+   `colYellow`:idx:
+     `colors.html#246 <colors.html#246>`_
+
+   `colYellowGreen`:idx:
+     `colors.html#247 <colors.html#247>`_
+
+   `comma separated value`:idx:
+     `parsecsv.html#102 <parsecsv.html#102>`_
+
+   `comment pieces`:idx:
+     * `manual.html#115 <manual.html#115>`_
+     * `tut1.html#103 <tut1.html#103>`_
+
+   `CommentNode`:idx:
+     `xmldom.html#122 <xmldom.html#122>`_
+
+   `Comments`:idx:
+     * `manual.html#114 <manual.html#114>`_
+     * `tut1.html#102 <tut1.html#102>`_
+
+   `commonAttr`:idx:
+     `xmlgen.html#105 <xmlgen.html#105>`_
+
+   `COMP_HEADER_SIZE`:idx:
+     `mysql.html#266 <mysql.html#266>`_
+
+   `CompileDate`:idx:
+     `system.html#399 <system.html#399>`_
+
+   `CompileTime`:idx:
+     `system.html#400 <system.html#400>`_
+
+   `compileTime`:idx:
+     `manual.html#236 <manual.html#236>`_
+
+   `complex statements`:idx:
+     `manual.html#184 <manual.html#184>`_
+
+   `connect`:idx:
+     `sockets.html#127 <sockets.html#127>`_
+
+   `const`:idx:
+     `manual.html#188 <manual.html#188>`_
+
+   `constant expressions`:idx:
+     `manual.html#108 <manual.html#108>`_
+
+   `Constants`:idx:
+     * `manual.html#140 <manual.html#140>`_
+     * `tut1.html#104 <tut1.html#104>`_
+
+   `contains`:idx:
+     * `system.html#356 <system.html#356>`_
+     * `system.html#477 <system.html#477>`_
+     * `strutils.html#137 <strutils.html#137>`_
+     * `strutils.html#138 <strutils.html#138>`_
+     * `strutils.html#139 <strutils.html#139>`_
+     * `re.html#116 <re.html#116>`_
+     * `re.html#117 <re.html#117>`_
+     * `pegs.html#144 <pegs.html#144>`_
+     * `pegs.html#145 <pegs.html#145>`_
+
+   `continue`:idx:
+     `manual.html#204 <manual.html#204>`_
+
+   `copy`:idx:
+     * `system.html#414 <system.html#414>`_
+     * `system.html#415 <system.html#415>`_
+
+   `copyFile`:idx:
+     `os.html#142 <os.html#142>`_
+
+   `copyMem`:idx:
+     `system.html#417 <system.html#417>`_
+
+   `copyNimNode`:idx:
+     `macros.html#136 <macros.html#136>`_
+
+   `copyNimTree`:idx:
+     `macros.html#137 <macros.html#137>`_
+
+   `coreAttr`:idx:
+     `xmlgen.html#103 <xmlgen.html#103>`_
+
+   `cos`:idx:
+     `math.html#126 <math.html#126>`_
+
+   `cosh`:idx:
+     `math.html#127 <math.html#127>`_
+
+   `countBits32`:idx:
+     `math.html#109 <math.html#109>`_
+
+   `countdown`:idx:
+     `system.html#446 <system.html#446>`_
+
+   `countProcessors`:idx:
+     `osproc.html#117 <osproc.html#117>`_
+
+   `countup`:idx:
+     `system.html#447 <system.html#447>`_
+
+   `cpuEndian`:idx:
+     `system.html#405 <system.html#405>`_
+
+   `createAttribute`:idx:
+     `xmldom.html#141 <xmldom.html#141>`_
+
+   `createAttributeNS`:idx:
+     `xmldom.html#142 <xmldom.html#142>`_
+
+   `createCDATASection`:idx:
+     `xmldom.html#143 <xmldom.html#143>`_
+
+   `createComment`:idx:
+     `xmldom.html#144 <xmldom.html#144>`_
+
+   `createDir`:idx:
+     * `os.html#159 <os.html#159>`_
+     * `zipfiles.html#104 <zipfiles.html#104>`_
+
+   `createDocument`:idx:
+     * `xmldom.html#136 <xmldom.html#136>`_
+     * `xmldom.html#137 <xmldom.html#137>`_
+
+   `createDocumentFragment`:idx:
+     `xmldom.html#145 <xmldom.html#145>`_
+
+   `createElement`:idx:
+     `xmldom.html#146 <xmldom.html#146>`_
+
+   `createElementNS`:idx:
+     `xmldom.html#147 <xmldom.html#147>`_
+
+   `createProcessingInstruction`:idx:
+     `xmldom.html#148 <xmldom.html#148>`_
+
+   `create_random_string`:idx:
+     `mysql.html#269 <mysql.html#269>`_
+
+   `createTextNode`:idx:
+     `xmldom.html#149 <xmldom.html#149>`_
+
+   `cschar`:idx:
+     `system.html#384 <system.html#384>`_
+
+   `cshort`:idx:
+     `system.html#385 <system.html#385>`_
+
+   `cstring`:idx:
+     `system.html#112 <system.html#112>`_
+
+   `cstringArray`:idx:
+     `system.html#392 <system.html#392>`_
+
+   `cstringArrayToSeq`:idx:
+     * `system.html#539 <system.html#539>`_
+     * `system.html#540 <system.html#540>`_
+
+   `CSV`:idx:
+     `parsecsv.html#101 <parsecsv.html#101>`_
+
+   `cuint`:idx:
+     `mysql.html#109 <mysql.html#109>`_
+
+   `CurDir`:idx:
+     `os.html#101 <os.html#101>`_
+
+   `CURLAUTH_ANY`:idx:
+     `libcurl.html#192 <libcurl.html#192>`_
+
+   `CURLAUTH_ANYSAFE`:idx:
+     `libcurl.html#194 <libcurl.html#194>`_
+
+   `CURLAUTH_BASIC`:idx:
+     `libcurl.html#193 <libcurl.html#193>`_
+
+   `CURLAUTH_DIGEST`:idx:
+     `libcurl.html#195 <libcurl.html#195>`_
+
+   `CURLAUTH_GSSNEGOTIATE`:idx:
+     `libcurl.html#196 <libcurl.html#196>`_
+
+   `CURLAUTH_NONE`:idx:
+     `libcurl.html#197 <libcurl.html#197>`_
+
+   `CURLAUTH_NTLM`:idx:
+     `libcurl.html#198 <libcurl.html#198>`_
+
+   `CURLE_ALREADY_COMPLETE`:idx:
+     `libcurl.html#199 <libcurl.html#199>`_
+
+   `curl_easy_cleanup`:idx:
+     `libcurl.html#304 <libcurl.html#304>`_
+
+   `curl_easy_duphandle`:idx:
+     `libcurl.html#306 <libcurl.html#306>`_
+
+   `curl_easy_escape`:idx:
+     `libcurl.html#284 <libcurl.html#284>`_
+
+   `curl_easy_getinfo`:idx:
+     `libcurl.html#305 <libcurl.html#305>`_
+
+   `curl_easy_init`:idx:
+     `libcurl.html#301 <libcurl.html#301>`_
+
+   `curl_easy_perform`:idx:
+     `libcurl.html#303 <libcurl.html#303>`_
+
+   `curl_easy_reset`:idx:
+     `libcurl.html#307 <libcurl.html#307>`_
+
+   `curl_easy_setopt`:idx:
+     `libcurl.html#302 <libcurl.html#302>`_
+
+   `curl_easy_strerror`:idx:
+     `libcurl.html#299 <libcurl.html#299>`_
+
+   `curl_easy_unescape`:idx:
+     `libcurl.html#286 <libcurl.html#286>`_
+
+   `CURLE_FTP_BAD_DOWNLOAD_RESUME`:idx:
+     `libcurl.html#200 <libcurl.html#200>`_
+
+   `CURLE_FTP_PARTIAL_FILE`:idx:
+     `libcurl.html#201 <libcurl.html#201>`_
+
+   `CURLE_HTTP_NOT_FOUND`:idx:
+     `libcurl.html#202 <libcurl.html#202>`_
+
+   `CURLE_HTTP_PORT_FAILED`:idx:
+     `libcurl.html#203 <libcurl.html#203>`_
+
+   `CURLE_OPERATION_TIMEDOUT`:idx:
+     `libcurl.html#204 <libcurl.html#204>`_
+
+   `CURL_ERROR_SIZE`:idx:
+     `libcurl.html#205 <libcurl.html#205>`_
+
+   `curl_escape`:idx:
+     `libcurl.html#285 <libcurl.html#285>`_
+
+   `curl_formadd`:idx:
+     `libcurl.html#279 <libcurl.html#279>`_
+
+   `CURL_FORMAT_OFF_T`:idx:
+     `libcurl.html#206 <libcurl.html#206>`_
+
+   `curl_formfree`:idx:
+     `libcurl.html#281 <libcurl.html#281>`_
+
+   `curl_formget`:idx:
+     `libcurl.html#280 <libcurl.html#280>`_
+
+   `curl_free`:idx:
+     `libcurl.html#288 <libcurl.html#288>`_
+
+   `curl_getdate`:idx:
+     `libcurl.html#294 <libcurl.html#294>`_
+
+   `curl_getenv`:idx:
+     `libcurl.html#282 <libcurl.html#282>`_
+
+   `CURL_GLOBAL_ALL`:idx:
+     `libcurl.html#210 <libcurl.html#210>`_
+
+   `curl_global_cleanup`:idx:
+     `libcurl.html#291 <libcurl.html#291>`_
+
+   `CURL_GLOBAL_DEFAULT`:idx:
+     `libcurl.html#211 <libcurl.html#211>`_
+
+   `curl_global_init`:idx:
+     `libcurl.html#289 <libcurl.html#289>`_
+
+   `curl_global_init_mem`:idx:
+     `libcurl.html#290 <libcurl.html#290>`_
+
+   `CURL_GLOBAL_NOTHING`:idx:
+     `libcurl.html#207 <libcurl.html#207>`_
+
+   `CURL_GLOBAL_SSL`:idx:
+     `libcurl.html#208 <libcurl.html#208>`_
+
+   `CURL_GLOBAL_WIN32`:idx:
+     `libcurl.html#209 <libcurl.html#209>`_
+
+   `CURLINFO_DOUBLE`:idx:
+     `libcurl.html#212 <libcurl.html#212>`_
+
+   `CURLINFO_HTTP_CODE`:idx:
+     `libcurl.html#213 <libcurl.html#213>`_
+
+   `CURLINFO_LONG`:idx:
+     `libcurl.html#214 <libcurl.html#214>`_
+
+   `CURLINFO_MASK`:idx:
+     `libcurl.html#215 <libcurl.html#215>`_
+
+   `CURLINFO_SLIST`:idx:
+     `libcurl.html#216 <libcurl.html#216>`_
+
+   `CURLINFO_STRING`:idx:
+     `libcurl.html#217 <libcurl.html#217>`_
+
+   `CURLINFO_TYPEMASK`:idx:
+     `libcurl.html#218 <libcurl.html#218>`_
+
+   `CURL_IPRESOLVE_V4`:idx:
+     `libcurl.html#219 <libcurl.html#219>`_
+
+   `CURL_IPRESOLVE_V6`:idx:
+     `libcurl.html#220 <libcurl.html#220>`_
+
+   `CURL_IPRESOLVE_WHATEVER`:idx:
+     `libcurl.html#221 <libcurl.html#221>`_
+
+   `CURL_MAX_WRITE_SIZE`:idx:
+     `libcurl.html#222 <libcurl.html#222>`_
+
+   `CURLM_CALL_MULTI_SOCKET`:idx:
+     `libcurl.html#223 <libcurl.html#223>`_
+
+   `curl_multi_add_handle`:idx:
+     `libcurl.html#309 <libcurl.html#309>`_
+
+   `curl_multi_assign`:idx:
+     `libcurl.html#320 <libcurl.html#320>`_
+
+   `curl_multi_cleanup`:idx:
+     `libcurl.html#313 <libcurl.html#313>`_
+
+   `curl_multi_fdset`:idx:
+     `libcurl.html#311 <libcurl.html#311>`_
+
+   `curl_multi_info_read`:idx:
+     `libcurl.html#314 <libcurl.html#314>`_
+
+   `curl_multi_init`:idx:
+     `libcurl.html#308 <libcurl.html#308>`_
+
+   `curl_multi_perform`:idx:
+     `libcurl.html#312 <libcurl.html#312>`_
+
+   `curl_multi_remove_handle`:idx:
+     `libcurl.html#310 <libcurl.html#310>`_
+
+   `curl_multi_setopt`:idx:
+     `libcurl.html#319 <libcurl.html#319>`_
+
+   `curl_multi_socket`:idx:
+     `libcurl.html#316 <libcurl.html#316>`_
+
+   `curl_multi_socket_all`:idx:
+     `libcurl.html#317 <libcurl.html#317>`_
+
+   `curl_multi_strerror`:idx:
+     `libcurl.html#315 <libcurl.html#315>`_
+
+   `curl_multi_timeout`:idx:
+     `libcurl.html#318 <libcurl.html#318>`_
+
+   `CURLOPT_CLOSEFUNCTION`:idx:
+     `libcurl.html#224 <libcurl.html#224>`_
+
+   `CURLOPT_FTPASCII`:idx:
+     `libcurl.html#225 <libcurl.html#225>`_
+
+   `CURLOPT_HEADERDATA`:idx:
+     `libcurl.html#226 <libcurl.html#226>`_
+
+   `CURLOPT_HTTPREQUEST`:idx:
+     `libcurl.html#227 <libcurl.html#227>`_
+
+   `CURLOPT_MUTE`:idx:
+     `libcurl.html#228 <libcurl.html#228>`_
+
+   `CURLOPT_PASSWDDATA`:idx:
+     `libcurl.html#229 <libcurl.html#229>`_
+
+   `CURLOPT_PASSWDFUNCTION`:idx:
+     `libcurl.html#230 <libcurl.html#230>`_
+
+   `CURLOPT_PASV_HOST`:idx:
+     `libcurl.html#231 <libcurl.html#231>`_
+
+   `CURLOPT_READDATA`:idx:
+     `libcurl.html#232 <libcurl.html#232>`_
+
+   `CURLOPT_SOURCE_HOST`:idx:
+     `libcurl.html#233 <libcurl.html#233>`_
+
+   `CURLOPT_SOURCE_PATH`:idx:
+     `libcurl.html#234 <libcurl.html#234>`_
+
+   `CURLOPT_SOURCE_PORT`:idx:
+     `libcurl.html#235 <libcurl.html#235>`_
+
+   `CURLOPT_SSLKEYPASSWD`:idx:
+     `libcurl.html#191 <libcurl.html#191>`_
+
+   `CURLOPTTYPE_FUNCTIONPOINT`:idx:
+     `libcurl.html#236 <libcurl.html#236>`_
+
+   `CURLOPTTYPE_LONG`:idx:
+     `libcurl.html#237 <libcurl.html#237>`_
+
+   `CURLOPTTYPE_OBJECTPOINT`:idx:
+     `libcurl.html#238 <libcurl.html#238>`_
+
+   `CURLOPTTYPE_OFF_T`:idx:
+     `libcurl.html#239 <libcurl.html#239>`_
+
+   `CURLOPT_WRITEDATA`:idx:
+     `libcurl.html#240 <libcurl.html#240>`_
+
+   `CURL_POLL_IN`:idx:
+     `libcurl.html#241 <libcurl.html#241>`_
+
+   `CURL_POLL_INOUT`:idx:
+     `libcurl.html#242 <libcurl.html#242>`_
+
+   `CURL_POLL_NONE`:idx:
+     `libcurl.html#243 <libcurl.html#243>`_
+
+   `CURL_POLL_OUT`:idx:
+     `libcurl.html#244 <libcurl.html#244>`_
+
+   `CURL_POLL_REMOVE`:idx:
+     `libcurl.html#245 <libcurl.html#245>`_
+
+   `CURL_READFUNC_ABORT`:idx:
+     `libcurl.html#246 <libcurl.html#246>`_
+
+   `curl_share_cleanup`:idx:
+     `libcurl.html#297 <libcurl.html#297>`_
+
+   `curl_share_init`:idx:
+     `libcurl.html#295 <libcurl.html#295>`_
+
+   `curl_share_setopt`:idx:
+     `libcurl.html#296 <libcurl.html#296>`_
+
+   `curl_share_strerror`:idx:
+     `libcurl.html#300 <libcurl.html#300>`_
+
+   `curl_slist_append`:idx:
+     `libcurl.html#292 <libcurl.html#292>`_
+
+   `curl_slist_free_all`:idx:
+     `libcurl.html#293 <libcurl.html#293>`_
+
+   `CURL_SOCKET_BAD`:idx:
+     `libcurl.html#247 <libcurl.html#247>`_
+
+   `CURL_SOCKET_TIMEOUT`:idx:
+     `libcurl.html#248 <libcurl.html#248>`_
+
+   `curl_strequal`:idx:
+     `libcurl.html#277 <libcurl.html#277>`_
+
+   `curl_strnequal`:idx:
+     `libcurl.html#278 <libcurl.html#278>`_
+
+   `curl_unescape`:idx:
+     `libcurl.html#287 <libcurl.html#287>`_
+
+   `curl_version`:idx:
+     `libcurl.html#283 <libcurl.html#283>`_
+
+   `CURL_VERSION_ASYNCHDNS`:idx:
+     `libcurl.html#249 <libcurl.html#249>`_
+
+   `CURL_VERSION_CONV`:idx:
+     `libcurl.html#250 <libcurl.html#250>`_
+
+   `CURL_VERSION_DEBUG`:idx:
+     `libcurl.html#251 <libcurl.html#251>`_
+
+   `CURL_VERSION_GSSNEGOTIATE`:idx:
+     `libcurl.html#252 <libcurl.html#252>`_
+
+   `CURL_VERSION_IDN`:idx:
+     `libcurl.html#253 <libcurl.html#253>`_
+
+   `curl_version_info`:idx:
+     `libcurl.html#298 <libcurl.html#298>`_
+
+   `CURL_VERSION_IPV6`:idx:
+     `libcurl.html#254 <libcurl.html#254>`_
+
+   `CURL_VERSION_KERBEROS4`:idx:
+     `libcurl.html#255 <libcurl.html#255>`_
+
+   `CURL_VERSION_LARGEFILE`:idx:
+     `libcurl.html#256 <libcurl.html#256>`_
+
+   `CURL_VERSION_LIBZ`:idx:
+     `libcurl.html#257 <libcurl.html#257>`_
+
+   `CURLVERSION_NOW`:idx:
+     `libcurl.html#258 <libcurl.html#258>`_
+
+   `CURL_VERSION_NTLM`:idx:
+     `libcurl.html#259 <libcurl.html#259>`_
+
+   `CURL_VERSION_SPNEGO`:idx:
+     `libcurl.html#260 <libcurl.html#260>`_
+
+   `CURL_VERSION_SSL`:idx:
+     `libcurl.html#261 <libcurl.html#261>`_
+
+   `CURL_VERSION_SSPI`:idx:
+     `libcurl.html#262 <libcurl.html#262>`_
+
+   `CursorBackward`:idx:
+     `terminal.html#107 <terminal.html#107>`_
+
+   `CursorDown`:idx:
+     `terminal.html#105 <terminal.html#105>`_
+
+   `CursorForward`:idx:
+     `terminal.html#106 <terminal.html#106>`_
+
+   `CursorUp`:idx:
+     `terminal.html#104 <terminal.html#104>`_
+
+   `dangling else problem`:idx:
+     `manual.html#185 <manual.html#185>`_
+
+   `datafile`:idx:
+     `unidecode.html#101 <unidecode.html#101>`_
+
+   `dbError`:idx:
+     * `db_postgres.html#107 <db_postgres.html#107>`_
+     * `db_mysql.html#106 <db_mysql.html#106>`_
+     * `db_sqlite.html#107 <db_sqlite.html#107>`_
+
+   `dbgLineHook`:idx:
+     `system.html#442 <system.html#442>`_
+
+   `dbQueryOpt`:idx:
+     `db_mysql.html#107 <db_mysql.html#107>`_
+
+   `dd`:idx:
+     `xmlgen.html#123 <xmlgen.html#123>`_
+
+   `deadCodeElim`:idx:
+     `manual.html#247 <manual.html#247>`_
+
+   `dealloc`:idx:
+     `system.html#423 <system.html#423>`_
+
+   `debugger`:idx:
+     `nimrodc.html#106 <nimrodc.html#106>`_
+
+   `dec`:idx:
+     `system.html#172 <system.html#172>`_
+
+   `decodeData`:idx:
+     * `cgi.html#107 <cgi.html#107>`_
+     * `cgi.html#108 <cgi.html#108>`_
+
+   `defaultFont`:idx:
+     `graphics.html#108 <graphics.html#108>`_
+
+   `defined`:idx:
+     `system.html#118 <system.html#118>`_
+
+   `definedInScope`:idx:
+     `system.html#119 <system.html#119>`_
+
+   `del`:idx:
+     * `system.html#376 <system.html#376>`_
+     * `xmlgen.html#124 <xmlgen.html#124>`_
+     * `macros.html#121 <macros.html#121>`_
+
+   `delete`:idx:
+     * `system.html#377 <system.html#377>`_
+     * `strutils.html#157 <strutils.html#157>`_
+
+   `deleteStr`:idx:
+     * `strutils.html#124 <strutils.html#124>`_
+     * `strutils.html#158 <strutils.html#158>`_
+
+   `dfn`:idx:
+     `xmlgen.html#125 <xmlgen.html#125>`_
+
+   `digits`:idx:
+     `pegs.html#130 <pegs.html#130>`_
+
+   `Digits`:idx:
+     `strutils.html#104 <strutils.html#104>`_
+
+   `DirSep`:idx:
+     `os.html#103 <os.html#103>`_
+
+   `disableCache`:idx:
+     `ropes.html#107 <ropes.html#107>`_
+
+   `discard`:idx:
+     `manual.html#186 <manual.html#186>`_
+
+   `div`:idx:
+     * `system.html#223 <system.html#223>`_
+     * `system.html#224 <system.html#224>`_
+     * `system.html#225 <system.html#225>`_
+     * `system.html#226 <system.html#226>`_
+     * `system.html#227 <system.html#227>`_
+     * `xmlgen.html#126 <xmlgen.html#126>`_
+
+   `dl`:idx:
+     `xmlgen.html#127 <xmlgen.html#127>`_
+
+   `documentElement`:idx:
+     `xmldom.html#140 <xmldom.html#140>`_
+
+   `DocumentFragmentNode`:idx:
+     `xmldom.html#124 <xmldom.html#124>`_
+
+   `DocumentNode`:idx:
+     `xmldom.html#123 <xmldom.html#123>`_
+
+   `domain specific languages`:idx:
+     `manual.html#222 <manual.html#222>`_
+
+   `downloadFile`:idx:
+     `httpclient.html#110 <httpclient.html#110>`_
+
+   `drawCircle`:idx:
+     `graphics.html#119 <graphics.html#119>`_
+
+   `drawEllipse`:idx:
+     `graphics.html#126 <graphics.html#126>`_
+
+   `drawHorLine`:idx:
+     `graphics.html#121 <graphics.html#121>`_
+
+   `drawLine`:idx:
+     `graphics.html#120 <graphics.html#120>`_
+
+   `drawRect`:idx:
+     `graphics.html#124 <graphics.html#124>`_
+
+   `drawText`:idx:
+     * `graphics.html#117 <graphics.html#117>`_
+     * `graphics.html#118 <graphics.html#118>`_
+
+   `drawVerLine`:idx:
+     `graphics.html#122 <graphics.html#122>`_
+
+   `dt`:idx:
+     `xmlgen.html#128 <xmlgen.html#128>`_
+
+   `dynamic type`:idx:
+     `manual.html#104 <manual.html#104>`_
+
+   `DYNAMIC_ARRAY`:idx:
+     `mysql.html#340 <mysql.html#340>`_
+
+   `dynlib`:idx:
+     `manual.html#252 <manual.html#252>`_
+
+   `E`:idx:
+     `math.html#102 <math.html#102>`_
+
+   `EAccessViolation`:idx:
+     `system.html#149 <system.html#149>`_
+
+   `each`:idx:
+     `system.html#479 <system.html#479>`_
+
+   `EArithmetic`:idx:
+     `system.html#146 <system.html#146>`_
+
+   `EAssertionFailed`:idx:
+     `system.html#150 <system.html#150>`_
+
+   `EAsynch`:idx:
+     `system.html#139 <system.html#139>`_
+
+   `E_Base`:idx:
+     `system.html#138 <system.html#138>`_
+
+   `ECgi`:idx:
+     `cgi.html#104 <cgi.html#104>`_
+
+   `echo`:idx:
+     `system.html#495 <system.html#495>`_
+
+   `EControlC`:idx:
+     `system.html#151 <system.html#151>`_
+
+   `EDb`:idx:
+     * `db_postgres.html#104 <db_postgres.html#104>`_
+     * `db_mysql.html#104 <db_mysql.html#104>`_
+     * `db_sqlite.html#104 <db_sqlite.html#104>`_
+
+   `editDistance`:idx:
+     `strutils.html#166 <strutils.html#166>`_
+
+   `EDivByZero`:idx:
+     `system.html#147 <system.html#147>`_
+
+   `EDOMException`:idx:
+     `xmldom.html#101 <xmldom.html#101>`_
+
+   `EDOMStringSizeErr`:idx:
+     `xmldom.html#102 <xmldom.html#102>`_
+
+   `EFloatDivByZero`:idx:
+     * `manual.html#146 <manual.html#146>`_
+     * `system.html#163 <system.html#163>`_
+
+   `EFloatInexact`:idx:
+     * `manual.html#149 <manual.html#149>`_
+     * `system.html#166 <system.html#166>`_
+
+   `EFloatingPoint`:idx:
+     * `manual.html#150 <manual.html#150>`_
+     * `system.html#161 <system.html#161>`_
+
+   `EFloatInvalidOp`:idx:
+     `system.html#162 <system.html#162>`_
+
+   `EFloatOverflow`:idx:
+     * `manual.html#147 <manual.html#147>`_
+     * `system.html#164 <system.html#164>`_
+
+   `EFloatUnderflow`:idx:
+     * `manual.html#148 <manual.html#148>`_
+     * `system.html#165 <system.html#165>`_
+
+   `EGraphics`:idx:
+     `graphics.html#104 <graphics.html#104>`_
+
+   `EHierarchyRequestErr`:idx:
+     `xmldom.html#103 <xmldom.html#103>`_
+
+   `EHttpRequestErr`:idx:
+     `httpclient.html#103 <httpclient.html#103>`_
+
+   `EIndexSizeErr`:idx:
+     `xmldom.html#104 <xmldom.html#104>`_
+
+   `EInuseAttributeErr`:idx:
+     `xmldom.html#105 <xmldom.html#105>`_
+
+   `EInvalidAccessErr`:idx:
+     `xmldom.html#106 <xmldom.html#106>`_
+
+   `EInvalidCharacterErr`:idx:
+     `xmldom.html#107 <xmldom.html#107>`_
+
+   `EInvalidCsv`:idx:
+     `parsecsv.html#105 <parsecsv.html#105>`_
+
+   `EInvalidField`:idx:
+     `system.html#155 <system.html#155>`_
+
+   `EInvalidIndex`:idx:
+     `system.html#154 <system.html#154>`_
+
+   `EInvalidLibrary`:idx:
+     `system.html#144 <system.html#144>`_
+
+   `EInvalidModificationErr`:idx:
+     `xmldom.html#108 <xmldom.html#108>`_
+
+   `EInvalidObjectAssignment`:idx:
+     `system.html#159 <system.html#159>`_
+
+   `EInvalidObjectConversion`:idx:
+     `system.html#160 <system.html#160>`_
+
+   `EInvalidPeg`:idx:
+     `pegs.html#153 <pegs.html#153>`_
+
+   `EInvalidProtocol`:idx:
+     `httpclient.html#102 <httpclient.html#102>`_
+
+   `EInvalidRegEx`:idx:
+     * `regexprs.html#104 <regexprs.html#104>`_
+     * `re.html#107 <re.html#107>`_
+
+   `EInvalidSql`:idx:
+     `parsesql.html#103 <parsesql.html#103>`_
+
+   `EInvalidStateErr`:idx:
+     `xmldom.html#109 <xmldom.html#109>`_
+
+   `EInvalidValue`:idx:
+     `system.html#152 <system.html#152>`_
+
+   `EInvalidXml`:idx:
+     `xmlparser.html#101 <xmlparser.html#101>`_
+
+   `EIO`:idx:
+     `system.html#142 <system.html#142>`_
+
+   `elementName`:idx:
+     `parsexml.html#111 <parsexml.html#111>`_
+
+   `ElementNode`:idx:
+     `xmldom.html#117 <xmldom.html#117>`_
+
+   `em`:idx:
+     `xmlgen.html#129 <xmlgen.html#129>`_
+
+   `Embedded Nimrod Debugger`:idx:
+     `endb.html#101 <endb.html#101>`_
+
+   `EMismatchedTag`:idx:
+     `xmldomparser.html#101 <xmldomparser.html#101>`_
+
+   `enableCache`:idx:
+     `ropes.html#108 <ropes.html#108>`_
+
+   `ENamespaceErr`:idx:
+     `xmldom.html#110 <xmldom.html#110>`_
+
+   `ENDB`:idx:
+     `endb.html#102 <endb.html#102>`_
+
+   `EndOfFile`:idx:
+     * `system.html#513 <system.html#513>`_
+     * `lexbase.html#101 <lexbase.html#101>`_
+
+   `endsWith`:idx:
+     * `strutils.html#149 <strutils.html#149>`_
+     * `re.html#119 <re.html#119>`_
+     * `pegs.html#147 <pegs.html#147>`_
+
+   `ENoDataAllowedErr`:idx:
+     `xmldom.html#113 <xmldom.html#113>`_
+
+   `ENoExceptionToReraise`:idx:
+     * `manual.html#193 <manual.html#193>`_
+     * `system.html#158 <system.html#158>`_
+
+   `ENoModificationAllowedErr`:idx:
+     `xmldom.html#114 <xmldom.html#114>`_
+
+   `ENotFoundErr`:idx:
+     `xmldom.html#111 <xmldom.html#111>`_
+
+   `ENotSupportedErr`:idx:
+     `xmldom.html#112 <xmldom.html#112>`_
+
+   `entityName`:idx:
+     `parsexml.html#112 <parsexml.html#112>`_
+
+   `entityToUtf8`:idx:
+     `htmlparser.html#107 <htmlparser.html#107>`_
+
+   `enum_cursor_type`:idx:
+     `mysql.html#237 <mysql.html#237>`_
+
+   `enumeration`:idx:
+     `tut1.html#113 <tut1.html#113>`_
+
+   `Enumeration`:idx:
+     `manual.html#155 <manual.html#155>`_
+
+   `enum_field_types`:idx:
+     `mysql.html#202 <mysql.html#202>`_
+
+   `ENUM_FLAG`:idx:
+     `mysql.html#132 <mysql.html#132>`_
+
+   `enum_mysql_set_option`:idx:
+     `mysql.html#238 <mysql.html#238>`_
+
+   `enum_mysql_stmt_state`:idx:
+     `mysql.html#376 <mysql.html#376>`_
+
+   `enum_server_command`:idx:
+     `mysql.html#119 <mysql.html#119>`_
+
+   `enum_stmt_attr_type`:idx:
+     `mysql.html#383 <mysql.html#383>`_
+
+   `envPairs`:idx:
+     `os.html#151 <os.html#151>`_
+
+   `EOS`:idx:
+     `system.html#143 <system.html#143>`_
+
+   `EOutOfMemory`:idx:
+     `system.html#153 <system.html#153>`_
+
+   `EOutOfRange`:idx:
+     * `tut1.html#112 <tut1.html#112>`_
+     * `system.html#156 <system.html#156>`_
+
+   `EOverflow`:idx:
+     `system.html#148 <system.html#148>`_
+
+   `EParserError`:idx:
+     `xmldomparser.html#102 <xmldomparser.html#102>`_
+
+   `equalMem`:idx:
+     `system.html#419 <system.html#419>`_
+
+   `equalsFile`:idx:
+     * `ropes.html#122 <ropes.html#122>`_
+     * `ropes.html#123 <ropes.html#123>`_
+
+   `EraseLine`:idx:
+     `terminal.html#108 <terminal.html#108>`_
+
+   `EraseScreen`:idx:
+     `terminal.html#109 <terminal.html#109>`_
+
+   `ERessourceExhausted`:idx:
+     `system.html#145 <system.html#145>`_
+
+   `error`:idx:
+     * `manual.html#233 <manual.html#233>`_
+     * `manual.html#241 <manual.html#241>`_
+     * `macros.html#138 <macros.html#138>`_
+
+   `errorMsg`:idx:
+     * `parsexml.html#120 <parsexml.html#120>`_
+     * `parsexml.html#122 <parsexml.html#122>`_
+
+   `errorMsgExpected`:idx:
+     `parsexml.html#121 <parsexml.html#121>`_
+
+   `errorStr`:idx:
+     `parsecfg.html#110 <parsecfg.html#110>`_
+
+   `errorStream`:idx:
+     `osproc.html#116 <osproc.html#116>`_
+
+   `escape`:idx:
+     * `manual.html#133 <manual.html#133>`_
+     * `strutils.html#163 <strutils.html#163>`_
+     * `xmltree.html#122 <xmltree.html#122>`_
+
+   `escape sequences`:idx:
+     `manual.html#120 <manual.html#120>`_
+
+   `escapePeg`:idx:
+     `pegs.html#156 <pegs.html#156>`_
+
+   `escapeRe`:idx:
+     `re.html#125 <re.html#125>`_
+
+   `EStackOverflow`:idx:
+     `system.html#157 <system.html#157>`_
+
+   `ESynch`:idx:
+     `system.html#140 <system.html#140>`_
+
+   `ESyntaxErr`:idx:
+     `xmldom.html#115 <xmldom.html#115>`_
+
+   `ESystem`:idx:
+     `system.html#141 <system.html#141>`_
+
+   `eventAttr`:idx:
+     `xmlgen.html#104 <xmlgen.html#104>`_
+
+   `EWrongDocumentErr`:idx:
+     `xmldom.html#116 <xmldom.html#116>`_
+
+   `except`:idx:
+     `manual.html#196 <manual.html#196>`_
+
+   `exception handlers`:idx:
+     `manual.html#195 <manual.html#195>`_
+
+   `exceptions`:idx:
+     `tut2.html#107 <tut2.html#107>`_
+
+   `excl`:idx:
+     `system.html#180 <system.html#180>`_
+
+   `exclFilePermissions`:idx:
+     `os.html#165 <os.html#165>`_
+
+   `Exec`:idx:
+     * `db_postgres.html#109 <db_postgres.html#109>`_
+     * `db_mysql.html#109 <db_mysql.html#109>`_
+     * `db_sqlite.html#109 <db_sqlite.html#109>`_
+
+   `ExecAffectedRows`:idx:
+     * `db_postgres.html#116 <db_postgres.html#116>`_
+     * `db_mysql.html#116 <db_mysql.html#116>`_
+     * `db_sqlite.html#116 <db_sqlite.html#116>`_
+
+   `execCmd`:idx:
+     `osproc.html#105 <osproc.html#105>`_
+
+   `execProcess`:idx:
+     `osproc.html#103 <osproc.html#103>`_
+
+   `execProcesses`:idx:
+     `osproc.html#118 <osproc.html#118>`_
+
+   `execShellCmd`:idx:
+     `os.html#146 <os.html#146>`_
+
+   `executeCommand`:idx:
+     `osproc.html#106 <osproc.html#106>`_
+
+   `executeProcess`:idx:
+     `osproc.html#104 <osproc.html#104>`_
+
+   `executeShellCommand`:idx:
+     `os.html#145 <os.html#145>`_
+
+   `ExeExt`:idx:
+     `os.html#107 <os.html#107>`_
+
+   `existsCookie`:idx:
+     `cgi.html#147 <cgi.html#147>`_
+
+   `existsDir`:idx:
+     `os.html#115 <os.html#115>`_
+
+   `existsEnv`:idx:
+     `os.html#148 <os.html#148>`_
+
+   `existsFile`:idx:
+     `os.html#114 <os.html#114>`_
+
+   `exp`:idx:
+     `math.html#119 <math.html#119>`_
+
+   `expandFilename`:idx:
+     `os.html#132 <os.html#132>`_
+
+   `expectKind`:idx:
+     `macros.html#147 <macros.html#147>`_
+
+   `expectLen`:idx:
+     `macros.html#149 <macros.html#149>`_
+
+   `expectMinLen`:idx:
+     `macros.html#148 <macros.html#148>`_
+
+   `exportc`:idx:
+     `manual.html#250 <manual.html#250>`_
+
+   `expr`:idx:
+     `system.html#115 <system.html#115>`_
+
+   `expression macros`:idx:
+     `tut2.html#111 <tut2.html#111>`_
+
+   `extractDir`:idx:
+     `os.html#130 <os.html#130>`_
+
+   `extractFileExt`:idx:
+     `os.html#134 <os.html#134>`_
+
+   `extractFilename`:idx:
+     `os.html#131 <os.html#131>`_
+
+   `extractFileTrunk`:idx:
+     `os.html#135 <os.html#135>`_
+
+   `extractRGB`:idx:
+     `colors.html#105 <colors.html#105>`_
+
+   `ExtSep`:idx:
+     `os.html#109 <os.html#109>`_
+
+   `fac`:idx:
+     `math.html#106 <math.html#106>`_
+
+   `fastcall`:idx:
+     `manual.html#175 <manual.html#175>`_
+
+   `FastRows`:idx:
+     * `db_postgres.html#110 <db_postgres.html#110>`_
+     * `db_mysql.html#110 <db_mysql.html#110>`_
+     * `db_sqlite.html#110 <db_sqlite.html#110>`_
+
+   `fastRuneAt`:idx:
+     `unicode.html#108 <unicode.html#108>`_
+
+   `fatal`:idx:
+     `manual.html#242 <manual.html#242>`_
+
+   `FFI`:idx:
+     `manual.html#248 <manual.html#248>`_
+
+   `fieldset`:idx:
+     `xmlgen.html#130 <xmlgen.html#130>`_
+
+   `FIELD_TYPE_BIT`:idx:
+     `mysql.html#231 <mysql.html#231>`_
+
+   `FIELD_TYPE_BLOB`:idx:
+     `mysql.html#225 <mysql.html#225>`_
+
+   `FIELD_TYPE_CHAR`:idx:
+     `mysql.html#228 <mysql.html#228>`_
+
+   `FIELD_TYPE_DATE`:idx:
+     `mysql.html#215 <mysql.html#215>`_
+
+   `FIELD_TYPE_DATETIME`:idx:
+     `mysql.html#217 <mysql.html#217>`_
+
+   `FIELD_TYPE_DECIMAL`:idx:
+     `mysql.html#204 <mysql.html#204>`_
+
+   `FIELD_TYPE_DOUBLE`:idx:
+     `mysql.html#210 <mysql.html#210>`_
+
+   `FIELD_TYPE_ENUM`:idx:
+     `mysql.html#220 <mysql.html#220>`_
+
+   `FIELD_TYPE_FLOAT`:idx:
+     `mysql.html#209 <mysql.html#209>`_
+
+   `FIELD_TYPE_GEOMETRY`:idx:
+     `mysql.html#230 <mysql.html#230>`_
+
+   `FIELD_TYPE_INT24`:idx:
+     `mysql.html#214 <mysql.html#214>`_
+
+   `FIELD_TYPE_INTERVAL`:idx:
+     `mysql.html#229 <mysql.html#229>`_
+
+   `FIELD_TYPE_LONG`:idx:
+     `mysql.html#208 <mysql.html#208>`_
+
+   `FIELD_TYPE_LONG_BLOB`:idx:
+     `mysql.html#224 <mysql.html#224>`_
+
+   `FIELD_TYPE_LONGLONG`:idx:
+     `mysql.html#213 <mysql.html#213>`_
+
+   `FIELD_TYPE_MEDIUM_BLOB`:idx:
+     `mysql.html#223 <mysql.html#223>`_
+
+   `FIELD_TYPE_NEWDATE`:idx:
+     `mysql.html#219 <mysql.html#219>`_
+
+   `FIELD_TYPE_NEWDECIMAL`:idx:
+     `mysql.html#205 <mysql.html#205>`_
+
+   `FIELD_TYPE_NULL`:idx:
+     `mysql.html#211 <mysql.html#211>`_
+
+   `FIELD_TYPE_SET`:idx:
+     `mysql.html#221 <mysql.html#221>`_
+
+   `FIELD_TYPE_SHORT`:idx:
+     `mysql.html#207 <mysql.html#207>`_
+
+   `FIELD_TYPE_STRING`:idx:
+     `mysql.html#227 <mysql.html#227>`_
+
+   `FIELD_TYPE_TIME`:idx:
+     `mysql.html#216 <mysql.html#216>`_
+
+   `FIELD_TYPE_TIMESTAMP`:idx:
+     `mysql.html#212 <mysql.html#212>`_
+
+   `FIELD_TYPE_TINY`:idx:
+     `mysql.html#206 <mysql.html#206>`_
+
+   `FIELD_TYPE_TINY_BLOB`:idx:
+     `mysql.html#222 <mysql.html#222>`_
+
+   `FIELD_TYPE_VAR_STRING`:idx:
+     `mysql.html#226 <mysql.html#226>`_
+
+   `FIELD_TYPE_YEAR`:idx:
+     `mysql.html#218 <mysql.html#218>`_
+
+   `fileHandle`:idx:
+     `system.html#538 <system.html#538>`_
+
+   `fileNewer`:idx:
+     `os.html#119 <os.html#119>`_
+
+   `FILE_OFFSET_BITS`:idx:
+     `libcurl.html#263 <libcurl.html#263>`_
+
+   `FILESIZEBITS`:idx:
+     `libcurl.html#264 <libcurl.html#264>`_
+
+   `FileSystemCaseSensitive`:idx:
+     `os.html#106 <os.html#106>`_
+
+   `fillCircle`:idx:
+     `graphics.html#123 <graphics.html#123>`_
+
+   `fillRect`:idx:
+     `graphics.html#125 <graphics.html#125>`_
+
+   `final`:idx:
+     `manual.html#239 <manual.html#239>`_
+
+   `finally`:idx:
+     `manual.html#197 <manual.html#197>`_
+
+   `find`:idx:
+     * `regexprs.html#109 <regexprs.html#109>`_
+     * `regexprs.html#110 <regexprs.html#110>`_
+     * `system.html#476 <system.html#476>`_
+     * `strutils.html#119 <strutils.html#119>`_
+     * `strutils.html#120 <strutils.html#120>`_
+     * `strutils.html#121 <strutils.html#121>`_
+     * `re.html#113 <re.html#113>`_
+     * `re.html#114 <re.html#114>`_
+     * `pegs.html#141 <pegs.html#141>`_
+     * `pegs.html#142 <pegs.html#142>`_
+
+   `firstChild`:idx:
+     `xmldom.html#153 <xmldom.html#153>`_
+
+   `float`:idx:
+     `system.html#106 <system.html#106>`_
+
+   `float32`:idx:
+     `system.html#107 <system.html#107>`_
+
+   `float64`:idx:
+     `system.html#108 <system.html#108>`_
+
+   `floatChecks`:idx:
+     `manual.html#152 <manual.html#152>`_
+
+   `floatVal`:idx:
+     `macros.html#124 <macros.html#124>`_
+
+   `floatVal=`:idx:
+     `macros.html#130 <macros.html#130>`_
+
+   `FlushFile`:idx:
+     `system.html#515 <system.html#515>`_
+
+   `for`:idx:
+     * `manual.html#214 <manual.html#214>`_
+     * `tut1.html#105 <tut1.html#105>`_
+
+   `form`:idx:
+     `xmlgen.html#131 <xmlgen.html#131>`_
+
+   `form feed`:idx:
+     `manual.html#124 <manual.html#124>`_
+
+   `forward`:idx:
+     `manual.html#209 <manual.html#209>`_
+
+   `frexp`:idx:
+     `math.html#120 <math.html#120>`_
+
+   `functional`:idx:
+     * `manual.html#169 <manual.html#169>`_
+     * `tut1.html#124 <tut1.html#124>`_
+
+   `FUNCTIONPOINT`:idx:
+     `libcurl.html#265 <libcurl.html#265>`_
+
+   `functions`:idx:
+     `manual.html#207 <manual.html#207>`_
+
+   `GC_disable`:idx:
+     `system.html#480 <system.html#480>`_
+
+   `GC_disableMarkAndSweep`:idx:
+     `system.html#486 <system.html#486>`_
+
+   `GC_enable`:idx:
+     `system.html#481 <system.html#481>`_
+
+   `GC_enableMarkAndSweep`:idx:
+     `system.html#485 <system.html#485>`_
+
+   `GC_fullCollect`:idx:
+     `system.html#482 <system.html#482>`_
+
+   `GC_getStatistics`:idx:
+     `system.html#487 <system.html#487>`_
+
+   `GC_ref`:idx:
+     * `system.html#488 <system.html#488>`_
+     * `system.html#489 <system.html#489>`_
+     * `system.html#490 <system.html#490>`_
+
+   `GC_setStrategy`:idx:
+     `system.html#484 <system.html#484>`_
+
+   `GC_unref`:idx:
+     * `system.html#491 <system.html#491>`_
+     * `system.html#492 <system.html#492>`_
+     * `system.html#493 <system.html#493>`_
+
+   `generalized raw string literal`:idx:
+     `manual.html#136 <manual.html#136>`_
+
+   `generic character types`:idx:
+     * `regexprs.html#102 <regexprs.html#102>`_
+     * `re.html#102 <re.html#102>`_
+
+   `Generics`:idx:
+     * `manual.html#218 <manual.html#218>`_
+     * `tut2.html#109 <tut2.html#109>`_
+
+   `get`:idx:
+     `httpclient.html#106 <httpclient.html#106>`_
+
+   `GetAllRows`:idx:
+     * `db_postgres.html#111 <db_postgres.html#111>`_
+     * `db_mysql.html#111 <db_mysql.html#111>`_
+     * `db_sqlite.html#111 <db_sqlite.html#111>`_
+
+   `getApplicationDir`:idx:
+     `os.html#169 <os.html#169>`_
+
+   `getApplicationFilename`:idx:
+     `os.html#168 <os.html#168>`_
+
+   `getAttribute`:idx:
+     `xmldom.html#189 <xmldom.html#189>`_
+
+   `getAttributeNode`:idx:
+     `xmldom.html#191 <xmldom.html#191>`_
+
+   `getAttributeNodeNS`:idx:
+     `xmldom.html#192 <xmldom.html#192>`_
+
+   `getAttributeNS`:idx:
+     `xmldom.html#190 <xmldom.html#190>`_
+
+   `getClockStr`:idx:
+     `times.html#112 <times.html#112>`_
+
+   `getColNumber`:idx:
+     `lexbase.html#107 <lexbase.html#107>`_
+
+   `getColumn`:idx:
+     * `parsecfg.html#107 <parsecfg.html#107>`_
+     * `parsexml.html#117 <parsexml.html#117>`_
+
+   `getConfigDir`:idx:
+     `os.html#167 <os.html#167>`_
+
+   `getContent`:idx:
+     `httpclient.html#107 <httpclient.html#107>`_
+
+   `getContentLength`:idx:
+     `cgi.html#111 <cgi.html#111>`_
+
+   `getContentType`:idx:
+     `cgi.html#112 <cgi.html#112>`_
+
+   `getCookie`:idx:
+     `cgi.html#146 <cgi.html#146>`_
+
+   `getCreationTime`:idx:
+     `os.html#118 <os.html#118>`_
+
+   `getCurrentDir`:idx:
+     `os.html#120 <os.html#120>`_
+
+   `getCurrentExceptionMsg`:idx:
+     `system.html#438 <system.html#438>`_
+
+   `getCurrentLine`:idx:
+     `lexbase.html#106 <lexbase.html#106>`_
+
+   `getDateStr`:idx:
+     `times.html#111 <times.html#111>`_
+
+   `getDocumentRoot`:idx:
+     `cgi.html#113 <cgi.html#113>`_
+
+   `getDOM`:idx:
+     `xmldom.html#135 <xmldom.html#135>`_
+
+   `getElementsByTagName`:idx:
+     * `xmldom.html#150 <xmldom.html#150>`_
+     * `xmldom.html#193 <xmldom.html#193>`_
+
+   `getElementsByTagNameNS`:idx:
+     * `xmldom.html#151 <xmldom.html#151>`_
+     * `xmldom.html#194 <xmldom.html#194>`_
+
+   `getEnv`:idx:
+     `os.html#147 <os.html#147>`_
+
+   `getFilename`:idx:
+     * `parsecfg.html#109 <parsecfg.html#109>`_
+     * `parsexml.html#119 <parsexml.html#119>`_
+
+   `getFilePermissions`:idx:
+     `os.html#162 <os.html#162>`_
+
+   `getFilePos`:idx:
+     `system.html#535 <system.html#535>`_
+
+   `getFileSize`:idx:
+     * `system.html#527 <system.html#527>`_
+     * `os.html#171 <os.html#171>`_
+
+   `getFreeMem`:idx:
+     `system.html#444 <system.html#444>`_
+
+   `getGatewayInterface`:idx:
+     `cgi.html#114 <cgi.html#114>`_
+
+   `getGMTime`:idx:
+     `times.html#107 <times.html#107>`_
+
+   `getHomeDir`:idx:
+     `os.html#166 <os.html#166>`_
+
+   `getHostByName`:idx:
+     `sockets.html#124 <sockets.html#124>`_
+
+   `getHttpAccept`:idx:
+     `cgi.html#115 <cgi.html#115>`_
+
+   `getHttpAcceptCharset`:idx:
+     `cgi.html#116 <cgi.html#116>`_
+
+   `getHttpAcceptEncoding`:idx:
+     `cgi.html#117 <cgi.html#117>`_
+
+   `getHttpAcceptLanguage`:idx:
+     `cgi.html#118 <cgi.html#118>`_
+
+   `getHttpConnection`:idx:
+     `cgi.html#119 <cgi.html#119>`_
+
+   `getHttpCookie`:idx:
+     `cgi.html#120 <cgi.html#120>`_
+
+   `getHttpHost`:idx:
+     `cgi.html#121 <cgi.html#121>`_
+
+   `getHttpReferer`:idx:
+     `cgi.html#122 <cgi.html#122>`_
+
+   `getHttpUserAgent`:idx:
+     `cgi.html#123 <cgi.html#123>`_
+
+   `getLastAccessTime`:idx:
+     `os.html#117 <os.html#117>`_
+
+   `getLastModificationTime`:idx:
+     `os.html#116 <os.html#116>`_
+
+   `getLine`:idx:
+     * `parsecfg.html#108 <parsecfg.html#108>`_
+     * `parsexml.html#118 <parsexml.html#118>`_
+
+   `getLocalTime`:idx:
+     `times.html#106 <times.html#106>`_
+
+   `getMD5`:idx:
+     `md5.html#106 <md5.html#106>`_
+
+   `getNamedItem`:idx:
+     * `xmldom.html#174 <xmldom.html#174>`_
+     * `xmldom.html#175 <xmldom.html#175>`_
+
+   `getNamedItemNS`:idx:
+     * `xmldom.html#176 <xmldom.html#176>`_
+     * `xmldom.html#177 <xmldom.html#177>`_
+
+   `getOccupiedMem`:idx:
+     `system.html#443 <system.html#443>`_
+
+   `getopt`:idx:
+     `parseopt.html#108 <parseopt.html#108>`_
+
+   `getPathInfo`:idx:
+     `cgi.html#124 <cgi.html#124>`_
+
+   `getPathTranslated`:idx:
+     `cgi.html#125 <cgi.html#125>`_
+
+   `getQueryString`:idx:
+     `cgi.html#126 <cgi.html#126>`_
+
+   `getRefcount`:idx:
+     `system.html#437 <system.html#437>`_
+
+   `getRemoteAddr`:idx:
+     `cgi.html#127 <cgi.html#127>`_
+
+   `getRemoteHost`:idx:
+     `cgi.html#128 <cgi.html#128>`_
+
+   `getRemoteIdent`:idx:
+     `cgi.html#129 <cgi.html#129>`_
+
+   `getRemotePort`:idx:
+     `cgi.html#130 <cgi.html#130>`_
+
+   `getRemoteUser`:idx:
+     `cgi.html#131 <cgi.html#131>`_
+
+   `getRequestMethod`:idx:
+     `cgi.html#132 <cgi.html#132>`_
+
+   `getRequestURI`:idx:
+     `cgi.html#133 <cgi.html#133>`_
+
+   `getRestOfCommandLine`:idx:
+     `parseopt.html#107 <parseopt.html#107>`_
+
+   `get_salt_from_password`:idx:
+     `mysql.html#280 <mysql.html#280>`_
+
+   `get_salt_from_password_323`:idx:
+     `mysql.html#274 <mysql.html#274>`_
+
+   `getScriptFilename`:idx:
+     `cgi.html#134 <cgi.html#134>`_
+
+   `getScriptName`:idx:
+     `cgi.html#135 <cgi.html#135>`_
+
+   `getServByName`:idx:
+     `sockets.html#122 <sockets.html#122>`_
+
+   `getServByPort`:idx:
+     `sockets.html#123 <sockets.html#123>`_
+
+   `getServerAddr`:idx:
+     `cgi.html#136 <cgi.html#136>`_
+
+   `getServerAdmin`:idx:
+     `cgi.html#137 <cgi.html#137>`_
+
+   `getServerName`:idx:
+     `cgi.html#138 <cgi.html#138>`_
+
+   `getServerPort`:idx:
+     `cgi.html#139 <cgi.html#139>`_
+
+   `getServerProtocol`:idx:
+     `cgi.html#140 <cgi.html#140>`_
+
+   `getServerSignature`:idx:
+     `cgi.html#141 <cgi.html#141>`_
+
+   `getServerSoftware`:idx:
+     `cgi.html#142 <cgi.html#142>`_
+
+   `getSockName`:idx:
+     `sockets.html#119 <sockets.html#119>`_
+
+   `getSockOptInt`:idx:
+     `sockets.html#125 <sockets.html#125>`_
+
+   `getStartMilsecs`:idx:
+     `times.html#116 <times.html#116>`_
+
+   `getStream`:idx:
+     `zipfiles.html#109 <zipfiles.html#109>`_
+
+   `getTime`:idx:
+     `times.html#105 <times.html#105>`_
+
+   `getTotalMem`:idx:
+     `system.html#445 <system.html#445>`_
+
+   `get_tty_password`:idx:
+     `mysql.html#282 <mysql.html#282>`_
+
+   `GetValue`:idx:
+     * `db_postgres.html#113 <db_postgres.html#113>`_
+     * `db_mysql.html#113 <db_mysql.html#113>`_
+     * `db_sqlite.html#113 <db_sqlite.html#113>`_
+
+   `gptr`:idx:
+     `mysql.html#105 <mysql.html#105>`_
+
+   `GROUP_FLAG`:idx:
+     `mysql.html#139 <mysql.html#139>`_
+
+   `h1`:idx:
+     `xmlgen.html#132 <xmlgen.html#132>`_
+
+   `h2`:idx:
+     `xmlgen.html#133 <xmlgen.html#133>`_
+
+   `h3`:idx:
+     `xmlgen.html#134 <xmlgen.html#134>`_
+
+   `h4`:idx:
+     `xmlgen.html#135 <xmlgen.html#135>`_
+
+   `h5`:idx:
+     `xmlgen.html#136 <xmlgen.html#136>`_
+
+   `h6`:idx:
+     `xmlgen.html#137 <xmlgen.html#137>`_
+
+   `HandleCR`:idx:
+     `lexbase.html#108 <lexbase.html#108>`_
+
+   `HandleLF`:idx:
+     `lexbase.html#109 <lexbase.html#109>`_
+
+   `hasAttribute`:idx:
+     `xmldom.html#195 <xmldom.html#195>`_
+
+   `hasAttributeNS`:idx:
+     `xmldom.html#196 <xmldom.html#196>`_
+
+   `hasAttributes`:idx:
+     `xmldom.html#167 <xmldom.html#167>`_
+
+   `hasChildNodes`:idx:
+     `xmldom.html#168 <xmldom.html#168>`_
+
+   `hasFeature`:idx:
+     `xmldom.html#138 <xmldom.html#138>`_
+
+   `hash`:idx:
+     * `hashes.html#103 <hashes.html#103>`_
+     * `hashes.html#104 <hashes.html#104>`_
+     * `hashes.html#105 <hashes.html#105>`_
+     * `hashes.html#106 <hashes.html#106>`_
+     * `hashes.html#107 <hashes.html#107>`_
+
+   `hashData`:idx:
+     `hashes.html#102 <hashes.html#102>`_
+
+   `hashIgnoreCase`:idx:
+     `hashes.html#109 <hashes.html#109>`_
+
+   `hashIgnoreStyle`:idx:
+     `hashes.html#108 <hashes.html#108>`_
+
+   `hash_password`:idx:
+     `mysql.html#270 <mysql.html#270>`_
+
+   `hasKey`:idx:
+     `strtabs.html#108 <strtabs.html#108>`_
+
+   `head`:idx:
+     `xmlgen.html#138 <xmlgen.html#138>`_
+
+   `header`:idx:
+     `nimrodc.html#102 <nimrodc.html#102>`_
+
+   `high`:idx:
+     `system.html#126 <system.html#126>`_
+
+   `hint`:idx:
+     * `manual.html#231 <manual.html#231>`_
+     * `manual.html#244 <manual.html#244>`_
+     * `macros.html#140 <macros.html#140>`_
+
+   `hostCPU`:idx:
+     `system.html#407 <system.html#407>`_
+
+   `HOSTNAME_LENGTH`:idx:
+     `mysql.html#111 <mysql.html#111>`_
+
+   `hostOS`:idx:
+     `system.html#406 <system.html#406>`_
+
+   `hr`:idx:
+     `xmlgen.html#140 <xmlgen.html#140>`_
+
+   `html`:idx:
+     `xmlgen.html#139 <xmlgen.html#139>`_
+
+   `HTML`:idx:
+     * `parsexml.html#102 <parsexml.html#102>`_
+     * `xmlgen.html#102 <xmlgen.html#102>`_
+
+   `htmlTag`:idx:
+     * `htmlparser.html#105 <htmlparser.html#105>`_
+     * `htmlparser.html#106 <htmlparser.html#106>`_
+
+   `htonl`:idx:
+     `sockets.html#114 <sockets.html#114>`_
+
+   `htons`:idx:
+     `sockets.html#115 <sockets.html#115>`_
+
+   `HTTPPOST_BUFFER`:idx:
+     `libcurl.html#266 <libcurl.html#266>`_
+
+   `HTTPPOST_FILENAME`:idx:
+     `libcurl.html#267 <libcurl.html#267>`_
+
+   `HTTPPOST_PTRBUFFER`:idx:
+     `libcurl.html#268 <libcurl.html#268>`_
+
+   `HTTPPOST_PTRCONTENTS`:idx:
+     `libcurl.html#269 <libcurl.html#269>`_
+
+   `HTTPPOST_PTRNAME`:idx:
+     `libcurl.html#270 <libcurl.html#270>`_
+
+   `HTTPPOST_READFILE`:idx:
+     `libcurl.html#271 <libcurl.html#271>`_
+
+   `hypot`:idx:
+     `math.html#128 <math.html#128>`_
+
+   `i`:idx:
+     `xmlgen.html#141 <xmlgen.html#141>`_
+
+   `ident`:idx:
+     * `pegs.html#134 <pegs.html#134>`_
+     * `macros.html#126 <macros.html#126>`_
+
+   `ident=`:idx:
+     `macros.html#132 <macros.html#132>`_
+
+   `IdentChars`:idx:
+     `strutils.html#105 <strutils.html#105>`_
+
+   `identChars`:idx:
+     `pegs.html#132 <pegs.html#132>`_
+
+   `identifier`:idx:
+     `manual.html#105 <manual.html#105>`_
+
+   `Identifiers`:idx:
+     `manual.html#116 <manual.html#116>`_
+
+   `IdentStartChars`:idx:
+     `strutils.html#106 <strutils.html#106>`_
+
+   `identStartChars`:idx:
+     `pegs.html#133 <pegs.html#133>`_
+
+   `if`:idx:
+     `manual.html#189 <manual.html#189>`_
+
+   `img`:idx:
+     `xmlgen.html#142 <xmlgen.html#142>`_
+
+   `implementation`:idx:
+     `xmldom.html#139 <xmldom.html#139>`_
+
+   `implicit block`:idx:
+     `manual.html#216 <manual.html#216>`_
+
+   `import`:idx:
+     * `manual.html#227 <manual.html#227>`_
+     * `tut1.html#128 <tut1.html#128>`_
+
+   `importc`:idx:
+     `manual.html#249 <manual.html#249>`_
+
+   `importNode`:idx:
+     `xmldom.html#152 <xmldom.html#152>`_
+
+   `in`:idx:
+     `system.html#357 <system.html#357>`_
+
+   `inc`:idx:
+     `system.html#171 <system.html#171>`_
+
+   `incl`:idx:
+     `system.html#179 <system.html#179>`_
+
+   `inclFilePermissions`:idx:
+     `os.html#164 <os.html#164>`_
+
+   `include`:idx:
+     `tut1.html#129 <tut1.html#129>`_
+
+   `indentation sensitive`:idx:
+     `manual.html#113 <manual.html#113>`_
+
+   `inf`:idx:
+     `system.html#439 <system.html#439>`_
+
+   `InfChecks`:idx:
+     `manual.html#151 <manual.html#151>`_
+
+   `information hiding`:idx:
+     * `manual.html#225 <manual.html#225>`_
+     * `tut1.html#126 <tut1.html#126>`_
+
+   `init`:idx:
+     `parseopt.html#104 <parseopt.html#104>`_
+
+   `initDefaultFont`:idx:
+     `graphics.html#109 <graphics.html#109>`_
+
+   `initOptParser`:idx:
+     `parseopt.html#103 <parseopt.html#103>`_
+
+   `inline`:idx:
+     `manual.html#174 <manual.html#174>`_
+
+   `InlineTags`:idx:
+     `htmlparser.html#102 <htmlparser.html#102>`_
+
+   `input`:idx:
+     `xmlgen.html#143 <xmlgen.html#143>`_
+
+   `inputStream`:idx:
+     `osproc.html#114 <osproc.html#114>`_
+
+   `ins`:idx:
+     `xmlgen.html#144 <xmlgen.html#144>`_
+
+   `insert`:idx:
+     `system.html#378 <system.html#378>`_
+
+   `insertBefore`:idx:
+     `xmldom.html#169 <xmldom.html#169>`_
+
+   `InsertID`:idx:
+     * `db_postgres.html#115 <db_postgres.html#115>`_
+     * `db_mysql.html#115 <db_mysql.html#115>`_
+     * `db_sqlite.html#115 <db_sqlite.html#115>`_
+
+   `insertSep`:idx:
+     `strutils.html#162 <strutils.html#162>`_
+
+   `int`:idx:
+     `system.html#101 <system.html#101>`_
+
+   `int16`:idx:
+     `system.html#103 <system.html#103>`_
+
+   `int32`:idx:
+     `system.html#104 <system.html#104>`_
+
+   `int64`:idx:
+     `system.html#105 <system.html#105>`_
+
+   `int8`:idx:
+     `system.html#102 <system.html#102>`_
+
+   `intensity`:idx:
+     `colors.html#106 <colors.html#106>`_
+
+   `INTERNAL_NUM_FIELD`:idx:
+     `mysql.html#306 <mysql.html#306>`_
+
+   `intToStr`:idx:
+     `strutils.html#141 <strutils.html#141>`_
+
+   `intVal`:idx:
+     `macros.html#123 <macros.html#123>`_
+
+   `intVal=`:idx:
+     `macros.html#129 <macros.html#129>`_
+
+   `InvalidSocket`:idx:
+     `sockets.html#108 <sockets.html#108>`_
+
+   `is`:idx:
+     `system.html#359 <system.html#359>`_
+
+   `isAlpha`:idx:
+     `unicode.html#116 <unicode.html#116>`_
+
+   `IS_BLOB`:idx:
+     `mysql.html#304 <mysql.html#304>`_
+
+   `isColor`:idx:
+     `colors.html#250 <colors.html#250>`_
+
+   `isLower`:idx:
+     `unicode.html#114 <unicode.html#114>`_
+
+   `isMainModule`:idx:
+     `system.html#398 <system.html#398>`_
+
+   `isNil`:idx:
+     * `system.html#466 <system.html#466>`_
+     * `system.html#467 <system.html#467>`_
+     * `system.html#468 <system.html#468>`_
+     * `system.html#469 <system.html#469>`_
+     * `system.html#470 <system.html#470>`_
+     * `system.html#471 <system.html#471>`_
+
+   `is_not`:idx:
+     `system.html#360 <system.html#360>`_
+
+   `IS_NOT_NULL`:idx:
+     `mysql.html#303 <mysql.html#303>`_
+
+   `IS_NUM`:idx:
+     `mysql.html#305 <mysql.html#305>`_
+
+   `IS_NUM_FIELD`:idx:
+     `mysql.html#307 <mysql.html#307>`_
+
+   `isPowerOfTwo`:idx:
+     `math.html#107 <math.html#107>`_
+
+   `IS_PRI_KEY`:idx:
+     `mysql.html#302 <mysql.html#302>`_
+
+   `isSupported`:idx:
+     `xmldom.html#170 <xmldom.html#170>`_
+
+   `isTitle`:idx:
+     `unicode.html#117 <unicode.html#117>`_
+
+   `isUpper`:idx:
+     `unicode.html#115 <unicode.html#115>`_
+
+   `isWhiteSpace`:idx:
+     `unicode.html#118 <unicode.html#118>`_
+
+   `item`:idx:
+     `xmldom.html#178 <xmldom.html#178>`_
+
+   `Item_result`:idx:
+     `mysql.html#255 <mysql.html#255>`_
+
+   `items`:idx:
+     * `system.html#460 <system.html#460>`_
+     * `system.html#461 <system.html#461>`_
+     * `system.html#462 <system.html#462>`_
+     * `system.html#463 <system.html#463>`_
+     * `system.html#464 <system.html#464>`_
+     * `system.html#465 <system.html#465>`_
+     * `ropes.html#117 <ropes.html#117>`_
+     * `xmltree.html#115 <xmltree.html#115>`_
+
+   `iterator`:idx:
+     `manual.html#215 <manual.html#215>`_
+
+   `iterOverEnvironment`:idx:
+     `os.html#150 <os.html#150>`_
+
+   `join`:idx:
+     * `strutils.html#153 <strutils.html#153>`_
+     * `strutils.html#154 <strutils.html#154>`_
+
+   `JoinPath`:idx:
+     * `os.html#122 <os.html#122>`_
+     * `os.html#123 <os.html#123>`_
+
+   `kbd`:idx:
+     `xmlgen.html#145 <xmlgen.html#145>`_
+
+   `keywords`:idx:
+     `manual.html#117 <manual.html#117>`_
+
+   `kind`:idx:
+     * `parsexml.html#110 <parsexml.html#110>`_
+     * `macros.html#122 <macros.html#122>`_
+     * `xmltree.html#113 <xmltree.html#113>`_
+
+   `l-values`:idx:
+     `manual.html#107 <manual.html#107>`_
+
+   `label`:idx:
+     `xmlgen.html#146 <xmlgen.html#146>`_
+
+   `lastChild`:idx:
+     `xmldom.html#154 <xmldom.html#154>`_
+
+   `leaves`:idx:
+     `ropes.html#116 <ropes.html#116>`_
+
+   `legend`:idx:
+     `xmlgen.html#147 <xmlgen.html#147>`_
+
+   `len`:idx:
+     * `system.html#174 <system.html#174>`_
+     * `system.html#175 <system.html#175>`_
+     * `system.html#176 <system.html#176>`_
+     * `system.html#177 <system.html#177>`_
+     * `system.html#178 <system.html#178>`_
+     * `strtabs.html#109 <strtabs.html#109>`_
+     * `parsesql.html#107 <parsesql.html#107>`_
+     * `macros.html#118 <macros.html#118>`_
+     * `ropes.html#103 <ropes.html#103>`_
+     * `xmltree.html#112 <xmltree.html#112>`_
+
+   `Letters`:idx:
+     `strutils.html#103 <strutils.html#103>`_
+
+   `letters`:idx:
+     `pegs.html#129 <pegs.html#129>`_
+
+   `li`:idx:
+     `xmlgen.html#148 <xmlgen.html#148>`_
+
+   `LIBCURL_VERSION`:idx:
+     `libcurl.html#272 <libcurl.html#272>`_
+
+   `LIBCURL_VERSION_MAJOR`:idx:
+     `libcurl.html#273 <libcurl.html#273>`_
+
+   `LIBCURL_VERSION_MINOR`:idx:
+     `libcurl.html#274 <libcurl.html#274>`_
+
+   `LIBCURL_VERSION_NUM`:idx:
+     `libcurl.html#275 <libcurl.html#275>`_
+
+   `LIBCURL_VERSION_PATCH`:idx:
+     `libcurl.html#276 <libcurl.html#276>`_
+
+   `line feed`:idx:
+     `manual.html#123 <manual.html#123>`_
+
+   `lineDir`:idx:
+     `nimrodc.html#103 <nimrodc.html#103>`_
+
+   `lines`:idx:
+     * `system.html#536 <system.html#536>`_
+     * `system.html#537 <system.html#537>`_
+
+   `lineTrace`:idx:
+     `nimrodc.html#105 <nimrodc.html#105>`_
+
+   `link`:idx:
+     `xmlgen.html#149 <xmlgen.html#149>`_
+
+   `listen`:idx:
+     `sockets.html#117 <sockets.html#117>`_
+
+   `ln`:idx:
+     `math.html#116 <math.html#116>`_
+
+   `load_defaults`:idx:
+     `mysql.html#285 <mysql.html#285>`_
+
+   `loadHtml`:idx:
+     * `htmlparser.html#110 <htmlparser.html#110>`_
+     * `htmlparser.html#111 <htmlparser.html#111>`_
+
+   `LoadLib`:idx:
+     `dynlib.html#102 <dynlib.html#102>`_
+
+   `loadXML`:idx:
+     `xmldomparser.html#104 <xmldomparser.html#104>`_
+
+   `loadXml`:idx:
+     * `xmlparser.html#104 <xmlparser.html#104>`_
+     * `xmlparser.html#105 <xmlparser.html#105>`_
+
+   `loadXMLFile`:idx:
+     `xmldomparser.html#105 <xmldomparser.html#105>`_
+
+   `loadXMLStream`:idx:
+     `xmldomparser.html#103 <xmldomparser.html#103>`_
+
+   `local type inference`:idx:
+     `tut1.html#101 <tut1.html#101>`_
+
+   `LOCAL_HOST`:idx:
+     `mysql.html#115 <mysql.html#115>`_
+
+   `LOCAL_HOST_NAMEDPIPE`:idx:
+     `mysql.html#116 <mysql.html#116>`_
+
+   `LOCAL_INFILE_ERROR_LEN`:idx:
+     `mysql.html#424 <mysql.html#424>`_
+
+   `localName`:idx:
+     `xmldom.html#155 <xmldom.html#155>`_
+
+   `locations`:idx:
+     `manual.html#101 <manual.html#101>`_
+
+   `log10`:idx:
+     `math.html#117 <math.html#117>`_
+
+   `log2`:idx:
+     `math.html#118 <math.html#118>`_
+
+   `low`:idx:
+     `system.html#127 <system.html#127>`_
+
+   `Macros`:idx:
+     `manual.html#221 <manual.html#221>`_
+
+   `make_password_from_salt`:idx:
+     `mysql.html#281 <mysql.html#281>`_
+
+   `make_password_from_salt_323`:idx:
+     `mysql.html#275 <mysql.html#275>`_
+
+   `make_scrambled_password`:idx:
+     `mysql.html#277 <mysql.html#277>`_
+
+   `make_scrambled_password_323`:idx:
+     `mysql.html#271 <mysql.html#271>`_
+
+   `MANAGER_ACCESS`:idx:
+     `mysql.html#336 <mysql.html#336>`_
+
+   `MANAGER_CLIENT_ERR`:idx:
+     `mysql.html#337 <mysql.html#337>`_
+
+   `MANAGER_INFO`:idx:
+     `mysql.html#335 <mysql.html#335>`_
+
+   `MANAGER_INTERNAL_ERR`:idx:
+     `mysql.html#338 <mysql.html#338>`_
+
+   `MANAGER_OK`:idx:
+     `mysql.html#334 <mysql.html#334>`_
+
+   `map`:idx:
+     `xmlgen.html#150 <xmlgen.html#150>`_
+
+   `match`:idx:
+     * `regexprs.html#106 <regexprs.html#106>`_
+     * `regexprs.html#107 <regexprs.html#107>`_
+     * `re.html#109 <re.html#109>`_
+     * `re.html#110 <re.html#110>`_
+     * `pegs.html#137 <pegs.html#137>`_
+     * `pegs.html#138 <pegs.html#138>`_
+
+   `matchLen`:idx:
+     * `regexprs.html#108 <regexprs.html#108>`_
+     * `re.html#111 <re.html#111>`_
+     * `re.html#112 <re.html#112>`_
+     * `pegs.html#139 <pegs.html#139>`_
+     * `pegs.html#140 <pegs.html#140>`_
+
+   `max`:idx:
+     * `system.html#324 <system.html#324>`_
+     * `system.html#454 <system.html#454>`_
+     * `system.html#455 <system.html#455>`_
+     * `system.html#456 <system.html#456>`_
+     * `system.html#457 <system.html#457>`_
+     * `system.html#458 <system.html#458>`_
+     * `system.html#459 <system.html#459>`_
+
+   `MAX_BIGINT_WIDTH`:idx:
+     `mysql.html#194 <mysql.html#194>`_
+
+   `MAX_BLOB_WIDTH`:idx:
+     `mysql.html#196 <mysql.html#196>`_
+
+   `MAX_CHAR_WIDTH`:idx:
+     `mysql.html#195 <mysql.html#195>`_
+
+   `MAX_INT_WIDTH`:idx:
+     `mysql.html#193 <mysql.html#193>`_
+
+   `MAX_MEDIUMINT_WIDTH`:idx:
+     `mysql.html#192 <mysql.html#192>`_
+
+   `MAX_MYSQL_MANAGER_ERR`:idx:
+     `mysql.html#332 <mysql.html#332>`_
+
+   `MAX_MYSQL_MANAGER_MSG`:idx:
+     `mysql.html#333 <mysql.html#333>`_
+
+   `MAX_SMALLINT_WIDTH`:idx:
+     `mysql.html#191 <mysql.html#191>`_
+
+   `MaxSubpatterns`:idx:
+     * `regexprs.html#105 <regexprs.html#105>`_
+     * `re.html#104 <re.html#104>`_
+     * `pegs.html#101 <pegs.html#101>`_
+
+   `MAX_TINYINT_WIDTH`:idx:
+     `mysql.html#190 <mysql.html#190>`_
+
+   `MD5Context`:idx:
+     `md5.html#102 <md5.html#102>`_
+
+   `MD5Digest`:idx:
+     `md5.html#101 <md5.html#101>`_
+
+   `MD5Final`:idx:
+     `md5.html#105 <md5.html#105>`_
+
+   `MD5Init`:idx:
+     `md5.html#103 <md5.html#103>`_
+
+   `MD5Update`:idx:
+     `md5.html#104 <md5.html#104>`_
+
+   `mean`:idx:
+     `math.html#111 <math.html#111>`_
+
+   `MEM_ROOT`:idx:
+     `mysql.html#325 <mysql.html#325>`_
+
+   `meta`:idx:
+     `xmlgen.html#151 <xmlgen.html#151>`_
+
+   `method call syntax`:idx:
+     `tut2.html#105 <tut2.html#105>`_
+
+   `methods`:idx:
+     `manual.html#206 <manual.html#206>`_
+
+   `min`:idx:
+     * `system.html#323 <system.html#323>`_
+     * `system.html#448 <system.html#448>`_
+     * `system.html#449 <system.html#449>`_
+     * `system.html#450 <system.html#450>`_
+     * `system.html#451 <system.html#451>`_
+     * `system.html#452 <system.html#452>`_
+     * `system.html#453 <system.html#453>`_
+
+   `mix`:idx:
+     `colors.html#107 <colors.html#107>`_
+
+   `mod`:idx:
+     * `system.html#228 <system.html#228>`_
+     * `system.html#229 <system.html#229>`_
+     * `system.html#230 <system.html#230>`_
+     * `system.html#231 <system.html#231>`_
+     * `system.html#232 <system.html#232>`_
+
+   `modify_defaults_file`:idx:
+     `mysql.html#284 <mysql.html#284>`_
+
+   `module`:idx:
+     * `manual.html#223 <manual.html#223>`_
+     * `tut1.html#125 <tut1.html#125>`_
+
+   `moveFile`:idx:
+     `os.html#143 <os.html#143>`_
+
+   `moveMem`:idx:
+     `system.html#418 <system.html#418>`_
+
+   `Multi-methods`:idx:
+     `manual.html#213 <manual.html#213>`_
+
+   `multi-methods`:idx:
+     `tut2.html#104 <tut2.html#104>`_
+
+   `MULTIPLE_KEY_FLAG`:idx:
+     `mysql.html#127 <mysql.html#127>`_
+
+   `my_bool`:idx:
+     `mysql.html#101 <mysql.html#101>`_
+
+   `MY_CHARSET_INFO`:idx:
+     `mysql.html#352 <mysql.html#352>`_
+
+   `my_connect`:idx:
+     `mysql.html#252 <mysql.html#252>`_
+
+   `my_init`:idx:
+     `mysql.html#286 <mysql.html#286>`_
+
+   `my_net_init`:idx:
+     `mysql.html#240 <mysql.html#240>`_
+
+   `my_net_local_init`:idx:
+     `mysql.html#241 <mysql.html#241>`_
+
+   `my_net_read`:idx:
+     `mysql.html#249 <mysql.html#249>`_
+
+   `my_net_write`:idx:
+     `mysql.html#246 <mysql.html#246>`_
+
+   `myodbc_remove_escape`:idx:
+     `mysql.html#465 <mysql.html#465>`_
+
+   `my_rnd`:idx:
+     `mysql.html#268 <mysql.html#268>`_
+
+   `my_socket`:idx:
+     `mysql.html#107 <mysql.html#107>`_
+
+   `mySQL`:idx:
+     `db_mysql.html#101 <db_mysql.html#101>`_
+
+   `MYSQL`:idx:
+     `mysql.html#357 <mysql.html#357>`_
+
+   `mysql_add_slave`:idx:
+     `mysql.html#435 <mysql.html#435>`_
+
+   `mysql_affected_rows`:idx:
+     `mysql.html#399 <mysql.html#399>`_
+
+   `mysql_autocommit`:idx:
+     `mysql.html#503 <mysql.html#503>`_
+
+   `MYSQL_BIND`:idx:
+     `mysql.html#379 <mysql.html#379>`_
+
+   `mysql_change_user`:idx:
+     `mysql.html#411 <mysql.html#411>`_
+
+   `mysql_character_set_name`:idx:
+     `mysql.html#407 <mysql.html#407>`_
+
+   `mysql_close`:idx:
+     `mysql.html#506 <mysql.html#506>`_
+
+   `mysql_commit`:idx:
+     `mysql.html#501 <mysql.html#501>`_
+
+   `mysql_connect`:idx:
+     `mysql.html#510 <mysql.html#510>`_
+
+   `MYSQL_COUNT_ERROR`:idx:
+     `mysql.html#310 <mysql.html#310>`_
+
+   `mysql_create_db`:idx:
+     `mysql.html#511 <mysql.html#511>`_
+
+   `MYSQL_DATA`:idx:
+     `mysql.html#329 <mysql.html#329>`_
+
+   `mysql_data_seek`:idx:
+     `mysql.html#454 <mysql.html#454>`_
+
+   `MYSQL_DATA_TRUNCATED`:idx:
+     `mysql.html#508 <mysql.html#508>`_
+
+   `mysql_debug`:idx:
+     `mysql.html#464 <mysql.html#464>`_
+
+   `mysql_disable_reads_from_master`:idx:
+     `mysql.html#430 <mysql.html#430>`_
+
+   `mysql_disable_rpl_parse`:idx:
+     `mysql.html#427 <mysql.html#427>`_
+
+   `mysql_drop_db`:idx:
+     `mysql.html#512 <mysql.html#512>`_
+
+   `mysql_dump_debug_info`:idx:
+     `mysql.html#437 <mysql.html#437>`_
+
+   `mysql_embedded`:idx:
+     `mysql.html#467 <mysql.html#467>`_
+
+   `mysql_enable_reads_from_master`:idx:
+     `mysql.html#429 <mysql.html#429>`_
+
+   `mysql_enable_rpl_parse`:idx:
+     `mysql.html#426 <mysql.html#426>`_
+
+   `mysql_enum_shutdown_level`:idx:
+     `mysql.html#236 <mysql.html#236>`_
+
+   `mysql_eof`:idx:
+     `mysql.html#393 <mysql.html#393>`_
+
+   `MYSQL_ERRMSG_SIZE`:idx:
+     `mysql.html#185 <mysql.html#185>`_
+
+   `mysql_errno`:idx:
+     `mysql.html#401 <mysql.html#401>`_
+
+   `mysql_errno_to_sqlstate`:idx:
+     `mysql.html#283 <mysql.html#283>`_
+
+   `mysql_error`:idx:
+     `mysql.html#402 <mysql.html#402>`_
+
+   `mysql_escape_string`:idx:
+     `mysql.html#461 <mysql.html#461>`_
+
+   `mysql_fetch_field`:idx:
+     `mysql.html#459 <mysql.html#459>`_
+
+   `mysql_fetch_field_direct`:idx:
+     `mysql.html#394 <mysql.html#394>`_
+
+   `mysql_fetch_fields`:idx:
+     `mysql.html#395 <mysql.html#395>`_
+
+   `mysql_fetch_lengths`:idx:
+     `mysql.html#458 <mysql.html#458>`_
+
+   `mysql_fetch_row`:idx:
+     `mysql.html#457 <mysql.html#457>`_
+
+   `MYSQL_FIELD`:idx:
+     `mysql.html#296 <mysql.html#296>`_
+
+   `mysql_field_count`:idx:
+     `mysql.html#398 <mysql.html#398>`_
+
+   `MYSQL_FIELD_OFFSET`:idx:
+     `mysql.html#301 <mysql.html#301>`_
+
+   `mysql_field_seek`:idx:
+     `mysql.html#456 <mysql.html#456>`_
+
+   `mysql_field_tell`:idx:
+     `mysql.html#397 <mysql.html#397>`_
+
+   `mysql_free_result`:idx:
+     `mysql.html#453 <mysql.html#453>`_
+
+   `mysql_get_character_set_info`:idx:
+     `mysql.html#423 <mysql.html#423>`_
+
+   `mysql_get_client_info`:idx:
+     `mysql.html#444 <mysql.html#444>`_
+
+   `mysql_get_client_version`:idx:
+     `mysql.html#445 <mysql.html#445>`_
+
+   `mysql_get_host_info`:idx:
+     `mysql.html#446 <mysql.html#446>`_
+
+   `mysql_get_parameters`:idx:
+     `mysql.html#388 <mysql.html#388>`_
+
+   `mysql_get_proto_info`:idx:
+     `mysql.html#448 <mysql.html#448>`_
+
+   `mysql_get_server_info`:idx:
+     `mysql.html#443 <mysql.html#443>`_
+
+   `mysql_get_server_version`:idx:
+     `mysql.html#447 <mysql.html#447>`_
+
+   `mysql_hex_string`:idx:
+     `mysql.html#462 <mysql.html#462>`_
+
+   `mysql_info`:idx:
+     `mysql.html#405 <mysql.html#405>`_
+
+   `mysql_init`:idx:
+     `mysql.html#409 <mysql.html#409>`_
+
+   `mysql_insert_id`:idx:
+     `mysql.html#400 <mysql.html#400>`_
+
+   `mysql_kill`:idx:
+     `mysql.html#439 <mysql.html#439>`_
+
+   `mysql_library_end`:idx:
+     `mysql.html#387 <mysql.html#387>`_
+
+   `mysql_library_init`:idx:
+     `mysql.html#386 <mysql.html#386>`_
+
+   `mysql_list_dbs`:idx:
+     `mysql.html#449 <mysql.html#449>`_
+
+   `mysql_list_fields`:idx:
+     `mysql.html#460 <mysql.html#460>`_
+
+   `mysql_list_processes`:idx:
+     `mysql.html#451 <mysql.html#451>`_
+
+   `mysql_list_tables`:idx:
+     `mysql.html#450 <mysql.html#450>`_
+
+   `MYSQL_LONG_DATA_HEADER`:idx:
+     `mysql.html#291 <mysql.html#291>`_
+
+   `MYSQL_MANAGER`:idx:
+     `mysql.html#370 <mysql.html#370>`_
+
+   `mysql_manager_close`:idx:
+     `mysql.html#470 <mysql.html#470>`_
+
+   `mysql_manager_command`:idx:
+     `mysql.html#471 <mysql.html#471>`_
+
+   `mysql_manager_connect`:idx:
+     `mysql.html#469 <mysql.html#469>`_
+
+   `mysql_manager_fetch_line`:idx:
+     `mysql.html#472 <mysql.html#472>`_
+
+   `mysql_manager_init`:idx:
+     `mysql.html#468 <mysql.html#468>`_
+
+   `mysql_master_query`:idx:
+     `mysql.html#419 <mysql.html#419>`_
+
+   `mysql_master_send_query`:idx:
+     `mysql.html#420 <mysql.html#420>`_
+
+   `MYSQL_METHODS`:idx:
+     `mysql.html#366 <mysql.html#366>`_
+
+   `mysql_more_results`:idx:
+     `mysql.html#504 <mysql.html#504>`_
+
+   `MYSQL_NAMEDPIPE`:idx:
+     `mysql.html#117 <mysql.html#117>`_
+
+   `mysql_next_result`:idx:
+     `mysql.html#505 <mysql.html#505>`_
+
+   `MYSQL_NO_DATA`:idx:
+     `mysql.html#507 <mysql.html#507>`_
+
+   `mysql_num_fields`:idx:
+     `mysql.html#392 <mysql.html#392>`_
+
+   `mysql_num_rows`:idx:
+     `mysql.html#391 <mysql.html#391>`_
+
+   `mysql_option`:idx:
+     `mysql.html#331 <mysql.html#331>`_
+
+   `mysql_options`:idx:
+     `mysql.html#452 <mysql.html#452>`_
+
+   `MYSQL_PARAMETERS`:idx:
+     `mysql.html#374 <mysql.html#374>`_
+
+   `mysql_ping`:idx:
+     `mysql.html#441 <mysql.html#441>`_
+
+   `mysql_protocol_type`:idx:
+     `mysql.html#345 <mysql.html#345>`_
+
+   `mysql_query`:idx:
+     `mysql.html#414 <mysql.html#414>`_
+
+   `mysql_read_query_result`:idx:
+     `mysql.html#473 <mysql.html#473>`_
+
+   `mysql_reads_from_master_enabled`:idx:
+     `mysql.html#431 <mysql.html#431>`_
+
+   `mysql_real_connect`:idx:
+     `mysql.html#412 <mysql.html#412>`_
+
+   `mysql_real_escape_string`:idx:
+     `mysql.html#463 <mysql.html#463>`_
+
+   `mysql_real_query`:idx:
+     `mysql.html#416 <mysql.html#416>`_
+
+   `mysql_refresh`:idx:
+     `mysql.html#438 <mysql.html#438>`_
+
+   `mysql_reload`:idx:
+     * `mysql.html#509 <mysql.html#509>`_
+     * `mysql.html#513 <mysql.html#513>`_
+
+   `MYSQL_RES`:idx:
+     `mysql.html#361 <mysql.html#361>`_
+
+   `mysql_rollback`:idx:
+     `mysql.html#502 <mysql.html#502>`_
+
+   `MYSQL_ROW`:idx:
+     `mysql.html#299 <mysql.html#299>`_
+
+   `MYSQL_ROW_OFFSET`:idx:
+     `mysql.html#316 <mysql.html#316>`_
+
+   `MYSQL_ROWS`:idx:
+     `mysql.html#313 <mysql.html#313>`_
+
+   `mysql_row_seek`:idx:
+     `mysql.html#455 <mysql.html#455>`_
+
+   `mysql_row_tell`:idx:
+     `mysql.html#396 <mysql.html#396>`_
+
+   `mysql_rpl_parse_enabled`:idx:
+     `mysql.html#428 <mysql.html#428>`_
+
+   `mysql_rpl_probe`:idx:
+     `mysql.html#433 <mysql.html#433>`_
+
+   `mysql_rpl_query_type`:idx:
+     `mysql.html#432 <mysql.html#432>`_
+
+   `mysql_rpl_type`:idx:
+     `mysql.html#346 <mysql.html#346>`_
+
+   `mysql_select_db`:idx:
+     `mysql.html#413 <mysql.html#413>`_
+
+   `mysql_send_query`:idx:
+     `mysql.html#415 <mysql.html#415>`_
+
+   `mysql_server_end`:idx:
+     `mysql.html#385 <mysql.html#385>`_
+
+   `mysql_server_init`:idx:
+     `mysql.html#384 <mysql.html#384>`_
+
+   `MYSQL_SERVICENAME`:idx:
+     `mysql.html#118 <mysql.html#118>`_
+
+   `mysql_set_character_set`:idx:
+     `mysql.html#408 <mysql.html#408>`_
+
+   `mysql_set_local_infile_default`:idx:
+     `mysql.html#425 <mysql.html#425>`_
+
+   `mysql_set_master`:idx:
+     `mysql.html#434 <mysql.html#434>`_
+
+   `mysql_set_server_option`:idx:
+     `mysql.html#440 <mysql.html#440>`_
+
+   `mysql_shutdown`:idx:
+     `mysql.html#436 <mysql.html#436>`_
+
+   `MYSQL_SHUTDOWN_KILLABLE_CONNECT`:idx:
+     `mysql.html#232 <mysql.html#232>`_
+
+   `MYSQL_SHUTDOWN_KILLABLE_LOCK_TABLE`:idx:
+     `mysql.html#234 <mysql.html#234>`_
+
+   `MYSQL_SHUTDOWN_KILLABLE_TRANS`:idx:
+     `mysql.html#233 <mysql.html#233>`_
+
+   `MYSQL_SHUTDOWN_KILLABLE_UPDATE`:idx:
+     `mysql.html#235 <mysql.html#235>`_
+
+   `mysql_slave_query`:idx:
+     `mysql.html#421 <mysql.html#421>`_
+
+   `mysql_slave_send_query`:idx:
+     `mysql.html#422 <mysql.html#422>`_
+
+   `mysql_sqlstate`:idx:
+     `mysql.html#403 <mysql.html#403>`_
+
+   `mysql_ssl_set`:idx:
+     `mysql.html#410 <mysql.html#410>`_
+
+   `mysql_stat`:idx:
+     `mysql.html#442 <mysql.html#442>`_
+
+   `mysql_status`:idx:
+     `mysql.html#344 <mysql.html#344>`_
+
+   `MYSQL_STMT`:idx:
+     `mysql.html#382 <mysql.html#382>`_
+
+   `mysql_stmt_affected_rows`:idx:
+     `mysql.html#498 <mysql.html#498>`_
+
+   `mysql_stmt_attr_get`:idx:
+     `mysql.html#482 <mysql.html#482>`_
+
+   `mysql_stmt_attr_set`:idx:
+     `mysql.html#481 <mysql.html#481>`_
+
+   `mysql_stmt_bind_param`:idx:
+     `mysql.html#483 <mysql.html#483>`_
+
+   `mysql_stmt_bind_result`:idx:
+     `mysql.html#484 <mysql.html#484>`_
+
+   `mysql_stmt_close`:idx:
+     `mysql.html#485 <mysql.html#485>`_
+
+   `mysql_stmt_data_seek`:idx:
+     `mysql.html#496 <mysql.html#496>`_
+
+   `mysql_stmt_errno`:idx:
+     `mysql.html#491 <mysql.html#491>`_
+
+   `mysql_stmt_error`:idx:
+     `mysql.html#492 <mysql.html#492>`_
+
+   `mysql_stmt_execute`:idx:
+     `mysql.html#476 <mysql.html#476>`_
+
+   `mysql_stmt_fetch`:idx:
+     `mysql.html#477 <mysql.html#477>`_
+
+   `mysql_stmt_fetch_column`:idx:
+     `mysql.html#478 <mysql.html#478>`_
+
+   `mysql_stmt_field_count`:idx:
+     `mysql.html#500 <mysql.html#500>`_
+
+   `mysql_stmt_free_result`:idx:
+     `mysql.html#487 <mysql.html#487>`_
+
+   `MYSQL_STMT_HEADER`:idx:
+     `mysql.html#290 <mysql.html#290>`_
+
+   `mysql_stmt_init`:idx:
+     `mysql.html#474 <mysql.html#474>`_
+
+   `mysql_stmt_insert_id`:idx:
+     `mysql.html#499 <mysql.html#499>`_
+
+   `mysql_stmt_num_rows`:idx:
+     `mysql.html#497 <mysql.html#497>`_
+
+   `mysql_stmt_param_count`:idx:
+     `mysql.html#480 <mysql.html#480>`_
+
+   `mysql_stmt_param_metadata`:idx:
+     `mysql.html#490 <mysql.html#490>`_
+
+   `mysql_stmt_prepare`:idx:
+     `mysql.html#475 <mysql.html#475>`_
+
+   `mysql_stmt_reset`:idx:
+     `mysql.html#486 <mysql.html#486>`_
+
+   `mysql_stmt_result_metadata`:idx:
+     `mysql.html#489 <mysql.html#489>`_
+
+   `mysql_stmt_row_seek`:idx:
+     `mysql.html#494 <mysql.html#494>`_
+
+   `mysql_stmt_row_tell`:idx:
+     `mysql.html#495 <mysql.html#495>`_
+
+   `mysql_stmt_send_long_data`:idx:
+     `mysql.html#488 <mysql.html#488>`_
+
+   `mysql_stmt_sqlstate`:idx:
+     `mysql.html#493 <mysql.html#493>`_
+
+   `mysql_stmt_store_result`:idx:
+     `mysql.html#479 <mysql.html#479>`_
+
+   `mysql_store_result`:idx:
+     `mysql.html#417 <mysql.html#417>`_
+
+   `mysql_thread_end`:idx:
+     `mysql.html#390 <mysql.html#390>`_
+
+   `mysql_thread_id`:idx:
+     `mysql.html#406 <mysql.html#406>`_
+
+   `mysql_thread_init`:idx:
+     `mysql.html#389 <mysql.html#389>`_
+
+   `mysql_thread_safe`:idx:
+     `mysql.html#466 <mysql.html#466>`_
+
+   `mysql_use_result`:idx:
+     `mysql.html#418 <mysql.html#418>`_
+
+   `mysql_warning_count`:idx:
+     `mysql.html#404 <mysql.html#404>`_
+
+   `my_thread_end`:idx:
+     `mysql.html#288 <mysql.html#288>`_
+
+   `my_thread_init`:idx:
+     `mysql.html#287 <mysql.html#287>`_
+
+   `my_ulonglong`:idx:
+     `mysql.html#308 <mysql.html#308>`_
+
+   `name`:idx:
+     `xmldom.html#185 <xmldom.html#185>`_
+
+   `NAME_LEN`:idx:
+     `mysql.html#110 <mysql.html#110>`_
+
+   `namespace`:idx:
+     `manual.html#224 <manual.html#224>`_
+
+   `namespaceURI`:idx:
+     `xmldom.html#156 <xmldom.html#156>`_
+
+   `namespaceURI=`:idx:
+     `xmldom.html#157 <xmldom.html#157>`_
+
+   `nan`:idx:
+     `system.html#441 <system.html#441>`_
+
+   `natural`:idx:
+     `pegs.html#135 <pegs.html#135>`_
+
+   `Natural`:idx:
+     `system.html#134 <system.html#134>`_
+
+   `neginf`:idx:
+     `system.html#440 <system.html#440>`_
+
+   `nestList`:idx:
+     `macros.html#152 <macros.html#152>`_
+
+   `NET`:idx:
+     `mysql.html#199 <mysql.html#199>`_
+
+   `net_clear`:idx:
+     `mysql.html#243 <mysql.html#243>`_
+
+   `net_end`:idx:
+     `mysql.html#242 <mysql.html#242>`_
+
+   `net_flush`:idx:
+     `mysql.html#245 <mysql.html#245>`_
+
+   `NET_HEADER_SIZE`:idx:
+     `mysql.html#265 <mysql.html#265>`_
+
+   `net_new_transaction`:idx:
+     `mysql.html#239 <mysql.html#239>`_
+
+   `NET_READ_TIMEOUT`:idx:
+     `mysql.html#186 <mysql.html#186>`_
+
+   `net_realloc`:idx:
+     `mysql.html#244 <mysql.html#244>`_
+
+   `net_real_write`:idx:
+     `mysql.html#248 <mysql.html#248>`_
+
+   `net_safe_read`:idx:
+     `mysql.html#514 <mysql.html#514>`_
+
+   `NET_WAIT_TIMEOUT`:idx:
+     `mysql.html#188 <mysql.html#188>`_
+
+   `net_write_command`:idx:
+     `mysql.html#247 <mysql.html#247>`_
+
+   `NET_WRITE_TIMEOUT`:idx:
+     `mysql.html#187 <mysql.html#187>`_
+
+   `new`:idx:
+     * `system.html#124 <system.html#124>`_
+     * `system.html#125 <system.html#125>`_
+
+   `newCall`:idx:
+     * `macros.html#150 <macros.html#150>`_
+     * `macros.html#151 <macros.html#151>`_
+
+   `newCData`:idx:
+     `xmltree.html#107 <xmltree.html#107>`_
+
+   `newComment`:idx:
+     `xmltree.html#106 <xmltree.html#106>`_
+
+   `newElement`:idx:
+     `xmltree.html#104 <xmltree.html#104>`_
+
+   `newEntity`:idx:
+     `xmltree.html#108 <xmltree.html#108>`_
+
+   `newException`:idx:
+     `system.html#496 <system.html#496>`_
+
+   `newFileStream`:idx:
+     * `streams.html#120 <streams.html#120>`_
+     * `streams.html#121 <streams.html#121>`_
+
+   `newFloatLitNode`:idx:
+     `macros.html#143 <macros.html#143>`_
+
+   `newFont`:idx:
+     `graphics.html#107 <graphics.html#107>`_
+
+   `newIdentNode`:idx:
+     * `macros.html#144 <macros.html#144>`_
+     * `macros.html#145 <macros.html#145>`_
+
+   `newIntLitNode`:idx:
+     `macros.html#142 <macros.html#142>`_
+
+   `newline`:idx:
+     * `manual.html#121 <manual.html#121>`_
+     * `pegs.html#121 <pegs.html#121>`_
+
+   `newLine`:idx:
+     `pegs.html#122 <pegs.html#122>`_
+
+   `NewLines`:idx:
+     `lexbase.html#102 <lexbase.html#102>`_
+
+   `newNimNode`:idx:
+     `macros.html#135 <macros.html#135>`_
+
+   `newNonTerminal`:idx:
+     `pegs.html#128 <pegs.html#128>`_
+
+   `newSeq`:idx:
+     `system.html#173 <system.html#173>`_
+
+   `newString`:idx:
+     `system.html#366 <system.html#366>`_
+
+   `newStringStream`:idx:
+     `streams.html#117 <streams.html#117>`_
+
+   `newStringTable`:idx:
+     * `strtabs.html#104 <strtabs.html#104>`_
+     * `strtabs.html#105 <strtabs.html#105>`_
+
+   `newStrLitNode`:idx:
+     `macros.html#141 <macros.html#141>`_
+
+   `newSurface`:idx:
+     `graphics.html#106 <graphics.html#106>`_
+
+   `newText`:idx:
+     `xmltree.html#105 <xmltree.html#105>`_
+
+   `newXmlTree`:idx:
+     `xmltree.html#126 <xmltree.html#126>`_
+
+   `next`:idx:
+     * `parseopt.html#105 <parseopt.html#105>`_
+     * `parsecfg.html#106 <parsecfg.html#106>`_
+     * `parsexml.html#123 <parsexml.html#123>`_
+     * `httpserver.html#105 <httpserver.html#105>`_
+
+   `nextPowerOfTwo`:idx:
+     `math.html#108 <math.html#108>`_
+
+   `nextSibling`:idx:
+     `xmldom.html#158 <xmldom.html#158>`_
+
+   `nimcall`:idx:
+     `manual.html#176 <manual.html#176>`_
+
+   `NimrodMajor`:idx:
+     `system.html#402 <system.html#402>`_
+
+   `NimrodMinor`:idx:
+     `system.html#403 <system.html#403>`_
+
+   `NimrodPatch`:idx:
+     `system.html#404 <system.html#404>`_
+
+   `NimrodVersion`:idx:
+     `system.html#401 <system.html#401>`_
+
+   `noconv`:idx:
+     `manual.html#179 <manual.html#179>`_
+
+   `noDecl`:idx:
+     `nimrodc.html#101 <nimrodc.html#101>`_
+
+   `NO_DEFAULT_VALUE_FLAG`:idx:
+     `mysql.html#136 <mysql.html#136>`_
+
+   `nodeName`:idx:
+     `xmldom.html#159 <xmldom.html#159>`_
+
+   `nodeType`:idx:
+     `xmldom.html#160 <xmldom.html#160>`_
+
+   `nonterminal`:idx:
+     `pegs.html#127 <pegs.html#127>`_
+
+   `noreturn`:idx:
+     `manual.html#237 <manual.html#237>`_
+
+   `normalize`:idx:
+     * `strutils.html#118 <strutils.html#118>`_
+     * `xmldom.html#171 <xmldom.html#171>`_
+
+   `noscript`:idx:
+     `xmlgen.html#152 <xmlgen.html#152>`_
+
+   `noSideEffect`:idx:
+     `manual.html#234 <manual.html#234>`_
+
+   `not`:idx:
+     * `system.html#120 <system.html#120>`_
+     * `system.html#203 <system.html#203>`_
+     * `system.html#204 <system.html#204>`_
+     * `system.html#205 <system.html#205>`_
+     * `system.html#206 <system.html#206>`_
+     * `system.html#207 <system.html#207>`_
+
+   `not_in`:idx:
+     `system.html#358 <system.html#358>`_
+
+   `NOT_NULL_FLAG`:idx:
+     `mysql.html#124 <mysql.html#124>`_
+
+   `ntohl`:idx:
+     `sockets.html#112 <sockets.html#112>`_
+
+   `ntohs`:idx:
+     `sockets.html#113 <sockets.html#113>`_
+
+   `NULL_LENGTH`:idx:
+     `mysql.html#289 <mysql.html#289>`_
+
+   `Numerical constants`:idx:
+     `manual.html#137 <manual.html#137>`_
+
+   `NUM_FLAG`:idx:
+     `mysql.html#137 <mysql.html#137>`_
+
+   `object`:idx:
+     * `manual.html#162 <manual.html#162>`_
+     * `xmlgen.html#153 <xmlgen.html#153>`_
+
+   `octet2hex`:idx:
+     `mysql.html#276 <mysql.html#276>`_
+
+   `ol`:idx:
+     `xmlgen.html#154 <xmlgen.html#154>`_
+
+   `ONLY_KILL_QUERY`:idx:
+     `mysql.html#189 <mysql.html#189>`_
+
+   `Open`:idx:
+     * `system.html#509 <system.html#509>`_
+     * `system.html#510 <system.html#510>`_
+     * `db_postgres.html#118 <db_postgres.html#118>`_
+     * `db_mysql.html#118 <db_mysql.html#118>`_
+     * `db_sqlite.html#118 <db_sqlite.html#118>`_
+
+   `open`:idx:
+     * `lexbase.html#104 <lexbase.html#104>`_
+     * `parsecfg.html#104 <parsecfg.html#104>`_
+     * `parsexml.html#107 <parsexml.html#107>`_
+     * `parsecsv.html#106 <parsecsv.html#106>`_
+     * `zipfiles.html#102 <zipfiles.html#102>`_
+     * `httpserver.html#103 <httpserver.html#103>`_
+
+   `openarray`:idx:
+     * `tut1.html#119 <tut1.html#119>`_
+     * `system.html#130 <system.html#130>`_
+
+   `openDefaultBrowser`:idx:
+     `browsers.html#101 <browsers.html#101>`_
+
+   `OpenFile`:idx:
+     * `system.html#507 <system.html#507>`_
+     * `system.html#508 <system.html#508>`_
+
+   `operator`:idx:
+     `manual.html#139 <manual.html#139>`_
+
+   `Operators`:idx:
+     `manual.html#211 <manual.html#211>`_
+
+   `optgroup`:idx:
+     `xmlgen.html#155 <xmlgen.html#155>`_
+
+   `option`:idx:
+     `xmlgen.html#156 <xmlgen.html#156>`_
+
+   `or`:idx:
+     * `system.html#122 <system.html#122>`_
+     * `system.html#248 <system.html#248>`_
+     * `system.html#249 <system.html#249>`_
+     * `system.html#250 <system.html#250>`_
+     * `system.html#251 <system.html#251>`_
+     * `system.html#252 <system.html#252>`_
+
+   `ord`:idx:
+     `system.html#182 <system.html#182>`_
+
+   `ordinal`:idx:
+     `tut1.html#114 <tut1.html#114>`_
+
+   `Ordinal`:idx:
+     `system.html#114 <system.html#114>`_
+
+   `Ordinal types`:idx:
+     `manual.html#142 <manual.html#142>`_
+
+   `OSError`:idx:
+     `os.html#112 <os.html#112>`_
+
+   `outputStream`:idx:
+     `osproc.html#115 <osproc.html#115>`_
+
+   `ownerDocument`:idx:
+     `xmldom.html#161 <xmldom.html#161>`_
+
+   `ownerElement`:idx:
+     `xmldom.html#187 <xmldom.html#187>`_
+
+   `p`:idx:
+     `xmlgen.html#157 <xmlgen.html#157>`_
+
+   `packet_error`:idx:
+     `mysql.html#201 <mysql.html#201>`_
+
+   `pairs`:idx:
+     `strtabs.html#110 <strtabs.html#110>`_
+
+   `parallelReplace`:idx:
+     * `re.html#121 <re.html#121>`_
+     * `pegs.html#149 <pegs.html#149>`_
+
+   `param`:idx:
+     `xmlgen.html#158 <xmlgen.html#158>`_
+
+   `paramCount`:idx:
+     `os.html#110 <os.html#110>`_
+
+   `paramStr`:idx:
+     `os.html#111 <os.html#111>`_
+
+   `ParDir`:idx:
+     `os.html#102 <os.html#102>`_
+
+   `parentDir`:idx:
+     `os.html#127 <os.html#127>`_
+
+   `parentNode`:idx:
+     `xmldom.html#162 <xmldom.html#162>`_
+
+   `parseBiggestFloat`:idx:
+     `parseutils.html#110 <parseutils.html#110>`_
+
+   `parseBiggestInt`:idx:
+     `parseutils.html#108 <parseutils.html#108>`_
+
+   `ParseBiggestInt`:idx:
+     `strutils.html#143 <strutils.html#143>`_
+
+   `parseCmdLine`:idx:
+     `os.html#160 <os.html#160>`_
+
+   `parseColor`:idx:
+     `colors.html#249 <colors.html#249>`_
+
+   `parseFloat`:idx:
+     `parseutils.html#111 <parseutils.html#111>`_
+
+   `ParseFloat`:idx:
+     `strutils.html#144 <strutils.html#144>`_
+
+   `parseHex`:idx:
+     `parseutils.html#101 <parseutils.html#101>`_
+
+   `ParseHexInt`:idx:
+     `strutils.html#145 <strutils.html#145>`_
+
+   `parseHtml`:idx:
+     * `htmlparser.html#108 <htmlparser.html#108>`_
+     * `htmlparser.html#109 <htmlparser.html#109>`_
+
+   `parseIdent`:idx:
+     `parseutils.html#103 <parseutils.html#103>`_
+
+   `ParseInt`:idx:
+     `strutils.html#142 <strutils.html#142>`_
+
+   `parseInt`:idx:
+     `parseutils.html#109 <parseutils.html#109>`_
+
+   `parseOct`:idx:
+     `parseutils.html#102 <parseutils.html#102>`_
+
+   `ParseOctInt`:idx:
+     `strutils.html#159 <strutils.html#159>`_
+
+   `parsePeg`:idx:
+     `pegs.html#154 <pegs.html#154>`_
+
+   `parseSQL`:idx:
+     `parsesql.html#109 <parsesql.html#109>`_
+
+   `parseToken`:idx:
+     `parseutils.html#104 <parseutils.html#104>`_
+
+   `parseXml`:idx:
+     * `xmlparser.html#102 <xmlparser.html#102>`_
+     * `xmlparser.html#103 <xmlparser.html#103>`_
+
+   `PART_KEY_FLAG`:idx:
+     `mysql.html#138 <mysql.html#138>`_
+
+   `PathSep`:idx:
+     `os.html#105 <os.html#105>`_
+
+   `PAttr`:idx:
+     `xmldom.html#129 <xmldom.html#129>`_
+
+   `PCDataSection`:idx:
+     `xmldom.html#133 <xmldom.html#133>`_
+
+   `pcDirectory`:idx:
+     `os.html#154 <os.html#154>`_
+
+   `Pcharacter_set`:idx:
+     `mysql.html#350 <mysql.html#350>`_
+
+   `Pcharset_info_st`:idx:
+     `mysql.html#349 <mysql.html#349>`_
+
+   `pcLinkToDirectory`:idx:
+     `os.html#155 <os.html#155>`_
+
+   `PComment`:idx:
+     `xmldom.html#132 <xmldom.html#132>`_
+
+   `PCURL`:idx:
+     `libcurl.html#139 <libcurl.html#139>`_
+
+   `Pcurl_calloc_callback`:idx:
+     `libcurl.html#101 <libcurl.html#101>`_
+
+   `Pcurl_closepolicy`:idx:
+     `libcurl.html#102 <libcurl.html#102>`_
+
+   `PCURLcode`:idx:
+     `libcurl.html#123 <libcurl.html#123>`_
+
+   `PCURLFORMcode`:idx:
+     `libcurl.html#124 <libcurl.html#124>`_
+
+   `PCURLformoption`:idx:
+     `libcurl.html#125 <libcurl.html#125>`_
+
+   `Pcurl_forms`:idx:
+     `libcurl.html#103 <libcurl.html#103>`_
+
+   `Pcurl_ftpauth`:idx:
+     `libcurl.html#104 <libcurl.html#104>`_
+
+   `Pcurl_ftpmethod`:idx:
+     `libcurl.html#105 <libcurl.html#105>`_
+
+   `Pcurl_ftpssl`:idx:
+     `libcurl.html#106 <libcurl.html#106>`_
+
+   `Pcurl_httppost`:idx:
+     `libcurl.html#108 <libcurl.html#108>`_
+
+   `PCURL_HTTP_VERSION`:idx:
+     `libcurl.html#107 <libcurl.html#107>`_
+
+   `PCURLINFO`:idx:
+     `libcurl.html#126 <libcurl.html#126>`_
+
+   `Pcurl_infotype`:idx:
+     `libcurl.html#110 <libcurl.html#110>`_
+
+   `Pcurliocmd`:idx:
+     `libcurl.html#127 <libcurl.html#127>`_
+
+   `Pcurlioerr`:idx:
+     `libcurl.html#128 <libcurl.html#128>`_
+
+   `Pcurl_lock_access`:idx:
+     `libcurl.html#111 <libcurl.html#111>`_
+
+   `Pcurl_lock_data`:idx:
+     `libcurl.html#112 <libcurl.html#112>`_
+
+   `PCURLM`:idx:
+     `libcurl.html#129 <libcurl.html#129>`_
+
+   `Pcurl_malloc_callback`:idx:
+     `libcurl.html#113 <libcurl.html#113>`_
+
+   `PCURLMcode`:idx:
+     `libcurl.html#130 <libcurl.html#130>`_
+
+   `PCURLMoption`:idx:
+     `libcurl.html#131 <libcurl.html#131>`_
+
+   `PCURLMSG`:idx:
+     `libcurl.html#132 <libcurl.html#132>`_
+
+   `PCURL_NETRC_OPTION`:idx:
+     `libcurl.html#114 <libcurl.html#114>`_
+
+   `PCURLoption`:idx:
+     `libcurl.html#133 <libcurl.html#133>`_
+
+   `Pcurl_proxytype`:idx:
+     `libcurl.html#115 <libcurl.html#115>`_
+
+   `Pcurl_realloc_callback`:idx:
+     `libcurl.html#116 <libcurl.html#116>`_
+
+   `PCURLSH`:idx:
+     `libcurl.html#134 <libcurl.html#134>`_
+
+   `PCURLSHcode`:idx:
+     `libcurl.html#135 <libcurl.html#135>`_
+
+   `PCURLSHoption`:idx:
+     `libcurl.html#136 <libcurl.html#136>`_
+
+   `Pcurl_slist`:idx:
+     `libcurl.html#117 <libcurl.html#117>`_
+
+   `Pcurl_socket`:idx:
+     `libcurl.html#118 <libcurl.html#118>`_
+
+   `PCURL_SSL_VERSION`:idx:
+     `libcurl.html#119 <libcurl.html#119>`_
+
+   `Pcurl_strdup_callback`:idx:
+     `libcurl.html#120 <libcurl.html#120>`_
+
+   `PCURL_TIMECOND`:idx:
+     `libcurl.html#121 <libcurl.html#121>`_
+
+   `PCURLversion`:idx:
+     `libcurl.html#137 <libcurl.html#137>`_
+
+   `Pcurl_version_info_data`:idx:
+     `libcurl.html#122 <libcurl.html#122>`_
+
+   `PDocument`:idx:
+     `xmldom.html#128 <xmldom.html#128>`_
+
+   `PDocumentFragment`:idx:
+     `xmldom.html#130 <xmldom.html#130>`_
+
+   `PDOMImplementation`:idx:
+     `xmldom.html#125 <xmldom.html#125>`_
+
+   `peg`:idx:
+     `pegs.html#155 <pegs.html#155>`_
+
+   `PElement`:idx:
+     `xmldom.html#127 <xmldom.html#127>`_
+
+   `Pfd_set`:idx:
+     `libcurl.html#138 <libcurl.html#138>`_
+
+   `PFileStream`:idx:
+     `streams.html#118 <streams.html#118>`_
+
+   `PFloat32`:idx:
+     `system.html#394 <system.html#394>`_
+
+   `PFloat64`:idx:
+     `system.html#395 <system.html#395>`_
+
+   `PFont`:idx:
+     `graphics.html#105 <graphics.html#105>`_
+
+   `Pgptr`:idx:
+     `mysql.html#104 <mysql.html#104>`_
+
+   `PI`:idx:
+     `math.html#101 <math.html#101>`_
+
+   `PIName`:idx:
+     `parsexml.html#115 <parsexml.html#115>`_
+
+   `PInt32`:idx:
+     `system.html#397 <system.html#397>`_
+
+   `PInt64`:idx:
+     `system.html#396 <system.html#396>`_
+
+   `PIRest`:idx:
+     `parsexml.html#116 <parsexml.html#116>`_
+
+   `PItem_result`:idx:
+     `mysql.html#256 <mysql.html#256>`_
+
+   `PMEM_ROOT`:idx:
+     `mysql.html#326 <mysql.html#326>`_
+
+   `Pmy_bool`:idx:
+     `mysql.html#102 <mysql.html#102>`_
+
+   `PMY_CHARSET_INFO`:idx:
+     `mysql.html#353 <mysql.html#353>`_
+
+   `Pmy_socket`:idx:
+     `mysql.html#106 <mysql.html#106>`_
+
+   `PMYSQL`:idx:
+     `mysql.html#358 <mysql.html#358>`_
+
+   `PMYSQL_BIND`:idx:
+     `mysql.html#380 <mysql.html#380>`_
+
+   `PMYSQL_DATA`:idx:
+     `mysql.html#330 <mysql.html#330>`_
+
+   `PMYSQL_FIELD`:idx:
+     `mysql.html#297 <mysql.html#297>`_
+
+   `PMYSQL_FIELD_OFFSET`:idx:
+     `mysql.html#300 <mysql.html#300>`_
+
+   `PMYSQL_MANAGER`:idx:
+     `mysql.html#371 <mysql.html#371>`_
+
+   `PMYSQL_METHODS`:idx:
+     `mysql.html#367 <mysql.html#367>`_
+
+   `PMYSQL_PARAMETERS`:idx:
+     `mysql.html#375 <mysql.html#375>`_
+
+   `PMYSQL_RES`:idx:
+     `mysql.html#362 <mysql.html#362>`_
+
+   `PMYSQL_ROW`:idx:
+     `mysql.html#298 <mysql.html#298>`_
+
+   `PMYSQL_ROW_OFFSET`:idx:
+     `mysql.html#315 <mysql.html#315>`_
+
+   `PMYSQL_ROWS`:idx:
+     `mysql.html#314 <mysql.html#314>`_
+
+   `PMYSQL_STMT`:idx:
+     `mysql.html#364 <mysql.html#364>`_
+
+   `Pmy_ulonglong`:idx:
+     `mysql.html#309 <mysql.html#309>`_
+
+   `PNET`:idx:
+     `mysql.html#200 <mysql.html#200>`_
+
+   `PNimrodNode`:idx:
+     `macros.html#111 <macros.html#111>`_
+
+   `PNimrodSymbol`:idx:
+     `macros.html#110 <macros.html#110>`_
+
+   `PNimrodType`:idx:
+     `macros.html#109 <macros.html#109>`_
+
+   `PNode`:idx:
+     `xmldom.html#126 <xmldom.html#126>`_
+
+   `PNonTerminal`:idx:
+     `pegs.html#102 <pegs.html#102>`_
+
+   `PObject`:idx:
+     `system.html#137 <system.html#137>`_
+
+   `pointer`:idx:
+     `system.html#113 <system.html#113>`_
+
+   `pointers`:idx:
+     * `manual.html#165 <manual.html#165>`_
+     * `tut1.html#120 <tut1.html#120>`_
+
+   `pop`:idx:
+     `system.html#478 <system.html#478>`_
+
+   `port`:idx:
+     `httpserver.html#104 <httpserver.html#104>`_
+
+   `Positive`:idx:
+     `system.html#135 <system.html#135>`_
+
+   `post`:idx:
+     `httpclient.html#108 <httpclient.html#108>`_
+
+   `postContent`:idx:
+     `httpclient.html#109 <httpclient.html#109>`_
+
+   `PostgreSQL`:idx:
+     * `db_postgres.html#101 <db_postgres.html#101>`_
+     * `db_sqlite.html#101 <db_sqlite.html#101>`_
+
+   `pow`:idx:
+     `math.html#132 <math.html#132>`_
+
+   `PPByte`:idx:
+     `mysql.html#108 <mysql.html#108>`_
+
+   `PPcurl_httppost`:idx:
+     `libcurl.html#109 <libcurl.html#109>`_
+
+   `PPPChar`:idx:
+     `sqlite3.html#174 <sqlite3.html#174>`_
+
+   `PProcess`:idx:
+     `osproc.html#101 <osproc.html#101>`_
+
+   `PProcessingInstruction`:idx:
+     `xmldom.html#134 <xmldom.html#134>`_
+
+   `PPSqlite3`:idx:
+     `sqlite3.html#176 <sqlite3.html#176>`_
+
+   `PPsqlite3_stmt`:idx:
+     `sqlite3.html#179 <sqlite3.html#179>`_
+
+   `PPsqlite3_value`:idx:
+     `sqlite3.html#181 <sqlite3.html#181>`_
+
+   `Prand_struct`:idx:
+     `mysql.html#253 <mysql.html#253>`_
+
+   `pre`:idx:
+     `xmlgen.html#159 <xmlgen.html#159>`_
+
+   `pred`:idx:
+     `system.html#170 <system.html#170>`_
+
+   `prefix=`:idx:
+     `xmldom.html#164 <xmldom.html#164>`_
+
+   `previousSibling`:idx:
+     `xmldom.html#163 <xmldom.html#163>`_
+
+   `PRI_KEY_FLAG`:idx:
+     `mysql.html#125 <mysql.html#125>`_
+
+   `procedural type`:idx:
+     * `manual.html#168 <manual.html#168>`_
+     * `tut1.html#123 <tut1.html#123>`_
+
+   `procedures`:idx:
+     `manual.html#208 <manual.html#208>`_
+
+   `processedRows`:idx:
+     `parsecsv.html#107 <parsecsv.html#107>`_
+
+   `processID`:idx:
+     `osproc.html#112 <osproc.html#112>`_
+
+   `ProcessingInstructionNode`:idx:
+     `xmldom.html#121 <xmldom.html#121>`_
+
+   `procvar`:idx:
+     `manual.html#235 <manual.html#235>`_
+
+   `programming by contracts`:idx:
+     `system.html#424 <system.html#424>`_
+
+   `PRope`:idx:
+     `ropes.html#102 <ropes.html#102>`_
+
+   `Psockaddr`:idx:
+     `mysql.html#250 <mysql.html#250>`_
+
+   `Psqlite3`:idx:
+     `sqlite3.html#175 <sqlite3.html#175>`_
+
+   `Psqlite3_context`:idx:
+     `sqlite3.html#177 <sqlite3.html#177>`_
+
+   `Psqlite3_stmt`:idx:
+     `sqlite3.html#178 <sqlite3.html#178>`_
+
+   `Psqlite3_value`:idx:
+     `sqlite3.html#180 <sqlite3.html#180>`_
+
+   `PSqlNode`:idx:
+     `parsesql.html#104 <parsesql.html#104>`_
+
+   `Pst_dynamic_array`:idx:
+     `mysql.html#341 <mysql.html#341>`_
+
+   `Pst_mem_root`:idx:
+     `mysql.html#323 <mysql.html#323>`_
+
+   `Pst_mysql`:idx:
+     `mysql.html#355 <mysql.html#355>`_
+
+   `Pst_mysql_bind`:idx:
+     `mysql.html#377 <mysql.html#377>`_
+
+   `Pst_mysql_data`:idx:
+     `mysql.html#327 <mysql.html#327>`_
+
+   `Pst_mysql_field`:idx:
+     `mysql.html#294 <mysql.html#294>`_
+
+   `Pst_mysql_manager`:idx:
+     `mysql.html#368 <mysql.html#368>`_
+
+   `Pst_mysql_methods`:idx:
+     `mysql.html#354 <mysql.html#354>`_
+
+   `Pst_mysql_options`:idx:
+     `mysql.html#342 <mysql.html#342>`_
+
+   `Pst_mysql_parameters`:idx:
+     `mysql.html#372 <mysql.html#372>`_
+
+   `Pst_mysql_res`:idx:
+     `mysql.html#359 <mysql.html#359>`_
+
+   `Pst_mysql_rows`:idx:
+     `mysql.html#311 <mysql.html#311>`_
+
+   `Pst_mysql_stmt`:idx:
+     `mysql.html#363 <mysql.html#363>`_
+
+   `Pst_net`:idx:
+     `mysql.html#197 <mysql.html#197>`_
+
+   `PStream`:idx:
+     `streams.html#101 <streams.html#101>`_
+
+   `PStringStream`:idx:
+     `streams.html#115 <streams.html#115>`_
+
+   `PStringTable`:idx:
+     `strtabs.html#103 <strtabs.html#103>`_
+
+   `Pst_udf_args`:idx:
+     `mysql.html#257 <mysql.html#257>`_
+
+   `Pst_udf_init`:idx:
+     `mysql.html#261 <mysql.html#261>`_
+
+   `Pst_used_mem`:idx:
+     `mysql.html#319 <mysql.html#319>`_
+
+   `PSurface`:idx:
+     `graphics.html#103 <graphics.html#103>`_
+
+   `PText`:idx:
+     `xmldom.html#131 <xmldom.html#131>`_
+
+   `PUDF_ARGS`:idx:
+     `mysql.html#260 <mysql.html#260>`_
+
+   `PUDF_INIT`:idx:
+     `mysql.html#264 <mysql.html#264>`_
+
+   `pure`:idx:
+     `manual.html#240 <manual.html#240>`_
+
+   `PUSED_MEM`:idx:
+     `mysql.html#322 <mysql.html#322>`_
+
+   `push`:idx:
+     `math.html#135 <math.html#135>`_
+
+   `push/pop`:idx:
+     `manual.html#245 <manual.html#245>`_
+
+   `putEnv`:idx:
+     `os.html#149 <os.html#149>`_
+
+   `PVIO`:idx:
+     `mysql.html#103 <mysql.html#103>`_
+
+   `PXmlAttributes`:idx:
+     `xmltree.html#103 <xmltree.html#103>`_
+
+   `PXmlNode`:idx:
+     `xmltree.html#101 <xmltree.html#101>`_
+
+   `PZipFileStream`:idx:
+     `zipfiles.html#108 <zipfiles.html#108>`_
+
+   `q`:idx:
+     `xmlgen.html#160 <xmlgen.html#160>`_
+
+   `quit`:idx:
+     * `system.html#499 <system.html#499>`_
+     * `system.html#500 <system.html#500>`_
+
+   `QuitFailure`:idx:
+     `system.html#498 <system.html#498>`_
+
+   `QuitSuccess`:idx:
+     `system.html#497 <system.html#497>`_
+
+   `quotation mark`:idx:
+     `manual.html#128 <manual.html#128>`_
+
+   `quoteIfContainsWhite`:idx:
+     `strutils.html#152 <strutils.html#152>`_
+
+   `random`:idx:
+     `math.html#113 <math.html#113>`_
+
+   `randominit`:idx:
+     `mysql.html#267 <mysql.html#267>`_
+
+   `randomize`:idx:
+     `math.html#114 <math.html#114>`_
+
+   `rand_struct`:idx:
+     `mysql.html#254 <mysql.html#254>`_
+
+   `range`:idx:
+     `system.html#128 <system.html#128>`_
+
+   `re`:idx:
+     `re.html#108 <re.html#108>`_
+
+   `re-raised`:idx:
+     `manual.html#192 <manual.html#192>`_
+
+   `readBool`:idx:
+     `streams.html#106 <streams.html#106>`_
+
+   `readBuffer`:idx:
+     `system.html#530 <system.html#530>`_
+
+   `ReadBytes`:idx:
+     `system.html#528 <system.html#528>`_
+
+   `readChar`:idx:
+     * `system.html#514 <system.html#514>`_
+     * `streams.html#105 <streams.html#105>`_
+
+   `ReadChars`:idx:
+     `system.html#529 <system.html#529>`_
+
+   `readData`:idx:
+     `cgi.html#109 <cgi.html#109>`_
+
+   `readFile`:idx:
+     `system.html#516 <system.html#516>`_
+
+   `readFloat32`:idx:
+     `streams.html#111 <streams.html#111>`_
+
+   `readFloat64`:idx:
+     `streams.html#112 <streams.html#112>`_
+
+   `readInt16`:idx:
+     `streams.html#108 <streams.html#108>`_
+
+   `readInt32`:idx:
+     `streams.html#109 <streams.html#109>`_
+
+   `readInt64`:idx:
+     `streams.html#110 <streams.html#110>`_
+
+   `readInt8`:idx:
+     `streams.html#107 <streams.html#107>`_
+
+   `readLine`:idx:
+     * `system.html#524 <system.html#524>`_
+     * `streams.html#114 <streams.html#114>`_
+
+   `readRow`:idx:
+     `parsecsv.html#108 <parsecsv.html#108>`_
+
+   `readStr`:idx:
+     `streams.html#113 <streams.html#113>`_
+
+   `realloc`:idx:
+     `system.html#422 <system.html#422>`_
+
+   `reBinary`:idx:
+     * `regexprs.html#116 <regexprs.html#116>`_
+     * `re.html#130 <re.html#130>`_
+
+   `Recursive module dependencies`:idx:
+     `manual.html#228 <manual.html#228>`_
+
+   `recv`:idx:
+     * `sockets.html#132 <sockets.html#132>`_
+     * `sockets.html#133 <sockets.html#133>`_
+
+   `recvLine`:idx:
+     `sockets.html#131 <sockets.html#131>`_
+
+   `reEmail`:idx:
+     * `regexprs.html#119 <regexprs.html#119>`_
+     * `re.html#133 <re.html#133>`_
+
+   `reFloat`:idx:
+     * `regexprs.html#118 <regexprs.html#118>`_
+     * `re.html#132 <re.html#132>`_
+
+   `REFRESH_DES_KEY_FILE`:idx:
+     `mysql.html#154 <mysql.html#154>`_
+
+   `REFRESH_FAST`:idx:
+     `mysql.html#151 <mysql.html#151>`_
+
+   `REFRESH_GRANT`:idx:
+     `mysql.html#142 <mysql.html#142>`_
+
+   `REFRESH_HOSTS`:idx:
+     `mysql.html#145 <mysql.html#145>`_
+
+   `REFRESH_LOG`:idx:
+     `mysql.html#143 <mysql.html#143>`_
+
+   `REFRESH_MASTER`:idx:
+     `mysql.html#149 <mysql.html#149>`_
+
+   `REFRESH_QUERY_CACHE`:idx:
+     `mysql.html#152 <mysql.html#152>`_
+
+   `REFRESH_QUERY_CACHE_FREE`:idx:
+     `mysql.html#153 <mysql.html#153>`_
+
+   `REFRESH_READ_LOCK`:idx:
+     `mysql.html#150 <mysql.html#150>`_
+
+   `REFRESH_SLAVE`:idx:
+     `mysql.html#148 <mysql.html#148>`_
+
+   `REFRESH_STATUS`:idx:
+     `mysql.html#146 <mysql.html#146>`_
+
+   `REFRESH_TABLES`:idx:
+     `mysql.html#144 <mysql.html#144>`_
+
+   `REFRESH_THREADS`:idx:
+     `mysql.html#147 <mysql.html#147>`_
+
+   `REFRESH_USER_RESOURCES`:idx:
+     `mysql.html#155 <mysql.html#155>`_
+
+   `register`:idx:
+     `manual.html#246 <manual.html#246>`_
+
+   `reHex`:idx:
+     * `regexprs.html#115 <regexprs.html#115>`_
+     * `re.html#129 <re.html#129>`_
+
+   `reIdentifier`:idx:
+     * `regexprs.html#112 <regexprs.html#112>`_
+     * `re.html#126 <re.html#126>`_
+
+   `reInteger`:idx:
+     * `regexprs.html#114 <regexprs.html#114>`_
+     * `re.html#128 <re.html#128>`_
+
+   `removeAttribute`:idx:
+     `xmldom.html#197 <xmldom.html#197>`_
+
+   `removeAttributeNode`:idx:
+     `xmldom.html#199 <xmldom.html#199>`_
+
+   `removeAttributeNS`:idx:
+     `xmldom.html#198 <xmldom.html#198>`_
+
+   `removeChild`:idx:
+     `xmldom.html#172 <xmldom.html#172>`_
+
+   `removeDir`:idx:
+     `os.html#158 <os.html#158>`_
+
+   `removeFile`:idx:
+     `os.html#144 <os.html#144>`_
+
+   `removeNamedItem`:idx:
+     `xmldom.html#179 <xmldom.html#179>`_
+
+   `removeNamedItemNS`:idx:
+     `xmldom.html#180 <xmldom.html#180>`_
+
+   `reNatural`:idx:
+     * `regexprs.html#113 <regexprs.html#113>`_
+     * `re.html#127 <re.html#127>`_
+
+   `renderSQL`:idx:
+     `parsesql.html#110 <parsesql.html#110>`_
+
+   `reOctal`:idx:
+     * `regexprs.html#117 <regexprs.html#117>`_
+     * `re.html#131 <re.html#131>`_
+
+   `repeatChar`:idx:
+     `strutils.html#147 <strutils.html#147>`_
+
+   `replace`:idx:
+     * `strutils.html#155 <strutils.html#155>`_
+     * `strutils.html#156 <strutils.html#156>`_
+     * `re.html#120 <re.html#120>`_
+     * `pegs.html#148 <pegs.html#148>`_
+
+   `replaceChild`:idx:
+     `xmldom.html#173 <xmldom.html#173>`_
+
+   `replaceStr`:idx:
+     * `strutils.html#122 <strutils.html#122>`_
+     * `strutils.html#123 <strutils.html#123>`_
+
+   `repr`:idx:
+     `system.html#379 <system.html#379>`_
+
+   `request`:idx:
+     `httpclient.html#105 <httpclient.html#105>`_
+
+   `ResetAttributes`:idx:
+     `terminal.html#110 <terminal.html#110>`_
+
+   `result`:idx:
+     * `manual.html#199 <manual.html#199>`_
+     * `manual.html#210 <manual.html#210>`_
+
+   `resume`:idx:
+     `osproc.html#109 <osproc.html#109>`_
+
+   `return`:idx:
+     `manual.html#198 <manual.html#198>`_
+
+   `reURL`:idx:
+     * `regexprs.html#120 <regexprs.html#120>`_
+     * `re.html#134 <re.html#134>`_
+
+   `rgb`:idx:
+     `colors.html#251 <colors.html#251>`_
+
+   `rope`:idx:
+     * `ropes.html#101 <ropes.html#101>`_
+     * `ropes.html#104 <ropes.html#104>`_
+     * `ropes.html#105 <ropes.html#105>`_
+     * `ropes.html#106 <ropes.html#106>`_
+
+   `round`:idx:
+     `math.html#121 <math.html#121>`_
+
+   `Rows`:idx:
+     * `db_postgres.html#112 <db_postgres.html#112>`_
+     * `db_mysql.html#112 <db_mysql.html#112>`_
+     * `db_sqlite.html#112 <db_sqlite.html#112>`_
+
+   `run`:idx:
+     `httpserver.html#107 <httpserver.html#107>`_
+
+   `runeAt`:idx:
+     `unicode.html#109 <unicode.html#109>`_
+
+   `runeLen`:idx:
+     `unicode.html#106 <unicode.html#106>`_
+
+   `runeLenAt`:idx:
+     `unicode.html#107 <unicode.html#107>`_
+
+   `runes`:idx:
+     `unicode.html#119 <unicode.html#119>`_
+
+   `running`:idx:
+     `osproc.html#111 <osproc.html#111>`_
+
+   `safe`:idx:
+     `manual.html#112 <manual.html#112>`_
+
+   `safecall`:idx:
+     `manual.html#173 <manual.html#173>`_
+
+   `sameFile`:idx:
+     `os.html#140 <os.html#140>`_
+
+   `sameFileContent`:idx:
+     `os.html#141 <os.html#141>`_
+
+   `samp`:idx:
+     `xmlgen.html#161 <xmlgen.html#161>`_
+
+   `scope`:idx:
+     * `manual.html#106 <manual.html#106>`_
+     * `manual.html#229 <manual.html#229>`_
+
+   `scramble`:idx:
+     `mysql.html#278 <mysql.html#278>`_
+
+   `scramble_323`:idx:
+     `mysql.html#272 <mysql.html#272>`_
+
+   `SCRAMBLED_PASSWORD_CHAR_LENGTH`:idx:
+     `mysql.html#122 <mysql.html#122>`_
+
+   `SCRAMBLED_PASSWORD_CHAR_LENGTH_323`:idx:
+     `mysql.html#123 <mysql.html#123>`_
+
+   `SCRAMBLE_LENGTH`:idx:
+     `mysql.html#120 <mysql.html#120>`_
+
+   `SCRAMBLE_LENGTH_323`:idx:
+     `mysql.html#121 <mysql.html#121>`_
+
+   `script`:idx:
+     `xmlgen.html#162 <xmlgen.html#162>`_
+
+   `ScriptExt`:idx:
+     `os.html#108 <os.html#108>`_
+
+   `select`:idx:
+     * `sockets.html#128 <sockets.html#128>`_
+     * `sockets.html#129 <sockets.html#129>`_
+     * `sockets.html#130 <sockets.html#130>`_
+     * `xmlgen.html#163 <xmlgen.html#163>`_
+
+   `send`:idx:
+     * `sockets.html#135 <sockets.html#135>`_
+     * `sockets.html#136 <sockets.html#136>`_
+
+   `separate compilation`:idx:
+     * `manual.html#226 <manual.html#226>`_
+     * `tut1.html#127 <tut1.html#127>`_
+
+   `seq`:idx:
+     `system.html#131 <system.html#131>`_
+
+   `sequence`:idx:
+     `pegs.html#110 <pegs.html#110>`_
+
+   `Sequences`:idx:
+     * `manual.html#160 <manual.html#160>`_
+     * `tut1.html#118 <tut1.html#118>`_
+
+   `SERVER_MORE_RESULTS_EXISTS`:idx:
+     `mysql.html#178 <mysql.html#178>`_
+
+   `SERVER_QUERY_NO_GOOD_INDEX_USED`:idx:
+     `mysql.html#179 <mysql.html#179>`_
+
+   `SERVER_QUERY_NO_INDEX_USED`:idx:
+     `mysql.html#180 <mysql.html#180>`_
+
+   `SERVER_STATUS_AUTOCOMMIT`:idx:
+     `mysql.html#176 <mysql.html#176>`_
+
+   `SERVER_STATUS_CURSOR_EXISTS`:idx:
+     `mysql.html#181 <mysql.html#181>`_
+
+   `SERVER_STATUS_DB_DROPPED`:idx:
+     `mysql.html#183 <mysql.html#183>`_
+
+   `SERVER_STATUS_IN_TRANS`:idx:
+     `mysql.html#175 <mysql.html#175>`_
+
+   `SERVER_STATUS_LAST_ROW_SENT`:idx:
+     `mysql.html#182 <mysql.html#182>`_
+
+   `SERVER_STATUS_MORE_RESULTS`:idx:
+     `mysql.html#177 <mysql.html#177>`_
+
+   `SERVER_STATUS_NO_BACKSLASH_ESCAPES`:idx:
+     `mysql.html#184 <mysql.html#184>`_
+
+   `SERVER_VERSION_LENGTH`:idx:
+     `mysql.html#113 <mysql.html#113>`_
+
+   `set`:idx:
+     `system.html#132 <system.html#132>`_
+
+   `set type`:idx:
+     * `manual.html#164 <manual.html#164>`_
+     * `tut1.html#116 <tut1.html#116>`_
+
+   `setAttribute`:idx:
+     `xmldom.html#202 <xmldom.html#202>`_
+
+   `setAttributeNode`:idx:
+     `xmldom.html#200 <xmldom.html#200>`_
+
+   `setAttributeNodeNS`:idx:
+     `xmldom.html#201 <xmldom.html#201>`_
+
+   `setAttributeNS`:idx:
+     `xmldom.html#203 <xmldom.html#203>`_
+
+   `setBackgroundColor`:idx:
+     `terminal.html#116 <terminal.html#116>`_
+
+   `setCookie`:idx:
+     `cgi.html#145 <cgi.html#145>`_
+
+   `setCurrentDir`:idx:
+     `os.html#121 <os.html#121>`_
+
+   `setCursorPos`:idx:
+     `terminal.html#101 <terminal.html#101>`_
+
+   `setCursorXPos`:idx:
+     `terminal.html#102 <terminal.html#102>`_
+
+   `setCursorYPos`:idx:
+     `terminal.html#103 <terminal.html#103>`_
+
+   `setFilePermissions`:idx:
+     `os.html#163 <os.html#163>`_
+
+   `setFilePos`:idx:
+     `system.html#534 <system.html#534>`_
+
+   `SET_FLAG`:idx:
+     `mysql.html#135 <mysql.html#135>`_
+
+   `setForegroundColor`:idx:
+     `terminal.html#115 <terminal.html#115>`_
+
+   `setLen`:idx:
+     * `system.html#364 <system.html#364>`_
+     * `system.html#365 <system.html#365>`_
+
+   `setNamedItem`:idx:
+     * `xmldom.html#181 <xmldom.html#181>`_
+     * `xmldom.html#182 <xmldom.html#182>`_
+
+   `setNamedItemNS`:idx:
+     * `xmldom.html#183 <xmldom.html#183>`_
+     * `xmldom.html#184 <xmldom.html#184>`_
+
+   `setSockOptInt`:idx:
+     `sockets.html#126 <sockets.html#126>`_
+
+   `setTestData`:idx:
+     `cgi.html#143 <cgi.html#143>`_
+
+   `shl`:idx:
+     * `system.html#238 <system.html#238>`_
+     * `system.html#239 <system.html#239>`_
+     * `system.html#240 <system.html#240>`_
+     * `system.html#241 <system.html#241>`_
+     * `system.html#242 <system.html#242>`_
+
+   `shr`:idx:
+     * `system.html#233 <system.html#233>`_
+     * `system.html#234 <system.html#234>`_
+     * `system.html#235 <system.html#235>`_
+     * `system.html#236 <system.html#236>`_
+     * `system.html#237 <system.html#237>`_
+
+   `simple assertions`:idx:
+     * `regexprs.html#103 <regexprs.html#103>`_
+     * `re.html#103 <re.html#103>`_
+
+   `simple statements`:idx:
+     `manual.html#183 <manual.html#183>`_
+
+   `SingleTags`:idx:
+     `htmlparser.html#104 <htmlparser.html#104>`_
+
+   `sinh`:idx:
+     `math.html#129 <math.html#129>`_
+
+   `sizeof`:idx:
+     `system.html#168 <system.html#168>`_
+
+   `skip`:idx:
+     * `sockets.html#134 <sockets.html#134>`_
+     * `parseutils.html#106 <parseutils.html#106>`_
+
+   `skipIgnoreCase`:idx:
+     `parseutils.html#107 <parseutils.html#107>`_
+
+   `skipWhitespace`:idx:
+     `parseutils.html#105 <parseutils.html#105>`_
+
+   `sleep`:idx:
+     `os.html#170 <os.html#170>`_
+
+   `small`:idx:
+     `xmlgen.html#164 <xmlgen.html#164>`_
+
+   `sockaddr`:idx:
+     `mysql.html#251 <mysql.html#251>`_
+
+   `socket`:idx:
+     `sockets.html#116 <sockets.html#116>`_
+
+   `span`:idx:
+     `xmlgen.html#165 <xmlgen.html#165>`_
+
+   `specified`:idx:
+     `xmldom.html#186 <xmldom.html#186>`_
+
+   `split`:idx:
+     * `strutils.html#126 <strutils.html#126>`_
+     * `strutils.html#127 <strutils.html#127>`_
+     * `strutils.html#133 <strutils.html#133>`_
+     * `strutils.html#134 <strutils.html#134>`_
+     * `re.html#123 <re.html#123>`_
+     * `re.html#124 <re.html#124>`_
+     * `pegs.html#151 <pegs.html#151>`_
+     * `pegs.html#152 <pegs.html#152>`_
+
+   `splitData`:idx:
+     `xmldom.html#204 <xmldom.html#204>`_
+
+   `splitFile`:idx:
+     `os.html#129 <os.html#129>`_
+
+   `SplitFilename`:idx:
+     `os.html#133 <os.html#133>`_
+
+   `splitLines`:idx:
+     * `strutils.html#128 <strutils.html#128>`_
+     * `strutils.html#132 <strutils.html#132>`_
+
+   `splitLinesSeq`:idx:
+     `strutils.html#129 <strutils.html#129>`_
+
+   `SplitPath`:idx:
+     * `os.html#125 <os.html#125>`_
+     * `os.html#126 <os.html#126>`_
+
+   `splitSeq`:idx:
+     * `strutils.html#130 <strutils.html#130>`_
+     * `strutils.html#131 <strutils.html#131>`_
+
+   `sql`:idx:
+     * `db_postgres.html#106 <db_postgres.html#106>`_
+     * `db_sqlite.html#106 <db_sqlite.html#106>`_
+
+   `sqlite3_aggregate_context`:idx:
+     `sqlite3.html#261 <sqlite3.html#261>`_
+
+   `sqlite3_aggregate_count`:idx:
+     `sqlite3.html#249 <sqlite3.html#249>`_
+
+   `sqlite3_bind_blob`:idx:
+     * `sqlite3.html#216 <sqlite3.html#216>`_
+     * `sqlite3.html#223 <sqlite3.html#223>`_
+
+   `sqlite3_bind_double`:idx:
+     `sqlite3.html#217 <sqlite3.html#217>`_
+
+   `sqlite3_bind_int`:idx:
+     `sqlite3.html#218 <sqlite3.html#218>`_
+
+   `sqlite3_bind_int64`:idx:
+     `sqlite3.html#219 <sqlite3.html#219>`_
+
+   `sqlite3_bind_null`:idx:
+     `sqlite3.html#220 <sqlite3.html#220>`_
+
+   `sqlite3_bind_parameter_count`:idx:
+     `sqlite3.html#226 <sqlite3.html#226>`_
+
+   `sqlite3_bind_parameter_index`:idx:
+     `sqlite3.html#228 <sqlite3.html#228>`_
+
+   `sqlite3_bind_parameter_name`:idx:
+     `sqlite3.html#227 <sqlite3.html#227>`_
+
+   `sqlite3_bind_text`:idx:
+     * `sqlite3.html#221 <sqlite3.html#221>`_
+     * `sqlite3.html#224 <sqlite3.html#224>`_
+
+   `sqlite3_bind_text16`:idx:
+     * `sqlite3.html#222 <sqlite3.html#222>`_
+     * `sqlite3.html#225 <sqlite3.html#225>`_
+
+   `sqlite3_busy_handler`:idx:
+     `sqlite3.html#198 <sqlite3.html#198>`_
+
+   `sqlite3_busy_timeout`:idx:
+     `sqlite3.html#199 <sqlite3.html#199>`_
+
+   `sqlite3_changes`:idx:
+     `sqlite3.html#193 <sqlite3.html#193>`_
+
+   `sqlite3_close`:idx:
+     `sqlite3.html#190 <sqlite3.html#190>`_
+
+   `sqlite3_collation_needed`:idx:
+     `sqlite3.html#279 <sqlite3.html#279>`_
+
+   `sqlite3_collation_needed16`:idx:
+     `sqlite3.html#280 <sqlite3.html#280>`_
+
+   `sqlite3_column_blob`:idx:
+     `sqlite3.html#236 <sqlite3.html#236>`_
+
+   `sqlite3_column_bytes`:idx:
+     `sqlite3.html#237 <sqlite3.html#237>`_
+
+   `sqlite3_column_bytes16`:idx:
+     `sqlite3.html#238 <sqlite3.html#238>`_
+
+   `sqlite3_column_count`:idx:
+     `sqlite3.html#229 <sqlite3.html#229>`_
+
+   `sqlite3_column_decltype`:idx:
+     `sqlite3.html#232 <sqlite3.html#232>`_
+
+   `sqlite3_column_decltype16`:idx:
+     `sqlite3.html#233 <sqlite3.html#233>`_
+
+   `sqlite3_column_double`:idx:
+     `sqlite3.html#239 <sqlite3.html#239>`_
+
+   `sqlite3_column_int`:idx:
+     `sqlite3.html#240 <sqlite3.html#240>`_
+
+   `sqlite3_column_int64`:idx:
+     `sqlite3.html#241 <sqlite3.html#241>`_
+
+   `sqlite3_column_name`:idx:
+     `sqlite3.html#230 <sqlite3.html#230>`_
+
+   `sqlite3_column_name16`:idx:
+     `sqlite3.html#231 <sqlite3.html#231>`_
+
+   `sqlite3_column_text`:idx:
+     `sqlite3.html#242 <sqlite3.html#242>`_
+
+   `sqlite3_column_text16`:idx:
+     `sqlite3.html#243 <sqlite3.html#243>`_
+
+   `sqlite3_column_type`:idx:
+     `sqlite3.html#244 <sqlite3.html#244>`_
+
+   `sqlite3_commit_hook`:idx:
+     `sqlite3.html#208 <sqlite3.html#208>`_
+
+   `sqlite3_complete`:idx:
+     `sqlite3.html#196 <sqlite3.html#196>`_
+
+   `sqlite3_complete16`:idx:
+     `sqlite3.html#197 <sqlite3.html#197>`_
+
+   `sqlite3_create_collation`:idx:
+     `sqlite3.html#277 <sqlite3.html#277>`_
+
+   `sqlite3_create_collation16`:idx:
+     `sqlite3.html#278 <sqlite3.html#278>`_
+
+   `sqlite3_create_function`:idx:
+     `sqlite3.html#247 <sqlite3.html#247>`_
+
+   `sqlite3_create_function16`:idx:
+     `sqlite3.html#248 <sqlite3.html#248>`_
+
+   `sqlite3_data_count`:idx:
+     `sqlite3.html#235 <sqlite3.html#235>`_
+
+   `sqlite3_errcode`:idx:
+     `sqlite3.html#211 <sqlite3.html#211>`_
+
+   `sqlite3_errmsg`:idx:
+     `sqlite3.html#212 <sqlite3.html#212>`_
+
+   `sqlite3_errmsg16`:idx:
+     `sqlite3.html#213 <sqlite3.html#213>`_
+
+   `sqlite3_exec`:idx:
+     `sqlite3.html#191 <sqlite3.html#191>`_
+
+   `sqlite3_finalize`:idx:
+     `sqlite3.html#245 <sqlite3.html#245>`_
+
+   `sqlite3_free`:idx:
+     `sqlite3.html#203 <sqlite3.html#203>`_
+
+   `sqlite3_free_table`:idx:
+     `sqlite3.html#201 <sqlite3.html#201>`_
+
+   `sqlite3_get_auxdata`:idx:
+     `sqlite3.html#263 <sqlite3.html#263>`_
+
+   `sqlite3_get_table`:idx:
+     `sqlite3.html#200 <sqlite3.html#200>`_
+
+   `sqlite3_interrupt`:idx:
+     `sqlite3.html#195 <sqlite3.html#195>`_
+
+   `sqlite3_last_insert_rowid`:idx:
+     `sqlite3.html#192 <sqlite3.html#192>`_
+
+   `sqlite3_libversion`:idx:
+     `sqlite3.html#281 <sqlite3.html#281>`_
+
+   `sqlite3_libversion_number`:idx:
+     `sqlite3.html#283 <sqlite3.html#283>`_
+
+   `sqlite3_mprintf`:idx:
+     `sqlite3.html#202 <sqlite3.html#202>`_
+
+   `sqlite3_open`:idx:
+     `sqlite3.html#209 <sqlite3.html#209>`_
+
+   `sqlite3_open16`:idx:
+     `sqlite3.html#210 <sqlite3.html#210>`_
+
+   `sqlite3_prepare`:idx:
+     `sqlite3.html#214 <sqlite3.html#214>`_
+
+   `sqlite3_prepare16`:idx:
+     `sqlite3.html#215 <sqlite3.html#215>`_
+
+   `sqlite3_progress_handler`:idx:
+     `sqlite3.html#207 <sqlite3.html#207>`_
+
+   `sqlite3_reset`:idx:
+     `sqlite3.html#246 <sqlite3.html#246>`_
+
+   `sqlite3_result_blob`:idx:
+     `sqlite3.html#265 <sqlite3.html#265>`_
+
+   `sqlite3_result_double`:idx:
+     `sqlite3.html#266 <sqlite3.html#266>`_
+
+   `sqlite3_result_error`:idx:
+     `sqlite3.html#267 <sqlite3.html#267>`_
+
+   `sqlite3_result_error16`:idx:
+     `sqlite3.html#268 <sqlite3.html#268>`_
+
+   `sqlite3_result_int`:idx:
+     `sqlite3.html#269 <sqlite3.html#269>`_
+
+   `sqlite3_result_int64`:idx:
+     `sqlite3.html#270 <sqlite3.html#270>`_
+
+   `sqlite3_result_null`:idx:
+     `sqlite3.html#271 <sqlite3.html#271>`_
+
+   `sqlite3_result_text`:idx:
+     `sqlite3.html#272 <sqlite3.html#272>`_
+
+   `sqlite3_result_text16`:idx:
+     `sqlite3.html#273 <sqlite3.html#273>`_
+
+   `sqlite3_result_text16be`:idx:
+     `sqlite3.html#275 <sqlite3.html#275>`_
+
+   `sqlite3_result_text16le`:idx:
+     `sqlite3.html#274 <sqlite3.html#274>`_
+
+   `sqlite3_result_value`:idx:
+     `sqlite3.html#276 <sqlite3.html#276>`_
+
+   `sqlite3_set_authorizer`:idx:
+     `sqlite3.html#205 <sqlite3.html#205>`_
+
+   `sqlite3_set_auxdata`:idx:
+     `sqlite3.html#264 <sqlite3.html#264>`_
+
+   `sqlite3_snprintf`:idx:
+     `sqlite3.html#204 <sqlite3.html#204>`_
+
+   `sqlite3_step`:idx:
+     `sqlite3.html#234 <sqlite3.html#234>`_
+
+   `SQLITE3_TEXT`:idx:
+     `sqlite3.html#106 <sqlite3.html#106>`_
+
+   `sqlite3_total_changes`:idx:
+     `sqlite3.html#194 <sqlite3.html#194>`_
+
+   `sqlite3_trace`:idx:
+     `sqlite3.html#206 <sqlite3.html#206>`_
+
+   `sqlite3_user_data`:idx:
+     `sqlite3.html#262 <sqlite3.html#262>`_
+
+   `sqlite3_value_blob`:idx:
+     `sqlite3.html#250 <sqlite3.html#250>`_
+
+   `sqlite3_value_bytes`:idx:
+     `sqlite3.html#251 <sqlite3.html#251>`_
+
+   `sqlite3_value_bytes16`:idx:
+     `sqlite3.html#252 <sqlite3.html#252>`_
+
+   `sqlite3_value_double`:idx:
+     `sqlite3.html#253 <sqlite3.html#253>`_
+
+   `sqlite3_value_int`:idx:
+     `sqlite3.html#254 <sqlite3.html#254>`_
+
+   `sqlite3_value_int64`:idx:
+     `sqlite3.html#255 <sqlite3.html#255>`_
+
+   `sqlite3_value_text`:idx:
+     `sqlite3.html#256 <sqlite3.html#256>`_
+
+   `sqlite3_value_text16`:idx:
+     `sqlite3.html#257 <sqlite3.html#257>`_
+
+   `sqlite3_value_text16be`:idx:
+     `sqlite3.html#259 <sqlite3.html#259>`_
+
+   `sqlite3_value_text16le`:idx:
+     `sqlite3.html#258 <sqlite3.html#258>`_
+
+   `sqlite3_value_type`:idx:
+     `sqlite3.html#260 <sqlite3.html#260>`_
+
+   `sqlite3_version`:idx:
+     `sqlite3.html#282 <sqlite3.html#282>`_
+
+   `SQLITE_ABORT`:idx:
+     `sqlite3.html#116 <sqlite3.html#116>`_
+
+   `SQLITE_ALTER_TABLE`:idx:
+     `sqlite3.html#167 <sqlite3.html#167>`_
+
+   `SQLITE_ANY`:idx:
+     `sqlite3.html#111 <sqlite3.html#111>`_
+
+   `SQLITE_ATTACH`:idx:
+     `sqlite3.html#165 <sqlite3.html#165>`_
+
+   `SQLITE_AUTH`:idx:
+     `sqlite3.html#135 <sqlite3.html#135>`_
+
+   `SQLITE_BLOB`:idx:
+     `sqlite3.html#103 <sqlite3.html#103>`_
+
+   `SQLITE_BUSY`:idx:
+     `sqlite3.html#117 <sqlite3.html#117>`_
+
+   `SQLITE_CANTOPEN`:idx:
+     `sqlite3.html#126 <sqlite3.html#126>`_
+
+   `SQLITE_CONSTRAINT`:idx:
+     `sqlite3.html#131 <sqlite3.html#131>`_
+
+   `SQLITE_COPY`:idx:
+     `sqlite3.html#141 <sqlite3.html#141>`_
+
+   `SQLITE_CORRUPT`:idx:
+     `sqlite3.html#123 <sqlite3.html#123>`_
+
+   `SQLITE_CREATE_INDEX`:idx:
+     `sqlite3.html#142 <sqlite3.html#142>`_
+
+   `SQLITE_CREATE_TABLE`:idx:
+     `sqlite3.html#143 <sqlite3.html#143>`_
+
+   `SQLITE_CREATE_TEMP_INDEX`:idx:
+     `sqlite3.html#144 <sqlite3.html#144>`_
+
+   `SQLITE_CREATE_TEMP_TABLE`:idx:
+     `sqlite3.html#145 <sqlite3.html#145>`_
+
+   `SQLITE_CREATE_TEMP_TRIGGER`:idx:
+     `sqlite3.html#146 <sqlite3.html#146>`_
+
+   `SQLITE_CREATE_TEMP_VIEW`:idx:
+     `sqlite3.html#147 <sqlite3.html#147>`_
+
+   `SQLITE_CREATE_TRIGGER`:idx:
+     `sqlite3.html#148 <sqlite3.html#148>`_
+
+   `SQLITE_CREATE_VIEW`:idx:
+     `sqlite3.html#149 <sqlite3.html#149>`_
+
+   `SQLITE_DELETE`:idx:
+     `sqlite3.html#150 <sqlite3.html#150>`_
+
+   `SQLITE_DENY`:idx:
+     `sqlite3.html#169 <sqlite3.html#169>`_
+
+   `SQLITE_DETACH`:idx:
+     `sqlite3.html#166 <sqlite3.html#166>`_
+
+   `SQLITE_DONE`:idx:
+     `sqlite3.html#140 <sqlite3.html#140>`_
+
+   `SQLITE_DROP_INDEX`:idx:
+     `sqlite3.html#151 <sqlite3.html#151>`_
+
+   `SQLITE_DROP_TABLE`:idx:
+     `sqlite3.html#152 <sqlite3.html#152>`_
+
+   `SQLITE_DROP_TEMP_INDEX`:idx:
+     `sqlite3.html#153 <sqlite3.html#153>`_
+
+   `SQLITE_DROP_TEMP_TABLE`:idx:
+     `sqlite3.html#154 <sqlite3.html#154>`_
+
+   `SQLITE_DROP_TEMP_TRIGGER`:idx:
+     `sqlite3.html#155 <sqlite3.html#155>`_
+
+   `SQLITE_DROP_TEMP_VIEW`:idx:
+     `sqlite3.html#156 <sqlite3.html#156>`_
+
+   `SQLITE_DROP_TRIGGER`:idx:
+     `sqlite3.html#157 <sqlite3.html#157>`_
+
+   `SQLITE_DROP_VIEW`:idx:
+     `sqlite3.html#158 <sqlite3.html#158>`_
+
+   `SQLITE_EMPTY`:idx:
+     `sqlite3.html#128 <sqlite3.html#128>`_
+
+   `SQLITE_ERROR`:idx:
+     `sqlite3.html#113 <sqlite3.html#113>`_
+
+   `SQLITE_FLOAT`:idx:
+     `sqlite3.html#102 <sqlite3.html#102>`_
+
+   `SQLITE_FORMAT`:idx:
+     `sqlite3.html#136 <sqlite3.html#136>`_
+
+   `SQLITE_FULL`:idx:
+     `sqlite3.html#125 <sqlite3.html#125>`_
+
+   `SQLITE_IGNORE`:idx:
+     `sqlite3.html#170 <sqlite3.html#170>`_
+
+   `SQLITE_INSERT`:idx:
+     `sqlite3.html#159 <sqlite3.html#159>`_
+
+   `sqlite_int64`:idx:
+     `sqlite3.html#173 <sqlite3.html#173>`_
+
+   `SQLITE_INTEGER`:idx:
+     `sqlite3.html#101 <sqlite3.html#101>`_
+
+   `SQLITE_INTERNAL`:idx:
+     `sqlite3.html#114 <sqlite3.html#114>`_
+
+   `SQLITE_INTERRUPT`:idx:
+     `sqlite3.html#121 <sqlite3.html#121>`_
+
+   `SQLITE_IOERR`:idx:
+     `sqlite3.html#122 <sqlite3.html#122>`_
+
+   `SQLITE_LOCKED`:idx:
+     `sqlite3.html#118 <sqlite3.html#118>`_
+
+   `SQLITE_MISMATCH`:idx:
+     `sqlite3.html#132 <sqlite3.html#132>`_
+
+   `SQLITE_MISUSE`:idx:
+     `sqlite3.html#133 <sqlite3.html#133>`_
+
+   `SQLITE_NOLFS`:idx:
+     `sqlite3.html#134 <sqlite3.html#134>`_
+
+   `SQLITE_NOMEM`:idx:
+     `sqlite3.html#119 <sqlite3.html#119>`_
+
+   `SQLITE_NOTADB`:idx:
+     `sqlite3.html#138 <sqlite3.html#138>`_
+
+   `SQLITE_NOTFOUND`:idx:
+     `sqlite3.html#124 <sqlite3.html#124>`_
+
+   `SQLITE_NULL`:idx:
+     `sqlite3.html#104 <sqlite3.html#104>`_
+
+   `SQLITE_OK`:idx:
+     `sqlite3.html#112 <sqlite3.html#112>`_
+
+   `SQLITE_PERM`:idx:
+     `sqlite3.html#115 <sqlite3.html#115>`_
+
+   `SQLITE_PRAGMA`:idx:
+     `sqlite3.html#160 <sqlite3.html#160>`_
+
+   `SQLITE_PROTOCOL`:idx:
+     `sqlite3.html#127 <sqlite3.html#127>`_
+
+   `SQLITE_RANGE`:idx:
+     `sqlite3.html#137 <sqlite3.html#137>`_
+
+   `SQLITE_READ`:idx:
+     `sqlite3.html#161 <sqlite3.html#161>`_
+
+   `SQLITE_READONLY`:idx:
+     `sqlite3.html#120 <sqlite3.html#120>`_
+
+   `SQLITE_REINDEX`:idx:
+     `sqlite3.html#168 <sqlite3.html#168>`_
+
+   `SQLITE_ROW`:idx:
+     `sqlite3.html#139 <sqlite3.html#139>`_
+
+   `SQLITE_SCHEMA`:idx:
+     `sqlite3.html#129 <sqlite3.html#129>`_
+
+   `SQLITE_SELECT`:idx:
+     `sqlite3.html#162 <sqlite3.html#162>`_
+
+   `SQLITE_STATIC`:idx:
+     `sqlite3.html#171 <sqlite3.html#171>`_
+
+   `SQLITE_TEXT`:idx:
+     `sqlite3.html#105 <sqlite3.html#105>`_
+
+   `SQLITE_TOOBIG`:idx:
+     `sqlite3.html#130 <sqlite3.html#130>`_
+
+   `SQLITE_TRANSACTION`:idx:
+     `sqlite3.html#163 <sqlite3.html#163>`_
+
+   `SQLITE_TRANSIENT`:idx:
+     `sqlite3.html#172 <sqlite3.html#172>`_
+
+   `SQLITE_UPDATE`:idx:
+     `sqlite3.html#164 <sqlite3.html#164>`_
+
+   `SQLITE_UTF16`:idx:
+     `sqlite3.html#110 <sqlite3.html#110>`_
+
+   `SQLITE_UTF16BE`:idx:
+     `sqlite3.html#109 <sqlite3.html#109>`_
+
+   `SQLITE_UTF16LE`:idx:
+     `sqlite3.html#108 <sqlite3.html#108>`_
+
+   `SQLITE_UTF8`:idx:
+     `sqlite3.html#107 <sqlite3.html#107>`_
+
+   `SQLSTATE_LENGTH`:idx:
+     `mysql.html#114 <mysql.html#114>`_
+
+   `sqrt`:idx:
+     * `math.html#115 <math.html#115>`_
+     * `complex.html#109 <complex.html#109>`_
+
+   `stackTrace`:idx:
+     `nimrodc.html#104 <nimrodc.html#104>`_
+
+   `standardDeviation`:idx:
+     `math.html#137 <math.html#137>`_
+
+   `startProcess`:idx:
+     `osproc.html#107 <osproc.html#107>`_
+
+   `startsWith`:idx:
+     * `strutils.html#148 <strutils.html#148>`_
+     * `re.html#118 <re.html#118>`_
+     * `pegs.html#146 <pegs.html#146>`_
+
+   `statement macros`:idx:
+     `tut2.html#112 <tut2.html#112>`_
+
+   `Statements`:idx:
+     `manual.html#182 <manual.html#182>`_
+
+   `static error`:idx:
+     `manual.html#109 <manual.html#109>`_
+
+   `static type`:idx:
+     `manual.html#103 <manual.html#103>`_
+
+   `stdcall`:idx:
+     `manual.html#171 <manual.html#171>`_
+
+   `stderr`:idx:
+     `system.html#506 <system.html#506>`_
+
+   `stdin`:idx:
+     `system.html#504 <system.html#504>`_
+
+   `stdout`:idx:
+     `system.html#505 <system.html#505>`_
+
+   `st_dynamic_array`:idx:
+     `mysql.html#339 <mysql.html#339>`_
+
+   `st_mem_root`:idx:
+     `mysql.html#324 <mysql.html#324>`_
+
+   `stmt`:idx:
+     `system.html#116 <system.html#116>`_
+
+   `st_mysql`:idx:
+     `mysql.html#356 <mysql.html#356>`_
+
+   `st_mysql_bind`:idx:
+     `mysql.html#378 <mysql.html#378>`_
+
+   `st_mysql_data`:idx:
+     `mysql.html#328 <mysql.html#328>`_
+
+   `st_mysql_field`:idx:
+     `mysql.html#295 <mysql.html#295>`_
+
+   `st_mysql_manager`:idx:
+     `mysql.html#369 <mysql.html#369>`_
+
+   `st_mysql_methods`:idx:
+     `mysql.html#365 <mysql.html#365>`_
+
+   `st_mysql_options`:idx:
+     `mysql.html#343 <mysql.html#343>`_
+
+   `st_mysql_parameters`:idx:
+     `mysql.html#373 <mysql.html#373>`_
+
+   `st_mysql_res`:idx:
+     `mysql.html#360 <mysql.html#360>`_
+
+   `st_mysql_rows`:idx:
+     `mysql.html#312 <mysql.html#312>`_
+
+   `st_mysql_stmt`:idx:
+     `mysql.html#381 <mysql.html#381>`_
+
+   `st_net`:idx:
+     `mysql.html#198 <mysql.html#198>`_
+
+   `string`:idx:
+     * `manual.html#157 <manual.html#157>`_
+     * `system.html#111 <system.html#111>`_
+
+   `string interpolation`:idx:
+     `strutils.html#108 <strutils.html#108>`_
+
+   `String literals`:idx:
+     `manual.html#119 <manual.html#119>`_
+
+   `strip`:idx:
+     `strutils.html#112 <strutils.html#112>`_
+
+   `strong`:idx:
+     `xmlgen.html#166 <xmlgen.html#166>`_
+
+   `structured type`:idx:
+     `manual.html#158 <manual.html#158>`_
+
+   `strVal`:idx:
+     `macros.html#128 <macros.html#128>`_
+
+   `strVal=`:idx:
+     `macros.html#134 <macros.html#134>`_
+
+   `st_udf_args`:idx:
+     `mysql.html#258 <mysql.html#258>`_
+
+   `st_udf_init`:idx:
+     `mysql.html#262 <mysql.html#262>`_
+
+   `st_used_mem`:idx:
+     `mysql.html#320 <mysql.html#320>`_
+
+   `style`:idx:
+     `xmlgen.html#167 <xmlgen.html#167>`_
+
+   `style-insensitive`:idx:
+     `manual.html#118 <manual.html#118>`_
+
+   `sub`:idx:
+     `xmlgen.html#168 <xmlgen.html#168>`_
+
+   `subrange`:idx:
+     * `manual.html#156 <manual.html#156>`_
+     * `tut1.html#115 <tut1.html#115>`_
+
+   `substitution`:idx:
+     `strutils.html#107 <strutils.html#107>`_
+
+   `succ`:idx:
+     `system.html#169 <system.html#169>`_
+
+   `sum`:idx:
+     `math.html#110 <math.html#110>`_
+
+   `sup`:idx:
+     `xmlgen.html#169 <xmlgen.html#169>`_
+
+   `suspend`:idx:
+     `osproc.html#108 <osproc.html#108>`_
+
+   `swap`:idx:
+     `system.html#426 <system.html#426>`_
+
+   `symAddr`:idx:
+     `dynlib.html#104 <dynlib.html#104>`_
+
+   `symbol`:idx:
+     `macros.html#125 <macros.html#125>`_
+
+   `symbol=`:idx:
+     `macros.html#131 <macros.html#131>`_
+
+   `syscall`:idx:
+     `manual.html#178 <manual.html#178>`_
+
+   `system`:idx:
+     `manual.html#230 <manual.html#230>`_
+
+   `table`:idx:
+     `xmlgen.html#170 <xmlgen.html#170>`_
+
+   `tabulator`:idx:
+     `manual.html#125 <manual.html#125>`_
+
+   `TAddress`:idx:
+     `system.html#380 <system.html#380>`_
+
+   `tag`:idx:
+     `xmltree.html#110 <xmltree.html#110>`_
+
+   `tagName`:idx:
+     `xmldom.html#188 <xmldom.html#188>`_
+
+   `tan`:idx:
+     `math.html#130 <math.html#130>`_
+
+   `tanh`:idx:
+     `math.html#131 <math.html#131>`_
+
+   `target`:idx:
+     `xmldom.html#205 <xmldom.html#205>`_
+
+   `TBackgroundColor`:idx:
+     `terminal.html#114 <terminal.html#114>`_
+
+   `TBaseLexer`:idx:
+     `lexbase.html#103 <lexbase.html#103>`_
+
+   `Tbind_destructor_func`:idx:
+     `sqlite3.html#183 <sqlite3.html#183>`_
+
+   `tbody`:idx:
+     `xmlgen.html#171 <xmlgen.html#171>`_
+
+   `TCfgEvent`:idx:
+     `parsecfg.html#102 <parsecfg.html#102>`_
+
+   `TCfgEventKind`:idx:
+     `parsecfg.html#101 <parsecfg.html#101>`_
+
+   `TCfgParser`:idx:
+     `parsecfg.html#103 <parsecfg.html#103>`_
+
+   `TCharSet`:idx:
+     `strutils.html#101 <strutils.html#101>`_
+
+   `TCmdLineKind`:idx:
+     `parseopt.html#101 <parseopt.html#101>`_
+
+   `TColor`:idx:
+     `colors.html#101 <colors.html#101>`_
+
+   `TComplex`:idx:
+     `complex.html#101 <complex.html#101>`_
+
+   `Tcreate_function_final_func`:idx:
+     `sqlite3.html#186 <sqlite3.html#186>`_
+
+   `Tcreate_function_func_func`:idx:
+     `sqlite3.html#185 <sqlite3.html#185>`_
+
+   `Tcreate_function_step_func`:idx:
+     `sqlite3.html#184 <sqlite3.html#184>`_
+
+   `TCsvParser`:idx:
+     `parsecsv.html#104 <parsecsv.html#104>`_
+
+   `TCsvRow`:idx:
+     `parsecsv.html#103 <parsecsv.html#103>`_
+
+   `TCurl`:idx:
+     `libcurl.html#140 <libcurl.html#140>`_
+
+   `Tcurl_calloc_callback`:idx:
+     `libcurl.html#153 <libcurl.html#153>`_
+
+   `Tcurl_closepolicy`:idx:
+     `libcurl.html#174 <libcurl.html#174>`_
+
+   `TCURLcode`:idx:
+     `libcurl.html#156 <libcurl.html#156>`_
+
+   `Tcurl_conv_callback`:idx:
+     `libcurl.html#157 <libcurl.html#157>`_
+
+   `Tcurl_debug_callback`:idx:
+     `libcurl.html#155 <libcurl.html#155>`_
+
+   `TCURLFORMcode`:idx:
+     `libcurl.html#170 <libcurl.html#170>`_
+
+   `Tcurl_formget_callback`:idx:
+     `libcurl.html#171 <libcurl.html#171>`_
+
+   `TCURLformoption`:idx:
+     `libcurl.html#168 <libcurl.html#168>`_
+
+   `Tcurl_forms`:idx:
+     `libcurl.html#169 <libcurl.html#169>`_
+
+   `Tcurl_free_callback`:idx:
+     `libcurl.html#150 <libcurl.html#150>`_
+
+   `Tcurl_ftpauth`:idx:
+     `libcurl.html#161 <libcurl.html#161>`_
+
+   `Tcurl_ftpmethod`:idx:
+     `libcurl.html#162 <libcurl.html#162>`_
+
+   `Tcurl_ftpssl`:idx:
+     `libcurl.html#160 <libcurl.html#160>`_
+
+   `Tcurl_httppost`:idx:
+     `libcurl.html#141 <libcurl.html#141>`_
+
+   `TCURL_HTTP_VERSION`:idx:
+     `libcurl.html#164 <libcurl.html#164>`_
+
+   `TCURLINFO`:idx:
+     `libcurl.html#173 <libcurl.html#173>`_
+
+   `Tcurl_infotype`:idx:
+     `libcurl.html#154 <libcurl.html#154>`_
+
+   `Tcurliocmd`:idx:
+     `libcurl.html#147 <libcurl.html#147>`_
+
+   `Tcurl_ioctl_callback`:idx:
+     `libcurl.html#148 <libcurl.html#148>`_
+
+   `Tcurlioerr`:idx:
+     `libcurl.html#146 <libcurl.html#146>`_
+
+   `Tcurl_lock_access`:idx:
+     `libcurl.html#176 <libcurl.html#176>`_
+
+   `Tcurl_lock_data`:idx:
+     `libcurl.html#175 <libcurl.html#175>`_
+
+   `Tcurl_lock_function`:idx:
+     `libcurl.html#177 <libcurl.html#177>`_
+
+   `TCURLM`:idx:
+     `libcurl.html#184 <libcurl.html#184>`_
+
+   `Tcurl_malloc_callback`:idx:
+     `libcurl.html#149 <libcurl.html#149>`_
+
+   `TCURLMcode`:idx:
+     `libcurl.html#186 <libcurl.html#186>`_
+
+   `TCURLMoption`:idx:
+     `libcurl.html#190 <libcurl.html#190>`_
+
+   `TCURLMsg`:idx:
+     `libcurl.html#188 <libcurl.html#188>`_
+
+   `TCURLMSGEnum`:idx:
+     `libcurl.html#187 <libcurl.html#187>`_
+
+   `TCURL_NETRC_OPTION`:idx:
+     `libcurl.html#165 <libcurl.html#165>`_
+
+   `TCURLoption`:idx:
+     `libcurl.html#163 <libcurl.html#163>`_
+
+   `Tcurl_passwd_callback`:idx:
+     `libcurl.html#145 <libcurl.html#145>`_
+
+   `Tcurl_progress_callback`:idx:
+     `libcurl.html#142 <libcurl.html#142>`_
+
+   `Tcurl_proxytype`:idx:
+     `libcurl.html#159 <libcurl.html#159>`_
+
+   `Tcurl_read_callback`:idx:
+     `libcurl.html#144 <libcurl.html#144>`_
+
+   `Tcurl_realloc_callback`:idx:
+     `libcurl.html#151 <libcurl.html#151>`_
+
+   `TCURLSH`:idx:
+     `libcurl.html#179 <libcurl.html#179>`_
+
+   `TCURLSHcode`:idx:
+     `libcurl.html#180 <libcurl.html#180>`_
+
+   `TCURLSHoption`:idx:
+     `libcurl.html#181 <libcurl.html#181>`_
+
+   `Tcurl_slist`:idx:
+     `libcurl.html#172 <libcurl.html#172>`_
+
+   `Tcurl_socket`:idx:
+     `libcurl.html#185 <libcurl.html#185>`_
+
+   `Tcurl_socket_callback`:idx:
+     `libcurl.html#189 <libcurl.html#189>`_
+
+   `Tcurl_ssl_ctx_callback`:idx:
+     `libcurl.html#158 <libcurl.html#158>`_
+
+   `TCURL_SSL_VERSION`:idx:
+     `libcurl.html#166 <libcurl.html#166>`_
+
+   `Tcurl_strdup_callback`:idx:
+     `libcurl.html#152 <libcurl.html#152>`_
+
+   `TCURL_TIMECOND`:idx:
+     `libcurl.html#167 <libcurl.html#167>`_
+
+   `Tcurl_unlock_function`:idx:
+     `libcurl.html#178 <libcurl.html#178>`_
+
+   `TCURLversion`:idx:
+     `libcurl.html#182 <libcurl.html#182>`_
+
+   `Tcurl_version_info_data`:idx:
+     `libcurl.html#183 <libcurl.html#183>`_
+
+   `Tcurl_write_callback`:idx:
+     `libcurl.html#143 <libcurl.html#143>`_
+
+   `td`:idx:
+     `xmlgen.html#172 <xmlgen.html#172>`_
+
+   `TDbConn`:idx:
+     * `db_postgres.html#102 <db_postgres.html#102>`_
+     * `db_mysql.html#102 <db_mysql.html#102>`_
+     * `db_sqlite.html#102 <db_sqlite.html#102>`_
+
+   `TDomain`:idx:
+     `sockets.html#103 <sockets.html#103>`_
+
+   `template`:idx:
+     `manual.html#220 <manual.html#220>`_
+
+   `TEndian`:idx:
+     `system.html#393 <system.html#393>`_
+
+   `term`:idx:
+     * `pegs.html#104 <pegs.html#104>`_
+     * `pegs.html#107 <pegs.html#107>`_
+
+   `termIgnoreCase`:idx:
+     `pegs.html#105 <pegs.html#105>`_
+
+   `termIgnoreStyle`:idx:
+     `pegs.html#106 <pegs.html#106>`_
+
+   `terminate`:idx:
+     `osproc.html#110 <osproc.html#110>`_
+
+   `text`:idx:
+     `xmltree.html#109 <xmltree.html#109>`_
+
+   `textarea`:idx:
+     `xmlgen.html#173 <xmlgen.html#173>`_
+
+   `textBounds`:idx:
+     `graphics.html#116 <graphics.html#116>`_
+
+   `TextNode`:idx:
+     `xmldom.html#119 <xmldom.html#119>`_
+
+   `TFile`:idx:
+     `system.html#501 <system.html#501>`_
+
+   `TFileHandle`:idx:
+     `system.html#503 <system.html#503>`_
+
+   `TFileMode`:idx:
+     `system.html#502 <system.html#502>`_
+
+   `TFilePermission`:idx:
+     `os.html#161 <os.html#161>`_
+
+   `TFileStream`:idx:
+     `streams.html#119 <streams.html#119>`_
+
+   `TFloatClass`:idx:
+     `math.html#103 <math.html#103>`_
+
+   `tfoot`:idx:
+     `xmlgen.html#174 <xmlgen.html#174>`_
+
+   `TForegroundColor`:idx:
+     `terminal.html#113 <terminal.html#113>`_
+
+   `TFormatFlag`:idx:
+     `strtabs.html#111 <strtabs.html#111>`_
+
+   `TGC_Strategy`:idx:
+     `system.html#483 <system.html#483>`_
+
+   `th`:idx:
+     `xmlgen.html#175 <xmlgen.html#175>`_
+
+   `THash`:idx:
+     `hashes.html#101 <hashes.html#101>`_
+
+   `thead`:idx:
+     `xmlgen.html#176 <xmlgen.html#176>`_
+
+   `Thostent`:idx:
+     `sockets.html#107 <sockets.html#107>`_
+
+   `THtmlTag`:idx:
+     `htmlparser.html#101 <htmlparser.html#101>`_
+
+   `THttpMethod`:idx:
+     `httpclient.html#104 <httpclient.html#104>`_
+
+   `TimeInfoToTime`:idx:
+     `times.html#108 <times.html#108>`_
+
+   `TIMESTAMP_FLAG`:idx:
+     `mysql.html#134 <mysql.html#134>`_
+
+   `title`:idx:
+     `xmlgen.html#177 <xmlgen.html#177>`_
+
+   `TLibHandle`:idx:
+     `dynlib.html#101 <dynlib.html#101>`_
+
+   `TMonth`:idx:
+     `times.html#101 <times.html#101>`_
+
+   `TNimNodeKinds`:idx:
+     `macros.html#103 <macros.html#103>`_
+
+   `TNimrodIdent`:idx:
+     `macros.html#108 <macros.html#108>`_
+
+   `TNimrodNodeKind`:idx:
+     `macros.html#102 <macros.html#102>`_
+
+   `TNimrodSymKind`:idx:
+     `macros.html#106 <macros.html#106>`_
+
+   `TNimrodTypeKind`:idx:
+     `macros.html#104 <macros.html#104>`_
+
+   `TNimSymKinds`:idx:
+     `macros.html#107 <macros.html#107>`_
+
+   `TNimTypeKinds`:idx:
+     `macros.html#105 <macros.html#105>`_
+
+   `toBiggestFloat`:idx:
+     `system.html#409 <system.html#409>`_
+
+   `toBiggestInt`:idx:
+     `system.html#411 <system.html#411>`_
+
+   `toBin`:idx:
+     `strutils.html#161 <strutils.html#161>`_
+
+   `TObject`:idx:
+     `system.html#136 <system.html#136>`_
+
+   `toFloat`:idx:
+     `system.html#408 <system.html#408>`_
+
+   `toHex`:idx:
+     `strutils.html#140 <strutils.html#140>`_
+
+   `toInt`:idx:
+     `system.html#410 <system.html#410>`_
+
+   `toLower`:idx:
+     * `strutils.html#113 <strutils.html#113>`_
+     * `strutils.html#114 <strutils.html#114>`_
+     * `unicode.html#111 <unicode.html#111>`_
+
+   `toOct`:idx:
+     `strutils.html#160 <strutils.html#160>`_
+
+   `toOctal`:idx:
+     `strutils.html#125 <strutils.html#125>`_
+
+   `TOptParser`:idx:
+     `parseopt.html#102 <parseopt.html#102>`_
+
+   `toString`:idx:
+     `strutils.html#146 <strutils.html#146>`_
+
+   `toStrLit`:idx:
+     `macros.html#146 <macros.html#146>`_
+
+   `toTitle`:idx:
+     `unicode.html#113 <unicode.html#113>`_
+
+   `toU16`:idx:
+     `system.html#191 <system.html#191>`_
+
+   `toU32`:idx:
+     `system.html#192 <system.html#192>`_
+
+   `toU8`:idx:
+     `system.html#190 <system.html#190>`_
+
+   `toUpper`:idx:
+     * `strutils.html#115 <strutils.html#115>`_
+     * `strutils.html#116 <strutils.html#116>`_
+     * `unicode.html#112 <unicode.html#112>`_
+
+   `toUTF8`:idx:
+     `unicode.html#110 <unicode.html#110>`_
+
+   `TPathComponent`:idx:
+     `os.html#153 <os.html#153>`_
+
+   `TPeg`:idx:
+     `pegs.html#103 <pegs.html#103>`_
+
+   `TPoint`:idx:
+     `graphics.html#102 <graphics.html#102>`_
+
+   `TPort`:idx:
+     `sockets.html#102 <sockets.html#102>`_
+
+   `TProcessOption`:idx:
+     `osproc.html#102 <osproc.html#102>`_
+
+   `TProtocol`:idx:
+     `sockets.html#105 <sockets.html#105>`_
+
+   `tr`:idx:
+     `xmlgen.html#178 <xmlgen.html#178>`_
+
+   `traced`:idx:
+     * `manual.html#166 <manual.html#166>`_
+     * `tut1.html#121 <tut1.html#121>`_
+
+   `transformFile`:idx:
+     * `re.html#122 <re.html#122>`_
+     * `pegs.html#150 <pegs.html#150>`_
+
+   `TRect`:idx:
+     `graphics.html#101 <graphics.html#101>`_
+
+   `TRegEx`:idx:
+     `re.html#106 <re.html#106>`_
+
+   `TRegExFlag`:idx:
+     `re.html#105 <re.html#105>`_
+
+   `TRequestMethod`:idx:
+     `cgi.html#105 <cgi.html#105>`_
+
+   `TResponse`:idx:
+     `httpclient.html#101 <httpclient.html#101>`_
+
+   `TResult`:idx:
+     `system.html#167 <system.html#167>`_
+
+   `TRow`:idx:
+     * `db_postgres.html#103 <db_postgres.html#103>`_
+     * `db_mysql.html#103 <db_mysql.html#103>`_
+     * `db_sqlite.html#103 <db_sqlite.html#103>`_
+
+   `trunc`:idx:
+     `math.html#133 <math.html#133>`_
+
+   `TRune`:idx:
+     `unicode.html#101 <unicode.html#101>`_
+
+   `TRune16`:idx:
+     `unicode.html#102 <unicode.html#102>`_
+
+   `TRunningStat`:idx:
+     `math.html#134 <math.html#134>`_
+
+   `try`:idx:
+     * `manual.html#194 <manual.html#194>`_
+     * `tut2.html#108 <tut2.html#108>`_
+
+   `TryExec`:idx:
+     * `db_postgres.html#108 <db_postgres.html#108>`_
+     * `db_mysql.html#108 <db_mysql.html#108>`_
+     * `db_sqlite.html#108 <db_sqlite.html#108>`_
+
+   `TryInsertID`:idx:
+     * `db_postgres.html#114 <db_postgres.html#114>`_
+     * `db_mysql.html#114 <db_mysql.html#114>`_
+     * `db_sqlite.html#114 <db_sqlite.html#114>`_
+
+   `TServent`:idx:
+     `sockets.html#106 <sockets.html#106>`_
+
+   `TServer`:idx:
+     `httpserver.html#102 <httpserver.html#102>`_
+
+   `TSocket`:idx:
+     `sockets.html#101 <sockets.html#101>`_
+
+   `Tsqlite3_callback`:idx:
+     `sqlite3.html#182 <sqlite3.html#182>`_
+
+   `Tsqlite3_collation_needed_func`:idx:
+     `sqlite3.html#189 <sqlite3.html#189>`_
+
+   `Tsqlite3_create_collation_func`:idx:
+     `sqlite3.html#188 <sqlite3.html#188>`_
+
+   `Tsqlite3_result_func`:idx:
+     `sqlite3.html#187 <sqlite3.html#187>`_
+
+   `TSqlLexer`:idx:
+     `parsesql.html#101 <parsesql.html#101>`_
+
+   `TSqlNode`:idx:
+     `parsesql.html#105 <parsesql.html#105>`_
+
+   `TSqlNodeKind`:idx:
+     `parsesql.html#102 <parsesql.html#102>`_
+
+   `TSqlParser`:idx:
+     `parsesql.html#106 <parsesql.html#106>`_
+
+   `TSqlQuery`:idx:
+     * `db_postgres.html#105 <db_postgres.html#105>`_
+     * `db_mysql.html#105 <db_mysql.html#105>`_
+     * `db_sqlite.html#105 <db_sqlite.html#105>`_
+
+   `TStream`:idx:
+     `streams.html#102 <streams.html#102>`_
+
+   `TStringStream`:idx:
+     `streams.html#116 <streams.html#116>`_
+
+   `TStringTable`:idx:
+     `strtabs.html#102 <strtabs.html#102>`_
+
+   `TStringTableMode`:idx:
+     `strtabs.html#101 <strtabs.html#101>`_
+
+   `TStyle`:idx:
+     `terminal.html#111 <terminal.html#111>`_
+
+   `tt`:idx:
+     `xmlgen.html#179 <xmlgen.html#179>`_
+
+   `TTime`:idx:
+     `times.html#103 <times.html#103>`_
+
+   `TTimeInfo`:idx:
+     `times.html#104 <times.html#104>`_
+
+   `TType`:idx:
+     `sockets.html#104 <sockets.html#104>`_
+
+   `tuple`:idx:
+     `manual.html#161 <manual.html#161>`_
+
+   `tuple unpacking`:idx:
+     `manual.html#212 <manual.html#212>`_
+
+   `TWeekDay`:idx:
+     `times.html#102 <times.html#102>`_
+
+   `TXmlError`:idx:
+     `parsexml.html#104 <parsexml.html#104>`_
+
+   `TXmlEventKind`:idx:
+     `parsexml.html#103 <parsexml.html#103>`_
+
+   `TXmlNodeKind`:idx:
+     `xmltree.html#102 <xmltree.html#102>`_
+
+   `TXmlParseOption`:idx:
+     `parsexml.html#105 <parsexml.html#105>`_
+
+   `TXmlParser`:idx:
+     `parsexml.html#106 <parsexml.html#106>`_
+
+   `typ`:idx:
+     `macros.html#127 <macros.html#127>`_
+
+   `typ=`:idx:
+     `macros.html#133 <macros.html#133>`_
+
+   `type`:idx:
+     * `manual.html#102 <manual.html#102>`_
+     * `manual.html#141 <manual.html#141>`_
+     * `manual.html#217 <manual.html#217>`_
+
+   `type casts`:idx:
+     `tut2.html#101 <tut2.html#101>`_
+
+   `type conversions`:idx:
+     `tut2.html#102 <tut2.html#102>`_
+
+   `type parameters`:idx:
+     * `manual.html#219 <manual.html#219>`_
+     * `tut2.html#110 <tut2.html#110>`_
+
+   `type suffix`:idx:
+     `manual.html#138 <manual.html#138>`_
+
+   `typeDesc`:idx:
+     `system.html#117 <system.html#117>`_
+
+   `TZipArchive`:idx:
+     `zipfiles.html#101 <zipfiles.html#101>`_
+
+   `UDF_ARGS`:idx:
+     `mysql.html#259 <mysql.html#259>`_
+
+   `UDF_INIT`:idx:
+     `mysql.html#263 <mysql.html#263>`_
+
+   `ul`:idx:
+     `xmlgen.html#180 <xmlgen.html#180>`_
+
+   `unchecked runtime error`:idx:
+     `manual.html#111 <manual.html#111>`_
+
+   `unidecode`:idx:
+     `unidecode.html#102 <unidecode.html#102>`_
+
+   `UNIQUE_FLAG`:idx:
+     `mysql.html#140 <mysql.html#140>`_
+
+   `UNIQUE_KEY_FLAG`:idx:
+     `mysql.html#126 <mysql.html#126>`_
+
+   `units`:idx:
+     `manual.html#181 <manual.html#181>`_
+
+   `unixTimeToWinTime`:idx:
+     `times.html#117 <times.html#117>`_
+
+   `UnixToNativePath`:idx:
+     `os.html#113 <os.html#113>`_
+
+   `UnloadLib`:idx:
+     `dynlib.html#103 <dynlib.html#103>`_
+
+   `unsigned integer`:idx:
+     * `manual.html#143 <manual.html#143>`_
+     * `tut1.html#108 <tut1.html#108>`_
+
+   `unsigned operations`:idx:
+     * `manual.html#144 <manual.html#144>`_
+     * `tut1.html#109 <tut1.html#109>`_
+
+   `UNSIGNED_FLAG`:idx:
+     `mysql.html#129 <mysql.html#129>`_
+
+   `untraced`:idx:
+     * `manual.html#167 <manual.html#167>`_
+     * `tut1.html#122 <tut1.html#122>`_
+
+   `URLdecode`:idx:
+     `cgi.html#102 <cgi.html#102>`_
+
+   `URLencode`:idx:
+     `cgi.html#101 <cgi.html#101>`_
+
+   `URLretrieveStream`:idx:
+     `web.html#101 <web.html#101>`_
+
+   `URLretrieveString`:idx:
+     `web.html#102 <web.html#102>`_
+
+   `USED_MEM`:idx:
+     `mysql.html#321 <mysql.html#321>`_
+
+   `USERNAME_LENGTH`:idx:
+     `mysql.html#112 <mysql.html#112>`_
+
+   `validateData`:idx:
+     `cgi.html#110 <cgi.html#110>`_
+
+   `validEmailAddress`:idx:
+     `strutils.html#164 <strutils.html#164>`_
+
+   `validIdentifier`:idx:
+     `strutils.html#165 <strutils.html#165>`_
+
+   `Var`:idx:
+     `manual.html#187 <manual.html#187>`_
+
+   `var`:idx:
+     `xmlgen.html#181 <xmlgen.html#181>`_
+
+   `varargs`:idx:
+     `manual.html#251 <manual.html#251>`_
+
+   `variance`:idx:
+     * `math.html#112 <math.html#112>`_
+     * `math.html#136 <math.html#136>`_
+
+   `variant`:idx:
+     * `manual.html#163 <manual.html#163>`_
+     * `tut2.html#103 <tut2.html#103>`_
+
+   `verbose`:idx:
+     `regexprs.html#121 <regexprs.html#121>`_
+
+   `vertical tabulator`:idx:
+     `manual.html#126 <manual.html#126>`_
+
+   `volatile`:idx:
+     `nimrodc.html#107 <nimrodc.html#107>`_
+
+   `waitForExit`:idx:
+     `osproc.html#113 <osproc.html#113>`_
+
+   `walkDir`:idx:
+     `os.html#156 <os.html#156>`_
+
+   `walkDirRec`:idx:
+     `os.html#157 <os.html#157>`_
+
+   `walkFiles`:idx:
+     * `os.html#152 <os.html#152>`_
+     * `zipfiles.html#110 <zipfiles.html#110>`_
+
+   `warning`:idx:
+     * `manual.html#232 <manual.html#232>`_
+     * `manual.html#243 <manual.html#243>`_
+     * `macros.html#139 <macros.html#139>`_
+
+   `when`:idx:
+     * `manual.html#191 <manual.html#191>`_
+     * `tut1.html#106 <tut1.html#106>`_
+
+   `while`:idx:
+     `manual.html#203 <manual.html#203>`_
+
+   `whitespace`:idx:
+     `pegs.html#131 <pegs.html#131>`_
+
+   `Whitespace`:idx:
+     `strutils.html#102 <strutils.html#102>`_
+
+   `winTimeToUnixTime`:idx:
+     `times.html#118 <times.html#118>`_
+
+   `write`:idx:
+     * `system.html#517 <system.html#517>`_
+     * `system.html#518 <system.html#518>`_
+     * `system.html#519 <system.html#519>`_
+     * `system.html#520 <system.html#520>`_
+     * `system.html#521 <system.html#521>`_
+     * `system.html#522 <system.html#522>`_
+     * `system.html#523 <system.html#523>`_
+     * `streams.html#103 <streams.html#103>`_
+     * `streams.html#104 <streams.html#104>`_
+     * `ropes.html#118 <ropes.html#118>`_
+
+   `writeBuffer`:idx:
+     `system.html#533 <system.html#533>`_
+
+   `writeBytes`:idx:
+     `system.html#531 <system.html#531>`_
+
+   `writeChars`:idx:
+     `system.html#532 <system.html#532>`_
+
+   `writeContentType`:idx:
+     `cgi.html#144 <cgi.html#144>`_
+
+   `writeln`:idx:
+     * `system.html#525 <system.html#525>`_
+     * `system.html#526 <system.html#526>`_
+
+   `WriteStyled`:idx:
+     `terminal.html#112 <terminal.html#112>`_
+
+   `writeToBMP`:idx:
+     `graphics.html#110 <graphics.html#110>`_
+
+   `wwwNL`:idx:
+     `httpserver.html#101 <httpserver.html#101>`_
+
+   `XML`:idx:
+     * `parsexml.html#101 <parsexml.html#101>`_
+     * `xmlgen.html#101 <xmlgen.html#101>`_
+
+   `xmlCheckedTag`:idx:
+     `xmlgen.html#106 <xmlgen.html#106>`_
+
+   `XMLencode`:idx:
+     `cgi.html#103 <cgi.html#103>`_
+
+   `xmlHeader`:idx:
+     `xmltree.html#124 <xmltree.html#124>`_
+
+   `xor`:idx:
+     * `system.html#123 <system.html#123>`_
+     * `system.html#253 <system.html#253>`_
+     * `system.html#254 <system.html#254>`_
+     * `system.html#255 <system.html#255>`_
+     * `system.html#256 <system.html#256>`_
+     * `system.html#257 <system.html#257>`_
+
+   `yield`:idx:
+     `manual.html#200 <manual.html#200>`_
+
+   `ze`:idx:
+     * `system.html#184 <system.html#184>`_
+     * `system.html#185 <system.html#185>`_
+
+   `ze64`:idx:
+     * `system.html#186 <system.html#186>`_
+     * `system.html#187 <system.html#187>`_
+     * `system.html#188 <system.html#188>`_
+     * `system.html#189 <system.html#189>`_
+
+   `ZEROFILL_FLAG`:idx:
+     `mysql.html#130 <mysql.html#130>`_
+
+   `zeroMem`:idx:
+     `system.html#416 <system.html#416>`_
\ No newline at end of file
diff --git a/examples/parsecfgex.nim b/examples/parsecfgex.nim
new file mode 100755
index 000000000..618ecadd6
--- /dev/null
+++ b/examples/parsecfgex.nim
@@ -0,0 +1,25 @@
+
+import
+  os, parsecfg, strutils, streams
+  
+var f = newFileStream(paramStr(1), fmRead)
+if f != nil:
+  var p: TCfgParser
+  open(p, f, paramStr(1))
+  while true:
+    var e = next(p)
+    case e.kind
+    of cfgEof: 
+      echo("EOF!")
+      break
+    of cfgSectionStart:   ## a ``[section]`` has been parsed
+      echo("new section: " & e.section)
+    of cfgKeyValuePair:
+      echo("key-value-pair: " & e.key & ": " & e.value)
+    of cfgOption:
+      echo("command: " & e.key & ": " & e.value)
+    of cfgError:
+      echo(e.msg)
+  close(p)
+else:
+  echo("cannot open: " & paramStr(1))
diff --git a/lib/impure/graphics.nim b/lib/impure/graphics.nim
index 8590188f5..2c9f2f49a 100755
--- a/lib/impure/graphics.nim
+++ b/lib/impure/graphics.nim
@@ -11,9 +11,9 @@
 ## implementation uses SDL but the interface is meant to support multiple
 ## backends some day. 
 
-import colors
+import colors, math
 from sdl import PSurface # Bug
-from sdl_ttf import OpenFont
+from sdl_ttf import OpenFont, closeFont
 
 type
   TRect* = tuple[x, y, width, height: int]
@@ -24,7 +24,22 @@ type
     w, h: int
     s: sdl.PSurface
   
-  ESDLError = object of EBase
+  EGraphics* = object of EBase
+
+  TFont {.pure, final.} = object
+    f: sdl_ttf.PFont
+    color: SDL.TColor
+  PFont* = ref TFont ## represents a font
+
+proc toSdlColor(c: TColor): Sdl.TColor =
+  # Convert colors.TColor to SDL.TColor
+  var x = c.extractRGB  
+  result.r = toU8(x.r)
+  result.g = toU8(x.g)
+  result.b = toU8(x.b)
+
+proc raiseEGraphics = 
+  raise newException(EGraphics, $SDL.GetError())
   
 proc surfaceFinalizer(s: PSurface) = sdl.freeSurface(s.s)
   
@@ -38,6 +53,24 @@ proc newSurface*(width, height: int): PSurface =
    
   assert(not sdl.MustLock(result.s))
 
+proc fontFinalizer(f: PFont) = closeFont(f.f)
+
+proc newFont*(name = "VeraMono.ttf", size = 9, color = colBlack): PFont =  
+  ## Creates a new font object. Raises ``EIO`` if the font cannot be loaded.
+  new(result, fontFinalizer)
+  result.f = OpenFont(name, size)
+  if result.f == nil:
+    raise newException(EIO, "Could not open font file: " & name)
+  result.color = toSdlColor(color)
+
+var
+  defaultFont*: PFont ## default font that is used; this needs to initialized
+                      ## by the client!
+
+proc initDefaultFont*(name = "VeraMono.ttf", size = 9, color = colBlack) = 
+  ## initializes the `defaultFont` var.
+  defaultFont = newFont(name, size, color)
+
 proc newScreenSurface(width, height: int): PSurface =
   ## Creates a new screen surface
   new(result, surfaceFinalizer)
@@ -45,12 +78,6 @@ proc newScreenSurface(width, height: int): PSurface =
   result.h = height
   result.s = SDL.SetVideoMode(width, height, 0, 0)
 
-template withEvents(surf: PSurface, event: expr, actions: stmt): stmt =
-  while True:
-    var event: SDL.TEvent
-    if SDL.PollEvent(addr(event)) == 1:
-      actions
-
 proc writeToBMP*(sur: PSurface, filename: string) =
   ## Saves the contents of the surface `sur` to the file `filename` as a 
   ## BMP file.
@@ -70,28 +97,37 @@ template getPix(video, pitch, x, y: expr): expr =
 const
   ColSize = 4
 
-proc getPixel(sur: PSurface, x, y: Natural): colors.TColor =
+proc getPixel(sur: PSurface, x, y: Natural): colors.TColor {.inline.} =
+  assert x <% sur.w
+  assert y <% sur.h
   result = getPix(cast[PPixels](sur.s.pixels), sur.s.pitch div ColSize, x, y)
 
-proc setPixel(sur: PSurface, x, y: Natural, col: colors.TColor) =
+proc setPixel(sur: PSurface, x, y: Natural, col: colors.TColor) {.inline.} =
+  assert x <% sur.w
+  assert y <% sur.h
   var pixs = cast[PPixels](sur.s.pixels)
   #pixs[y * (sur.s.pitch div colSize) + x] = int(col)
   setPix(pixs, sur.s.pitch div ColSize, x, y, col)
 
 proc `[]`*(sur: PSurface, p: TPoint): TColor =
+  ## get pixel at position `p`. No range checking is done!
   result = getPixel(sur, p.x, p.y)
 
-#proc `[,]`*(sur: PSurface, x, y: int): TColor =
-#  result = setPixel(sur, x, y)
+proc `[,]`*(sur: PSurface, x, y: int): TColor = 
+  ## get pixel at position ``(x, y)``. No range checking is done!
+  result = getPixel(sur, x, y)
 
 proc `[]=`*(sur: PSurface, p: TPoint, col: TColor) = 
+  ## set the pixel at position `p`. No range checking is done!
   setPixel(sur, p.x, p.y, col)
 
-#proc `[,]=`*(sur: PSurface, x, y: int, col: TColor) =
-#  setPixel(sur, x, y, col)
+proc `[,]=`*(sur: PSurface, x, y: int, col: TColor) =
+  ## set the pixel at position ``(x, y)``. No range checking is done!
+  setPixel(sur, x, y, col)
 
-proc blitSurface*(destSurf: PSurface, destRect: TRect, srcSurf: PSurface, srcRect: TRect) =
-  ## Merges ``srcSurf`` into ``destSurf``
+proc blit*(destSurf: PSurface, destRect: TRect, srcSurf: PSurface, 
+           srcRect: TRect) =
+  ## Copies ``srcSurf`` into ``destSurf``
   var destTRect, srcTRect: SDL.TRect
 
   destTRect.x = int16(destRect.x)
@@ -105,75 +141,39 @@ proc blitSurface*(destSurf: PSurface, destRect: TRect, srcSurf: PSurface, srcRec
   srcTRect.h = int16(srcRect.height)
 
   if SDL.blitSurface(srcSurf.s, addr(srcTRect), destSurf.s, addr(destTRect)) != 0:
-    raise newException(ESDLError, $SDL.GetError())
+    raiseEGraphics()
 
-proc textBounds*(font: string, fontSize: int, text: string): tuple[width, height: int] =
-  var fontFile = OpenFont(font, fontSize) # Open the font file
-  if fontFile == nil: raise newException(ESDLError, "Could not open font file")
-    
+proc textBounds*(text: string, font = defaultFont): tuple[width, height: int] =
   var w, h: cint
-  if sdl_ttf.SizeUTF8(fontFile, text, w, h) < 0:
-    raise newException(ESDLError, $SDL.GetError())
-  return (int(w), int(h))
-
-proc drawText*(sur: PSurface, p: TPoint, font: string, text: string,
-    fg: TColor = colBlack, fontSize: int = 9) =
-  ## Draws text with a transparent background, at location ``p``.
-  ## ``font`` specifies the path to the ttf file, 
-  ## ``fontSize`` specifies the font size in pt, and ``fg``
-  ## specifies the foreground color.
-  var fontFile = OpenFont(font, fontSize) # Open the font file
-  if fontFile == nil: raise newException(ESDLError, "Could not open font file")
-  
+  if sdl_ttf.SizeUTF8(font.f, text, w, h) < 0: raiseEGraphics()
+  result.width = int(w)
+  result.height = int(h)
+
+proc drawText*(sur: PSurface, p: TPoint, text: string, font = defaultFont) =
+  ## Draws text with a transparent background, at location ``p`` with the given
+  ## font.
   var textSur: PSurface # This surface will have the text drawn on it
   new(textSur, surfaceFinalizer)
   
-  var RGBfg = fg.extractRGB
-  
-  # Convert colors.TColor to SDL.TColor
-  var SDLfg: SDL.TColor
-  SDLfg.r = toU8(RGBfg.r)
-  SDLfg.g = toU8(RGBfg.g)
-  SDLfg.b = toU8(RGBfg.b)
-  
   # Render the text
-  textSur.s = sdl_ttf.RenderTextBlended(fontFile, text, SDLfg)
+  textSur.s = sdl_ttf.RenderTextBlended(font.f, text, font.color)
   # Merge the text surface with sur
-  sur.blitSurface((p.x, p.y, sur.w, sur.h), textSur, (0, 0, sur.w, sur.h))
+  sur.blit((p.x, p.y, sur.w, sur.h), textSur, (0, 0, sur.w, sur.h))
   # Free the surface
   SDL.FreeSurface(sur.s)
 
-proc drawText*(sur: PSurface, p: TPoint, font: string, text: string,
-    bg: TColor, fg: TColor = colBlack, fontSize: int = 9) =
-  ## Draws text, at location ``p``, ``font`` specifies the path to 
-  ## the ttf file, ``fontSize`` specifies the font size in pt, and ``fg`` 
-  ## and ``bg`` specify the foreground and background colors.
-  var fontFile = OpenFont(font, fontSize) # Open the font file
-  if fontFile == nil: raise newException(ESDLError, "Could not open font file")
-  
+proc drawText*(sur: PSurface, p: TPoint, text: string,
+               bg: TColor, font = defaultFont) =
+  ## Draws text, at location ``p`` with font ``font``. ``bg`` 
+  ## is the background color.
   var textSur: PSurface # This surface will have the text drawn on it
   new(textSur, surfaceFinalizer)
-  
-  var RGBfg = fg.extractRGB
-  var RGBbg = bg.extractRGB
-  
-  # Convert colors.TColor to SDL.TColor
-  var SDLfg: SDL.TColor
-  SDLfg.r = toU8(RGBfg.r)
-  SDLfg.g = toU8(RGBfg.g)
-  SDLfg.b = toU8(RGBfg.b)
-  var SDLbg: SDL.TColor
-  SDLbg.r = toU8(RGBbg.r)
-  SDLbg.g = toU8(RGBbg.g)
-  SDLbg.b = toU8(RGBbg.b)
-  
-  # Render the text
-  textSur.s = sdl_ttf.RenderTextShaded(fontFile, text, SDLfg, SDLbg)
+  textSur.s = sdl_ttf.RenderTextShaded(font.f, text, font.color, toSdlColor(bg))
   # Merge the text surface with sur
-  sur.blitSurface((p.x, p.y, sur.w, sur.h), textSur, (0, 0, sur.w, sur.h))
+  sur.blit((p.x, p.y, sur.w, sur.h), textSur, (0, 0, sur.w, sur.h))
   # Free the surface
   SDL.FreeSurface(sur.s)
-
+  
 proc drawCircle*(sur: PSurface, p: TPoint, r: Natural, color: TColor) =
   ## draws a circle with center `p` and radius `r` with the given color
   ## onto the surface `sur`.
@@ -185,15 +185,21 @@ proc drawCircle*(sur: PSurface, p: TPoint, r: Natural, color: TColor) =
   var x = p.x
   var y = p.y
   while px <= py + 1:
-    setPix(video, pitch, x + px, y + py, color)
-    setPix(video, pitch, x + px, y - py, color)
-    setPix(video, pitch, x - px, y + py, color)
-    setPix(video, pitch, x - px, y - py, color)
+    if x+px <% sur.w:
+      if y+py <% sur.h: setPix(video, pitch, x+px, y+py, color)
+      if y-py <% sur.h: setPix(video, pitch, x+px, y-py, color)
+    
+    if x-px <% sur.w:
+      if y+py <% sur.h: setPix(video, pitch, x-px, y+py, color)
+      if y-py <% sur.h: setPix(video, pitch, x-px, y-py, color)
 
-    setPix(video, pitch, x + py, y + px, color)
-    setPix(video, pitch, x + py, y - px, color)
-    setPix(video, pitch, x - py, y + px, color)
-    setPix(video, pitch, x - py, y - px, color)
+    if x+py <% sur.w:
+      if y+px <% sur.h: setPix(video, pitch, x+py, y+px, color)
+      if y-px <% sur.h: setPix(video, pitch, x+py, y-px, color)
+      
+    if x-py <% sur.w:
+      if y+px <% sur.h: setPix(video, pitch, x-py, y+px, color)
+      if y-px <% sur.h: setPix(video, pitch, x-py, y-px, color)
 
     if a < 0:
       a = a + (2 * px + 3)
@@ -202,16 +208,22 @@ proc drawCircle*(sur: PSurface, p: TPoint, r: Natural, color: TColor) =
       py = py - 1
     px = px + 1
 
+proc `>-<`(val: int, s: PSurface): int {.inline.} = 
+  return if val < 0: 0 elif val >= s.w: s.w-1 else: val
+
+proc `>|<`(val: int, s: PSurface): int {.inline.} = 
+  return if val < 0: 0 elif val >= s.h: s.h-1 else: val
+
 proc drawLine*(sur: PSurface, p1, p2: TPoint, color: TColor) =
   ## draws a line between the two points `p1` and `p2` with the given color
   ## onto the surface `sur`.
   var stepx, stepy: int = 0
-  var x0: int = p1.x
-  var x1: int = p2.x
-  var y0: int = p1.y
-  var y1: int = p2.y
-  var dy: int = y1 - y0
-  var dx: int = x1 - x0
+  var x0 = p1.x >-< sur
+  var x1 = p2.x >-< sur
+  var y0 = p1.y >|< sur
+  var y1 = p2.y >|< sur
+  var dy = y1 - y0
+  var dx = x1 - x0
   if dy < 0:
     dy = -dy 
     stepy = -1
@@ -247,7 +259,7 @@ proc drawLine*(sur: PSurface, p1, p2: TPoint, color: TColor) =
       setPix(video, pitch, x0, y0, color)
 
 proc drawHorLine*(sur: PSurface, x, y, w: Natural, Color: TColor) =
-  ## draws a horizontal line from (x,y) to (x+w-1, h).
+  ## draws a horizontal line from (x,y) to (x+w-1, y).
   var video = cast[PPixels](sur.s.pixels)
   var pitch = sur.s.pitch div ColSize
 
@@ -264,44 +276,6 @@ proc drawVerLine*(sur: PSurface, x, y, h: Natural, Color: TColor) =
     for i in 0 .. min(sur.s.h-y, h-1)-1:
       setPix(video, pitch, x, y + i, color)
 
-proc drawLine2*(sur: PSurface, p0, p1: TPoint, color: TColor) =
-  ## Draws a line from ``p0`` to ``p1``, using the Bresenham's line algorithm
-  var (x0, x1, y0, y1) = (p0.x, p1.x, p0.y, p1.y)
-
-  if x0 >= sur.s.w: x0 = sur.s.w-1
-  if x1 >= sur.s.w: x1 = sur.s.w-1  
-  if y0 >= sur.s.h: y0 = sur.s.h-1
-  if y1 >= sur.s.h: y1 = sur.s.h-1
-
-  var video = cast[PPixels](sur.s.pixels)
-  var pitch = sur.s.pitch div ColSize
-  
-  var steep = abs(y1 - y0) > abs(x1 - x0)
-  if steep:
-    swap(x0, y0)
-    swap(x1, y1)
-  if x0 > x1:
-    swap(x0, x1)
-    swap(y0, y1)
-    
-  var deltax = x1 - x0
-  var deltay = abs(y1 - y0)
-  var error = deltax div 2
-  
-  var ystep: int
-  var y = y0
-  if y0 < y1: ystep = 1 else: ystep = -1
-  
-  for x in x0..x1:
-    if steep:
-      setPix(video, pitch, y, x, color)
-    else:
-      setPix(video, pitch, x, y, color)
-    error = error - deltay
-    if error < 0:
-      y = y + ystep
-      error = error + deltax
-
 proc fillCircle*(s: PSurface, p: TPoint, r: Natural, color: TColor) =
   ## draws a circle with center `p` and radius `r` with the given color
   ## onto the surface `sur` and fills it.
@@ -361,22 +335,18 @@ proc fillRect*(sur: PSurface, r: TRect, col: TColor) =
 proc Plot4EllipsePoints(sur: PSurface, CX, CY, X, Y: Natural, col: TColor) =
   var video = cast[PPixels](sur.s.pixels)
   var pitch = sur.s.pitch div ColSize
-  
-  if CX+X <= sur.s.w-1 and CY+Y <= sur.s.h-1:
-    setPix(video, pitch, CX+X, CY+Y, col)
-    
-  if CX-X <= sur.s.w-1 and CY+Y <= sur.s.h-1:
-    setPix(video, pitch, CX-X, CY+Y, col)
-    
-  if CX-X <= sur.s.w-1 and CY-Y <= sur.s.h-1:
-    setPix(video, pitch, CX-X, CY-Y, col)
-    
-  if CX+X <= sur.s.w-1 and CY-Y <= sur.s.h-1:
-    setPix(video, pitch, CX+X, CY-Y, col)
-
-proc drawEllipse*(sur: PSurface, CX, CY, XRadius, YRadius: Natural, col: TColor) =
-  ## Draws an ellipse, ``CX`` and ``CY`` specify the center X and Y of the ellipse, 
-  ## ``XRadius`` and ``YRadius`` specify half the width and height of the ellipse.
+  if CX+X <= sur.s.w-1:
+    if CY+Y <= sur.s.h-1: setPix(video, pitch, CX+X, CY+Y, col)
+    if CY-Y <= sur.s.h-1: setPix(video, pitch, CX+X, CY-Y, col)    
+  if CX-X <= sur.s.w-1:
+    if CY+Y <= sur.s.h-1: setPix(video, pitch, CX-X, CY+Y, col)
+    if CY-Y <= sur.s.h-1: setPix(video, pitch, CX-X, CY-Y, col)
+
+proc drawEllipse*(sur: PSurface, CX, CY, XRadius, YRadius: Natural, 
+                  col: TColor) =
+  ## Draws an ellipse, ``CX`` and ``CY`` specify the center X and Y of the 
+  ## ellipse, ``XRadius`` and ``YRadius`` specify half the width and height
+  ## of the ellipse.
   var 
     X, Y: Natural
     XChange, YChange: Natural
@@ -438,18 +408,15 @@ proc plotAA(sur: PSurface, x, y, c: float, color: TColor) =
     setPix(video, pitch, x.toInt(), y.toInt(), 
            pixColor.intensity(1.0 - c) + color.intensity(c))
          
-import math
-proc ipart(x: float): float =
-  return x.trunc()
-proc fpart(x: float): float =
-  return x - ipart(x)
-proc rfpart(x: float): float =
-  return 1.0 - fpart(x)
-proc drawLineAA(sur: PSurface, p1: TPoint, p2: TPoint, color: TColor) =
-  ## Draws a anti-aliased line from ``p1`` to ``p2``, using Xiaolin Wu's line algorithm
+proc ipart(x: float): float = return x.trunc()
+proc fpart(x: float): float = return x - ipart(x)
+proc rfpart(x: float): float = return 1.0 - fpart(x)
+
+proc drawLineAA(sur: PSurface, p1, p2: TPoint, color: TColor) =
+  ## Draws a anti-aliased line from ``p1`` to ``p2``, using Xiaolin Wu's 
+  ## line algorithm
   var (x1, x2, y1, y2) = (p1.x.toFloat(), p2.x.toFloat(), 
                           p1.y.toFloat(), p2.y.toFloat())
-  
   var dx = x2 - x1
   var dy = y2 - y1
   if abs(dx) < abs(dy):
@@ -482,27 +449,28 @@ proc drawLineAA(sur: PSurface, p1: TPoint, p2: TPoint, color: TColor) =
     sur.plotAA(x.toFloat(), ipart(intery), rfpart(intery), color)
     sur.plotAA(x.toFloat(), ipart(intery) + 1.0, fpart(intery), color)
     intery = intery + gradient
-  
-      
-if sdl.Init(sdl.INIT_VIDEO) < 0:
-  echo "sdl init failed: " & $SDL.GetError()
 
-if sdl_ttf.Init() < 0:
-  echo "sdl_ttf init failed: " & $SDL.GetError() 
+template withEvents(surf: PSurface, event: expr, actions: stmt): stmt =
+  while True:
+    var event: SDL.TEvent
+    if SDL.PollEvent(addr(event)) == 1:
+      actions
 
-when isMainModule:
-  #var txtSurf = drawText(
+if sdl.Init(sdl.INIT_VIDEO) < 0: raiseEGraphics()
+if sdl_ttf.Init() < 0: raiseEGraphics()
 
+when isMainModule:
   var surf = newScreenSurface(800, 600)
   var r: TRect = (0, 0, 900, 900)
     
   # Draw the shapes
   surf.fillRect(r, colWhite)
   surf.drawLineAA((100, 170), (400, 471), colTan)
-  surf.drawLine2((100, 170), (400, 471), colRed)
+  surf.drawLine((100, 170), (400, 471), colRed)
   
   surf.drawEllipse(200, 300, 200, 30, colSeaGreen)
-  surf.drawHorLine(1, 300, 400, colViolet) # Check if the ellipse is the size it's suppose to be.
+  surf.drawHorLine(1, 300, 400, colViolet) 
+  # Check if the ellipse is the size it's suppose to be.
   surf.drawVerLine(200, 300 - 30 + 1, 60, colViolet) # ^^ | i suppose it is
   
   surf.drawEllipse(400, 300, 300, 300, colOrange)
@@ -512,35 +480,36 @@ when isMainModule:
   surf.drawVerLine(5, 60, 800, colRed)
   surf.drawCircle((600, 500), 60, colRed)
   
-  surf.drawText((300, 300), "VeraMono.ttf", "TEST", colMidnightBlue, 150)
-  var textSize = textBounds("VeraMono.ttf", 150, "TEST")
-  surf.drawText((300, 300 + textSize.height), "VeraMono.ttf", $textSize.width & ", " & $textSize.height, colDarkGreen, 50)
+  #surf.drawText((300, 300), "TEST", colMidnightBlue)
+  #var textSize = textBounds("TEST")
+  #surf.drawText((300, 300 + textSize.height), $textSize.width & ", " &
+  #  $textSize.height, colDarkGreen)
   
   var mouseStartX = 0
   var mouseStartY = 0
   withEvents(surf, event):
-    case event.theType:
+    case event.kind:
     of SDL.QUITEV:
       break
     of SDL.KEYDOWN:
-      if event.key.keysym.sym == SDL.K_LEFT:
-        echo(event.key.keysym.sym)
+      if event.sym == SDL.K_LEFT:
+        echo(event.sym)
         surf.drawHorLine(395, 300, 5, colPaleGoldenRod)
         echo("Drawing")
       else:
-        echo(event.key.keysym.sym)
+        echo(event.sym)
     of SDL.MOUSEBUTTONDOWN:
       # button.x/y is F* UP!
-      echo("MOUSEDOWN", event.button.x)
-      mouseStartX = event.button.x
-      mouseStartY = event.button.y
+      echo("MOUSEDOWN ", event.x)
+      mouseStartX = event.x
+      mouseStartY = event.y
       
     of SDL.MOUSEBUTTONUP:
       echo("MOUSEUP ", mouseStartX)
       if mouseStartX != 0 and mouseStartY != 0:
-        echo(mouseStartX, "->", int(event.button.x))
+        echo(mouseStartX, "->", int(event.x))
         surf.drawLineAA((mouseStartX, MouseStartY), 
-          (int(event.button.x), int(event.button.y)), colPaleGoldenRod)
+          (int(event.x), int(event.y)), colPaleGoldenRod)
         mouseStartX = 0
         mouseStartY = 0
       
diff --git a/lib/oldwrappers/zip/libzip_all.c b/lib/oldwrappers/zip/libzip_all.c
new file mode 100755
index 000000000..797374b29
--- /dev/null
+++ b/lib/oldwrappers/zip/libzip_all.c
@@ -0,0 +1,4189 @@
+/*
+  zipint.h -- internal declarations.
+  Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
+
+  This file is part of libzip, a library to manipulate ZIP archives.
+  The authors can be contacted at <libzip@nih.at>
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+  3. The names of the authors may not be used to endorse or promote
+     products derived from this software without specific prior
+     written permission.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+  IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <zlib.h>
+
+/*
+#ifdef _MSC_VER
+#define ZIP_EXTERN __declspec(dllimport)
+#endif
+*/
+
+/*
+  zip.h -- exported declarations.
+  Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
+
+  This file is part of libzip, a library to manipulate ZIP archives.
+  The authors can be contacted at <libzip@nih.at>
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+  3. The names of the authors may not be used to endorse or promote
+     products derived from this software without specific prior
+     written permission.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+  IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#ifndef ZIP_EXTERN
+#define ZIP_EXTERN
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <time.h>
+
+/* flags for zip_open */
+
+#define ZIP_CREATE           1
+#define ZIP_EXCL             2
+#define ZIP_CHECKCONS        4
+
+
+/* flags for zip_name_locate, zip_fopen, zip_stat, ... */
+
+#define ZIP_FL_NOCASE                1 /* ignore case on name lookup */
+#define ZIP_FL_NODIR                2 /* ignore directory component */
+#define ZIP_FL_COMPRESSED        4 /* read compressed data */
+#define ZIP_FL_UNCHANGED        8 /* use original data, ignoring changes */
+#define ZIP_FL_RECOMPRESS      16 /* force recompression of data */
+
+/* archive global flags flags */
+
+#define ZIP_AFL_TORRENT                1 /* torrent zipped */
+
+/* libzip error codes */
+
+#define ZIP_ER_OK             0  /* N No error */
+#define ZIP_ER_MULTIDISK      1  /* N Multi-disk zip archives not supported */
+#define ZIP_ER_RENAME         2  /* S Renaming temporary file failed */
+#define ZIP_ER_CLOSE          3  /* S Closing zip archive failed */
+#define ZIP_ER_SEEK           4  /* S Seek error */
+#define ZIP_ER_READ           5  /* S Read error */
+#define ZIP_ER_WRITE          6  /* S Write error */
+#define ZIP_ER_CRC            7  /* N CRC error */
+#define ZIP_ER_ZIPCLOSED      8  /* N Containing zip archive was closed */
+#define ZIP_ER_NOENT          9  /* N No such file */
+#define ZIP_ER_EXISTS        10  /* N File already exists */
+#define ZIP_ER_OPEN          11  /* S Can't open file */
+#define ZIP_ER_TMPOPEN       12  /* S Failure to create temporary file */
+#define ZIP_ER_ZLIB          13  /* Z Zlib error */
+#define ZIP_ER_MEMORY        14  /* N Malloc failure */
+#define ZIP_ER_CHANGED       15  /* N Entry has been changed */
+#define ZIP_ER_COMPNOTSUPP   16  /* N Compression method not supported */
+#define ZIP_ER_EOF           17  /* N Premature EOF */
+#define ZIP_ER_INVAL         18  /* N Invalid argument */
+#define ZIP_ER_NOZIP         19  /* N Not a zip archive */
+#define ZIP_ER_INTERNAL      20  /* N Internal error */
+#define ZIP_ER_INCONS        21  /* N Zip archive inconsistent */
+#define ZIP_ER_REMOVE        22  /* S Can't remove file */
+#define ZIP_ER_DELETED       23  /* N Entry has been deleted */
+
+
+/* type of system error value */
+
+#define ZIP_ET_NONE              0  /* sys_err unused */
+#define ZIP_ET_SYS              1  /* sys_err is errno */
+#define ZIP_ET_ZLIB              2  /* sys_err is zlib error code */
+
+/* compression methods */
+
+#define ZIP_CM_DEFAULT              -1  /* better of deflate or store */
+#define ZIP_CM_STORE               0  /* stored (uncompressed) */
+#define ZIP_CM_SHRINK               1  /* shrunk */
+#define ZIP_CM_REDUCE_1               2  /* reduced with factor 1 */
+#define ZIP_CM_REDUCE_2               3  /* reduced with factor 2 */
+#define ZIP_CM_REDUCE_3               4  /* reduced with factor 3 */
+#define ZIP_CM_REDUCE_4               5  /* reduced with factor 4 */
+#define ZIP_CM_IMPLODE               6  /* imploded */
+/* 7 - Reserved for Tokenizing compression algorithm */
+#define ZIP_CM_DEFLATE               8  /* deflated */
+#define ZIP_CM_DEFLATE64       9  /* deflate64 */
+#define ZIP_CM_PKWARE_IMPLODE 10  /* PKWARE imploding */
+/* 11 - Reserved by PKWARE */
+#define ZIP_CM_BZIP2          12  /* compressed using BZIP2 algorithm */
+/* 13 - Reserved by PKWARE */
+#define ZIP_CM_LZMA              14  /* LZMA (EFS) */
+/* 15-17 - Reserved by PKWARE */
+#define ZIP_CM_TERSE              18  /* compressed using IBM TERSE (new) */
+#define ZIP_CM_LZ77           19  /* IBM LZ77 z Architecture (PFS) */
+#define ZIP_CM_WAVPACK              97  /* WavPack compressed data */
+#define ZIP_CM_PPMD              98  /* PPMd version I, Rev 1 */
+
+/* encryption methods */
+
+#define ZIP_EM_NONE               0  /* not encrypted */
+#define ZIP_EM_TRAD_PKWARE     1  /* traditional PKWARE encryption */
+#if 0 /* Strong Encryption Header not parsed yet */
+#define ZIP_EM_DES        0x6601  /* strong encryption: DES */
+#define ZIP_EM_RC2_OLD    0x6602  /* strong encryption: RC2, version < 5.2 */
+#define ZIP_EM_3DES_168   0x6603
+#define ZIP_EM_3DES_112   0x6609
+#define ZIP_EM_AES_128    0x660e
+#define ZIP_EM_AES_192    0x660f
+#define ZIP_EM_AES_256    0x6610
+#define ZIP_EM_RC2        0x6702  /* strong encryption: RC2, version >= 5.2 */
+#define ZIP_EM_RC4        0x6801
+#endif
+#define ZIP_EM_UNKNOWN    0xffff  /* unknown algorithm */
+
+typedef long myoff_t; /* XXX: 64 bit support */
+
+enum zip_source_cmd {
+    ZIP_SOURCE_OPEN,        /* prepare for reading */
+    ZIP_SOURCE_READ,         /* read data */
+    ZIP_SOURCE_CLOSE,        /* reading is done */
+    ZIP_SOURCE_STAT,        /* get meta information */
+    ZIP_SOURCE_ERROR,        /* get error information */
+    ZIP_SOURCE_FREE        /* cleanup and free resources */
+};
+
+typedef ssize_t (*zip_source_callback)(void *state, void *data,
+                                       size_t len, enum zip_source_cmd cmd);
+
+struct zip_stat {
+    const char *name;                        /* name of the file */
+    int index;                                /* index within archive */
+    unsigned int crc;                        /* crc of file data */
+    time_t mtime;                        /* modification time */
+    myoff_t size;                                /* size of file (uncompressed) */
+    myoff_t comp_size;                        /* size of file (compressed) */
+    unsigned short comp_method;                /* compression method used */
+    unsigned short encryption_method;        /* encryption method used */
+};
+
+struct zip;
+struct zip_file;
+struct zip_source;
+
+
+ZIP_EXTERN int zip_add(struct zip *, const char *, struct zip_source *);
+ZIP_EXTERN int zip_add_dir(struct zip *, const char *);
+ZIP_EXTERN int zip_close(struct zip *);
+ZIP_EXTERN int zip_delete(struct zip *, int);
+ZIP_EXTERN void zip_error_clear(struct zip *);
+ZIP_EXTERN void zip_error_get(struct zip *, int *, int *);
+ZIP_EXTERN int zip_error_get_sys_type(int);
+ZIP_EXTERN int zip_error_to_str(char *, size_t, int, int);
+ZIP_EXTERN int zip_fclose(struct zip_file *);
+ZIP_EXTERN void zip_file_error_clear(struct zip_file *);
+ZIP_EXTERN void zip_file_error_get(struct zip_file *, int *, int *);
+ZIP_EXTERN const char *zip_file_strerror(struct zip_file *);
+ZIP_EXTERN struct zip_file *zip_fopen(struct zip *, const char *, int);
+ZIP_EXTERN struct zip_file *zip_fopen_index(struct zip *, int, int);
+ZIP_EXTERN ssize_t zip_fread(struct zip_file *, void *, size_t);
+ZIP_EXTERN const char *zip_get_archive_comment(struct zip *, int *, int);
+ZIP_EXTERN int zip_get_archive_flag(struct zip *, int, int);
+ZIP_EXTERN const char *zip_get_file_comment(struct zip *, int, int *, int);
+ZIP_EXTERN const char *zip_get_name(struct zip *, int, int);
+ZIP_EXTERN int zip_get_num_files(struct zip *);
+ZIP_EXTERN int zip_name_locate(struct zip *, const char *, int);
+ZIP_EXTERN struct zip *zip_open(const char *, int, int *);
+ZIP_EXTERN int zip_rename(struct zip *, int, const char *);
+ZIP_EXTERN int zip_replace(struct zip *, int, struct zip_source *);
+ZIP_EXTERN int zip_set_archive_comment(struct zip *, const char *, int);
+ZIP_EXTERN int zip_set_archive_flag(struct zip *, int, int);
+ZIP_EXTERN int zip_set_file_comment(struct zip *, int, const char *, int);
+ZIP_EXTERN struct zip_source *zip_source_buffer(struct zip *, const void *,
+                                                myoff_t, int);
+ZIP_EXTERN struct zip_source *zip_source_file(struct zip *, const char *,
+                                              myoff_t, myoff_t);
+ZIP_EXTERN struct zip_source *zip_source_filep(struct zip *, FILE *,
+                                               myoff_t, myoff_t);
+ZIP_EXTERN void zip_source_free(struct zip_source *);
+ZIP_EXTERN struct zip_source *zip_source_function(struct zip *,
+                                                  zip_source_callback, void *);
+ZIP_EXTERN struct zip_source *zip_source_zip(struct zip *, struct zip *,
+                                             int, int, myoff_t, myoff_t);
+ZIP_EXTERN int zip_stat(struct zip *, const char *, int, struct zip_stat *);
+ZIP_EXTERN int zip_stat_index(struct zip *, int, int, struct zip_stat *);
+ZIP_EXTERN void zip_stat_init(struct zip_stat *);
+ZIP_EXTERN const char *zip_strerror(struct zip *);
+ZIP_EXTERN int zip_unchange(struct zip *, int);
+ZIP_EXTERN int zip_unchange_all(struct zip *);
+ZIP_EXTERN int zip_unchange_archive(struct zip *);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+/* config.h.  Generated from config.h.in by configure.  */
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't.
+   */
+/* #undef HAVE_DECL_TZNAME */
+
+#define HAVE_CONFIG_H 1
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
+/* Define to 1 if you have the `fseeko' function. */
+#define HAVE_FSEEKO 1
+
+/* Define to 1 if you have the `ftello' function. */
+#define HAVE_FTELLO 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the `z' library (-lz). */
+#define HAVE_LIBZ 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `mkstemp' function. */
+#define HAVE_MKSTEMP 1
+
+/* Define to 1 if you have the `MoveFileExA' function. */
+/* #undef HAVE_MOVEFILEEXA */
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if `tm_zone' is member of `struct tm'. */
+#define HAVE_STRUCT_TM_TM_ZONE 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
+   `HAVE_STRUCT_TM_TM_ZONE' instead. */
+#define HAVE_TM_ZONE 1
+
+/* Define to 1 if you don't have `tm_zone' but do have the external array
+   `tzname'. */
+/* #undef HAVE_TZNAME */
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+/* #undef NO_MINUS_C_MINUS_O */
+
+/* Name of package */
+#define PACKAGE "libzip"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "libzip@nih.at"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "libzip"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "libzip 0.9"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "libzip"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "0.9"
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+/* #undef TM_IN_SYS_TIME */
+
+/* Version number of package */
+#define VERSION "0.9"
+
+
+#ifndef HAVE_MKSTEMP
+int _zip_mkstemp(char *);
+#define mkstemp _zip_mkstemp
+#endif
+
+#ifdef HAVE_MOVEFILEEXA
+#include <windows.h>
+#define _zip_rename(s, t)                                                \
+        (!MoveFileExA((s), (t),                                                \
+                     MOVEFILE_COPY_ALLOWED|MOVEFILE_REPLACE_EXISTING))
+#else
+#define _zip_rename        rename
+#endif
+
+#ifndef HAVE_FSEEKO
+#define fseeko(s, o, w)        (fseek((s), (long int)(o), (w)))
+#endif
+#ifndef HAVE_FTELLO
+#define ftello(s)        ((long)ftell((s)))
+#endif
+
+
+#define CENTRAL_MAGIC "PK\1\2"
+#define LOCAL_MAGIC   "PK\3\4"
+#define EOCD_MAGIC    "PK\5\6"
+#define DATADES_MAGIC "PK\7\8"
+#define TORRENT_SIG        "TORRENTZIPPED-"
+#define TORRENT_SIG_LEN        14
+#define TORRENT_CRC_LEN 8
+#define TORRENT_MEM_LEVEL        8
+#define CDENTRYSIZE         46u
+#define LENTRYSIZE          30
+#define MAXCOMLEN        65536
+#define EOCDLEN             22
+#define CDBUFSIZE       (MAXCOMLEN+EOCDLEN)
+#define BUFSIZE                8192
+
+
+/* state of change of a file in zip archive */
+
+enum zip_state { ZIP_ST_UNCHANGED, ZIP_ST_DELETED, ZIP_ST_REPLACED,
+                 ZIP_ST_ADDED, ZIP_ST_RENAMED };
+
+/* constants for struct zip_file's member flags */
+
+#define ZIP_ZF_EOF        1 /* EOF reached */
+#define ZIP_ZF_DECOMP        2 /* decompress data */
+#define ZIP_ZF_CRC        4 /* compute and compare CRC */
+
+/* directory entry: general purpose bit flags */
+
+#define ZIP_GPBF_ENCRYPTED                0x0001        /* is encrypted */
+#define ZIP_GPBF_DATA_DESCRIPTOR        0x0008        /* crc/size after file data */
+#define ZIP_GPBF_STRONG_ENCRYPTION        0x0040  /* uses strong encryption */
+
+/* error information */
+
+struct zip_error {
+    int zip_err;        /* libzip error code (ZIP_ER_*) */
+    int sys_err;        /* copy of errno (E*) or zlib error code */
+    char *str;                /* string representation or NULL */
+};
+
+/* zip archive, part of API */
+
+struct zip {
+    char *zn;                        /* file name */
+    FILE *zp;                        /* file */
+    struct zip_error error;        /* error information */
+
+    unsigned int flags;                /* archive global flags */
+    unsigned int ch_flags;        /* changed archive global flags */
+
+    struct zip_cdir *cdir;        /* central directory */
+    char *ch_comment;                /* changed archive comment */
+    int ch_comment_len;                /* length of changed zip archive
+                                 * comment, -1 if unchanged */
+    int nentry;                        /* number of entries */
+    int nentry_alloc;                /* number of entries allocated */
+    struct zip_entry *entry;        /* entries */
+    int nfile;                        /* number of opened files within archive */
+    int nfile_alloc;                /* number of files allocated */
+    struct zip_file **file;        /* opened files within archive */
+};
+
+/* file in zip archive, part of API */
+
+struct zip_file {
+    struct zip *za;                /* zip archive containing this file */
+    struct zip_error error;        /* error information */
+    int flags;                        /* -1: eof, >0: error */
+
+    int method;                        /* compression method */
+    myoff_t fpos;                        /* position within zip file (fread/fwrite) */
+    unsigned long bytes_left;        /* number of bytes left to read */
+    unsigned long cbytes_left;  /* number of bytes of compressed data left */
+    
+    unsigned long crc;                /* CRC so far */
+    unsigned long crc_orig;        /* CRC recorded in archive */
+    
+    char *buffer;
+    z_stream *zstr;
+};
+
+/* zip archive directory entry (central or local) */
+
+struct zip_dirent {
+    unsigned short version_madeby;        /* (c)  version of creator */
+    unsigned short version_needed;        /* (cl) version needed to extract */
+    unsigned short bitflags;                /* (cl) general purpose bit flag */
+    unsigned short comp_method;                /* (cl) compression method used */
+    time_t last_mod;                        /* (cl) time of last modification */
+    unsigned int crc;                        /* (cl) CRC-32 of uncompressed data */
+    unsigned int comp_size;                /* (cl) size of commpressed data */
+    unsigned int uncomp_size;                /* (cl) size of uncommpressed data */
+    char *filename;                        /* (cl) file name (NUL-terminated) */
+    unsigned short filename_len;        /* (cl) length of filename (w/o NUL) */
+    char *extrafield;                        /* (cl) extra field */
+    unsigned short extrafield_len;        /* (cl) length of extra field */
+    char *comment;                        /* (c)  file comment */
+    unsigned short comment_len;                /* (c)  length of file comment */
+    unsigned short disk_number;                /* (c)  disk number start */
+    unsigned short int_attrib;                /* (c)  internal file attributes */
+    unsigned int ext_attrib;                /* (c)  external file attributes */
+    unsigned int offset;                /* (c)  offset of local header  */
+};
+
+/* zip archive central directory */
+
+struct zip_cdir {
+    struct zip_dirent *entry;        /* directory entries */
+    int nentry;                        /* number of entries */
+
+    unsigned int size;                /* size of central direcotry */
+    unsigned int offset;        /* offset of central directory in file */
+    char *comment;                /* zip archive comment */
+    unsigned short comment_len;        /* length of zip archive comment */
+};
+
+
+
+struct zip_source {
+    zip_source_callback f;
+    void *ud;
+};
+
+/* entry in zip archive directory */
+
+struct zip_entry {
+    enum zip_state state;
+    struct zip_source *source;
+    char *ch_filename;
+    char *ch_comment;
+    int ch_comment_len;
+};
+
+
+
+extern const char * const _zip_err_str[];
+extern const int _zip_nerr_str;
+extern const int _zip_err_type[];
+
+
+
+#define ZIP_ENTRY_DATA_CHANGED(x)        \
+                        ((x)->state == ZIP_ST_REPLACED  \
+                         || (x)->state == ZIP_ST_ADDED)
+
+
+
+int _zip_cdir_compute_crc(struct zip *, uLong *);
+void _zip_cdir_free(struct zip_cdir *);
+struct zip_cdir *_zip_cdir_new(int, struct zip_error *);
+int _zip_cdir_write(struct zip_cdir *, FILE *, struct zip_error *);
+
+void _zip_dirent_finalize(struct zip_dirent *);
+void _zip_dirent_init(struct zip_dirent *);
+int _zip_dirent_read(struct zip_dirent *, FILE *,
+                     unsigned char **, unsigned int, int, struct zip_error *);
+void _zip_dirent_torrent_normalize(struct zip_dirent *);
+int _zip_dirent_write(struct zip_dirent *, FILE *, int, struct zip_error *);
+
+void _zip_entry_free(struct zip_entry *);
+void _zip_entry_init(struct zip *, int);
+struct zip_entry *_zip_entry_new(struct zip *);
+
+void _zip_error_clear(struct zip_error *);
+void _zip_error_copy(struct zip_error *, struct zip_error *);
+void _zip_error_fini(struct zip_error *);
+void _zip_error_get(struct zip_error *, int *, int *);
+void _zip_error_init(struct zip_error *);
+void _zip_error_set(struct zip_error *, int, int);
+const char *_zip_error_strerror(struct zip_error *);
+
+int _zip_file_fillbuf(void *, size_t, struct zip_file *);
+unsigned int _zip_file_get_offset(struct zip *, int);
+
+int _zip_filerange_crc(FILE *, myoff_t, myoff_t, uLong *, struct zip_error *);
+
+struct zip_source *_zip_source_file_or_p(struct zip *, const char *, FILE *,
+                                         myoff_t, myoff_t);
+
+void _zip_free(struct zip *);
+const char *_zip_get_name(struct zip *, int, int, struct zip_error *);
+int _zip_local_header_read(struct zip *, int);
+void *_zip_memdup(const void *, size_t, struct zip_error *);
+int _zip_name_locate(struct zip *, const char *, int, struct zip_error *);
+struct zip *_zip_new(struct zip_error *);
+unsigned short _zip_read2(unsigned char **);
+unsigned int _zip_read4(unsigned char **);
+int _zip_replace(struct zip *, int, const char *, struct zip_source *);
+int _zip_set_name(struct zip *, int, const char *);
+int _zip_unchange(struct zip *, int, int);
+void _zip_unchange_data(struct zip_entry *);
+
+         
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+const char *
+_zip_error_strerror(struct zip_error *err)
+{
+    const char *zs, *ss;
+    char buf[128], *s;
+
+    _zip_error_fini(err);
+
+    if (err->zip_err < 0 || err->zip_err >= _zip_nerr_str) {
+        sprintf(buf, "Unknown error %d", err->zip_err);
+        zs = NULL;
+        ss = buf;
+    }
+    else {
+        zs = _zip_err_str[err->zip_err];
+        
+        switch (_zip_err_type[err->zip_err]) {
+        case ZIP_ET_SYS:
+            ss = strerror(err->sys_err);
+            break;
+
+        case ZIP_ET_ZLIB:
+            ss = zError(err->sys_err);
+            break;
+
+        default:
+            ss = NULL;
+        }
+    }
+
+    if (ss == NULL)
+        return zs;
+    else {
+        if ((s=(char *)malloc(strlen(ss)
+                              + (zs ? strlen(zs)+2 : 0) + 1)) == NULL)
+            return _zip_err_str[ZIP_ER_MEMORY];
+        
+        sprintf(s, "%s%s%s",
+                (zs ? zs : ""),
+                (zs ? ": " : ""),
+                ss);
+        err->str = s;
+
+        return s;
+    }
+}
+
+#include <stdlib.h>
+
+
+
+void
+_zip_error_clear(struct zip_error *err)
+{
+    err->zip_err = ZIP_ER_OK;
+    err->sys_err = 0;
+}
+
+
+
+void
+_zip_error_copy(struct zip_error *dst, struct zip_error *src)
+{
+    dst->zip_err = src->zip_err;
+    dst->sys_err = src->sys_err;
+}
+
+
+
+void
+_zip_error_fini(struct zip_error *err)
+{
+    free(err->str);
+    err->str = NULL;
+}
+
+
+
+void
+_zip_error_get(struct zip_error *err, int *zep, int *sep)
+{
+    if (zep)
+        *zep = err->zip_err;
+    if (sep) {
+        if (zip_error_get_sys_type(err->zip_err) != ZIP_ET_NONE)
+            *sep = err->sys_err;
+        else
+            *sep = 0;
+    }
+}
+
+
+
+void
+_zip_error_init(struct zip_error *err)
+{
+    err->zip_err = ZIP_ER_OK;
+    err->sys_err = 0;
+    err->str = NULL;
+}
+
+
+
+void
+_zip_error_set(struct zip_error *err, int ze, int se)
+{
+    if (err) {
+        err->zip_err = ze;
+        err->sys_err = se;
+    }
+}
+
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+
+
+int
+_zip_mkstemp(char *path)
+{
+        int fd;   
+        char *start, *trv;
+        struct stat sbuf;
+        pid_t pid;
+
+        /* To guarantee multiple calls generate unique names even if
+           the file is not created. 676 different possibilities with 7
+           or more X's, 26 with 6 or less. */
+        static char xtra[2] = "aa";
+        int xcnt = 0;
+
+        pid = getpid();
+
+        /* Move to end of path and count trailing X's. */
+        for (trv = path; *trv; ++trv)
+                if (*trv == 'X')
+                        xcnt++;
+                else
+                        xcnt = 0;        
+
+        /* Use at least one from xtra.  Use 2 if more than 6 X's. */
+        if (*(trv - 1) == 'X')
+                *--trv = xtra[0];
+        if (xcnt > 6 && *(trv - 1) == 'X')
+                *--trv = xtra[1];
+
+        /* Set remaining X's to pid digits with 0's to the left. */
+        while (*--trv == 'X') {
+                *trv = (pid % 10) + '0';
+                pid /= 10;
+        }
+
+        /* update xtra for next call. */
+        if (xtra[0] != 'z')
+                xtra[0]++;
+        else {
+                xtra[0] = 'a';
+                if (xtra[1] != 'z')
+                        xtra[1]++;
+                else
+                        xtra[1] = 'a';
+        }
+
+        /*
+         * check the target directory; if you have six X's and it
+         * doesn't exist this runs for a *very* long time.
+         */
+        for (start = trv + 1;; --trv) {
+                if (trv <= path)
+                        break;
+                if (*trv == '/') {
+                        *trv = '\0';
+                        if (stat(path, &sbuf))
+                                return (0);
+                        if (!S_ISDIR(sbuf.st_mode)) {
+                                errno = ENOTDIR;
+                                return (0);
+                        }
+                        *trv = '/';
+                        break;
+                }
+        }
+
+        for (;;) {
+                if ((fd=open(path, O_CREAT|O_EXCL|O_RDWR|O_BINARY, 0600)) >= 0)
+                        return (fd);
+                if (errno != EEXIST)
+                        return (0);
+
+                /* tricky little algorithm for backward compatibility */
+                for (trv = start;;) {
+                        if (!*trv)
+                                return (0);
+                        if (*trv == 'z')
+                                *trv++ = 'a';
+                        else {
+                                if (isdigit((unsigned char)*trv))
+                                        *trv = 'a';
+                                else
+                                        ++*trv;
+                                break;
+                        }
+                }
+        }
+        /*NOTREACHED*/
+}
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+static time_t _zip_d2u_time(int, int);
+static char *_zip_readfpstr(FILE *, unsigned int, int, struct zip_error *);
+static char *_zip_readstr(unsigned char **, int, int, struct zip_error *);
+static void _zip_u2d_time(time_t, unsigned short *, unsigned short *);
+static void _zip_write2(unsigned short, FILE *);
+static void _zip_write4(unsigned int, FILE *);
+
+
+
+void
+_zip_cdir_free(struct zip_cdir *cd)
+{
+    int i;
+
+    if (!cd)
+        return;
+
+    for (i=0; i<cd->nentry; i++)
+        _zip_dirent_finalize(cd->entry+i);
+    free(cd->comment);
+    free(cd->entry);
+    free(cd);
+}
+
+
+
+struct zip_cdir *
+_zip_cdir_new(int nentry, struct zip_error *error)
+{
+    struct zip_cdir *cd;
+    
+    if ((cd=(struct zip_cdir *)malloc(sizeof(*cd))) == NULL) {
+        _zip_error_set(error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+
+    if ((cd->entry=(struct zip_dirent *)malloc(sizeof(*(cd->entry))*nentry))
+        == NULL) {
+        _zip_error_set(error, ZIP_ER_MEMORY, 0);
+        free(cd);
+        return NULL;
+    }
+
+    /* entries must be initialized by caller */
+
+    cd->nentry = nentry;
+    cd->size = cd->offset = 0;
+    cd->comment = NULL;
+    cd->comment_len = 0;
+
+    return cd;
+}
+
+
+
+int
+_zip_cdir_write(struct zip_cdir *cd, FILE *fp, struct zip_error *error)
+{
+    int i;
+
+    cd->offset = ftello(fp);
+
+    for (i=0; i<cd->nentry; i++) {
+        if (_zip_dirent_write(cd->entry+i, fp, 0, error) != 0)
+            return -1;
+    }
+
+    cd->size = ftello(fp) - cd->offset;
+    
+    /* clearerr(fp); */
+    fwrite(EOCD_MAGIC, 1, 4, fp);
+    _zip_write4(0, fp);
+    _zip_write2((unsigned short)cd->nentry, fp);
+    _zip_write2((unsigned short)cd->nentry, fp);
+    _zip_write4(cd->size, fp);
+    _zip_write4(cd->offset, fp);
+    _zip_write2(cd->comment_len, fp);
+    fwrite(cd->comment, 1, cd->comment_len, fp);
+
+    if (ferror(fp)) {
+        _zip_error_set(error, ZIP_ER_WRITE, errno);
+        return -1;
+    }
+
+    return 0;
+}
+
+
+
+void
+_zip_dirent_finalize(struct zip_dirent *zde)
+{
+    free(zde->filename);
+    zde->filename = NULL;
+    free(zde->extrafield);
+    zde->extrafield = NULL;
+    free(zde->comment);
+    zde->comment = NULL;
+}
+
+
+
+void
+_zip_dirent_init(struct zip_dirent *de)
+{
+    de->version_madeby = 0;
+    de->version_needed = 20; /* 2.0 */
+    de->bitflags = 0;
+    de->comp_method = 0;
+    de->last_mod = 0;
+    de->crc = 0;
+    de->comp_size = 0;
+    de->uncomp_size = 0;
+    de->filename = NULL;
+    de->filename_len = 0;
+    de->extrafield = NULL;
+    de->extrafield_len = 0;
+    de->comment = NULL;
+    de->comment_len = 0;
+    de->disk_number = 0;
+    de->int_attrib = 0;
+    de->ext_attrib = 0;
+    de->offset = 0;
+}
+
+
+
+/* _zip_dirent_read(zde, fp, bufp, left, localp, error):
+   Fills the zip directory entry zde.
+
+   If bufp is non-NULL, data is taken from there and bufp is advanced
+   by the amount of data used; no more than left bytes are used.
+   Otherwise data is read from fp as needed.
+
+   If localp != 0, it reads a local header instead of a central
+   directory entry.
+
+   Returns 0 if successful. On error, error is filled in and -1 is
+   returned.
+*/
+
+int
+_zip_dirent_read(struct zip_dirent *zde, FILE *fp,
+                 unsigned char **bufp, unsigned int left, int localp,
+                 struct zip_error *error)
+{
+    unsigned char buf[CDENTRYSIZE];
+    unsigned char *cur;
+    unsigned short dostime, dosdate;
+    unsigned int size;
+
+    if (localp)
+        size = LENTRYSIZE;
+    else
+        size = CDENTRYSIZE;
+    
+    if (bufp) {
+        /* use data from buffer */
+        cur = *bufp;
+        if (left < size) {
+            _zip_error_set(error, ZIP_ER_NOZIP, 0);
+            return -1;
+        }
+    }
+    else {
+        /* read entry from disk */
+        if ((fread(buf, 1, size, fp)<size)) {
+            _zip_error_set(error, ZIP_ER_READ, errno);
+            return -1;
+        }
+        left = size;
+        cur = buf;
+    }
+
+    if (memcmp(cur, (localp ? LOCAL_MAGIC : CENTRAL_MAGIC), 4) != 0) {
+        _zip_error_set(error, ZIP_ER_NOZIP, 0);
+        return -1;
+    }
+    cur += 4;
+
+    
+    /* convert buffercontents to zip_dirent */
+    
+    if (!localp)
+        zde->version_madeby = _zip_read2(&cur);
+    else
+        zde->version_madeby = 0;
+    zde->version_needed = _zip_read2(&cur);
+    zde->bitflags = _zip_read2(&cur);
+    zde->comp_method = _zip_read2(&cur);
+    
+    /* convert to time_t */
+    dostime = _zip_read2(&cur);
+    dosdate = _zip_read2(&cur);
+    zde->last_mod = _zip_d2u_time(dostime, dosdate);
+    
+    zde->crc = _zip_read4(&cur);
+    zde->comp_size = _zip_read4(&cur);
+    zde->uncomp_size = _zip_read4(&cur);
+    
+    zde->filename_len = _zip_read2(&cur);
+    zde->extrafield_len = _zip_read2(&cur);
+    
+    if (localp) {
+        zde->comment_len = 0;
+        zde->disk_number = 0;
+        zde->int_attrib = 0;
+        zde->ext_attrib = 0;
+        zde->offset = 0;
+    } else {
+        zde->comment_len = _zip_read2(&cur);
+        zde->disk_number = _zip_read2(&cur);
+        zde->int_attrib = _zip_read2(&cur);
+        zde->ext_attrib = _zip_read4(&cur);
+        zde->offset = _zip_read4(&cur);
+    }
+
+    zde->filename = NULL;
+    zde->extrafield = NULL;
+    zde->comment = NULL;
+
+    if (bufp) {
+        if (left < CDENTRYSIZE + (zde->filename_len+zde->extrafield_len
+                                  +zde->comment_len)) {
+            _zip_error_set(error, ZIP_ER_NOZIP, 0);
+            return -1;
+        }
+
+        if (zde->filename_len) {
+            zde->filename = _zip_readstr(&cur, zde->filename_len, 1, error);
+            if (!zde->filename)
+                    return -1;
+        }
+
+        if (zde->extrafield_len) {
+            zde->extrafield = _zip_readstr(&cur, zde->extrafield_len, 0,
+                                           error);
+            if (!zde->extrafield)
+                return -1;
+        }
+
+        if (zde->comment_len) {
+            zde->comment = _zip_readstr(&cur, zde->comment_len, 0, error);
+            if (!zde->comment)
+                return -1;
+        }
+    }
+    else {
+        if (zde->filename_len) {
+            zde->filename = _zip_readfpstr(fp, zde->filename_len, 1, error);
+            if (!zde->filename)
+                    return -1;
+        }
+
+        if (zde->extrafield_len) {
+            zde->extrafield = _zip_readfpstr(fp, zde->extrafield_len, 0,
+                                             error);
+            if (!zde->extrafield)
+                return -1;
+        }
+
+        if (zde->comment_len) {
+            zde->comment = _zip_readfpstr(fp, zde->comment_len, 0, error);
+            if (!zde->comment)
+                return -1;
+        }
+    }
+
+    if (bufp)
+      *bufp = cur;
+
+    return 0;
+}
+
+
+
+/* _zip_dirent_torrent_normalize(de);
+   Set values suitable for torrentzip.
+*/
+
+void
+_zip_dirent_torrent_normalize(struct zip_dirent *de)
+{
+    static struct tm torrenttime;
+    static time_t last_mod = 0;
+
+    if (last_mod == 0) {
+#ifdef HAVE_STRUCT_TM_TM_ZONE
+        time_t now;
+        struct tm *l;
+#endif
+
+        torrenttime.tm_sec = 0;
+        torrenttime.tm_min = 32;
+        torrenttime.tm_hour = 23;
+        torrenttime.tm_mday = 24;
+        torrenttime.tm_mon = 11;
+        torrenttime.tm_year = 96;
+        torrenttime.tm_wday = 0;
+        torrenttime.tm_yday = 0;
+        torrenttime.tm_isdst = 0;
+
+#ifdef HAVE_STRUCT_TM_TM_ZONE
+        time(&now);
+        l = localtime(&now);
+        torrenttime.tm_gmtoff = l->tm_gmtoff;
+        torrenttime.tm_zone = l->tm_zone;
+#endif
+
+        last_mod = mktime(&torrenttime);
+    }
+    
+    de->version_madeby = 0;
+    de->version_needed = 20; /* 2.0 */
+    de->bitflags = 2; /* maximum compression */
+    de->comp_method = ZIP_CM_DEFLATE;
+    de->last_mod = last_mod;
+
+    de->disk_number = 0;
+    de->int_attrib = 0;
+    de->ext_attrib = 0;
+    de->offset = 0;
+
+    free(de->extrafield);
+    de->extrafield = NULL;
+    de->extrafield_len = 0;
+    free(de->comment);
+    de->comment = NULL;
+    de->comment_len = 0;
+}
+
+
+
+/* _zip_dirent_write(zde, fp, localp, error):
+   Writes zip directory entry zde to file fp.
+
+   If localp != 0, it writes a local header instead of a central
+   directory entry.
+
+   Returns 0 if successful. On error, error is filled in and -1 is
+   returned.
+*/
+
+int
+_zip_dirent_write(struct zip_dirent *zde, FILE *fp, int localp,
+                  struct zip_error *error)
+{
+    unsigned short dostime, dosdate;
+
+    fwrite(localp ? LOCAL_MAGIC : CENTRAL_MAGIC, 1, 4, fp);
+
+    if (!localp)
+        _zip_write2(zde->version_madeby, fp);
+    _zip_write2(zde->version_needed, fp);
+    _zip_write2(zde->bitflags, fp);
+    _zip_write2(zde->comp_method, fp);
+
+    _zip_u2d_time(zde->last_mod, &dostime, &dosdate);
+    _zip_write2(dostime, fp);
+    _zip_write2(dosdate, fp);
+    
+    _zip_write4(zde->crc, fp);
+    _zip_write4(zde->comp_size, fp);
+    _zip_write4(zde->uncomp_size, fp);
+    
+    _zip_write2(zde->filename_len, fp);
+    _zip_write2(zde->extrafield_len, fp);
+    
+    if (!localp) {
+        _zip_write2(zde->comment_len, fp);
+        _zip_write2(zde->disk_number, fp);
+        _zip_write2(zde->int_attrib, fp);
+        _zip_write4(zde->ext_attrib, fp);
+        _zip_write4(zde->offset, fp);
+    }
+
+    if (zde->filename_len)
+        fwrite(zde->filename, 1, zde->filename_len, fp);
+
+    if (zde->extrafield_len)
+        fwrite(zde->extrafield, 1, zde->extrafield_len, fp);
+
+    if (!localp) {
+        if (zde->comment_len)
+            fwrite(zde->comment, 1, zde->comment_len, fp);
+    }
+
+    if (ferror(fp)) {
+        _zip_error_set(error, ZIP_ER_WRITE, errno);
+        return -1;
+    }
+
+    return 0;
+}
+
+
+
+static time_t
+_zip_d2u_time(int dtime, int ddate)
+{
+    struct tm *tm;
+    time_t now;
+
+    now = time(NULL);
+    tm = localtime(&now);
+    /* let mktime decide if DST is in effect */
+    tm->tm_isdst = -1;
+    
+    tm->tm_year = ((ddate>>9)&127) + 1980 - 1900;
+    tm->tm_mon = ((ddate>>5)&15) - 1;
+    tm->tm_mday = ddate&31;
+
+    tm->tm_hour = (dtime>>11)&31;
+    tm->tm_min = (dtime>>5)&63;
+    tm->tm_sec = (dtime<<1)&62;
+
+    return mktime(tm);
+}
+
+
+
+unsigned short
+_zip_read2(unsigned char **a)
+{
+    unsigned short ret;
+
+    ret = (*a)[0]+((*a)[1]<<8);
+    *a += 2;
+
+    return ret;
+}
+
+
+
+unsigned int
+_zip_read4(unsigned char **a)
+{
+    unsigned int ret;
+
+    ret = ((((((*a)[3]<<8)+(*a)[2])<<8)+(*a)[1])<<8)+(*a)[0];
+    *a += 4;
+
+    return ret;
+}
+
+
+
+static char *
+_zip_readfpstr(FILE *fp, unsigned int len, int nulp, struct zip_error *error)
+{
+    char *r, *o;
+
+    r = (char *)malloc(nulp ? len+1 : len);
+    if (!r) {
+        _zip_error_set(error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+
+    if (fread(r, 1, len, fp)<len) {
+        free(r);
+        _zip_error_set(error, ZIP_ER_READ, errno);
+        return NULL;
+    }
+
+    if (nulp) {
+        /* replace any in-string NUL characters with spaces */
+        r[len] = 0;
+        for (o=r; o<r+len; o++)
+            if (*o == '\0')
+                *o = ' ';
+    }
+    
+    return r;
+}
+
+
+
+static char *
+_zip_readstr(unsigned char **buf, int len, int nulp, struct zip_error *error)
+{
+    char *r, *o;
+
+    r = (char *)malloc(nulp ? len+1 : len);
+    if (!r) {
+        _zip_error_set(error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+    
+    memcpy(r, *buf, len);
+    *buf += len;
+
+    if (nulp) {
+        /* replace any in-string NUL characters with spaces */
+        r[len] = 0;
+        for (o=r; o<r+len; o++)
+            if (*o == '\0')
+                *o = ' ';
+    }
+
+    return r;
+}
+
+
+
+static void
+_zip_write2(unsigned short i, FILE *fp)
+{
+    putc(i&0xff, fp);
+    putc((i>>8)&0xff, fp);
+
+    return;
+}
+
+
+
+static void
+_zip_write4(unsigned int i, FILE *fp)
+{
+    putc(i&0xff, fp);
+    putc((i>>8)&0xff, fp);
+    putc((i>>16)&0xff, fp);
+    putc((i>>24)&0xff, fp);
+    
+    return;
+}
+
+
+
+static void
+_zip_u2d_time(time_t time, unsigned short *dtime, unsigned short *ddate)
+{
+    struct tm *tm;
+
+    tm = localtime(&time);
+    *ddate = ((tm->tm_year+1900-1980)<<9) + ((tm->tm_mon+1)<<5)
+        + tm->tm_mday;
+    *dtime = ((tm->tm_hour)<<11) + ((tm->tm_min)<<5)
+        + ((tm->tm_sec)>>1);
+
+    return;
+}
+
+
+
+ZIP_EXTERN int
+zip_delete(struct zip *za, int idx)
+{
+    if (idx < 0 || idx >= za->nentry) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    /* allow duplicate file names, because the file will
+     * be removed directly afterwards */
+    if (_zip_unchange(za, idx, 1) != 0)
+        return -1;
+
+    za->entry[idx].state = ZIP_ST_DELETED;
+
+    return 0;
+}
+
+
+
+ZIP_EXTERN void
+zip_error_clear(struct zip *za)
+{
+    _zip_error_clear(&za->error);
+}
+
+
+ZIP_EXTERN int
+zip_add(struct zip *za, const char *name, struct zip_source *source)
+{
+    if (name == NULL || source == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+        
+    return _zip_replace(za, -1, name, source);
+}
+
+
+ZIP_EXTERN int
+zip_error_get_sys_type(int ze)
+{
+    if (ze < 0 || ze >= _zip_nerr_str)
+        return 0;
+
+    return _zip_err_type[ze];
+}
+
+
+ZIP_EXTERN void
+zip_error_get(struct zip *za, int *zep, int *sep)
+{
+    _zip_error_get(&za->error, zep, sep);
+}
+
+
+const char * const _zip_err_str[] = {
+    "No error",
+    "Multi-disk zip archives not supported",
+    "Renaming temporary file failed",
+    "Closing zip archive failed",
+    "Seek error",
+    "Read error",
+    "Write error",
+    "CRC error",
+    "Containing zip archive was closed",
+    "No such file",
+    "File already exists",
+    "Can't open file",
+    "Failure to create temporary file",
+    "Zlib error",
+    "Malloc failure",
+    "Entry has been changed",
+    "Compression method not supported",
+    "Premature EOF",
+    "Invalid argument",
+    "Not a zip archive",
+    "Internal error",
+    "Zip archive inconsistent",
+    "Can't remove file",
+    "Entry has been deleted",
+};
+
+const int _zip_nerr_str = sizeof(_zip_err_str)/sizeof(_zip_err_str[0]);
+
+#define N ZIP_ET_NONE
+#define S ZIP_ET_SYS
+#define Z ZIP_ET_ZLIB
+
+const int _zip_err_type[] = {
+    N,
+    N,
+    S,
+    S,
+    S,
+    S,
+    S,
+    N,
+    N,
+    N,
+    N,
+    S,
+    S,
+    Z,
+    N,
+    N,
+    N,
+    N,
+    N,
+    N,
+    N,
+    N,
+    S,
+    N,
+};
+
+
+struct zip_entry *
+_zip_entry_new(struct zip *za)
+{
+    struct zip_entry *ze;
+    if (!za) {
+        ze = (struct zip_entry *)malloc(sizeof(struct zip_entry));
+        if (!ze) {
+            _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+            return NULL;
+        }
+    }
+    else {
+        if (za->nentry >= za->nentry_alloc-1) {
+            za->nentry_alloc += 16;
+            za->entry = (struct zip_entry *)realloc(za->entry,
+                                                    sizeof(struct zip_entry)
+                                                    * za->nentry_alloc);
+            if (!za->entry) {
+                _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+                return NULL;
+            }
+        }
+        ze = za->entry+za->nentry;
+    }
+
+    ze->state = ZIP_ST_UNCHANGED;
+
+    ze->ch_filename = NULL;
+    ze->ch_comment = NULL;
+    ze->ch_comment_len = -1;
+    ze->source = NULL;
+
+    if (za)
+        za->nentry++;
+
+    return ze;
+}
+
+
+void
+_zip_entry_free(struct zip_entry *ze)
+{
+    free(ze->ch_filename);
+    ze->ch_filename = NULL;
+    free(ze->ch_comment);
+    ze->ch_comment = NULL;
+    ze->ch_comment_len = -1;
+
+    _zip_unchange_data(ze);
+}
+
+
+static int add_data(struct zip *, struct zip_source *, struct zip_dirent *,
+                    FILE *);
+static int add_data_comp(zip_source_callback, void *, struct zip_stat *,
+                         FILE *, struct zip_error *);
+static int add_data_uncomp(struct zip *, zip_source_callback, void *,
+                           struct zip_stat *, FILE *);
+static void ch_set_error(struct zip_error *, zip_source_callback, void *);
+static int copy_data(FILE *, myoff_t, FILE *, struct zip_error *);
+static int write_cdir(struct zip *, struct zip_cdir *, FILE *);
+static int _zip_cdir_set_comment(struct zip_cdir *, struct zip *);
+static int _zip_changed(struct zip *, int *);
+static char *_zip_create_temp_output(struct zip *, FILE **);
+static int _zip_torrentzip_cmp(const void *, const void *);
+
+
+
+struct filelist {
+    int idx;
+    const char *name;
+};
+
+
+
+ZIP_EXTERN int
+zip_close(struct zip *za)
+{
+    int survivors;
+    int i, j, error;
+    char *temp;
+    FILE *out;
+    mode_t mask;
+    struct zip_cdir *cd;
+    struct zip_dirent de;
+    struct filelist *filelist;
+    int reopen_on_error;
+    int new_torrentzip;
+
+    reopen_on_error = 0;
+
+    if (za == NULL)
+        return -1;
+
+    if (!_zip_changed(za, &survivors)) {
+        _zip_free(za);
+        return 0;
+    }
+
+    /* don't create zip files with no entries */
+    if (survivors == 0) {
+        if (za->zn && za->zp) {
+            if (remove(za->zn) != 0) {
+                _zip_error_set(&za->error, ZIP_ER_REMOVE, errno);
+                return -1;
+            }
+        }
+        _zip_free(za);
+        return 0;
+    }               
+
+    if ((filelist=(struct filelist *)malloc(sizeof(filelist[0])*survivors))
+        == NULL)
+        return -1;
+
+    if ((cd=_zip_cdir_new(survivors, &za->error)) == NULL) {
+        free(filelist);
+        return -1;
+    }
+
+    for (i=0; i<survivors; i++)
+        _zip_dirent_init(&cd->entry[i]);
+
+    /* archive comment is special for torrentzip */
+    if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0)) {
+        cd->comment = _zip_memdup(TORRENT_SIG "XXXXXXXX",
+                                  TORRENT_SIG_LEN + TORRENT_CRC_LEN,
+                                  &za->error);
+        if (cd->comment == NULL) {
+            _zip_cdir_free(cd);
+            free(filelist);
+            return -1;
+        }
+        cd->comment_len = TORRENT_SIG_LEN + TORRENT_CRC_LEN;
+    }
+    else if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, ZIP_FL_UNCHANGED) == 0) {
+        if (_zip_cdir_set_comment(cd, za) == -1) {
+            _zip_cdir_free(cd);
+            free(filelist);
+            return -1;
+        }
+    }
+
+    if ((temp=_zip_create_temp_output(za, &out)) == NULL) {
+        _zip_cdir_free(cd);
+        return -1;
+    }
+
+
+    /* create list of files with index into original archive  */
+    for (i=j=0; i<za->nentry; i++) {
+        if (za->entry[i].state == ZIP_ST_DELETED)
+            continue;
+
+        filelist[j].idx = i;
+        filelist[j].name = zip_get_name(za, i, 0);
+        j++;
+    }
+    if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0))
+        qsort(filelist, survivors, sizeof(filelist[0]),
+              _zip_torrentzip_cmp);
+
+    new_torrentzip = (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0) == 1
+                      && zip_get_archive_flag(za, ZIP_AFL_TORRENT,
+                                              ZIP_FL_UNCHANGED) == 0);
+    error = 0;
+    for (j=0; j<survivors; j++) {
+        i = filelist[j].idx;
+
+        /* create new local directory entry */
+        if (ZIP_ENTRY_DATA_CHANGED(za->entry+i) || new_torrentzip) {
+            _zip_dirent_init(&de);
+
+            if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0))
+                _zip_dirent_torrent_normalize(&de);
+                
+            /* use it as central directory entry */
+            memcpy(cd->entry+j, &de, sizeof(cd->entry[j]));
+
+            /* set/update file name */
+            if (za->entry[i].ch_filename == NULL) {
+                if (za->entry[i].state == ZIP_ST_ADDED) {
+                    de.filename = strdup("-");
+                    de.filename_len = 1;
+                    cd->entry[j].filename = "-";
+                }
+                else {
+                    de.filename = strdup(za->cdir->entry[i].filename);
+                    de.filename_len = strlen(de.filename);
+                    cd->entry[j].filename = za->cdir->entry[i].filename;
+                    cd->entry[j].filename_len = de.filename_len;
+                }
+            }
+        }
+        else {
+            /* copy existing directory entries */
+            if (fseeko(za->zp, za->cdir->entry[i].offset, SEEK_SET) != 0) {
+                _zip_error_set(&za->error, ZIP_ER_SEEK, errno);
+                error = 1;
+                break;
+            }
+            if (_zip_dirent_read(&de, za->zp, NULL, 0, 1, &za->error) != 0) {
+                error = 1;
+                break;
+            }
+            if (de.bitflags & ZIP_GPBF_DATA_DESCRIPTOR) {
+                de.crc = za->cdir->entry[i].crc;
+                de.comp_size = za->cdir->entry[i].comp_size;
+                de.uncomp_size = za->cdir->entry[i].uncomp_size;
+                de.bitflags &= ~ZIP_GPBF_DATA_DESCRIPTOR;
+            }
+            memcpy(cd->entry+j, za->cdir->entry+i, sizeof(cd->entry[j]));
+        }
+
+        if (za->entry[i].ch_filename) {
+            free(de.filename);
+            if ((de.filename=strdup(za->entry[i].ch_filename)) == NULL) {
+                error = 1;
+                break;
+            }
+            de.filename_len = strlen(de.filename);
+            cd->entry[j].filename = za->entry[i].ch_filename;
+            cd->entry[j].filename_len = de.filename_len;
+        }
+
+        if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0) == 0
+            && za->entry[i].ch_comment_len != -1) {
+            /* as the rest of cd entries, its malloc/free is done by za */
+            cd->entry[j].comment = za->entry[i].ch_comment;
+            cd->entry[j].comment_len = za->entry[i].ch_comment_len;
+        }
+
+        cd->entry[j].offset = ftello(out);
+
+        if (ZIP_ENTRY_DATA_CHANGED(za->entry+i) || new_torrentzip) {
+            struct zip_source *zs;
+
+            zs = NULL;
+            if (!ZIP_ENTRY_DATA_CHANGED(za->entry+i)) {
+                if ((zs=zip_source_zip(za, za, i, ZIP_FL_RECOMPRESS, 0, -1))
+                    == NULL) {
+                    error = 1;
+                    break;
+                }
+            }
+
+            if (add_data(za, zs ? zs : za->entry[i].source, &de, out) < 0) {
+                error = 1;
+                break;
+            }
+            cd->entry[j].last_mod = de.last_mod;
+            cd->entry[j].comp_method = de.comp_method;
+            cd->entry[j].comp_size = de.comp_size;
+            cd->entry[j].uncomp_size = de.uncomp_size;
+            cd->entry[j].crc = de.crc;
+        }
+        else {
+            if (_zip_dirent_write(&de, out, 1, &za->error) < 0) {
+                error = 1;
+                break;
+            }
+            /* we just read the local dirent, file is at correct position */
+            if (copy_data(za->zp, cd->entry[j].comp_size, out,
+                          &za->error) < 0) {
+                error = 1;
+                break;
+            }
+        }
+
+        _zip_dirent_finalize(&de);
+    }
+
+    if (!error) {
+        if (write_cdir(za, cd, out) < 0)
+            error = 1;
+    }
+   
+    /* pointers in cd entries are owned by za */
+    cd->nentry = 0;
+    _zip_cdir_free(cd);
+
+    if (error) {
+        _zip_dirent_finalize(&de);
+        fclose(out);
+        remove(temp);
+        free(temp);
+        return -1;
+    }
+
+    if (fclose(out) != 0) {
+        _zip_error_set(&za->error, ZIP_ER_CLOSE, errno);
+        remove(temp);
+        free(temp);
+        return -1;
+    }
+    
+    if (za->zp) {
+        fclose(za->zp);
+        za->zp = NULL;
+        reopen_on_error = 1;
+    }
+    if (_zip_rename(temp, za->zn) != 0) {
+        _zip_error_set(&za->error, ZIP_ER_RENAME, errno);
+        remove(temp);
+        free(temp);
+        if (reopen_on_error) {
+            /* ignore errors, since we're already in an error case */
+            za->zp = fopen(za->zn, "rb");
+        }
+        return -1;
+    }
+    mask = umask(0);
+    umask(mask);
+    chmod(za->zn, 0666&~mask);
+
+    _zip_free(za);
+    free(temp);
+    
+    return 0;
+}
+
+
+
+static int
+add_data(struct zip *za, struct zip_source *zs, struct zip_dirent *de, FILE *ft)
+{
+    myoff_t offstart, offend;
+    zip_source_callback cb;
+    void *ud;
+    struct zip_stat st;
+    
+    cb = zs->f;
+    ud = zs->ud;
+
+    if (cb(ud, &st, sizeof(st), ZIP_SOURCE_STAT) < (ssize_t)sizeof(st)) {
+        ch_set_error(&za->error, cb, ud);
+        return -1;
+    }
+
+    if (cb(ud, NULL, 0, ZIP_SOURCE_OPEN) < 0) {
+        ch_set_error(&za->error, cb, ud);
+        return -1;
+    }
+
+    offstart = ftello(ft);
+
+    if (_zip_dirent_write(de, ft, 1, &za->error) < 0)
+        return -1;
+
+    if (st.comp_method != ZIP_CM_STORE) {
+        if (add_data_comp(cb, ud, &st, ft, &za->error) < 0)
+            return -1;
+    }
+    else {
+        if (add_data_uncomp(za, cb, ud, &st, ft) < 0)
+            return -1;
+    }
+
+    if (cb(ud, NULL, 0, ZIP_SOURCE_CLOSE) < 0) {
+        ch_set_error(&za->error, cb, ud);
+        return -1;
+    }
+
+    offend = ftello(ft);
+
+    if (fseeko(ft, offstart, SEEK_SET) < 0) {
+        _zip_error_set(&za->error, ZIP_ER_SEEK, errno);
+        return -1;
+    }
+
+    
+    de->last_mod = st.mtime;
+    de->comp_method = st.comp_method;
+    de->crc = st.crc;
+    de->uncomp_size = st.size;
+    de->comp_size = st.comp_size;
+
+    if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0))
+        _zip_dirent_torrent_normalize(de);
+
+    if (_zip_dirent_write(de, ft, 1, &za->error) < 0)
+        return -1;
+    
+    if (fseeko(ft, offend, SEEK_SET) < 0) {
+        _zip_error_set(&za->error, ZIP_ER_SEEK, errno);
+        return -1;
+    }
+
+    return 0;
+}
+
+
+
+static int
+add_data_comp(zip_source_callback cb, void *ud, struct zip_stat *st,FILE *ft,
+              struct zip_error *error)
+{
+    char buf[BUFSIZE];
+    ssize_t n;
+
+    st->comp_size = 0;
+    while ((n=cb(ud, buf, sizeof(buf), ZIP_SOURCE_READ)) > 0) {
+        if (fwrite(buf, 1, n, ft) != (size_t)n) {
+            _zip_error_set(error, ZIP_ER_WRITE, errno);
+            return -1;
+        }
+        
+        st->comp_size += n;
+    }
+    if (n < 0) {
+        ch_set_error(error, cb, ud);
+        return -1;
+    }        
+
+    return 0;
+}
+
+
+
+static int
+add_data_uncomp(struct zip *za, zip_source_callback cb, void *ud,
+                struct zip_stat *st, FILE *ft)
+{
+    char b1[BUFSIZE], b2[BUFSIZE];
+    int end, flush, ret;
+    ssize_t n;
+    size_t n2;
+    z_stream zstr;
+    int mem_level;
+
+    st->comp_method = ZIP_CM_DEFLATE;
+    st->comp_size = st->size = 0;
+    st->crc = crc32(0, NULL, 0);
+
+    zstr.zalloc = Z_NULL;
+    zstr.zfree = Z_NULL;
+    zstr.opaque = NULL;
+    zstr.avail_in = 0;
+    zstr.avail_out = 0;
+
+    if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0))
+        mem_level = TORRENT_MEM_LEVEL;
+    else
+        mem_level = MAX_MEM_LEVEL;
+
+    /* -MAX_WBITS: undocumented feature of zlib to _not_ write a zlib header */
+    deflateInit2(&zstr, Z_BEST_COMPRESSION, Z_DEFLATED, -MAX_WBITS, mem_level,
+                 Z_DEFAULT_STRATEGY);
+
+    zstr.next_out = (Bytef *)b2;
+    zstr.avail_out = sizeof(b2);
+    zstr.avail_in = 0;
+
+    flush = 0;
+    end = 0;
+    while (!end) {
+        if (zstr.avail_in == 0 && !flush) {
+            if ((n=cb(ud, b1, sizeof(b1), ZIP_SOURCE_READ)) < 0) {
+                ch_set_error(&za->error, cb, ud);
+                deflateEnd(&zstr);
+                return -1;
+            }
+            if (n > 0) {
+                zstr.avail_in = n;
+                zstr.next_in = (Bytef *)b1;
+                st->size += n;
+                st->crc = crc32(st->crc, (Bytef *)b1, n);
+            }
+            else
+                flush = Z_FINISH;
+        }
+
+        ret = deflate(&zstr, flush);
+        if (ret != Z_OK && ret != Z_STREAM_END) {
+            _zip_error_set(&za->error, ZIP_ER_ZLIB, ret);
+            return -1;
+        }
+        
+        if (zstr.avail_out != sizeof(b2)) {
+            n2 = sizeof(b2) - zstr.avail_out;
+            
+            if (fwrite(b2, 1, n2, ft) != n2) {
+                _zip_error_set(&za->error, ZIP_ER_WRITE, errno);
+                return -1;
+            }
+        
+            zstr.next_out = (Bytef *)b2;
+            zstr.avail_out = sizeof(b2);
+            st->comp_size += n2;
+        }
+
+        if (ret == Z_STREAM_END) {
+            deflateEnd(&zstr);
+            end = 1;
+        }
+    }
+
+    return 0;
+}
+
+
+
+static void
+ch_set_error(struct zip_error *error, zip_source_callback cb, void *ud)
+{
+    int e[2];
+
+    if ((cb(ud, e, sizeof(e), ZIP_SOURCE_ERROR)) < (ssize_t)sizeof(e)) {
+        error->zip_err = ZIP_ER_INTERNAL;
+        error->sys_err = 0;
+    }
+    else {
+        error->zip_err = e[0];
+        error->sys_err = e[1];
+    }
+}
+
+
+
+static int
+copy_data(FILE *fs, myoff_t len, FILE *ft, struct zip_error *error)
+{
+    char buf[BUFSIZE];
+    int n, nn;
+
+    if (len == 0)
+        return 0;
+
+    while (len > 0) {
+        nn = len > sizeof(buf) ? sizeof(buf) : len;
+        if ((n=fread(buf, 1, nn, fs)) < 0) {
+            _zip_error_set(error, ZIP_ER_READ, errno);
+            return -1;
+        }
+        else if (n == 0) {
+            _zip_error_set(error, ZIP_ER_EOF, 0);
+            return -1;
+        }
+
+        if (fwrite(buf, 1, n, ft) != (size_t)n) {
+            _zip_error_set(error, ZIP_ER_WRITE, errno);
+            return -1;
+        }
+        
+        len -= n;
+    }
+
+    return 0;
+}
+
+
+
+static int
+write_cdir(struct zip *za, struct zip_cdir *cd, FILE *out)
+{
+    myoff_t offset;
+    uLong crc;
+    char buf[TORRENT_CRC_LEN+1];
+    
+    if (_zip_cdir_write(cd, out, &za->error) < 0)
+        return -1;
+    
+    if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0) == 0)
+        return 0;
+
+
+    /* fix up torrentzip comment */
+
+    offset = ftello(out);
+
+    if (_zip_filerange_crc(out, cd->offset, cd->size, &crc, &za->error) < 0)
+        return -1;
+
+    snprintf(buf, sizeof(buf), "%08lX", (long)crc);
+
+    if (fseeko(out, offset-TORRENT_CRC_LEN, SEEK_SET) < 0) {
+        _zip_error_set(&za->error, ZIP_ER_SEEK, errno);
+        return -1;
+    }
+
+    if (fwrite(buf, TORRENT_CRC_LEN, 1, out) != 1) {
+        _zip_error_set(&za->error, ZIP_ER_WRITE, errno);
+        return -1;
+    }
+
+    return 0;
+}
+
+
+
+static int
+_zip_cdir_set_comment(struct zip_cdir *dest, struct zip *src)
+{
+    if (src->ch_comment_len != -1) {
+        dest->comment = _zip_memdup(src->ch_comment,
+                                    src->ch_comment_len, &src->error);
+        if (dest->comment == NULL)
+            return -1;
+        dest->comment_len = src->ch_comment_len;
+    } else {
+        if (src->cdir && src->cdir->comment) {
+            dest->comment = _zip_memdup(src->cdir->comment,
+                                        src->cdir->comment_len, &src->error);
+            if (dest->comment == NULL)
+                return -1;
+            dest->comment_len = src->cdir->comment_len;
+        }
+    }
+
+    return 0;
+}
+
+
+
+static int
+_zip_changed(struct zip *za, int *survivorsp)
+{
+    int changed, i, survivors;
+
+    changed = survivors = 0;
+
+    if (za->ch_comment_len != -1
+        || za->ch_flags != za->flags)
+        changed = 1;
+
+    for (i=0; i<za->nentry; i++) {
+        if ((za->entry[i].state != ZIP_ST_UNCHANGED)
+            || (za->entry[i].ch_comment_len != -1))
+            changed = 1;
+        if (za->entry[i].state != ZIP_ST_DELETED)
+            survivors++;
+    }
+
+    *survivorsp = survivors;
+
+    return changed;
+}
+
+
+
+static char *
+_zip_create_temp_output(struct zip *za, FILE **outp)
+{
+    char *temp;
+    int tfd;
+    FILE *tfp;
+    
+    if ((temp=(char *)malloc(strlen(za->zn)+8)) == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+
+    sprintf(temp, "%s.XXXXXX", za->zn);
+
+    if ((tfd=mkstemp(temp)) == -1) {
+        _zip_error_set(&za->error, ZIP_ER_TMPOPEN, errno);
+        free(temp);
+        return NULL;
+    }
+    
+    if ((tfp=fdopen(tfd, "r+b")) == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_TMPOPEN, errno);
+        close(tfd);
+        remove(temp);
+        free(temp);
+        return NULL;
+    }
+
+    *outp = tfp;
+    return temp;
+}
+
+
+
+static int
+_zip_torrentzip_cmp(const void *a, const void *b)
+{
+    return strcasecmp(((const struct filelist *)a)->name,
+                      ((const struct filelist *)b)->name);
+}
+
+
+
+ZIP_EXTERN int
+zip_add_dir(struct zip *za, const char *name)
+{
+    int len, ret;
+    char *s;
+    struct zip_source *source;
+
+    if (name == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    s = NULL;
+    len = strlen(name);
+
+    if (name[len-1] != '/') {
+        if ((s=(char *)malloc(len+2)) == NULL) {
+            _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+            return -1;
+        }
+        strcpy(s, name);
+        s[len] = '/';
+        s[len+1] = '\0';
+    }
+
+    if ((source=zip_source_buffer(za, NULL, 0, 0)) == NULL) {
+        free(s);
+        return -1;
+    }
+        
+    ret = _zip_replace(za, -1, s ? s : name, source);
+
+    free(s);
+    if (ret < 0)
+        zip_source_free(source);
+
+    return ret;
+}
+
+
+ZIP_EXTERN int
+zip_error_to_str(char *buf, size_t len, int ze, int se)
+{
+    const char *zs, *ss;
+
+    if (ze < 0 || ze >= _zip_nerr_str)
+        return snprintf(buf, len, "Unknown error %d", ze);
+
+    zs = _zip_err_str[ze];
+        
+    switch (_zip_err_type[ze]) {
+    case ZIP_ET_SYS:
+        ss = strerror(se);
+        break;
+        
+    case ZIP_ET_ZLIB:
+        ss = zError(se);
+        break;
+        
+    default:
+        ss = NULL;
+    }
+
+    return snprintf(buf, len, "%s%s%s",
+                    zs, (ss ? ": " : ""), (ss ? ss : ""));
+}
+
+
+ZIP_EXTERN void
+zip_file_error_clear(struct zip_file *zf)
+{
+    _zip_error_clear(&zf->error);
+}
+
+
+ZIP_EXTERN int
+zip_fclose(struct zip_file *zf)
+{
+    int i, ret;
+    
+    if (zf->zstr)
+        inflateEnd(zf->zstr);
+    free(zf->buffer);
+    free(zf->zstr);
+
+    for (i=0; i<zf->za->nfile; i++) {
+        if (zf->za->file[i] == zf) {
+            zf->za->file[i] = zf->za->file[zf->za->nfile-1];
+            zf->za->nfile--;
+            break;
+        }
+    }
+
+    ret = 0;
+    if (zf->error.zip_err)
+        ret = zf->error.zip_err;
+    else if ((zf->flags & ZIP_ZF_CRC) && (zf->flags & ZIP_ZF_EOF)) {
+        /* if EOF, compare CRC */
+        if (zf->crc_orig != zf->crc)
+            ret = ZIP_ER_CRC;
+    }
+
+    free(zf);
+    return ret;
+}
+
+
+int
+_zip_filerange_crc(FILE *fp, myoff_t start, myoff_t len, uLong *crcp,
+                   struct zip_error *errp)
+{
+    Bytef buf[BUFSIZE];
+    size_t n;
+
+    *crcp = crc32(0L, Z_NULL, 0);
+
+    if (fseeko(fp, start, SEEK_SET) != 0) {
+        _zip_error_set(errp, ZIP_ER_SEEK, errno);
+        return -1;
+    }
+    
+    while (len > 0) {
+        n = len > BUFSIZE ? BUFSIZE : len;
+        if ((n=fread(buf, 1, n, fp)) <= 0) {
+            _zip_error_set(errp, ZIP_ER_READ, errno);
+            return -1;
+        }
+
+        *crcp = crc32(*crcp, buf, n);
+
+        len-= n;
+    }
+
+    return 0;
+}
+
+
+ZIP_EXTERN const char *
+zip_file_strerror(struct zip_file *zf)
+{
+    return _zip_error_strerror(&zf->error);
+}
+
+
+/* _zip_file_get_offset(za, ze):
+   Returns the offset of the file data for entry ze.
+
+   On error, fills in za->error and returns 0.
+*/
+
+unsigned int
+_zip_file_get_offset(struct zip *za, int idx)
+{
+    struct zip_dirent de;
+    unsigned int offset;
+
+    offset = za->cdir->entry[idx].offset;
+
+    if (fseeko(za->zp, offset, SEEK_SET) != 0) {
+        _zip_error_set(&za->error, ZIP_ER_SEEK, errno);
+        return 0;
+    }
+
+    if (_zip_dirent_read(&de, za->zp, NULL, 0, 1, &za->error) != 0)
+        return 0;
+
+    offset += LENTRYSIZE + de.filename_len + de.extrafield_len;
+
+    _zip_dirent_finalize(&de);
+
+    return offset;
+}
+
+
+ZIP_EXTERN void
+zip_file_error_get(struct zip_file *zf, int *zep, int *sep)
+{
+    _zip_error_get(&zf->error, zep, sep);
+}
+
+
+static struct zip_file *_zip_file_new(struct zip *za);
+
+
+
+ZIP_EXTERN struct zip_file *
+zip_fopen_index(struct zip *za, int fileno, int flags)
+{
+    int len, ret;
+    int zfflags;
+    struct zip_file *zf;
+
+    if ((fileno < 0) || (fileno >= za->nentry)) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    if ((flags & ZIP_FL_UNCHANGED) == 0
+        && ZIP_ENTRY_DATA_CHANGED(za->entry+fileno)) {
+        _zip_error_set(&za->error, ZIP_ER_CHANGED, 0);
+        return NULL;
+    }
+
+    if (fileno >= za->cdir->nentry) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    zfflags = 0;
+    switch (za->cdir->entry[fileno].comp_method) {
+    case ZIP_CM_STORE:
+        zfflags |= ZIP_ZF_CRC;
+        break;
+
+    case ZIP_CM_DEFLATE:
+        if ((flags & ZIP_FL_COMPRESSED) == 0)
+            zfflags |= ZIP_ZF_CRC | ZIP_ZF_DECOMP;
+        break;
+    default:
+        if ((flags & ZIP_FL_COMPRESSED) == 0) {
+            _zip_error_set(&za->error, ZIP_ER_COMPNOTSUPP, 0);
+            return NULL;
+        }
+        break;
+    }
+
+    zf = _zip_file_new(za);
+
+    zf->flags = zfflags;
+    /* zf->name = za->cdir->entry[fileno].filename; */
+    zf->method = za->cdir->entry[fileno].comp_method;
+    zf->bytes_left = za->cdir->entry[fileno].uncomp_size;
+    zf->cbytes_left = za->cdir->entry[fileno].comp_size;
+    zf->crc_orig = za->cdir->entry[fileno].crc;
+
+    if ((zf->fpos=_zip_file_get_offset(za, fileno)) == 0) {
+        zip_fclose(zf);
+        return NULL;
+    }
+    
+    if ((zf->flags & ZIP_ZF_DECOMP) == 0)
+        zf->bytes_left = zf->cbytes_left;
+    else {
+        if ((zf->buffer=(char *)malloc(BUFSIZE)) == NULL) {
+            _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+            zip_fclose(zf);
+            return NULL;
+        }
+
+        len = _zip_file_fillbuf(zf->buffer, BUFSIZE, zf);
+        if (len <= 0) {
+            _zip_error_copy(&za->error, &zf->error);
+            zip_fclose(zf);
+        return NULL;
+        }
+
+        if ((zf->zstr = (z_stream *)malloc(sizeof(z_stream))) == NULL) {
+            _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+            zip_fclose(zf);
+            return NULL;
+        }
+        zf->zstr->zalloc = Z_NULL;
+        zf->zstr->zfree = Z_NULL;
+        zf->zstr->opaque = NULL;
+        zf->zstr->next_in = (Bytef *)zf->buffer;
+        zf->zstr->avail_in = len;
+        
+        /* negative value to tell zlib that there is no header */
+        if ((ret=inflateInit2(zf->zstr, -MAX_WBITS)) != Z_OK) {
+            _zip_error_set(&za->error, ZIP_ER_ZLIB, ret);
+            zip_fclose(zf);
+            return NULL;
+        }
+    }
+    
+    return zf;
+}
+
+
+
+int
+_zip_file_fillbuf(void *buf, size_t buflen, struct zip_file *zf)
+{
+    int i, j;
+
+    if (zf->error.zip_err != ZIP_ER_OK)
+        return -1;
+
+    if ((zf->flags & ZIP_ZF_EOF) || zf->cbytes_left <= 0 || buflen <= 0)
+        return 0;
+    
+    if (fseeko(zf->za->zp, zf->fpos, SEEK_SET) < 0) {
+        _zip_error_set(&zf->error, ZIP_ER_SEEK, errno);
+        return -1;
+    }
+    if (buflen < zf->cbytes_left)
+        i = buflen;
+    else
+        i = zf->cbytes_left;
+
+    j = fread(buf, 1, i, zf->za->zp);
+    if (j == 0) {
+        _zip_error_set(&zf->error, ZIP_ER_EOF, 0);
+        j = -1;
+    }
+    else if (j < 0)
+        _zip_error_set(&zf->error, ZIP_ER_READ, errno);
+    else {
+        zf->fpos += j;
+        zf->cbytes_left -= j;
+    }
+
+    return j;        
+}
+
+
+
+static struct zip_file *
+_zip_file_new(struct zip *za)
+{
+    struct zip_file *zf, **file;
+    int n;
+
+    if ((zf=(struct zip_file *)malloc(sizeof(struct zip_file))) == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+    
+    if (za->nfile >= za->nfile_alloc-1) {
+        n = za->nfile_alloc + 10;
+        file = (struct zip_file **)realloc(za->file,
+                                           n*sizeof(struct zip_file *));
+        if (file == NULL) {
+            _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+            free(zf);
+            return NULL;
+        }
+        za->nfile_alloc = n;
+        za->file = file;
+    }
+
+    za->file[za->nfile++] = zf;
+
+    zf->za = za;
+    _zip_error_init(&zf->error);
+    zf->flags = 0;
+    zf->crc = crc32(0L, Z_NULL, 0);
+    zf->crc_orig = 0;
+    zf->method = -1;
+    zf->bytes_left = zf->cbytes_left = 0;
+    zf->fpos = 0;
+    zf->buffer = NULL;
+    zf->zstr = NULL;
+
+    return zf;
+}
+
+
+ZIP_EXTERN struct zip_file *
+zip_fopen(struct zip *za, const char *fname, int flags)
+{
+    int idx;
+
+    if ((idx=zip_name_locate(za, fname, flags)) < 0)
+        return NULL;
+
+    return zip_fopen_index(za, idx, flags);
+}
+
+
+ZIP_EXTERN int
+zip_set_file_comment(struct zip *za, int idx, const char *comment, int len)
+{
+    char *tmpcom;
+
+    if (idx < 0 || idx >= za->nentry
+        || len < 0 || len > MAXCOMLEN
+        || (len > 0 && comment == NULL)) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    if (len > 0) {
+        if ((tmpcom=(char *)_zip_memdup(comment, len, &za->error)) == NULL)
+            return -1;
+    }
+    else
+        tmpcom = NULL;
+
+    free(za->entry[idx].ch_comment);
+    za->entry[idx].ch_comment = tmpcom;
+    za->entry[idx].ch_comment_len = len;
+    
+    return 0;
+}
+
+
+ZIP_EXTERN struct zip_source *
+zip_source_file(struct zip *za, const char *fname, myoff_t start, myoff_t len)
+{
+    if (za == NULL)
+        return NULL;
+
+    if (fname == NULL || start < 0 || len < -1) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    return _zip_source_file_or_p(za, fname, NULL, start, len);
+}
+
+
+struct read_data {
+    const char *buf, *data, *end;
+    time_t mtime;
+    int freep;
+};
+
+static ssize_t read_data(void *state, void *data, size_t len,
+                         enum zip_source_cmd cmd);
+
+
+
+ZIP_EXTERN struct zip_source *
+zip_source_buffer(struct zip *za, const void *data, myoff_t len, int freep)
+{
+    struct read_data *f;
+    struct zip_source *zs;
+
+    if (za == NULL)
+        return NULL;
+
+    if (len < 0 || (data == NULL && len > 0)) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    if ((f=(struct read_data *)malloc(sizeof(*f))) == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+
+    f->data = (const char *)data;
+    f->end = ((const char *)data)+len;
+    f->freep = freep;
+    f->mtime = time(NULL);
+    
+    if ((zs=zip_source_function(za, read_data, f)) == NULL) {
+        free(f);
+        return NULL;
+    }
+
+    return zs;
+}
+
+
+
+static ssize_t
+read_data(void *state, void *data, size_t len, enum zip_source_cmd cmd)
+{
+    struct read_data *z;
+    char *buf;
+    size_t n;
+
+    z = (struct read_data *)state;
+    buf = (char *)data;
+
+    switch (cmd) {
+    case ZIP_SOURCE_OPEN:
+        z->buf = z->data;
+        return 0;
+        
+    case ZIP_SOURCE_READ:
+        n = z->end - z->buf;
+        if (n > len)
+            n = len;
+
+        if (n) {
+            memcpy(buf, z->buf, n);
+            z->buf += n;
+        }
+
+        return n;
+        
+    case ZIP_SOURCE_CLOSE:
+        return 0;
+
+    case ZIP_SOURCE_STAT:
+        {
+            struct zip_stat *st;
+            
+            if (len < sizeof(*st))
+                return -1;
+
+            st = (struct zip_stat *)data;
+
+            zip_stat_init(st);
+            st->mtime = z->mtime;
+            st->size = z->end - z->data;
+            
+            return sizeof(*st);
+        }
+
+    case ZIP_SOURCE_ERROR:
+        {
+            int *e;
+
+            if (len < sizeof(int)*2)
+                return -1;
+
+            e = (int *)data;
+            e[0] = e[1] = 0;
+        }
+        return sizeof(int)*2;
+
+    case ZIP_SOURCE_FREE:
+        if (z->freep) {
+            free((void *)z->data);
+            z->data = NULL;
+        }
+        free(z);
+        return 0;
+
+    default:
+        ;
+    }
+
+    return -1;
+}
+
+
+int
+_zip_set_name(struct zip *za, int idx, const char *name)
+{
+    char *s;
+    int i;
+    
+    if (idx < 0 || idx >= za->nentry || name == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    if ((i=_zip_name_locate(za, name, 0, NULL)) != -1 && i != idx) {
+        _zip_error_set(&za->error, ZIP_ER_EXISTS, 0);
+        return -1;
+    }
+
+    /* no effective name change */
+    if (i == idx)
+        return 0;
+    
+    if ((s=strdup(name)) == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+        return -1;
+    }
+    
+    if (za->entry[idx].state == ZIP_ST_UNCHANGED) 
+        za->entry[idx].state = ZIP_ST_RENAMED;
+
+    free(za->entry[idx].ch_filename);
+    za->entry[idx].ch_filename = s;
+
+    return 0;
+}
+
+
+ZIP_EXTERN int
+zip_set_archive_flag(struct zip *za, int flag, int value)
+{
+    if (value)
+        za->ch_flags |= flag;
+    else
+        za->ch_flags &= ~flag;
+
+    return 0;
+}
+
+
+void
+_zip_unchange_data(struct zip_entry *ze)
+{
+    if (ze->source) {
+        (void)ze->source->f(ze->source->ud, NULL, 0, ZIP_SOURCE_FREE);
+        free(ze->source);
+        ze->source = NULL;
+    }
+    
+    ze->state = ze->ch_filename ? ZIP_ST_RENAMED : ZIP_ST_UNCHANGED;
+}
+
+
+ZIP_EXTERN int
+zip_unchange_archive(struct zip *za)
+{
+    free(za->ch_comment);
+    za->ch_comment = NULL;
+    za->ch_comment_len = -1;
+
+    za->ch_flags = za->flags;
+
+    return 0;
+}
+
+ZIP_EXTERN int
+zip_unchange(struct zip *za, int idx)
+{
+    return _zip_unchange(za, idx, 0);
+}
+
+
+
+int
+_zip_unchange(struct zip *za, int idx, int allow_duplicates)
+{
+    int i;
+    
+    if (idx < 0 || idx >= za->nentry) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    if (za->entry[idx].ch_filename) {
+        if (!allow_duplicates) {
+            i = _zip_name_locate(za,
+                         _zip_get_name(za, idx, ZIP_FL_UNCHANGED, NULL),
+                                 0, NULL);
+            if (i != -1 && i != idx) {
+                _zip_error_set(&za->error, ZIP_ER_EXISTS, 0);
+                return -1;
+            }
+        }
+
+        free(za->entry[idx].ch_filename);
+        za->entry[idx].ch_filename = NULL;
+    }
+
+    free(za->entry[idx].ch_comment);
+    za->entry[idx].ch_comment = NULL;
+    za->entry[idx].ch_comment_len = -1;
+
+    _zip_unchange_data(za->entry+idx);
+
+    return 0;
+}
+
+ZIP_EXTERN int
+zip_unchange_all(struct zip *za)
+{
+    int ret, i;
+
+    ret = 0;
+    for (i=0; i<za->nentry; i++)
+        ret |= _zip_unchange(za, i, 1);
+
+    ret |= zip_unchange_archive(za);
+
+    return ret;
+}
+
+
+ZIP_EXTERN int
+zip_set_archive_comment(struct zip *za, const char *comment, int len)
+{
+    char *tmpcom;
+
+    if (len < 0 || len > MAXCOMLEN
+        || (len > 0 && comment == NULL)) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    if (len > 0) {
+        if ((tmpcom=(char *)_zip_memdup(comment, len, &za->error)) == NULL)
+            return -1;
+    }
+    else
+        tmpcom = NULL;
+
+    free(za->ch_comment);
+    za->ch_comment = tmpcom;
+    za->ch_comment_len = len;
+    
+    return 0;
+}
+
+
+ZIP_EXTERN int
+zip_replace(struct zip *za, int idx, struct zip_source *source)
+{
+    if (idx < 0 || idx >= za->nentry || source == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    if (_zip_replace(za, idx, NULL, source) == -1)
+        return -1;
+
+    return 0;
+}
+
+
+
+
+int
+_zip_replace(struct zip *za, int idx, const char *name,
+             struct zip_source *source)
+{
+    if (idx == -1) {
+        if (_zip_entry_new(za) == NULL)
+            return -1;
+
+        idx = za->nentry - 1;
+    }
+    
+    _zip_unchange_data(za->entry+idx);
+
+    if (name && _zip_set_name(za, idx, name) != 0)
+        return -1;
+    
+    za->entry[idx].state = ((za->cdir == NULL || idx >= za->cdir->nentry)
+                            ? ZIP_ST_ADDED : ZIP_ST_REPLACED);
+    za->entry[idx].source = source;
+
+    return idx;
+}
+
+
+ZIP_EXTERN int
+zip_rename(struct zip *za, int idx, const char *name)
+{
+    const char *old_name;
+    int old_is_dir, new_is_dir;
+    
+    if (idx >= za->nentry || idx < 0 || name[0] == '\0') {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    if ((old_name=zip_get_name(za, idx, 0)) == NULL)
+        return -1;
+                                                                    
+    new_is_dir = (name[strlen(name)-1] == '/');
+    old_is_dir = (old_name[strlen(old_name)-1] == '/');
+
+    if (new_is_dir != old_is_dir) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    return _zip_set_name(za, idx, name);
+}
+
+#include <sys/stat.h>
+#include <errno.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static void set_error(int *, struct zip_error *, int);
+static struct zip *_zip_allocate_new(const char *, int *);
+static int _zip_checkcons(FILE *, struct zip_cdir *, struct zip_error *);
+static void _zip_check_torrentzip(struct zip *);
+static struct zip_cdir *_zip_find_central_dir(FILE *, int, int *, myoff_t);
+static int _zip_file_exists(const char *, int, int *);
+static int _zip_headercomp(struct zip_dirent *, int,
+                           struct zip_dirent *, int);
+static unsigned char *_zip_memmem(const unsigned char *, int,
+                                  const unsigned char *, int);
+static struct zip_cdir *_zip_readcdir(FILE *, unsigned char *, unsigned char *,
+                                 int, int, struct zip_error *);
+
+
+
+ZIP_EXTERN struct zip *
+zip_open(const char *fn, int flags, int *zep)
+{
+    FILE *fp;
+    struct zip *za;
+    struct zip_cdir *cdir;
+    int i;
+    myoff_t len;
+    
+    switch (_zip_file_exists(fn, flags, zep)) {
+    case -1:
+        return NULL;
+    case 0:
+        return _zip_allocate_new(fn, zep);
+    default:
+        break;
+    }
+
+    if ((fp=fopen(fn, "rb")) == NULL) {
+        set_error(zep, NULL, ZIP_ER_OPEN);
+        return NULL;
+    }
+
+    fseeko(fp, 0, SEEK_END);
+    len = ftello(fp);
+
+    /* treat empty files as empty archives */
+    if (len == 0) {
+        if ((za=_zip_allocate_new(fn, zep)) == NULL)
+            fclose(fp);
+        else
+            za->zp = fp;
+        return za;
+    }
+
+    cdir = _zip_find_central_dir(fp, flags, zep, len);
+    if (cdir == NULL) {
+        fclose(fp);
+        return NULL;
+    }
+
+    if ((za=_zip_allocate_new(fn, zep)) == NULL) {
+        _zip_cdir_free(cdir);
+        fclose(fp);
+        return NULL;
+    }
+
+    za->cdir = cdir;
+    za->zp = fp;
+
+    if ((za->entry=(struct zip_entry *)malloc(sizeof(*(za->entry))
+                                              * cdir->nentry)) == NULL) {
+        set_error(zep, NULL, ZIP_ER_MEMORY);
+        _zip_free(za);
+        return NULL;
+    }
+    for (i=0; i<cdir->nentry; i++)
+        _zip_entry_new(za);
+
+    _zip_check_torrentzip(za);
+    za->ch_flags = za->flags;
+
+    return za;
+}
+
+
+
+static void
+set_error(int *zep, struct zip_error *err, int ze)
+{
+    int se;
+
+    if (err) {
+        _zip_error_get(err, &ze, &se);
+        if (zip_error_get_sys_type(ze) == ZIP_ET_SYS)
+            errno = se;
+    }
+
+    if (zep)
+        *zep = ze;
+}
+
+
+
+/* _zip_readcdir:
+   tries to find a valid end-of-central-directory at the beginning of
+   buf, and then the corresponding central directory entries.
+   Returns a struct zip_cdir which contains the central directory 
+   entries, or NULL if unsuccessful. */
+
+static struct zip_cdir *
+_zip_readcdir(FILE *fp, unsigned char *buf, unsigned char *eocd, int buflen,
+              int flags, struct zip_error *error)
+{
+    struct zip_cdir *cd;
+    unsigned char *cdp, **bufp;
+    int i, comlen, nentry;
+
+    comlen = buf + buflen - eocd - EOCDLEN;
+    if (comlen < 0) {
+        /* not enough bytes left for comment */
+        _zip_error_set(error, ZIP_ER_NOZIP, 0);
+        return NULL;
+    }
+
+    /* check for end-of-central-dir magic */
+    if (memcmp(eocd, EOCD_MAGIC, 4) != 0) {
+        _zip_error_set(error, ZIP_ER_NOZIP, 0);
+        return NULL;
+    }
+
+    if (memcmp(eocd+4, "\0\0\0\0", 4) != 0) {
+        _zip_error_set(error, ZIP_ER_MULTIDISK, 0);
+        return NULL;
+    }
+
+    cdp = eocd + 8;
+    /* number of cdir-entries on this disk */
+    i = _zip_read2(&cdp);
+    /* number of cdir-entries */
+    nentry = _zip_read2(&cdp);
+
+    if ((cd=_zip_cdir_new(nentry, error)) == NULL)
+        return NULL;
+
+    cd->size = _zip_read4(&cdp);
+    cd->offset = _zip_read4(&cdp);
+    cd->comment = NULL;
+    cd->comment_len = _zip_read2(&cdp);
+
+    if ((comlen < cd->comment_len) || (cd->nentry != i)) {
+        _zip_error_set(error, ZIP_ER_NOZIP, 0);
+        free(cd);
+        return NULL;
+    }
+    if ((flags & ZIP_CHECKCONS) && comlen != cd->comment_len) {
+        _zip_error_set(error, ZIP_ER_INCONS, 0);
+        free(cd);
+        return NULL;
+    }
+
+    if (cd->comment_len) {
+        if ((cd->comment=(char *)_zip_memdup(eocd+EOCDLEN,
+                                             cd->comment_len, error))
+            == NULL) {
+            free(cd);
+            return NULL;
+        }
+    }
+
+    cdp = eocd;
+    if (cd->size < (unsigned int)(eocd-buf)) {
+        /* if buffer already read in, use it */
+        cdp = eocd - cd->size;
+        bufp = &cdp;
+    }
+    else {
+        /* go to start of cdir and read it entry by entry */
+        bufp = NULL;
+        clearerr(fp);
+        fseeko(fp, cd->offset, SEEK_SET);
+        /* possible consistency check: cd->offset =
+           len-(cd->size+cd->comment_len+EOCDLEN) ? */
+        if (ferror(fp) || ((unsigned long)ftello(fp) != cd->offset)) {
+            /* seek error or offset of cdir wrong */
+            if (ferror(fp))
+                _zip_error_set(error, ZIP_ER_SEEK, errno);
+            else
+                _zip_error_set(error, ZIP_ER_NOZIP, 0);
+            free(cd);
+            return NULL;
+        }
+    }
+
+    for (i=0; i<cd->nentry; i++) {
+        if ((_zip_dirent_read(cd->entry+i, fp, bufp, eocd-cdp, 0,
+                              error)) < 0) {
+            cd->nentry = i;
+            _zip_cdir_free(cd);
+            return NULL;
+        }
+    }
+    
+    return cd;
+}
+
+
+
+/* _zip_checkcons:
+   Checks the consistency of the central directory by comparing central
+   directory entries with local headers and checking for plausible
+   file and header offsets. Returns -1 if not plausible, else the
+   difference between the lowest and the highest fileposition reached */
+
+static int
+_zip_checkcons(FILE *fp, struct zip_cdir *cd, struct zip_error *error)
+{
+    int i;
+    unsigned int min, max, j;
+    struct zip_dirent temp;
+
+    if (cd->nentry) {
+        max = cd->entry[0].offset;
+        min = cd->entry[0].offset;
+    }
+    else
+        min = max = 0;
+
+    for (i=0; i<cd->nentry; i++) {
+        if (cd->entry[i].offset < min)
+            min = cd->entry[i].offset;
+        if (min > cd->offset) {
+            _zip_error_set(error, ZIP_ER_NOZIP, 0);
+            return -1;
+        }
+        
+        j = cd->entry[i].offset + cd->entry[i].comp_size
+            + cd->entry[i].filename_len + LENTRYSIZE;
+        if (j > max)
+            max = j;
+        if (max > cd->offset) {
+            _zip_error_set(error, ZIP_ER_NOZIP, 0);
+            return -1;
+        }
+        
+        if (fseeko(fp, cd->entry[i].offset, SEEK_SET) != 0) {
+            _zip_error_set(error, ZIP_ER_SEEK, 0);
+            return -1;
+        }
+        
+        if (_zip_dirent_read(&temp, fp, NULL, 0, 1, error) == -1)
+            return -1;
+        
+        if (_zip_headercomp(cd->entry+i, 0, &temp, 1) != 0) {
+            _zip_error_set(error, ZIP_ER_INCONS, 0);
+            _zip_dirent_finalize(&temp);
+            return -1;
+        }
+        _zip_dirent_finalize(&temp);
+    }
+
+    return max - min;
+}
+
+
+
+/* _zip_check_torrentzip:
+   check wether ZA has a valid TORRENTZIP comment, i.e. is torrentzipped */
+
+static void
+_zip_check_torrentzip(struct zip *za)
+{
+    uLong crc_got, crc_should;
+    char buf[8+1];
+    char *end;
+
+    if (za->zp == NULL || za->cdir == NULL)
+        return;
+
+    if (za->cdir->comment_len != TORRENT_SIG_LEN+8
+        || strncmp(za->cdir->comment, TORRENT_SIG, TORRENT_SIG_LEN) != 0)
+        return;
+
+    memcpy(buf, za->cdir->comment+TORRENT_SIG_LEN, 8);
+    buf[8] = '\0';
+    errno = 0;
+    crc_should = strtoul(buf, &end, 16);
+    if ((crc_should == UINT_MAX && errno != 0) || (end && *end))
+        return;
+
+    if (_zip_filerange_crc(za->zp, za->cdir->offset, za->cdir->size,
+                           &crc_got, NULL) < 0)
+        return;
+
+    if (crc_got == crc_should)
+        za->flags |= ZIP_AFL_TORRENT;
+}
+
+
+
+
+/* _zip_headercomp:
+   compares two headers h1 and h2; if they are local headers, set
+   local1p or local2p respectively to 1, else 0. Return 0 if they
+   are identical, -1 if not. */
+
+static int
+_zip_headercomp(struct zip_dirent *h1, int local1p, struct zip_dirent *h2,
+           int local2p)
+{
+    if ((h1->version_needed != h2->version_needed)
+#if 0
+        /* some zip-files have different values in local
+           and global headers for the bitflags */
+        || (h1->bitflags != h2->bitflags)
+#endif
+        || (h1->comp_method != h2->comp_method)
+        || (h1->last_mod != h2->last_mod)
+        || (h1->filename_len != h2->filename_len)
+        || !h1->filename || !h2->filename
+        || strcmp(h1->filename, h2->filename))
+        return -1;
+
+    /* check that CRC and sizes are zero if data descriptor is used */
+    if ((h1->bitflags & ZIP_GPBF_DATA_DESCRIPTOR) && local1p
+        && (h1->crc != 0
+            || h1->comp_size != 0
+            || h1->uncomp_size != 0))
+        return -1;
+    if ((h2->bitflags & ZIP_GPBF_DATA_DESCRIPTOR) && local2p
+        && (h2->crc != 0
+            || h2->comp_size != 0
+            || h2->uncomp_size != 0))
+        return -1;
+    
+    /* check that CRC and sizes are equal if no data descriptor is used */
+    if (((h1->bitflags & ZIP_GPBF_DATA_DESCRIPTOR) == 0 || local1p == 0)
+        && ((h2->bitflags & ZIP_GPBF_DATA_DESCRIPTOR) == 0 || local2p == 0)) {
+        if ((h1->crc != h2->crc)
+            || (h1->comp_size != h2->comp_size)
+            || (h1->uncomp_size != h2->uncomp_size))
+            return -1;
+    }
+    
+    if ((local1p == local2p)
+        && ((h1->extrafield_len != h2->extrafield_len)
+            || (h1->extrafield_len && h2->extrafield
+                && memcmp(h1->extrafield, h2->extrafield,
+                          h1->extrafield_len))))
+        return -1;
+
+    /* if either is local, nothing more to check */
+    if (local1p || local2p)
+        return 0;
+
+    if ((h1->version_madeby != h2->version_madeby)
+        || (h1->disk_number != h2->disk_number)
+        || (h1->int_attrib != h2->int_attrib)
+        || (h1->ext_attrib != h2->ext_attrib)
+        || (h1->offset != h2->offset)
+        || (h1->comment_len != h2->comment_len)
+        || (h1->comment_len && h2->comment
+            && memcmp(h1->comment, h2->comment, h1->comment_len)))
+        return -1;
+
+    return 0;
+}
+
+
+
+static struct zip *
+_zip_allocate_new(const char *fn, int *zep)
+{
+    struct zip *za;
+    struct zip_error error;
+
+    if ((za=_zip_new(&error)) == NULL) {
+        set_error(zep, &error, 0);
+        return NULL;
+    }
+        
+    za->zn = strdup(fn);
+    if (!za->zn) {
+        _zip_free(za);
+        set_error(zep, NULL, ZIP_ER_MEMORY);
+        return NULL;
+    }
+    return za;
+}
+
+
+
+static int
+_zip_file_exists(const char *fn, int flags, int *zep)
+{
+    struct stat st;
+
+    if (fn == NULL) {
+        set_error(zep, NULL, ZIP_ER_INVAL);
+        return -1;
+    }
+    
+    if (stat(fn, &st) != 0) {
+        if (flags & ZIP_CREATE)
+            return 0;
+        else {
+            set_error(zep, NULL, ZIP_ER_OPEN);
+            return -1;
+        }
+    }
+    else if ((flags & ZIP_EXCL)) {
+        set_error(zep, NULL, ZIP_ER_EXISTS);
+        return -1;
+    }
+    /* ZIP_CREATE gets ignored if file exists and not ZIP_EXCL,
+       just like open() */
+
+    return 1;
+}
+
+
+
+static struct zip_cdir *
+_zip_find_central_dir(FILE *fp, int flags, int *zep, myoff_t len)
+{
+    struct zip_cdir *cdir, *cdirnew;
+    unsigned char *buf, *match;
+    int a, best, buflen, i;
+    struct zip_error zerr;
+
+    i = fseeko(fp, -(len < CDBUFSIZE ? len : CDBUFSIZE), SEEK_END);
+    if (i == -1 && errno != EFBIG) {
+        /* seek before start of file on my machine */
+        set_error(zep, NULL, ZIP_ER_SEEK);
+        return NULL;
+    }
+
+    /* 64k is too much for stack */
+    if ((buf=(unsigned char *)malloc(CDBUFSIZE)) == NULL) {
+        set_error(zep, NULL, ZIP_ER_MEMORY);
+        return NULL;
+    }
+
+    clearerr(fp);
+    buflen = fread(buf, 1, CDBUFSIZE, fp);
+
+    if (ferror(fp)) {
+        set_error(zep, NULL, ZIP_ER_READ);
+        free(buf);
+        return NULL;
+    }
+    
+    best = -1;
+    cdir = NULL;
+    match = buf;
+    _zip_error_set(&zerr, ZIP_ER_NOZIP, 0);
+
+    while ((match=_zip_memmem(match, buflen-(match-buf)-18,
+                              (const unsigned char *)EOCD_MAGIC, 4))!=NULL) {
+        /* found match -- check, if good */
+        /* to avoid finding the same match all over again */
+        match++;
+        if ((cdirnew=_zip_readcdir(fp, buf, match-1, buflen, flags,
+                                   &zerr)) == NULL)
+            continue;
+
+        if (cdir) {
+            if (best <= 0)
+                best = _zip_checkcons(fp, cdir, &zerr);
+            a = _zip_checkcons(fp, cdirnew, &zerr);
+            if (best < a) {
+                _zip_cdir_free(cdir);
+                cdir = cdirnew;
+                best = a;
+            }
+            else
+                _zip_cdir_free(cdirnew);
+        }
+        else {
+            cdir = cdirnew;
+            if (flags & ZIP_CHECKCONS)
+                best = _zip_checkcons(fp, cdir, &zerr);
+            else
+                best = 0;
+        }
+        cdirnew = NULL;
+    }
+
+    free(buf);
+    
+    if (best < 0) {
+        set_error(zep, &zerr, 0);
+        _zip_cdir_free(cdir);
+        return NULL;
+    }
+
+    return cdir;
+}
+
+
+
+static unsigned char *
+_zip_memmem(const unsigned char *big, int biglen, const unsigned char *little, 
+       int littlelen)
+{
+    const unsigned char *p;
+    
+    if ((biglen < littlelen) || (littlelen == 0))
+        return NULL;
+    p = big-1;
+    while ((p=(const unsigned char *)
+                memchr(p+1, little[0], (size_t)(big-(p+1)+biglen-littlelen+1)))
+           != NULL) {
+        if (memcmp(p+1, little+1, littlelen-1)==0)
+            return (unsigned char *)p;
+    }
+
+    return NULL;
+}
+
+
+/* _zip_new:
+   creates a new zipfile struct, and sets the contents to zero; returns
+   the new struct. */
+
+struct zip *
+_zip_new(struct zip_error *error)
+{
+    struct zip *za;
+
+    za = (struct zip *)malloc(sizeof(struct zip));
+    if (!za) {
+        _zip_error_set(error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+
+    za->zn = NULL;
+    za->zp = NULL;
+    _zip_error_init(&za->error);
+    za->cdir = NULL;
+    za->ch_comment = NULL;
+    za->ch_comment_len = -1;
+    za->nentry = za->nentry_alloc = 0;
+    za->entry = NULL;
+    za->nfile = za->nfile_alloc = 0;
+    za->file = NULL;
+    za->flags = za->ch_flags = 0;
+    
+    return za;
+}
+
+
+void *
+_zip_memdup(const void *mem, size_t len, struct zip_error *error)
+{
+    void *ret;
+
+    ret = malloc(len);
+    if (!ret) {
+        _zip_error_set(error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+
+    memcpy(ret, mem, len);
+
+    return ret;
+}
+
+
+ZIP_EXTERN int
+zip_get_num_files(struct zip *za)
+{
+    if (za == NULL)
+        return -1;
+
+    return za->nentry;
+}
+
+ZIP_EXTERN const char *
+zip_get_name(struct zip *za, int idx, int flags)
+{
+    return _zip_get_name(za, idx, flags, &za->error);
+}
+
+
+
+const char *
+_zip_get_name(struct zip *za, int idx, int flags, struct zip_error *error)
+{
+    if (idx < 0 || idx >= za->nentry) {
+        _zip_error_set(error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    if ((flags & ZIP_FL_UNCHANGED) == 0) {
+        if (za->entry[idx].state == ZIP_ST_DELETED) {
+            _zip_error_set(error, ZIP_ER_DELETED, 0);
+            return NULL;
+        }
+        if (za->entry[idx].ch_filename)
+            return za->entry[idx].ch_filename;
+    }
+
+    if (za->cdir == NULL || idx >= za->cdir->nentry) {
+        _zip_error_set(error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+    
+    return za->cdir->entry[idx].filename;
+}
+
+
+ZIP_EXTERN const char *
+zip_get_file_comment(struct zip *za, int idx, int *lenp, int flags)
+{
+    if (idx < 0 || idx >= za->nentry) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    if ((flags & ZIP_FL_UNCHANGED)
+        || (za->entry[idx].ch_comment_len == -1)) {
+        if (lenp != NULL)
+            *lenp = za->cdir->entry[idx].comment_len;
+        return za->cdir->entry[idx].comment;
+    }
+    
+    if (lenp != NULL)
+        *lenp = za->entry[idx].ch_comment_len;
+    return za->entry[idx].ch_comment;
+}
+
+
+ZIP_EXTERN int
+zip_get_archive_flag(struct zip *za, int flag, int flags)
+{
+    int fl;
+
+    fl = (flags & ZIP_FL_UNCHANGED) ? za->flags : za->ch_flags;
+
+    return (fl & flag) ? 1 : 0;
+}
+
+
+ZIP_EXTERN const char *
+zip_get_archive_comment(struct zip *za, int *lenp, int flags)
+{
+    if ((flags & ZIP_FL_UNCHANGED)
+        || (za->ch_comment_len == -1)) {
+        if (za->cdir) {
+            if (lenp != NULL)
+                *lenp = za->cdir->comment_len;
+            return za->cdir->comment;
+        }
+        else {
+            if (lenp != NULL)
+                *lenp = -1;
+            return NULL;
+        }
+    }
+    
+    if (lenp != NULL)
+        *lenp = za->ch_comment_len;
+    return za->ch_comment;
+}
+
+
+/* _zip_free:
+   frees the space allocated to a zipfile struct, and closes the
+   corresponding file. */
+
+void
+_zip_free(struct zip *za)
+{
+    int i;
+
+    if (za == NULL)
+        return;
+
+    if (za->zn)
+        free(za->zn);
+
+    if (za->zp)
+        fclose(za->zp);
+
+    _zip_cdir_free(za->cdir);
+
+    if (za->entry) {
+        for (i=0; i<za->nentry; i++) {
+            _zip_entry_free(za->entry+i);
+        }
+        free(za->entry);
+    }
+
+    for (i=0; i<za->nfile; i++) {
+        if (za->file[i]->error.zip_err == ZIP_ER_OK) {
+            _zip_error_set(&za->file[i]->error, ZIP_ER_ZIPCLOSED, 0);
+            za->file[i]->za = NULL;
+        }
+    }
+
+    free(za->file);
+    
+    free(za);
+
+    return;
+}
+
+
+ZIP_EXTERN ssize_t
+zip_fread(struct zip_file *zf, void *outbuf, size_t toread)
+{
+    int ret;
+    size_t out_before, len;
+    int i;
+
+    if (!zf)
+        return -1;
+
+    if (zf->error.zip_err != 0)
+        return -1;
+
+    if ((zf->flags & ZIP_ZF_EOF) || (toread == 0))
+        return 0;
+
+    if (zf->bytes_left == 0) {
+        zf->flags |= ZIP_ZF_EOF;
+        if (zf->flags & ZIP_ZF_CRC) {
+            if (zf->crc != zf->crc_orig) {
+                _zip_error_set(&zf->error, ZIP_ER_CRC, 0);
+                return -1;
+            }
+        }
+        return 0;
+    }
+    
+    if ((zf->flags & ZIP_ZF_DECOMP) == 0) {
+        ret = _zip_file_fillbuf(outbuf, toread, zf);
+        if (ret > 0) {
+            if (zf->flags & ZIP_ZF_CRC)
+                zf->crc = crc32(zf->crc, (Bytef *)outbuf, ret);
+            zf->bytes_left -= ret;
+        }
+        return ret;
+    }
+    
+    zf->zstr->next_out = (Bytef *)outbuf;
+    zf->zstr->avail_out = toread;
+    out_before = zf->zstr->total_out;
+    
+    /* endless loop until something has been accomplished */
+    for (;;) {
+        ret = inflate(zf->zstr, Z_SYNC_FLUSH);
+
+        switch (ret) {
+        case Z_OK:
+        case Z_STREAM_END:
+            /* all ok */
+            /* Z_STREAM_END probably won't happen, since we didn't
+               have a header */
+            len = zf->zstr->total_out - out_before;
+            if (len >= zf->bytes_left || len >= toread) {
+                if (zf->flags & ZIP_ZF_CRC)
+                    zf->crc = crc32(zf->crc, (Bytef *)outbuf, len);
+                zf->bytes_left -= len;
+                return len;
+            }
+            break;
+
+        case Z_BUF_ERROR:
+            if (zf->zstr->avail_in == 0) {
+                i = _zip_file_fillbuf(zf->buffer, BUFSIZE, zf);
+                if (i == 0) {
+                    _zip_error_set(&zf->error, ZIP_ER_INCONS, 0);
+                    return -1;
+                }
+                else if (i < 0)
+                    return -1;
+                zf->zstr->next_in = (Bytef *)zf->buffer;
+                zf->zstr->avail_in = i;
+                continue;
+            }
+            /* fallthrough */
+        case Z_NEED_DICT:
+        case Z_DATA_ERROR:
+        case Z_STREAM_ERROR:
+        case Z_MEM_ERROR:
+            _zip_error_set(&zf->error, ZIP_ER_ZLIB, ret);
+            return -1;
+        }
+    }
+}
+
+
+ZIP_EXTERN const char *
+zip_strerror(struct zip *za)
+{
+    return _zip_error_strerror(&za->error);
+}
+
+
+ZIP_EXTERN void
+zip_stat_init(struct zip_stat *st)
+{
+    st->name = NULL;
+    st->index = -1;
+    st->crc = 0;
+    st->mtime = (time_t)-1;
+    st->size = -1;
+    st->comp_size = -1;
+    st->comp_method = ZIP_CM_STORE;
+    st->encryption_method = ZIP_EM_NONE;
+}
+
+
+ZIP_EXTERN int
+zip_stat_index(struct zip *za, int index, int flags, struct zip_stat *st)
+{
+    const char *name;
+    
+    if (index < 0 || index >= za->nentry) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    if ((name=zip_get_name(za, index, flags)) == NULL)
+        return -1;
+    
+
+    if ((flags & ZIP_FL_UNCHANGED) == 0
+        && ZIP_ENTRY_DATA_CHANGED(za->entry+index)) {
+        if (za->entry[index].source->f(za->entry[index].source->ud,
+                                     st, sizeof(*st), ZIP_SOURCE_STAT) < 0) {
+            _zip_error_set(&za->error, ZIP_ER_CHANGED, 0);
+            return -1;
+        }
+    }
+    else {
+        if (za->cdir == NULL || index >= za->cdir->nentry) {
+            _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+            return -1;
+        }
+        
+        st->crc = za->cdir->entry[index].crc;
+        st->size = za->cdir->entry[index].uncomp_size;
+        st->mtime = za->cdir->entry[index].last_mod;
+        st->comp_size = za->cdir->entry[index].comp_size;
+        st->comp_method = za->cdir->entry[index].comp_method;
+        if (za->cdir->entry[index].bitflags & ZIP_GPBF_ENCRYPTED) {
+            if (za->cdir->entry[index].bitflags & ZIP_GPBF_STRONG_ENCRYPTION) {
+                /* XXX */
+                st->encryption_method = ZIP_EM_UNKNOWN;
+            }
+            else
+                st->encryption_method = ZIP_EM_TRAD_PKWARE;
+        }
+        else
+            st->encryption_method = ZIP_EM_NONE;
+        /* st->bitflags = za->cdir->entry[index].bitflags; */
+    }
+
+    st->index = index;
+    st->name = name;
+    
+    return 0;
+}
+
+
+ZIP_EXTERN int
+zip_stat(struct zip *za, const char *fname, int flags, struct zip_stat *st)
+{
+    int idx;
+
+    if ((idx=zip_name_locate(za, fname, flags)) < 0)
+        return -1;
+
+    return zip_stat_index(za, idx, flags, st);
+}
+
+
+struct read_zip {
+    struct zip_file *zf;
+    struct zip_stat st;
+    myoff_t off, len;
+};
+
+static ssize_t read_zip(void *st, void *data, size_t len,
+                        enum zip_source_cmd cmd);
+
+
+
+ZIP_EXTERN struct zip_source *
+zip_source_zip(struct zip *za, struct zip *srcza, int srcidx, int flags,
+               myoff_t start, myoff_t len)
+{
+    struct zip_error error;
+    struct zip_source *zs;
+    struct read_zip *p;
+
+    /* XXX: ZIP_FL_RECOMPRESS */
+
+    if (za == NULL)
+        return NULL;
+
+    if (srcza == NULL || start < 0 || len < -1 || srcidx < 0 || srcidx >= srcza->nentry) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    if ((flags & ZIP_FL_UNCHANGED) == 0
+        && ZIP_ENTRY_DATA_CHANGED(srcza->entry+srcidx)) {
+        _zip_error_set(&za->error, ZIP_ER_CHANGED, 0);
+        return NULL;
+    }
+
+    if (len == 0)
+        len = -1;
+
+    if (start == 0 && len == -1 && (flags & ZIP_FL_RECOMPRESS) == 0)
+        flags |= ZIP_FL_COMPRESSED;
+    else
+        flags &= ~ZIP_FL_COMPRESSED;
+
+    if ((p=(struct read_zip *)malloc(sizeof(*p))) == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+        
+    _zip_error_copy(&error, &srcza->error);
+        
+    if (zip_stat_index(srcza, srcidx, flags, &p->st) < 0
+        || (p->zf=zip_fopen_index(srcza, srcidx, flags)) == NULL) {
+        free(p);
+        _zip_error_copy(&za->error, &srcza->error);
+        _zip_error_copy(&srcza->error, &error);
+        
+        return NULL;
+    }
+    p->off = start;
+    p->len = len;
+
+    if ((flags & ZIP_FL_COMPRESSED) == 0) {
+        p->st.size = p->st.comp_size = len;
+        p->st.comp_method = ZIP_CM_STORE;
+        p->st.crc = 0;
+    }
+    
+    if ((zs=zip_source_function(za, read_zip, p)) == NULL) {
+        free(p);
+        return NULL;
+    }
+
+    return zs;
+}
+
+
+
+static ssize_t
+read_zip(void *state, void *data, size_t len, enum zip_source_cmd cmd)
+{
+    struct read_zip *z;
+    char b[8192], *buf;
+    int i, n;
+
+    z = (struct read_zip *)state;
+    buf = (char *)data;
+
+    switch (cmd) {
+    case ZIP_SOURCE_OPEN:
+        for (n=0; n<z->off; n+= i) {
+            i = (z->off-n > sizeof(b) ? sizeof(b) : z->off-n);
+            if ((i=zip_fread(z->zf, b, i)) < 0) {
+                zip_fclose(z->zf);
+                z->zf = NULL;
+                return -1;
+            }
+        }
+        return 0;
+        
+    case ZIP_SOURCE_READ:
+        if (z->len != -1)
+            n = len > z->len ? z->len : len;
+        else
+            n = len;
+        
+
+        if ((i=zip_fread(z->zf, buf, n)) < 0)
+            return -1;
+
+        if (z->len != -1)
+            z->len -= i;
+
+        return i;
+        
+    case ZIP_SOURCE_CLOSE:
+        return 0;
+
+    case ZIP_SOURCE_STAT:
+        if (len < sizeof(z->st))
+            return -1;
+        len = sizeof(z->st);
+
+        memcpy(data, &z->st, len);
+        return len;
+
+    case ZIP_SOURCE_ERROR:
+        {
+            int *e;
+
+            if (len < sizeof(int)*2)
+                return -1;
+
+            e = (int *)data;
+            zip_file_error_get(z->zf, e, e+1);
+        }
+        return sizeof(int)*2;
+
+    case ZIP_SOURCE_FREE:
+        zip_fclose(z->zf);
+        free(z);
+        return 0;
+
+    default:
+        ;
+    }
+
+    return -1;
+}
+
+
+ZIP_EXTERN struct zip_source *
+zip_source_function(struct zip *za, zip_source_callback zcb, void *ud)
+{
+    struct zip_source *zs;
+
+    if (za == NULL)
+        return NULL;
+
+    if ((zs=(struct zip_source *)malloc(sizeof(*zs))) == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+
+    zs->f = zcb;
+    zs->ud = ud;
+    
+    return zs;
+}
+
+
+ZIP_EXTERN void
+zip_source_free(struct zip_source *source)
+{
+    if (source == NULL)
+        return;
+
+    (void)source->f(source->ud, NULL, 0, ZIP_SOURCE_FREE);
+
+    free(source);
+}
+
+
+struct read_file {
+    char *fname;        /* name of file to copy from */
+    FILE *f;                /* file to copy from */
+    myoff_t off;                /* start offset of */
+    myoff_t len;                /* lengt of data to copy */
+    myoff_t remain;        /* bytes remaining to be copied */
+    int e[2];                /* error codes */
+};
+
+static ssize_t read_file(void *state, void *data, size_t len,
+                     enum zip_source_cmd cmd);
+
+
+
+ZIP_EXTERN struct zip_source *
+zip_source_filep(struct zip *za, FILE *file, myoff_t start, myoff_t len)
+{
+    if (za == NULL)
+        return NULL;
+
+    if (file == NULL || start < 0 || len < -1) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    return _zip_source_file_or_p(za, NULL, file, start, len);
+}
+
+
+
+struct zip_source *
+_zip_source_file_or_p(struct zip *za, const char *fname, FILE *file,
+                      myoff_t start, myoff_t len)
+{
+    struct read_file *f;
+    struct zip_source *zs;
+
+    if (file == NULL && fname == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    if ((f=(struct read_file *)malloc(sizeof(struct read_file))) == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+
+    f->fname = NULL;
+    if (fname) {
+        if ((f->fname=strdup(fname)) == NULL) {
+            _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+            free(f);
+            return NULL;
+        }
+    }
+    f->f = file;
+    f->off = start;
+    f->len = (len ? len : -1);
+    
+    if ((zs=zip_source_function(za, read_file, f)) == NULL) {
+        free(f);
+        return NULL;
+    }
+
+    return zs;
+}
+
+
+
+static ssize_t
+read_file(void *state, void *data, size_t len, enum zip_source_cmd cmd)
+{
+    struct read_file *z;
+    char *buf;
+    int i, n;
+
+    z = (struct read_file *)state;
+    buf = (char *)data;
+
+    switch (cmd) {
+    case ZIP_SOURCE_OPEN:
+        if (z->fname) {
+            if ((z->f=fopen(z->fname, "rb")) == NULL) {
+                z->e[0] = ZIP_ER_OPEN;
+                z->e[1] = errno;
+                return -1;
+            }
+        }
+
+        if (fseeko(z->f, z->off, SEEK_SET) < 0) {
+            z->e[0] = ZIP_ER_SEEK;
+            z->e[1] = errno;
+            return -1;
+        }
+        z->remain = z->len;
+        return 0;
+        
+    case ZIP_SOURCE_READ:
+        if (z->remain != -1)
+            n = len > z->remain ? z->remain : len;
+        else
+            n = len;
+        
+        if ((i=fread(buf, 1, n, z->f)) < 0) {
+            z->e[0] = ZIP_ER_READ;
+            z->e[1] = errno;
+            return -1;
+        }
+
+        if (z->remain != -1)
+            z->remain -= i;
+
+        return i;
+        
+    case ZIP_SOURCE_CLOSE:
+        if (z->fname) {
+            fclose(z->f);
+            z->f = NULL;
+        }
+        return 0;
+
+    case ZIP_SOURCE_STAT:
+        {
+            struct zip_stat *st;
+            struct stat fst;
+            int err;
+            
+            if (len < sizeof(*st))
+                return -1;
+
+            if (z->f)
+                err = fstat(fileno(z->f), &fst);
+            else
+                err = stat(z->fname, &fst);
+
+            if (err != 0) {
+                z->e[0] = ZIP_ER_READ; /* best match */
+                z->e[1] = errno;
+                return -1;
+            }
+
+            st = (struct zip_stat *)data;
+
+            zip_stat_init(st);
+            st->mtime = fst.st_mtime;
+            if (z->len != -1)
+                st->size = z->len;
+            else if ((fst.st_mode&S_IFMT) == S_IFREG)
+                st->size = fst.st_size;
+
+            return sizeof(*st);
+        }
+
+    case ZIP_SOURCE_ERROR:
+        if (len < sizeof(int)*2)
+            return -1;
+
+        memcpy(data, z->e, sizeof(int)*2);
+        return sizeof(int)*2;
+
+    case ZIP_SOURCE_FREE:
+        free(z->fname);
+        if (z->f)
+            fclose(z->f);
+        free(z);
+        return 0;
+
+    default:
+        ;
+    }
+
+    return -1;
+}
+
+
+ZIP_EXTERN int
+zip_name_locate(struct zip *za, const char *fname, int flags)
+{
+    return _zip_name_locate(za, fname, flags, &za->error);
+}
+
+
+
+int
+_zip_name_locate(struct zip *za, const char *fname, int flags,
+                 struct zip_error *error)
+{
+    int (*cmp)(const char *, const char *);
+    const char *fn, *p;
+    int i, n;
+
+    if (fname == NULL) {
+        _zip_error_set(error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+    
+    cmp = (flags & ZIP_FL_NOCASE) ? strcasecmp : strcmp;
+
+    n = (flags & ZIP_FL_UNCHANGED) ? za->cdir->nentry : za->nentry;
+    for (i=0; i<n; i++) {
+        if (flags & ZIP_FL_UNCHANGED)
+            fn = za->cdir->entry[i].filename;
+        else
+            fn = _zip_get_name(za, i, flags, error);
+
+        /* newly added (partially filled) entry */
+        if (fn == NULL)
+            continue;
+        
+        if (flags & ZIP_FL_NODIR) {
+            p = strrchr(fn, '/');
+            if (p)
+                fn = p+1;
+        }
+
+        if (cmp(fname, fn) == 0)
+            return i;
+    }
+
+    _zip_error_set(error, ZIP_ER_NOENT, 0);
+    return -1;
+}
+
diff --git a/lib/pure/htmlparser.nim b/lib/pure/htmlparser.nim
index 278bf9b90..892534ce1 100755
--- a/lib/pure/htmlparser.nim
+++ b/lib/pure/htmlparser.nim
@@ -20,7 +20,7 @@
 ##
 ## Every tag in the resulting tree is in lower case.
 ##
-## **Note:** The resulting ``PXmlNode``s already use the ``clientData`` field, 
+## **Note:** The resulting ``PXmlNode`` already use the ``clientData`` field, 
 ## so it cannot be used by clients of this library.
 
 import strutils, streams, parsexml, xmltree, unicode, strtabs
@@ -418,4 +418,4 @@ when isMainModule:
     f.close()
   else:
     quit("cannot write test.txt")
-  
\ No newline at end of file
+  
diff --git a/lib/pure/httpclient.nim b/lib/pure/httpclient.nim
index 0f9054873..c02a7a6e7 100755
--- a/lib/pure/httpclient.nim
+++ b/lib/pure/httpclient.nim
@@ -284,14 +284,14 @@ proc post*(url: string, extraHeaders = "", body = "",
   ## | POST's ``body`` to the ``url`` and returns a ``TResponse`` object.
   ## | This proc adds the necessary Content-Length header.
   ## | This proc also handles redirection.
-  extraHeaders.add("Content-Length: " & $len(body) & "\c\L")
-  result = request(url, httpPOST, extraHeaders, body)
+  var xh = extraHeaders & "Content-Length: " & $len(body) & "\c\L"
+  result = request(url, httpPOST, xh, body)
   for i in 1..maxRedirects:
     if result.status.redirection():
       var locationHeader = result.headers["Location"]
       if locationHeader == "": httpError("location header expected")
       var meth = if result.status != "307": httpGet else: httpPost
-      result = request(locationHeader, meth, extraHeaders, body)
+      result = request(locationHeader, meth, xh, body)
   
 proc postContent*(url: string, extraHeaders = "", body = ""): string =
   ## | POST's ``body`` to ``url`` and returns the response's body as a string
diff --git a/lib/pure/macros.nim b/lib/pure/macros.nim
index 677469ed2..7f5dda1e5 100755
--- a/lib/pure/macros.nim
+++ b/lib/pure/macros.nim
@@ -108,7 +108,8 @@ type
     

 # Nodes should be reference counted to make the `copy` operation very fast!

 # However, this is difficult to achieve: modify(n[0][1]) should propagate to

-# its father. How to do this without back references?

+# its father. How to do this without back references? Hm, BS, it works without 
+# them.

 

 proc `[]`* (n: PNimrodNode, i: int): PNimrodNode {.magic: "NChild".}

   ## get `n`'s `i`'th child.

diff --git a/lib/pure/os.nim b/lib/pure/os.nim
index 399d62e8b..f807c39f5 100755
--- a/lib/pure/os.nim
+++ b/lib/pure/os.nim
@@ -319,12 +319,12 @@ proc JoinPath*(head, tail: string): string {.noSideEffect.} =
   ##
   ## For example on Unix:
   ##
-  ## ..code-block:: nimrod
+  ## .. code-block:: nimrod
   ##   JoinPath("usr", "lib")
   ##
   ## results in:
   ##
-  ## ..code-block:: nimrod
+  ## .. code-block:: nimrod
   ##   "usr/lib"
   ##
   ## If head is the empty string, tail is returned.
@@ -375,6 +375,7 @@ proc SplitPath*(path: string): tuple[head, tail: string] {.noSideEffect.} =
   ## ``JoinPath(head, tail) == path``.
   ##
   ## Examples: 
+  ##
   ## .. code-block:: nimrod
   ##   SplitPath("usr/local/bin") -> ("usr/local", "bin")
   ##   SplitPath("usr/local/bin/") -> ("usr/local/bin", "")
@@ -399,8 +400,8 @@ proc parentDir*(path: string): string {.noSideEffect.} =
   ##
   ## This is often the same as the ``head`` result of ``splitPath``.
   ## If there is no parent, ``path`` is returned.
-  ## Example: ``parentDir("/usr/local/bin") == "/usr/local"``.
-  ## Example: ``parentDir("/usr/local/bin/") == "/usr/local"``.
+  ## | Example: ``parentDir("/usr/local/bin") == "/usr/local"``.
+  ## | Example: ``parentDir("/usr/local/bin/") == "/usr/local"``.
   var
     sepPos = -1
     q = 1
@@ -834,7 +835,7 @@ iterator walkDir*(dir: string): tuple[kind: TPathComponent, path: string] =
   ##     for kind, path in walkDir("dirA"):
   ##       echo(path)
   ##
-  ## produces this output (though not necessarily in this order!)::
+  ## produces this output (but not necessarily in this order!)::
   ##   dirA/dirB
   ##   dirA/dirC
   ##   dirA/fileA1.txt
diff --git a/lib/pure/parsecfg.nim b/lib/pure/parsecfg.nim
index c26dab099..4f8f5347f 100755
--- a/lib/pure/parsecfg.nim
+++ b/lib/pure/parsecfg.nim
@@ -1,7 +1,7 @@
 #
 #
 #            Nimrod's Runtime Library
-#        (c) Copyright 2008 Andreas Rumpf
+#        (c) Copyright 2010 Andreas Rumpf
 #
 #    See the file "copying.txt", included in this
 #    distribution, for details about the copyright.
@@ -17,11 +17,11 @@
 ##
 ## .. include:: doc/mytest.cfg
 ##     :literal:
-## The file ``tests/tparscfg.nim`` demonstrates how to use the 
+## The file ``examples/parsecfgex.nim`` demonstrates how to use the 
 ## configuration file parser:
 ##
 ## .. code-block:: nimrod
-##     :file: tests/tparscfg.nim
+##     :file: examples/parsecfgex.nim
 
 
 import 
diff --git a/lib/pure/pegs.nim b/lib/pure/pegs.nim
index e5a655b2e..969ff8106 100755
--- a/lib/pure/pegs.nim
+++ b/lib/pure/pegs.nim
@@ -1190,7 +1190,7 @@ proc eat(p: var TPegParser, kind: TTokKind) =
 
 proc parseExpr(p: var TPegParser): TPeg
 
-proc getNonTerminal(p: TPegParser, name: string): PNonTerminal =
+proc getNonTerminal(p: var TPegParser, name: string): PNonTerminal =
   for i in 0..high(p.nonterms):
     result = p.nonterms[i]
     if cmpIgnoreStyle(result.name, name) == 0: return
diff --git a/lib/pure/strtabs.nim b/lib/pure/strtabs.nim
index 8ea59637a..38be1e983 100755
--- a/lib/pure/strtabs.nim
+++ b/lib/pure/strtabs.nim
@@ -1,7 +1,7 @@
 #
 #
 #            Nimrod's Runtime Library
-#        (c) Copyright 2008 Andreas Rumpf
+#        (c) Copyright 2010 Andreas Rumpf
 #
 #    See the file "copying.txt", included in this
 #    distribution, for details about the copyright.
@@ -36,7 +36,7 @@ proc newStringTable*(keyValuePairs: openarray[string],
   ##   var mytab = newStringTable("key1", "val1", "key2", "val2",
   ##                              modeCaseInsensitive)
 
-proc newStringTable*(mode: TStringTableMode = modeCaseSensitive): PStringTable
+proc newStringTable*(mode: TStringTableMode): PStringTable
   ## creates a new string table that is empty.
 
 proc `[]=`*(t: PStringTable, key, val: string)
@@ -79,7 +79,7 @@ const
   growthFactor = 2
   startSize = 64
 
-proc newStringTable(mode: TStringTableMode = modeCaseSensitive): PStringTable =
+proc newStringTable(mode: TStringTableMode): PStringTable =
   new(result)
   result.mode = mode
   result.counter = 0
diff --git a/lib/pure/unidecode/unidecode.nim b/lib/pure/unidecode/unidecode.nim
index a665dd73e..52f9b6b1a 100755
--- a/lib/pure/unidecode/unidecode.nim
+++ b/lib/pure/unidecode/unidecode.nim
@@ -10,7 +10,7 @@
 ## This module is based on Python's Unidecode module by Tomaz Solc, 
 ## which in turn is based on the ``Text::Unidecode`` Perl module by 
 ## Sean M. Burke 
-## (http://search.cpan.org/~sburke/Text-Unidecode-0.04/lib/Text/Unidecode.pm).
+## (http://search.cpan.org/~sburke/Text-Unidecode-0.04/lib/Text/Unidecode.pm ).
 ##
 ## It provides a single proc that does Unicode to ASCII transliterations:
 ## It finds the sequence of ASCII characters that is the closest approximation
@@ -47,7 +47,7 @@ proc unidecode*(s: string): string =
   ## Example: 
   ## 
   ## ..code-block:: nimrod
-  ##   unidecode("\x53\x17\x4E\xB0")
+  ##   unidecode("\\x53\\x17\\x4E\\xB0")
   ##
   ## Results in: "Bei Jing"
   ##
diff --git a/lib/pure/xmltree.nim b/lib/pure/xmltree.nim
index c79b9ad40..8604078fb 100755
--- a/lib/pure/xmltree.nim
+++ b/lib/pure/xmltree.nim
@@ -12,9 +12,9 @@
 import macros, strtabs
 
 type
-  PXmlNode* = ref TXmlNode ## an XML tree consists of ``PXmlNode``s. 
+  PXmlNode* = ref TXmlNode ## an XML tree consists of ``PXmlNode``'s. 
   
-  TXmlNodeKind* = enum  ## different kinds of ``PXmlNode``s
+  TXmlNodeKind* = enum  ## different kinds of ``PXmlNode``'s
     xnText,             ## a text element
     xnElement,          ## an element with 0 or more children
     xnCData,            ## a CDATA node
@@ -39,7 +39,7 @@ proc newXmlNode(kind: TXmlNodeKind): PXmlNode =
   result.k = kind
 
 proc newElement*(tag: string): PXmlNode = 
-  ## creates a new ``PXmlNode``. of kind ``xnText`` with the given `tag`.
+  ## creates a new ``PXmlNode`` of kind ``xnText`` with the given `tag`.
   result = newXmlNode(xnElement)
   result.fTag = tag
   result.s = @[]
@@ -208,9 +208,14 @@ proc add*(result: var string, n: PXmlNode, indent = 0, indWidth = 2) =
     result.add(n.fText)
     result.add(';')
 
+const
+  xmlHeader* = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" 
+    ## header to use for complete XML output
+
 proc `$`*(n: PXmlNode): string =
-  ## converts `n` into its string representation.
-  result = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
+  ## converts `n` into its string representation. No ``<$xml ...$>`` declaration
+  ## is produced, so that the produced XML fragments are composable.
+  result = ""
   result.add(n)
 
 proc newXmlTree*(tag: string, children: openArray[PXmlNode],
@@ -227,16 +232,21 @@ proc xmlConstructor(e: PNimrodNode): PNimrodNode {.compileTime.} =
   var a = e[1]
   if a.kind == nnkCall:
     result = newCall("newXmlTree", toStrLit(a[0]))
-    var attrs = newCall("newStringTable", [])
-    var bracket = newNimNode(nnkBracket, a)
+    var attrs = newNimNode(nnkBracket, a)
+    var newStringTabCall = newCall("newStringTable", attrs, 
+                                   newIdentNode("modeCaseSensitive"))
+    var elements = newNimNode(nnkBracket, a)
     for i in 1..a.len-1:
-      if a[i].kind == nnkExprEqExpr: 
+      if a[i].kind == nnkExprEqExpr:
         attrs.add(toStrLit(a[i][0]))
         attrs.add(a[i][1])
+        echo repr(attrs)
       else:
-        bracket.add(a[i])
-    result.add(bracket)
-    if attrs.len > 1: result.add(attrs)
+        elements.add(a[i])
+    result.add(elements)
+    if attrs.len > 1: 
+      echo repr(newStringTabCall)
+      result.add(newStringTabCall)
   else:
     result = newCall("newXmlTree", toStrLit(a))
 
@@ -252,5 +262,3 @@ macro `<>`*(x: expr): expr =
   ##
   result = xmlConstructor(x)
 
-
-
diff --git a/lib/wrappers/gtk/libglade2.nim b/lib/wrappers/gtk/libglade2.nim
index c3ddb111a..844f055a0 100755
--- a/lib/wrappers/gtk/libglade2.nim
+++ b/lib/wrappers/gtk/libglade2.nim
@@ -85,9 +85,6 @@ proc gnome_init*() =
 proc bonobo_init*() = 
   init()
 
-proc xml_new*(fname: cstring, root: cstring, domain: cstring): PXML = 
-  result = xml_new(fname, root, domain)
-
 proc xml_new_from_memory*(buffer: cstring, size: int32, root: cstring, 
                           domain: cstring): PXML = 
   result = xml_new_from_buffer(buffer, size, root, domain)
diff --git a/lib/wrappers/sdl/sdl.nim b/lib/wrappers/sdl/sdl.nim
index a144a3a84..a4c8273b8 100755
--- a/lib/wrappers/sdl/sdl.nim
+++ b/lib/wrappers/sdl/sdl.nim
@@ -799,9 +799,6 @@ type
     here*: ptr byte
     stop*: ptr byte
 
-  TUnknown*{.final.} = object  # first declare the pointer type
-    data1*: Pointer
-
   PRWops* = ptr TRWops        # now the pointer to function types
   TSeek* = proc (context: PRWops, offset: int, whence: int): int{.cdecl.}
   TRead* = proc (context: PRWops, thePtr: Pointer, size: int, maxnum: int): int{.
@@ -809,23 +806,14 @@ type
   TWrite* = proc (context: PRWops, thePtr: Pointer, size: int, num: int): int{.
       cdecl.}
   TClose* = proc (context: PRWops): int{.cdecl.} # the variant record itself
-  trange010 = range[0..2]
   TRWops*{.final.} = object 
     seek*: TSeek
     read*: TRead
     write*: TWrite
     closeFile*: TClose        # a keyword as name is not allowed
                               # be warned! structure alignment may arise at this point
-    case theType*: trange010
-    of trange010(0): 
-        stdio*: TStdio
-
-    of trange010(1): 
-        mem*: TMem
-
-    of trange010(2): 
-        unknown*: TUnknown
-
+    theType*: cint
+    mem*: TMem
   
   RWops* = TRWops             # SDL_timer.h types
                               # Function prototype for the timer callback function
@@ -1014,20 +1002,21 @@ type
   
   TJoyButtonEvent*{.final.} = object  # SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP
                                       # The "window resized" event
-                                      #    When you get this event, you are responsible for setting a new video
-                                      #    mode with the new width and height.
+                                      # When you get this event, you are
+                                      # responsible for setting a new video
+                                      # mode with the new width and height.
     which*: byte             # The joystick device index
     button*: byte            # The joystick button index
     state*: byte             # SDL_PRESSED or SDL_RELEASED
   
   TResizeEvent*{.final.} = object  # SDL_VIDEORESIZE
                                    # A user-defined event type
-    w*: int                   # New width
-    h*: int                   # New height
+    w*: cint                   # New width
+    h*: cint                   # New height
   
   PUserEvent* = ptr TUserEvent
   TUserEvent*{.final.} = object  # SDL_USEREVENT through SDL_NUMEVENTS-1
-    code*: int                # User defined event code
+    code*: cint                # User defined event code
     data1*: Pointer           # User defined data pointer
     data2*: Pointer           # User defined data pointer 
   
@@ -1096,7 +1085,7 @@ elif defined(Unix):
       X11*: TX11
 
 else: 
-  type                        # The generic custom window manager information structure
+  type # The generic custom window manager information structure
     PSysWMinfo* = ptr TSysWMinfo
     TSysWMinfo*{.final.} = object 
       version*: Tversion
@@ -1108,46 +1097,59 @@ type
     msg*: PSysWMmsg
 
   PEvent* = ptr TEvent
-  TEvent*{.final.} = object  # This function sets up a filter to process all events before they
-                             #  change internal state and are posted to the internal event queue.
-                             #
-                             #  The filter is protypted as:
-    case theType*: TEventKind # SDL_NOEVENT, SDL_QUITEV: ();
+  TEvent*{.final.} = object  
+    # This function sets up a filter to process all events before they
+    # change internal state and are posted to the internal event queue.
+    # The filter is protypted as:
+    case kind*: TEventKind # SDL_NOEVENT, SDL_QUITEV: ();
     of ACTIVEEVENT: 
-        active*: TActiveEvent
-
+      gain*: byte              # Whether given states were gained or lost (1/0)
+      state*: byte             # A mask of the focus states
     of KEYDOWN, KEYUP: 
-        key*: TKeyboardEvent
-
+      keystate*: byte             # SDL_PRESSED or SDL_RELEASED
+      scancode*: byte           # hardware specific scancode
+      sym*: TKey                # SDL virtual keysym
+      modifier*: TMod           # current key modifiers
+      unicode*: UInt16          # translated character
     of MOUSEMOTION: 
-        motion*: TMouseMotionEvent
-
+      motionState*: byte             # The current button state
+      motionX*, motionY*: UInt16            # The X/Y coordinates of the mouse
+      xrel*: int16             # The relative motion in the X direction
+      yrel*: int16             # The relative motion in the Y direction
     of MOUSEBUTTONDOWN, MOUSEBUTTONUP: 
-        button*: TMouseButtonEvent
-
+      button*: byte            # The mouse button index
+      buttonState*: byte             # SDL_PRESSED or SDL_RELEASED
+      align: byte
+      x*: UInt16                # The X coordinates of the mouse at press time
+      y*: UInt16                # The Y coordinates of the mouse at press time
     of JOYAXISMOTION: 
-        jaxis*: TJoyAxisEvent
-
+      axis*: byte              # The joystick axis index
+      value*: int16            # The axis value (range: -32768 to 32767)
     of JOYBALLMOTION: 
-        jball*: TJoyBallEvent
-
+      ball*: byte              # The joystick trackball index
+      joyXrel*: int16             # The relative motion in the X direction
+      joyYrel*: int16             # The relative motion in the Y direction
+  
     of JOYHATMOTION: 
-        jhat*: TJoyHatEvent
+      hat*: byte               # The joystick hat index
+      hatValue*: byte          # The hat position value:
+                               # 8   1   2
+                               # 7   0   3
+                               # 6   5   4
+                               # Note that zero means the POV is centered.
 
     of JOYBUTTONDOWN, JOYBUTTONUP: 
-        jbutton*: TJoyButtonEvent
-
+      joybutton*: byte            # The joystick button index
+      joyState*: byte             # SDL_PRESSED or SDL_RELEASED
+  
     of VIDEORESIZE: 
-        resize*: TResizeEvent
-
+      w*: cint                   # New width
+      h*: cint                   # New height
     of USEREVENT: 
-        user*: TUserEvent
-
-    of SYSWMEVENT: 
-        syswm*: TSysWMEvent
-
-    else: 
-        nil
+      code*: cint                # User defined event code
+      data1*: Pointer           # User defined data pointer
+      data2*: Pointer           # User defined data pointer 
+    else: nil
 
   
   TEventFilter* = proc (event: PEvent): int{.cdecl.} # SDL_video.h types
@@ -1209,8 +1211,8 @@ type
     dst*: PPixelFormat
 
   PSurface* = ptr TSurface
-  TBlit* = proc (src: PSurface, srcrect: PRect, dst: PSurface, dstrect: PRect): int{.
-      cdecl.}
+  TBlit* = proc (src: PSurface, srcrect: PRect, 
+                 dst: PSurface, dstrect: PRect): int{.cdecl.}
   TSurface*{.final.} = object  # Useful for determining the video hardware capabilities
     flags*: int32            # Read-only
     format*: PPixelFormat     # Read-only
@@ -1302,12 +1304,12 @@ type                          # This is the system-independent thread info struc
   PWordArray* = ptr TWordArray
   TWordArray* = array[0..16383, int16] # Generic procedure pointer
   TProcedure* = proc () #------------------------------------------------------------------------------
-                        # initialization
-                        #------------------------------------------------------------------------------
-                        # This function loads the SDL dynamically linked library and initializes
-                        #  the subsystems specified by 'flags' (and those satisfying dependencies)
-                        #  Unless the SDL_INIT_NOPARACHUTE flag is set, it will install cleanup
-                        #  signal handlers for some commonly ignored fatal signals (like SIGSEGV)
+# initialization
+#------------------------------------------------------------------------------
+# This function loads the SDL dynamically linked library and initializes
+#  the subsystems specified by 'flags' (and those satisfying dependencies)
+#  Unless the SDL_INIT_NOPARACHUTE flag is set, it will install cleanup
+#  signal handlers for some commonly ignored fatal signals (like SIGSEGV)
 
 proc Init*(flags: int32): int{.cdecl, importc: "SDL_Init", dynlib: LibName.}
   # This function initializes specific SDL subsystems
diff --git a/lib/wrappers/sdl/sdl_ttf.nim b/lib/wrappers/sdl/sdl_ttf.nim
index 796a20f54..ca4b56f5a 100755
--- a/lib/wrappers/sdl/sdl_ttf.nim
+++ b/lib/wrappers/sdl/sdl_ttf.nim
@@ -178,9 +178,11 @@ const
 
 type 
   PFont* = ptr Tfont
-  TFont*{.final.} = object  # This macro can be used to fill a version structure with the compile-time
-                                #  version of the SDL_ttf library. 
-
+  TFont{.final.} = object  
+  
+  
+# This macro can be used to fill a version structure with the compile-time
+# version of the SDL_ttf library. 
 
 proc Linked_Version*(): sdl.Pversion{.cdecl, importc: "TTF_Linked_Version", 
                                       dynlib: ttfLibName.}
diff --git a/lib/wrappers/zip/libzip_all.c b/lib/wrappers/zip/libzip_all.c
new file mode 100755
index 000000000..797374b29
--- /dev/null
+++ b/lib/wrappers/zip/libzip_all.c
@@ -0,0 +1,4189 @@
+/*
+  zipint.h -- internal declarations.
+  Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
+
+  This file is part of libzip, a library to manipulate ZIP archives.
+  The authors can be contacted at <libzip@nih.at>
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+  3. The names of the authors may not be used to endorse or promote
+     products derived from this software without specific prior
+     written permission.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+  IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <zlib.h>
+
+/*
+#ifdef _MSC_VER
+#define ZIP_EXTERN __declspec(dllimport)
+#endif
+*/
+
+/*
+  zip.h -- exported declarations.
+  Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
+
+  This file is part of libzip, a library to manipulate ZIP archives.
+  The authors can be contacted at <libzip@nih.at>
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+  3. The names of the authors may not be used to endorse or promote
+     products derived from this software without specific prior
+     written permission.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+  IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#ifndef ZIP_EXTERN
+#define ZIP_EXTERN
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <time.h>
+
+/* flags for zip_open */
+
+#define ZIP_CREATE           1
+#define ZIP_EXCL             2
+#define ZIP_CHECKCONS        4
+
+
+/* flags for zip_name_locate, zip_fopen, zip_stat, ... */
+
+#define ZIP_FL_NOCASE                1 /* ignore case on name lookup */
+#define ZIP_FL_NODIR                2 /* ignore directory component */
+#define ZIP_FL_COMPRESSED        4 /* read compressed data */
+#define ZIP_FL_UNCHANGED        8 /* use original data, ignoring changes */
+#define ZIP_FL_RECOMPRESS      16 /* force recompression of data */
+
+/* archive global flags flags */
+
+#define ZIP_AFL_TORRENT                1 /* torrent zipped */
+
+/* libzip error codes */
+
+#define ZIP_ER_OK             0  /* N No error */
+#define ZIP_ER_MULTIDISK      1  /* N Multi-disk zip archives not supported */
+#define ZIP_ER_RENAME         2  /* S Renaming temporary file failed */
+#define ZIP_ER_CLOSE          3  /* S Closing zip archive failed */
+#define ZIP_ER_SEEK           4  /* S Seek error */
+#define ZIP_ER_READ           5  /* S Read error */
+#define ZIP_ER_WRITE          6  /* S Write error */
+#define ZIP_ER_CRC            7  /* N CRC error */
+#define ZIP_ER_ZIPCLOSED      8  /* N Containing zip archive was closed */
+#define ZIP_ER_NOENT          9  /* N No such file */
+#define ZIP_ER_EXISTS        10  /* N File already exists */
+#define ZIP_ER_OPEN          11  /* S Can't open file */
+#define ZIP_ER_TMPOPEN       12  /* S Failure to create temporary file */
+#define ZIP_ER_ZLIB          13  /* Z Zlib error */
+#define ZIP_ER_MEMORY        14  /* N Malloc failure */
+#define ZIP_ER_CHANGED       15  /* N Entry has been changed */
+#define ZIP_ER_COMPNOTSUPP   16  /* N Compression method not supported */
+#define ZIP_ER_EOF           17  /* N Premature EOF */
+#define ZIP_ER_INVAL         18  /* N Invalid argument */
+#define ZIP_ER_NOZIP         19  /* N Not a zip archive */
+#define ZIP_ER_INTERNAL      20  /* N Internal error */
+#define ZIP_ER_INCONS        21  /* N Zip archive inconsistent */
+#define ZIP_ER_REMOVE        22  /* S Can't remove file */
+#define ZIP_ER_DELETED       23  /* N Entry has been deleted */
+
+
+/* type of system error value */
+
+#define ZIP_ET_NONE              0  /* sys_err unused */
+#define ZIP_ET_SYS              1  /* sys_err is errno */
+#define ZIP_ET_ZLIB              2  /* sys_err is zlib error code */
+
+/* compression methods */
+
+#define ZIP_CM_DEFAULT              -1  /* better of deflate or store */
+#define ZIP_CM_STORE               0  /* stored (uncompressed) */
+#define ZIP_CM_SHRINK               1  /* shrunk */
+#define ZIP_CM_REDUCE_1               2  /* reduced with factor 1 */
+#define ZIP_CM_REDUCE_2               3  /* reduced with factor 2 */
+#define ZIP_CM_REDUCE_3               4  /* reduced with factor 3 */
+#define ZIP_CM_REDUCE_4               5  /* reduced with factor 4 */
+#define ZIP_CM_IMPLODE               6  /* imploded */
+/* 7 - Reserved for Tokenizing compression algorithm */
+#define ZIP_CM_DEFLATE               8  /* deflated */
+#define ZIP_CM_DEFLATE64       9  /* deflate64 */
+#define ZIP_CM_PKWARE_IMPLODE 10  /* PKWARE imploding */
+/* 11 - Reserved by PKWARE */
+#define ZIP_CM_BZIP2          12  /* compressed using BZIP2 algorithm */
+/* 13 - Reserved by PKWARE */
+#define ZIP_CM_LZMA              14  /* LZMA (EFS) */
+/* 15-17 - Reserved by PKWARE */
+#define ZIP_CM_TERSE              18  /* compressed using IBM TERSE (new) */
+#define ZIP_CM_LZ77           19  /* IBM LZ77 z Architecture (PFS) */
+#define ZIP_CM_WAVPACK              97  /* WavPack compressed data */
+#define ZIP_CM_PPMD              98  /* PPMd version I, Rev 1 */
+
+/* encryption methods */
+
+#define ZIP_EM_NONE               0  /* not encrypted */
+#define ZIP_EM_TRAD_PKWARE     1  /* traditional PKWARE encryption */
+#if 0 /* Strong Encryption Header not parsed yet */
+#define ZIP_EM_DES        0x6601  /* strong encryption: DES */
+#define ZIP_EM_RC2_OLD    0x6602  /* strong encryption: RC2, version < 5.2 */
+#define ZIP_EM_3DES_168   0x6603
+#define ZIP_EM_3DES_112   0x6609
+#define ZIP_EM_AES_128    0x660e
+#define ZIP_EM_AES_192    0x660f
+#define ZIP_EM_AES_256    0x6610
+#define ZIP_EM_RC2        0x6702  /* strong encryption: RC2, version >= 5.2 */
+#define ZIP_EM_RC4        0x6801
+#endif
+#define ZIP_EM_UNKNOWN    0xffff  /* unknown algorithm */
+
+typedef long myoff_t; /* XXX: 64 bit support */
+
+enum zip_source_cmd {
+    ZIP_SOURCE_OPEN,        /* prepare for reading */
+    ZIP_SOURCE_READ,         /* read data */
+    ZIP_SOURCE_CLOSE,        /* reading is done */
+    ZIP_SOURCE_STAT,        /* get meta information */
+    ZIP_SOURCE_ERROR,        /* get error information */
+    ZIP_SOURCE_FREE        /* cleanup and free resources */
+};
+
+typedef ssize_t (*zip_source_callback)(void *state, void *data,
+                                       size_t len, enum zip_source_cmd cmd);
+
+struct zip_stat {
+    const char *name;                        /* name of the file */
+    int index;                                /* index within archive */
+    unsigned int crc;                        /* crc of file data */
+    time_t mtime;                        /* modification time */
+    myoff_t size;                                /* size of file (uncompressed) */
+    myoff_t comp_size;                        /* size of file (compressed) */
+    unsigned short comp_method;                /* compression method used */
+    unsigned short encryption_method;        /* encryption method used */
+};
+
+struct zip;
+struct zip_file;
+struct zip_source;
+
+
+ZIP_EXTERN int zip_add(struct zip *, const char *, struct zip_source *);
+ZIP_EXTERN int zip_add_dir(struct zip *, const char *);
+ZIP_EXTERN int zip_close(struct zip *);
+ZIP_EXTERN int zip_delete(struct zip *, int);
+ZIP_EXTERN void zip_error_clear(struct zip *);
+ZIP_EXTERN void zip_error_get(struct zip *, int *, int *);
+ZIP_EXTERN int zip_error_get_sys_type(int);
+ZIP_EXTERN int zip_error_to_str(char *, size_t, int, int);
+ZIP_EXTERN int zip_fclose(struct zip_file *);
+ZIP_EXTERN void zip_file_error_clear(struct zip_file *);
+ZIP_EXTERN void zip_file_error_get(struct zip_file *, int *, int *);
+ZIP_EXTERN const char *zip_file_strerror(struct zip_file *);
+ZIP_EXTERN struct zip_file *zip_fopen(struct zip *, const char *, int);
+ZIP_EXTERN struct zip_file *zip_fopen_index(struct zip *, int, int);
+ZIP_EXTERN ssize_t zip_fread(struct zip_file *, void *, size_t);
+ZIP_EXTERN const char *zip_get_archive_comment(struct zip *, int *, int);
+ZIP_EXTERN int zip_get_archive_flag(struct zip *, int, int);
+ZIP_EXTERN const char *zip_get_file_comment(struct zip *, int, int *, int);
+ZIP_EXTERN const char *zip_get_name(struct zip *, int, int);
+ZIP_EXTERN int zip_get_num_files(struct zip *);
+ZIP_EXTERN int zip_name_locate(struct zip *, const char *, int);
+ZIP_EXTERN struct zip *zip_open(const char *, int, int *);
+ZIP_EXTERN int zip_rename(struct zip *, int, const char *);
+ZIP_EXTERN int zip_replace(struct zip *, int, struct zip_source *);
+ZIP_EXTERN int zip_set_archive_comment(struct zip *, const char *, int);
+ZIP_EXTERN int zip_set_archive_flag(struct zip *, int, int);
+ZIP_EXTERN int zip_set_file_comment(struct zip *, int, const char *, int);
+ZIP_EXTERN struct zip_source *zip_source_buffer(struct zip *, const void *,
+                                                myoff_t, int);
+ZIP_EXTERN struct zip_source *zip_source_file(struct zip *, const char *,
+                                              myoff_t, myoff_t);
+ZIP_EXTERN struct zip_source *zip_source_filep(struct zip *, FILE *,
+                                               myoff_t, myoff_t);
+ZIP_EXTERN void zip_source_free(struct zip_source *);
+ZIP_EXTERN struct zip_source *zip_source_function(struct zip *,
+                                                  zip_source_callback, void *);
+ZIP_EXTERN struct zip_source *zip_source_zip(struct zip *, struct zip *,
+                                             int, int, myoff_t, myoff_t);
+ZIP_EXTERN int zip_stat(struct zip *, const char *, int, struct zip_stat *);
+ZIP_EXTERN int zip_stat_index(struct zip *, int, int, struct zip_stat *);
+ZIP_EXTERN void zip_stat_init(struct zip_stat *);
+ZIP_EXTERN const char *zip_strerror(struct zip *);
+ZIP_EXTERN int zip_unchange(struct zip *, int);
+ZIP_EXTERN int zip_unchange_all(struct zip *);
+ZIP_EXTERN int zip_unchange_archive(struct zip *);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+/* config.h.  Generated from config.h.in by configure.  */
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't.
+   */
+/* #undef HAVE_DECL_TZNAME */
+
+#define HAVE_CONFIG_H 1
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
+/* Define to 1 if you have the `fseeko' function. */
+#define HAVE_FSEEKO 1
+
+/* Define to 1 if you have the `ftello' function. */
+#define HAVE_FTELLO 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the `z' library (-lz). */
+#define HAVE_LIBZ 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `mkstemp' function. */
+#define HAVE_MKSTEMP 1
+
+/* Define to 1 if you have the `MoveFileExA' function. */
+/* #undef HAVE_MOVEFILEEXA */
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if `tm_zone' is member of `struct tm'. */
+#define HAVE_STRUCT_TM_TM_ZONE 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
+   `HAVE_STRUCT_TM_TM_ZONE' instead. */
+#define HAVE_TM_ZONE 1
+
+/* Define to 1 if you don't have `tm_zone' but do have the external array
+   `tzname'. */
+/* #undef HAVE_TZNAME */
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+/* #undef NO_MINUS_C_MINUS_O */
+
+/* Name of package */
+#define PACKAGE "libzip"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "libzip@nih.at"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "libzip"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "libzip 0.9"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "libzip"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "0.9"
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+/* #undef TM_IN_SYS_TIME */
+
+/* Version number of package */
+#define VERSION "0.9"
+
+
+#ifndef HAVE_MKSTEMP
+int _zip_mkstemp(char *);
+#define mkstemp _zip_mkstemp
+#endif
+
+#ifdef HAVE_MOVEFILEEXA
+#include <windows.h>
+#define _zip_rename(s, t)                                                \
+        (!MoveFileExA((s), (t),                                                \
+                     MOVEFILE_COPY_ALLOWED|MOVEFILE_REPLACE_EXISTING))
+#else
+#define _zip_rename        rename
+#endif
+
+#ifndef HAVE_FSEEKO
+#define fseeko(s, o, w)        (fseek((s), (long int)(o), (w)))
+#endif
+#ifndef HAVE_FTELLO
+#define ftello(s)        ((long)ftell((s)))
+#endif
+
+
+#define CENTRAL_MAGIC "PK\1\2"
+#define LOCAL_MAGIC   "PK\3\4"
+#define EOCD_MAGIC    "PK\5\6"
+#define DATADES_MAGIC "PK\7\8"
+#define TORRENT_SIG        "TORRENTZIPPED-"
+#define TORRENT_SIG_LEN        14
+#define TORRENT_CRC_LEN 8
+#define TORRENT_MEM_LEVEL        8
+#define CDENTRYSIZE         46u
+#define LENTRYSIZE          30
+#define MAXCOMLEN        65536
+#define EOCDLEN             22
+#define CDBUFSIZE       (MAXCOMLEN+EOCDLEN)
+#define BUFSIZE                8192
+
+
+/* state of change of a file in zip archive */
+
+enum zip_state { ZIP_ST_UNCHANGED, ZIP_ST_DELETED, ZIP_ST_REPLACED,
+                 ZIP_ST_ADDED, ZIP_ST_RENAMED };
+
+/* constants for struct zip_file's member flags */
+
+#define ZIP_ZF_EOF        1 /* EOF reached */
+#define ZIP_ZF_DECOMP        2 /* decompress data */
+#define ZIP_ZF_CRC        4 /* compute and compare CRC */
+
+/* directory entry: general purpose bit flags */
+
+#define ZIP_GPBF_ENCRYPTED                0x0001        /* is encrypted */
+#define ZIP_GPBF_DATA_DESCRIPTOR        0x0008        /* crc/size after file data */
+#define ZIP_GPBF_STRONG_ENCRYPTION        0x0040  /* uses strong encryption */
+
+/* error information */
+
+struct zip_error {
+    int zip_err;        /* libzip error code (ZIP_ER_*) */
+    int sys_err;        /* copy of errno (E*) or zlib error code */
+    char *str;                /* string representation or NULL */
+};
+
+/* zip archive, part of API */
+
+struct zip {
+    char *zn;                        /* file name */
+    FILE *zp;                        /* file */
+    struct zip_error error;        /* error information */
+
+    unsigned int flags;                /* archive global flags */
+    unsigned int ch_flags;        /* changed archive global flags */
+
+    struct zip_cdir *cdir;        /* central directory */
+    char *ch_comment;                /* changed archive comment */
+    int ch_comment_len;                /* length of changed zip archive
+                                 * comment, -1 if unchanged */
+    int nentry;                        /* number of entries */
+    int nentry_alloc;                /* number of entries allocated */
+    struct zip_entry *entry;        /* entries */
+    int nfile;                        /* number of opened files within archive */
+    int nfile_alloc;                /* number of files allocated */
+    struct zip_file **file;        /* opened files within archive */
+};
+
+/* file in zip archive, part of API */
+
+struct zip_file {
+    struct zip *za;                /* zip archive containing this file */
+    struct zip_error error;        /* error information */
+    int flags;                        /* -1: eof, >0: error */
+
+    int method;                        /* compression method */
+    myoff_t fpos;                        /* position within zip file (fread/fwrite) */
+    unsigned long bytes_left;        /* number of bytes left to read */
+    unsigned long cbytes_left;  /* number of bytes of compressed data left */
+    
+    unsigned long crc;                /* CRC so far */
+    unsigned long crc_orig;        /* CRC recorded in archive */
+    
+    char *buffer;
+    z_stream *zstr;
+};
+
+/* zip archive directory entry (central or local) */
+
+struct zip_dirent {
+    unsigned short version_madeby;        /* (c)  version of creator */
+    unsigned short version_needed;        /* (cl) version needed to extract */
+    unsigned short bitflags;                /* (cl) general purpose bit flag */
+    unsigned short comp_method;                /* (cl) compression method used */
+    time_t last_mod;                        /* (cl) time of last modification */
+    unsigned int crc;                        /* (cl) CRC-32 of uncompressed data */
+    unsigned int comp_size;                /* (cl) size of commpressed data */
+    unsigned int uncomp_size;                /* (cl) size of uncommpressed data */
+    char *filename;                        /* (cl) file name (NUL-terminated) */
+    unsigned short filename_len;        /* (cl) length of filename (w/o NUL) */
+    char *extrafield;                        /* (cl) extra field */
+    unsigned short extrafield_len;        /* (cl) length of extra field */
+    char *comment;                        /* (c)  file comment */
+    unsigned short comment_len;                /* (c)  length of file comment */
+    unsigned short disk_number;                /* (c)  disk number start */
+    unsigned short int_attrib;                /* (c)  internal file attributes */
+    unsigned int ext_attrib;                /* (c)  external file attributes */
+    unsigned int offset;                /* (c)  offset of local header  */
+};
+
+/* zip archive central directory */
+
+struct zip_cdir {
+    struct zip_dirent *entry;        /* directory entries */
+    int nentry;                        /* number of entries */
+
+    unsigned int size;                /* size of central direcotry */
+    unsigned int offset;        /* offset of central directory in file */
+    char *comment;                /* zip archive comment */
+    unsigned short comment_len;        /* length of zip archive comment */
+};
+
+
+
+struct zip_source {
+    zip_source_callback f;
+    void *ud;
+};
+
+/* entry in zip archive directory */
+
+struct zip_entry {
+    enum zip_state state;
+    struct zip_source *source;
+    char *ch_filename;
+    char *ch_comment;
+    int ch_comment_len;
+};
+
+
+
+extern const char * const _zip_err_str[];
+extern const int _zip_nerr_str;
+extern const int _zip_err_type[];
+
+
+
+#define ZIP_ENTRY_DATA_CHANGED(x)        \
+                        ((x)->state == ZIP_ST_REPLACED  \
+                         || (x)->state == ZIP_ST_ADDED)
+
+
+
+int _zip_cdir_compute_crc(struct zip *, uLong *);
+void _zip_cdir_free(struct zip_cdir *);
+struct zip_cdir *_zip_cdir_new(int, struct zip_error *);
+int _zip_cdir_write(struct zip_cdir *, FILE *, struct zip_error *);
+
+void _zip_dirent_finalize(struct zip_dirent *);
+void _zip_dirent_init(struct zip_dirent *);
+int _zip_dirent_read(struct zip_dirent *, FILE *,
+                     unsigned char **, unsigned int, int, struct zip_error *);
+void _zip_dirent_torrent_normalize(struct zip_dirent *);
+int _zip_dirent_write(struct zip_dirent *, FILE *, int, struct zip_error *);
+
+void _zip_entry_free(struct zip_entry *);
+void _zip_entry_init(struct zip *, int);
+struct zip_entry *_zip_entry_new(struct zip *);
+
+void _zip_error_clear(struct zip_error *);
+void _zip_error_copy(struct zip_error *, struct zip_error *);
+void _zip_error_fini(struct zip_error *);
+void _zip_error_get(struct zip_error *, int *, int *);
+void _zip_error_init(struct zip_error *);
+void _zip_error_set(struct zip_error *, int, int);
+const char *_zip_error_strerror(struct zip_error *);
+
+int _zip_file_fillbuf(void *, size_t, struct zip_file *);
+unsigned int _zip_file_get_offset(struct zip *, int);
+
+int _zip_filerange_crc(FILE *, myoff_t, myoff_t, uLong *, struct zip_error *);
+
+struct zip_source *_zip_source_file_or_p(struct zip *, const char *, FILE *,
+                                         myoff_t, myoff_t);
+
+void _zip_free(struct zip *);
+const char *_zip_get_name(struct zip *, int, int, struct zip_error *);
+int _zip_local_header_read(struct zip *, int);
+void *_zip_memdup(const void *, size_t, struct zip_error *);
+int _zip_name_locate(struct zip *, const char *, int, struct zip_error *);
+struct zip *_zip_new(struct zip_error *);
+unsigned short _zip_read2(unsigned char **);
+unsigned int _zip_read4(unsigned char **);
+int _zip_replace(struct zip *, int, const char *, struct zip_source *);
+int _zip_set_name(struct zip *, int, const char *);
+int _zip_unchange(struct zip *, int, int);
+void _zip_unchange_data(struct zip_entry *);
+
+         
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+const char *
+_zip_error_strerror(struct zip_error *err)
+{
+    const char *zs, *ss;
+    char buf[128], *s;
+
+    _zip_error_fini(err);
+
+    if (err->zip_err < 0 || err->zip_err >= _zip_nerr_str) {
+        sprintf(buf, "Unknown error %d", err->zip_err);
+        zs = NULL;
+        ss = buf;
+    }
+    else {
+        zs = _zip_err_str[err->zip_err];
+        
+        switch (_zip_err_type[err->zip_err]) {
+        case ZIP_ET_SYS:
+            ss = strerror(err->sys_err);
+            break;
+
+        case ZIP_ET_ZLIB:
+            ss = zError(err->sys_err);
+            break;
+
+        default:
+            ss = NULL;
+        }
+    }
+
+    if (ss == NULL)
+        return zs;
+    else {
+        if ((s=(char *)malloc(strlen(ss)
+                              + (zs ? strlen(zs)+2 : 0) + 1)) == NULL)
+            return _zip_err_str[ZIP_ER_MEMORY];
+        
+        sprintf(s, "%s%s%s",
+                (zs ? zs : ""),
+                (zs ? ": " : ""),
+                ss);
+        err->str = s;
+
+        return s;
+    }
+}
+
+#include <stdlib.h>
+
+
+
+void
+_zip_error_clear(struct zip_error *err)
+{
+    err->zip_err = ZIP_ER_OK;
+    err->sys_err = 0;
+}
+
+
+
+void
+_zip_error_copy(struct zip_error *dst, struct zip_error *src)
+{
+    dst->zip_err = src->zip_err;
+    dst->sys_err = src->sys_err;
+}
+
+
+
+void
+_zip_error_fini(struct zip_error *err)
+{
+    free(err->str);
+    err->str = NULL;
+}
+
+
+
+void
+_zip_error_get(struct zip_error *err, int *zep, int *sep)
+{
+    if (zep)
+        *zep = err->zip_err;
+    if (sep) {
+        if (zip_error_get_sys_type(err->zip_err) != ZIP_ET_NONE)
+            *sep = err->sys_err;
+        else
+            *sep = 0;
+    }
+}
+
+
+
+void
+_zip_error_init(struct zip_error *err)
+{
+    err->zip_err = ZIP_ER_OK;
+    err->sys_err = 0;
+    err->str = NULL;
+}
+
+
+
+void
+_zip_error_set(struct zip_error *err, int ze, int se)
+{
+    if (err) {
+        err->zip_err = ze;
+        err->sys_err = se;
+    }
+}
+
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+
+
+int
+_zip_mkstemp(char *path)
+{
+        int fd;   
+        char *start, *trv;
+        struct stat sbuf;
+        pid_t pid;
+
+        /* To guarantee multiple calls generate unique names even if
+           the file is not created. 676 different possibilities with 7
+           or more X's, 26 with 6 or less. */
+        static char xtra[2] = "aa";
+        int xcnt = 0;
+
+        pid = getpid();
+
+        /* Move to end of path and count trailing X's. */
+        for (trv = path; *trv; ++trv)
+                if (*trv == 'X')
+                        xcnt++;
+                else
+                        xcnt = 0;        
+
+        /* Use at least one from xtra.  Use 2 if more than 6 X's. */
+        if (*(trv - 1) == 'X')
+                *--trv = xtra[0];
+        if (xcnt > 6 && *(trv - 1) == 'X')
+                *--trv = xtra[1];
+
+        /* Set remaining X's to pid digits with 0's to the left. */
+        while (*--trv == 'X') {
+                *trv = (pid % 10) + '0';
+                pid /= 10;
+        }
+
+        /* update xtra for next call. */
+        if (xtra[0] != 'z')
+                xtra[0]++;
+        else {
+                xtra[0] = 'a';
+                if (xtra[1] != 'z')
+                        xtra[1]++;
+                else
+                        xtra[1] = 'a';
+        }
+
+        /*
+         * check the target directory; if you have six X's and it
+         * doesn't exist this runs for a *very* long time.
+         */
+        for (start = trv + 1;; --trv) {
+                if (trv <= path)
+                        break;
+                if (*trv == '/') {
+                        *trv = '\0';
+                        if (stat(path, &sbuf))
+                                return (0);
+                        if (!S_ISDIR(sbuf.st_mode)) {
+                                errno = ENOTDIR;
+                                return (0);
+                        }
+                        *trv = '/';
+                        break;
+                }
+        }
+
+        for (;;) {
+                if ((fd=open(path, O_CREAT|O_EXCL|O_RDWR|O_BINARY, 0600)) >= 0)
+                        return (fd);
+                if (errno != EEXIST)
+                        return (0);
+
+                /* tricky little algorithm for backward compatibility */
+                for (trv = start;;) {
+                        if (!*trv)
+                                return (0);
+                        if (*trv == 'z')
+                                *trv++ = 'a';
+                        else {
+                                if (isdigit((unsigned char)*trv))
+                                        *trv = 'a';
+                                else
+                                        ++*trv;
+                                break;
+                        }
+                }
+        }
+        /*NOTREACHED*/
+}
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+static time_t _zip_d2u_time(int, int);
+static char *_zip_readfpstr(FILE *, unsigned int, int, struct zip_error *);
+static char *_zip_readstr(unsigned char **, int, int, struct zip_error *);
+static void _zip_u2d_time(time_t, unsigned short *, unsigned short *);
+static void _zip_write2(unsigned short, FILE *);
+static void _zip_write4(unsigned int, FILE *);
+
+
+
+void
+_zip_cdir_free(struct zip_cdir *cd)
+{
+    int i;
+
+    if (!cd)
+        return;
+
+    for (i=0; i<cd->nentry; i++)
+        _zip_dirent_finalize(cd->entry+i);
+    free(cd->comment);
+    free(cd->entry);
+    free(cd);
+}
+
+
+
+struct zip_cdir *
+_zip_cdir_new(int nentry, struct zip_error *error)
+{
+    struct zip_cdir *cd;
+    
+    if ((cd=(struct zip_cdir *)malloc(sizeof(*cd))) == NULL) {
+        _zip_error_set(error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+
+    if ((cd->entry=(struct zip_dirent *)malloc(sizeof(*(cd->entry))*nentry))
+        == NULL) {
+        _zip_error_set(error, ZIP_ER_MEMORY, 0);
+        free(cd);
+        return NULL;
+    }
+
+    /* entries must be initialized by caller */
+
+    cd->nentry = nentry;
+    cd->size = cd->offset = 0;
+    cd->comment = NULL;
+    cd->comment_len = 0;
+
+    return cd;
+}
+
+
+
+int
+_zip_cdir_write(struct zip_cdir *cd, FILE *fp, struct zip_error *error)
+{
+    int i;
+
+    cd->offset = ftello(fp);
+
+    for (i=0; i<cd->nentry; i++) {
+        if (_zip_dirent_write(cd->entry+i, fp, 0, error) != 0)
+            return -1;
+    }
+
+    cd->size = ftello(fp) - cd->offset;
+    
+    /* clearerr(fp); */
+    fwrite(EOCD_MAGIC, 1, 4, fp);
+    _zip_write4(0, fp);
+    _zip_write2((unsigned short)cd->nentry, fp);
+    _zip_write2((unsigned short)cd->nentry, fp);
+    _zip_write4(cd->size, fp);
+    _zip_write4(cd->offset, fp);
+    _zip_write2(cd->comment_len, fp);
+    fwrite(cd->comment, 1, cd->comment_len, fp);
+
+    if (ferror(fp)) {
+        _zip_error_set(error, ZIP_ER_WRITE, errno);
+        return -1;
+    }
+
+    return 0;
+}
+
+
+
+void
+_zip_dirent_finalize(struct zip_dirent *zde)
+{
+    free(zde->filename);
+    zde->filename = NULL;
+    free(zde->extrafield);
+    zde->extrafield = NULL;
+    free(zde->comment);
+    zde->comment = NULL;
+}
+
+
+
+void
+_zip_dirent_init(struct zip_dirent *de)
+{
+    de->version_madeby = 0;
+    de->version_needed = 20; /* 2.0 */
+    de->bitflags = 0;
+    de->comp_method = 0;
+    de->last_mod = 0;
+    de->crc = 0;
+    de->comp_size = 0;
+    de->uncomp_size = 0;
+    de->filename = NULL;
+    de->filename_len = 0;
+    de->extrafield = NULL;
+    de->extrafield_len = 0;
+    de->comment = NULL;
+    de->comment_len = 0;
+    de->disk_number = 0;
+    de->int_attrib = 0;
+    de->ext_attrib = 0;
+    de->offset = 0;
+}
+
+
+
+/* _zip_dirent_read(zde, fp, bufp, left, localp, error):
+   Fills the zip directory entry zde.
+
+   If bufp is non-NULL, data is taken from there and bufp is advanced
+   by the amount of data used; no more than left bytes are used.
+   Otherwise data is read from fp as needed.
+
+   If localp != 0, it reads a local header instead of a central
+   directory entry.
+
+   Returns 0 if successful. On error, error is filled in and -1 is
+   returned.
+*/
+
+int
+_zip_dirent_read(struct zip_dirent *zde, FILE *fp,
+                 unsigned char **bufp, unsigned int left, int localp,
+                 struct zip_error *error)
+{
+    unsigned char buf[CDENTRYSIZE];
+    unsigned char *cur;
+    unsigned short dostime, dosdate;
+    unsigned int size;
+
+    if (localp)
+        size = LENTRYSIZE;
+    else
+        size = CDENTRYSIZE;
+    
+    if (bufp) {
+        /* use data from buffer */
+        cur = *bufp;
+        if (left < size) {
+            _zip_error_set(error, ZIP_ER_NOZIP, 0);
+            return -1;
+        }
+    }
+    else {
+        /* read entry from disk */
+        if ((fread(buf, 1, size, fp)<size)) {
+            _zip_error_set(error, ZIP_ER_READ, errno);
+            return -1;
+        }
+        left = size;
+        cur = buf;
+    }
+
+    if (memcmp(cur, (localp ? LOCAL_MAGIC : CENTRAL_MAGIC), 4) != 0) {
+        _zip_error_set(error, ZIP_ER_NOZIP, 0);
+        return -1;
+    }
+    cur += 4;
+
+    
+    /* convert buffercontents to zip_dirent */
+    
+    if (!localp)
+        zde->version_madeby = _zip_read2(&cur);
+    else
+        zde->version_madeby = 0;
+    zde->version_needed = _zip_read2(&cur);
+    zde->bitflags = _zip_read2(&cur);
+    zde->comp_method = _zip_read2(&cur);
+    
+    /* convert to time_t */
+    dostime = _zip_read2(&cur);
+    dosdate = _zip_read2(&cur);
+    zde->last_mod = _zip_d2u_time(dostime, dosdate);
+    
+    zde->crc = _zip_read4(&cur);
+    zde->comp_size = _zip_read4(&cur);
+    zde->uncomp_size = _zip_read4(&cur);
+    
+    zde->filename_len = _zip_read2(&cur);
+    zde->extrafield_len = _zip_read2(&cur);
+    
+    if (localp) {
+        zde->comment_len = 0;
+        zde->disk_number = 0;
+        zde->int_attrib = 0;
+        zde->ext_attrib = 0;
+        zde->offset = 0;
+    } else {
+        zde->comment_len = _zip_read2(&cur);
+        zde->disk_number = _zip_read2(&cur);
+        zde->int_attrib = _zip_read2(&cur);
+        zde->ext_attrib = _zip_read4(&cur);
+        zde->offset = _zip_read4(&cur);
+    }
+
+    zde->filename = NULL;
+    zde->extrafield = NULL;
+    zde->comment = NULL;
+
+    if (bufp) {
+        if (left < CDENTRYSIZE + (zde->filename_len+zde->extrafield_len
+                                  +zde->comment_len)) {
+            _zip_error_set(error, ZIP_ER_NOZIP, 0);
+            return -1;
+        }
+
+        if (zde->filename_len) {
+            zde->filename = _zip_readstr(&cur, zde->filename_len, 1, error);
+            if (!zde->filename)
+                    return -1;
+        }
+
+        if (zde->extrafield_len) {
+            zde->extrafield = _zip_readstr(&cur, zde->extrafield_len, 0,
+                                           error);
+            if (!zde->extrafield)
+                return -1;
+        }
+
+        if (zde->comment_len) {
+            zde->comment = _zip_readstr(&cur, zde->comment_len, 0, error);
+            if (!zde->comment)
+                return -1;
+        }
+    }
+    else {
+        if (zde->filename_len) {
+            zde->filename = _zip_readfpstr(fp, zde->filename_len, 1, error);
+            if (!zde->filename)
+                    return -1;
+        }
+
+        if (zde->extrafield_len) {
+            zde->extrafield = _zip_readfpstr(fp, zde->extrafield_len, 0,
+                                             error);
+            if (!zde->extrafield)
+                return -1;
+        }
+
+        if (zde->comment_len) {
+            zde->comment = _zip_readfpstr(fp, zde->comment_len, 0, error);
+            if (!zde->comment)
+                return -1;
+        }
+    }
+
+    if (bufp)
+      *bufp = cur;
+
+    return 0;
+}
+
+
+
+/* _zip_dirent_torrent_normalize(de);
+   Set values suitable for torrentzip.
+*/
+
+void
+_zip_dirent_torrent_normalize(struct zip_dirent *de)
+{
+    static struct tm torrenttime;
+    static time_t last_mod = 0;
+
+    if (last_mod == 0) {
+#ifdef HAVE_STRUCT_TM_TM_ZONE
+        time_t now;
+        struct tm *l;
+#endif
+
+        torrenttime.tm_sec = 0;
+        torrenttime.tm_min = 32;
+        torrenttime.tm_hour = 23;
+        torrenttime.tm_mday = 24;
+        torrenttime.tm_mon = 11;
+        torrenttime.tm_year = 96;
+        torrenttime.tm_wday = 0;
+        torrenttime.tm_yday = 0;
+        torrenttime.tm_isdst = 0;
+
+#ifdef HAVE_STRUCT_TM_TM_ZONE
+        time(&now);
+        l = localtime(&now);
+        torrenttime.tm_gmtoff = l->tm_gmtoff;
+        torrenttime.tm_zone = l->tm_zone;
+#endif
+
+        last_mod = mktime(&torrenttime);
+    }
+    
+    de->version_madeby = 0;
+    de->version_needed = 20; /* 2.0 */
+    de->bitflags = 2; /* maximum compression */
+    de->comp_method = ZIP_CM_DEFLATE;
+    de->last_mod = last_mod;
+
+    de->disk_number = 0;
+    de->int_attrib = 0;
+    de->ext_attrib = 0;
+    de->offset = 0;
+
+    free(de->extrafield);
+    de->extrafield = NULL;
+    de->extrafield_len = 0;
+    free(de->comment);
+    de->comment = NULL;
+    de->comment_len = 0;
+}
+
+
+
+/* _zip_dirent_write(zde, fp, localp, error):
+   Writes zip directory entry zde to file fp.
+
+   If localp != 0, it writes a local header instead of a central
+   directory entry.
+
+   Returns 0 if successful. On error, error is filled in and -1 is
+   returned.
+*/
+
+int
+_zip_dirent_write(struct zip_dirent *zde, FILE *fp, int localp,
+                  struct zip_error *error)
+{
+    unsigned short dostime, dosdate;
+
+    fwrite(localp ? LOCAL_MAGIC : CENTRAL_MAGIC, 1, 4, fp);
+
+    if (!localp)
+        _zip_write2(zde->version_madeby, fp);
+    _zip_write2(zde->version_needed, fp);
+    _zip_write2(zde->bitflags, fp);
+    _zip_write2(zde->comp_method, fp);
+
+    _zip_u2d_time(zde->last_mod, &dostime, &dosdate);
+    _zip_write2(dostime, fp);
+    _zip_write2(dosdate, fp);
+    
+    _zip_write4(zde->crc, fp);
+    _zip_write4(zde->comp_size, fp);
+    _zip_write4(zde->uncomp_size, fp);
+    
+    _zip_write2(zde->filename_len, fp);
+    _zip_write2(zde->extrafield_len, fp);
+    
+    if (!localp) {
+        _zip_write2(zde->comment_len, fp);
+        _zip_write2(zde->disk_number, fp);
+        _zip_write2(zde->int_attrib, fp);
+        _zip_write4(zde->ext_attrib, fp);
+        _zip_write4(zde->offset, fp);
+    }
+
+    if (zde->filename_len)
+        fwrite(zde->filename, 1, zde->filename_len, fp);
+
+    if (zde->extrafield_len)
+        fwrite(zde->extrafield, 1, zde->extrafield_len, fp);
+
+    if (!localp) {
+        if (zde->comment_len)
+            fwrite(zde->comment, 1, zde->comment_len, fp);
+    }
+
+    if (ferror(fp)) {
+        _zip_error_set(error, ZIP_ER_WRITE, errno);
+        return -1;
+    }
+
+    return 0;
+}
+
+
+
+static time_t
+_zip_d2u_time(int dtime, int ddate)
+{
+    struct tm *tm;
+    time_t now;
+
+    now = time(NULL);
+    tm = localtime(&now);
+    /* let mktime decide if DST is in effect */
+    tm->tm_isdst = -1;
+    
+    tm->tm_year = ((ddate>>9)&127) + 1980 - 1900;
+    tm->tm_mon = ((ddate>>5)&15) - 1;
+    tm->tm_mday = ddate&31;
+
+    tm->tm_hour = (dtime>>11)&31;
+    tm->tm_min = (dtime>>5)&63;
+    tm->tm_sec = (dtime<<1)&62;
+
+    return mktime(tm);
+}
+
+
+
+unsigned short
+_zip_read2(unsigned char **a)
+{
+    unsigned short ret;
+
+    ret = (*a)[0]+((*a)[1]<<8);
+    *a += 2;
+
+    return ret;
+}
+
+
+
+unsigned int
+_zip_read4(unsigned char **a)
+{
+    unsigned int ret;
+
+    ret = ((((((*a)[3]<<8)+(*a)[2])<<8)+(*a)[1])<<8)+(*a)[0];
+    *a += 4;
+
+    return ret;
+}
+
+
+
+static char *
+_zip_readfpstr(FILE *fp, unsigned int len, int nulp, struct zip_error *error)
+{
+    char *r, *o;
+
+    r = (char *)malloc(nulp ? len+1 : len);
+    if (!r) {
+        _zip_error_set(error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+
+    if (fread(r, 1, len, fp)<len) {
+        free(r);
+        _zip_error_set(error, ZIP_ER_READ, errno);
+        return NULL;
+    }
+
+    if (nulp) {
+        /* replace any in-string NUL characters with spaces */
+        r[len] = 0;
+        for (o=r; o<r+len; o++)
+            if (*o == '\0')
+                *o = ' ';
+    }
+    
+    return r;
+}
+
+
+
+static char *
+_zip_readstr(unsigned char **buf, int len, int nulp, struct zip_error *error)
+{
+    char *r, *o;
+
+    r = (char *)malloc(nulp ? len+1 : len);
+    if (!r) {
+        _zip_error_set(error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+    
+    memcpy(r, *buf, len);
+    *buf += len;
+
+    if (nulp) {
+        /* replace any in-string NUL characters with spaces */
+        r[len] = 0;
+        for (o=r; o<r+len; o++)
+            if (*o == '\0')
+                *o = ' ';
+    }
+
+    return r;
+}
+
+
+
+static void
+_zip_write2(unsigned short i, FILE *fp)
+{
+    putc(i&0xff, fp);
+    putc((i>>8)&0xff, fp);
+
+    return;
+}
+
+
+
+static void
+_zip_write4(unsigned int i, FILE *fp)
+{
+    putc(i&0xff, fp);
+    putc((i>>8)&0xff, fp);
+    putc((i>>16)&0xff, fp);
+    putc((i>>24)&0xff, fp);
+    
+    return;
+}
+
+
+
+static void
+_zip_u2d_time(time_t time, unsigned short *dtime, unsigned short *ddate)
+{
+    struct tm *tm;
+
+    tm = localtime(&time);
+    *ddate = ((tm->tm_year+1900-1980)<<9) + ((tm->tm_mon+1)<<5)
+        + tm->tm_mday;
+    *dtime = ((tm->tm_hour)<<11) + ((tm->tm_min)<<5)
+        + ((tm->tm_sec)>>1);
+
+    return;
+}
+
+
+
+ZIP_EXTERN int
+zip_delete(struct zip *za, int idx)
+{
+    if (idx < 0 || idx >= za->nentry) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    /* allow duplicate file names, because the file will
+     * be removed directly afterwards */
+    if (_zip_unchange(za, idx, 1) != 0)
+        return -1;
+
+    za->entry[idx].state = ZIP_ST_DELETED;
+
+    return 0;
+}
+
+
+
+ZIP_EXTERN void
+zip_error_clear(struct zip *za)
+{
+    _zip_error_clear(&za->error);
+}
+
+
+ZIP_EXTERN int
+zip_add(struct zip *za, const char *name, struct zip_source *source)
+{
+    if (name == NULL || source == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+        
+    return _zip_replace(za, -1, name, source);
+}
+
+
+ZIP_EXTERN int
+zip_error_get_sys_type(int ze)
+{
+    if (ze < 0 || ze >= _zip_nerr_str)
+        return 0;
+
+    return _zip_err_type[ze];
+}
+
+
+ZIP_EXTERN void
+zip_error_get(struct zip *za, int *zep, int *sep)
+{
+    _zip_error_get(&za->error, zep, sep);
+}
+
+
+const char * const _zip_err_str[] = {
+    "No error",
+    "Multi-disk zip archives not supported",
+    "Renaming temporary file failed",
+    "Closing zip archive failed",
+    "Seek error",
+    "Read error",
+    "Write error",
+    "CRC error",
+    "Containing zip archive was closed",
+    "No such file",
+    "File already exists",
+    "Can't open file",
+    "Failure to create temporary file",
+    "Zlib error",
+    "Malloc failure",
+    "Entry has been changed",
+    "Compression method not supported",
+    "Premature EOF",
+    "Invalid argument",
+    "Not a zip archive",
+    "Internal error",
+    "Zip archive inconsistent",
+    "Can't remove file",
+    "Entry has been deleted",
+};
+
+const int _zip_nerr_str = sizeof(_zip_err_str)/sizeof(_zip_err_str[0]);
+
+#define N ZIP_ET_NONE
+#define S ZIP_ET_SYS
+#define Z ZIP_ET_ZLIB
+
+const int _zip_err_type[] = {
+    N,
+    N,
+    S,
+    S,
+    S,
+    S,
+    S,
+    N,
+    N,
+    N,
+    N,
+    S,
+    S,
+    Z,
+    N,
+    N,
+    N,
+    N,
+    N,
+    N,
+    N,
+    N,
+    S,
+    N,
+};
+
+
+struct zip_entry *
+_zip_entry_new(struct zip *za)
+{
+    struct zip_entry *ze;
+    if (!za) {
+        ze = (struct zip_entry *)malloc(sizeof(struct zip_entry));
+        if (!ze) {
+            _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+            return NULL;
+        }
+    }
+    else {
+        if (za->nentry >= za->nentry_alloc-1) {
+            za->nentry_alloc += 16;
+            za->entry = (struct zip_entry *)realloc(za->entry,
+                                                    sizeof(struct zip_entry)
+                                                    * za->nentry_alloc);
+            if (!za->entry) {
+                _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+                return NULL;
+            }
+        }
+        ze = za->entry+za->nentry;
+    }
+
+    ze->state = ZIP_ST_UNCHANGED;
+
+    ze->ch_filename = NULL;
+    ze->ch_comment = NULL;
+    ze->ch_comment_len = -1;
+    ze->source = NULL;
+
+    if (za)
+        za->nentry++;
+
+    return ze;
+}
+
+
+void
+_zip_entry_free(struct zip_entry *ze)
+{
+    free(ze->ch_filename);
+    ze->ch_filename = NULL;
+    free(ze->ch_comment);
+    ze->ch_comment = NULL;
+    ze->ch_comment_len = -1;
+
+    _zip_unchange_data(ze);
+}
+
+
+static int add_data(struct zip *, struct zip_source *, struct zip_dirent *,
+                    FILE *);
+static int add_data_comp(zip_source_callback, void *, struct zip_stat *,
+                         FILE *, struct zip_error *);
+static int add_data_uncomp(struct zip *, zip_source_callback, void *,
+                           struct zip_stat *, FILE *);
+static void ch_set_error(struct zip_error *, zip_source_callback, void *);
+static int copy_data(FILE *, myoff_t, FILE *, struct zip_error *);
+static int write_cdir(struct zip *, struct zip_cdir *, FILE *);
+static int _zip_cdir_set_comment(struct zip_cdir *, struct zip *);
+static int _zip_changed(struct zip *, int *);
+static char *_zip_create_temp_output(struct zip *, FILE **);
+static int _zip_torrentzip_cmp(const void *, const void *);
+
+
+
+struct filelist {
+    int idx;
+    const char *name;
+};
+
+
+
+ZIP_EXTERN int
+zip_close(struct zip *za)
+{
+    int survivors;
+    int i, j, error;
+    char *temp;
+    FILE *out;
+    mode_t mask;
+    struct zip_cdir *cd;
+    struct zip_dirent de;
+    struct filelist *filelist;
+    int reopen_on_error;
+    int new_torrentzip;
+
+    reopen_on_error = 0;
+
+    if (za == NULL)
+        return -1;
+
+    if (!_zip_changed(za, &survivors)) {
+        _zip_free(za);
+        return 0;
+    }
+
+    /* don't create zip files with no entries */
+    if (survivors == 0) {
+        if (za->zn && za->zp) {
+            if (remove(za->zn) != 0) {
+                _zip_error_set(&za->error, ZIP_ER_REMOVE, errno);
+                return -1;
+            }
+        }
+        _zip_free(za);
+        return 0;
+    }               
+
+    if ((filelist=(struct filelist *)malloc(sizeof(filelist[0])*survivors))
+        == NULL)
+        return -1;
+
+    if ((cd=_zip_cdir_new(survivors, &za->error)) == NULL) {
+        free(filelist);
+        return -1;
+    }
+
+    for (i=0; i<survivors; i++)
+        _zip_dirent_init(&cd->entry[i]);
+
+    /* archive comment is special for torrentzip */
+    if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0)) {
+        cd->comment = _zip_memdup(TORRENT_SIG "XXXXXXXX",
+                                  TORRENT_SIG_LEN + TORRENT_CRC_LEN,
+                                  &za->error);
+        if (cd->comment == NULL) {
+            _zip_cdir_free(cd);
+            free(filelist);
+            return -1;
+        }
+        cd->comment_len = TORRENT_SIG_LEN + TORRENT_CRC_LEN;
+    }
+    else if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, ZIP_FL_UNCHANGED) == 0) {
+        if (_zip_cdir_set_comment(cd, za) == -1) {
+            _zip_cdir_free(cd);
+            free(filelist);
+            return -1;
+        }
+    }
+
+    if ((temp=_zip_create_temp_output(za, &out)) == NULL) {
+        _zip_cdir_free(cd);
+        return -1;
+    }
+
+
+    /* create list of files with index into original archive  */
+    for (i=j=0; i<za->nentry; i++) {
+        if (za->entry[i].state == ZIP_ST_DELETED)
+            continue;
+
+        filelist[j].idx = i;
+        filelist[j].name = zip_get_name(za, i, 0);
+        j++;
+    }
+    if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0))
+        qsort(filelist, survivors, sizeof(filelist[0]),
+              _zip_torrentzip_cmp);
+
+    new_torrentzip = (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0) == 1
+                      && zip_get_archive_flag(za, ZIP_AFL_TORRENT,
+                                              ZIP_FL_UNCHANGED) == 0);
+    error = 0;
+    for (j=0; j<survivors; j++) {
+        i = filelist[j].idx;
+
+        /* create new local directory entry */
+        if (ZIP_ENTRY_DATA_CHANGED(za->entry+i) || new_torrentzip) {
+            _zip_dirent_init(&de);
+
+            if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0))
+                _zip_dirent_torrent_normalize(&de);
+                
+            /* use it as central directory entry */
+            memcpy(cd->entry+j, &de, sizeof(cd->entry[j]));
+
+            /* set/update file name */
+            if (za->entry[i].ch_filename == NULL) {
+                if (za->entry[i].state == ZIP_ST_ADDED) {
+                    de.filename = strdup("-");
+                    de.filename_len = 1;
+                    cd->entry[j].filename = "-";
+                }
+                else {
+                    de.filename = strdup(za->cdir->entry[i].filename);
+                    de.filename_len = strlen(de.filename);
+                    cd->entry[j].filename = za->cdir->entry[i].filename;
+                    cd->entry[j].filename_len = de.filename_len;
+                }
+            }
+        }
+        else {
+            /* copy existing directory entries */
+            if (fseeko(za->zp, za->cdir->entry[i].offset, SEEK_SET) != 0) {
+                _zip_error_set(&za->error, ZIP_ER_SEEK, errno);
+                error = 1;
+                break;
+            }
+            if (_zip_dirent_read(&de, za->zp, NULL, 0, 1, &za->error) != 0) {
+                error = 1;
+                break;
+            }
+            if (de.bitflags & ZIP_GPBF_DATA_DESCRIPTOR) {
+                de.crc = za->cdir->entry[i].crc;
+                de.comp_size = za->cdir->entry[i].comp_size;
+                de.uncomp_size = za->cdir->entry[i].uncomp_size;
+                de.bitflags &= ~ZIP_GPBF_DATA_DESCRIPTOR;
+            }
+            memcpy(cd->entry+j, za->cdir->entry+i, sizeof(cd->entry[j]));
+        }
+
+        if (za->entry[i].ch_filename) {
+            free(de.filename);
+            if ((de.filename=strdup(za->entry[i].ch_filename)) == NULL) {
+                error = 1;
+                break;
+            }
+            de.filename_len = strlen(de.filename);
+            cd->entry[j].filename = za->entry[i].ch_filename;
+            cd->entry[j].filename_len = de.filename_len;
+        }
+
+        if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0) == 0
+            && za->entry[i].ch_comment_len != -1) {
+            /* as the rest of cd entries, its malloc/free is done by za */
+            cd->entry[j].comment = za->entry[i].ch_comment;
+            cd->entry[j].comment_len = za->entry[i].ch_comment_len;
+        }
+
+        cd->entry[j].offset = ftello(out);
+
+        if (ZIP_ENTRY_DATA_CHANGED(za->entry+i) || new_torrentzip) {
+            struct zip_source *zs;
+
+            zs = NULL;
+            if (!ZIP_ENTRY_DATA_CHANGED(za->entry+i)) {
+                if ((zs=zip_source_zip(za, za, i, ZIP_FL_RECOMPRESS, 0, -1))
+                    == NULL) {
+                    error = 1;
+                    break;
+                }
+            }
+
+            if (add_data(za, zs ? zs : za->entry[i].source, &de, out) < 0) {
+                error = 1;
+                break;
+            }
+            cd->entry[j].last_mod = de.last_mod;
+            cd->entry[j].comp_method = de.comp_method;
+            cd->entry[j].comp_size = de.comp_size;
+            cd->entry[j].uncomp_size = de.uncomp_size;
+            cd->entry[j].crc = de.crc;
+        }
+        else {
+            if (_zip_dirent_write(&de, out, 1, &za->error) < 0) {
+                error = 1;
+                break;
+            }
+            /* we just read the local dirent, file is at correct position */
+            if (copy_data(za->zp, cd->entry[j].comp_size, out,
+                          &za->error) < 0) {
+                error = 1;
+                break;
+            }
+        }
+
+        _zip_dirent_finalize(&de);
+    }
+
+    if (!error) {
+        if (write_cdir(za, cd, out) < 0)
+            error = 1;
+    }
+   
+    /* pointers in cd entries are owned by za */
+    cd->nentry = 0;
+    _zip_cdir_free(cd);
+
+    if (error) {
+        _zip_dirent_finalize(&de);
+        fclose(out);
+        remove(temp);
+        free(temp);
+        return -1;
+    }
+
+    if (fclose(out) != 0) {
+        _zip_error_set(&za->error, ZIP_ER_CLOSE, errno);
+        remove(temp);
+        free(temp);
+        return -1;
+    }
+    
+    if (za->zp) {
+        fclose(za->zp);
+        za->zp = NULL;
+        reopen_on_error = 1;
+    }
+    if (_zip_rename(temp, za->zn) != 0) {
+        _zip_error_set(&za->error, ZIP_ER_RENAME, errno);
+        remove(temp);
+        free(temp);
+        if (reopen_on_error) {
+            /* ignore errors, since we're already in an error case */
+            za->zp = fopen(za->zn, "rb");
+        }
+        return -1;
+    }
+    mask = umask(0);
+    umask(mask);
+    chmod(za->zn, 0666&~mask);
+
+    _zip_free(za);
+    free(temp);
+    
+    return 0;
+}
+
+
+
+static int
+add_data(struct zip *za, struct zip_source *zs, struct zip_dirent *de, FILE *ft)
+{
+    myoff_t offstart, offend;
+    zip_source_callback cb;
+    void *ud;
+    struct zip_stat st;
+    
+    cb = zs->f;
+    ud = zs->ud;
+
+    if (cb(ud, &st, sizeof(st), ZIP_SOURCE_STAT) < (ssize_t)sizeof(st)) {
+        ch_set_error(&za->error, cb, ud);
+        return -1;
+    }
+
+    if (cb(ud, NULL, 0, ZIP_SOURCE_OPEN) < 0) {
+        ch_set_error(&za->error, cb, ud);
+        return -1;
+    }
+
+    offstart = ftello(ft);
+
+    if (_zip_dirent_write(de, ft, 1, &za->error) < 0)
+        return -1;
+
+    if (st.comp_method != ZIP_CM_STORE) {
+        if (add_data_comp(cb, ud, &st, ft, &za->error) < 0)
+            return -1;
+    }
+    else {
+        if (add_data_uncomp(za, cb, ud, &st, ft) < 0)
+            return -1;
+    }
+
+    if (cb(ud, NULL, 0, ZIP_SOURCE_CLOSE) < 0) {
+        ch_set_error(&za->error, cb, ud);
+        return -1;
+    }
+
+    offend = ftello(ft);
+
+    if (fseeko(ft, offstart, SEEK_SET) < 0) {
+        _zip_error_set(&za->error, ZIP_ER_SEEK, errno);
+        return -1;
+    }
+
+    
+    de->last_mod = st.mtime;
+    de->comp_method = st.comp_method;
+    de->crc = st.crc;
+    de->uncomp_size = st.size;
+    de->comp_size = st.comp_size;
+
+    if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0))
+        _zip_dirent_torrent_normalize(de);
+
+    if (_zip_dirent_write(de, ft, 1, &za->error) < 0)
+        return -1;
+    
+    if (fseeko(ft, offend, SEEK_SET) < 0) {
+        _zip_error_set(&za->error, ZIP_ER_SEEK, errno);
+        return -1;
+    }
+
+    return 0;
+}
+
+
+
+static int
+add_data_comp(zip_source_callback cb, void *ud, struct zip_stat *st,FILE *ft,
+              struct zip_error *error)
+{
+    char buf[BUFSIZE];
+    ssize_t n;
+
+    st->comp_size = 0;
+    while ((n=cb(ud, buf, sizeof(buf), ZIP_SOURCE_READ)) > 0) {
+        if (fwrite(buf, 1, n, ft) != (size_t)n) {
+            _zip_error_set(error, ZIP_ER_WRITE, errno);
+            return -1;
+        }
+        
+        st->comp_size += n;
+    }
+    if (n < 0) {
+        ch_set_error(error, cb, ud);
+        return -1;
+    }        
+
+    return 0;
+}
+
+
+
+static int
+add_data_uncomp(struct zip *za, zip_source_callback cb, void *ud,
+                struct zip_stat *st, FILE *ft)
+{
+    char b1[BUFSIZE], b2[BUFSIZE];
+    int end, flush, ret;
+    ssize_t n;
+    size_t n2;
+    z_stream zstr;
+    int mem_level;
+
+    st->comp_method = ZIP_CM_DEFLATE;
+    st->comp_size = st->size = 0;
+    st->crc = crc32(0, NULL, 0);
+
+    zstr.zalloc = Z_NULL;
+    zstr.zfree = Z_NULL;
+    zstr.opaque = NULL;
+    zstr.avail_in = 0;
+    zstr.avail_out = 0;
+
+    if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0))
+        mem_level = TORRENT_MEM_LEVEL;
+    else
+        mem_level = MAX_MEM_LEVEL;
+
+    /* -MAX_WBITS: undocumented feature of zlib to _not_ write a zlib header */
+    deflateInit2(&zstr, Z_BEST_COMPRESSION, Z_DEFLATED, -MAX_WBITS, mem_level,
+                 Z_DEFAULT_STRATEGY);
+
+    zstr.next_out = (Bytef *)b2;
+    zstr.avail_out = sizeof(b2);
+    zstr.avail_in = 0;
+
+    flush = 0;
+    end = 0;
+    while (!end) {
+        if (zstr.avail_in == 0 && !flush) {
+            if ((n=cb(ud, b1, sizeof(b1), ZIP_SOURCE_READ)) < 0) {
+                ch_set_error(&za->error, cb, ud);
+                deflateEnd(&zstr);
+                return -1;
+            }
+            if (n > 0) {
+                zstr.avail_in = n;
+                zstr.next_in = (Bytef *)b1;
+                st->size += n;
+                st->crc = crc32(st->crc, (Bytef *)b1, n);
+            }
+            else
+                flush = Z_FINISH;
+        }
+
+        ret = deflate(&zstr, flush);
+        if (ret != Z_OK && ret != Z_STREAM_END) {
+            _zip_error_set(&za->error, ZIP_ER_ZLIB, ret);
+            return -1;
+        }
+        
+        if (zstr.avail_out != sizeof(b2)) {
+            n2 = sizeof(b2) - zstr.avail_out;
+            
+            if (fwrite(b2, 1, n2, ft) != n2) {
+                _zip_error_set(&za->error, ZIP_ER_WRITE, errno);
+                return -1;
+            }
+        
+            zstr.next_out = (Bytef *)b2;
+            zstr.avail_out = sizeof(b2);
+            st->comp_size += n2;
+        }
+
+        if (ret == Z_STREAM_END) {
+            deflateEnd(&zstr);
+            end = 1;
+        }
+    }
+
+    return 0;
+}
+
+
+
+static void
+ch_set_error(struct zip_error *error, zip_source_callback cb, void *ud)
+{
+    int e[2];
+
+    if ((cb(ud, e, sizeof(e), ZIP_SOURCE_ERROR)) < (ssize_t)sizeof(e)) {
+        error->zip_err = ZIP_ER_INTERNAL;
+        error->sys_err = 0;
+    }
+    else {
+        error->zip_err = e[0];
+        error->sys_err = e[1];
+    }
+}
+
+
+
+static int
+copy_data(FILE *fs, myoff_t len, FILE *ft, struct zip_error *error)
+{
+    char buf[BUFSIZE];
+    int n, nn;
+
+    if (len == 0)
+        return 0;
+
+    while (len > 0) {
+        nn = len > sizeof(buf) ? sizeof(buf) : len;
+        if ((n=fread(buf, 1, nn, fs)) < 0) {
+            _zip_error_set(error, ZIP_ER_READ, errno);
+            return -1;
+        }
+        else if (n == 0) {
+            _zip_error_set(error, ZIP_ER_EOF, 0);
+            return -1;
+        }
+
+        if (fwrite(buf, 1, n, ft) != (size_t)n) {
+            _zip_error_set(error, ZIP_ER_WRITE, errno);
+            return -1;
+        }
+        
+        len -= n;
+    }
+
+    return 0;
+}
+
+
+
+static int
+write_cdir(struct zip *za, struct zip_cdir *cd, FILE *out)
+{
+    myoff_t offset;
+    uLong crc;
+    char buf[TORRENT_CRC_LEN+1];
+    
+    if (_zip_cdir_write(cd, out, &za->error) < 0)
+        return -1;
+    
+    if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0) == 0)
+        return 0;
+
+
+    /* fix up torrentzip comment */
+
+    offset = ftello(out);
+
+    if (_zip_filerange_crc(out, cd->offset, cd->size, &crc, &za->error) < 0)
+        return -1;
+
+    snprintf(buf, sizeof(buf), "%08lX", (long)crc);
+
+    if (fseeko(out, offset-TORRENT_CRC_LEN, SEEK_SET) < 0) {
+        _zip_error_set(&za->error, ZIP_ER_SEEK, errno);
+        return -1;
+    }
+
+    if (fwrite(buf, TORRENT_CRC_LEN, 1, out) != 1) {
+        _zip_error_set(&za->error, ZIP_ER_WRITE, errno);
+        return -1;
+    }
+
+    return 0;
+}
+
+
+
+static int
+_zip_cdir_set_comment(struct zip_cdir *dest, struct zip *src)
+{
+    if (src->ch_comment_len != -1) {
+        dest->comment = _zip_memdup(src->ch_comment,
+                                    src->ch_comment_len, &src->error);
+        if (dest->comment == NULL)
+            return -1;
+        dest->comment_len = src->ch_comment_len;
+    } else {
+        if (src->cdir && src->cdir->comment) {
+            dest->comment = _zip_memdup(src->cdir->comment,
+                                        src->cdir->comment_len, &src->error);
+            if (dest->comment == NULL)
+                return -1;
+            dest->comment_len = src->cdir->comment_len;
+        }
+    }
+
+    return 0;
+}
+
+
+
+static int
+_zip_changed(struct zip *za, int *survivorsp)
+{
+    int changed, i, survivors;
+
+    changed = survivors = 0;
+
+    if (za->ch_comment_len != -1
+        || za->ch_flags != za->flags)
+        changed = 1;
+
+    for (i=0; i<za->nentry; i++) {
+        if ((za->entry[i].state != ZIP_ST_UNCHANGED)
+            || (za->entry[i].ch_comment_len != -1))
+            changed = 1;
+        if (za->entry[i].state != ZIP_ST_DELETED)
+            survivors++;
+    }
+
+    *survivorsp = survivors;
+
+    return changed;
+}
+
+
+
+static char *
+_zip_create_temp_output(struct zip *za, FILE **outp)
+{
+    char *temp;
+    int tfd;
+    FILE *tfp;
+    
+    if ((temp=(char *)malloc(strlen(za->zn)+8)) == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+
+    sprintf(temp, "%s.XXXXXX", za->zn);
+
+    if ((tfd=mkstemp(temp)) == -1) {
+        _zip_error_set(&za->error, ZIP_ER_TMPOPEN, errno);
+        free(temp);
+        return NULL;
+    }
+    
+    if ((tfp=fdopen(tfd, "r+b")) == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_TMPOPEN, errno);
+        close(tfd);
+        remove(temp);
+        free(temp);
+        return NULL;
+    }
+
+    *outp = tfp;
+    return temp;
+}
+
+
+
+static int
+_zip_torrentzip_cmp(const void *a, const void *b)
+{
+    return strcasecmp(((const struct filelist *)a)->name,
+                      ((const struct filelist *)b)->name);
+}
+
+
+
+ZIP_EXTERN int
+zip_add_dir(struct zip *za, const char *name)
+{
+    int len, ret;
+    char *s;
+    struct zip_source *source;
+
+    if (name == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    s = NULL;
+    len = strlen(name);
+
+    if (name[len-1] != '/') {
+        if ((s=(char *)malloc(len+2)) == NULL) {
+            _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+            return -1;
+        }
+        strcpy(s, name);
+        s[len] = '/';
+        s[len+1] = '\0';
+    }
+
+    if ((source=zip_source_buffer(za, NULL, 0, 0)) == NULL) {
+        free(s);
+        return -1;
+    }
+        
+    ret = _zip_replace(za, -1, s ? s : name, source);
+
+    free(s);
+    if (ret < 0)
+        zip_source_free(source);
+
+    return ret;
+}
+
+
+ZIP_EXTERN int
+zip_error_to_str(char *buf, size_t len, int ze, int se)
+{
+    const char *zs, *ss;
+
+    if (ze < 0 || ze >= _zip_nerr_str)
+        return snprintf(buf, len, "Unknown error %d", ze);
+
+    zs = _zip_err_str[ze];
+        
+    switch (_zip_err_type[ze]) {
+    case ZIP_ET_SYS:
+        ss = strerror(se);
+        break;
+        
+    case ZIP_ET_ZLIB:
+        ss = zError(se);
+        break;
+        
+    default:
+        ss = NULL;
+    }
+
+    return snprintf(buf, len, "%s%s%s",
+                    zs, (ss ? ": " : ""), (ss ? ss : ""));
+}
+
+
+ZIP_EXTERN void
+zip_file_error_clear(struct zip_file *zf)
+{
+    _zip_error_clear(&zf->error);
+}
+
+
+ZIP_EXTERN int
+zip_fclose(struct zip_file *zf)
+{
+    int i, ret;
+    
+    if (zf->zstr)
+        inflateEnd(zf->zstr);
+    free(zf->buffer);
+    free(zf->zstr);
+
+    for (i=0; i<zf->za->nfile; i++) {
+        if (zf->za->file[i] == zf) {
+            zf->za->file[i] = zf->za->file[zf->za->nfile-1];
+            zf->za->nfile--;
+            break;
+        }
+    }
+
+    ret = 0;
+    if (zf->error.zip_err)
+        ret = zf->error.zip_err;
+    else if ((zf->flags & ZIP_ZF_CRC) && (zf->flags & ZIP_ZF_EOF)) {
+        /* if EOF, compare CRC */
+        if (zf->crc_orig != zf->crc)
+            ret = ZIP_ER_CRC;
+    }
+
+    free(zf);
+    return ret;
+}
+
+
+int
+_zip_filerange_crc(FILE *fp, myoff_t start, myoff_t len, uLong *crcp,
+                   struct zip_error *errp)
+{
+    Bytef buf[BUFSIZE];
+    size_t n;
+
+    *crcp = crc32(0L, Z_NULL, 0);
+
+    if (fseeko(fp, start, SEEK_SET) != 0) {
+        _zip_error_set(errp, ZIP_ER_SEEK, errno);
+        return -1;
+    }
+    
+    while (len > 0) {
+        n = len > BUFSIZE ? BUFSIZE : len;
+        if ((n=fread(buf, 1, n, fp)) <= 0) {
+            _zip_error_set(errp, ZIP_ER_READ, errno);
+            return -1;
+        }
+
+        *crcp = crc32(*crcp, buf, n);
+
+        len-= n;
+    }
+
+    return 0;
+}
+
+
+ZIP_EXTERN const char *
+zip_file_strerror(struct zip_file *zf)
+{
+    return _zip_error_strerror(&zf->error);
+}
+
+
+/* _zip_file_get_offset(za, ze):
+   Returns the offset of the file data for entry ze.
+
+   On error, fills in za->error and returns 0.
+*/
+
+unsigned int
+_zip_file_get_offset(struct zip *za, int idx)
+{
+    struct zip_dirent de;
+    unsigned int offset;
+
+    offset = za->cdir->entry[idx].offset;
+
+    if (fseeko(za->zp, offset, SEEK_SET) != 0) {
+        _zip_error_set(&za->error, ZIP_ER_SEEK, errno);
+        return 0;
+    }
+
+    if (_zip_dirent_read(&de, za->zp, NULL, 0, 1, &za->error) != 0)
+        return 0;
+
+    offset += LENTRYSIZE + de.filename_len + de.extrafield_len;
+
+    _zip_dirent_finalize(&de);
+
+    return offset;
+}
+
+
+ZIP_EXTERN void
+zip_file_error_get(struct zip_file *zf, int *zep, int *sep)
+{
+    _zip_error_get(&zf->error, zep, sep);
+}
+
+
+static struct zip_file *_zip_file_new(struct zip *za);
+
+
+
+ZIP_EXTERN struct zip_file *
+zip_fopen_index(struct zip *za, int fileno, int flags)
+{
+    int len, ret;
+    int zfflags;
+    struct zip_file *zf;
+
+    if ((fileno < 0) || (fileno >= za->nentry)) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    if ((flags & ZIP_FL_UNCHANGED) == 0
+        && ZIP_ENTRY_DATA_CHANGED(za->entry+fileno)) {
+        _zip_error_set(&za->error, ZIP_ER_CHANGED, 0);
+        return NULL;
+    }
+
+    if (fileno >= za->cdir->nentry) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    zfflags = 0;
+    switch (za->cdir->entry[fileno].comp_method) {
+    case ZIP_CM_STORE:
+        zfflags |= ZIP_ZF_CRC;
+        break;
+
+    case ZIP_CM_DEFLATE:
+        if ((flags & ZIP_FL_COMPRESSED) == 0)
+            zfflags |= ZIP_ZF_CRC | ZIP_ZF_DECOMP;
+        break;
+    default:
+        if ((flags & ZIP_FL_COMPRESSED) == 0) {
+            _zip_error_set(&za->error, ZIP_ER_COMPNOTSUPP, 0);
+            return NULL;
+        }
+        break;
+    }
+
+    zf = _zip_file_new(za);
+
+    zf->flags = zfflags;
+    /* zf->name = za->cdir->entry[fileno].filename; */
+    zf->method = za->cdir->entry[fileno].comp_method;
+    zf->bytes_left = za->cdir->entry[fileno].uncomp_size;
+    zf->cbytes_left = za->cdir->entry[fileno].comp_size;
+    zf->crc_orig = za->cdir->entry[fileno].crc;
+
+    if ((zf->fpos=_zip_file_get_offset(za, fileno)) == 0) {
+        zip_fclose(zf);
+        return NULL;
+    }
+    
+    if ((zf->flags & ZIP_ZF_DECOMP) == 0)
+        zf->bytes_left = zf->cbytes_left;
+    else {
+        if ((zf->buffer=(char *)malloc(BUFSIZE)) == NULL) {
+            _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+            zip_fclose(zf);
+            return NULL;
+        }
+
+        len = _zip_file_fillbuf(zf->buffer, BUFSIZE, zf);
+        if (len <= 0) {
+            _zip_error_copy(&za->error, &zf->error);
+            zip_fclose(zf);
+        return NULL;
+        }
+
+        if ((zf->zstr = (z_stream *)malloc(sizeof(z_stream))) == NULL) {
+            _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+            zip_fclose(zf);
+            return NULL;
+        }
+        zf->zstr->zalloc = Z_NULL;
+        zf->zstr->zfree = Z_NULL;
+        zf->zstr->opaque = NULL;
+        zf->zstr->next_in = (Bytef *)zf->buffer;
+        zf->zstr->avail_in = len;
+        
+        /* negative value to tell zlib that there is no header */
+        if ((ret=inflateInit2(zf->zstr, -MAX_WBITS)) != Z_OK) {
+            _zip_error_set(&za->error, ZIP_ER_ZLIB, ret);
+            zip_fclose(zf);
+            return NULL;
+        }
+    }
+    
+    return zf;
+}
+
+
+
+int
+_zip_file_fillbuf(void *buf, size_t buflen, struct zip_file *zf)
+{
+    int i, j;
+
+    if (zf->error.zip_err != ZIP_ER_OK)
+        return -1;
+
+    if ((zf->flags & ZIP_ZF_EOF) || zf->cbytes_left <= 0 || buflen <= 0)
+        return 0;
+    
+    if (fseeko(zf->za->zp, zf->fpos, SEEK_SET) < 0) {
+        _zip_error_set(&zf->error, ZIP_ER_SEEK, errno);
+        return -1;
+    }
+    if (buflen < zf->cbytes_left)
+        i = buflen;
+    else
+        i = zf->cbytes_left;
+
+    j = fread(buf, 1, i, zf->za->zp);
+    if (j == 0) {
+        _zip_error_set(&zf->error, ZIP_ER_EOF, 0);
+        j = -1;
+    }
+    else if (j < 0)
+        _zip_error_set(&zf->error, ZIP_ER_READ, errno);
+    else {
+        zf->fpos += j;
+        zf->cbytes_left -= j;
+    }
+
+    return j;        
+}
+
+
+
+static struct zip_file *
+_zip_file_new(struct zip *za)
+{
+    struct zip_file *zf, **file;
+    int n;
+
+    if ((zf=(struct zip_file *)malloc(sizeof(struct zip_file))) == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+    
+    if (za->nfile >= za->nfile_alloc-1) {
+        n = za->nfile_alloc + 10;
+        file = (struct zip_file **)realloc(za->file,
+                                           n*sizeof(struct zip_file *));
+        if (file == NULL) {
+            _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+            free(zf);
+            return NULL;
+        }
+        za->nfile_alloc = n;
+        za->file = file;
+    }
+
+    za->file[za->nfile++] = zf;
+
+    zf->za = za;
+    _zip_error_init(&zf->error);
+    zf->flags = 0;
+    zf->crc = crc32(0L, Z_NULL, 0);
+    zf->crc_orig = 0;
+    zf->method = -1;
+    zf->bytes_left = zf->cbytes_left = 0;
+    zf->fpos = 0;
+    zf->buffer = NULL;
+    zf->zstr = NULL;
+
+    return zf;
+}
+
+
+ZIP_EXTERN struct zip_file *
+zip_fopen(struct zip *za, const char *fname, int flags)
+{
+    int idx;
+
+    if ((idx=zip_name_locate(za, fname, flags)) < 0)
+        return NULL;
+
+    return zip_fopen_index(za, idx, flags);
+}
+
+
+ZIP_EXTERN int
+zip_set_file_comment(struct zip *za, int idx, const char *comment, int len)
+{
+    char *tmpcom;
+
+    if (idx < 0 || idx >= za->nentry
+        || len < 0 || len > MAXCOMLEN
+        || (len > 0 && comment == NULL)) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    if (len > 0) {
+        if ((tmpcom=(char *)_zip_memdup(comment, len, &za->error)) == NULL)
+            return -1;
+    }
+    else
+        tmpcom = NULL;
+
+    free(za->entry[idx].ch_comment);
+    za->entry[idx].ch_comment = tmpcom;
+    za->entry[idx].ch_comment_len = len;
+    
+    return 0;
+}
+
+
+ZIP_EXTERN struct zip_source *
+zip_source_file(struct zip *za, const char *fname, myoff_t start, myoff_t len)
+{
+    if (za == NULL)
+        return NULL;
+
+    if (fname == NULL || start < 0 || len < -1) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    return _zip_source_file_or_p(za, fname, NULL, start, len);
+}
+
+
+struct read_data {
+    const char *buf, *data, *end;
+    time_t mtime;
+    int freep;
+};
+
+static ssize_t read_data(void *state, void *data, size_t len,
+                         enum zip_source_cmd cmd);
+
+
+
+ZIP_EXTERN struct zip_source *
+zip_source_buffer(struct zip *za, const void *data, myoff_t len, int freep)
+{
+    struct read_data *f;
+    struct zip_source *zs;
+
+    if (za == NULL)
+        return NULL;
+
+    if (len < 0 || (data == NULL && len > 0)) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    if ((f=(struct read_data *)malloc(sizeof(*f))) == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+
+    f->data = (const char *)data;
+    f->end = ((const char *)data)+len;
+    f->freep = freep;
+    f->mtime = time(NULL);
+    
+    if ((zs=zip_source_function(za, read_data, f)) == NULL) {
+        free(f);
+        return NULL;
+    }
+
+    return zs;
+}
+
+
+
+static ssize_t
+read_data(void *state, void *data, size_t len, enum zip_source_cmd cmd)
+{
+    struct read_data *z;
+    char *buf;
+    size_t n;
+
+    z = (struct read_data *)state;
+    buf = (char *)data;
+
+    switch (cmd) {
+    case ZIP_SOURCE_OPEN:
+        z->buf = z->data;
+        return 0;
+        
+    case ZIP_SOURCE_READ:
+        n = z->end - z->buf;
+        if (n > len)
+            n = len;
+
+        if (n) {
+            memcpy(buf, z->buf, n);
+            z->buf += n;
+        }
+
+        return n;
+        
+    case ZIP_SOURCE_CLOSE:
+        return 0;
+
+    case ZIP_SOURCE_STAT:
+        {
+            struct zip_stat *st;
+            
+            if (len < sizeof(*st))
+                return -1;
+
+            st = (struct zip_stat *)data;
+
+            zip_stat_init(st);
+            st->mtime = z->mtime;
+            st->size = z->end - z->data;
+            
+            return sizeof(*st);
+        }
+
+    case ZIP_SOURCE_ERROR:
+        {
+            int *e;
+
+            if (len < sizeof(int)*2)
+                return -1;
+
+            e = (int *)data;
+            e[0] = e[1] = 0;
+        }
+        return sizeof(int)*2;
+
+    case ZIP_SOURCE_FREE:
+        if (z->freep) {
+            free((void *)z->data);
+            z->data = NULL;
+        }
+        free(z);
+        return 0;
+
+    default:
+        ;
+    }
+
+    return -1;
+}
+
+
+int
+_zip_set_name(struct zip *za, int idx, const char *name)
+{
+    char *s;
+    int i;
+    
+    if (idx < 0 || idx >= za->nentry || name == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    if ((i=_zip_name_locate(za, name, 0, NULL)) != -1 && i != idx) {
+        _zip_error_set(&za->error, ZIP_ER_EXISTS, 0);
+        return -1;
+    }
+
+    /* no effective name change */
+    if (i == idx)
+        return 0;
+    
+    if ((s=strdup(name)) == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+        return -1;
+    }
+    
+    if (za->entry[idx].state == ZIP_ST_UNCHANGED) 
+        za->entry[idx].state = ZIP_ST_RENAMED;
+
+    free(za->entry[idx].ch_filename);
+    za->entry[idx].ch_filename = s;
+
+    return 0;
+}
+
+
+ZIP_EXTERN int
+zip_set_archive_flag(struct zip *za, int flag, int value)
+{
+    if (value)
+        za->ch_flags |= flag;
+    else
+        za->ch_flags &= ~flag;
+
+    return 0;
+}
+
+
+void
+_zip_unchange_data(struct zip_entry *ze)
+{
+    if (ze->source) {
+        (void)ze->source->f(ze->source->ud, NULL, 0, ZIP_SOURCE_FREE);
+        free(ze->source);
+        ze->source = NULL;
+    }
+    
+    ze->state = ze->ch_filename ? ZIP_ST_RENAMED : ZIP_ST_UNCHANGED;
+}
+
+
+ZIP_EXTERN int
+zip_unchange_archive(struct zip *za)
+{
+    free(za->ch_comment);
+    za->ch_comment = NULL;
+    za->ch_comment_len = -1;
+
+    za->ch_flags = za->flags;
+
+    return 0;
+}
+
+ZIP_EXTERN int
+zip_unchange(struct zip *za, int idx)
+{
+    return _zip_unchange(za, idx, 0);
+}
+
+
+
+int
+_zip_unchange(struct zip *za, int idx, int allow_duplicates)
+{
+    int i;
+    
+    if (idx < 0 || idx >= za->nentry) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    if (za->entry[idx].ch_filename) {
+        if (!allow_duplicates) {
+            i = _zip_name_locate(za,
+                         _zip_get_name(za, idx, ZIP_FL_UNCHANGED, NULL),
+                                 0, NULL);
+            if (i != -1 && i != idx) {
+                _zip_error_set(&za->error, ZIP_ER_EXISTS, 0);
+                return -1;
+            }
+        }
+
+        free(za->entry[idx].ch_filename);
+        za->entry[idx].ch_filename = NULL;
+    }
+
+    free(za->entry[idx].ch_comment);
+    za->entry[idx].ch_comment = NULL;
+    za->entry[idx].ch_comment_len = -1;
+
+    _zip_unchange_data(za->entry+idx);
+
+    return 0;
+}
+
+ZIP_EXTERN int
+zip_unchange_all(struct zip *za)
+{
+    int ret, i;
+
+    ret = 0;
+    for (i=0; i<za->nentry; i++)
+        ret |= _zip_unchange(za, i, 1);
+
+    ret |= zip_unchange_archive(za);
+
+    return ret;
+}
+
+
+ZIP_EXTERN int
+zip_set_archive_comment(struct zip *za, const char *comment, int len)
+{
+    char *tmpcom;
+
+    if (len < 0 || len > MAXCOMLEN
+        || (len > 0 && comment == NULL)) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    if (len > 0) {
+        if ((tmpcom=(char *)_zip_memdup(comment, len, &za->error)) == NULL)
+            return -1;
+    }
+    else
+        tmpcom = NULL;
+
+    free(za->ch_comment);
+    za->ch_comment = tmpcom;
+    za->ch_comment_len = len;
+    
+    return 0;
+}
+
+
+ZIP_EXTERN int
+zip_replace(struct zip *za, int idx, struct zip_source *source)
+{
+    if (idx < 0 || idx >= za->nentry || source == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    if (_zip_replace(za, idx, NULL, source) == -1)
+        return -1;
+
+    return 0;
+}
+
+
+
+
+int
+_zip_replace(struct zip *za, int idx, const char *name,
+             struct zip_source *source)
+{
+    if (idx == -1) {
+        if (_zip_entry_new(za) == NULL)
+            return -1;
+
+        idx = za->nentry - 1;
+    }
+    
+    _zip_unchange_data(za->entry+idx);
+
+    if (name && _zip_set_name(za, idx, name) != 0)
+        return -1;
+    
+    za->entry[idx].state = ((za->cdir == NULL || idx >= za->cdir->nentry)
+                            ? ZIP_ST_ADDED : ZIP_ST_REPLACED);
+    za->entry[idx].source = source;
+
+    return idx;
+}
+
+
+ZIP_EXTERN int
+zip_rename(struct zip *za, int idx, const char *name)
+{
+    const char *old_name;
+    int old_is_dir, new_is_dir;
+    
+    if (idx >= za->nentry || idx < 0 || name[0] == '\0') {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    if ((old_name=zip_get_name(za, idx, 0)) == NULL)
+        return -1;
+                                                                    
+    new_is_dir = (name[strlen(name)-1] == '/');
+    old_is_dir = (old_name[strlen(old_name)-1] == '/');
+
+    if (new_is_dir != old_is_dir) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    return _zip_set_name(za, idx, name);
+}
+
+#include <sys/stat.h>
+#include <errno.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static void set_error(int *, struct zip_error *, int);
+static struct zip *_zip_allocate_new(const char *, int *);
+static int _zip_checkcons(FILE *, struct zip_cdir *, struct zip_error *);
+static void _zip_check_torrentzip(struct zip *);
+static struct zip_cdir *_zip_find_central_dir(FILE *, int, int *, myoff_t);
+static int _zip_file_exists(const char *, int, int *);
+static int _zip_headercomp(struct zip_dirent *, int,
+                           struct zip_dirent *, int);
+static unsigned char *_zip_memmem(const unsigned char *, int,
+                                  const unsigned char *, int);
+static struct zip_cdir *_zip_readcdir(FILE *, unsigned char *, unsigned char *,
+                                 int, int, struct zip_error *);
+
+
+
+ZIP_EXTERN struct zip *
+zip_open(const char *fn, int flags, int *zep)
+{
+    FILE *fp;
+    struct zip *za;
+    struct zip_cdir *cdir;
+    int i;
+    myoff_t len;
+    
+    switch (_zip_file_exists(fn, flags, zep)) {
+    case -1:
+        return NULL;
+    case 0:
+        return _zip_allocate_new(fn, zep);
+    default:
+        break;
+    }
+
+    if ((fp=fopen(fn, "rb")) == NULL) {
+        set_error(zep, NULL, ZIP_ER_OPEN);
+        return NULL;
+    }
+
+    fseeko(fp, 0, SEEK_END);
+    len = ftello(fp);
+
+    /* treat empty files as empty archives */
+    if (len == 0) {
+        if ((za=_zip_allocate_new(fn, zep)) == NULL)
+            fclose(fp);
+        else
+            za->zp = fp;
+        return za;
+    }
+
+    cdir = _zip_find_central_dir(fp, flags, zep, len);
+    if (cdir == NULL) {
+        fclose(fp);
+        return NULL;
+    }
+
+    if ((za=_zip_allocate_new(fn, zep)) == NULL) {
+        _zip_cdir_free(cdir);
+        fclose(fp);
+        return NULL;
+    }
+
+    za->cdir = cdir;
+    za->zp = fp;
+
+    if ((za->entry=(struct zip_entry *)malloc(sizeof(*(za->entry))
+                                              * cdir->nentry)) == NULL) {
+        set_error(zep, NULL, ZIP_ER_MEMORY);
+        _zip_free(za);
+        return NULL;
+    }
+    for (i=0; i<cdir->nentry; i++)
+        _zip_entry_new(za);
+
+    _zip_check_torrentzip(za);
+    za->ch_flags = za->flags;
+
+    return za;
+}
+
+
+
+static void
+set_error(int *zep, struct zip_error *err, int ze)
+{
+    int se;
+
+    if (err) {
+        _zip_error_get(err, &ze, &se);
+        if (zip_error_get_sys_type(ze) == ZIP_ET_SYS)
+            errno = se;
+    }
+
+    if (zep)
+        *zep = ze;
+}
+
+
+
+/* _zip_readcdir:
+   tries to find a valid end-of-central-directory at the beginning of
+   buf, and then the corresponding central directory entries.
+   Returns a struct zip_cdir which contains the central directory 
+   entries, or NULL if unsuccessful. */
+
+static struct zip_cdir *
+_zip_readcdir(FILE *fp, unsigned char *buf, unsigned char *eocd, int buflen,
+              int flags, struct zip_error *error)
+{
+    struct zip_cdir *cd;
+    unsigned char *cdp, **bufp;
+    int i, comlen, nentry;
+
+    comlen = buf + buflen - eocd - EOCDLEN;
+    if (comlen < 0) {
+        /* not enough bytes left for comment */
+        _zip_error_set(error, ZIP_ER_NOZIP, 0);
+        return NULL;
+    }
+
+    /* check for end-of-central-dir magic */
+    if (memcmp(eocd, EOCD_MAGIC, 4) != 0) {
+        _zip_error_set(error, ZIP_ER_NOZIP, 0);
+        return NULL;
+    }
+
+    if (memcmp(eocd+4, "\0\0\0\0", 4) != 0) {
+        _zip_error_set(error, ZIP_ER_MULTIDISK, 0);
+        return NULL;
+    }
+
+    cdp = eocd + 8;
+    /* number of cdir-entries on this disk */
+    i = _zip_read2(&cdp);
+    /* number of cdir-entries */
+    nentry = _zip_read2(&cdp);
+
+    if ((cd=_zip_cdir_new(nentry, error)) == NULL)
+        return NULL;
+
+    cd->size = _zip_read4(&cdp);
+    cd->offset = _zip_read4(&cdp);
+    cd->comment = NULL;
+    cd->comment_len = _zip_read2(&cdp);
+
+    if ((comlen < cd->comment_len) || (cd->nentry != i)) {
+        _zip_error_set(error, ZIP_ER_NOZIP, 0);
+        free(cd);
+        return NULL;
+    }
+    if ((flags & ZIP_CHECKCONS) && comlen != cd->comment_len) {
+        _zip_error_set(error, ZIP_ER_INCONS, 0);
+        free(cd);
+        return NULL;
+    }
+
+    if (cd->comment_len) {
+        if ((cd->comment=(char *)_zip_memdup(eocd+EOCDLEN,
+                                             cd->comment_len, error))
+            == NULL) {
+            free(cd);
+            return NULL;
+        }
+    }
+
+    cdp = eocd;
+    if (cd->size < (unsigned int)(eocd-buf)) {
+        /* if buffer already read in, use it */
+        cdp = eocd - cd->size;
+        bufp = &cdp;
+    }
+    else {
+        /* go to start of cdir and read it entry by entry */
+        bufp = NULL;
+        clearerr(fp);
+        fseeko(fp, cd->offset, SEEK_SET);
+        /* possible consistency check: cd->offset =
+           len-(cd->size+cd->comment_len+EOCDLEN) ? */
+        if (ferror(fp) || ((unsigned long)ftello(fp) != cd->offset)) {
+            /* seek error or offset of cdir wrong */
+            if (ferror(fp))
+                _zip_error_set(error, ZIP_ER_SEEK, errno);
+            else
+                _zip_error_set(error, ZIP_ER_NOZIP, 0);
+            free(cd);
+            return NULL;
+        }
+    }
+
+    for (i=0; i<cd->nentry; i++) {
+        if ((_zip_dirent_read(cd->entry+i, fp, bufp, eocd-cdp, 0,
+                              error)) < 0) {
+            cd->nentry = i;
+            _zip_cdir_free(cd);
+            return NULL;
+        }
+    }
+    
+    return cd;
+}
+
+
+
+/* _zip_checkcons:
+   Checks the consistency of the central directory by comparing central
+   directory entries with local headers and checking for plausible
+   file and header offsets. Returns -1 if not plausible, else the
+   difference between the lowest and the highest fileposition reached */
+
+static int
+_zip_checkcons(FILE *fp, struct zip_cdir *cd, struct zip_error *error)
+{
+    int i;
+    unsigned int min, max, j;
+    struct zip_dirent temp;
+
+    if (cd->nentry) {
+        max = cd->entry[0].offset;
+        min = cd->entry[0].offset;
+    }
+    else
+        min = max = 0;
+
+    for (i=0; i<cd->nentry; i++) {
+        if (cd->entry[i].offset < min)
+            min = cd->entry[i].offset;
+        if (min > cd->offset) {
+            _zip_error_set(error, ZIP_ER_NOZIP, 0);
+            return -1;
+        }
+        
+        j = cd->entry[i].offset + cd->entry[i].comp_size
+            + cd->entry[i].filename_len + LENTRYSIZE;
+        if (j > max)
+            max = j;
+        if (max > cd->offset) {
+            _zip_error_set(error, ZIP_ER_NOZIP, 0);
+            return -1;
+        }
+        
+        if (fseeko(fp, cd->entry[i].offset, SEEK_SET) != 0) {
+            _zip_error_set(error, ZIP_ER_SEEK, 0);
+            return -1;
+        }
+        
+        if (_zip_dirent_read(&temp, fp, NULL, 0, 1, error) == -1)
+            return -1;
+        
+        if (_zip_headercomp(cd->entry+i, 0, &temp, 1) != 0) {
+            _zip_error_set(error, ZIP_ER_INCONS, 0);
+            _zip_dirent_finalize(&temp);
+            return -1;
+        }
+        _zip_dirent_finalize(&temp);
+    }
+
+    return max - min;
+}
+
+
+
+/* _zip_check_torrentzip:
+   check wether ZA has a valid TORRENTZIP comment, i.e. is torrentzipped */
+
+static void
+_zip_check_torrentzip(struct zip *za)
+{
+    uLong crc_got, crc_should;
+    char buf[8+1];
+    char *end;
+
+    if (za->zp == NULL || za->cdir == NULL)
+        return;
+
+    if (za->cdir->comment_len != TORRENT_SIG_LEN+8
+        || strncmp(za->cdir->comment, TORRENT_SIG, TORRENT_SIG_LEN) != 0)
+        return;
+
+    memcpy(buf, za->cdir->comment+TORRENT_SIG_LEN, 8);
+    buf[8] = '\0';
+    errno = 0;
+    crc_should = strtoul(buf, &end, 16);
+    if ((crc_should == UINT_MAX && errno != 0) || (end && *end))
+        return;
+
+    if (_zip_filerange_crc(za->zp, za->cdir->offset, za->cdir->size,
+                           &crc_got, NULL) < 0)
+        return;
+
+    if (crc_got == crc_should)
+        za->flags |= ZIP_AFL_TORRENT;
+}
+
+
+
+
+/* _zip_headercomp:
+   compares two headers h1 and h2; if they are local headers, set
+   local1p or local2p respectively to 1, else 0. Return 0 if they
+   are identical, -1 if not. */
+
+static int
+_zip_headercomp(struct zip_dirent *h1, int local1p, struct zip_dirent *h2,
+           int local2p)
+{
+    if ((h1->version_needed != h2->version_needed)
+#if 0
+        /* some zip-files have different values in local
+           and global headers for the bitflags */
+        || (h1->bitflags != h2->bitflags)
+#endif
+        || (h1->comp_method != h2->comp_method)
+        || (h1->last_mod != h2->last_mod)
+        || (h1->filename_len != h2->filename_len)
+        || !h1->filename || !h2->filename
+        || strcmp(h1->filename, h2->filename))
+        return -1;
+
+    /* check that CRC and sizes are zero if data descriptor is used */
+    if ((h1->bitflags & ZIP_GPBF_DATA_DESCRIPTOR) && local1p
+        && (h1->crc != 0
+            || h1->comp_size != 0
+            || h1->uncomp_size != 0))
+        return -1;
+    if ((h2->bitflags & ZIP_GPBF_DATA_DESCRIPTOR) && local2p
+        && (h2->crc != 0
+            || h2->comp_size != 0
+            || h2->uncomp_size != 0))
+        return -1;
+    
+    /* check that CRC and sizes are equal if no data descriptor is used */
+    if (((h1->bitflags & ZIP_GPBF_DATA_DESCRIPTOR) == 0 || local1p == 0)
+        && ((h2->bitflags & ZIP_GPBF_DATA_DESCRIPTOR) == 0 || local2p == 0)) {
+        if ((h1->crc != h2->crc)
+            || (h1->comp_size != h2->comp_size)
+            || (h1->uncomp_size != h2->uncomp_size))
+            return -1;
+    }
+    
+    if ((local1p == local2p)
+        && ((h1->extrafield_len != h2->extrafield_len)
+            || (h1->extrafield_len && h2->extrafield
+                && memcmp(h1->extrafield, h2->extrafield,
+                          h1->extrafield_len))))
+        return -1;
+
+    /* if either is local, nothing more to check */
+    if (local1p || local2p)
+        return 0;
+
+    if ((h1->version_madeby != h2->version_madeby)
+        || (h1->disk_number != h2->disk_number)
+        || (h1->int_attrib != h2->int_attrib)
+        || (h1->ext_attrib != h2->ext_attrib)
+        || (h1->offset != h2->offset)
+        || (h1->comment_len != h2->comment_len)
+        || (h1->comment_len && h2->comment
+            && memcmp(h1->comment, h2->comment, h1->comment_len)))
+        return -1;
+
+    return 0;
+}
+
+
+
+static struct zip *
+_zip_allocate_new(const char *fn, int *zep)
+{
+    struct zip *za;
+    struct zip_error error;
+
+    if ((za=_zip_new(&error)) == NULL) {
+        set_error(zep, &error, 0);
+        return NULL;
+    }
+        
+    za->zn = strdup(fn);
+    if (!za->zn) {
+        _zip_free(za);
+        set_error(zep, NULL, ZIP_ER_MEMORY);
+        return NULL;
+    }
+    return za;
+}
+
+
+
+static int
+_zip_file_exists(const char *fn, int flags, int *zep)
+{
+    struct stat st;
+
+    if (fn == NULL) {
+        set_error(zep, NULL, ZIP_ER_INVAL);
+        return -1;
+    }
+    
+    if (stat(fn, &st) != 0) {
+        if (flags & ZIP_CREATE)
+            return 0;
+        else {
+            set_error(zep, NULL, ZIP_ER_OPEN);
+            return -1;
+        }
+    }
+    else if ((flags & ZIP_EXCL)) {
+        set_error(zep, NULL, ZIP_ER_EXISTS);
+        return -1;
+    }
+    /* ZIP_CREATE gets ignored if file exists and not ZIP_EXCL,
+       just like open() */
+
+    return 1;
+}
+
+
+
+static struct zip_cdir *
+_zip_find_central_dir(FILE *fp, int flags, int *zep, myoff_t len)
+{
+    struct zip_cdir *cdir, *cdirnew;
+    unsigned char *buf, *match;
+    int a, best, buflen, i;
+    struct zip_error zerr;
+
+    i = fseeko(fp, -(len < CDBUFSIZE ? len : CDBUFSIZE), SEEK_END);
+    if (i == -1 && errno != EFBIG) {
+        /* seek before start of file on my machine */
+        set_error(zep, NULL, ZIP_ER_SEEK);
+        return NULL;
+    }
+
+    /* 64k is too much for stack */
+    if ((buf=(unsigned char *)malloc(CDBUFSIZE)) == NULL) {
+        set_error(zep, NULL, ZIP_ER_MEMORY);
+        return NULL;
+    }
+
+    clearerr(fp);
+    buflen = fread(buf, 1, CDBUFSIZE, fp);
+
+    if (ferror(fp)) {
+        set_error(zep, NULL, ZIP_ER_READ);
+        free(buf);
+        return NULL;
+    }
+    
+    best = -1;
+    cdir = NULL;
+    match = buf;
+    _zip_error_set(&zerr, ZIP_ER_NOZIP, 0);
+
+    while ((match=_zip_memmem(match, buflen-(match-buf)-18,
+                              (const unsigned char *)EOCD_MAGIC, 4))!=NULL) {
+        /* found match -- check, if good */
+        /* to avoid finding the same match all over again */
+        match++;
+        if ((cdirnew=_zip_readcdir(fp, buf, match-1, buflen, flags,
+                                   &zerr)) == NULL)
+            continue;
+
+        if (cdir) {
+            if (best <= 0)
+                best = _zip_checkcons(fp, cdir, &zerr);
+            a = _zip_checkcons(fp, cdirnew, &zerr);
+            if (best < a) {
+                _zip_cdir_free(cdir);
+                cdir = cdirnew;
+                best = a;
+            }
+            else
+                _zip_cdir_free(cdirnew);
+        }
+        else {
+            cdir = cdirnew;
+            if (flags & ZIP_CHECKCONS)
+                best = _zip_checkcons(fp, cdir, &zerr);
+            else
+                best = 0;
+        }
+        cdirnew = NULL;
+    }
+
+    free(buf);
+    
+    if (best < 0) {
+        set_error(zep, &zerr, 0);
+        _zip_cdir_free(cdir);
+        return NULL;
+    }
+
+    return cdir;
+}
+
+
+
+static unsigned char *
+_zip_memmem(const unsigned char *big, int biglen, const unsigned char *little, 
+       int littlelen)
+{
+    const unsigned char *p;
+    
+    if ((biglen < littlelen) || (littlelen == 0))
+        return NULL;
+    p = big-1;
+    while ((p=(const unsigned char *)
+                memchr(p+1, little[0], (size_t)(big-(p+1)+biglen-littlelen+1)))
+           != NULL) {
+        if (memcmp(p+1, little+1, littlelen-1)==0)
+            return (unsigned char *)p;
+    }
+
+    return NULL;
+}
+
+
+/* _zip_new:
+   creates a new zipfile struct, and sets the contents to zero; returns
+   the new struct. */
+
+struct zip *
+_zip_new(struct zip_error *error)
+{
+    struct zip *za;
+
+    za = (struct zip *)malloc(sizeof(struct zip));
+    if (!za) {
+        _zip_error_set(error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+
+    za->zn = NULL;
+    za->zp = NULL;
+    _zip_error_init(&za->error);
+    za->cdir = NULL;
+    za->ch_comment = NULL;
+    za->ch_comment_len = -1;
+    za->nentry = za->nentry_alloc = 0;
+    za->entry = NULL;
+    za->nfile = za->nfile_alloc = 0;
+    za->file = NULL;
+    za->flags = za->ch_flags = 0;
+    
+    return za;
+}
+
+
+void *
+_zip_memdup(const void *mem, size_t len, struct zip_error *error)
+{
+    void *ret;
+
+    ret = malloc(len);
+    if (!ret) {
+        _zip_error_set(error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+
+    memcpy(ret, mem, len);
+
+    return ret;
+}
+
+
+ZIP_EXTERN int
+zip_get_num_files(struct zip *za)
+{
+    if (za == NULL)
+        return -1;
+
+    return za->nentry;
+}
+
+ZIP_EXTERN const char *
+zip_get_name(struct zip *za, int idx, int flags)
+{
+    return _zip_get_name(za, idx, flags, &za->error);
+}
+
+
+
+const char *
+_zip_get_name(struct zip *za, int idx, int flags, struct zip_error *error)
+{
+    if (idx < 0 || idx >= za->nentry) {
+        _zip_error_set(error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    if ((flags & ZIP_FL_UNCHANGED) == 0) {
+        if (za->entry[idx].state == ZIP_ST_DELETED) {
+            _zip_error_set(error, ZIP_ER_DELETED, 0);
+            return NULL;
+        }
+        if (za->entry[idx].ch_filename)
+            return za->entry[idx].ch_filename;
+    }
+
+    if (za->cdir == NULL || idx >= za->cdir->nentry) {
+        _zip_error_set(error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+    
+    return za->cdir->entry[idx].filename;
+}
+
+
+ZIP_EXTERN const char *
+zip_get_file_comment(struct zip *za, int idx, int *lenp, int flags)
+{
+    if (idx < 0 || idx >= za->nentry) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    if ((flags & ZIP_FL_UNCHANGED)
+        || (za->entry[idx].ch_comment_len == -1)) {
+        if (lenp != NULL)
+            *lenp = za->cdir->entry[idx].comment_len;
+        return za->cdir->entry[idx].comment;
+    }
+    
+    if (lenp != NULL)
+        *lenp = za->entry[idx].ch_comment_len;
+    return za->entry[idx].ch_comment;
+}
+
+
+ZIP_EXTERN int
+zip_get_archive_flag(struct zip *za, int flag, int flags)
+{
+    int fl;
+
+    fl = (flags & ZIP_FL_UNCHANGED) ? za->flags : za->ch_flags;
+
+    return (fl & flag) ? 1 : 0;
+}
+
+
+ZIP_EXTERN const char *
+zip_get_archive_comment(struct zip *za, int *lenp, int flags)
+{
+    if ((flags & ZIP_FL_UNCHANGED)
+        || (za->ch_comment_len == -1)) {
+        if (za->cdir) {
+            if (lenp != NULL)
+                *lenp = za->cdir->comment_len;
+            return za->cdir->comment;
+        }
+        else {
+            if (lenp != NULL)
+                *lenp = -1;
+            return NULL;
+        }
+    }
+    
+    if (lenp != NULL)
+        *lenp = za->ch_comment_len;
+    return za->ch_comment;
+}
+
+
+/* _zip_free:
+   frees the space allocated to a zipfile struct, and closes the
+   corresponding file. */
+
+void
+_zip_free(struct zip *za)
+{
+    int i;
+
+    if (za == NULL)
+        return;
+
+    if (za->zn)
+        free(za->zn);
+
+    if (za->zp)
+        fclose(za->zp);
+
+    _zip_cdir_free(za->cdir);
+
+    if (za->entry) {
+        for (i=0; i<za->nentry; i++) {
+            _zip_entry_free(za->entry+i);
+        }
+        free(za->entry);
+    }
+
+    for (i=0; i<za->nfile; i++) {
+        if (za->file[i]->error.zip_err == ZIP_ER_OK) {
+            _zip_error_set(&za->file[i]->error, ZIP_ER_ZIPCLOSED, 0);
+            za->file[i]->za = NULL;
+        }
+    }
+
+    free(za->file);
+    
+    free(za);
+
+    return;
+}
+
+
+ZIP_EXTERN ssize_t
+zip_fread(struct zip_file *zf, void *outbuf, size_t toread)
+{
+    int ret;
+    size_t out_before, len;
+    int i;
+
+    if (!zf)
+        return -1;
+
+    if (zf->error.zip_err != 0)
+        return -1;
+
+    if ((zf->flags & ZIP_ZF_EOF) || (toread == 0))
+        return 0;
+
+    if (zf->bytes_left == 0) {
+        zf->flags |= ZIP_ZF_EOF;
+        if (zf->flags & ZIP_ZF_CRC) {
+            if (zf->crc != zf->crc_orig) {
+                _zip_error_set(&zf->error, ZIP_ER_CRC, 0);
+                return -1;
+            }
+        }
+        return 0;
+    }
+    
+    if ((zf->flags & ZIP_ZF_DECOMP) == 0) {
+        ret = _zip_file_fillbuf(outbuf, toread, zf);
+        if (ret > 0) {
+            if (zf->flags & ZIP_ZF_CRC)
+                zf->crc = crc32(zf->crc, (Bytef *)outbuf, ret);
+            zf->bytes_left -= ret;
+        }
+        return ret;
+    }
+    
+    zf->zstr->next_out = (Bytef *)outbuf;
+    zf->zstr->avail_out = toread;
+    out_before = zf->zstr->total_out;
+    
+    /* endless loop until something has been accomplished */
+    for (;;) {
+        ret = inflate(zf->zstr, Z_SYNC_FLUSH);
+
+        switch (ret) {
+        case Z_OK:
+        case Z_STREAM_END:
+            /* all ok */
+            /* Z_STREAM_END probably won't happen, since we didn't
+               have a header */
+            len = zf->zstr->total_out - out_before;
+            if (len >= zf->bytes_left || len >= toread) {
+                if (zf->flags & ZIP_ZF_CRC)
+                    zf->crc = crc32(zf->crc, (Bytef *)outbuf, len);
+                zf->bytes_left -= len;
+                return len;
+            }
+            break;
+
+        case Z_BUF_ERROR:
+            if (zf->zstr->avail_in == 0) {
+                i = _zip_file_fillbuf(zf->buffer, BUFSIZE, zf);
+                if (i == 0) {
+                    _zip_error_set(&zf->error, ZIP_ER_INCONS, 0);
+                    return -1;
+                }
+                else if (i < 0)
+                    return -1;
+                zf->zstr->next_in = (Bytef *)zf->buffer;
+                zf->zstr->avail_in = i;
+                continue;
+            }
+            /* fallthrough */
+        case Z_NEED_DICT:
+        case Z_DATA_ERROR:
+        case Z_STREAM_ERROR:
+        case Z_MEM_ERROR:
+            _zip_error_set(&zf->error, ZIP_ER_ZLIB, ret);
+            return -1;
+        }
+    }
+}
+
+
+ZIP_EXTERN const char *
+zip_strerror(struct zip *za)
+{
+    return _zip_error_strerror(&za->error);
+}
+
+
+ZIP_EXTERN void
+zip_stat_init(struct zip_stat *st)
+{
+    st->name = NULL;
+    st->index = -1;
+    st->crc = 0;
+    st->mtime = (time_t)-1;
+    st->size = -1;
+    st->comp_size = -1;
+    st->comp_method = ZIP_CM_STORE;
+    st->encryption_method = ZIP_EM_NONE;
+}
+
+
+ZIP_EXTERN int
+zip_stat_index(struct zip *za, int index, int flags, struct zip_stat *st)
+{
+    const char *name;
+    
+    if (index < 0 || index >= za->nentry) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+
+    if ((name=zip_get_name(za, index, flags)) == NULL)
+        return -1;
+    
+
+    if ((flags & ZIP_FL_UNCHANGED) == 0
+        && ZIP_ENTRY_DATA_CHANGED(za->entry+index)) {
+        if (za->entry[index].source->f(za->entry[index].source->ud,
+                                     st, sizeof(*st), ZIP_SOURCE_STAT) < 0) {
+            _zip_error_set(&za->error, ZIP_ER_CHANGED, 0);
+            return -1;
+        }
+    }
+    else {
+        if (za->cdir == NULL || index >= za->cdir->nentry) {
+            _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+            return -1;
+        }
+        
+        st->crc = za->cdir->entry[index].crc;
+        st->size = za->cdir->entry[index].uncomp_size;
+        st->mtime = za->cdir->entry[index].last_mod;
+        st->comp_size = za->cdir->entry[index].comp_size;
+        st->comp_method = za->cdir->entry[index].comp_method;
+        if (za->cdir->entry[index].bitflags & ZIP_GPBF_ENCRYPTED) {
+            if (za->cdir->entry[index].bitflags & ZIP_GPBF_STRONG_ENCRYPTION) {
+                /* XXX */
+                st->encryption_method = ZIP_EM_UNKNOWN;
+            }
+            else
+                st->encryption_method = ZIP_EM_TRAD_PKWARE;
+        }
+        else
+            st->encryption_method = ZIP_EM_NONE;
+        /* st->bitflags = za->cdir->entry[index].bitflags; */
+    }
+
+    st->index = index;
+    st->name = name;
+    
+    return 0;
+}
+
+
+ZIP_EXTERN int
+zip_stat(struct zip *za, const char *fname, int flags, struct zip_stat *st)
+{
+    int idx;
+
+    if ((idx=zip_name_locate(za, fname, flags)) < 0)
+        return -1;
+
+    return zip_stat_index(za, idx, flags, st);
+}
+
+
+struct read_zip {
+    struct zip_file *zf;
+    struct zip_stat st;
+    myoff_t off, len;
+};
+
+static ssize_t read_zip(void *st, void *data, size_t len,
+                        enum zip_source_cmd cmd);
+
+
+
+ZIP_EXTERN struct zip_source *
+zip_source_zip(struct zip *za, struct zip *srcza, int srcidx, int flags,
+               myoff_t start, myoff_t len)
+{
+    struct zip_error error;
+    struct zip_source *zs;
+    struct read_zip *p;
+
+    /* XXX: ZIP_FL_RECOMPRESS */
+
+    if (za == NULL)
+        return NULL;
+
+    if (srcza == NULL || start < 0 || len < -1 || srcidx < 0 || srcidx >= srcza->nentry) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    if ((flags & ZIP_FL_UNCHANGED) == 0
+        && ZIP_ENTRY_DATA_CHANGED(srcza->entry+srcidx)) {
+        _zip_error_set(&za->error, ZIP_ER_CHANGED, 0);
+        return NULL;
+    }
+
+    if (len == 0)
+        len = -1;
+
+    if (start == 0 && len == -1 && (flags & ZIP_FL_RECOMPRESS) == 0)
+        flags |= ZIP_FL_COMPRESSED;
+    else
+        flags &= ~ZIP_FL_COMPRESSED;
+
+    if ((p=(struct read_zip *)malloc(sizeof(*p))) == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+        
+    _zip_error_copy(&error, &srcza->error);
+        
+    if (zip_stat_index(srcza, srcidx, flags, &p->st) < 0
+        || (p->zf=zip_fopen_index(srcza, srcidx, flags)) == NULL) {
+        free(p);
+        _zip_error_copy(&za->error, &srcza->error);
+        _zip_error_copy(&srcza->error, &error);
+        
+        return NULL;
+    }
+    p->off = start;
+    p->len = len;
+
+    if ((flags & ZIP_FL_COMPRESSED) == 0) {
+        p->st.size = p->st.comp_size = len;
+        p->st.comp_method = ZIP_CM_STORE;
+        p->st.crc = 0;
+    }
+    
+    if ((zs=zip_source_function(za, read_zip, p)) == NULL) {
+        free(p);
+        return NULL;
+    }
+
+    return zs;
+}
+
+
+
+static ssize_t
+read_zip(void *state, void *data, size_t len, enum zip_source_cmd cmd)
+{
+    struct read_zip *z;
+    char b[8192], *buf;
+    int i, n;
+
+    z = (struct read_zip *)state;
+    buf = (char *)data;
+
+    switch (cmd) {
+    case ZIP_SOURCE_OPEN:
+        for (n=0; n<z->off; n+= i) {
+            i = (z->off-n > sizeof(b) ? sizeof(b) : z->off-n);
+            if ((i=zip_fread(z->zf, b, i)) < 0) {
+                zip_fclose(z->zf);
+                z->zf = NULL;
+                return -1;
+            }
+        }
+        return 0;
+        
+    case ZIP_SOURCE_READ:
+        if (z->len != -1)
+            n = len > z->len ? z->len : len;
+        else
+            n = len;
+        
+
+        if ((i=zip_fread(z->zf, buf, n)) < 0)
+            return -1;
+
+        if (z->len != -1)
+            z->len -= i;
+
+        return i;
+        
+    case ZIP_SOURCE_CLOSE:
+        return 0;
+
+    case ZIP_SOURCE_STAT:
+        if (len < sizeof(z->st))
+            return -1;
+        len = sizeof(z->st);
+
+        memcpy(data, &z->st, len);
+        return len;
+
+    case ZIP_SOURCE_ERROR:
+        {
+            int *e;
+
+            if (len < sizeof(int)*2)
+                return -1;
+
+            e = (int *)data;
+            zip_file_error_get(z->zf, e, e+1);
+        }
+        return sizeof(int)*2;
+
+    case ZIP_SOURCE_FREE:
+        zip_fclose(z->zf);
+        free(z);
+        return 0;
+
+    default:
+        ;
+    }
+
+    return -1;
+}
+
+
+ZIP_EXTERN struct zip_source *
+zip_source_function(struct zip *za, zip_source_callback zcb, void *ud)
+{
+    struct zip_source *zs;
+
+    if (za == NULL)
+        return NULL;
+
+    if ((zs=(struct zip_source *)malloc(sizeof(*zs))) == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+
+    zs->f = zcb;
+    zs->ud = ud;
+    
+    return zs;
+}
+
+
+ZIP_EXTERN void
+zip_source_free(struct zip_source *source)
+{
+    if (source == NULL)
+        return;
+
+    (void)source->f(source->ud, NULL, 0, ZIP_SOURCE_FREE);
+
+    free(source);
+}
+
+
+struct read_file {
+    char *fname;        /* name of file to copy from */
+    FILE *f;                /* file to copy from */
+    myoff_t off;                /* start offset of */
+    myoff_t len;                /* lengt of data to copy */
+    myoff_t remain;        /* bytes remaining to be copied */
+    int e[2];                /* error codes */
+};
+
+static ssize_t read_file(void *state, void *data, size_t len,
+                     enum zip_source_cmd cmd);
+
+
+
+ZIP_EXTERN struct zip_source *
+zip_source_filep(struct zip *za, FILE *file, myoff_t start, myoff_t len)
+{
+    if (za == NULL)
+        return NULL;
+
+    if (file == NULL || start < 0 || len < -1) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    return _zip_source_file_or_p(za, NULL, file, start, len);
+}
+
+
+
+struct zip_source *
+_zip_source_file_or_p(struct zip *za, const char *fname, FILE *file,
+                      myoff_t start, myoff_t len)
+{
+    struct read_file *f;
+    struct zip_source *zs;
+
+    if (file == NULL && fname == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+        return NULL;
+    }
+
+    if ((f=(struct read_file *)malloc(sizeof(struct read_file))) == NULL) {
+        _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+        return NULL;
+    }
+
+    f->fname = NULL;
+    if (fname) {
+        if ((f->fname=strdup(fname)) == NULL) {
+            _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+            free(f);
+            return NULL;
+        }
+    }
+    f->f = file;
+    f->off = start;
+    f->len = (len ? len : -1);
+    
+    if ((zs=zip_source_function(za, read_file, f)) == NULL) {
+        free(f);
+        return NULL;
+    }
+
+    return zs;
+}
+
+
+
+static ssize_t
+read_file(void *state, void *data, size_t len, enum zip_source_cmd cmd)
+{
+    struct read_file *z;
+    char *buf;
+    int i, n;
+
+    z = (struct read_file *)state;
+    buf = (char *)data;
+
+    switch (cmd) {
+    case ZIP_SOURCE_OPEN:
+        if (z->fname) {
+            if ((z->f=fopen(z->fname, "rb")) == NULL) {
+                z->e[0] = ZIP_ER_OPEN;
+                z->e[1] = errno;
+                return -1;
+            }
+        }
+
+        if (fseeko(z->f, z->off, SEEK_SET) < 0) {
+            z->e[0] = ZIP_ER_SEEK;
+            z->e[1] = errno;
+            return -1;
+        }
+        z->remain = z->len;
+        return 0;
+        
+    case ZIP_SOURCE_READ:
+        if (z->remain != -1)
+            n = len > z->remain ? z->remain : len;
+        else
+            n = len;
+        
+        if ((i=fread(buf, 1, n, z->f)) < 0) {
+            z->e[0] = ZIP_ER_READ;
+            z->e[1] = errno;
+            return -1;
+        }
+
+        if (z->remain != -1)
+            z->remain -= i;
+
+        return i;
+        
+    case ZIP_SOURCE_CLOSE:
+        if (z->fname) {
+            fclose(z->f);
+            z->f = NULL;
+        }
+        return 0;
+
+    case ZIP_SOURCE_STAT:
+        {
+            struct zip_stat *st;
+            struct stat fst;
+            int err;
+            
+            if (len < sizeof(*st))
+                return -1;
+
+            if (z->f)
+                err = fstat(fileno(z->f), &fst);
+            else
+                err = stat(z->fname, &fst);
+
+            if (err != 0) {
+                z->e[0] = ZIP_ER_READ; /* best match */
+                z->e[1] = errno;
+                return -1;
+            }
+
+            st = (struct zip_stat *)data;
+
+            zip_stat_init(st);
+            st->mtime = fst.st_mtime;
+            if (z->len != -1)
+                st->size = z->len;
+            else if ((fst.st_mode&S_IFMT) == S_IFREG)
+                st->size = fst.st_size;
+
+            return sizeof(*st);
+        }
+
+    case ZIP_SOURCE_ERROR:
+        if (len < sizeof(int)*2)
+            return -1;
+
+        memcpy(data, z->e, sizeof(int)*2);
+        return sizeof(int)*2;
+
+    case ZIP_SOURCE_FREE:
+        free(z->fname);
+        if (z->f)
+            fclose(z->f);
+        free(z);
+        return 0;
+
+    default:
+        ;
+    }
+
+    return -1;
+}
+
+
+ZIP_EXTERN int
+zip_name_locate(struct zip *za, const char *fname, int flags)
+{
+    return _zip_name_locate(za, fname, flags, &za->error);
+}
+
+
+
+int
+_zip_name_locate(struct zip *za, const char *fname, int flags,
+                 struct zip_error *error)
+{
+    int (*cmp)(const char *, const char *);
+    const char *fn, *p;
+    int i, n;
+
+    if (fname == NULL) {
+        _zip_error_set(error, ZIP_ER_INVAL, 0);
+        return -1;
+    }
+    
+    cmp = (flags & ZIP_FL_NOCASE) ? strcasecmp : strcmp;
+
+    n = (flags & ZIP_FL_UNCHANGED) ? za->cdir->nentry : za->nentry;
+    for (i=0; i<n; i++) {
+        if (flags & ZIP_FL_UNCHANGED)
+            fn = za->cdir->entry[i].filename;
+        else
+            fn = _zip_get_name(za, i, flags, error);
+
+        /* newly added (partially filled) entry */
+        if (fn == NULL)
+            continue;
+        
+        if (flags & ZIP_FL_NODIR) {
+            p = strrchr(fn, '/');
+            if (p)
+                fn = p+1;
+        }
+
+        if (cmp(fname, fn) == 0)
+            return i;
+    }
+
+    _zip_error_set(error, ZIP_ER_NOENT, 0);
+    return -1;
+}
+
diff --git a/rod/ccgexprs.nim b/rod/ccgexprs.nim
index ecff707ae..6eae842f2 100755
--- a/rod/ccgexprs.nim
+++ b/rod/ccgexprs.nim
@@ -1093,15 +1093,16 @@ proc genRepr(p: BProc, e: PNode, d: var TLoc) =
                 ropef("reprSet($1, $2)", [rdLoc(a), genTypeInfo(p.module, t)]))
   of tyOpenArray: 
     useMagic(p.module, "reprOpenArray")
+    var b: TLoc
     case a.t.kind
-    of tyOpenArray: putIntoDest(p, d, e.typ, ropef("$1, $1Len0", [rdLoc(a)]))
+    of tyOpenArray: putIntoDest(p, b, e.typ, rdLoc(a))
     of tyString, tySequence: 
-      putIntoDest(p, d, e.typ, ropef("$1->data, $1->Sup.len", [rdLoc(a)]))
+      putIntoDest(p, b, e.typ, ropef("$1->data, $1->Sup.len", [rdLoc(a)]))
     of tyArray, tyArrayConstr: 
-      putIntoDest(p, d, e.typ, 
+      putIntoDest(p, b, e.typ, 
                   ropef("$1, $2", [rdLoc(a), toRope(lengthOrd(a.t))]))
     else: InternalError(e.sons[0].info, "genRepr()")
-    putIntoDest(p, d, e.typ, ropef("reprOpenArray($1, $2)", [rdLoc(d), 
+    putIntoDest(p, d, e.typ, ropef("reprOpenArray($1, $2)", [rdLoc(b), 
         genTypeInfo(p.module, elemType(t))]))
   of tyCString, tyArray, tyArrayConstr, tyRef, tyPtr, tyPointer, tyNil, 
      tySequence: 
diff --git a/rod/evals.nim b/rod/evals.nim
index b3fa08a0b..79428e60f 100755
--- a/rod/evals.nim
+++ b/rod/evals.nim
@@ -259,6 +259,10 @@ proc evalCall(c: PEvalContext, n: PNode): PNode =
   if n.typ != nil: result = d.params[0]
   popStackFrame(c)
 
+proc aliasNeeded(n: PNode, flags: TEvalFlags): bool = 
+  result = efLValue in flags or n.typ == nil or 
+    n.typ.kind in {tyExpr, tyStmt, tyTypeDesc}
+
 proc evalVariable(c: PStackFrame, sym: PSym, flags: TEvalFlags): PNode = 
   # We need to return a node to the actual value,
   # which can be modified.
@@ -269,7 +273,7 @@ proc evalVariable(c: PStackFrame, sym: PSym, flags: TEvalFlags): PNode =
       if result == nil: result = emptyNode
       return
     result = IdNodeTableGet(x.mapping, sym)
-    if efLValue notin flags: result = copyTree(result)
+    if not aliasNeeded(result, flags): result = copyTree(result)
     if result != nil: return 
     x = x.next
   result = emptyNode
@@ -286,7 +290,7 @@ proc evalArrayAccess(c: PEvalContext, n: PNode, flags: TEvalFlags): PNode =
   of nkBracket, nkPar, nkMetaNode: 
     if (idx >= 0) and (idx < sonsLen(x)): result = x.sons[int(idx)]
     else: stackTrace(c, n, errIndexOutOfBounds)
-    if efLValue notin flags: result = copyTree(result)
+    if not aliasNeeded(result, flags): result = copyTree(result)
   of nkStrLit..nkTripleStrLit: 
     if efLValue in flags: 
       InternalError(n.info, "cannot evaluate write access to char")
@@ -313,7 +317,7 @@ proc evalFieldAccess(c: PEvalContext, n: PNode, flags: TEvalFlags): PNode =
       InternalError(n.info, "evalFieldAccess")
     if x.sons[i].sons[0].sym.name.id == field.id: 
       result = x.sons[i].sons[1]
-      if efLValue in flags: result = copyTree(result)
+      if not aliasNeeded(result, flags): result = copyTree(result)
       return
   stackTrace(c, n, errFieldXNotFound, field.name.s)
   result = emptyNode
@@ -705,7 +709,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
   of mAppendStrStr: result = evalAppendStrStr(c, n)
   of mAppendSeqElem: result = evalAppendSeqElem(c, n)
   of mNLen: 
-    result = evalAux(c, n.sons[1], {})
+    result = evalAux(c, n.sons[1], {efLValue})
     if isSpecial(result): return 
     var a = result
     result = newNodeIT(nkIntLit, n.info, n.typ)
@@ -714,10 +718,10 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
       nil
     else: result.intVal = sonsLen(a)
   of mNChild: 
-    result = evalAux(c, n.sons[1], {})
+    result = evalAux(c, n.sons[1], {efLValue})
     if isSpecial(result): return 
     var a = result
-    result = evalAux(c, n.sons[2], {})
+    result = evalAux(c, n.sons[2], {efLValue})
     if isSpecial(result): return 
     var k = getOrdValue(result)
     if not (a.kind in {nkEmpty..nkNilLit}) and (k >= 0) and (k < sonsLen(a)): 
@@ -730,10 +734,10 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
     result = evalAux(c, n.sons[1], {efLValue})
     if isSpecial(result): return 
     var a = result
-    result = evalAux(c, n.sons[2], {})
+    result = evalAux(c, n.sons[2], {efLValue})
     if isSpecial(result): return 
     var b = result
-    result = evalAux(c, n.sons[3], {})
+    result = evalAux(c, n.sons[3], {efLValue})
     if isSpecial(result): return 
     var k = getOrdValue(b)
     if (k >= 0) and (k < sonsLen(a)) and not (a.kind in {nkEmpty..nkNilLit}): 
@@ -746,7 +750,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
     result = evalAux(c, n.sons[1], {efLValue})
     if isSpecial(result): return 
     var a = result
-    result = evalAux(c, n.sons[2], {})
+    result = evalAux(c, n.sons[2], {efLValue})
     if isSpecial(result): return 
     addSon(a, result)
     result = emptyNode
@@ -754,7 +758,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
     result = evalAux(c, n.sons[1], {efLValue})
     if isSpecial(result): return 
     var a = result
-    result = evalAux(c, n.sons[2], {})
+    result = evalAux(c, n.sons[2], {efLValue})
     if isSpecial(result): return 
     for i in countup(0, sonsLen(result) - 1): addSon(a, result.sons[i])
     result = emptyNode
@@ -762,10 +766,10 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
     result = evalAux(c, n.sons[1], {efLValue})
     if isSpecial(result): return 
     var a = result
-    result = evalAux(c, n.sons[2], {})
+    result = evalAux(c, n.sons[2], {efLValue})
     if isSpecial(result): return 
     var b = result
-    result = evalAux(c, n.sons[3], {})
+    result = evalAux(c, n.sons[3], {efLValue})
     if isSpecial(result): return 
     for i in countup(0, int(getOrdValue(result)) - 1): 
       delSon(a, int(getOrdValue(b)))
@@ -793,7 +797,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
     of nkFloatLit..nkFloat64Lit: result.floatVal = a.floatVal
     else: InternalError(n.info, "no float value")
   of mNSymbol: 
-    result = evalAux(c, n.sons[1], {})
+    result = evalAux(c, n.sons[1], {efLValue})
     if isSpecial(result): return 
     if result.kind != nkSym: InternalError(n.info, "no symbol")
   of mNIdent: 
@@ -829,7 +833,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
     result = evalAux(c, n.sons[1], {efLValue})
     if isSpecial(result): return 
     var a = result
-    result = evalAux(c, n.sons[2], {})
+    result = evalAux(c, n.sons[2], {efLValue})
     if isSpecial(result): return 
     a.sym = result.sym        # XXX: exception handling?
     result = emptyNode
@@ -837,7 +841,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
     result = evalAux(c, n.sons[1], {efLValue})
     if isSpecial(result): return 
     var a = result
-    result = evalAux(c, n.sons[2], {})
+    result = evalAux(c, n.sons[2], {efLValue})
     if isSpecial(result): return 
     a.ident = result.ident    # XXX: exception handling?
     result = emptyNode
@@ -845,7 +849,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
     result = evalAux(c, n.sons[1], {efLValue})
     if isSpecial(result): return 
     var a = result
-    result = evalAux(c, n.sons[2], {})
+    result = evalAux(c, n.sons[2], {efLValue})
     if isSpecial(result): return 
     a.typ = result.typ        # XXX: exception handling?
     result = emptyNode
@@ -861,7 +865,7 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
     result = evalAux(c, n.sons[1], {})
     if isSpecial(result): return 
     var k = getOrdValue(result)
-    result = evalAux(c, n.sons[2], {})
+    result = evalAux(c, n.sons[2], {efLValue})
     if result.kind == nkExceptBranch: return 
     var a = result
     if (k < 0) or (k > ord(high(TNodeKind))): 
@@ -869,11 +873,11 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
     result = newNodeI(TNodeKind(int(k)), 
       if a.kind == nkNilLit: n.info else: a.info)
   of mNCopyNimNode: 
-    result = evalAux(c, n.sons[1], {})
+    result = evalAux(c, n.sons[1], {efLValue})
     if isSpecial(result): return 
     result = copyNode(result)
   of mNCopyNimTree: 
-    result = evalAux(c, n.sons[1], {})
+    result = evalAux(c, n.sons[1], {efLValue})
     if isSpecial(result): return 
     result = copyTree(result)
   of mStrToIdent: 
@@ -902,10 +906,10 @@ proc evalMagicOrCall(c: PEvalContext, n: PNode): PNode =
     if (a.kind == nkIdent) and (b.kind == nkIdent): 
       if a.ident.id == b.ident.id: result.intVal = 1
   of mEqNimrodNode: 
-    result = evalAux(c, n.sons[1], {})
+    result = evalAux(c, n.sons[1], {efLValue})
     if isSpecial(result): return 
     var a = result
-    result = evalAux(c, n.sons[2], {})
+    result = evalAux(c, n.sons[2], {efLValue})
     if isSpecial(result): return 
     var b = result
     result = newNodeIT(nkIntLit, n.info, n.typ)
@@ -966,16 +970,18 @@ proc evalAux(c: PEvalContext, n: PNode, flags: TEvalFlags): PNode =
   of nkCall, nkHiddenCallConv, nkMacroStmt, nkCommand, nkCallStrLit: 
     result = evalMagicOrCall(c, n)
   of nkCurly, nkBracket, nkRange: 
+    # flags need to be passed here for mNAddMultiple :-(
+    # XXX this is not correct in every case!
     var a = copyNode(n)
     for i in countup(0, sonsLen(n) - 1): 
-      result = evalAux(c, n.sons[i], {})
+      result = evalAux(c, n.sons[i], flags)
       if isSpecial(result): return 
       addSon(a, result)
     result = a
   of nkPar: 
     var a = copyTree(n)
     for i in countup(0, sonsLen(n) - 1): 
-      result = evalAux(c, n.sons[i].sons[1], {})
+      result = evalAux(c, n.sons[i].sons[1], flags)
       if isSpecial(result): return 
       a.sons[i].sons[1] = result
     result = a
diff --git a/rod/extccomp.nim b/rod/extccomp.nim
index 990466e1b..563434e0f 100755
--- a/rod/extccomp.nim
+++ b/rod/extccomp.nim
@@ -283,7 +283,7 @@ proc NameToCC(name: string): TSystemCC =
   result = ccNone
 
 proc addOpt(dest: var string, src: string) = 
-  if (len(dest) == 0) or (dest[len(dest) - 1 + 0] != ' '): add(dest, " ")
+  if len(dest) == 0 or dest[len(dest) - 1 + 0] != ' ': add(dest, " ")
   add(dest, src)
 
 proc addCompileOption(option: string) = 
@@ -308,7 +308,7 @@ proc addFileToLink(filename: string) =
   
 proc execExternalProgram(cmd: string) = 
   if (optListCmd in gGlobalOptions) or (gVerbosity > 0): MessageOut(cmd)
-  if execCmd(cmd) != 0: rawMessage(errExecutionOfProgramFailed)
+  if execCmd(cmd) != 0: rawMessage(errExecutionOfProgramFailed, "")
   
 proc generateScript(projectFile: string, script: PRope) = 
   var (dir, name, ext) = splitFile(projectFile)
@@ -425,7 +425,7 @@ proc CallCCompiler(projectfile: string) =
     else: 
       res = execProcesses(cmds, {poUseShell, poParentStreams}, 
                           gNumberOfProcessors)
-    if res != 0: rawMessage(errExecutionOfProgramFailed)
+    if res != 0: rawMessage(errExecutionOfProgramFailed, [])
   if not (optNoLinking in gGlobalOptions): 
     # call the linker:
     var linkerExe = getConfigVar(cc[c].name & ".linkerexe")
diff --git a/rod/msgs.nim b/rod/msgs.nim
index ca3a5c1e5..01852e0ba 100755
--- a/rod/msgs.nim
+++ b/rod/msgs.nim
@@ -323,7 +323,7 @@ const # this format is understood by many text editors: it is the same that
   RawHintFormat* = "Hint: $1"
 
 proc MessageOut*(s: string)
-proc rawMessage*(msg: TMsgKind, arg: string = "")
+proc rawMessage*(msg: TMsgKind, arg: string)
 proc rawMessage*(msg: TMsgKind, args: openarray[string])
 proc liMessage*(info: TLineInfo, msg: TMsgKind, arg: string = "")
 proc InternalError*(info: TLineInfo, errMsg: string)
@@ -475,7 +475,7 @@ proc rawMessage(msg: TMsgKind, args: openarray[string]) =
   MessageOut(`%`(frmt, `%`(msgKindToString(msg), args)))
   handleError(msg)
 
-proc rawMessage(msg: TMsgKind, arg: string = "") = 
+proc rawMessage(msg: TMsgKind, arg: string) = 
   rawMessage(msg, [arg])
 
 proc liMessage(info: TLineInfo, msg: TMsgKind, arg: string = "") = 
diff --git a/rod/nimrod.ini b/rod/nimrod.ini
index 7c0e8c565..1574721f1 100755
--- a/rod/nimrod.ini
+++ b/rod/nimrod.ini
@@ -72,13 +72,18 @@ Files: "lib/wrappers/x11/*.nim"
 Files: "lib/wrappers/zip/*.nim"
 Files: "lib/wrappers/zip/libzip_all.c"
 
-Files: "lib/newwrap/*.nim"
-
-Files: "lib/newwrap/cairo/*.nim"
-Files: "lib/newwrap/gtk/*.nim"
-Files: "lib/newwrap/lua/*.nim"
-Files: "lib/newwrap/sdl/*.nim"
-Files: "lib/newwrap/x11/*.nim"
+Files: "lib/oldwrappers/*.nim"
+
+Files: "lib/oldwrappers/cairo/*.nim"
+Files: "lib/oldwrappers/gtk/*.nim"
+Files: "lib/oldwrappers/lua/*.nim"
+Files: "lib/oldwrappers/opengl/*.nim"
+Files: "lib/oldwrappers/pcre/*.nim"
+Files: "lib/oldwrappers/pcre/pcre_all.c"
+Files: "lib/oldwrappers/sdl/*.nim"
+Files: "lib/oldwrappers/x11/*.nim"
+Files: "lib/oldwrappers/zip/*.nim"
+Files: "lib/oldwrappers/zip/libzip_all.c"
 
 Files: "lib/windows/*.nim"
 Files: "lib/posix/*.nim"
@@ -90,7 +95,9 @@ Files: "tests/*.html"
 Files: "tests/*.txt"
 Files: "tests/*.cfg"
 Files: "tests/*.tmpl"
-Files: "tests/gtk/*.nim"
+Files: "tests/accept/run/*.nim"
+Files: "tests/accept/compile/*.nim"
+Files: "tests/reject/*.nim"
 
 Files: "examples/*.nim"
 Files: "examples/*.html"
diff --git a/rod/nimrod.nim b/rod/nimrod.nim
index 8f83aa5cd..a6f3365c2 100755
--- a/rod/nimrod.nim
+++ b/rod/nimrod.nim
@@ -42,7 +42,7 @@ proc ProcessCmdLine(pass: TCmdLinePass, command, filename: var string) =
   if pass == passCmd2: 
     arguments = cmdLineRest(p)
     if not (optRun in gGlobalOptions) and (arguments != ""): 
-      rawMessage(errArgsNeedRunOption)
+      rawMessage(errArgsNeedRunOption, [])
   
 proc HandleCmdLine() = 
   var start = getTime()
diff --git a/rod/nversion.nim b/rod/nversion.nim
index 2aa7babf7..8d7c5b263 100755
--- a/rod/nversion.nim
+++ b/rod/nversion.nim
@@ -15,6 +15,6 @@ const
   defaultAsmMarkerSymbol* = '!'
   VersionMajor* = 0
   VersionMinor* = 8
-  VersionPatch* = 7
+  VersionPatch* = 8
   VersionAsString* = $VersionMajor & "." & $VersionMinor & "." & $VersionPatch
 
diff --git a/rod/passes.nim b/rod/passes.nim
index 7ae642ed4..e35f4d045 100755
--- a/rod/passes.nim
+++ b/rod/passes.nim
@@ -1,7 +1,7 @@
 #
 #
 #           The Nimrod Compiler
-#        (c) Copyright 2009 Andreas Rumpf
+#        (c) Copyright 2010 Andreas Rumpf
 #
 #    See the file "copying.txt", included in this
 #    distribution, for details about the copyright.
@@ -18,36 +18,16 @@ import
 type 
   TPassContext* = object of TObject # the pass's context
   PPassContext* = ref TPassContext
-  TPass* = tuple[open: proc (module: PSym, filename: string): PPassContext, 
-      openCached: proc (module: PSym, filename: string, rd: PRodReader): PPassContext, 
-                 close: proc (p: PPassContext, n: PNode): PNode, 
-                 process: proc (p: PPassContext, topLevelStmt: PNode): PNode] # a 
-                                                                              # pass is a 
-                                                                              # tuple of 
-                                                                              # procedure 
-                                                                              # vars
-                                                                              # 
-                                                                              # ``TPass.close`` 
-                                                                              # may 
-                                                                              # produce 
-                                                                              # additional 
-                                                                              # nodes. 
-                                                                              # These 
-                                                                              # are 
-                                                                              # passed to 
-                                                                              # the 
-                                                                              # other
-                                                                              # 
-                                                                              # close 
-                                                                              # procedures. 
-                                                                              # This 
-                                                                              # mechanism is 
-                                                                              # needed 
-                                                                              # for 
-                                                                              # the 
-                                                                              # instantiation of
-                                                                              # 
-                                                                              # generics.
+  TPass* = tuple[
+    open: proc (module: PSym, filename: string): PPassContext, 
+    openCached: proc (module: PSym, filename: string,
+                     rd: PRodReader): PPassContext, 
+    close: proc (p: PPassContext, n: PNode): PNode, 
+    process: proc (p: PPassContext, topLevelStmt: PNode): PNode] 
+    
+# a  pass is a tuple of procedure vars ``TPass.close`` may produce additional 
+# nodes. These are passed to the other close procedures. 
+# This mechanism is needed for the instantiation of generics.
 
 proc registerPass*(p: TPass)
 proc initPass*(p: var TPass)
@@ -62,7 +42,8 @@ proc astNeeded*(s: PSym): bool
   # needs to be stored. The passes manager frees s.sons[codePos] when
   # appropriate to free the procedure body's memory. This is important
   # to keep memory usage down.
-  # the semantic checker needs these:
+
+# the semantic checker needs these:
 var 
   gImportModule*: proc (filename: string): PSym
   gIncludeFile*: proc (filename: string): PNode
@@ -105,29 +86,25 @@ proc openPassesCached(a: var TPassContextArray, module: PSym, filename: string,
       a[i] = nil
   
 proc closePasses(a: var TPassContextArray) = 
-  var m: PNode
-  m = nil
+  var m: PNode = nil
   for i in countup(0, gPassesLen - 1): 
     if not isNil(gPasses[i].close): m = gPasses[i].close(a[i], m)
     a[i] = nil                # free the memory here
   
 proc processTopLevelStmt(n: PNode, a: var TPassContextArray) = 
-  var m: PNode
   # this implements the code transformation pipeline
-  m = n
+  var m = n
   for i in countup(0, gPassesLen - 1): 
     if not isNil(gPasses[i].process): m = gPasses[i].process(a[i], m)
   
 proc processTopLevelStmtCached(n: PNode, a: var TPassContextArray) = 
-  var m: PNode
   # this implements the code transformation pipeline
-  m = n
+  var m = n
   for i in countup(0, gPassesLen - 1): 
     if not isNil(gPasses[i].openCached): m = gPasses[i].process(a[i], m)
   
 proc closePassesCached(a: var TPassContextArray) = 
-  var m: PNode
-  m = nil
+  var m: PNode = nil
   for i in countup(0, gPassesLen - 1): 
     if not isNil(gPasses[i].openCached) and not isNil(gPasses[i].close): 
       m = gPasses[i].close(a[i], m)
@@ -157,7 +134,8 @@ proc processModule(module: PSym, filename: string, stream: PLLStream,
         processTopLevelStmt(n, a)
       closeParsers(p)
       if s.kind != llsStdIn: break 
-    closePasses(a)            # id synchronization point for more consistent code generation:
+    closePasses(a)
+    # id synchronization point for more consistent code generation:
     IDsynchronizationPoint(1000)
   else: 
     openPassesCached(a, module, filename, rd)
diff --git a/rod/semexprs.nim b/rod/semexprs.nim
index 0a3c6e2ee..61823df32 100755
--- a/rod/semexprs.nim
+++ b/rod/semexprs.nim
@@ -388,7 +388,12 @@ proc analyseIfAddressTakenInCall(c: PContext, n: PNode) =
   checkMinSonsLen(n, 1)
   var t = n.sons[0].typ
   if (n.sons[0].kind == nkSym) and (n.sons[0].sym.magic in FakeVarParams): 
-    return 
+    # BUGFIX: check for L-Value still needs to be done for the arguments!
+    for i in countup(1, sonsLen(n) - 1): 
+      if i < sonsLen(t) and skipTypes(t.sons[i], abstractInst).kind == tyVar: 
+        if isAssignable(n.sons[i]) != arLValue: 
+          liMessage(n.sons[i].info, errVarForOutParamNeeded)
+    return
   for i in countup(1, sonsLen(n) - 1): 
     if (i < sonsLen(t)) and
         (skipTypes(t.sons[i], abstractInst).kind == tyVar): 
@@ -781,7 +786,7 @@ proc semArrayAccess(c: PContext, n: PNode, flags: TExprFlags): PNode =
 
 proc semIfExpr(c: PContext, n: PNode): PNode = 
   result = n
-  checkSonsLen(n, 2)
+  checkMinSonsLen(n, 2)
   var typ: PType = nil
   for i in countup(0, sonsLen(n) - 1): 
     var it = n.sons[i]
diff --git a/rod/sigmatch.nim b/rod/sigmatch.nim
index 2db387b95..b6f82f5c6 100755
--- a/rod/sigmatch.nim
+++ b/rod/sigmatch.nim
@@ -117,29 +117,26 @@ proc concreteType(mapping: TIdTable, t: PType): PType =
     result = t                # Note: empty is valid here
   
 proc handleRange(f, a: PType, min, max: TTypeKind): TTypeRelation = 
-  var k: TTypeKind
   if a.kind == f.kind: 
     result = isEqual
   else: 
-    k = skipTypes(a, {tyRange}).kind
+    var k = skipTypes(a, {tyRange}).kind
     if k == f.kind: result = isSubtype
     elif (f.kind == tyInt) and (k in {tyInt..tyInt32}): result = isIntConv
     elif (k >= min) and (k <= max): result = isConvertible
     else: result = isNone
   
 proc handleFloatRange(f, a: PType): TTypeRelation = 
-  var k: TTypeKind
   if a.kind == f.kind: 
     result = isEqual
   else: 
-    k = skipTypes(a, {tyRange}).kind
+    var k = skipTypes(a, {tyRange}).kind
     if k == f.kind: result = isSubtype
     elif (k >= tyFloat) and (k <= tyFloat128): result = isConvertible
     else: result = isNone
   
 proc isObjectSubtype(a, f: PType): bool = 
-  var t: PType
-  t = a
+  var t = a
   while (t != nil) and (t.id != f.id): t = base(t)
   result = t != nil
 
@@ -148,14 +145,11 @@ proc minRel(a, b: TTypeRelation): TTypeRelation =
   else: result = b
   
 proc tupleRel(mapping: var TIdTable, f, a: PType): TTypeRelation = 
-  var 
-    x, y: PSym
-    m: TTypeRelation
   result = isNone
   if sonsLen(a) == sonsLen(f): 
     result = isEqual
     for i in countup(0, sonsLen(f) - 1): 
-      m = typeRel(mapping, f.sons[i], a.sons[i])
+      var m = typeRel(mapping, f.sons[i], a.sons[i])
       if m < isSubtype: 
         return isNone
       result = minRel(result, m)
@@ -164,8 +158,8 @@ proc tupleRel(mapping: var TIdTable, f, a: PType): TTypeRelation =
         # check field names:
         if f.n.sons[i].kind != nkSym: InternalError(f.n.info, "tupleRel")
         if a.n.sons[i].kind != nkSym: InternalError(a.n.info, "tupleRel")
-        x = f.n.sons[i].sym
-        y = a.n.sons[i].sym
+        var x = f.n.sons[i].sym
+        var y = a.n.sons[i].sym
         if x.name.id != y.name.id: 
           return isNone
 
@@ -438,8 +432,7 @@ proc typeRel(mapping: var TIdTable, f, a: PType): TTypeRelation =
       case a.kind
       of tyExpr, tyStmt, tyTypeDesc: result = isGeneric
       of tyNil: result = isSubtype
-      else: 
-        nil
+      else: nil
   else: internalError("typeRel(" & $f.kind & ')')
   
 proc cmpTypes(f, a: PType): TTypeRelation = 
@@ -522,10 +515,6 @@ proc ParamTypesMatchAux(c: PContext, m: var TCandidate, f, a: PType,
   
 proc ParamTypesMatch(c: PContext, m: var TCandidate, f, a: PType, 
                      arg: PNode): PNode = 
-  var 
-    cmp, best: int
-    x, y, z: TCandidate
-    r: TTypeRelation
   if (arg == nil) or (arg.kind != nkSymChoice): 
     result = ParamTypesMatchAux(c, m, f, a, arg)
   else: 
@@ -533,18 +522,19 @@ proc ParamTypesMatch(c: PContext, m: var TCandidate, f, a: PType,
     # incorrect to simply use the first fitting match. However, to implement
     # this correctly is inefficient. We have to copy `m` here to be able to
     # roll back the side effects of the unification algorithm.
+    var x, y, z: TCandidate
     initCandidate(x, m.callee)
     initCandidate(y, m.callee)
     initCandidate(z, m.callee)
     x.calleeSym = m.calleeSym
     y.calleeSym = m.calleeSym
     z.calleeSym = m.calleeSym
-    best = - 1
+    var best = - 1
     for i in countup(0, sonsLen(arg) - 1): 
       # iterators are not first class yet, so ignore them
       if arg.sons[i].sym.kind in {skProc, skMethod, skConverter}: 
         copyCandidate(z, m)
-        r = typeRel(z.bindings, f, arg.sons[i].typ)
+        var r = typeRel(z.bindings, f, arg.sons[i].typ)
         if r != isNone: 
           case x.state
           of csEmpty, csNoMatch: 
@@ -552,7 +542,7 @@ proc ParamTypesMatch(c: PContext, m: var TCandidate, f, a: PType,
             best = i
             x.state = csMatch
           of csMatch: 
-            cmp = cmpCandidates(x, z)
+            var cmp = cmpCandidates(x, z)
             if cmp < 0: 
               best = i
               x = z
@@ -658,7 +648,7 @@ proc matches(c: PContext, n: PNode, m: var TCandidate) =
           return 
         m.baseTypeMatch = false
         var arg = ParamTypesMatch(c, m, formal.typ, n.sons[a].typ, n.sons[a])
-        if (arg == nil): 
+        if arg == nil: 
           m.state = csNoMatch
           return 
         if m.baseTypeMatch: 
@@ -677,9 +667,14 @@ proc matches(c: PContext, n: PNode, m: var TCandidate) =
     formal = m.callee.n.sons[f].sym
     if not IntSetContainsOrIncl(marker, formal.position): 
       if formal.ast == nil: 
-        # no default value
-        m.state = csNoMatch
-        break 
+        if formal.typ.kind == tyOpenArray:
+          container = newNodeI(nkBracket, n.info)
+          addSon(m.call, implicitConv(nkHiddenStdConv, formal.typ, 
+                                      container, m, c))
+        else:
+          # no default value
+          m.state = csNoMatch
+          break
       else: 
         # use default value:
         setSon(m.call, formal.position + 1, copyTree(formal.ast))
diff --git a/rod/syntaxes.nim b/rod/syntaxes.nim
index b8e4c1837..d757ad9f6 100755
--- a/rod/syntaxes.nim
+++ b/rod/syntaxes.nim
@@ -1,7 +1,7 @@
 #
 #
 #           The Nimrod Compiler
-#        (c) Copyright 2009 Andreas Rumpf
+#        (c) Copyright 2010 Andreas Rumpf
 #
 #    See the file "copying.txt", included in this
 #    distribution, for details about the copyright.
@@ -142,9 +142,9 @@ proc applyFilter(p: var TParsers, n: PNode, filename: string, stdin: PLLStream):
     result = filterReplace(stdin, filename, n)
   if f != filtNone: 
     if gVerbosity >= 2: 
-      rawMessage(hintCodeBegin)
+      rawMessage(hintCodeBegin, [])
       messageOut(result.s)
-      rawMessage(hintCodeEnd)
+      rawMessage(hintCodeEnd, [])
 
 proc evalPipe(p: var TParsers, n: PNode, filename: string, start: PLLStream): PLLStream = 
   result = start
diff --git a/tests/accept/compile/tconvcolors.nim b/tests/accept/compile/tconvcolors.nim
new file mode 100755
index 000000000..07e829550
--- /dev/null
+++ b/tests/accept/compile/tconvcolors.nim
@@ -0,0 +1,5 @@
+
+import colors
+
+echo int32(colWhite), 'A'
+
diff --git a/tests/accept/compile/tdialogs.nim b/tests/accept/compile/tdialogs.nim
index 90f241cdf..d161a976d 100755
--- a/tests/accept/compile/tdialogs.nim
+++ b/tests/accept/compile/tdialogs.nim
@@ -2,7 +2,7 @@
 
 import dialogs, gtk2
 
-gtk_nimrod_init()
+gtk2.nimrod_init()
 
 var x = ChooseFilesToOpen(nil)
 for a in items(x):
diff --git a/tests/accept/compile/tgtk.nim b/tests/accept/compile/tgtk.nim
index cd9254e4f..7febb0ab8 100755
--- a/tests/accept/compile/tgtk.nim
+++ b/tests/accept/compile/tgtk.nim
@@ -3,10 +3,10 @@ import
   gtk2, glib2, atk, gdk2, gdk2pixbuf, libglade2, pango,

   pangoutils

 

-proc hello(widget: PGtkWidget, data: pointer) {.cdecl.} =

+proc hello(widget: PWidget, data: pointer) {.cdecl.} =

   write(stdout, "Hello World\n")

 

-proc delete_event(widget: PGtkWidget, event: PGdkEvent,

+proc delete_event(widget: PWidget, event: PEvent,

                   data: pointer): bool {.cdecl.} =

   # If you return FALSE in the "delete_event" signal handler,

   # GTK will emit the "destroy" signal. Returning TRUE means

@@ -19,43 +19,33 @@ proc delete_event(widget: PGtkWidget, event: PGdkEvent,
   return false

 

 # Another callback

-proc destroy(widget: PGtkWidget, data: pointer) {.cdecl.} =

-  gtk_main_quit()

+proc mydestroy(widget: PWidget, data: pointer) {.cdecl.} =

+  gtk2.main_quit()

 

-proc main() =

+proc mymain() =

   # GtkWidget is the storage type for widgets

-  var

-    window: PGtkWindow 

-    button: PGtkButton

-

-  gtk_nimrod_init()

-  window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL))

+  gtk2.nimrod_init()

+  var window = window_new(gtk2.WINDOW_TOPLEVEL)

   discard g_signal_connect(window, "delete_event", 

                            Gcallback(delete_event), nil)

-  discard g_signal_connect(window, "destroy", Gcallback(destroy), nil)

+  discard g_signal_connect(window, "destroy", Gcallback(mydestroy), nil)

   # Sets the border width of the window.

-  gtk_container_set_border_width(window, 10)

+  set_border_width(window, 10)

 

   # Creates a new button with the label "Hello World".

-  button = GTK_BUTTON(gtk_button_new_with_label("Hello World"))

+  var button = button_new("Hello World")

 

   discard g_signal_connect(button, "clicked", Gcallback(hello), nil)

 

-  # This will cause the window to be destroyed by calling

-  # gtk_widget_destroy(window) when "clicked".  Again, the destroy

-  # signal could come from here, or the window manager.

-  discard g_signal_connect_swapped(button, "clicked", 

-    Gcallback(gtk_widget_destroy), window)

-

   # This packs the button into the window (a gtk container).

-  gtk_container_add(window, button)

+  add(window, button)

 

   # The final step is to display this newly created widget.

-  gtk_widget_show(button)

+  show(button)

 

   # and the window

-  gtk_widget_show(window)

+  show(window)

 

-  gtk_main()

+  gtk2.main()

 

-main()

+mymain()

diff --git a/tests/accept/compile/tlexer.nim b/tests/accept/compile/tlexer.nim
index fe784280c..f0fac8ec4 100755
--- a/tests/accept/compile/tlexer.nim
+++ b/tests/accept/compile/tlexer.nim
@@ -18,7 +18,7 @@ proc splitText(txt: string): seq[string] # splits a text into several lines
                                          # the comment continues here

                                          # this is not easy to parse!

 

-proc anotherSplit(txt: string): list[string] =

+proc anotherSplit(txt: string): seq[string] =

   # the comment should belong to `anotherSplit`!

   # another problem: comments are statements!

 

diff --git a/tests/accept/compile/tlibs.nim b/tests/accept/compile/tlibs.nim
index e3b6bd4c3..990d6e58d 100755
--- a/tests/accept/compile/tlibs.nim
+++ b/tests/accept/compile/tlibs.nim
@@ -12,7 +12,10 @@ import
   cairowin32, cairoxlib,
   odbcsql,
   gl, glut, glu, glx, glext, wingl,
-  lua, lualib, lauxlib, mysql, sqlite3, python, tcl
+  lua, lualib, lauxlib, mysql, sqlite3, python, tcl,
+  db_postgres, db_mysql, db_sqlite, ropes, sockets, browsers, httpserver,
+  httpclient, parseutils, unidecode, xmldom, xmldomparser, xmltree, xmlparser,
+  htmlparser, re, graphics, colors
   
 when defined(linux):
   import
diff --git a/tests/accept/compile/tnoargopenarray.nim b/tests/accept/compile/tnoargopenarray.nim
new file mode 100644
index 000000000..872ec86d2
--- /dev/null
+++ b/tests/accept/compile/tnoargopenarray.nim
@@ -0,0 +1,7 @@
+
+import db_sqlite
+
+var db: TDbConn
+Exec(db, sql"create table blabla()")
+
+
diff --git a/tests/accept/run/spec.csv b/tests/accept/run/spec.csv
index 0dc9a4baa..d537c139f 100755
--- a/tests/accept/run/spec.csv
+++ b/tests/accept/run/spec.csv
@@ -11,6 +11,7 @@ tbintree.nim;halloworld99110223
 tbug499771.nim;TSubRange: 5 from 1 to 10
 tbug511622.nim;3
 tcasestm.nim;ayyy
+tcgbug.nim;
 tclosure.nim;2 4 6 8 10
 tcnstseq.nim;AngelikaAnneAnnaAnkaAnja
 tconstr2.nim;69
diff --git a/tests/accept/run/tcgbug.nim b/tests/accept/run/tcgbug.nim
new file mode 100644
index 000000000..320821fb6
--- /dev/null
+++ b/tests/accept/run/tcgbug.nim
@@ -0,0 +1,17 @@
+
+type
+  TObj = object
+    x, y: int
+  PObj = ref TObj
+
+proc p(a: PObj) =
+  a.x = 0
+
+proc q(a: var PObj) =
+  a.p()
+
+var 
+  a: PObj
+new(a)
+q(a)
+
diff --git a/tests/accept/run/txmlgen.nim b/tests/accept/run/txmlgen.nim
new file mode 100755
index 000000000..56ca42d53
--- /dev/null
+++ b/tests/accept/run/txmlgen.nim
@@ -0,0 +1,6 @@
+import xmlgen
+
+var nim = "Nimrod"
+echo h1(a(href="http://force7.de/nimrod", nim))
+
+
diff --git a/tests/accept/run/txmltree.nim b/tests/accept/run/txmltree.nim
index efd7b07af..2e5f52576 100755
--- a/tests/accept/run/txmltree.nim
+++ b/tests/accept/run/txmltree.nim
@@ -1,7 +1,7 @@
 
-import xmltree
+import xmltree, strtabs
 
-var x = <>a(href="nimrod.de", "www.nimrod-test.de")
+var x = <>a(href="nimrod.de", newText("www.nimrod-test.de"))
 
-echo x == "<a href=\"nimrod.de\">www.nimrod-test.de"
+echo($x == "<a href=\"nimrod.de\">www.nimrod-test.de</a>")
 
diff --git a/tests/reject/spec.csv b/tests/reject/spec.csv
index b01844a59..c5e62354e 100755
--- a/tests/reject/spec.csv
+++ b/tests/reject/spec.csv
@@ -5,11 +5,11 @@ tambsym2.nim;4;undeclared identifier: 'CreateRGBSurface'
 tambsym3.nim;6;ambiguous identifier
 tatomic.nim;2;identifier expected, but found 'atomic'
 tbind2.nim;7;ambiguous call
-tbind4.nim;4;instantiation from here
+tbind4.nim;4;undeclared identifier: 'lastId'
 tblock1.nim;9;undeclared identifier: 'ha'
 tconstr1.nim;20;type mismatch
 tillrec.nim;8;illegal recursion in type 'TIllegal'
-tinc.nim;3;to var type a variable needs to be passed
+tinc.nim;3;for a 'var' type a variable needs to be passed
 tinout.nim;7;for a 'var' type a variable needs to be passed
 tinvalidnewseq.nim;10;type mismatch: got (array[0..6, string], int)
 tinvwhen.nim;6;invalid indentation
diff --git a/tests/reject/tambsym2.nim b/tests/reject/tambsym2.nim
new file mode 100755
index 000000000..d89cfb2de
--- /dev/null
+++ b/tests/reject/tambsym2.nim
@@ -0,0 +1,6 @@
+
+from sdl import PSurface
+
+discard SDL.CreateRGBSurface(SDL.SWSURFACE, 23, 34, 
+      32, 0x00FF0000, 0x0000FF00, 0x000000FF, 0xff000000)
+
diff --git a/tests/reject/tinc.nim b/tests/reject/tinc.nim
index 3a27b5026..26fe32a41 100755
--- a/tests/reject/tinc.nim
+++ b/tests/reject/tinc.nim
@@ -1,5 +1,5 @@
 var x = 0
 
-inc(x+1) #ERROR_MSG to var type a variable needs to be passed
+inc(x+1)
 
 
diff --git a/tests/tester.nim b/tests/tester.nim
index eb7a7670d..be8f3b0ac 100755
--- a/tests/tester.nim
+++ b/tests/tester.nim
@@ -23,7 +23,6 @@ type
     msg: string,
     err: bool]
   TOutp = tuple[file, outp: string]
-  TResult = tuple[test, expected, given: string, success: bool]
   TResults = object
     total, passed: int
     data: string
@@ -100,7 +99,7 @@ proc colorBool(b: bool): string =
 const
   TableHeader4 = "<table border=\"1\"><tr><td>Test</td><td>Expected</td>" &
                  "<td>Given</td><td>Success</td></tr>\n"
-  TableHeader3 = "<table border=\"1\"><tr><td>Test</td><td>Expected</td>" &
+  TableHeader3 = "<table border=\"1\"><tr><td>Test</td>" &
                  "<td>Given</td><td>Success</td></tr>\n"
   TableFooter = "</table>\n"
 
@@ -149,8 +148,6 @@ proc reject(r: var TResults, dir, options: string) =
     var expected = findSpec(specs, t)
     var given = callCompiler(test, options)
     cmpMsgs(r, specs[expected], given, t)
-    
-    if r.total > 3: break
   
 proc compile(r: var TResults, pattern, options: string) = 
   for test in os.walkFiles(pattern): 
@@ -159,7 +156,6 @@ proc compile(r: var TResults, pattern, options: string) =
     var given = callCompiler(test, options)
     r.addResult(t, given.msg, not given.err)
     if not given.err: inc(r.passed)
-    if r.total > 3: break
   
 proc run(r: var TResults, dir, options: string) = 
   var specs = parseRunData(dir)
@@ -179,7 +175,6 @@ proc run(r: var TResults, dir, options: string) =
         r.addResult(t, expected.outp, buf, success)
       else:
         r.addResult(t, expected.outp, "executable not found", false)
-    if r.total > 3: break
 
 var options = ""
 var rejectRes = initResults()
diff --git a/tools/sunset.tmpl b/tools/sunset.tmpl
index 18f8b74d5..faa40a295 100755
--- a/tools/sunset.tmpl
+++ b/tools/sunset.tmpl
@@ -65,7 +65,7 @@
       </div>
     </div>
     <div id="footer">
-      copyright &copy; 2009 $c.authors | Last update: ${getDateStr()}
+      copyright &copy; 2010 $c.authors | Last update: ${getDateStr()}
       | <a class="reference" href="http://validator.w3.org/check?uri=referer">XHTML 1.1</a>
       | <a class="reference" href="http://jigsaw.w3.org/css-validator/check/referer">CSS</a>
       | <a class="reference" href="http://www.dcarter.co.uk">design by dcarter</a>
diff --git a/web/download.txt b/web/download.txt
index 21ca1f57d..fd68ead76 100755
--- a/web/download.txt
+++ b/web/download.txt
@@ -3,8 +3,8 @@
 
 Here you can download the latest version of the Nimrod Compiler.
 Please choose your platform:
-* source-based installation: `<download/nimrod_0.8.6.zip>`_
-* installer for Windows XP/Vista (i386): `<download/nimrod_0.8.6.exe>`_
+* source-based installation: `<download/nimrod_0.8.8.zip>`_
+* installer for Windows XP/Vista (i386): `<download/nimrod_0.8.8.exe>`_
   (includes GCC and everything else you need)
 
 The source-based installation has been tested on these systems:
diff --git a/web/news.txt b/web/news.txt
index 232327c7a..e75aa9bae 100755
--- a/web/news.txt
+++ b/web/news.txt
@@ -2,7 +2,7 @@
 News
 ====
 
-2010-XX-XX Version 0.8.8 released
+2010-03-14 Version 0.8.8 released
 =================================
 
 Version 0.8.8 has been released! Get it `here <download.html>`_. 
@@ -22,9 +22,10 @@ Bugfixes
 - An overloadable symbol can now have the same name as an imported module.
 - Fixed a serious bug in ``strutils.cmpIgnoreCase``. 
 - Fixed ``unicode.toUTF8``. 
-- The compiler now rejects ``'\n'``. 
+- The compiler now rejects ``'\n'`` (use ``"\n"`` instead). 
 - ``times.getStartMilsecs()`` now works on Mac OS X.
 - Fixed a bug in ``pegs.match`` concerning start offsets.
+- Lots of other little bugfixes.
 
 
 Additions
@@ -57,9 +58,8 @@ Additions
   You can change your configuration file to use these.
 - Triple quoted strings allow for ``"`` in more contexts.
 - ``""`` within raw string literals stands for a single quotation mark.
-- More extensive subscript operator overloading. See 
-  `subscript overloading <manual.html#subscript-overloading>`_ for further
-  information.
+- Arguments to ``openArray`` parameters can be left out.
+- More extensive subscript operator overloading. (To be documented.)
 - The documentation generator supports the ``.. raw:: html`` directive.
 - The Pegs module supports back references via the notation ``$capture_index``. 
 
@@ -82,6 +82,7 @@ Changes affecting backwards compatibility
 - The ``\w`` character class for pegs now includes the digits ``'0'..'9'``.
 - Many wrappers now do not contain redundant name prefixes (like ``GTK_``,
   ``lua``) anymore.
+- Arguments to ``openArray`` parameters can be left out.
 
 
 2009-12-21 Version 0.8.6 released
diff --git a/web/nimrod.ini b/web/nimrod.ini
index e6e9dfbe6..80080107e 100755
--- a/web/nimrod.ini
+++ b/web/nimrod.ini
@@ -23,13 +23,15 @@ file: ticker
 [Documentation]
 doc: "endb;intern;apis;lib;manual;tut1;tut2;nimrodc;overview"
 pdf: "manual;lib;tut1;tut2;nimrodc"
-srcdoc: "system.nim;pure/os;pure/strutils;pure/regexprs;pure/math"
+srcdoc: "impure/graphics;pure/sockets"
+srcdoc: "system.nim;pure/os;pure/strutils;pure/re;pure/math"
 srcdoc: "pure/complex;pure/times;pure/osproc;pure/pegs;pure/dynlib"
 srcdoc: "pure/parseopt;pure/hashes;pure/strtabs;pure/lexbase"
 srcdoc: "pure/parsecfg;pure/parsexml;pure/parsecsv;pure/parsesql"
 srcdoc: "pure/streams;pure/terminal;pure/cgi;impure/web;pure/unicode"
 srcdoc: "impure/zipfiles;pure/xmlgen;pure/macros;pure/parseutils;pure/browsers"
-srcdoc: "impure/db_postgres;impure/db_mysql;pure/httpserver;pure/httpclient"
+srcdoc: "impure/db_postgres;impure/db_mysql;impure/db_sqlite"
+srcdoc: "pure/httpserver;pure/httpclient"
 srcdoc: "pure/ropes;pure/unidecode/unidecode;pure/xmldom;pure/xmldomparser"
 srcdoc: "pure/xmlparser;pure/htmlparser;pure/xmltree;pure/colors;impure/graphics"
 
diff --git a/web/question.txt b/web/question.txt
index 2012d182f..6cd44391d 100755
--- a/web/question.txt
+++ b/web/question.txt
@@ -28,7 +28,7 @@ flexibility for speed. You get both.
 Why is it named Nimrod?
 -----------------------
 You have to find out for yourself. If you don't find a tongue-in-cheek 
-interpretation you have to look harder.
+interpretation you will have to look harder.
 
 
 How is Nimrod licensed?
@@ -44,15 +44,17 @@ How stable is Nimrod?
 
 The compiler is in development and some important features are still missing. 
 However, the compiler is quite stable already: It is able to compile itself 
-and a substantial body of other code. Until version 1.0.0 is released, slight 
-incompabilities with older versions of the compiler may be introduced.
+and a substantial body of other code. Until version 1.0.0 is released, 
+incompabilities with older versions of the compiler will be introduced. The 
+semantic details of overloading, macros/templates/generics and iterators 
+and their interactions are subject to change.
 
 
 How fast is Nimrod?
 -------------------
 Benchmarks have not been ported yet and support for threads is missing. But in
-the worst case, you can get exactly the same performance as C if you decide to
-write as low-level Nimrod code as C requires you to do. That said the only
+the worst case, you can get exactly the same performance as in C if you decide 
+to write as low-level Nimrod code as C requires you to do. That said the only
 overhead Nimrod has over C is the GC which has been tuned for years (and is 
 significantly faster than the Boehm GC).
 
diff --git a/web/ticker.txt b/web/ticker.txt
index 1ac6c9ecf..0d5ea4d7d 100755
--- a/web/ticker.txt
+++ b/web/ticker.txt
@@ -1,6 +1,9 @@
+| `2010-03-14`:newsdate:
+| Nimrod version 0.8.8 has been released! 
+  Get it `here <./download.html>`_.
+
 | `2009-12-21`:newsdate:
 | Nimrod version 0.8.6 has been released! 
-  Get it `here <./download.html>`_.
 
 | `2009-10-21`:newsdate:
 | Nimrod version 0.8.2 has been released!