diff options
author | Andreas Rumpf <andreas@andreas-laptop> | 2010-03-14 01:25:25 +0100 |
---|---|---|
committer | Andreas Rumpf <andreas@andreas-laptop> | 2010-03-14 01:25:25 +0100 |
commit | 7bf98411b6d4dfd203371b5d2ec0a5ef3a2305df (patch) | |
tree | 23f76f650800ca9508e17869cc83fc8061d1f310 | |
parent | 3dafd6856bfd644e9cf518b36e5bfedc3220a702 (diff) | |
download | Nim-7bf98411b6d4dfd203371b5d2ec0a5ef3a2305df.tar.gz |
version 0.8.8
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 © 2009 $c.authors | Last update: ${getDateStr()} + copyright © 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! |