summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2009-04-22 15:55:27 +0200
committerAndreas Rumpf <rumpf_a@web.de>2009-04-22 15:55:27 +0200
commite792940f5273bf8f8761c4cb29b241445e8b1d0b (patch)
tree8a6b224b8c0b3db14dbc20d89b7ca9ccb19b1f56
parent439aa2d04d5528b5aed288f70895515d1da2dc3d (diff)
downloadNim-e792940f5273bf8f8761c4cb29b241445e8b1d0b.tar.gz
version 0.7.6
-rw-r--r--cogapp.py242
-rw-r--r--config/nimdoc.cfg2
-rw-r--r--config/nimrod.cfg15
-rw-r--r--data/advopt.txt1
-rw-r--r--data/ast.yml1
-rw-r--r--data/basicopt.txt4
-rw-r--r--data/messages.yml5
-rw-r--r--doc/docs.txt21
-rw-r--r--doc/filelist.txt3
-rw-r--r--doc/grammar.txt2
-rw-r--r--doc/lib.txt50
-rw-r--r--doc/manual.txt18
-rw-r--r--doc/nimrodc.txt3
-rw-r--r--doc/theindex.txt12308
-rw-r--r--doc/tut1.txt110
-rw-r--r--doc/tut2.txt160
-rw-r--r--ide/nimide.nim75
-rw-r--r--koch.py219
-rw-r--r--lib/alloc.nim667
-rw-r--r--lib/amd64.asm.in1
-rw-r--r--lib/assign.nim8
-rw-r--r--lib/base/cgi.html486
-rw-r--r--lib/base/cgi.nim40
-rw-r--r--lib/base/dialogs.nim2
-rw-r--r--lib/base/gtk/gtk2.nim2
-rw-r--r--lib/base/odbcsql.nim15
-rw-r--r--lib/base/opengl/gl.nim32
-rw-r--r--lib/base/pcre.nim12
-rw-r--r--lib/base/regexprs.nim43
-rw-r--r--lib/copying.txt2
-rw-r--r--lib/debugger.nim8
-rw-r--r--lib/dyncalls.nim15
-rw-r--r--lib/excpt.nim2
-rw-r--r--lib/gc.nim286
-rw-r--r--lib/macros.nim90
-rw-r--r--lib/math.nim33
-rw-r--r--lib/memman.nim2
-rw-r--r--lib/nimbase.h25
-rw-r--r--lib/os.nim34
-rw-r--r--lib/parsecfg.nim36
-rw-r--r--lib/parseopt.nim8
-rw-r--r--lib/posix/posix.nim993
-rw-r--r--lib/repr.nim14
-rw-r--r--lib/streams.nim2
-rw-r--r--lib/strtabs.nim53
-rw-r--r--lib/strutils.nim312
-rw-r--r--lib/sysstr.nim24
-rw-r--r--lib/system.nim101
-rw-r--r--lib/tinalloc.nim72
-rw-r--r--lib/unicode.nim2
-rw-r--r--nim/ast.pas27
-rw-r--r--nim/ccgexprs.pas45
-rw-r--r--nim/ccgstmts.pas72
-rw-r--r--nim/ccgtypes.pas83
-rw-r--r--nim/ccgutils.pas28
-rw-r--r--nim/cgen.pas482
-rw-r--r--nim/commands.pas7
-rw-r--r--nim/debugids.pas129
-rw-r--r--nim/docgen.pas4
-rw-r--r--nim/extccomp.pas4
-rw-r--r--nim/idents.pas9
-rw-r--r--nim/llstream.pas2
-rw-r--r--nim/main.pas7
-rw-r--r--nim/msgs.pas66
-rw-r--r--nim/nimconf.pas12
-rw-r--r--nim/nimrod.pas16
-rw-r--r--nim/nos.pas2
-rw-r--r--nim/nsystem.pas1
-rw-r--r--nim/nversion.pas4
-rw-r--r--nim/options.pas28
-rw-r--r--nim/parsecfg.pas2
-rw-r--r--nim/passes.pas2
-rw-r--r--nim/platform.pas2
-rw-r--r--nim/pragmas.pas13
-rw-r--r--nim/rodread.pas8
-rw-r--r--nim/rodwrite.pas3
-rw-r--r--nim/ropes.pas7
-rw-r--r--nim/rst.pas4
-rw-r--r--nim/scanner.pas4
-rw-r--r--nim/sem.pas4
-rw-r--r--nim/semdata.pas3
-rw-r--r--nim/semexprs.pas90
-rw-r--r--nim/semfold.pas2
-rw-r--r--nim/seminst.pas34
-rw-r--r--nim/semstmts.pas49
-rw-r--r--nim/semtempl.pas2
-rw-r--r--nim/semtypes.pas38
-rw-r--r--nim/sigmatch.pas15
-rw-r--r--nim/strtabs.pas4
-rw-r--r--nim/strutils.pas32
-rw-r--r--nim/transf.pas82
-rw-r--r--nim/types.pas106
-rw-r--r--nim/wordrecg.pas10
-rw-r--r--rod/nimrod.cfg1
-rw-r--r--rod/nimrod.ini10
-rw-r--r--tests/tcasestm.nim14
-rw-r--r--tests/tlibs.nim3
-rw-r--r--tests/tprocvar.nim14
-rw-r--r--tests/trectype.nim4
-rw-r--r--tests/tregex.nim9
-rw-r--r--todo.txt218
-rw-r--r--tools/niminstbin311984 -> 311978 bytes
-rw-r--r--tools/niminst.nim2
-rw-r--r--tools/nimweb.nim2
-rw-r--r--tools/sunset.tmpl2
-rw-r--r--whiteutils.py5
106 files changed, 8400 insertions, 10089 deletions
diff --git a/cogapp.py b/cogapp.py
index 54c5e5e3a..ea43433c3 100644
--- a/cogapp.py
+++ b/cogapp.py
@@ -5,13 +5,10 @@
 """
 
 # $Id: cogapp.py 141 2008-05-22 10:56:43Z nedbat $
-# modified to run with Python1.5.2 by Andreas Rumpf
+# modified to run with Python1.5.2 and Python3.0 by Andreas Rumpf
 
-import md5, os, re, string, sys, traceback, types
-import imp
-import copy, getopt, shlex
-from cStringIO import StringIO
-from string import strip, split, join, replace
+import os, re, string, sys, traceback, types, imp, copy, getopt, shlex
+from pycompab import *
 
 __all__ = ['Cog', 'CogUsageError']
 
@@ -37,15 +34,14 @@ OPTIONS:
     -s STRING   Suffix all generated output lines with STRING.
     -U          Write the output with Unix newlines (only LF line-endings).
     -w CMD      Use CMD if the output file needs to be made writable.
-                    A %s in the CMD will be filled with the filename.
+                    A $1 in the CMD will be filled with the filename.
     -x          Excise all the generated output without running the generators.
     -z          The [[[end]]] marker can be omitted, and is assumed at eof.
     -v          Print the version of cog and exit.
     -h          Print this help.
 """
 
-# Get True and False right even if they aren't already defined.
-True, False = 0==0, 0==1
+gErrorMsg = "" # this is needed to support Python 1.5.2 till 3.0
 
 # Other package modules
 from whiteutils import *
@@ -54,10 +50,12 @@ class CogError(Exception):
     """ Any exception raised by Cog.
     """
     def __init__(self, msg, file='', line=0):
+        global gErrorMsg
         if file:
-            Exception.__init__(self, "%s(%d): %s" % (file, line, msg))
+            gErrorMsg = Subs("$1($2): $2", file, line, msg)
         else:
-            Exception.__init__(self, msg)
+            gErrorMsg = msg
+        Exception.__init__(self, gErrorMsg)
 
 class CogUsageError(CogError):
     """ An error in usage of command-line arguments in cog.
@@ -97,15 +95,15 @@ class CogGenerator(Redirectable):
         self.markers = []
         self.lines = []
 
-    def parseMarker(self, l):
-        self.markers.append(l)
+    def parseMarker(self, L):
+        self.markers.append(L)
 
-    def parseLine(self, l):
+    def parseLine(self, L):
         s = 0
-        e = len(l)
-        while s < len(l) and l[s] == '\n': s = s + 1
-        while e >= 1 and l[e-1] == '\n': e = e - 1
-        self.lines.append(l[s:e+1])
+        e = len(L)
+        while s < len(L) and L[s] == '\n': s = s + 1
+        while e >= 1 and L[e-1] == '\n': e = e - 1
+        self.lines.append(L[s:e+1])
 
     def getCode(self):
         """ Extract the executable Python code from the generator.
@@ -116,10 +114,10 @@ class CogGenerator(Redirectable):
         prefIn = commonPrefix(self.markers + self.lines)
         if prefIn:
             tmp = []
-            for l in self.markers: tmp.append(replace(l, prefIn, '', 1))
+            for L in self.markers: tmp.append(replace(L, prefIn, '', 1))
             self.markers = tmp
             tmp = []
-            for l in self.lines: tmp.append(replace(l, prefIn, '', 1))
+            for L in self.lines: tmp.append(replace(L, prefIn, '', 1))
             self.lines = tmp
             #self.markers = [ l.replace(prefIn, '', 1) for l in self.markers ]
             #self.lines = [ l.replace(prefIn, '', 1) for l in self.lines ]
@@ -163,7 +161,7 @@ class CogGenerator(Redirectable):
     def msg(self, s):
         self.stdout.write("Message: "+s+"\n")
 
-    def out(self, sOut='', dedent=False, trimblanklines=False):
+    def out(self, sOut='', dedent=false, trimblanklines=false):
         """ The cog.out function.
         """
         if trimblanklines and ('\n' in sOut):
@@ -177,7 +175,7 @@ class CogGenerator(Redirectable):
             sOut = reindentBlock(sOut)
         self.outstring = self.outstring + sOut
 
-    def outl(self, sOut='', dedent=False, trimblanklines=False):
+    def outl(self, sOut='', dedent=false, trimblanklines=false):
         """ The cog.outl function.
         """
         self.out(sOut, dedent, trimblanklines)
@@ -200,10 +198,10 @@ class NumberedFileReader:
         self.n = 0
 
     def readline(self):
-        l = self.f.readline()
-        if l:
+        L = self.f.readline()
+        if L:
             self.n = self.n + 1
-        return l
+        return L
 
     def linenumber(self):
         return self.n
@@ -217,17 +215,17 @@ class CogOptions:
         self.args = []
         self.includePath = []
         self.defines = {}
-        self.bShowVersion = False
+        self.bShowVersion = false
         self.sMakeWritableCmd = None
-        self.bReplace = False
-        self.bNoGenerate = False
+        self.bReplace = false
+        self.bNoGenerate = false
         self.sOutputName = None
-        self.bWarnEmpty = False
-        self.bHashOutput = False
-        self.bDeleteCode = False
-        self.bEofCanBeEnd = False
+        self.bWarnEmpty = false
+        self.bHashOutput = false
+        self.bDeleteCode = false
+        self.bEofCanBeEnd = false
         self.sSuffix = None
-        self.bNewlines = False
+        self.bNewlines = false
 
     def __cmp__(self, other):
         """ Comparison operator for tests to use.
@@ -249,44 +247,44 @@ class CogOptions:
         # Parse the command line arguments.
         try:
             opts, self.args = getopt.getopt(argv, 'cdD:eI:o:rs:Uvw:xz')
-        except getopt.error, msg:
-            raise CogUsageError(msg)
+        except getopt.error:
+            raise CogUsageError("invalid command line")
 
         # Handle the command line arguments.
         for o, a in opts:
             if o == '-c':
-                self.bHashOutput = True
+                self.bHashOutput = true
             elif o == '-d':
-                self.bDeleteCode = True
+                self.bDeleteCode = true
             elif o == '-D':
                 if a.count('=') < 1:
                     raise CogUsageError("-D takes a name=value argument")
                 name, value = split(a, '=', 1)
                 self.defines[name] = value
             elif o == '-e':
-                self.bWarnEmpty = True
+                self.bWarnEmpty = true
             elif o == '-I':
                 self.addToIncludePath(a)
             elif o == '-o':
                 self.sOutputName = a
             elif o == '-r':
-                self.bReplace = True
+                self.bReplace = true
             elif o == '-s':
                 self.sSuffix = a
             elif o == '-U':
-                self.bNewlines = True
+                self.bNewlines = true
             elif o == '-v':
-                self.bShowVersion = True
+                self.bShowVersion = true
             elif o == '-w':
                 self.sMakeWritableCmd = a
             elif o == '-x':
-                self.bNoGenerate = True
+                self.bNoGenerate = true
             elif o == '-z':
-                self.bEofCanBeEnd = True
+                self.bEofCanBeEnd = true
             else:
                 # Since getopt.getopt is given a list of possible flags,
                 # this is an internal error.
-                raise CogInternalError("Don't understand argument %s" % o)
+                raise CogInternalError(Subs("Don't understand argument $1", o))
 
     def validate(self):
         """ Does nothing if everything is OK, raises CogError's if it's not.
@@ -297,15 +295,6 @@ class CogOptions:
         if self.bReplace and self.sOutputName:
             raise CogUsageError("Can't use -o with -r (they are opposites)")
 
-
-def mydigest(hasher):
-  result = ""
-  for c in hasher.digest():
-    x = hex(ord(c))[2:]
-    if len(x) == 1: x = "0" + x
-    result = result + x
-  return result
-
 class Cog(Redirectable):
     """ The Cog engine.
     """
@@ -315,7 +304,7 @@ class Cog(Redirectable):
         self.sEndSpec = ']]]'
         self.sEndOutput = '[[[end]]]'
         self.reEndOutput = re.compile(r'\[\[\[end]]](?P<hashsect> *\(checksum: (?P<hash>[a-f0-9]+)\))')
-        self.sEndFormat = '[[[end]]] (checksum: %s)'
+        self.sEndFormat = '[[[end]]] (checksum: $1)'
 
         self.options = CogOptions()
         self.sOutputMode = 'w'
@@ -326,14 +315,14 @@ class Cog(Redirectable):
         self.stdout.write("Warning: " + msg + "\n")
 
     def isBeginSpecLine(self, s):
-        return string.find(s, self.sBeginSpec) >= 0
+        return find(s, self.sBeginSpec) >= 0
 
     def isEndSpecLine(self, s):
-        return string.find(s, self.sEndSpec) >= 0 and \
+        return find(s, self.sEndSpec) >= 0 and \
             not self.isEndOutputLine(s)
 
     def isEndOutputLine(self, s):
-        return string.find(s, self.sEndOutput) >= 0
+        return find(s, self.sEndOutput) >= 0
 
     def installCogModule(self):
         """ Magic mumbo-jumbo so that imported Python modules
@@ -362,7 +351,7 @@ class Cog(Redirectable):
 
         fIn = NumberedFileReader(fIn)
 
-        bSawCog = False
+        bSawCog = false
 
         self.cogmodule.inFile = sFileIn
         self.cogmodule.outFile = sFileOut
@@ -375,102 +364,102 @@ class Cog(Redirectable):
         globals.update(self.options.defines)
 
         # loop over generator chunks
-        l = fIn.readline()
-        while l:
+        L = fIn.readline()
+        while L:
             # Find the next spec begin
-            while l and not self.isBeginSpecLine(l):
-                if self.isEndSpecLine(l):
-                    raise CogError("Unexpected '%s'" % self.sEndSpec,
+            while L and not self.isBeginSpecLine(L):
+                if self.isEndSpecLine(L):
+                    raise CogError(Subs("Unexpected '$1'", self.sEndSpec),
                         file=sFileIn, line=fIn.linenumber())
-                if self.isEndOutputLine(l):
-                    raise CogError("Unexpected '%s'" % self.sEndOutput,
+                if self.isEndOutputLine(L):
+                    raise CogError(Subs("Unexpected '$1'", self.sEndOutput),
                         file=sFileIn, line=fIn.linenumber())
-                fOut.write(l)
-                l = fIn.readline()
-            if not l:
+                fOut.write(L)
+                L = fIn.readline()
+            if not L:
                 break
             if not self.options.bDeleteCode:
-                fOut.write(l)
+                fOut.write(L)
 
-            # l is the begin spec
+            # L is the begin spec
             gen = CogGenerator()
             gen.setOutput(stdout=self.stdout)
-            gen.parseMarker(l)
+            gen.parseMarker(L)
             firstLineNum = fIn.linenumber()
             self.cogmodule.firstLineNum = firstLineNum
 
             # If the spec begin is also a spec end, then process the single
             # line of code inside.
-            if self.isEndSpecLine(l):
-                beg = string.find(l, self.sBeginSpec)
-                end = string.find(l, self.sEndSpec)
+            if self.isEndSpecLine(L):
+                beg = find(L, self.sBeginSpec)
+                end = find(L, self.sEndSpec)
                 if beg > end:
                     raise CogError("Cog code markers inverted",
                         file=sFileIn, line=firstLineNum)
                 else:
-                    sCode = strip(l[beg+len(self.sBeginSpec):end])
+                    sCode = strip(L[beg+len(self.sBeginSpec):end])
                     gen.parseLine(sCode)
             else:
                 # Deal with an ordinary code block.
-                l = fIn.readline()
+                L = fIn.readline()
 
                 # Get all the lines in the spec
-                while l and not self.isEndSpecLine(l):
-                    if self.isBeginSpecLine(l):
-                        raise CogError("Unexpected '%s'" % self.sBeginSpec,
+                while L and not self.isEndSpecLine(L):
+                    if self.isBeginSpecLine(L):
+                        raise CogError(Subs("Unexpected '$1'", self.sBeginSpec),
                             file=sFileIn, line=fIn.linenumber())
-                    if self.isEndOutputLine(l):
-                        raise CogError("Unexpected '%s'" % self.sEndOutput,
+                    if self.isEndOutputLine(L):
+                        raise CogError(Subs("Unexpected '$1'", self.sEndOutput),
                             file=sFileIn, line=fIn.linenumber())
                     if not self.options.bDeleteCode:
-                        fOut.write(l)
-                    gen.parseLine(l)
-                    l = fIn.readline()
-                if not l:
+                        fOut.write(L)
+                    gen.parseLine(L)
+                    L = fIn.readline()
+                if not L:
                     raise CogError(
                         "Cog block begun but never ended.",
                         file=sFileIn, line=firstLineNum)
 
                 if not self.options.bDeleteCode:
-                    fOut.write(l)
-                gen.parseMarker(l)
+                    fOut.write(L)
+                gen.parseMarker(L)
 
-            l = fIn.readline()
+            L = fIn.readline()
 
             # Eat all the lines in the output section.  While reading past
             # them, compute the md5 hash of the old output.
-            hasher = md5.new()
-            while l and not self.isEndOutputLine(l):
-                if self.isBeginSpecLine(l):
-                    raise CogError("Unexpected '%s'" % self.sBeginSpec,
+            hasher = newMD5()
+            while L and not self.isEndOutputLine(L):
+                if self.isBeginSpecLine(L):
+                    raise CogError(Subs("Unexpected '$1'", self.sBeginSpec),
                         file=sFileIn, line=fIn.linenumber())
-                if self.isEndSpecLine(l):
-                    raise CogError("Unexpected '%s'" % self.sEndSpec,
+                if self.isEndSpecLine(L):
+                    raise CogError(Subs("Unexpected '$1'", self.sEndSpec),
                         file=sFileIn, line=fIn.linenumber())
-                hasher.update(l)
-                l = fIn.readline()
+                MD5update(hasher, L)
+                L = fIn.readline()
             curHash = mydigest(hasher)
 
-            if not l and not self.options.bEofCanBeEnd:
+            if not L and not self.options.bEofCanBeEnd:
                 # We reached end of file before we found the end output line.
-                raise CogError("Missing '%s' before end of file." % self.sEndOutput,
+                raise CogError(Subs("Missing '$1' before end of file.", self.sEndOutput),
                     file=sFileIn, line=fIn.linenumber())
 
             # Write the output of the spec to be the new output if we're
             # supposed to generate code.
-            hasher = md5.new()
+            hasher = newMD5()
             if not self.options.bNoGenerate:
-                sFile = "%s+%d" % (sFileIn, firstLineNum)
+                sFile = Subs("$1+$2", sFileIn, firstLineNum)
                 sGen = gen.evaluate(cog=self, globals=globals, fname=sFile)
                 sGen = self.suffixLines(sGen)
-                hasher.update(sGen)
+                MD5update(hasher, sGen)
                 fOut.write(sGen)
             newHash = mydigest(hasher)
 
-            bSawCog = True
+            bSawCog = true
 
             # Write the ending output line
-            hashMatch = self.reEndOutput.search(l)
+            hashMatch = self.reEndOutput.search(L)
             if self.options.bHashOutput:
                 if hashMatch:
                     oldHash = hashMatch.groupdict()['hash']
@@ -478,23 +467,23 @@ class Cog(Redirectable):
                         raise CogError("Output has been edited! Delete old checksum to unprotect.",
                             file=sFileIn, line=fIn.linenumber())
                     # Create a new end line with the correct hash.
-                    endpieces = split(l, hashMatch.group(0), 1)
+                    endpieces = split(L, hashMatch.group(0), 1)
                 else:
                     # There was no old hash, but we want a new hash.
-                    endpieces = split(l, self.sEndOutput, 1)
-                l = join(endpieces, (self.sEndFormat % newHash))
+                    endpieces = split(L, self.sEndOutput, 1)
+                L = join(endpieces, Subs(self.sEndFormat, newHash))
             else:
                 # We don't want hashes output, so if there was one, get rid of
                 # it.
                 if hashMatch:
-                    l = replace(l, hashMatch.groupdict()['hashsect'], '', 1)
+                    L = replace(L, hashMatch.groupdict()['hashsect'], '', 1)
 
             if not self.options.bDeleteCode:
-                fOut.write(l)
-            l = fIn.readline()
+                fOut.write(L)
+            L = fIn.readline()
 
         if not bSawCog and self.options.bWarnEmpty:
-            self.showWarning("no cog code found in %s" % sFileIn)
+            self.showWarning("no cog code found in " + sFileIn)
 
     # A regex for non-empty lines, used by suffixLines.
     reNonEmptyLines = re.compile("^\s*\S+.*$", re.MULTILINE)
@@ -525,13 +514,13 @@ class Cog(Redirectable):
             # Need to ensure we can write.
             if self.options.sMakeWritableCmd:
                 # Use an external command to make the file writable.
-                cmd = replace(self.options.sMakeWritableCmd, '%s', sOldPath)
+                cmd = replace(self.options.sMakeWritableCmd, '$1', sOldPath)
                 self.stdout.write(os.popen(cmd).read())
                 if not os.access(sOldPath, os.W_OK):
-                    raise CogError("Couldn't make %s writable" % sOldPath)
+                    raise CogError(Subs("Couldn't make $1 writable", sOldPath))
             else:
                 # Can't write!
-                raise CogError("Can't overwrite %s" % sOldPath)
+                raise CogError("Can't overwrite " + sOldPath)
         f = open(sOldPath, self.sOutputMode)
         f.write(sNewText)
         f.close()
@@ -573,8 +562,8 @@ class Cog(Redirectable):
             elif self.options.bReplace:
                 # We want to replace the cog file with the output,
                 # but only if they differ.
-                self.stdout.write("Cogging %s" % sFile)
-                bNeedNewline = True
+                self.stdout.write("Cogging " + sFile)
+                bNeedNewline = true
 
                 try:
                     fOldFile = open(sFile)
@@ -583,7 +572,7 @@ class Cog(Redirectable):
                     sNewText = self.processString(sOldText, fname=sFile)
                     if sOldText != sNewText:
                         self.stdout.write("  (changed)\n")
-                        bNeedNewline = False
+                        bNeedNewline = false
                         self.replaceFile(sFile, sNewText)
                 finally:
                     # The try-finally block is so we can print a partial line
@@ -600,10 +589,10 @@ class Cog(Redirectable):
     def processFileList(self, sFileList):
         """ Process the files in a file list.
         """
-        for l in open(sFileList).readlines():
+        for L in open(sFileList).readlines():
             # Use shlex to parse the line like a shell.
-            lex = shlex.shlex(l, posix=True)
-            lex.whitespace_split = True
+            lex = shlex.shlex(L, posix=true)
+            lex.whitespace_split = true
             lex.commenters = '#'
             # No escapes, so that backslash can be part of the path
             lex.escape = ''
@@ -645,7 +634,7 @@ class Cog(Redirectable):
         self.options.validate()
 
         if self.options.bShowVersion:
-            self.stdout.write("Cog version %s\n" % __version__)
+            self.stdout.write(Subs("Cog version $1\n", __version__))
             return
 
         if self.options.args:
@@ -657,19 +646,20 @@ class Cog(Redirectable):
     def main(self, argv):
         """ Handle the command-line execution for cog.
         """
+        global gErrorMsg
 
         try:
             self.callableMain(argv)
             return 0
-        except CogUsageError, err:
-            self.stderr.write(err + "\n")
+        except CogUsageError:
+            self.stderr.write(gErrorMsg + "\n")
             self.stderr.write("(for help use -?)\n")
             return 2
-        except CogGeneratedError, err:
-            self.stderr.write("Error: %s\n" % err)
+        except CogGeneratedError:
+            self.stderr.write(Subs("Error: $1\n", gErrorMsg))
             return 3
-        except CogError, err:
-            self.stderr.write(err + "\n")
+        except CogError:
+            self.stderr.write(gErrorMsg + "\n")
             return 1
         except:
             traceback.print_exc(None, self.stderr)
diff --git a/config/nimdoc.cfg b/config/nimdoc.cfg
index 9a946b641..73886ceee 100644
--- a/config/nimdoc.cfg
+++ b/config/nimdoc.cfg
@@ -1,5 +1,5 @@
 # This is the config file for the documentation generator.

-# (c) 2008 Andreas Rumpf

+# (c) 2009 Andreas Rumpf

 # Feel free to edit the templates as you need.

 

 split.item.toc = "20"  

diff --git a/config/nimrod.cfg b/config/nimrod.cfg
index dd3b980c9..e06472cf5 100644
--- a/config/nimrod.cfg
+++ b/config/nimrod.cfg
@@ -1,5 +1,5 @@
 # Configuration file for the Nimrod Compiler.

-# (c) 2008 Andreas Rumpf

+# (c) 2009 Andreas Rumpf

 

 # Feel free to edit the default values as you need.

 

@@ -7,7 +7,7 @@
 # @putenv "key" "val"

 # Environment variables cannot be used in the options, however!

 

-cc = @if windows: llvm_gcc @else: gcc @end

+cc = gcc

 lib="$nimrod/lib"

 path="$lib/base"

 path="$lib/base/gtk"

@@ -68,10 +68,8 @@ vcc.options.size = "/O1"
 

 # Configuration for the GNU C/C++ compiler:

 @if windows:

-  gcc.path = r"C:\eigenes\compiler\mingw\bin"

+  gcc.path = r"$nimrod\dist\mingw\bin"

 @end

-#gcc.exe = "gcc-4.1"

-#gcc.linkerExe = "gcc-4.1"

 gcc.options.debug = "-g"

 @if macosx:

   gcc.options.always = "-w -fasm-blocks"

@@ -83,13 +81,8 @@ gcc.options.size = "-Os"
 

 # Configuration for the Digital Mars C/C++ compiler:

 @if windows:

-  dmc.path = r"C:\eigenes\compiler\d\dm\bin"

+  dmc.path = r"$nimrod\dist\dm\bin"

 @end

 

 # Configuration for the Tiny C Compiler:

-@if windows:

-  tcc.path = r"C:\Eigenes\compiler\tcc-0.9.23\tcc"

-  tcc.options.always = r"-IC:\Eigenes\compiler\tcc-0.9.23\include " &

-                       r"-IC:\Eigenes\compiler\tcc-0.9.23\include\winapi"

-@end

 tcc.options.always = "-w"

diff --git a/data/advopt.txt b/data/advopt.txt
index ecf3b7b75..1fc1f4845 100644
--- a/data/advopt.txt
+++ b/data/advopt.txt
@@ -27,7 +27,6 @@ Advanced options:
   --checkpoints:on|off      turn on|off checkpoints; for debugging Nimrod
   --skip_cfg                do not read the general configuration file
   --skip_proj_cfg           do not read the project's configuration file
-  --import:MODULE_FILE      import the given module implicitly for each module
   --index:FILE              use FILE to generate a documenation index file
   --putenv:key=value        set an environment variable
   --list_cmd                list the commands used to execute external programs
diff --git a/data/ast.yml b/data/ast.yml
index b1d55327f..c4b261bba 100644
--- a/data/ast.yml
+++ b/data/ast.yml
@@ -212,7 +212,6 @@
   'nkFromStmt',           # a from * import statement
   'nkImportAs',           # an `import xyx as abc` section
   'nkIncludeStmt',        # an include statement
-  'nkAccessStmt',         # used internally for iterators
   'nkCommentStmt',        # a comment statement
   'nkStmtListExpr',       # a statement list followed by an expr; this is used
                           # to allow powerful multi-line templates
diff --git a/data/basicopt.txt b/data/basicopt.txt
index c10cba63b..9ba29c265 100644
--- a/data/basicopt.txt
+++ b/data/basicopt.txt
@@ -19,14 +19,14 @@ Options:
   --debugger:on|off         turn Embedded Nimrod Debugger ON|OFF
   -x, --checks:on|off       code generation for all runtime checks ON|OFF
   --obj_checks:on|off       code generation for obj conversion checks ON|OFF
-  --field_checks:on|off     code generation for case record fields ON|OFF
+  --field_checks:on|off     code generation for case variant fields ON|OFF
   --range_checks:on|off     code generation for range checks ON|OFF
   --bound_checks:on|off     code generation for bound checks ON|OFF
   --overflow_checks:on|off  code generation for over-/underflow checks ON|OFF
   -a, --assertions:on|off   code generation for assertions ON|OFF
   --dead_code_elim:on|off   whole program dead code elimination ON|OFF
   --opt:none|speed|size     optimize not at all or for speed|size
-  --app:console|gui|lib     generate a console|GUI application or a shared lib
+  --app:console|gui         generate a console|GUI application
   -r, --run                 run the compiled program with given arguments
   --advanced                show advanced command line switches
   -h, --help                show this help
diff --git a/data/messages.yml b/data/messages.yml
index c319aa693..b5b37c6c5 100644
--- a/data/messages.yml
+++ b/data/messages.yml
@@ -1,5 +1,5 @@
 # This file contains all the messages of the Nimrod compiler
-# (c) 2008 Andreas Rumpf
+# (c) 2009 Andreas Rumpf
 
 [
 # fatal errors:
@@ -208,7 +208,7 @@
 {'errXNotAllowedHere': '$1 here not allowed'},
 {'errInvalidControlFlowX': 'invalid control flow: $1'},
 {'errATypeHasNoValue': 'a type has no value'},
-{'errXisNoType': "'$1' is no type"},
+{'errXisNoType': "invalid type: '$1'"},
 {'errCircumNeedsPointer': "'^' needs a pointer or reference type"},
 {'errInvalidContextForBuiltinX': "invalid context for builtin '$1'"},
 {'errInvalidExpression': 'invalid expression'},
@@ -254,6 +254,7 @@
 {'errXRequiresOneArgument': "converter requires one parameter"},
 {'errUnhandledExceptionX': "unhandled exception: $1"},
 {'errCyclicTree': "macro returned a cyclic abstract syntax tree"},
+{'errXisNoMacroOrTemplate': "'$1' is no macro or template"},
 
 # user error message:
 {'errUser': '$1'},
diff --git a/doc/docs.txt b/doc/docs.txt
index 431a79a29..a731b1504 100644
--- a/doc/docs.txt
+++ b/doc/docs.txt
@@ -1,28 +1,25 @@
-  "Incorrect documentation is often worse than no documentation."
+  Incorrect documentation is often worse than no documentation.
   -- Bertrand Meyer
 
 The documentation consists of several documents:
 
-- | `Nimrod tutorial (part I) <tut1.html>`_
+- | `Tutorial (part I) <tut1.html>`_
   | The Nimrod tutorial part one deals with the basics.
 
-- | `Nimrod tutorial (part II) <tut2.html>`_
+- | `Tutorial (part II) <tut2.html>`_
   | The Nimrod tutorial part two deals with the advanced language constructs.
 
-- | `Nimrod manual <manual.html>`_
-  | The Nimrod manual is a draft that will evolve into a proper specification.
+- | `Library documentation <lib.html>`_
+  | This document describes Nimrod's standard library.
 
-- | `User guide for the Nimrod Compiler <nimrodc.html>`_
+- | `User guide <nimrodc.html>`_
   | The user guide lists command line arguments, special features of the
     compiler, etc.
 
-- | `User guide for the Embedded Nimrod Debugger <endb.html>`_
-  | This document describes how to use the Embedded Debugger. 
-
-- | `Nimrod library documentation <lib.html>`_
-  | This document describes Nimrod's standard library.
+- | `Manual <manual.html>`_
+  | The Nimrod manual is a draft that will evolve into a proper specification.
 
-- | `Nimrod internal documentation <intern.html>`_
+- | `Internal documentation <intern.html>`_
   | The internal documentation describes how the compiler is implemented. Read
     this if you want to hack the compiler.
 
diff --git a/doc/filelist.txt b/doc/filelist.txt
index fb2f67a37..e094b6fb3 100644
--- a/doc/filelist.txt
+++ b/doc/filelist.txt
@@ -5,7 +5,7 @@ Short description of Nimrod's modules
 Module          Description
 ==============  ==========================================================
 nimrod          main module: parses the command line and calls
-                ```main.MainCommand``
+                ``main.MainCommand``
 main            implements the top-level command dispatching
 lexbase         buffer handling of the lexical analyser
 scanner         lexical analyser
@@ -31,6 +31,7 @@ sigmatch        contains the matching algorithm that is used for proc
 semexprs        contains the semantic checking phase for expressions
 semstmts        contains the semantic checking phase for statements
 semtypes        contains the semantic checking phase for types
+seminst         instantiation of generic procs and types
 semfold         contains code to deal with constant folding
 evals           contains an AST interpreter for compile time evaluation
 pragmas         semantic checking of pragmas
diff --git a/doc/grammar.txt b/doc/grammar.txt
index fa5a0d036..9fbd1eb15 100644
--- a/doc/grammar.txt
+++ b/doc/grammar.txt
@@ -118,7 +118,7 @@ ifStmt ::= 'if' expr ':' stmt ('elif' expr ':' stmt)* ['else' ':' stmt]
 whenStmt ::= 'when' expr ':' stmt ('elif' expr ':' stmt)* ['else' ':' stmt]
 caseStmt ::= 'case' expr [':'] ('of' sliceExprList ':' stmt)*
                                ('elif' expr ':' stmt)*
-                                ['else' ':' stmt]
+                               ['else' ':' stmt]
 whileStmt ::= 'while' expr ':' stmt
 forStmt ::= 'for' symbol (comma symbol)* 'in' expr ['..' expr] ':' stmt
 exceptList ::= [qualifiedIdent (comma qualifiedIdent)*]
diff --git a/doc/lib.txt b/doc/lib.txt
index ccd97aa6e..b45c02262 100644
--- a/doc/lib.txt
+++ b/doc/lib.txt
@@ -6,12 +6,15 @@ Nimrod Standard Library
 :Version: |nimrodversion|
 
 Though the Nimrod Standard Library is still evolving, it is already quite
-usable. It is divided into basic libraries that contains modules that virtually
-every program will need and advanced libraries which are more heavy weight.
-Advanced libraries are in the ``lib/base`` directory.
+usable. It is divided into *pure libraries*, *impure libraries* and *wrappers*.
 
-Basic libraries
-===============
+Pure libraries do not depend on any external ``*.dll`` or ``lib*.so`` binary 
+while impure libraries do. A wrapper is an impure library that is a very
+low-level interface to a C library.
+
+
+Pure libraries
+==============
 
 * `system <system.html>`_
   Basic procs and operators that every program needs. It also provides IO
@@ -51,6 +54,12 @@ Basic libraries
   literals, raw string literals and triple quote string literals are supported
   as in the Nimrod programming language.
 
+* `parsexml <parsexml.html>`_
+  The ``parsexml`` module implements a simple high performance XML/HTML parser. 
+  The only encoding that is supported is UTF-8. The parser has been designed
+  to be somewhat error correcting, so that even some "wild HTML" found on the 
+  web can be parsed with it.
+
 * `strtabs <strtabs.html>`_
   The ``strtabs`` module implements an efficient hash table that is a mapping
   from strings to strings. Supports a case-sensitive, case-insensitive and
@@ -68,17 +77,31 @@ Basic libraries
   Nimrod types.
 
 * `lexbase <lexbase.html>`_
-  This is a low level module that implements an extremely efficent buffering
+  This is a low level module that implements an extremely efficient buffering
   scheme for lexers and parsers. This is used by the ``parsecfg`` module.
 
+* `terminal <terminal.html>`_
+  This module contains a few procedures to control the *terminal* 
+  (also called *console*). The implementation simply uses ANSI escape 
+  sequences and does not depend on any other module.
+
+* `cgi <cgi.html>`_
+  This module implements helper procs for CGI applictions. 
 
-Advanced libaries
-=================
+* `unicode <unicode.html>`_ 
+  This module provides support to handle the Unicode UTF-8 encoding.
 
 * `regexprs <regexprs.html>`_
   This module contains procedures and operators for handling regular
   expressions.
 
+* `md5 <md5.html>`_
+  This module implements the MD5 checksum algorithm.
+
+
+Impure libraries
+================
+
 * `dialogs <dialogs.html>`_
   This module implements portable dialogs for Nimrod; the implementation
   builds on the GTK interface. On Windows, native dialogs are shown if
@@ -86,6 +109,11 @@ Advanced libaries
 
 * `zipfiles <zipfiles.html>`_
   This module implements a zip archive creator/reader/modifier.
+  
+* `web <web.html>`_
+  This module contains simple high-level procedures for dealing with the
+  web like loading the contents of a web page from an URL.
+
 
 Wrappers
 ========
@@ -97,6 +125,12 @@ not contained in the distribution. You can then find them on the website.
   Contains a wrapper for the POSIX standard.
 * `windows <windows.html>`_
   Contains a wrapper for the Win32 API.
+* `mysql <mysql.html>`_
+  Contains a wrapper for the mySQL API.
+* `sqlite3 <sqlite3.html>`_ 
+  Contains a wrapper for SQLite 3 API.
+* `libcurl <libcurl.html>`_
+  Contains a wrapper for the libcurl library.
 * `shellapi <shellapi.html>`_
   Contains a wrapper for the ``shellapi.h`` header.
 * `shfolder <shfolder.html>`_
diff --git a/doc/manual.txt b/doc/manual.txt
index 04b8bb97b..2fa24f756 100644
--- a/doc/manual.txt
+++ b/doc/manual.txt
@@ -1011,8 +1011,8 @@ char                            '\0'
 bool                            false
 ref or pointer type             nil
 procedural type                 nil
-sequence                        nil (**not** ``@[]``)
-string                          nil (**not** "")
+sequence                        nil (*not* ``@[]``)
+string                          nil (*not* "")
 tuple[x: A, y: B, ...]          (default(A), default(B), ...)
                                 (analogous for objects)
 array[0..., T]                  [default(T), ...]
@@ -1080,9 +1080,9 @@ Case statement
 
 Syntax::
 
-  caseStmt ::= 'case' expr ('of' sliceExprList ':' stmt)*
-                           ('elif' expr ':' stmt)*
-                           ['else' ':' stmt]
+  caseStmt ::= 'case' expr [':'] ('of' sliceExprList ':' stmt)*
+                                 ('elif' expr ':' stmt)*
+                                 ['else' ':' stmt]
 
 Example:
 
@@ -1241,11 +1241,11 @@ sugar for:
 ``return`` without an expression is a short notation for ``return result`` if
 the proc has a return type. The `result`:idx: variable is always the return
 value of the procedure. It is automatically declared by the compiler. As all
-variables, ``result`` is initialized to (binary) zero::
+variables, ``result`` is initialized to (binary) zero:
 
 .. code-block:: nimrod
-    proc returnZero(): int =
-      # implicitely returns 0
+  proc returnZero(): int =
+    # implicitely returns 0
 
 
 Yield statement
@@ -1649,7 +1649,7 @@ possible within a single ``type`` section.
 Generics
 ~~~~~~~~
 
-`Version 0.7.4: Complex generic types like in the example do not work.`:red:
+`Version 0.7.6: Generic types like in the example do not work.`:red:
 
 Example:
 
diff --git a/doc/nimrodc.txt b/doc/nimrodc.txt
index 18f9bce5d..f4949ada2 100644
--- a/doc/nimrodc.txt
+++ b/doc/nimrodc.txt
@@ -208,8 +208,9 @@ Acyclic Pragma
 ~~~~~~~~~~~~~~
 The `acyclic`:idx: pragma can be used for object types to mark them as acyclic
 even though they seem to be cyclic. This is an **optimization** for the garbage
-collector to not consider objects of this type as part of a cycle::
+collector to not consider objects of this type as part of a cycle:
 
+.. code-block:: nimrod
   type
     PNode = ref TNode
     TNode {.acyclic, final.} = object
diff --git a/doc/theindex.txt b/doc/theindex.txt
index 1afbdb791..6aeb786fa 100644
--- a/doc/theindex.txt
+++ b/doc/theindex.txt
@@ -1,7539 +1,4769 @@
-

-=====

-Index

-=====

-

-.. index::

-

-

-   `!=`:idx:

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

-

-   `$`:idx:

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

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

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

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

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

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

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

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

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

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

-

-   `%`:idx:

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

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

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

-

-   `%%`:idx:

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

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

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

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

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

-

-   `&`:idx:

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

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

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

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

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

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

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

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

-

-   `*`:idx:

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

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

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

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

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

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

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

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

-

-   `*%`:idx:

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

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

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

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

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

-

-   `+`:idx:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-

-   `+%`:idx:

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

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

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

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

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

-

-   `-`: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>`_

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

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

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

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

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

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

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

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

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

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

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

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

-

-   `-%`:idx:

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

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

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

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

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

-

-   `-+-`:idx:

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

-

-   `/`:idx:

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

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

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

-

-   `/%`:idx:

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

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

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

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

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

-

-   `/../`:idx:

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

-

-   `<`:idx:

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

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

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

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

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

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

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

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

-     * `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>`_

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

-

-   `<%`:idx:

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

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

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

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

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

-

-   `<=`:idx:

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

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

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

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

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

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

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

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

-     * `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>`_

-

-   `<=`:idx:

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

-

-   `<=%`:idx:

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

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

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

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

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

-

-   `==`:idx:

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

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

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

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

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

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

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

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

-     * `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#458 <system.html#458>`_

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

-

-   `>`:idx:

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

-

-   `>%`:idx:

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

-

-   `>=`:idx:

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

-

-   `>=%`:idx:

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

-

-   `@`:idx:

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

-

-   `[]`:idx:

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

-

-   `[]=`:idx:

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

-

-   `[ESC]`:idx:

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

-

-   `ABDAY_1`:idx:

-     `posix.html#403 <posix.html#403>`_

-

-   `ABDAY_2`:idx:

-     `posix.html#404 <posix.html#404>`_

-

-   `ABDAY_3`:idx:

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

-

-   `ABDAY_4`:idx:

-     `posix.html#406 <posix.html#406>`_

-

-   `ABDAY_5`:idx:

-     `posix.html#407 <posix.html#407>`_

-

-   `ABDAY_6`:idx:

-     `posix.html#408 <posix.html#408>`_

-

-   `ABDAY_7`:idx:

-     `posix.html#409 <posix.html#409>`_

-

-   `ABMON_1`:idx:

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

-

-   `ABMON_10`:idx:

-     `posix.html#431 <posix.html#431>`_

-

-   `ABMON_11`:idx:

-     `posix.html#432 <posix.html#432>`_

-

-   `ABMON_12`:idx:

-     `posix.html#433 <posix.html#433>`_

-

-   `ABMON_2`:idx:

-     `posix.html#423 <posix.html#423>`_

-

-   `ABMON_3`:idx:

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

-

-   `ABMON_4`:idx:

-     `posix.html#425 <posix.html#425>`_

-

-   `ABMON_5`:idx:

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

-

-   `ABMON_6`:idx:

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

-

-   `ABMON_7`:idx:

-     `posix.html#428 <posix.html#428>`_

-

-   `ABMON_8`:idx:

-     `posix.html#429 <posix.html#429>`_

-

-   `ABMON_9`:idx:

-     `posix.html#430 <posix.html#430>`_

-

-   `abs`:idx:

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

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

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

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

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

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

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

-

-   `access`:idx:

-     `posix.html#966 <posix.html#966>`_

-

-   `acyclic`:idx:

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

-

-   `add`:idx:

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

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

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

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

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

-

-   `addFile`:idx:

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

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

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

-

-   `addQuitProc`:idx:

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

-

-   `adler32`:idx:

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

-

-   `AIO_ALLDONE`:idx:

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

-

-   `aio_cancel`:idx:

-     `posix.html#784 <posix.html#784>`_

-

-   `AIO_CANCELED`:idx:

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

-

-   `aio_error`:idx:

-     `posix.html#785 <posix.html#785>`_

-

-   `aio_fsync`:idx:

-     `posix.html#786 <posix.html#786>`_

-

-   `AIO_NOTCANCELED`:idx:

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

-

-   `aio_read`:idx:

-     `posix.html#787 <posix.html#787>`_

-

-   `aio_return`:idx:

-     `posix.html#788 <posix.html#788>`_

-

-   `aio_suspend`:idx:

-     `posix.html#789 <posix.html#789>`_

-

-   `aio_write`:idx:

-     `posix.html#790 <posix.html#790>`_

-

-   `alarm`:idx:

-     `posix.html#967 <posix.html#967>`_

-

-   `alert`:idx:

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

-

-   `allCharsInSet`:idx:

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

-

-   `alloc`:idx:

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

-

-   `alloc0`:idx:

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

-

-   `ALT_DIGITS`:idx:

-     `posix.html#438 <posix.html#438>`_

-

-   `AltSep`:idx:

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

-

-   `AM_STR`:idx:

-     `posix.html#394 <posix.html#394>`_

-

-   `and`:idx:

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

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

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

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

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

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

-

-   `apostrophe`:idx:

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

-

-   `AppendFileExt`:idx:

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

-

-   `arccos`:idx:

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

-

-   `arcsin`:idx:

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

-

-   `arctan`:idx:

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

-

-   `arctan2`:idx:

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

-

-   `arithmetic bit shifts`:idx:

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

-

-   `array`:idx:

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

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

-

-   `array properties`:idx:

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

-

-   `Arrays`:idx:

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

-

-   `asctime`:idx:

-     `posix.html#1092 <posix.html#1092>`_

-

-   `asctime_r`:idx:

-     `posix.html#1093 <posix.html#1093>`_

-

-   `assembler`:idx:

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

-

-   `assert`:idx:

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

-

-   `Automatic type conversion`:idx:

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

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

-

-   `backslash`:idx:

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

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

-

-   `backspace`:idx:

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

-

-   `basename`:idx:

-     `posix.html#844 <posix.html#844>`_

-

-   `BiggestFloat`:idx:

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

-

-   `BiggestInt`:idx:

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

-

-   `block`:idx:

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

-

-   `bool`:idx:

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

-

-   `boolean`:idx:

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

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

-

-   `break`:idx:

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

-

-   `breakpoint`:idx:

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

-

-   `bsd_signal`:idx:

-     `posix.html#1122 <posix.html#1122>`_

-

-   `Byte`:idx:

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

-

-   `calling conventions`:idx:

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

-

-   `capitalize`:idx:

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

-

-   `card`:idx:

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

-

-   `carriage return`:idx:

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

-

-   `case`:idx:

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

-

-   `catclose`:idx:

-     `posix.html#1149 <posix.html#1149>`_

-

-   `catgets`:idx:

-     `posix.html#1150 <posix.html#1150>`_

-

-   `catopen`:idx:

-     `posix.html#1151 <posix.html#1151>`_

-

-   `cchar`:idx:

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

-

-   `cdecl`:idx:

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

-

-   `cdouble`:idx:

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

-

-   `cfloat`:idx:

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

-

-   `ChangeFileExt`:idx:

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

-

-   `char`:idx:

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

-

-   `character type`:idx:

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

-

-   `character with decimal value d`:idx:

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

-

-   `character with hex value HH`:idx:

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

-

-   `chdir`:idx:

-     `posix.html#968 <posix.html#968>`_

-

-   `checked runtime error`:idx:

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

-

-   `chmod`:idx:

-     `posix.html#1058 <posix.html#1058>`_

-

-   `ChooseDir`:idx:

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

-

-   `ChooseFilesToOpen`:idx:

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

-

-   `ChooseFileToOpen`:idx:

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

-

-   `ChooseFileToSave`:idx:

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

-

-   `chown`:idx:

-     `posix.html#969 <posix.html#969>`_

-

-   `chr`:idx:

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

-

-   `cint`:idx:

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

-

-   `C_IRGRP`:idx:

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

-

-   `C_IROTH`:idx:

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

-

-   `C_IRUSR`:idx:

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

-

-   `C_ISBLK`:idx:

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

-

-   `C_ISCHR`:idx:

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

-

-   `C_ISCTG`:idx:

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

-

-   `C_ISDIR`:idx:

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

-

-   `C_ISFIFO`:idx:

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

-

-   `C_ISGID`:idx:

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

-

-   `C_ISLNK`:idx:

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

-

-   `C_ISREG`:idx:

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

-

-   `C_ISSOCK`:idx:

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

-

-   `C_ISUID`:idx:

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

-

-   `C_ISVTX`:idx:

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

-

-   `C_IWGRP`:idx:

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

-

-   `C_IWOTH`:idx:

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

-

-   `C_IWUSR`:idx:

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

-

-   `C_IXGRP`:idx:

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

-

-   `C_IXOTH`:idx:

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

-

-   `C_IXUSR`:idx:

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

-

-   `classify`:idx:

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

-

-   `clock`:idx:

-     `posix.html#1094 <posix.html#1094>`_

-

-   `clock_getcpuclockid`:idx:

-     `posix.html#1095 <posix.html#1095>`_

-

-   `clock_getres`:idx:

-     `posix.html#1096 <posix.html#1096>`_

-

-   `clock_gettime`:idx:

-     `posix.html#1097 <posix.html#1097>`_

-

-   `CLOCK_MONOTONIC`:idx:

-     `posix.html#700 <posix.html#700>`_

-

-   `clock_nanosleep`:idx:

-     `posix.html#1098 <posix.html#1098>`_

-

-   `CLOCK_PROCESS_CPUTIME_ID`:idx:

-     `posix.html#696 <posix.html#696>`_

-

-   `CLOCK_REALTIME`:idx:

-     `posix.html#698 <posix.html#698>`_

-

-   `clock_settime`:idx:

-     `posix.html#1099 <posix.html#1099>`_

-

-   `CLOCKS_PER_SEC`:idx:

-     `posix.html#695 <posix.html#695>`_

-

-   `CLOCK_THREAD_CPUTIME_ID`:idx:

-     `posix.html#697 <posix.html#697>`_

-

-   `clong`:idx:

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

-

-   `clongdouble`:idx:

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

-

-   `clonglong`:idx:

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

-

-   `close`:idx:

-     * `posix.html#970 <posix.html#970>`_

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

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

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

-

-   `closedir`:idx:

-     `posix.html#800 <posix.html#800>`_

-

-   `CloseFile`:idx:

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

-

-   `closure`:idx:

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

-

-   `cmp`:idx:

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

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

-

-   `cmpIgnoreCase`:idx:

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

-

-   `cmpIgnoreStyle`:idx:

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

-

-   `cmpPaths`:idx:

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

-

-   `CODESET`:idx:

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

-

-   `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>`_

-

-   `CompileDate`:idx:

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

-

-   `CompileTime`:idx:

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

-

-   `complex statements`:idx:

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

-

-   `compress`:idx:

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

-

-   `compress2`:idx:

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

-

-   `confstr`:idx:

-     `posix.html#971 <posix.html#971>`_

-

-   `const`:idx:

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

-

-   `constant expressions`:idx:

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

-

-   `Constants`:idx:

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

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

-

-   `constZIP_SOURCE_FREE`:idx:

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

-

-   `contains`:idx:

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

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

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

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

-

-   `continue`:idx:

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

-

-   `copy`:idx:

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

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

-

-   `copyFile`:idx:

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

-

-   `copyMem`:idx:

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

-

-   `cos`:idx:

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

-

-   `cosh`:idx:

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

-

-   `countBits`:idx:

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

-

-   `countdown`:idx:

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

-

-   `countup`:idx:

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

-

-   `cpuEndian`:idx:

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

-

-   `crc32`:idx:

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

-

-   `creat`:idx:

-     `posix.html#811 <posix.html#811>`_

-

-   `createDir`:idx:

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

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

-

-   `CRNCYSTR`:idx:

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

-

-   `crypt`:idx:

-     `posix.html#972 <posix.html#972>`_

-

-   `cschar`:idx:

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

-

-   `cshort`:idx:

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

-

-   `cSIG_HOLD`:idx:

-     `posix.html#721 <posix.html#721>`_

-

-   `CS_PATH`:idx:

-     `posix.html#482 <posix.html#482>`_

-

-   `CS_POSIX_V6_ILP32_OFF32_CFLAGS`:idx:

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

-

-   `CS_POSIX_V6_ILP32_OFF32_LDFLAGS`:idx:

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

-

-   `CS_POSIX_V6_ILP32_OFF32_LIBS`:idx:

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

-

-   `CS_POSIX_V6_ILP32_OFFBIG_CFLAGS`:idx:

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

-

-   `CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS`:idx:

-     `posix.html#487 <posix.html#487>`_

-

-   `CS_POSIX_V6_ILP32_OFFBIG_LIBS`:idx:

-     `posix.html#488 <posix.html#488>`_

-

-   `CS_POSIX_V6_LP64_OFF64_CFLAGS`:idx:

-     `posix.html#489 <posix.html#489>`_

-

-   `CS_POSIX_V6_LP64_OFF64_LDFLAGS`:idx:

-     `posix.html#490 <posix.html#490>`_

-

-   `CS_POSIX_V6_LP64_OFF64_LIBS`:idx:

-     `posix.html#491 <posix.html#491>`_

-

-   `CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS`:idx:

-     `posix.html#492 <posix.html#492>`_

-

-   `CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS`:idx:

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

-

-   `CS_POSIX_V6_LPBIG_OFFBIG_LIBS`:idx:

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

-

-   `CS_POSIX_V6_WIDTH_RESTRICTED_ENVS`:idx:

-     `posix.html#495 <posix.html#495>`_

-

-   `cstring`:idx:

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

-

-   `cstringArray`:idx:

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

-

-   `ctermid`:idx:

-     `posix.html#973 <posix.html#973>`_

-

-   `ctime`:idx:

-     `posix.html#1100 <posix.html#1100>`_

-

-   `ctime_r`:idx:

-     `posix.html#1101 <posix.html#1101>`_

-

-   `CurDir`:idx:

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

-

-   `dangling else problem`:idx:

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

-

-   `DAY_1`:idx:

-     `posix.html#396 <posix.html#396>`_

-

-   `DAY_2`:idx:

-     `posix.html#397 <posix.html#397>`_

-

-   `DAY_3`:idx:

-     `posix.html#398 <posix.html#398>`_

-

-   `DAY_4`:idx:

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

-

-   `DAY_5`:idx:

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

-

-   `DAY_6`:idx:

-     `posix.html#401 <posix.html#401>`_

-

-   `DAY_7`:idx:

-     `posix.html#402 <posix.html#402>`_

-

-   `daylight`:idx:

-     `posix.html#701 <posix.html#701>`_

-

-   `dbgLineHook`:idx:

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

-

-   `dead_code_elim`:idx:

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

-

-   `dealloc`:idx:

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

-

-   `debugger`:idx:

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

-

-   `dec`:idx:

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

-

-   `define`:idx:

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

-

-   `defined`:idx:

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

-

-   `deflate`:idx:

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

-

-   `deflateCopy`:idx:

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

-

-   `deflateEnd`:idx:

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

-

-   `deflateInit`:idx:

-     `zlib.html#178 <zlib.html#178>`_

-

-   `deflateInit2`:idx:

-     `zlib.html#182 <zlib.html#182>`_

-

-   `deflateInit2u`:idx:

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

-

-   `deflateInitu`:idx:

-     `zlib.html#176 <zlib.html#176>`_

-

-   `deflateParams`:idx:

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

-

-   `deflateReset`:idx:

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

-

-   `deflateSetDictionary`:idx:

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

-

-   `deleteStr`:idx:

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

-

-   `D_FMT`:idx:

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

-

-   `difftime`:idx:

-     `posix.html#1102 <posix.html#1102>`_

-

-   `dirname`:idx:

-     `posix.html#845 <posix.html#845>`_

-

-   `DirSep`:idx:

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

-

-   `discard`:idx:

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

-

-   `div`:idx:

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

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

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

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

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

-

-   `dlclose`:idx:

-     `posix.html#807 <posix.html#807>`_

-

-   `dlerror`:idx:

-     `posix.html#808 <posix.html#808>`_

-

-   `dlopen`:idx:

-     `posix.html#809 <posix.html#809>`_

-

-   `dlsym`:idx:

-     `posix.html#810 <posix.html#810>`_

-

-   `dom`:idx:

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

-

-   `domain specific languages`:idx:

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

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

-

-   `D_T_FMT`:idx:

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

-

-   `dup`:idx:

-     `posix.html#974 <posix.html#974>`_

-

-   `dup2`:idx:

-     `posix.html#975 <posix.html#975>`_

-

-   `dynamic type`:idx:

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

-

-   `dynlib`:idx:

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

-

-   `E`:idx:

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

-

-   `E2BIG`:idx:

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

-

-   `EACCES`:idx:

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

-

-   `EAccessViolation`:idx:

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

-

-   `EADDRINUSE`:idx:

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

-

-   `EADDRNOTAVAIL`:idx:

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

-

-   `EAFNOSUPPORT`:idx:

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

-

-   `EAGAIN`:idx:

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

-

-   `EALREADY`:idx:

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

-

-   `EArithmetic`:idx:

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

-

-   `EAssertionFailed`:idx:

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

-

-   `EAsynch`:idx:

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

-

-   `EBADF`:idx:

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

-

-   `EBADMSG`:idx:

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

-

-   `E_Base`:idx:

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

-

-   `EBUSY`:idx:

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

-

-   `ECANCELED`:idx:

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

-

-   `ECHILD`:idx:

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

-

-   `echo`:idx:

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

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

-

-   `ECMAScript`:idx:

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

-

-   `ECONNABORTED`:idx:

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

-

-   `ECONNREFUSED`:idx:

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

-

-   `ECONNRESET`:idx:

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

-

-   `EControlC`:idx:

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

-

-   `EDEADLK`:idx:

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

-

-   `EDESTADDRREQ`:idx:

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

-

-   `editDistance`:idx:

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

-

-   `EDivByZero`:idx:

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

-

-   `EDOM`:idx:

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

-

-   `EDQUOT`:idx:

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

-

-   `EEXIST`:idx:

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

-

-   `EFAULT`:idx:

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

-

-   `EFBIG`:idx:

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

-

-   `EHOSTUNREACH`:idx:

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

-

-   `EIDRM`:idx:

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

-

-   `EILSEQ`:idx:

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

-

-   `EINPROGRESS`:idx:

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

-

-   `EINTR`:idx:

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

-

-   `EINVAL`:idx:

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

-

-   `EInvalidField`:idx:

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

-

-   `EInvalidIndex`:idx:

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

-

-   `EInvalidObjectAssignment`:idx:

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

-

-   `EInvalidObjectConversion`:idx:

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

-

-   `EInvalidRegEx`:idx:

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

-

-   `EInvalidValue`:idx:

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

-

-   `EIO`:idx:

-     * `posix.html#248 <posix.html#248>`_

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

-

-   `EISCONN`:idx:

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

-

-   `EISDIR`:idx:

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

-

-   `ELOOP`:idx:

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

-

-   `Embedded Nimrod Debugger`:idx:

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

-

-   `EMFILE`:idx:

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

-

-   `EMLINK`:idx:

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

-

-   `EMSGSIZE`:idx:

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

-

-   `EMULTIHOP`:idx:

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

-

-   `ENAMETOOLONG`:idx:

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

-

-   `encrypt`:idx:

-     `posix.html#976 <posix.html#976>`_

-

-   `ENDB`:idx:

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

-

-   `endgrent`:idx:

-     `posix.html#838 <posix.html#838>`_

-

-   `EndOfFile`:idx:

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

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

-

-   `endpwent`:idx:

-     `posix.html#863 <posix.html#863>`_

-

-   `endsWith`:idx:

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

-

-   `ENETDOWN`:idx:

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

-

-   `ENETRESET`:idx:

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

-

-   `ENETUNREACH`:idx:

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

-

-   `ENFILE`:idx:

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

-

-   `ENOBUFS`:idx:

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

-

-   `ENODATA`:idx:

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

-

-   `ENODEV`:idx:

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

-

-   `ENOENT`:idx:

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

-

-   `ENoExceptionToReraise`:idx:

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

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

-

-   `ENOEXEC`:idx:

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

-

-   `ENOLCK`:idx:

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

-

-   `ENOLINK`:idx:

-     `posix.html#267 <posix.html#267>`_

-

-   `ENOMEM`:idx:

-     `posix.html#268 <posix.html#268>`_

-

-   `ENOMSG`:idx:

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

-

-   `ENOPROTOOPT`:idx:

-     `posix.html#270 <posix.html#270>`_

-

-   `ENOSPC`:idx:

-     `posix.html#271 <posix.html#271>`_

-

-   `ENOSR`:idx:

-     `posix.html#272 <posix.html#272>`_

-

-   `ENOSTR`:idx:

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

-

-   `ENOSYS`:idx:

-     `posix.html#274 <posix.html#274>`_

-

-   `ENOTCONN`:idx:

-     `posix.html#275 <posix.html#275>`_

-

-   `ENOTDIR`:idx:

-     `posix.html#276 <posix.html#276>`_

-

-   `ENOTEMPTY`:idx:

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

-

-   `ENOTSOCK`:idx:

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

-

-   `ENOTSUP`:idx:

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

-

-   `ENOTTY`:idx:

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

-

-   `Enumeration`:idx:

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

-

-   `enumeration`:idx:

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

-

-   `ENXIO`:idx:

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

-

-   `EOPNOTSUPP`:idx:

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

-

-   `EOS`:idx:

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

-

-   `EOutOfMemory`:idx:

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

-

-   `EOutOfRange`:idx:

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

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

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

-

-   `EOVERFLOW`:idx:

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

-

-   `EOverflow`:idx:

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

-

-   `EPERM`:idx:

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

-

-   `EPIPE`:idx:

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

-

-   `EPROTO`:idx:

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

-

-   `EPROTONOSUPPORT`:idx:

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

-

-   `EPROTOTYPE`:idx:

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

-

-   `equalMem`:idx:

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

-

-   `ERA`:idx:

-     `posix.html#434 <posix.html#434>`_

-

-   `ERA_D_FMT`:idx:

-     `posix.html#435 <posix.html#435>`_

-

-   `ERA_D_T_FMT`:idx:

-     `posix.html#436 <posix.html#436>`_

-

-   `ERANGE`:idx:

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

-

-   `ERA_T_FMT`:idx:

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

-

-   `ERessourceExhausted`:idx:

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

-

-   `EROFS`:idx:

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

-

-   `errno`:idx:

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

-

-   `error`:idx:

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

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

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

-

-   `errorStr`:idx:

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

-

-   `escape`:idx:

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

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

-

-   `escape sequences`:idx:

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

-

-   `ESPIPE`:idx:

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

-

-   `ESRCH`:idx:

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

-

-   `EStackOverflow`:idx:

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

-

-   `ESTALE`:idx:

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

-

-   `ESynch`:idx:

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

-

-   `ESystem`:idx:

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

-

-   `ETIME`:idx:

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

-

-   `ETIMEDOUT`:idx:

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

-

-   `ETXTBSY`:idx:

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

-

-   `EWOULDBLOCK`:idx:

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

-

-   `except`:idx:

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

-

-   `exception handlers`:idx:

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

-

-   `exceptions`:idx:

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

-

-   `excl`:idx:

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

-

-   `EXDEV`:idx:

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

-

-   `execl`:idx:

-     `posix.html#977 <posix.html#977>`_

-

-   `execle`:idx:

-     `posix.html#978 <posix.html#978>`_

-

-   `execlp`:idx:

-     `posix.html#979 <posix.html#979>`_

-

-   `executeShellCommand`:idx:

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

-

-   `execv`:idx:

-     `posix.html#980 <posix.html#980>`_

-

-   `execve`:idx:

-     `posix.html#981 <posix.html#981>`_

-

-   `execvp`:idx:

-     `posix.html#982 <posix.html#982>`_

-

-   `ExeExt`:idx:

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

-

-   `existsDir`:idx:

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

-

-   `existsEnv`:idx:

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

-

-   `ExistsFile`:idx:

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

-

-   `exp`:idx:

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

-

-   `expandFilename`:idx:

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

-

-   `exportc`:idx:

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

-

-   `expression macros`:idx:

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

-

-   `extractDir`:idx:

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

-

-   `extractFileExt`:idx:

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

-

-   `extractFilename`:idx:

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

-

-   `extractFileTrunk`:idx:

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

-

-   `ExtSep`:idx:

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

-

-   `fastcall`:idx:

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

-

-   `fatal`:idx:

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

-

-   `fchdir`:idx:

-     `posix.html#984 <posix.html#984>`_

-

-   `fchmod`:idx:

-     `posix.html#1059 <posix.html#1059>`_

-

-   `fchown`:idx:

-     `posix.html#983 <posix.html#983>`_

-

-   `fcntl`:idx:

-     `posix.html#812 <posix.html#812>`_

-

-   `fdatasync`:idx:

-     `posix.html#985 <posix.html#985>`_

-

-   `FD_CLOEXEC`:idx:

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

-

-   `FD_CLR`:idx:

-     `posix.html#1161 <posix.html#1161>`_

-

-   `FD_ISSET`:idx:

-     `posix.html#1162 <posix.html#1162>`_

-

-   `FD_SET`:idx:

-     `posix.html#1163 <posix.html#1163>`_

-

-   `FD_SETSIZE`:idx:

-     `posix.html#774 <posix.html#774>`_

-

-   `F_DUPFD`:idx:

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

-

-   `FD_ZERO`:idx:

-     `posix.html#1164 <posix.html#1164>`_

-

-   `FE_ALL_EXCEPT`:idx:

-     `posix.html#337 <posix.html#337>`_

-

-   `feclearexcept`:idx:

-     `posix.html#816 <posix.html#816>`_

-

-   `FE_DFL_ENV`:idx:

-     `posix.html#342 <posix.html#342>`_

-

-   `FE_DIVBYZERO`:idx:

-     `posix.html#332 <posix.html#332>`_

-

-   `FE_DOWNWARD`:idx:

-     `posix.html#338 <posix.html#338>`_

-

-   `fegetenv`:idx:

-     `posix.html#823 <posix.html#823>`_

-

-   `fegetexceptflag`:idx:

-     `posix.html#817 <posix.html#817>`_

-

-   `fegetround`:idx:

-     `posix.html#821 <posix.html#821>`_

-

-   `feholdexcept`:idx:

-     `posix.html#824 <posix.html#824>`_

-

-   `FE_INEXACT`:idx:

-     `posix.html#333 <posix.html#333>`_

-

-   `FE_INVALID`:idx:

-     `posix.html#334 <posix.html#334>`_

-

-   `FE_OVERFLOW`:idx:

-     `posix.html#335 <posix.html#335>`_

-

-   `feraiseexcept`:idx:

-     `posix.html#818 <posix.html#818>`_

-

-   `fesetenv`:idx:

-     `posix.html#825 <posix.html#825>`_

-

-   `fesetexceptflag`:idx:

-     `posix.html#819 <posix.html#819>`_

-

-   `fesetround`:idx:

-     `posix.html#822 <posix.html#822>`_

-

-   `fetestexcept`:idx:

-     `posix.html#820 <posix.html#820>`_

-

-   `FE_TONEAREST`:idx:

-     `posix.html#339 <posix.html#339>`_

-

-   `FE_TOWARDZERO`:idx:

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

-

-   `FE_UNDERFLOW`:idx:

-     `posix.html#336 <posix.html#336>`_

-

-   `feupdateenv`:idx:

-     `posix.html#826 <posix.html#826>`_

-

-   `FE_UPWARD`:idx:

-     `posix.html#341 <posix.html#341>`_

-

-   `F_GETFD`:idx:

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

-

-   `F_GETFL`:idx:

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

-

-   `F_GETLK`:idx:

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

-

-   `F_GETOWN`:idx:

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

-

-   `fileHandle`:idx:

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

-

-   `fileNewer`:idx:

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

-

-   `FileSystemCaseSensitive`:idx:

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

-

-   `finally`:idx:

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

-

-   `find`:idx:

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

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

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

-

-   `findChars`:idx:

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

-

-   `findSubStr`:idx:

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

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

-

-   `float`:idx:

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

-

-   `float32`:idx:

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

-

-   `float64`:idx:

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

-

-   `F_LOCK`:idx:

-     `posix.html#496 <posix.html#496>`_

-

-   `FlushFile`:idx:

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

-

-   `fmtmsg`:idx:

-     `posix.html#827 <posix.html#827>`_

-

-   `fnmatch`:idx:

-     `posix.html#828 <posix.html#828>`_

-

-   `FNM_NOESCAPE`:idx:

-     `posix.html#365 <posix.html#365>`_

-

-   `FNM_NOMATCH`:idx:

-     `posix.html#362 <posix.html#362>`_

-

-   `FNM_NOSYS`:idx:

-     `posix.html#366 <posix.html#366>`_

-

-   `FNM_PATHNAME`:idx:

-     `posix.html#363 <posix.html#363>`_

-

-   `FNM_PERIOD`:idx:

-     `posix.html#364 <posix.html#364>`_

-

-   `F_OK`:idx:

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

-

-   `for`:idx:

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

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

-

-   `fork`:idx:

-     `posix.html#986 <posix.html#986>`_

-

-   `form feed`:idx:

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

-

-   `forward`:idx:

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

-

-   `fpathconf`:idx:

-     `posix.html#987 <posix.html#987>`_

-

-   `F_RDLCK`:idx:

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

-

-   `frexp`:idx:

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

-

-   `F_SETFD`:idx:

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

-

-   `F_SETFL`:idx:

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

-

-   `F_SETLK`:idx:

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

-

-   `F_SETLKW`:idx:

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

-

-   `F_SETOWN`:idx:

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

-

-   `fstat`:idx:

-     `posix.html#1060 <posix.html#1060>`_

-

-   `fstatvfs`:idx:

-     `posix.html#1057 <posix.html#1057>`_

-

-   `fsync`:idx:

-     `posix.html#988 <posix.html#988>`_

-

-   `F_TEST`:idx:

-     `posix.html#497 <posix.html#497>`_

-

-   `F_TLOCK`:idx:

-     `posix.html#498 <posix.html#498>`_

-

-   `ftok`:idx:

-     `posix.html#1055 <posix.html#1055>`_

-

-   `ftruncate`:idx:

-     `posix.html#989 <posix.html#989>`_

-

-   `ftw`:idx:

-     `posix.html#829 <posix.html#829>`_

-

-   `FTW_CHDIR`:idx:

-     `posix.html#377 <posix.html#377>`_

-

-   `FTW_D`:idx:

-     `posix.html#368 <posix.html#368>`_

-

-   `FTW_DEPTH`:idx:

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

-

-   `FTW_DNR`:idx:

-     `posix.html#369 <posix.html#369>`_

-

-   `FTW_DP`:idx:

-     `posix.html#370 <posix.html#370>`_

-

-   `FTW_F`:idx:

-     `posix.html#367 <posix.html#367>`_

-

-   `FTW_MOUNT`:idx:

-     `posix.html#375 <posix.html#375>`_

-

-   `FTW_NS`:idx:

-     `posix.html#371 <posix.html#371>`_

-

-   `FTW_PHYS`:idx:

-     `posix.html#374 <posix.html#374>`_

-

-   `FTW_SL`:idx:

-     `posix.html#372 <posix.html#372>`_

-

-   `FTW_SLN`:idx:

-     `posix.html#373 <posix.html#373>`_

-

-   `F_ULOCK`:idx:

-     `posix.html#499 <posix.html#499>`_

-

-   `functional`:idx:

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

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

-

-   `F_UNLCK`:idx:

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

-

-   `funtions`:idx:

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

-

-   `F_WRLCK`:idx:

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

-

-   `GC_disable`:idx:

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

-

-   `GC_disableMarkAndSweep`:idx:

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

-

-   `GC_enable`:idx:

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

-

-   `GC_enableMarkAndSweep`:idx:

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

-

-   `GC_fullCollect`:idx:

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

-

-   `GC_getStatistics`:idx:

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

-

-   `GC_ref`:idx:

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

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

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

-

-   `GC_setStrategy`:idx:

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

-

-   `GC_unref`:idx:

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

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

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

-

-   `generic character types`:idx:

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

-

-   `Generics`:idx:

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

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

-

-   `getApplicationDir`:idx:

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

-

-   `getApplicationFilename`:idx:

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

-

-   `getClockStr`:idx:

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

-

-   `getColNumber`:idx:

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

-

-   `getColumn`:idx:

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

-

-   `getConfigDir`:idx:

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

-

-   `getcontext`:idx:

-     `posix.html#1188 <posix.html#1188>`_

-

-   `get_crc_table`:idx:

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

-

-   `getCurrentDir`:idx:

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

-

-   `getCurrentExceptionMsg`:idx:

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

-

-   `getCurrentLine`:idx:

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

-

-   `getcwd`:idx:

-     `posix.html#990 <posix.html#990>`_

-

-   `getdate`:idx:

-     `posix.html#1103 <posix.html#1103>`_

-

-   `getDateStr`:idx:

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

-

-   `getegid`:idx:

-     `posix.html#991 <posix.html#991>`_

-

-   `getEnv`:idx:

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

-

-   `geteuid`:idx:

-     `posix.html#992 <posix.html#992>`_

-

-   `getFilename`:idx:

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

-

-   `getFilePos`:idx:

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

-

-   `getFileSize`:idx:

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

-

-   `getFreeMem`:idx:

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

-

-   `getgid`:idx:

-     `posix.html#993 <posix.html#993>`_

-

-   `getGMTime`:idx:

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

-

-   `getgrent`:idx:

-     `posix.html#837 <posix.html#837>`_

-

-   `getgrgid`:idx:

-     `posix.html#833 <posix.html#833>`_

-

-   `getgrgid_r`:idx:

-     `posix.html#835 <posix.html#835>`_

-

-   `getgrnam`:idx:

-     `posix.html#834 <posix.html#834>`_

-

-   `getgrnam_r`:idx:

-     `posix.html#836 <posix.html#836>`_

-

-   `getgroups`:idx:

-     `posix.html#994 <posix.html#994>`_

-

-   `getHomeDir`:idx:

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

-

-   `gethostid`:idx:

-     `posix.html#995 <posix.html#995>`_

-

-   `gethostname`:idx:

-     `posix.html#996 <posix.html#996>`_

-

-   `getLastModificationTime`:idx:

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

-

-   `getLine`:idx:

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

-

-   `getLocalTime`:idx:

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

-

-   `getlogin`:idx:

-     `posix.html#997 <posix.html#997>`_

-

-   `getlogin_r`:idx:

-     `posix.html#998 <posix.html#998>`_

-

-   `getOccupiedMem`:idx:

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

-

-   `getopt`:idx:

-     * `posix.html#999 <posix.html#999>`_

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

-

-   `getpgid`:idx:

-     `posix.html#1000 <posix.html#1000>`_

-

-   `getpgrp`:idx:

-     `posix.html#1001 <posix.html#1001>`_

-

-   `getpid`:idx:

-     `posix.html#1002 <posix.html#1002>`_

-

-   `getppid`:idx:

-     `posix.html#1003 <posix.html#1003>`_

-

-   `getpwent`:idx:

-     `posix.html#864 <posix.html#864>`_

-

-   `getpwnam`:idx:

-     `posix.html#859 <posix.html#859>`_

-

-   `getpwnam_r`:idx:

-     `posix.html#861 <posix.html#861>`_

-

-   `getpwuid`:idx:

-     `posix.html#860 <posix.html#860>`_

-

-   `getpwuid_r`:idx:

-     `posix.html#862 <posix.html#862>`_

-

-   `getRefcount`:idx:

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

-

-   `getRestOfCommandLine`:idx:

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

-

-   `getsid`:idx:

-     `posix.html#1004 <posix.html#1004>`_

-

-   `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#438 <system.html#438>`_

-

-   `getuid`:idx:

-     `posix.html#1005 <posix.html#1005>`_

-

-   `getwd`:idx:

-     `posix.html#1006 <posix.html#1006>`_

-

-   `glob`:idx:

-     `posix.html#831 <posix.html#831>`_

-

-   `GLOB_ABORTED`:idx:

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

-

-   `GLOB_APPEND`:idx:

-     `posix.html#378 <posix.html#378>`_

-

-   `GLOB_DOOFFS`:idx:

-     `posix.html#379 <posix.html#379>`_

-

-   `GLOB_ERR`:idx:

-     `posix.html#380 <posix.html#380>`_

-

-   `globfree`:idx:

-     `posix.html#832 <posix.html#832>`_

-

-   `GLOB_MARK`:idx:

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

-

-   `GLOB_NOCHECK`:idx:

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

-

-   `GLOB_NOESCAPE`:idx:

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

-

-   `GLOB_NOMATCH`:idx:

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

-

-   `GLOB_NOSORT`:idx:

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

-

-   `GLOB_NOSPACE`:idx:

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

-

-   `GLOB_NOSYS`:idx:

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

-

-   `gmtime`:idx:

-     `posix.html#1104 <posix.html#1104>`_

-

-   `gmtime_r`:idx:

-     `posix.html#1105 <posix.html#1105>`_

-

-   `gzclose`:idx:

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

-

-   `gzdopen`:idx:

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

-

-   `gzeof`:idx:

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

-

-   `gzerror`:idx:

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

-

-   `gzFile`:idx:

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

-

-   `gzflush`:idx:

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

-

-   `gzgetc`:idx:

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

-

-   `gzgets`:idx:

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

-

-   `gzopen`:idx:

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

-

-   `gzprintf`:idx:

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

-

-   `gzputc`:idx:

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

-

-   `gzputs`:idx:

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

-

-   `gzread`:idx:

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

-

-   `gzrewind`:idx:

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

-

-   `gzseek`:idx:

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

-

-   `gzsetparams`:idx:

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

-

-   `gztell`:idx:

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

-

-   `gzwrite`:idx:

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

-

-   `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>`_

-

-   `hasKey`:idx:

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

-

-   `header`:idx:

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

-

-   `high`:idx:

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

-

-   `hint`:idx:

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

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

-

-   `hostCPU`:idx:

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

-

-   `hostOS`:idx:

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

-

-   `htonl`:idx:

-     `posix.html#792 <posix.html#792>`_

-

-   `htons`:idx:

-     `posix.html#793 <posix.html#793>`_

-

-   `hypot`:idx:

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

-

-   `iconv`:idx:

-     `posix.html#841 <posix.html#841>`_

-

-   `iconv_close`:idx:

-     `posix.html#842 <posix.html#842>`_

-

-   `iconv_open`:idx:

-     `posix.html#840 <posix.html#840>`_

-

-   `identifier`:idx:

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

-

-   `Identifiers`:idx:

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

-

-   `if`:idx:

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

-

-   `implicit block`:idx:

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

-

-   `import`:idx:

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

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

-

-   `importc`:idx:

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

-

-   `in`:idx:

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

-

-   `inc`:idx:

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

-

-   `incl`:idx:

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

-

-   `include`:idx:

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

-

-   `indentation sensitive`:idx:

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

-

-   `inet_addr`:idx:

-     `posix.html#796 <posix.html#796>`_

-

-   `inet_ntoa`:idx:

-     `posix.html#797 <posix.html#797>`_

-

-   `inet_ntop`:idx:

-     `posix.html#798 <posix.html#798>`_

-

-   `inet_pton`:idx:

-     `posix.html#799 <posix.html#799>`_

-

-   `inf`:idx:

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

-

-   `inflate`:idx:

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

-

-   `inflateEnd`:idx:

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

-

-   `inflateInit`:idx:

-     `zlib.html#179 <zlib.html#179>`_

-

-   `inflateInit2`:idx:

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

-

-   `inflateInit2u`:idx:

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

-

-   `inflateInitu`:idx:

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

-

-   `inflateReset`:idx:

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

-

-   `inflateSetDictionary`:idx:

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

-

-   `inflateSync`:idx:

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

-

-   `inflateSyncPoint`:idx:

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

-

-   `info`:idx:

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

-

-   `information hiding`:idx:

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

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

-

-   `init`:idx:

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

-

-   `inline`:idx:

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

-

-   `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>`_

-

-   `intToStr`:idx:

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

-

-   `IPC_CREAT`:idx:

-     `posix.html#642 <posix.html#642>`_

-

-   `IPC_EXCL`:idx:

-     `posix.html#643 <posix.html#643>`_

-

-   `IPC_NOWAIT`:idx:

-     `posix.html#644 <posix.html#644>`_

-

-   `IPC_PRIVATE`:idx:

-     `posix.html#645 <posix.html#645>`_

-

-   `IPC_RMID`:idx:

-     `posix.html#646 <posix.html#646>`_

-

-   `IPC_SET`:idx:

-     `posix.html#647 <posix.html#647>`_

-

-   `IPC_STAT`:idx:

-     `posix.html#648 <posix.html#648>`_

-

-   `is`:idx:

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

-

-   `isatty`:idx:

-     `posix.html#1007 <posix.html#1007>`_

-

-   `isMainModule`:idx:

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

-

-   `isNil`:idx:

-     * `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>`_

-

-   `is_not`:idx:

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

-

-   `isPowerOfTwo`:idx:

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

-

-   `items`:idx:

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

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

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

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

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

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

-

-   `iterator`:idx:

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

-

-   `iterOverEnvironment`:idx:

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

-

-   `JavaScript`:idx:

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

-

-   `JoinPath`:idx:

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

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

-

-   `keywords`:idx:

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

-

-   `kill`:idx:

-     `posix.html#1123 <posix.html#1123>`_

-

-   `killpg`:idx:

-     `posix.html#1124 <posix.html#1124>`_

-

-   `l-values`:idx:

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

-

-   `lambda`:idx:

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

-

-   `LC_ALL`:idx:

-     `posix.html#444 <posix.html#444>`_

-

-   `LC_COLLATE`:idx:

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

-

-   `LC_CTYPE`:idx:

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

-

-   `lchown`:idx:

-     `posix.html#1008 <posix.html#1008>`_

-

-   `LC_MESSAGES`:idx:

-     `posix.html#447 <posix.html#447>`_

-

-   `LC_MONETARY`:idx:

-     `posix.html#448 <posix.html#448>`_

-

-   `LC_NUMERIC`:idx:

-     `posix.html#449 <posix.html#449>`_

-

-   `LC_TIME`:idx:

-     `posix.html#450 <posix.html#450>`_

-

-   `len`:idx:

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

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

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

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

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

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

-

-   `line feed`:idx:

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

-

-   `line_dir`:idx:

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

-

-   `lines`:idx:

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

-

-   `line_trace`:idx:

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

-

-   `link`:idx:

-     `posix.html#1009 <posix.html#1009>`_

-

-   `lio_listio`:idx:

-     `posix.html#791 <posix.html#791>`_

-

-   `LIO_NOP`:idx:

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

-

-   `LIO_NOWAIT`:idx:

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

-

-   `LIO_READ`:idx:

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

-

-   `LIO_WAIT`:idx:

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

-

-   `LIO_WRITE`:idx:

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

-

-   `Literal strings`:idx:

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

-

-   `ln`:idx:

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

-

-   `local type inference`:idx:

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

-

-   `localeconv`:idx:

-     `posix.html#846 <posix.html#846>`_

-

-   `localtime`:idx:

-     `posix.html#1106 <posix.html#1106>`_

-

-   `localtime_r`:idx:

-     `posix.html#1107 <posix.html#1107>`_

-

-   `locations`:idx:

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

-

-   `lockf`:idx:

-     `posix.html#1010 <posix.html#1010>`_

-

-   `log10`:idx:

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

-

-   `log2`:idx:

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

-

-   `low`:idx:

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

-

-   `lseek`:idx:

-     `posix.html#1011 <posix.html#1011>`_

-

-   `lstat`:idx:

-     `posix.html#1061 <posix.html#1061>`_

-

-   `Macros`:idx:

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

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

-

-   `makecontext`:idx:

-     `posix.html#1189 <posix.html#1189>`_

-

-   `MAP_FAILED`:idx:

-     `posix.html#686 <posix.html#686>`_

-

-   `MAP_FIXED`:idx:

-     `posix.html#680 <posix.html#680>`_

-

-   `MAP_PRIVATE`:idx:

-     `posix.html#679 <posix.html#679>`_

-

-   `MAP_SHARED`:idx:

-     `posix.html#678 <posix.html#678>`_

-

-   `match`:idx:

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

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

-

-   `matchLen`:idx:

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

-

-   `math`:idx:

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

-

-   `max`:idx:

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

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

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

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

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

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

-

-   `MaxSubpatterns`:idx:

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

-

-   `MCL_CURRENT`:idx:

-     `posix.html#684 <posix.html#684>`_

-

-   `MCL_FUTURE`:idx:

-     `posix.html#685 <posix.html#685>`_

-

-   `method call syntax`:idx:

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

-

-   `methods`:idx:

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

-

-   `min`:idx:

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

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

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

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

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

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

-

-   `MINSIGSTKSZ`:idx:

-     `posix.html#766 <posix.html#766>`_

-

-   `mkdir`:idx:

-     `posix.html#1062 <posix.html#1062>`_

-

-   `mkfifo`:idx:

-     `posix.html#1063 <posix.html#1063>`_

-

-   `mknod`:idx:

-     `posix.html#1064 <posix.html#1064>`_

-

-   `mktime`:idx:

-     `posix.html#1108 <posix.html#1108>`_

-

-   `mlock`:idx:

-     `posix.html#1078 <posix.html#1078>`_

-

-   `mlockall`:idx:

-     `posix.html#1079 <posix.html#1079>`_

-

-   `mmap`:idx:

-     `posix.html#1080 <posix.html#1080>`_

-

-   `MM_APPL`:idx:

-     `posix.html#346 <posix.html#346>`_

-

-   `MM_CONSOLE`:idx:

-     `posix.html#357 <posix.html#357>`_

-

-   `MM_ERROR`:idx:

-     `posix.html#352 <posix.html#352>`_

-

-   `MM_FIRM`:idx:

-     `posix.html#345 <posix.html#345>`_

-

-   `MM_HALT`:idx:

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

-

-   `MM_HARD`:idx:

-     `posix.html#343 <posix.html#343>`_

-

-   `MM_INFO`:idx:

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

-

-   `MM_NOCON`:idx:

-     `posix.html#361 <posix.html#361>`_

-

-   `MM_NOMSG`:idx:

-     `posix.html#360 <posix.html#360>`_

-

-   `MM_NOSEV`:idx:

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

-

-   `MM_NOTOK`:idx:

-     `posix.html#359 <posix.html#359>`_

-

-   `MM_NRECOV`:idx:

-     `posix.html#350 <posix.html#350>`_

-

-   `MM_NULLACT`:idx:

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

-

-   `MM_NULLLBL`:idx:

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

-

-   `MM_NULLMC`:idx:

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

-

-   `MM_NULLSEV`:idx:

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

-

-   `MM_NULLTAG`:idx:

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

-

-   `MM_NULLTXT`:idx:

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

-

-   `MM_OK`:idx:

-     `posix.html#358 <posix.html#358>`_

-

-   `MM_OPSYS`:idx:

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

-

-   `MM_PRINT`:idx:

-     `posix.html#356 <posix.html#356>`_

-

-   `MM_RECOVER`:idx:

-     `posix.html#349 <posix.html#349>`_

-

-   `MM_SOFT`:idx:

-     `posix.html#344 <posix.html#344>`_

-

-   `MM_UTIL`:idx:

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

-

-   `MM_WARNING`:idx:

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

-

-   `mod`:idx:

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

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

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

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

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

-

-   `module`:idx:

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

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

-

-   `MON_1`:idx:

-     `posix.html#410 <posix.html#410>`_

-

-   `MON_10`:idx:

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

-

-   `MON_11`:idx:

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

-

-   `MON_12`:idx:

-     `posix.html#421 <posix.html#421>`_

-

-   `MON_2`:idx:

-     `posix.html#411 <posix.html#411>`_

-

-   `MON_3`:idx:

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

-

-   `MON_4`:idx:

-     `posix.html#413 <posix.html#413>`_

-

-   `MON_5`:idx:

-     `posix.html#414 <posix.html#414>`_

-

-   `MON_6`:idx:

-     `posix.html#415 <posix.html#415>`_

-

-   `MON_7`:idx:

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

-

-   `MON_8`:idx:

-     `posix.html#417 <posix.html#417>`_

-

-   `MON_9`:idx:

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

-

-   `moveFile`:idx:

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

-

-   `moveMem`:idx:

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

-

-   `mprotect`:idx:

-     `posix.html#1081 <posix.html#1081>`_

-

-   `mq_close`:idx:

-     `posix.html#849 <posix.html#849>`_

-

-   `mq_getattr`:idx:

-     `posix.html#850 <posix.html#850>`_

-

-   `mq_notify`:idx:

-     `posix.html#851 <posix.html#851>`_

-

-   `mq_open`:idx:

-     `posix.html#852 <posix.html#852>`_

-

-   `mq_receive`:idx:

-     `posix.html#853 <posix.html#853>`_

-

-   `mq_send`:idx:

-     `posix.html#854 <posix.html#854>`_

-

-   `mq_setattr`:idx:

-     `posix.html#855 <posix.html#855>`_

-

-   `mq_timedreceive`:idx:

-     `posix.html#856 <posix.html#856>`_

-

-   `mq_timedsend`:idx:

-     `posix.html#857 <posix.html#857>`_

-

-   `mq_unlink`:idx:

-     `posix.html#858 <posix.html#858>`_

-

-   `MS_ASYNC`:idx:

-     `posix.html#681 <posix.html#681>`_

-

-   `MS_INVALIDATE`:idx:

-     `posix.html#683 <posix.html#683>`_

-

-   `MS_SYNC`:idx:

-     `posix.html#682 <posix.html#682>`_

-

-   `msync`:idx:

-     `posix.html#1082 <posix.html#1082>`_

-

-   `munlock`:idx:

-     `posix.html#1083 <posix.html#1083>`_

-

-   `munlockall`:idx:

-     `posix.html#1084 <posix.html#1084>`_

-

-   `munmap`:idx:

-     `posix.html#1085 <posix.html#1085>`_

-

-   `nan`:idx:

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

-

-   `nanosleep`:idx:

-     `posix.html#1109 <posix.html#1109>`_

-

-   `Natural`:idx:

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

-

-   `neginf`:idx:

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

-

-   `new`:idx:

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

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

-

-   `newFileStream`:idx:

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

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

-

-   `newline`:idx:

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

-

-   `NewLines`:idx:

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

-

-   `newSeq`:idx:

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

-

-   `newString`:idx:

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

-

-   `newStringStream`:idx:

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

-

-   `newStringTable`:idx:

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

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

-

-   `next`:idx:

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

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

-

-   `nextPowerOfTwo`:idx:

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

-

-   `nftw`:idx:

-     `posix.html#830 <posix.html#830>`_

-

-   `nice`:idx:

-     `posix.html#1012 <posix.html#1012>`_

-

-   `nimcall`:idx:

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

-

-   `NimrodMajor`:idx:

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

-

-   `NimrodMinor`:idx:

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

-

-   `NimrodPatch`:idx:

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

-

-   `NimrodVersion`:idx:

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

-

-   `nl`:idx:

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

-

-   `NL_CAT_LOCALE`:idx:

-     `posix.html#769 <posix.html#769>`_

-

-   `nl_langinfo`:idx:

-     `posix.html#843 <posix.html#843>`_

-

-   `NL_SETD`:idx:

-     `posix.html#768 <posix.html#768>`_

-

-   `noconv`:idx:

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

-

-   `no_decl`:idx:

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

-

-   `NOEXPR`:idx:

-     `posix.html#442 <posix.html#442>`_

-

-   `normalize`:idx:

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

-

-   `not`:idx:

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

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

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

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

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

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

-

-   `not_in`:idx:

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

-

-   `ntohl`:idx:

-     `posix.html#794 <posix.html#794>`_

-

-   `ntohs`:idx:

-     `posix.html#795 <posix.html#795>`_

-

-   `Numerical constants`:idx:

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

-

-   `O_ACCMODE`:idx:

-     `posix.html#322 <posix.html#322>`_

-

-   `O_APPEND`:idx:

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

-

-   `object`:idx:

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

-

-   `O_CREAT`:idx:

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

-

-   `ODBC_ADD_DSN`:idx:

-     `odbcsql.html#621 <odbcsql.html#621>`_

-

-   `ODBC_ADD_SYS_DSN`:idx:

-     `odbcsql.html#624 <odbcsql.html#624>`_

-

-   `ODBC_CONFIG_DSN`:idx:

-     `odbcsql.html#622 <odbcsql.html#622>`_

-

-   `ODBC_CONFIG_SYS_DSN`:idx:

-     `odbcsql.html#625 <odbcsql.html#625>`_

-

-   `ODBC_REMOVE_DSN`:idx:

-     `odbcsql.html#623 <odbcsql.html#623>`_

-

-   `ODBC_REMOVE_SYS_DSN`:idx:

-     `odbcsql.html#626 <odbcsql.html#626>`_

-

-   `O_DSYNC`:idx:

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

-

-   `O_EXCL`:idx:

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

-

-   `O_NOCTTY`:idx:

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

-

-   `O_NONBLOCK`:idx:

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

-

-   `open`:idx:

-     * `posix.html#813 <posix.html#813>`_

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

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

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

-

-   `openarray`:idx:

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

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

-

-   `opendir`:idx:

-     `posix.html#801 <posix.html#801>`_

-

-   `OpenFile`:idx:

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

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

-

-   `operator`:idx:

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

-

-   `Operators`:idx:

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

-

-   `or`:idx:

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

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

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

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

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

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

-

-   `ord`:idx:

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

-

-   `ordinal`:idx:

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

-

-   `Ordinal types`:idx:

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

-

-   `O_RDONLY`:idx:

-     `posix.html#323 <posix.html#323>`_

-

-   `O_RDWR`:idx:

-     `posix.html#324 <posix.html#324>`_

-

-   `O_RSYNC`:idx:

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

-

-   `OSError`:idx:

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

-

-   `O_SYNC`:idx:

-     `posix.html#321 <posix.html#321>`_

-

-   `O_TRUNC`:idx:

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

-

-   `O_WRONLY`:idx:

-     `posix.html#325 <posix.html#325>`_

-

-   `pairs`:idx:

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

-

-   `P_ALL`:idx:

-     `posix.html#716 <posix.html#716>`_

-

-   `paramCount`:idx:

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

-

-   `paramStr`:idx:

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

-

-   `ParDir`:idx:

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

-

-   `parentDir`:idx:

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

-

-   `ParseBiggestInt`:idx:

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

-

-   `parseCmdLine`:idx:

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

-

-   `ParseFloat`:idx:

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

-

-   `ParseInt`:idx:

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

-

-   `pathconf`:idx:

-     `posix.html#1013 <posix.html#1013>`_

-

-   `PathSep`:idx:

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

-

-   `pause`:idx:

-     `posix.html#1014 <posix.html#1014>`_

-

-   `pbyte`:idx:

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

-

-   `pbytef`:idx:

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

-

-   `PC_2_SYMLINKS`:idx:

-     `posix.html#500 <posix.html#500>`_

-

-   `PC_ALLOC_SIZE_MIN`:idx:

-     `posix.html#501 <posix.html#501>`_

-

-   `PC_ASYNC_IO`:idx:

-     `posix.html#502 <posix.html#502>`_

-

-   `PC_CHOWN_RESTRICTED`:idx:

-     `posix.html#503 <posix.html#503>`_

-

-   `PC_FILESIZEBITS`:idx:

-     `posix.html#504 <posix.html#504>`_

-

-   `PC_LINK_MAX`:idx:

-     `posix.html#505 <posix.html#505>`_

-

-   `PC_MAX_CANON`:idx:

-     `posix.html#506 <posix.html#506>`_

-

-   `PC_MAX_INPUT`:idx:

-     `posix.html#507 <posix.html#507>`_

-

-   `PC_NAME_MAX`:idx:

-     `posix.html#508 <posix.html#508>`_

-

-   `PC_NO_TRUNC`:idx:

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

-

-   `PC_PATH_MAX`:idx:

-     `posix.html#510 <posix.html#510>`_

-

-   `PC_PIPE_BUF`:idx:

-     `posix.html#511 <posix.html#511>`_

-

-   `PC_PRIO_IO`:idx:

-     `posix.html#512 <posix.html#512>`_

-

-   `PC_REC_INCR_XFER_SIZE`:idx:

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

-

-   `PC_REC_MIN_XFER_SIZE`:idx:

-     `posix.html#514 <posix.html#514>`_

-

-   `PC_REC_XFER_ALIGN`:idx:

-     `posix.html#515 <posix.html#515>`_

-

-   `PC_SYMLINK_MAX`:idx:

-     `posix.html#516 <posix.html#516>`_

-

-   `PC_SYNC_IO`:idx:

-     `posix.html#517 <posix.html#517>`_

-

-   `PC_VDISABLE`:idx:

-     `posix.html#518 <posix.html#518>`_

-

-   `PFileStream`:idx:

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

-

-   `PFloat32`:idx:

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

-

-   `PFloat64`:idx:

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

-

-   `PI`:idx:

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

-

-   `PInt32`:idx:

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

-

-   `PInt64`:idx:

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

-

-   `PInternalState`:idx:

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

-

-   `pipe`:idx:

-     `posix.html#1015 <posix.html#1015>`_

-

-   `PM_STR`:idx:

-     `posix.html#395 <posix.html#395>`_

-

-   `PObject`:idx:

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

-

-   `pointer`:idx:

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

-

-   `pointers`:idx:

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

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

-

-   `Positive`:idx:

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

-

-   `POSIX_ASYNC_IO`:idx:

-     `posix.html#475 <posix.html#475>`_

-

-   `POSIX_FADV_DONTNEED`:idx:

-     `posix.html#330 <posix.html#330>`_

-

-   `posix_fadvise`:idx:

-     `posix.html#814 <posix.html#814>`_

-

-   `POSIX_FADV_NOREUSE`:idx:

-     `posix.html#331 <posix.html#331>`_

-

-   `POSIX_FADV_NORMAL`:idx:

-     `posix.html#326 <posix.html#326>`_

-

-   `POSIX_FADV_RANDOM`:idx:

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

-

-   `POSIX_FADV_SEQUENTIAL`:idx:

-     `posix.html#327 <posix.html#327>`_

-

-   `POSIX_FADV_WILLNEED`:idx:

-     `posix.html#329 <posix.html#329>`_

-

-   `posix_fallocate`:idx:

-     `posix.html#815 <posix.html#815>`_

-

-   `POSIX_MADV_DONTNEED`:idx:

-     `posix.html#691 <posix.html#691>`_

-

-   `posix_madvise`:idx:

-     `posix.html#1086 <posix.html#1086>`_

-

-   `POSIX_MADV_NORMAL`:idx:

-     `posix.html#687 <posix.html#687>`_

-

-   `POSIX_MADV_RANDOM`:idx:

-     `posix.html#689 <posix.html#689>`_

-

-   `POSIX_MADV_SEQUENTIAL`:idx:

-     `posix.html#688 <posix.html#688>`_

-

-   `POSIX_MADV_WILLNEED`:idx:

-     `posix.html#690 <posix.html#690>`_

-

-   `posix_mem_offset`:idx:

-     `posix.html#1087 <posix.html#1087>`_

-

-   `POSIX_PRIO_IO`:idx:

-     `posix.html#476 <posix.html#476>`_

-

-   `posix_spawn`:idx:

-     `posix.html#1167 <posix.html#1167>`_

-

-   `posix_spawnattr_destroy`:idx:

-     `posix.html#1173 <posix.html#1173>`_

-

-   `posix_spawnattr_getflags`:idx:

-     `posix.html#1175 <posix.html#1175>`_

-

-   `posix_spawnattr_getpgroup`:idx:

-     `posix.html#1176 <posix.html#1176>`_

-

-   `posix_spawnattr_getschedparam`:idx:

-     `posix.html#1177 <posix.html#1177>`_

-

-   `posix_spawnattr_getschedpolicy`:idx:

-     `posix.html#1178 <posix.html#1178>`_

-

-   `posix_spawnattr_getsigdefault`:idx:

-     `posix.html#1174 <posix.html#1174>`_

-

-   `posix_spawnattr_getsigmask`:idx:

-     `posix.html#1179 <posix.html#1179>`_

-

-   `posix_spawnattr_init`:idx:

-     `posix.html#1180 <posix.html#1180>`_

-

-   `posix_spawnattr_setflags`:idx:

-     `posix.html#1182 <posix.html#1182>`_

-

-   `posix_spawnattr_setpgroup`:idx:

-     `posix.html#1183 <posix.html#1183>`_

-

-   `posix_spawnattr_setschedparam`:idx:

-     `posix.html#1184 <posix.html#1184>`_

-

-   `posix_spawnattr_setschedpolicy`:idx:

-     `posix.html#1185 <posix.html#1185>`_

-

-   `posix_spawnattr_setsigdefault`:idx:

-     `posix.html#1181 <posix.html#1181>`_

-

-   `posix_spawnattr_setsigmask`:idx:

-     `posix.html#1186 <posix.html#1186>`_

-

-   `posix_spawn_file_actions_addclose`:idx:

-     `posix.html#1168 <posix.html#1168>`_

-

-   `posix_spawn_file_actions_adddup2`:idx:

-     `posix.html#1169 <posix.html#1169>`_

-

-   `posix_spawn_file_actions_addopen`:idx:

-     `posix.html#1170 <posix.html#1170>`_

-

-   `posix_spawn_file_actions_destroy`:idx:

-     `posix.html#1171 <posix.html#1171>`_

-

-   `posix_spawn_file_actions_init`:idx:

-     `posix.html#1172 <posix.html#1172>`_

-

-   `posix_spawnp`:idx:

-     `posix.html#1187 <posix.html#1187>`_

-

-   `POSIX_SPAWN_RESETIDS`:idx:

-     `posix.html#778 <posix.html#778>`_

-

-   `POSIX_SPAWN_SETPGROUP`:idx:

-     `posix.html#779 <posix.html#779>`_

-

-   `POSIX_SPAWN_SETSCHEDPARAM`:idx:

-     `posix.html#780 <posix.html#780>`_

-

-   `POSIX_SPAWN_SETSCHEDULER`:idx:

-     `posix.html#781 <posix.html#781>`_

-

-   `POSIX_SPAWN_SETSIGDEF`:idx:

-     `posix.html#782 <posix.html#782>`_

-

-   `POSIX_SPAWN_SETSIGMASK`:idx:

-     `posix.html#783 <posix.html#783>`_

-

-   `POSIX_SYNC_IO`:idx:

-     `posix.html#477 <posix.html#477>`_

-

-   `POSIX_TYPED_MEM_ALLOCATE`:idx:

-     `posix.html#692 <posix.html#692>`_

-

-   `POSIX_TYPED_MEM_ALLOCATE_CONTIG`:idx:

-     `posix.html#693 <posix.html#693>`_

-

-   `posix_typed_mem_get_info`:idx:

-     `posix.html#1088 <posix.html#1088>`_

-

-   `POSIX_TYPED_MEM_MAP_ALLOCATABLE`:idx:

-     `posix.html#694 <posix.html#694>`_

-

-   `posix_typed_mem_open`:idx:

-     `posix.html#1089 <posix.html#1089>`_

-

-   `pow`:idx:

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

-

-   `P_PGID`:idx:

-     `posix.html#718 <posix.html#718>`_

-

-   `P_PID`:idx:

-     `posix.html#717 <posix.html#717>`_

-

-   `pread`:idx:

-     `posix.html#1016 <posix.html#1016>`_

-

-   `pred`:idx:

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

-

-   `procedural type`:idx:

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

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

-

-   `procedures`:idx:

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

-

-   `PROT_EXEC`:idx:

-     `posix.html#676 <posix.html#676>`_

-

-   `PROT_NONE`:idx:

-     `posix.html#677 <posix.html#677>`_

-

-   `PROT_READ`:idx:

-     `posix.html#674 <posix.html#674>`_

-

-   `PROT_WRITE`:idx:

-     `posix.html#675 <posix.html#675>`_

-

-   `pselect`:idx:

-     `posix.html#1165 <posix.html#1165>`_

-

-   `PSQLCHAR`:idx:

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

-

-   `PSQL_DATE_STRUCT`:idx:

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

-

-   `PSQLDOUBLE`:idx:

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

-

-   `PSQLFLOAT`:idx:

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

-

-   `PSQLHANDLE`:idx:

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

-

-   `PSQLINTEGER`:idx:

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

-

-   `PSQLREAL`:idx:

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

-

-   `PSQLSMALLINT`:idx:

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

-

-   `PSQL_TIMESTAMP_STRUCT`:idx:

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

-

-   `PSQL_TIME_STRUCT`:idx:

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

-

-   `PSQLUINTEGER`:idx:

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

-

-   `PSQLUSMALLINT`:idx:

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

-

-   `PStream`:idx:

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

-

-   `PStringStream`:idx:

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

-

-   `PStringTable`:idx:

-     `strtabs.html#103 <strtabs.html#103>`_

-

-   `pthread_atfork`:idx:

-     `posix.html#867 <posix.html#867>`_

-

-   `pthread_attr_destroy`:idx:

-     `posix.html#868 <posix.html#868>`_

-

-   `pthread_attr_getdetachstate`:idx:

-     `posix.html#869 <posix.html#869>`_

-

-   `pthread_attr_getguardsize`:idx:

-     `posix.html#870 <posix.html#870>`_

-

-   `pthread_attr_getinheritsched`:idx:

-     `posix.html#871 <posix.html#871>`_

-

-   `pthread_attr_getschedparam`:idx:

-     `posix.html#872 <posix.html#872>`_

-

-   `pthread_attr_getschedpolicy`:idx:

-     `posix.html#873 <posix.html#873>`_

-

-   `pthread_attr_getscope`:idx:

-     `posix.html#874 <posix.html#874>`_

-

-   `pthread_attr_getstack`:idx:

-     `posix.html#875 <posix.html#875>`_

-

-   `pthread_attr_getstackaddr`:idx:

-     `posix.html#876 <posix.html#876>`_

-

-   `pthread_attr_getstacksize`:idx:

-     `posix.html#877 <posix.html#877>`_

-

-   `pthread_attr_init`:idx:

-     `posix.html#878 <posix.html#878>`_

-

-   `pthread_attr_setdetachstate`:idx:

-     `posix.html#879 <posix.html#879>`_

-

-   `pthread_attr_setguardsize`:idx:

-     `posix.html#880 <posix.html#880>`_

-

-   `pthread_attr_setinheritsched`:idx:

-     `posix.html#881 <posix.html#881>`_

-

-   `pthread_attr_setschedparam`:idx:

-     `posix.html#882 <posix.html#882>`_

-

-   `pthread_attr_setschedpolicy`:idx:

-     `posix.html#883 <posix.html#883>`_

-

-   `pthread_attr_setscope`:idx:

-     `posix.html#884 <posix.html#884>`_

-

-   `pthread_attr_setstack`:idx:

-     `posix.html#885 <posix.html#885>`_

-

-   `pthread_attr_setstackaddr`:idx:

-     `posix.html#886 <posix.html#886>`_

-

-   `pthread_attr_setstacksize`:idx:

-     `posix.html#887 <posix.html#887>`_

-

-   `pthread_barrierattr_destroy`:idx:

-     `posix.html#891 <posix.html#891>`_

-

-   `pthread_barrierattr_getpshared`:idx:

-     `posix.html#892 <posix.html#892>`_

-

-   `pthread_barrierattr_init`:idx:

-     `posix.html#893 <posix.html#893>`_

-

-   `pthread_barrierattr_setpshared`:idx:

-     `posix.html#894 <posix.html#894>`_

-

-   `pthread_barrier_destroy`:idx:

-     `posix.html#888 <posix.html#888>`_

-

-   `pthread_barrier_init`:idx:

-     `posix.html#889 <posix.html#889>`_

-

-   `PTHREAD_BARRIER_SERIAL_THREAD`:idx:

-     `posix.html#451 <posix.html#451>`_

-

-   `pthread_barrier_wait`:idx:

-     `posix.html#890 <posix.html#890>`_

-

-   `pthread_cancel`:idx:

-     `posix.html#895 <posix.html#895>`_

-

-   `PTHREAD_CANCEL_ASYNCHRONOUS`:idx:

-     `posix.html#452 <posix.html#452>`_

-

-   `PTHREAD_CANCEL_DEFERRED`:idx:

-     `posix.html#454 <posix.html#454>`_

-

-   `PTHREAD_CANCEL_DISABLE`:idx:

-     `posix.html#455 <posix.html#455>`_

-

-   `PTHREAD_CANCELED`:idx:

-     `posix.html#456 <posix.html#456>`_

-

-   `PTHREAD_CANCEL_ENABLE`:idx:

-     `posix.html#453 <posix.html#453>`_

-

-   `pthread_cleanup_pop`:idx:

-     `posix.html#897 <posix.html#897>`_

-

-   `pthread_cleanup_push`:idx:

-     `posix.html#896 <posix.html#896>`_

-

-   `pthread_condattr_destroy`:idx:

-     `posix.html#904 <posix.html#904>`_

-

-   `pthread_condattr_getclock`:idx:

-     `posix.html#905 <posix.html#905>`_

-

-   `pthread_condattr_getpshared`:idx:

-     `posix.html#906 <posix.html#906>`_

-

-   `pthread_condattr_init`:idx:

-     `posix.html#907 <posix.html#907>`_

-

-   `pthread_condattr_setclock`:idx:

-     `posix.html#908 <posix.html#908>`_

-

-   `pthread_condattr_setpshared`:idx:

-     `posix.html#909 <posix.html#909>`_

-

-   `pthread_cond_broadcast`:idx:

-     `posix.html#898 <posix.html#898>`_

-

-   `pthread_cond_destroy`:idx:

-     `posix.html#899 <posix.html#899>`_

-

-   `pthread_cond_init`:idx:

-     `posix.html#900 <posix.html#900>`_

-

-   `PTHREAD_COND_INITIALIZER`:idx:

-     `posix.html#457 <posix.html#457>`_

-

-   `pthread_cond_signal`:idx:

-     `posix.html#901 <posix.html#901>`_

-

-   `pthread_cond_timedwait`:idx:

-     `posix.html#902 <posix.html#902>`_

-

-   `pthread_cond_wait`:idx:

-     `posix.html#903 <posix.html#903>`_

-

-   `pthread_create`:idx:

-     `posix.html#910 <posix.html#910>`_

-

-   `PTHREAD_CREATE_DETACHED`:idx:

-     `posix.html#458 <posix.html#458>`_

-

-   `PTHREAD_CREATE_JOINABLE`:idx:

-     `posix.html#459 <posix.html#459>`_

-

-   `pthread_detach`:idx:

-     `posix.html#911 <posix.html#911>`_

-

-   `pthread_equal`:idx:

-     `posix.html#912 <posix.html#912>`_

-

-   `pthread_exit`:idx:

-     `posix.html#913 <posix.html#913>`_

-

-   `PTHREAD_EXPLICIT_SCHED`:idx:

-     `posix.html#460 <posix.html#460>`_

-

-   `pthread_getconcurrency`:idx:

-     `posix.html#914 <posix.html#914>`_

-

-   `pthread_getcpuclockid`:idx:

-     `posix.html#915 <posix.html#915>`_

-

-   `pthread_getschedparam`:idx:

-     `posix.html#916 <posix.html#916>`_

-

-   `pthread_getspecific`:idx:

-     `posix.html#917 <posix.html#917>`_

-

-   `PTHREAD_INHERIT_SCHED`:idx:

-     `posix.html#461 <posix.html#461>`_

-

-   `pthread_join`:idx:

-     `posix.html#918 <posix.html#918>`_

-

-   `pthread_key_create`:idx:

-     `posix.html#919 <posix.html#919>`_

-

-   `pthread_key_delete`:idx:

-     `posix.html#920 <posix.html#920>`_

-

-   `pthread_kill`:idx:

-     `posix.html#1125 <posix.html#1125>`_

-

-   `pthread_mutexattr_destroy`:idx:

-     `posix.html#929 <posix.html#929>`_

-

-   `pthread_mutexattr_getprioceiling`:idx:

-     `posix.html#930 <posix.html#930>`_

-

-   `pthread_mutexattr_getprotocol`:idx:

-     `posix.html#931 <posix.html#931>`_

-

-   `pthread_mutexattr_getpshared`:idx:

-     `posix.html#932 <posix.html#932>`_

-

-   `pthread_mutexattr_gettype`:idx:

-     `posix.html#933 <posix.html#933>`_

-

-   `pthread_mutexattr_init`:idx:

-     `posix.html#934 <posix.html#934>`_

-

-   `pthread_mutexattr_setprioceiling`:idx:

-     `posix.html#935 <posix.html#935>`_

-

-   `pthread_mutexattr_setprotocol`:idx:

-     `posix.html#936 <posix.html#936>`_

-

-   `pthread_mutexattr_setpshared`:idx:

-     `posix.html#937 <posix.html#937>`_

-

-   `pthread_mutexattr_settype`:idx:

-     `posix.html#938 <posix.html#938>`_

-

-   `PTHREAD_MUTEX_DEFAULT`:idx:

-     `posix.html#462 <posix.html#462>`_

-

-   `pthread_mutex_destroy`:idx:

-     `posix.html#921 <posix.html#921>`_

-

-   `PTHREAD_MUTEX_ERRORCHECK`:idx:

-     `posix.html#463 <posix.html#463>`_

-

-   `pthread_mutex_getprioceiling`:idx:

-     `posix.html#922 <posix.html#922>`_

-

-   `pthread_mutex_init`:idx:

-     `posix.html#923 <posix.html#923>`_

-

-   `PTHREAD_MUTEX_INITIALIZER`:idx:

-     `posix.html#464 <posix.html#464>`_

-

-   `pthread_mutex_lock`:idx:

-     `posix.html#924 <posix.html#924>`_

-

-   `PTHREAD_MUTEX_NORMAL`:idx:

-     `posix.html#465 <posix.html#465>`_

-

-   `PTHREAD_MUTEX_RECURSIVE`:idx:

-     `posix.html#466 <posix.html#466>`_

-

-   `pthread_mutex_setprioceiling`:idx:

-     `posix.html#925 <posix.html#925>`_

-

-   `pthread_mutex_timedlock`:idx:

-     `posix.html#926 <posix.html#926>`_

-

-   `pthread_mutex_trylock`:idx:

-     `posix.html#927 <posix.html#927>`_

-

-   `pthread_mutex_unlock`:idx:

-     `posix.html#928 <posix.html#928>`_

-

-   `pthread_once`:idx:

-     `posix.html#939 <posix.html#939>`_

-

-   `PTHREAD_ONCE_INIT`:idx:

-     `posix.html#467 <posix.html#467>`_

-

-   `PTHREAD_PRIO_INHERIT`:idx:

-     `posix.html#468 <posix.html#468>`_

-

-   `PTHREAD_PRIO_NONE`:idx:

-     `posix.html#469 <posix.html#469>`_

-

-   `PTHREAD_PRIO_PROTECT`:idx:

-     `posix.html#470 <posix.html#470>`_

-

-   `PTHREAD_PROCESS_PRIVATE`:idx:

-     `posix.html#472 <posix.html#472>`_

-

-   `PTHREAD_PROCESS_SHARED`:idx:

-     `posix.html#471 <posix.html#471>`_

-

-   `pthread_rwlockattr_destroy`:idx:

-     `posix.html#949 <posix.html#949>`_

-

-   `pthread_rwlockattr_getpshared`:idx:

-     `posix.html#950 <posix.html#950>`_

-

-   `pthread_rwlockattr_init`:idx:

-     `posix.html#951 <posix.html#951>`_

-

-   `pthread_rwlockattr_setpshared`:idx:

-     `posix.html#952 <posix.html#952>`_

-

-   `pthread_rwlock_destroy`:idx:

-     `posix.html#940 <posix.html#940>`_

-

-   `pthread_rwlock_init`:idx:

-     `posix.html#941 <posix.html#941>`_

-

-   `pthread_rwlock_rdlock`:idx:

-     `posix.html#942 <posix.html#942>`_

-

-   `pthread_rwlock_timedrdlock`:idx:

-     `posix.html#943 <posix.html#943>`_

-

-   `pthread_rwlock_timedwrlock`:idx:

-     `posix.html#944 <posix.html#944>`_

-

-   `pthread_rwlock_tryrdlock`:idx:

-     `posix.html#945 <posix.html#945>`_

-

-   `pthread_rwlock_trywrlock`:idx:

-     `posix.html#946 <posix.html#946>`_

-

-   `pthread_rwlock_unlock`:idx:

-     `posix.html#947 <posix.html#947>`_

-

-   `pthread_rwlock_wrlock`:idx:

-     `posix.html#948 <posix.html#948>`_

-

-   `PTHREAD_SCOPE_PROCESS`:idx:

-     `posix.html#473 <posix.html#473>`_

-

-   `PTHREAD_SCOPE_SYSTEM`:idx:

-     `posix.html#474 <posix.html#474>`_

-

-   `pthread_self`:idx:

-     `posix.html#953 <posix.html#953>`_

-

-   `pthread_setcancelstate`:idx:

-     `posix.html#954 <posix.html#954>`_

-

-   `pthread_setcanceltype`:idx:

-     `posix.html#955 <posix.html#955>`_

-

-   `pthread_setconcurrency`:idx:

-     `posix.html#956 <posix.html#956>`_

-

-   `pthread_setschedparam`:idx:

-     `posix.html#957 <posix.html#957>`_

-

-   `pthread_setschedprio`:idx:

-     `posix.html#958 <posix.html#958>`_

-

-   `pthread_setspecific`:idx:

-     `posix.html#959 <posix.html#959>`_

-

-   `pthread_sigmask`:idx:

-     `posix.html#1126 <posix.html#1126>`_

-

-   `pthread_spin_destroy`:idx:

-     `posix.html#960 <posix.html#960>`_

-

-   `pthread_spin_init`:idx:

-     `posix.html#961 <posix.html#961>`_

-

-   `pthread_spin_lock`:idx:

-     `posix.html#962 <posix.html#962>`_

-

-   `pthread_spin_trylock`:idx:

-     `posix.html#963 <posix.html#963>`_

-

-   `pthread_spin_unlock`:idx:

-     `posix.html#964 <posix.html#964>`_

-

-   `pthread_testcancel`:idx:

-     `posix.html#965 <posix.html#965>`_

-

-   `Pulongf`:idx:

-     `zlib.html#104 <zlib.html#104>`_

-

-   `push/pop`:idx:

-     `manual.html#228 <manual.html#228>`_

-

-   `putEnv`:idx:

-     `os.html#142 <os.html#142>`_

-

-   `PWindow`:idx:

-     `dialogs.html#101 <dialogs.html#101>`_

-

-   `pwrite`:idx:

-     `posix.html#1017 <posix.html#1017>`_

-

-   `Pzip`:idx:

-     `libzip.html#105 <libzip.html#105>`_

-

-   `Pzip_file`:idx:

-     `libzip.html#106 <libzip.html#106>`_

-

-   `PZipFileStream`:idx:

-     `zipfiles.html#108 <zipfiles.html#108>`_

-

-   `Pzip_source`:idx:

-     `libzip.html#107 <libzip.html#107>`_

-

-   `Pzip_stat`:idx:

-     `libzip.html#103 <libzip.html#103>`_

-

-   `PZstream`:idx:

-     `zlib.html#114 <zlib.html#114>`_

-

-   `quit`:idx:

-     * `system.html#478 <system.html#478>`_

-     * `system.html#479 <system.html#479>`_

-

-   `QuitFailure`:idx:

-     `system.html#477 <system.html#477>`_

-

-   `QuitSuccess`:idx:

-     `system.html#476 <system.html#476>`_

-

-   `quotation mark`:idx:

-     `manual.html#128 <manual.html#128>`_

-

-   `quoteIfContainsWhite`:idx:

-     `strutils.html#140 <strutils.html#140>`_

-

-   `RADIXCHAR`:idx:

-     `posix.html#439 <posix.html#439>`_

-

-   `raise`:idx:

-     `posix.html#1127 <posix.html#1127>`_

-

-   `random`:idx:

-     `math.html#108 <math.html#108>`_

-

-   `randomize`:idx:

-     `math.html#109 <math.html#109>`_

-

-   `range`:idx:

-     `system.html#123 <system.html#123>`_

-

-   `re-raised`:idx:

-     `manual.html#183 <manual.html#183>`_

-

-   `read`:idx:

-     `posix.html#1018 <posix.html#1018>`_

-

-   `readBool`:idx:

-     `streams.html#106 <streams.html#106>`_

-

-   `readBuffer`:idx:

-     `system.html#506 <system.html#506>`_

-

-   `ReadBytes`:idx:

-     `system.html#504 <system.html#504>`_

-

-   `readChar`:idx:

-     * `system.html#490 <system.html#490>`_

-     * `streams.html#105 <streams.html#105>`_

-

-   `ReadChars`:idx:

-     `system.html#505 <system.html#505>`_

-

-   `readdir`:idx:

-     `posix.html#802 <posix.html#802>`_

-

-   `readdir_r`:idx:

-     `posix.html#803 <posix.html#803>`_

-

-   `readFile`:idx:

-     `system.html#492 <system.html#492>`_

-

-   `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#500 <system.html#500>`_

-     * `streams.html#114 <streams.html#114>`_

-

-   `readlink`:idx:

-     `posix.html#1019 <posix.html#1019>`_

-

-   `readStr`:idx:

-     `streams.html#113 <streams.html#113>`_

-

-   `realloc`:idx:

-     `system.html#415 <system.html#415>`_

-

-   `Recursive module dependancies`:idx:

-     `manual.html#216 <manual.html#216>`_

-

-   `register`:idx:

-     `nimrodc.html#112 <nimrodc.html#112>`_

-

-   `removeDir`:idx:

-     `os.html#137 <os.html#137>`_

-

-   `removeFile`:idx:

-     `os.html#136 <os.html#136>`_

-

-   `repeatChar`:idx:

-     `strutils.html#136 <strutils.html#136>`_

-

-   `replaceStr`:idx:

-     * `strutils.html#115 <strutils.html#115>`_

-     * `strutils.html#116 <strutils.html#116>`_

-

-   `repr`:idx:

-     `system.html#371 <system.html#371>`_

-

-   `result`:idx:

-     * `manual.html#190 <manual.html#190>`_

-     * `manual.html#201 <manual.html#201>`_

-

-   `return`:idx:

-     `manual.html#189 <manual.html#189>`_

-

-   `rewinddir`:idx:

-     `posix.html#804 <posix.html#804>`_

-

-   `rmdir`:idx:

-     `posix.html#1020 <posix.html#1020>`_

-

-   `R_OK`:idx:

-     `posix.html#479 <posix.html#479>`_

-

-   `round`:idx:

-     `math.html#116 <math.html#116>`_

-

-   `RTLD_GLOBAL`:idx:

-     `posix.html#217 <posix.html#217>`_

-

-   `RTLD_LAZY`:idx:

-     `posix.html#215 <posix.html#215>`_

-

-   `RTLD_LOCAL`:idx:

-     `posix.html#218 <posix.html#218>`_

-

-   `RTLD_NOW`:idx:

-     `posix.html#216 <posix.html#216>`_

-

-   `safe`:idx:

-     `manual.html#112 <manual.html#112>`_

-

-   `safecall`:idx:

-     `manual.html#166 <manual.html#166>`_

-

-   `sameFile`:idx:

-     `os.html#148 <os.html#148>`_

-

-   `sameFileContent`:idx:

-     `os.html#149 <os.html#149>`_

-

-   `SA_NOCLDSTOP`:idx:

-     `posix.html#754 <posix.html#754>`_

-

-   `SA_NOCLDWAIT`:idx:

-     `posix.html#762 <posix.html#762>`_

-

-   `SA_NODEFER`:idx:

-     `posix.html#763 <posix.html#763>`_

-

-   `SA_ONSTACK`:idx:

-     `posix.html#758 <posix.html#758>`_

-

-   `SA_RESETHAND`:idx:

-     `posix.html#759 <posix.html#759>`_

-

-   `SA_RESTART`:idx:

-     `posix.html#760 <posix.html#760>`_

-

-   `SA_SIGINFO`:idx:

-     `posix.html#761 <posix.html#761>`_

-

-   `SC_2_C_BIND`:idx:

-     `posix.html#519 <posix.html#519>`_

-

-   `SC_2_C_DEV`:idx:

-     `posix.html#520 <posix.html#520>`_

-

-   `SC_2_CHAR_TERM`:idx:

-     `posix.html#521 <posix.html#521>`_

-

-   `SC_2_FORT_DEV`:idx:

-     `posix.html#522 <posix.html#522>`_

-

-   `SC_2_FORT_RUN`:idx:

-     `posix.html#523 <posix.html#523>`_

-

-   `SC_2_LOCALEDEF`:idx:

-     `posix.html#524 <posix.html#524>`_

-

-   `SC_2_PBS`:idx:

-     `posix.html#525 <posix.html#525>`_

-

-   `SC_2_PBS_ACCOUNTING`:idx:

-     `posix.html#526 <posix.html#526>`_

-

-   `SC_2_PBS_CHECKPOINT`:idx:

-     `posix.html#527 <posix.html#527>`_

-

-   `SC_2_PBS_LOCATE`:idx:

-     `posix.html#528 <posix.html#528>`_

-

-   `SC_2_PBS_MESSAGE`:idx:

-     `posix.html#529 <posix.html#529>`_

-

-   `SC_2_PBS_TRACK`:idx:

-     `posix.html#530 <posix.html#530>`_

-

-   `SC_2_SW_DEV`:idx:

-     `posix.html#531 <posix.html#531>`_

-

-   `SC_2_UPE`:idx:

-     `posix.html#532 <posix.html#532>`_

-

-   `SC_2_VERSION`:idx:

-     `posix.html#533 <posix.html#533>`_

-

-   `SC_ADVISORY_INFO`:idx:

-     `posix.html#534 <posix.html#534>`_

-

-   `SC_AIO_LISTIO_MAX`:idx:

-     `posix.html#535 <posix.html#535>`_

-

-   `SC_AIO_MAX`:idx:

-     `posix.html#536 <posix.html#536>`_

-

-   `SC_AIO_PRIO_DELTA_MAX`:idx:

-     `posix.html#537 <posix.html#537>`_

-

-   `SC_ARG_MAX`:idx:

-     `posix.html#538 <posix.html#538>`_

-

-   `SC_ASYNCHRONOUS_IO`:idx:

-     `posix.html#539 <posix.html#539>`_

-

-   `SC_ATEXIT_MAX`:idx:

-     `posix.html#540 <posix.html#540>`_

-

-   `SC_BARRIERS`:idx:

-     `posix.html#541 <posix.html#541>`_

-

-   `SC_BC_BASE_MAX`:idx:

-     `posix.html#542 <posix.html#542>`_

-

-   `SC_BC_DIM_MAX`:idx:

-     `posix.html#543 <posix.html#543>`_

-

-   `SC_BC_SCALE_MAX`:idx:

-     `posix.html#544 <posix.html#544>`_

-

-   `SC_BC_STRING_MAX`:idx:

-     `posix.html#545 <posix.html#545>`_

-

-   `SC_CHILD_MAX`:idx:

-     `posix.html#546 <posix.html#546>`_

-

-   `SC_CLK_TCK`:idx:

-     `posix.html#547 <posix.html#547>`_

-

-   `SC_CLOCK_SELECTION`:idx:

-     `posix.html#548 <posix.html#548>`_

-

-   `SC_COLL_WEIGHTS_MAX`:idx:

-     `posix.html#549 <posix.html#549>`_

-

-   `SC_CPUTIME`:idx:

-     `posix.html#550 <posix.html#550>`_

-

-   `SC_DELAYTIMER_MAX`:idx:

-     `posix.html#551 <posix.html#551>`_

-

-   `SC_EXPR_NEST_MAX`:idx:

-     `posix.html#552 <posix.html#552>`_

-

-   `SC_FSYNC`:idx:

-     `posix.html#553 <posix.html#553>`_

-

-   `SC_GETGR_R_SIZE_MAX`:idx:

-     `posix.html#554 <posix.html#554>`_

-

-   `SC_GETPW_R_SIZE_MAX`:idx:

-     `posix.html#555 <posix.html#555>`_

-

-   `SCHED_FIFO`:idx:

-     `posix.html#770 <posix.html#770>`_

-

-   `sched_getparam`:idx:

-     `posix.html#1154 <posix.html#1154>`_

-

-   `sched_get_priority_max`:idx:

-     `posix.html#1152 <posix.html#1152>`_

-

-   `sched_get_priority_min`:idx:

-     `posix.html#1153 <posix.html#1153>`_

-

-   `sched_getscheduler`:idx:

-     `posix.html#1155 <posix.html#1155>`_

-

-   `SCHED_OTHER`:idx:

-     `posix.html#773 <posix.html#773>`_

-

-   `SCHED_RR`:idx:

-     `posix.html#771 <posix.html#771>`_

-

-   `sched_rr_get_interval`:idx:

-     `posix.html#1156 <posix.html#1156>`_

-

-   `sched_setparam`:idx:

-     `posix.html#1157 <posix.html#1157>`_

-

-   `sched_setscheduler`:idx:

-     `posix.html#1158 <posix.html#1158>`_

-

-   `SCHED_SPORADIC`:idx:

-     `posix.html#772 <posix.html#772>`_

-

-   `sched_yield`:idx:

-     `posix.html#1159 <posix.html#1159>`_

-

-   `SC_HOST_NAME_MAX`:idx:

-     `posix.html#556 <posix.html#556>`_

-

-   `SC_IOV_MAX`:idx:

-     `posix.html#557 <posix.html#557>`_

-

-   `SC_IPV6`:idx:

-     `posix.html#558 <posix.html#558>`_

-

-   `SC_JOB_CONTROL`:idx:

-     `posix.html#559 <posix.html#559>`_

-

-   `SC_LINE_MAX`:idx:

-     `posix.html#560 <posix.html#560>`_

-

-   `SC_LOGIN_NAME_MAX`:idx:

-     `posix.html#561 <posix.html#561>`_

-

-   `SC_MAPPED_FILES`:idx:

-     `posix.html#562 <posix.html#562>`_

-

-   `SC_MEMLOCK`:idx:

-     `posix.html#563 <posix.html#563>`_

-

-   `SC_MEMLOCK_RANGE`:idx:

-     `posix.html#564 <posix.html#564>`_

-

-   `SC_MEMORY_PROTECTION`:idx:

-     `posix.html#565 <posix.html#565>`_

-

-   `SC_MESSAGE_PASSING`:idx:

-     `posix.html#566 <posix.html#566>`_

-

-   `SC_MONOTONIC_CLOCK`:idx:

-     `posix.html#567 <posix.html#567>`_

-

-   `SC_MQ_OPEN_MAX`:idx:

-     `posix.html#568 <posix.html#568>`_

-

-   `SC_MQ_PRIO_MAX`:idx:

-     `posix.html#569 <posix.html#569>`_

-

-   `SC_NGROUPS_MAX`:idx:

-     `posix.html#570 <posix.html#570>`_

-

-   `scope`:idx:

-     * `manual.html#106 <manual.html#106>`_

-     * `manual.html#217 <manual.html#217>`_

-

-   `SC_OPEN_MAX`:idx:

-     `posix.html#571 <posix.html#571>`_

-

-   `SC_PAGE_SIZE`:idx:

-     `posix.html#572 <posix.html#572>`_

-

-   `SC_PRIORITIZED_IO`:idx:

-     `posix.html#573 <posix.html#573>`_

-

-   `SC_PRIORITY_SCHEDULING`:idx:

-     `posix.html#574 <posix.html#574>`_

-

-   `SC_RAW_SOCKETS`:idx:

-     `posix.html#575 <posix.html#575>`_

-

-   `SC_READER_WRITER_LOCKS`:idx:

-     `posix.html#577 <posix.html#577>`_

-

-   `SC_REALTIME_SIGNALS`:idx:

-     `posix.html#578 <posix.html#578>`_

-

-   `SC_RE_DUP_MAX`:idx:

-     `posix.html#576 <posix.html#576>`_

-

-   `SC_REGEXP`:idx:

-     `posix.html#579 <posix.html#579>`_

-

-   `ScriptExt`:idx:

-     `os.html#108 <os.html#108>`_

-

-   `SC_RTSIG_MAX`:idx:

-     `posix.html#580 <posix.html#580>`_

-

-   `SC_SAVED_IDS`:idx:

-     `posix.html#581 <posix.html#581>`_

-

-   `SC_SEMAPHORES`:idx:

-     `posix.html#584 <posix.html#584>`_

-

-   `SC_SEM_NSEMS_MAX`:idx:

-     `posix.html#582 <posix.html#582>`_

-

-   `SC_SEM_VALUE_MAX`:idx:

-     `posix.html#583 <posix.html#583>`_

-

-   `SC_SHARED_MEMORY_OBJECTS`:idx:

-     `posix.html#585 <posix.html#585>`_

-

-   `SC_SHELL`:idx:

-     `posix.html#586 <posix.html#586>`_

-

-   `SC_SIGQUEUE_MAX`:idx:

-     `posix.html#587 <posix.html#587>`_

-

-   `SC_SPAWN`:idx:

-     `posix.html#588 <posix.html#588>`_

-

-   `SC_SPIN_LOCKS`:idx:

-     `posix.html#589 <posix.html#589>`_

-

-   `SC_SPORADIC_SERVER`:idx:

-     `posix.html#590 <posix.html#590>`_

-

-   `SC_SS_REPL_MAX`:idx:

-     `posix.html#591 <posix.html#591>`_

-

-   `SC_STREAM_MAX`:idx:

-     `posix.html#592 <posix.html#592>`_

-

-   `SC_SYMLOOP_MAX`:idx:

-     `posix.html#593 <posix.html#593>`_

-

-   `SC_SYNCHRONIZED_IO`:idx:

-     `posix.html#594 <posix.html#594>`_

-

-   `SC_THREAD_ATTR_STACKADDR`:idx:

-     `posix.html#595 <posix.html#595>`_

-

-   `SC_THREAD_ATTR_STACKSIZE`:idx:

-     `posix.html#596 <posix.html#596>`_

-

-   `SC_THREAD_CPUTIME`:idx:

-     `posix.html#597 <posix.html#597>`_

-

-   `SC_THREAD_DESTRUCTOR_ITERATIONS`:idx:

-     `posix.html#598 <posix.html#598>`_

-

-   `SC_THREAD_KEYS_MAX`:idx:

-     `posix.html#599 <posix.html#599>`_

-

-   `SC_THREAD_PRIO_INHERIT`:idx:

-     `posix.html#600 <posix.html#600>`_

-

-   `SC_THREAD_PRIO_PROTECT`:idx:

-     `posix.html#601 <posix.html#601>`_

-

-   `SC_THREAD_PRIORITY_SCHEDULING`:idx:

-     `posix.html#602 <posix.html#602>`_

-

-   `SC_THREAD_PROCESS_SHARED`:idx:

-     `posix.html#603 <posix.html#603>`_

-

-   `SC_THREADS`:idx:

-     `posix.html#608 <posix.html#608>`_

-

-   `SC_THREAD_SAFE_FUNCTIONS`:idx:

-     `posix.html#604 <posix.html#604>`_

-

-   `SC_THREAD_SPORADIC_SERVER`:idx:

-     `posix.html#605 <posix.html#605>`_

-

-   `SC_THREAD_STACK_MIN`:idx:

-     `posix.html#606 <posix.html#606>`_

-

-   `SC_THREAD_THREADS_MAX`:idx:

-     `posix.html#607 <posix.html#607>`_

-

-   `SC_TIMEOUTS`:idx:

-     `posix.html#609 <posix.html#609>`_

-

-   `SC_TIMER_MAX`:idx:

-     `posix.html#610 <posix.html#610>`_

-

-   `SC_TIMERS`:idx:

-     `posix.html#611 <posix.html#611>`_

-

-   `SC_TRACE`:idx:

-     `posix.html#612 <posix.html#612>`_

-

-   `SC_TRACE_EVENT_FILTER`:idx:

-     `posix.html#613 <posix.html#613>`_

-

-   `SC_TRACE_EVENT_NAME_MAX`:idx:

-     `posix.html#614 <posix.html#614>`_

-

-   `SC_TRACE_INHERIT`:idx:

-     `posix.html#615 <posix.html#615>`_

-

-   `SC_TRACE_LOG`:idx:

-     `posix.html#616 <posix.html#616>`_

-

-   `SC_TRACE_NAME_MAX`:idx:

-     `posix.html#617 <posix.html#617>`_

-

-   `SC_TRACE_SYS_MAX`:idx:

-     `posix.html#618 <posix.html#618>`_

-

-   `SC_TRACE_USER_EVENT_MAX`:idx:

-     `posix.html#619 <posix.html#619>`_

-

-   `SC_TTY_NAME_MAX`:idx:

-     `posix.html#620 <posix.html#620>`_

-

-   `SC_TYPED_MEMORY_OBJECTS`:idx:

-     `posix.html#621 <posix.html#621>`_

-

-   `SC_TZNAME_MAX`:idx:

-     `posix.html#622 <posix.html#622>`_

-

-   `SC_V6_ILP32_OFF32`:idx:

-     `posix.html#623 <posix.html#623>`_

-

-   `SC_V6_ILP32_OFFBIG`:idx:

-     `posix.html#624 <posix.html#624>`_

-

-   `SC_V6_LP64_OFF64`:idx:

-     `posix.html#625 <posix.html#625>`_

-

-   `SC_V6_LPBIG_OFFBIG`:idx:

-     `posix.html#626 <posix.html#626>`_

-

-   `SC_VERSION`:idx:

-     `posix.html#627 <posix.html#627>`_

-

-   `SC_XBS5_ILP32_OFF32`:idx:

-     `posix.html#628 <posix.html#628>`_

-

-   `SC_XBS5_ILP32_OFFBIG`:idx:

-     `posix.html#629 <posix.html#629>`_

-

-   `SC_XBS5_LP64_OFF64`:idx:

-     `posix.html#630 <posix.html#630>`_

-

-   `SC_XBS5_LPBIG_OFFBIG`:idx:

-     `posix.html#631 <posix.html#631>`_

-

-   `SC_XOPEN_CRYPT`:idx:

-     `posix.html#632 <posix.html#632>`_

-

-   `SC_XOPEN_ENH_I18N`:idx:

-     `posix.html#633 <posix.html#633>`_

-

-   `SC_XOPEN_LEGACY`:idx:

-     `posix.html#634 <posix.html#634>`_

-

-   `SC_XOPEN_REALTIME`:idx:

-     `posix.html#635 <posix.html#635>`_

-

-   `SC_XOPEN_REALTIME_THREADS`:idx:

-     `posix.html#636 <posix.html#636>`_

-

-   `SC_XOPEN_SHM`:idx:

-     `posix.html#637 <posix.html#637>`_

-

-   `SC_XOPEN_STREAMS`:idx:

-     `posix.html#638 <posix.html#638>`_

-

-   `SC_XOPEN_UNIX`:idx:

-     `posix.html#639 <posix.html#639>`_

-

-   `SC_XOPEN_VERSION`:idx:

-     `posix.html#640 <posix.html#640>`_

-

-   `SEEK_CUR`:idx:

-     `posix.html#776 <posix.html#776>`_

-

-   `seekdir`:idx:

-     `posix.html#805 <posix.html#805>`_

-

-   `SEEK_END`:idx:

-     `posix.html#777 <posix.html#777>`_

-

-   `SEEK_SET`:idx:

-     `posix.html#775 <posix.html#775>`_

-

-   `select`:idx:

-     `posix.html#1166 <posix.html#1166>`_

-

-   `sem_close`:idx:

-     `posix.html#1045 <posix.html#1045>`_

-

-   `sem_destroy`:idx:

-     `posix.html#1046 <posix.html#1046>`_

-

-   `SEM_FAILED`:idx:

-     `posix.html#641 <posix.html#641>`_

-

-   `sem_getvalue`:idx:

-     `posix.html#1047 <posix.html#1047>`_

-

-   `sem_init`:idx:

-     `posix.html#1048 <posix.html#1048>`_

-

-   `sem_open`:idx:

-     `posix.html#1049 <posix.html#1049>`_

-

-   `sem_post`:idx:

-     `posix.html#1050 <posix.html#1050>`_

-

-   `sem_timedwait`:idx:

-     `posix.html#1051 <posix.html#1051>`_

-

-   `sem_trywait`:idx:

-     `posix.html#1052 <posix.html#1052>`_

-

-   `sem_unlink`:idx:

-     `posix.html#1053 <posix.html#1053>`_

-

-   `sem_wait`:idx:

-     `posix.html#1054 <posix.html#1054>`_

-

-   `separate compilation`:idx:

-     * `manual.html#214 <manual.html#214>`_

-     * `tut1.html#127 <tut1.html#127>`_

-

-   `seq`:idx:

-     `system.html#126 <system.html#126>`_

-

-   `seqToPtr`:idx:

-     `system.html#457 <system.html#457>`_

-

-   `Sequences`:idx:

-     * `manual.html#153 <manual.html#153>`_

-     * `tut1.html#119 <tut1.html#119>`_

-

-   `set`:idx:

-     `system.html#127 <system.html#127>`_

-

-   `set type`:idx:

-     * `manual.html#157 <manual.html#157>`_

-     * `tut1.html#116 <tut1.html#116>`_

-

-   `setcontext`:idx:

-     `posix.html#1190 <posix.html#1190>`_

-

-   `setCurrentDir`:idx:

-     `os.html#113 <os.html#113>`_

-

-   `setegid`:idx:

-     `posix.html#1021 <posix.html#1021>`_

-

-   `seteuid`:idx:

-     `posix.html#1022 <posix.html#1022>`_

-

-   `setFilePos`:idx:

-     `system.html#510 <system.html#510>`_

-

-   `setgid`:idx:

-     `posix.html#1023 <posix.html#1023>`_

-

-   `setgrent`:idx:

-     `posix.html#839 <posix.html#839>`_

-

-   `setLen`:idx:

-     * `system.html#407 <system.html#407>`_

-     * `system.html#417 <system.html#417>`_

-

-   `setlocale`:idx:

-     `posix.html#847 <posix.html#847>`_

-

-   `setpgid`:idx:

-     `posix.html#1024 <posix.html#1024>`_

-

-   `setpgrp`:idx:

-     `posix.html#1025 <posix.html#1025>`_

-

-   `setpwent`:idx:

-     `posix.html#865 <posix.html#865>`_

-

-   `setregid`:idx:

-     `posix.html#1026 <posix.html#1026>`_

-

-   `setreuid`:idx:

-     `posix.html#1027 <posix.html#1027>`_

-

-   `setsid`:idx:

-     `posix.html#1028 <posix.html#1028>`_

-

-   `setuid`:idx:

-     `posix.html#1029 <posix.html#1029>`_

-

-   `shl`:idx:

-     * `system.html#226 <system.html#226>`_

-     * `system.html#227 <system.html#227>`_

-     * `system.html#228 <system.html#228>`_

-     * `system.html#229 <system.html#229>`_

-     * `system.html#230 <system.html#230>`_

-

-   `shm_open`:idx:

-     `posix.html#1090 <posix.html#1090>`_

-

-   `shm_unlink`:idx:

-     `posix.html#1091 <posix.html#1091>`_

-

-   `shr`:idx:

-     * `system.html#221 <system.html#221>`_

-     * `system.html#222 <system.html#222>`_

-     * `system.html#223 <system.html#223>`_

-     * `system.html#224 <system.html#224>`_

-     * `system.html#225 <system.html#225>`_

-

-   `S_IFBLK`:idx:

-     `posix.html#650 <posix.html#650>`_

-

-   `S_IFCHR`:idx:

-     `posix.html#651 <posix.html#651>`_

-

-   `S_IFDIR`:idx:

-     `posix.html#654 <posix.html#654>`_

-

-   `S_IFIFO`:idx:

-     `posix.html#652 <posix.html#652>`_

-

-   `S_IFLNK`:idx:

-     `posix.html#655 <posix.html#655>`_

-

-   `S_IFMT`:idx:

-     `posix.html#649 <posix.html#649>`_

-

-   `S_IFREG`:idx:

-     `posix.html#653 <posix.html#653>`_

-

-   `S_IFSOCK`:idx:

-     `posix.html#656 <posix.html#656>`_

-

-   `SIGABRT`:idx:

-     `posix.html#726 <posix.html#726>`_

-

-   `sigaction`:idx:

-     `posix.html#1128 <posix.html#1128>`_

-

-   `sigaddset`:idx:

-     `posix.html#1129 <posix.html#1129>`_

-

-   `SIGALRM`:idx:

-     `posix.html#727 <posix.html#727>`_

-

-   `sigaltstack`:idx:

-     `posix.html#1130 <posix.html#1130>`_

-

-   `SIG_BLOCK`:idx:

-     `posix.html#755 <posix.html#755>`_

-

-   `SIGBUS`:idx:

-     `posix.html#728 <posix.html#728>`_

-

-   `SIGCHLD`:idx:

-     `posix.html#729 <posix.html#729>`_

-

-   `SIGCONT`:idx:

-     `posix.html#730 <posix.html#730>`_

-

-   `sigdelset`:idx:

-     `posix.html#1131 <posix.html#1131>`_

-

-   `SIG_DFL`:idx:

-     `posix.html#719 <posix.html#719>`_

-

-   `sigemptyset`:idx:

-     `posix.html#1132 <posix.html#1132>`_

-

-   `SIG_ERR`:idx:

-     `posix.html#720 <posix.html#720>`_

-

-   `SIGEV_NONE`:idx:

-     `posix.html#723 <posix.html#723>`_

-

-   `SIGEV_SIGNAL`:idx:

-     `posix.html#724 <posix.html#724>`_

-

-   `SIGEV_THREAD`:idx:

-     `posix.html#725 <posix.html#725>`_

-

-   `sigfillset`:idx:

-     `posix.html#1133 <posix.html#1133>`_

-

-   `SIGFPE`:idx:

-     `posix.html#731 <posix.html#731>`_

-

-   `sighold`:idx:

-     `posix.html#1134 <posix.html#1134>`_

-

-   `SIGHUP`:idx:

-     `posix.html#732 <posix.html#732>`_

-

-   `SIG_IGN`:idx:

-     `posix.html#722 <posix.html#722>`_

-

-   `sigignore`:idx:

-     `posix.html#1135 <posix.html#1135>`_

-

-   `SIGILL`:idx:

-     `posix.html#733 <posix.html#733>`_

-

-   `SIGINT`:idx:

-     `posix.html#734 <posix.html#734>`_

-

-   `siginterrupt`:idx:

-     `posix.html#1136 <posix.html#1136>`_

-

-   `sigismember`:idx:

-     `posix.html#1137 <posix.html#1137>`_

-

-   `SIGKILL`:idx:

-     `posix.html#735 <posix.html#735>`_

-

-   `signal`:idx:

-     `posix.html#1138 <posix.html#1138>`_

-

-   `sigpause`:idx:

-     `posix.html#1139 <posix.html#1139>`_

-

-   `sigpending`:idx:

-     `posix.html#1140 <posix.html#1140>`_

-

-   `SIGPIPE`:idx:

-     `posix.html#736 <posix.html#736>`_

-

-   `SIGPOLL`:idx:

-     `posix.html#746 <posix.html#746>`_

-

-   `sigprocmask`:idx:

-     `posix.html#1141 <posix.html#1141>`_

-

-   `SIGPROF`:idx:

-     `posix.html#747 <posix.html#747>`_

-

-   `sigqueue`:idx:

-     `posix.html#1142 <posix.html#1142>`_

-

-   `SIGQUIT`:idx:

-     `posix.html#737 <posix.html#737>`_

-

-   `sigrelse`:idx:

-     `posix.html#1143 <posix.html#1143>`_

-

-   `SIGSEGV`:idx:

-     `posix.html#738 <posix.html#738>`_

-

-   `sigset`:idx:

-     `posix.html#1144 <posix.html#1144>`_

-

-   `SIG_SETMASK`:idx:

-     `posix.html#757 <posix.html#757>`_

-

-   `SIGSTKSZ`:idx:

-     `posix.html#767 <posix.html#767>`_

-

-   `SIGSTOP`:idx:

-     `posix.html#739 <posix.html#739>`_

-

-   `sigsuspend`:idx:

-     `posix.html#1145 <posix.html#1145>`_

-

-   `SIGSYS`:idx:

-     `posix.html#748 <posix.html#748>`_

-

-   `SIGTERM`:idx:

-     `posix.html#740 <posix.html#740>`_

-

-   `sigtimedwait`:idx:

-     `posix.html#1146 <posix.html#1146>`_

-

-   `SIGTRAP`:idx:

-     `posix.html#749 <posix.html#749>`_

-

-   `SIGTSTP`:idx:

-     `posix.html#741 <posix.html#741>`_

-

-   `SIGTTIN`:idx:

-     `posix.html#742 <posix.html#742>`_

-

-   `SIGTTOU`:idx:

-     `posix.html#743 <posix.html#743>`_

-

-   `SIG_UNBLOCK`:idx:

-     `posix.html#756 <posix.html#756>`_

-

-   `SIGURG`:idx:

-     `posix.html#750 <posix.html#750>`_

-

-   `SIGUSR1`:idx:

-     `posix.html#744 <posix.html#744>`_

-

-   `SIGUSR2`:idx:

-     `posix.html#745 <posix.html#745>`_

-

-   `SIGVTALRM`:idx:

-     `posix.html#751 <posix.html#751>`_

-

-   `sigwait`:idx:

-     `posix.html#1147 <posix.html#1147>`_

-

-   `sigwaitinfo`:idx:

-     `posix.html#1148 <posix.html#1148>`_

-

-   `SIGXCPU`:idx:

-     `posix.html#752 <posix.html#752>`_

-

-   `SIGXFSZ`:idx:

-     `posix.html#753 <posix.html#753>`_

-

-   `simple assertions`:idx:

-     `regexprs.html#103 <regexprs.html#103>`_

-

-   `simple statements`:idx:

-     `manual.html#174 <manual.html#174>`_

-

-   `sinh`:idx:

-     `math.html#124 <math.html#124>`_

-

-   `S_IRGRP`:idx:

-     `posix.html#662 <posix.html#662>`_

-

-   `S_IROTH`:idx:

-     `posix.html#666 <posix.html#666>`_

-

-   `S_IRUSR`:idx:

-     `posix.html#658 <posix.html#658>`_

-

-   `S_IRWXG`:idx:

-     `posix.html#661 <posix.html#661>`_

-

-   `S_IRWXO`:idx:

-     `posix.html#665 <posix.html#665>`_

-

-   `S_IRWXU`:idx:

-     `posix.html#657 <posix.html#657>`_

-

-   `S_ISBLK`:idx:

-     `posix.html#1067 <posix.html#1067>`_

-

-   `S_ISCHR`:idx:

-     `posix.html#1068 <posix.html#1068>`_

-

-   `S_ISDIR`:idx:

-     `posix.html#1069 <posix.html#1069>`_

-

-   `S_ISFIFO`:idx:

-     `posix.html#1070 <posix.html#1070>`_

-

-   `S_ISGID`:idx:

-     `posix.html#670 <posix.html#670>`_

-

-   `S_ISLNK`:idx:

-     `posix.html#1072 <posix.html#1072>`_

-

-   `S_ISREG`:idx:

-     `posix.html#1071 <posix.html#1071>`_

-

-   `S_ISSOCK`:idx:

-     `posix.html#1073 <posix.html#1073>`_

-

-   `S_ISUID`:idx:

-     `posix.html#669 <posix.html#669>`_

-

-   `S_ISVTX`:idx:

-     `posix.html#671 <posix.html#671>`_

-

-   `S_IWGRP`:idx:

-     `posix.html#663 <posix.html#663>`_

-

-   `S_IWOTH`:idx:

-     `posix.html#667 <posix.html#667>`_

-

-   `S_IWUSR`:idx:

-     `posix.html#659 <posix.html#659>`_

-

-   `S_IXGRP`:idx:

-     `posix.html#664 <posix.html#664>`_

-

-   `S_IXOTH`:idx:

-     `posix.html#668 <posix.html#668>`_

-

-   `S_IXUSR`:idx:

-     `posix.html#660 <posix.html#660>`_

-

-   `sizeof`:idx:

-     `system.html#156 <system.html#156>`_

-

-   `sleep`:idx:

-     `posix.html#1030 <posix.html#1030>`_

-

-   `split`:idx:

-     `strutils.html#119 <strutils.html#119>`_

-

-   `SplitFilename`:idx:

-     `os.html#125 <os.html#125>`_

-

-   `splitLines`:idx:

-     `strutils.html#120 <strutils.html#120>`_

-

-   `splitLinesSeq`:idx:

-     `strutils.html#121 <strutils.html#121>`_

-

-   `SplitPath`:idx:

-     `os.html#121 <os.html#121>`_

-

-   `splitSeq`:idx:

-     `strutils.html#122 <strutils.html#122>`_

-

-   `SQL_ACCESS_MODE`:idx:

-     `odbcsql.html#406 <odbcsql.html#406>`_

-

-   `SQL_ADD`:idx:

-     `odbcsql.html#317 <odbcsql.html#317>`_

-

-   `SQLAllocHandle`:idx:

-     `odbcsql.html#627 <odbcsql.html#627>`_

-

-   `SQL_ALL_TYPES`:idx:

-     `odbcsql.html#492 <odbcsql.html#492>`_

-

-   `SQL_API_SQLDESCRIBEPARAM`:idx:

-     `odbcsql.html#229 <odbcsql.html#229>`_

-

-   `SQL_ARD_TYPE`:idx:

-     `odbcsql.html#494 <odbcsql.html#494>`_

-

-   `SQL_ASYNC_ENABLE`:idx:

-     `odbcsql.html#383 <odbcsql.html#383>`_

-

-   `SQL_ATTR_ACCESS_MODE`:idx:

-     `odbcsql.html#415 <odbcsql.html#415>`_

-

-   `SQL_ATTR_APP_PARAM_DESC`:idx:

-     `odbcsql.html#374 <odbcsql.html#374>`_

-

-   `SQL_ATTR_APP_ROW_DESC`:idx:

-     `odbcsql.html#373 <odbcsql.html#373>`_

-

-   `SQL_ATTR_AUTOCOMMIT`:idx:

-     `odbcsql.html#400 <odbcsql.html#400>`_

-

-   `SQL_ATTR_AUTO_IPD`:idx:

-     `odbcsql.html#371 <odbcsql.html#371>`_

-

-   `SQL_ATTR_CONCURRENCY`:idx:

-     `odbcsql.html#395 <odbcsql.html#395>`_

-

-   `SQL_ATTR_CONNECTION_DEAD`:idx:

-     `odbcsql.html#416 <odbcsql.html#416>`_

-

-   `SQL_ATTR_CONNECTION_TIMEOUT`:idx:

-     `odbcsql.html#417 <odbcsql.html#417>`_

-

-   `SQL_ATTR_CURRENT_CATALOG`:idx:

-     `odbcsql.html#418 <odbcsql.html#418>`_

-

-   `SQL_ATTR_CURSOR_SCROLLABLE`:idx:

-     `odbcsql.html#377 <odbcsql.html#377>`_

-

-   `SQL_ATTR_CURSOR_SENSITIVITY`:idx:

-     `odbcsql.html#378 <odbcsql.html#378>`_

-

-   `SQL_ATTR_CURSOR_TYPE`:idx:

-     `odbcsql.html#394 <odbcsql.html#394>`_

-

-   `SQL_ATTR_DISCONNECT_BEHAVIOR`:idx:

-     `odbcsql.html#419 <odbcsql.html#419>`_

-

-   `SQL_ATTR_ENLIST_IN_DTC`:idx:

-     `odbcsql.html#420 <odbcsql.html#420>`_

-

-   `SQL_ATTR_ENLIST_IN_XA`:idx:

-     `odbcsql.html#421 <odbcsql.html#421>`_

-

-   `SQL_ATTR_FETCH_BOOKMARK_PTR`:idx:

-     `odbcsql.html#396 <odbcsql.html#396>`_

-

-   `SQL_ATTR_IMP_PARAM_DESC`:idx:

-     `odbcsql.html#376 <odbcsql.html#376>`_

-

-   `SQL_ATTR_IMP_ROW_DESC`:idx:

-     `odbcsql.html#375 <odbcsql.html#375>`_

-

-   `SQL_ATTR_LOGIN_TIMEOUT`:idx:

-     `odbcsql.html#422 <odbcsql.html#422>`_

-

-   `SQL_ATTR_MAX_ROWS`:idx:

-     `odbcsql.html#404 <odbcsql.html#404>`_

-

-   `SQL_ATTR_METADATA_ID`:idx:

-     `odbcsql.html#372 <odbcsql.html#372>`_

-

-   `SQL_ATTR_ODBC_CURSORS`:idx:

-     `odbcsql.html#341 <odbcsql.html#341>`_

-

-   `SQL_ATTR_ODBC_VERSION`:idx:

-     `odbcsql.html#240 <odbcsql.html#240>`_

-

-   `SQL_ATTR_OUTPUT_NTS`:idx:

-     `odbcsql.html#370 <odbcsql.html#370>`_

-

-   `SQL_ATTR_PACKET_SIZE`:idx:

-     `odbcsql.html#423 <odbcsql.html#423>`_

-

-   `SQL_ATTR_QUIET_MODE`:idx:

-     `odbcsql.html#424 <odbcsql.html#424>`_

-

-   `SQL_ATTR_ROW_ARRAY_SIZE`:idx:

-     `odbcsql.html#620 <odbcsql.html#620>`_

-

-   `SQL_ATTR_ROW_NUMBER`:idx:

-     `odbcsql.html#401 <odbcsql.html#401>`_

-

-   `SQL_ATTR_ROWS_FETCHED_PTR`:idx:

-     `odbcsql.html#398 <odbcsql.html#398>`_

-

-   `SQL_ATTR_ROW_STATUS_PTR`:idx:

-     `odbcsql.html#397 <odbcsql.html#397>`_

-

-   `SQL_ATTR_TRACE`:idx:

-     `odbcsql.html#425 <odbcsql.html#425>`_

-

-   `SQL_ATTR_TRACEFILE`:idx:

-     `odbcsql.html#426 <odbcsql.html#426>`_

-

-   `SQL_ATTR_TRANSLATE_LIB`:idx:

-     `odbcsql.html#427 <odbcsql.html#427>`_

-

-   `SQL_ATTR_TRANSLATE_OPTION`:idx:

-     `odbcsql.html#428 <odbcsql.html#428>`_

-

-   `SQL_ATTR_TXN_ISOLATION`:idx:

-     `odbcsql.html#403 <odbcsql.html#403>`_

-

-   `SQL_ATTR_USE_BOOKMARKS`:idx:

-     `odbcsql.html#405 <odbcsql.html#405>`_

-

-   `SQL_AUTOCOMMIT`:idx:

-     `odbcsql.html#399 <odbcsql.html#399>`_

-

-   `SQL_AUTOCOMMIT_DEFAULT`:idx:

-     `odbcsql.html#434 <odbcsql.html#434>`_

-

-   `SQL_AUTOCOMMIT_OFF`:idx:

-     `odbcsql.html#432 <odbcsql.html#432>`_

-

-   `SQL_AUTOCOMMIT_ON`:idx:

-     `odbcsql.html#433 <odbcsql.html#433>`_

-

-   `SQL_BEST_ROWID`:idx:

-     `odbcsql.html#523 <odbcsql.html#523>`_

-

-   `SQL_BIGINT`:idx:

-     `odbcsql.html#130 <odbcsql.html#130>`_

-

-   `SQL_BINARY`:idx:

-     `odbcsql.html#127 <odbcsql.html#127>`_

-

-   `SQLBindCol`:idx:

-     `odbcsql.html#652 <odbcsql.html#652>`_

-

-   `SQLBindParameter`:idx:

-     `odbcsql.html#660 <odbcsql.html#660>`_

-

-   `SQL_BIND_TYPE`:idx:

-     `odbcsql.html#384 <odbcsql.html#384>`_

-

-   `SQL_BIT`:idx:

-     `odbcsql.html#132 <odbcsql.html#132>`_

-

-   `SQL_BOOKMARK_PERSISTENCE`:idx:

-     `odbcsql.html#262 <odbcsql.html#262>`_

-

-   `SQL_BP_CLOSE`:idx:

-     `odbcsql.html#264 <odbcsql.html#264>`_

-

-   `SQL_BP_DELETE`:idx:

-     `odbcsql.html#265 <odbcsql.html#265>`_

-

-   `SQL_BP_DROP`:idx:

-     `odbcsql.html#266 <odbcsql.html#266>`_

-

-   `SQL_BP_OTHER_HSTMT`:idx:

-     `odbcsql.html#269 <odbcsql.html#269>`_

-

-   `SQL_BP_SCROLL`:idx:

-     `odbcsql.html#270 <odbcsql.html#270>`_

-

-   `SQL_BP_TRANSACTION`:idx:

-     `odbcsql.html#267 <odbcsql.html#267>`_

-

-   `SQL_BP_UPDATE`:idx:

-     `odbcsql.html#268 <odbcsql.html#268>`_

-

-   `SQLBrowseConnect`:idx:

-     `odbcsql.html#636 <odbcsql.html#636>`_

-

-   `SQLBulkOperations`:idx:

-     `odbcsql.html#650 <odbcsql.html#650>`_

-

-   `SQL_CA1_ABSOLUTE`:idx:

-     `odbcsql.html#282 <odbcsql.html#282>`_

-

-   `SQL_CA1_BOOKMARK`:idx:

-     `odbcsql.html#284 <odbcsql.html#284>`_

-

-   `SQL_CA1_BULK_ADD`:idx:

-     `odbcsql.html#295 <odbcsql.html#295>`_

-

-   `SQL_CA1_BULK_DELETE_BY_BOOKMARK`:idx:

-     `odbcsql.html#297 <odbcsql.html#297>`_

-

-   `SQL_CA1_BULK_FETCH_BY_BOOKMARK`:idx:

-     `odbcsql.html#298 <odbcsql.html#298>`_

-

-   `SQL_CA1_BULK_UPDATE_BY_BOOKMARK`:idx:

-     `odbcsql.html#296 <odbcsql.html#296>`_

-

-   `SQL_CA1_LOCK_EXCLUSIVE`:idx:

-     `odbcsql.html#286 <odbcsql.html#286>`_

-

-   `SQL_CA1_LOCK_NO_CHANGE`:idx:

-     `odbcsql.html#285 <odbcsql.html#285>`_

-

-   `SQL_CA1_LOCK_UNLOCK`:idx:

-     `odbcsql.html#287 <odbcsql.html#287>`_

-

-   `SQL_CA1_NEXT`:idx:

-     `odbcsql.html#281 <odbcsql.html#281>`_

-

-   `SQL_CA1_POS_DELETE`:idx:

-     `odbcsql.html#290 <odbcsql.html#290>`_

-

-   `SQL_CA1_POSITIONED_DELETE`:idx:

-     `odbcsql.html#293 <odbcsql.html#293>`_

-

-   `SQL_CA1_POSITIONED_UPDATE`:idx:

-     `odbcsql.html#292 <odbcsql.html#292>`_

-

-   `SQL_CA1_POS_POSITION`:idx:

-     `odbcsql.html#288 <odbcsql.html#288>`_

-

-   `SQL_CA1_POS_REFRESH`:idx:

-     `odbcsql.html#291 <odbcsql.html#291>`_

-

-   `SQL_CA1_POS_UPDATE`:idx:

-     `odbcsql.html#289 <odbcsql.html#289>`_

-

-   `SQL_CA1_RELATIVE`:idx:

-     `odbcsql.html#283 <odbcsql.html#283>`_

-

-   `SQL_CA1_SELECT_FOR_UPDATE`:idx:

-     `odbcsql.html#294 <odbcsql.html#294>`_

-

-   `SQL_CA2_CRC_APPROXIMATE`:idx:

-     `odbcsql.html#313 <odbcsql.html#313>`_

-

-   `SQL_CA2_CRC_EXACT`:idx:

-     `odbcsql.html#312 <odbcsql.html#312>`_

-

-   `SQL_CA2_LOCK_CONCURRENCY`:idx:

-     `odbcsql.html#300 <odbcsql.html#300>`_

-

-   `SQL_CA2_MAX_ROWS_AFFECTS_ALL`:idx:

-     `odbcsql.html#311 <odbcsql.html#311>`_

-

-   `SQL_CA2_MAX_ROWS_CATALOG`:idx:

-     `odbcsql.html#310 <odbcsql.html#310>`_

-

-   `SQL_CA2_MAX_ROWS_DELETE`:idx:

-     `odbcsql.html#308 <odbcsql.html#308>`_

-

-   `SQL_CA2_MAX_ROWS_INSERT`:idx:

-     `odbcsql.html#307 <odbcsql.html#307>`_

-

-   `SQL_CA2_MAX_ROWS_SELECT`:idx:

-     `odbcsql.html#306 <odbcsql.html#306>`_

-

-   `SQL_CA2_MAX_ROWS_UPDATE`:idx:

-     `odbcsql.html#309 <odbcsql.html#309>`_

-

-   `SQL_CA2_OPT_ROWVER_CONCURRENCY`:idx:

-     `odbcsql.html#301 <odbcsql.html#301>`_

-

-   `SQL_CA2_OPT_VALUES_CONCURRENCY`:idx:

-     `odbcsql.html#302 <odbcsql.html#302>`_

-

-   `SQL_CA2_READ_ONLY_CONCURRENCY`:idx:

-     `odbcsql.html#299 <odbcsql.html#299>`_

-

-   `SQL_CA2_SENSITIVITY_ADDITIONS`:idx:

-     `odbcsql.html#303 <odbcsql.html#303>`_

-

-   `SQL_CA2_SENSITIVITY_DELETIONS`:idx:

-     `odbcsql.html#304 <odbcsql.html#304>`_

-

-   `SQL_CA2_SENSITIVITY_UPDATES`:idx:

-     `odbcsql.html#305 <odbcsql.html#305>`_

-

-   `SQL_CA2_SIMULATE_NON_UNIQUE`:idx:

-     `odbcsql.html#314 <odbcsql.html#314>`_

-

-   `SQL_CA2_SIMULATE_TRY_UNIQUE`:idx:

-     `odbcsql.html#315 <odbcsql.html#315>`_

-

-   `SQL_CA2_SIMULATE_UNIQUE`:idx:

-     `odbcsql.html#316 <odbcsql.html#316>`_

-

-   `SQL_CATALOG_NAME`:idx:

-     `odbcsql.html#545 <odbcsql.html#545>`_

-

-   `SQL_C_BINARY`:idx:

-     `odbcsql.html#212 <odbcsql.html#212>`_

-

-   `SQL_C_BIT`:idx:

-     `odbcsql.html#213 <odbcsql.html#213>`_

-

-   `SQL_C_BOOKMARK`:idx:

-     `odbcsql.html#223 <odbcsql.html#223>`_

-

-   `SQL_C_CHAR`:idx:

-     `odbcsql.html#184 <odbcsql.html#184>`_

-

-   `SQL_C_DATE`:idx:

-     `odbcsql.html#193 <odbcsql.html#193>`_

-

-   `SQL_C_DEFAULT`:idx:

-     `odbcsql.html#190 <odbcsql.html#190>`_

-

-   `SQL_C_DOUBLE`:idx:

-     `odbcsql.html#188 <odbcsql.html#188>`_

-

-   `SQL_C_FLOAT`:idx:

-     `odbcsql.html#187 <odbcsql.html#187>`_

-

-   `SQL_C_GUID`:idx:

-     `odbcsql.html#224 <odbcsql.html#224>`_

-

-   `SQL_CHAR`:idx:

-     `odbcsql.html#136 <odbcsql.html#136>`_

-

-   `SQL_C_INTERVAL_DAY`:idx:

-     `odbcsql.html#201 <odbcsql.html#201>`_

-

-   `SQL_C_INTERVAL_DAY_TO_HOUR`:idx:

-     `odbcsql.html#206 <odbcsql.html#206>`_

-

-   `SQL_C_INTERVAL_DAY_TO_MINUTE`:idx:

-     `odbcsql.html#207 <odbcsql.html#207>`_

-

-   `SQL_C_INTERVAL_DAY_TO_SECOND`:idx:

-     `odbcsql.html#208 <odbcsql.html#208>`_

-

-   `SQL_C_INTERVAL_HOUR`:idx:

-     `odbcsql.html#202 <odbcsql.html#202>`_

-

-   `SQL_C_INTERVAL_HOUR_TO_MINUTE`:idx:

-     `odbcsql.html#209 <odbcsql.html#209>`_

-

-   `SQL_C_INTERVAL_HOUR_TO_SECOND`:idx:

-     `odbcsql.html#210 <odbcsql.html#210>`_

-

-   `SQL_C_INTERVAL_MINUTE`:idx:

-     `odbcsql.html#203 <odbcsql.html#203>`_

-

-   `SQL_C_INTERVAL_MINUTE_TO_SECOND`:idx:

-     `odbcsql.html#211 <odbcsql.html#211>`_

-

-   `SQL_C_INTERVAL_MONTH`:idx:

-     `odbcsql.html#200 <odbcsql.html#200>`_

-

-   `SQL_C_INTERVAL_SECOND`:idx:

-     `odbcsql.html#204 <odbcsql.html#204>`_

-

-   `SQL_C_INTERVAL_YEAR`:idx:

-     `odbcsql.html#199 <odbcsql.html#199>`_

-

-   `SQL_C_INTERVAL_YEAR_TO_MONTH`:idx:

-     `odbcsql.html#205 <odbcsql.html#205>`_

-

-   `SQL_C_LONG`:idx:

-     `odbcsql.html#185 <odbcsql.html#185>`_

-

-   `SQL_CLOSE`:idx:

-     `odbcsql.html#503 <odbcsql.html#503>`_

-

-   `SQLCloseCursor`:idx:

-     `odbcsql.html#639 <odbcsql.html#639>`_

-

-   `SQL_C_NUMERIC`:idx:

-     `odbcsql.html#189 <odbcsql.html#189>`_

-

-   `SQL_CODE_DATE`:idx:

-     `odbcsql.html#495 <odbcsql.html#495>`_

-

-   `SQL_CODE_DAY`:idx:

-     `odbcsql.html#156 <odbcsql.html#156>`_

-

-   `SQL_CODE_DAY_TO_HOUR`:idx:

-     `odbcsql.html#161 <odbcsql.html#161>`_

-

-   `SQL_CODE_DAY_TO_MINUTE`:idx:

-     `odbcsql.html#162 <odbcsql.html#162>`_

-

-   `SQL_CODE_DAY_TO_SECOND`:idx:

-     `odbcsql.html#163 <odbcsql.html#163>`_

-

-   `SQL_CODE_HOUR`:idx:

-     `odbcsql.html#157 <odbcsql.html#157>`_

-

-   `SQL_CODE_HOUR_TO_MINUTE`:idx:

-     `odbcsql.html#164 <odbcsql.html#164>`_

-

-   `SQL_CODE_HOUR_TO_SECOND`:idx:

-     `odbcsql.html#165 <odbcsql.html#165>`_

-

-   `SQL_CODE_MINUTE`:idx:

-     `odbcsql.html#158 <odbcsql.html#158>`_

-

-   `SQL_CODE_MINUTE_TO_SECOND`:idx:

-     `odbcsql.html#166 <odbcsql.html#166>`_

-

-   `SQL_CODE_MONTH`:idx:

-     `odbcsql.html#155 <odbcsql.html#155>`_

-

-   `SQL_CODE_SECOND`:idx:

-     `odbcsql.html#159 <odbcsql.html#159>`_

-

-   `SQL_CODE_TIME`:idx:

-     `odbcsql.html#496 <odbcsql.html#496>`_

-

-   `SQL_CODE_TIMESTAMP`:idx:

-     `odbcsql.html#497 <odbcsql.html#497>`_

-

-   `SQL_CODE_YEAR`:idx:

-     `odbcsql.html#154 <odbcsql.html#154>`_

-

-   `SQL_CODE_YEAR_TO_MONTH`:idx:

-     `odbcsql.html#160 <odbcsql.html#160>`_

-

-   `SQL_COLATT_OPT_MAX`:idx:

-     `odbcsql.html#588 <odbcsql.html#588>`_

-

-   `SQLColAttribute`:idx:

-     `odbcsql.html#662 <odbcsql.html#662>`_

-

-   `SQL_COLLATION_SEQ`:idx:

-     `odbcsql.html#546 <odbcsql.html#546>`_

-

-   `SQL_COLUMN_AUTO_INCREMENT`:idx:

-     `odbcsql.html#580 <odbcsql.html#580>`_

-

-   `SQL_COLUMN_CASE_SENSITIVE`:idx:

-     `odbcsql.html#581 <odbcsql.html#581>`_

-

-   `SQL_COLUMN_COUNT`:idx:

-     `odbcsql.html#569 <odbcsql.html#569>`_

-

-   `SQL_COLUMN_DISPLAY_SIZE`:idx:

-     `odbcsql.html#575 <odbcsql.html#575>`_

-

-   `SQL_COLUMN_DRIVER_START`:idx:

-     `odbcsql.html#589 <odbcsql.html#589>`_

-

-   `SQL_COLUMN_LABEL`:idx:

-     `odbcsql.html#587 <odbcsql.html#587>`_

-

-   `SQL_COLUMN_LENGTH`:idx:

-     `odbcsql.html#572 <odbcsql.html#572>`_

-

-   `SQL_COLUMN_MONEY`:idx:

-     `odbcsql.html#578 <odbcsql.html#578>`_

-

-   `SQL_COLUMN_NAME`:idx:

-     `odbcsql.html#570 <odbcsql.html#570>`_

-

-   `SQL_COLUMN_NULLABLE`:idx:

-     `odbcsql.html#576 <odbcsql.html#576>`_

-

-   `SQL_COLUMN_OWNER_NAME`:idx:

-     `odbcsql.html#585 <odbcsql.html#585>`_

-

-   `SQL_COLUMN_PRECISION`:idx:

-     `odbcsql.html#573 <odbcsql.html#573>`_

-

-   `SQL_COLUMN_QUALIFIER_NAME`:idx:

-     `odbcsql.html#586 <odbcsql.html#586>`_

-

-   `SQLColumns`:idx:

-     `odbcsql.html#665 <odbcsql.html#665>`_

-

-   `SQL_COLUMN_SCALE`:idx:

-     `odbcsql.html#574 <odbcsql.html#574>`_

-

-   `SQL_COLUMN_SEARCHABLE`:idx:

-     `odbcsql.html#582 <odbcsql.html#582>`_

-

-   `SQL_COLUMN_TABLE_NAME`:idx:

-     `odbcsql.html#584 <odbcsql.html#584>`_

-

-   `SQL_COLUMN_TYPE`:idx:

-     `odbcsql.html#571 <odbcsql.html#571>`_

-

-   `SQL_COLUMN_TYPE_NAME`:idx:

-     `odbcsql.html#583 <odbcsql.html#583>`_

-

-   `SQL_COLUMN_UNSIGNED`:idx:

-     `odbcsql.html#577 <odbcsql.html#577>`_

-

-   `SQL_COLUMN_UPDATABLE`:idx:

-     `odbcsql.html#579 <odbcsql.html#579>`_

-

-   `SQL_COMMIT`:idx:

-     `odbcsql.html#618 <odbcsql.html#618>`_

-

-   `SQL_CONCUR_DEFAULT`:idx:

-     `odbcsql.html#446 <odbcsql.html#446>`_

-

-   `SQL_CONCUR_LOCK`:idx:

-     `odbcsql.html#443 <odbcsql.html#443>`_

-

-   `SQL_CONCUR_READ_ONLY`:idx:

-     `odbcsql.html#442 <odbcsql.html#442>`_

-

-   `SQL_CONCURRENCY`:idx:

-     `odbcsql.html#386 <odbcsql.html#386>`_

-

-   `SQL_CONCUR_ROWVER`:idx:

-     `odbcsql.html#444 <odbcsql.html#444>`_

-

-   `SQL_CONCUR_VALUES`:idx:

-     `odbcsql.html#445 <odbcsql.html#445>`_

-

-   `SQLConnect`:idx:

-     `odbcsql.html#633 <odbcsql.html#633>`_

-

-   `SQL_C_SBIGINT`:idx:

-     `odbcsql.html#214 <odbcsql.html#214>`_

-

-   `SQL_C_SHORT`:idx:

-     `odbcsql.html#186 <odbcsql.html#186>`_

-

-   `SQL_C_SLONG`:idx:

-     `odbcsql.html#217 <odbcsql.html#217>`_

-

-   `SQL_C_SSHORT`:idx:

-     `odbcsql.html#218 <odbcsql.html#218>`_

-

-   `SQL_C_STINYINT`:idx:

-     `odbcsql.html#219 <odbcsql.html#219>`_

-

-   `SQL_C_TIME`:idx:

-     `odbcsql.html#194 <odbcsql.html#194>`_

-

-   `SQL_C_TIMESTAMP`:idx:

-     `odbcsql.html#195 <odbcsql.html#195>`_

-

-   `SQL_C_TINYINT`:idx:

-     `odbcsql.html#216 <odbcsql.html#216>`_

-

-   `SQL_C_TYPE_DATE`:idx:

-     `odbcsql.html#196 <odbcsql.html#196>`_

-

-   `SQL_C_TYPE_TIME`:idx:

-     `odbcsql.html#197 <odbcsql.html#197>`_

-

-   `SQL_C_TYPE_TIMESTAMP`:idx:

-     `odbcsql.html#198 <odbcsql.html#198>`_

-

-   `SQL_C_UBIGINT`:idx:

-     `odbcsql.html#215 <odbcsql.html#215>`_

-

-   `SQL_C_ULONG`:idx:

-     `odbcsql.html#220 <odbcsql.html#220>`_

-

-   `SQL_CUR_DEFAULT`:idx:

-     `odbcsql.html#345 <odbcsql.html#345>`_

-

-   `SQL_CURRENT_QUALIFIER`:idx:

-     `odbcsql.html#412 <odbcsql.html#412>`_

-

-   `SQL_CURSOR_DYNAMIC`:idx:

-     `odbcsql.html#439 <odbcsql.html#439>`_

-

-   `SQL_CURSOR_FORWARD_ONLY`:idx:

-     `odbcsql.html#437 <odbcsql.html#437>`_

-

-   `SQL_CURSOR_KEYSET_DRIVEN`:idx:

-     `odbcsql.html#438 <odbcsql.html#438>`_

-

-   `SQL_CURSOR_SENSITIVITY`:idx:

-     `odbcsql.html#543 <odbcsql.html#543>`_

-

-   `SQL_CURSOR_STATIC`:idx:

-     `odbcsql.html#440 <odbcsql.html#440>`_

-

-   `SQL_CURSOR_TYPE`:idx:

-     `odbcsql.html#385 <odbcsql.html#385>`_

-

-   `SQL_CURSOR_TYPE_DEFAULT`:idx:

-     `odbcsql.html#441 <odbcsql.html#441>`_

-

-   `SQL_CUR_USE_DRIVER`:idx:

-     `odbcsql.html#344 <odbcsql.html#344>`_

-

-   `SQL_CUR_USE_IF_NEEDED`:idx:

-     `odbcsql.html#342 <odbcsql.html#342>`_

-

-   `SQL_CUR_USE_ODBC`:idx:

-     `odbcsql.html#343 <odbcsql.html#343>`_

-

-   `SQL_C_USHORT`:idx:

-     `odbcsql.html#221 <odbcsql.html#221>`_

-

-   `SQL_C_UTINYINT`:idx:

-     `odbcsql.html#222 <odbcsql.html#222>`_

-

-   `SQL_C_VARBOOKMARK`:idx:

-     `odbcsql.html#228 <odbcsql.html#228>`_

-

-   `SQL_DATA_AT_EXEC`:idx:

-     `odbcsql.html#353 <odbcsql.html#353>`_

-

-   `SQLDataSources`:idx:

-     `odbcsql.html#654 <odbcsql.html#654>`_

-

-   `SQL_DATE`:idx:

-     `odbcsql.html#149 <odbcsql.html#149>`_

-

-   `SQL_DATE_LEN`:idx:

-     `odbcsql.html#363 <odbcsql.html#363>`_

-

-   `SQL_DATE_STRUCT`:idx:

-     `odbcsql.html#231 <odbcsql.html#231>`_

-

-   `SQL_DATETIME`:idx:

-     `odbcsql.html#144 <odbcsql.html#144>`_

-

-   `SQL_DECIMAL`:idx:

-     `odbcsql.html#138 <odbcsql.html#138>`_

-

-   `SQL_DEFAULT`:idx:

-     `odbcsql.html#493 <odbcsql.html#493>`_

-

-   `SQL_DELETE`:idx:

-     `odbcsql.html#325 <odbcsql.html#325>`_

-

-   `SQL_DELETE_BY_BOOKMARK`:idx:

-     `odbcsql.html#320 <odbcsql.html#320>`_

-

-   `SQL_DESC_ALLOC_TYPE`:idx:

-     `odbcsql.html#460 <odbcsql.html#460>`_

-

-   `SQL_DESC_ARRAY_SIZE`:idx:

-     `odbcsql.html#590 <odbcsql.html#590>`_

-

-   `SQL_DESC_ARRAY_STATUS_PTR`:idx:

-     `odbcsql.html#591 <odbcsql.html#591>`_

-

-   `SQL_DESC_AUTO_UNIQUE_VALUE`:idx:

-     `odbcsql.html#592 <odbcsql.html#592>`_

-

-   `SQL_DESC_BASE_COLUMN_NAME`:idx:

-     `odbcsql.html#593 <odbcsql.html#593>`_

-

-   `SQL_DESC_BASE_TABLE_NAME`:idx:

-     `odbcsql.html#594 <odbcsql.html#594>`_

-

-   `SQL_DESC_BIND_OFFSET_PTR`:idx:

-     `odbcsql.html#595 <odbcsql.html#595>`_

-

-   `SQL_DESC_BIND_TYPE`:idx:

-     `odbcsql.html#596 <odbcsql.html#596>`_

-

-   `SQL_DESC_CASE_SENSITIVE`:idx:

-     `odbcsql.html#597 <odbcsql.html#597>`_

-

-   `SQL_DESC_CATALOG_NAME`:idx:

-     `odbcsql.html#598 <odbcsql.html#598>`_

-

-   `SQL_DESC_CONCISE_TYPE`:idx:

-     `odbcsql.html#599 <odbcsql.html#599>`_

-

-   `SQL_DESC_COUNT`:idx:

-     `odbcsql.html#447 <odbcsql.html#447>`_

-

-   `SQL_DESC_DATA_PTR`:idx:

-     `odbcsql.html#456 <odbcsql.html#456>`_

-

-   `SQL_DESC_DATETIME_INTERVAL_CODE`:idx:

-     `odbcsql.html#453 <odbcsql.html#453>`_

-

-   `SQL_DESC_DATETIME_INTERVAL_PRECISION`:idx:

-     `odbcsql.html#600 <odbcsql.html#600>`_

-

-   `SQL_DESC_DISPLAY_SIZE`:idx:

-     `odbcsql.html#601 <odbcsql.html#601>`_

-

-   `SQL_DESC_FIXED_PREC_SCALE`:idx:

-     `odbcsql.html#602 <odbcsql.html#602>`_

-

-   `SQL_DESC_INDICATOR_PTR`:idx:

-     `odbcsql.html#455 <odbcsql.html#455>`_

-

-   `SQL_DESC_LABEL`:idx:

-     `odbcsql.html#603 <odbcsql.html#603>`_

-

-   `SQL_DESC_LENGTH`:idx:

-     `odbcsql.html#449 <odbcsql.html#449>`_

-

-   `SQL_DESC_LITERAL_PREFIX`:idx:

-     `odbcsql.html#604 <odbcsql.html#604>`_

-

-   `SQL_DESC_LITERAL_SUFFIX`:idx:

-     `odbcsql.html#605 <odbcsql.html#605>`_

-

-   `SQL_DESC_LOCAL_TYPE_NAME`:idx:

-     `odbcsql.html#606 <odbcsql.html#606>`_

-

-   `SQL_DESC_MAXIMUM_SCALE`:idx:

-     `odbcsql.html#607 <odbcsql.html#607>`_

-

-   `SQL_DESC_MINIMUM_SCALE`:idx:

-     `odbcsql.html#608 <odbcsql.html#608>`_

-

-   `SQL_DESC_NAME`:idx:

-     `odbcsql.html#457 <odbcsql.html#457>`_

-

-   `SQL_DESC_NULLABLE`:idx:

-     `odbcsql.html#454 <odbcsql.html#454>`_

-

-   `SQL_DESC_NUM_PREC_RADIX`:idx:

-     `odbcsql.html#609 <odbcsql.html#609>`_

-

-   `SQL_DESC_OCTET_LENGTH`:idx:

-     `odbcsql.html#459 <odbcsql.html#459>`_

-

-   `SQL_DESC_OCTET_LENGTH_PTR`:idx:

-     `odbcsql.html#450 <odbcsql.html#450>`_

-

-   `SQL_DESC_PARAMETER_TYPE`:idx:

-     `odbcsql.html#610 <odbcsql.html#610>`_

-

-   `SQL_DESC_PRECISION`:idx:

-     `odbcsql.html#451 <odbcsql.html#451>`_

-

-   `SQLDescribeCol`:idx:

-     `odbcsql.html#643 <odbcsql.html#643>`_

-

-   `SQL_DESCRIBE_PARAMETER`:idx:

-     `odbcsql.html#544 <odbcsql.html#544>`_

-

-   `SQL_DESC_ROWS_PROCESSED_PTR`:idx:

-     `odbcsql.html#611 <odbcsql.html#611>`_

-

-   `SQL_DESC_SCALE`:idx:

-     `odbcsql.html#452 <odbcsql.html#452>`_

-

-   `SQL_DESC_SCHEMA_NAME`:idx:

-     `odbcsql.html#612 <odbcsql.html#612>`_

-

-   `SQL_DESC_SEARCHABLE`:idx:

-     `odbcsql.html#613 <odbcsql.html#613>`_

-

-   `SQL_DESC_TABLE_NAME`:idx:

-     `odbcsql.html#615 <odbcsql.html#615>`_

-

-   `SQL_DESC_TYPE`:idx:

-     `odbcsql.html#448 <odbcsql.html#448>`_

-

-   `SQL_DESC_TYPE_NAME`:idx:

-     `odbcsql.html#614 <odbcsql.html#614>`_

-

-   `SQL_DESC_UNNAMED`:idx:

-     `odbcsql.html#458 <odbcsql.html#458>`_

-

-   `SQL_DESC_UNSIGNED`:idx:

-     `odbcsql.html#616 <odbcsql.html#616>`_

-

-   `SQL_DESC_UPDATABLE`:idx:

-     `odbcsql.html#617 <odbcsql.html#617>`_

-

-   `SQL_DIAG_ALTER_TABLE`:idx:

-     `odbcsql.html#473 <odbcsql.html#473>`_

-

-   `SQL_DIAG_CLASS_ORIGIN`:idx:

-     `odbcsql.html#468 <odbcsql.html#468>`_

-

-   `SQL_DIAG_CONNECTION_NAME`:idx:

-     `odbcsql.html#470 <odbcsql.html#470>`_

-

-   `SQL_DIAG_CREATE_INDEX`:idx:

-     `odbcsql.html#474 <odbcsql.html#474>`_

-

-   `SQL_DIAG_CREATE_TABLE`:idx:

-     `odbcsql.html#475 <odbcsql.html#475>`_

-

-   `SQL_DIAG_CREATE_VIEW`:idx:

-     `odbcsql.html#476 <odbcsql.html#476>`_

-

-   `SQL_DIAG_DELETE_WHERE`:idx:

-     `odbcsql.html#477 <odbcsql.html#477>`_

-

-   `SQL_DIAG_DROP_INDEX`:idx:

-     `odbcsql.html#478 <odbcsql.html#478>`_

-

-   `SQL_DIAG_DROP_TABLE`:idx:

-     `odbcsql.html#479 <odbcsql.html#479>`_

-

-   `SQL_DIAG_DROP_VIEW`:idx:

-     `odbcsql.html#480 <odbcsql.html#480>`_

-

-   `SQL_DIAG_DYNAMIC_DELETE_CURSOR`:idx:

-     `odbcsql.html#481 <odbcsql.html#481>`_

-

-   `SQL_DIAG_DYNAMIC_FUNCTION`:idx:

-     `odbcsql.html#467 <odbcsql.html#467>`_

-

-   `SQL_DIAG_DYNAMIC_FUNCTION_CODE`:idx:

-     `odbcsql.html#472 <odbcsql.html#472>`_

-

-   `SQL_DIAG_DYNAMIC_UPDATE_CURSOR`:idx:

-     `odbcsql.html#482 <odbcsql.html#482>`_

-

-   `SQL_DIAG_GRANT`:idx:

-     `odbcsql.html#483 <odbcsql.html#483>`_

-

-   `SQL_DIAG_INSERT`:idx:

-     `odbcsql.html#484 <odbcsql.html#484>`_

-

-   `SQL_DIAG_MESSAGE_TEXT`:idx:

-     `odbcsql.html#466 <odbcsql.html#466>`_

-

-   `SQL_DIAG_NATIVE`:idx:

-     `odbcsql.html#465 <odbcsql.html#465>`_

-

-   `SQL_DIAG_NUMBER`:idx:

-     `odbcsql.html#462 <odbcsql.html#462>`_

-

-   `SQL_DIAG_RETURNCODE`:idx:

-     `odbcsql.html#461 <odbcsql.html#461>`_

-

-   `SQL_DIAG_REVOKE`:idx:

-     `odbcsql.html#485 <odbcsql.html#485>`_

-

-   `SQL_DIAG_ROW_COUNT`:idx:

-     `odbcsql.html#463 <odbcsql.html#463>`_

-

-   `SQL_DIAG_SELECT_CURSOR`:idx:

-     `odbcsql.html#486 <odbcsql.html#486>`_

-

-   `SQL_DIAG_SERVER_NAME`:idx:

-     `odbcsql.html#471 <odbcsql.html#471>`_

-

-   `SQL_DIAG_SQLSTATE`:idx:

-     `odbcsql.html#464 <odbcsql.html#464>`_

-

-   `SQL_DIAG_SUBCLASS_ORIGIN`:idx:

-     `odbcsql.html#469 <odbcsql.html#469>`_

-

-   `SQL_DIAG_UNKNOWN_STATEMENT`:idx:

-     `odbcsql.html#487 <odbcsql.html#487>`_

-

-   `SQL_DIAG_UPDATE_WHERE`:idx:

-     `odbcsql.html#488 <odbcsql.html#488>`_

-

-   `SQLDisconnect`:idx:

-     `odbcsql.html#634 <odbcsql.html#634>`_

-

-   `SQL_DOUBLE`:idx:

-     `odbcsql.html#143 <odbcsql.html#143>`_

-

-   `SQL_DRIVER_COMPLETE`:idx:

-     `odbcsql.html#242 <odbcsql.html#242>`_

-

-   `SQL_DRIVER_COMPLETE_REQUIRED`:idx:

-     `odbcsql.html#244 <odbcsql.html#244>`_

-

-   `SQLDriverConnect`:idx:

-     `odbcsql.html#635 <odbcsql.html#635>`_

-

-   `SQL_DRIVER_NOPROMPT`:idx:

-     `odbcsql.html#241 <odbcsql.html#241>`_

-

-   `SQL_DRIVER_PROMPT`:idx:

-     `odbcsql.html#243 <odbcsql.html#243>`_

-

-   `SQLDrivers`:idx:

-     `odbcsql.html#655 <odbcsql.html#655>`_

-

-   `SQL_DROP`:idx:

-     `odbcsql.html#504 <odbcsql.html#504>`_

-

-   `SQL_DYNAMIC_CURSOR_ATTRIBUTES1`:idx:

-     `odbcsql.html#271 <odbcsql.html#271>`_

-

-   `SQL_DYNAMIC_CURSOR_ATTRIBUTES2`:idx:

-     `odbcsql.html#272 <odbcsql.html#272>`_

-

-   `SQLEndTran`:idx:

-     `odbcsql.html#663 <odbcsql.html#663>`_

-

-   `SQL_ENSURE`:idx:

-     `odbcsql.html#529 <odbcsql.html#529>`_

-

-   `SQL_ERROR`:idx:

-     `odbcsql.html#357 <odbcsql.html#357>`_

-

-   `SQLExecDirect`:idx:

-     `odbcsql.html#637 <odbcsql.html#637>`_

-

-   `SQLExecute`:idx:

-     `odbcsql.html#640 <odbcsql.html#640>`_

-

-   `SQLExtendedFetch`:idx:

-     `odbcsql.html#645 <odbcsql.html#645>`_

-

-   `SQL_FALSE`:idx:

-     `odbcsql.html#498 <odbcsql.html#498>`_

-

-   `SQLFetch`:idx:

-     `odbcsql.html#641 <odbcsql.html#641>`_

-

-   `SQL_FETCH_ABSOLUTE`:idx:

-     `odbcsql.html#513 <odbcsql.html#513>`_

-

-   `SQL_FETCH_BOOKMARK`:idx:

-     `odbcsql.html#250 <odbcsql.html#250>`_

-

-   `SQL_FETCH_BY_BOOKMARK`:idx:

-     `odbcsql.html#321 <odbcsql.html#321>`_

-

-   `SQL_FETCH_FIRST`:idx:

-     `odbcsql.html#508 <odbcsql.html#508>`_

-

-   `SQL_FETCH_FIRST_SYSTEM`:idx:

-     `odbcsql.html#510 <odbcsql.html#510>`_

-

-   `SQL_FETCH_FIRST_USER`:idx:

-     `odbcsql.html#509 <odbcsql.html#509>`_

-

-   `SQL_FETCH_LAST`:idx:

-     `odbcsql.html#511 <odbcsql.html#511>`_

-

-   `SQL_FETCH_NEXT`:idx:

-     `odbcsql.html#507 <odbcsql.html#507>`_

-

-   `SQL_FETCH_PRIOR`:idx:

-     `odbcsql.html#512 <odbcsql.html#512>`_

-

-   `SQL_FETCH_RELATIVE`:idx:

-     `odbcsql.html#514 <odbcsql.html#514>`_

-

-   `SQLFetchScroll`:idx:

-     `odbcsql.html#644 <odbcsql.html#644>`_

-

-   `SQL_FLOAT`:idx:

-     `odbcsql.html#141 <odbcsql.html#141>`_

-

-   `SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1`:idx:

-     `odbcsql.html#273 <odbcsql.html#273>`_

-

-   `SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2`:idx:

-     `odbcsql.html#274 <odbcsql.html#274>`_

-

-   `SQLFreeHandle`:idx:

-     `odbcsql.html#630 <odbcsql.html#630>`_

-

-   `SQLFreeStmt`:idx:

-     `odbcsql.html#661 <odbcsql.html#661>`_

-

-   `SQL_GET_BOOKMARK`:idx:

-     `odbcsql.html#392 <odbcsql.html#392>`_

-

-   `SQLGetCursorName`:idx:

-     `odbcsql.html#657 <odbcsql.html#657>`_

-

-   `SQLGetData`:idx:

-     `odbcsql.html#646 <odbcsql.html#646>`_

-

-   `SQLGetDiagField`:idx:

-     `odbcsql.html#632 <odbcsql.html#632>`_

-

-   `SQLGetDiagRec`:idx:

-     `odbcsql.html#631 <odbcsql.html#631>`_

-

-   `SQLGetEnvAttr`:idx:

-     `odbcsql.html#629 <odbcsql.html#629>`_

-

-   `SQLGetInfo`:idx:

-     `odbcsql.html#649 <odbcsql.html#649>`_

-

-   `SQLGetStmtAttr`:idx:

-     `odbcsql.html#648 <odbcsql.html#648>`_

-

-   `SQL_GUID`:idx:

-     `odbcsql.html#153 <odbcsql.html#153>`_

-

-   `SQL_HANDLE_DBC`:idx:

-     `odbcsql.html#367 <odbcsql.html#367>`_

-

-   `SQL_HANDLE_DESC`:idx:

-     `odbcsql.html#369 <odbcsql.html#369>`_

-

-   `SQL_HANDLE_ENV`:idx:

-     `odbcsql.html#366 <odbcsql.html#366>`_

-

-   `SQL_HANDLE_STMT`:idx:

-     `odbcsql.html#368 <odbcsql.html#368>`_

-

-   `SQL_INDEX_ALL`:idx:

-     `odbcsql.html#527 <odbcsql.html#527>`_

-

-   `SQL_INDEX_CLUSTERED`:idx:

-     `odbcsql.html#531 <odbcsql.html#531>`_

-

-   `SQL_INDEX_HASHED`:idx:

-     `odbcsql.html#532 <odbcsql.html#532>`_

-

-   `SQL_INDEX_KEYWORDS`:idx:

-     `odbcsql.html#275 <odbcsql.html#275>`_

-

-   `SQL_INDEX_OTHER`:idx:

-     `odbcsql.html#533 <odbcsql.html#533>`_

-

-   `SQL_INDEX_UNIQUE`:idx:

-     `odbcsql.html#526 <odbcsql.html#526>`_

-

-   `SQL_INFO_SCHEMA_VIEWS`:idx:

-     `odbcsql.html#276 <odbcsql.html#276>`_

-

-   `SQL_INSENSITIVE`:idx:

-     `odbcsql.html#490 <odbcsql.html#490>`_

-

-   `SQL_INTEGER`:idx:

-     `odbcsql.html#139 <odbcsql.html#139>`_

-

-   `SQL_INTERVAL`:idx:

-     `odbcsql.html#152 <odbcsql.html#152>`_

-

-   `SQL_INTERVAL_DAY`:idx:

-     `odbcsql.html#169 <odbcsql.html#169>`_

-

-   `SQL_INTERVAL_DAY_TO_HOUR`:idx:

-     `odbcsql.html#174 <odbcsql.html#174>`_

-

-   `SQL_INTERVAL_DAY_TO_MINUTE`:idx:

-     `odbcsql.html#175 <odbcsql.html#175>`_

-

-   `SQL_INTERVAL_DAY_TO_SECOND`:idx:

-     `odbcsql.html#176 <odbcsql.html#176>`_

-

-   `SQL_INTERVAL_HOUR`:idx:

-     `odbcsql.html#170 <odbcsql.html#170>`_

-

-   `SQL_INTERVAL_HOUR_TO_MINUTE`:idx:

-     `odbcsql.html#177 <odbcsql.html#177>`_

-

-   `SQL_INTERVAL_HOUR_TO_SECOND`:idx:

-     `odbcsql.html#178 <odbcsql.html#178>`_

-

-   `SQL_INTERVAL_MINUTE`:idx:

-     `odbcsql.html#171 <odbcsql.html#171>`_

-

-   `SQL_INTERVAL_MINUTE_TO_SECOND`:idx:

-     `odbcsql.html#179 <odbcsql.html#179>`_

-

-   `SQL_INTERVAL_MONTH`:idx:

-     `odbcsql.html#168 <odbcsql.html#168>`_

-

-   `SQL_INTERVAL_SECOND`:idx:

-     `odbcsql.html#172 <odbcsql.html#172>`_

-

-   `SQL_INTERVAL_YEAR`:idx:

-     `odbcsql.html#167 <odbcsql.html#167>`_

-

-   `SQL_INTERVAL_YEAR_TO_MONTH`:idx:

-     `odbcsql.html#173 <odbcsql.html#173>`_

-

-   `SQL_INVALID_HANDLE`:idx:

-     `odbcsql.html#358 <odbcsql.html#358>`_

-

-   `SQL_IS_INTEGER`:idx:

-     `odbcsql.html#247 <odbcsql.html#247>`_

-

-   `SQL_IS_POINTER`:idx:

-     `odbcsql.html#245 <odbcsql.html#245>`_

-

-   `SQL_IS_SMALLINT`:idx:

-     `odbcsql.html#249 <odbcsql.html#249>`_

-

-   `SQL_IS_UINTEGER`:idx:

-     `odbcsql.html#246 <odbcsql.html#246>`_

-

-   `SQL_IS_USMALLINT`:idx:

-     `odbcsql.html#248 <odbcsql.html#248>`_

-

-   `SQL_KEYSET_CURSOR_ATTRIBUTES1`:idx:

-     `odbcsql.html#277 <odbcsql.html#277>`_

-

-   `SQL_KEYSET_CURSOR_ATTRIBUTES2`:idx:

-     `odbcsql.html#278 <odbcsql.html#278>`_

-

-   `SQL_KEYSET_SIZE`:idx:

-     `odbcsql.html#387 <odbcsql.html#387>`_

-

-   `SQL_LOCK_EXCLUSIVE`:idx:

-     `odbcsql.html#327 <odbcsql.html#327>`_

-

-   `SQL_LOCK_NO_CHANGE`:idx:

-     `odbcsql.html#326 <odbcsql.html#326>`_

-

-   `SQL_LOCK_UNLOCK`:idx:

-     `odbcsql.html#328 <odbcsql.html#328>`_

-

-   `SQL_LOGIN_TIMEOUT`:idx:

-     `odbcsql.html#407 <odbcsql.html#407>`_

-

-   `SQL_LONGVARBINARY`:idx:

-     `odbcsql.html#129 <odbcsql.html#129>`_

-

-   `SQL_LONGVARCHAR`:idx:

-     `odbcsql.html#126 <odbcsql.html#126>`_

-

-   `SQL_MAX_DSN_LENGTH`:idx:

-     `odbcsql.html#338 <odbcsql.html#338>`_

-

-   `SQL_MAX_IDENTIFIER_LEN`:idx:

-     `odbcsql.html#547 <odbcsql.html#547>`_

-

-   `SQL_MAXIMUM_IDENTIFIER_LENGTH`:idx:

-     `odbcsql.html#548 <odbcsql.html#548>`_

-

-   `SQL_MAX_LENGTH`:idx:

-     `odbcsql.html#382 <odbcsql.html#382>`_

-

-   `SQL_MAX_MESSAGE_LENGTH`:idx:

-     `odbcsql.html#362 <odbcsql.html#362>`_

-

-   `SQL_MAX_OPTION_STRING_LENGTH`:idx:

-     `odbcsql.html#339 <odbcsql.html#339>`_

-

-   `SQL_MAX_ROWS`:idx:

-     `odbcsql.html#380 <odbcsql.html#380>`_

-

-   `SQL_MODE_DEFAULT`:idx:

-     `odbcsql.html#431 <odbcsql.html#431>`_

-

-   `SQL_MODE_READ_ONLY`:idx:

-     `odbcsql.html#430 <odbcsql.html#430>`_

-

-   `SQL_MODE_READ_WRITE`:idx:

-     `odbcsql.html#429 <odbcsql.html#429>`_

-

-   `SQL_NAME_LEN`:idx:

-     `odbcsql.html#237 <odbcsql.html#237>`_

-

-   `SQL_NEED_DATA`:idx:

-     `odbcsql.html#360 <odbcsql.html#360>`_

-

-   `SQL_NO_DATA`:idx:

-     `odbcsql.html#356 <odbcsql.html#356>`_

-

-   `SQL_NONSCROLLABLE`:idx:

-     `odbcsql.html#435 <odbcsql.html#435>`_

-

-   `SQL_NO_NULLS`:idx:

-     `odbcsql.html#500 <odbcsql.html#500>`_

-

-   `SQL_NOSCAN`:idx:

-     `odbcsql.html#381 <odbcsql.html#381>`_

-

-   `SQL_NO_TOTAL`:idx:

-     `odbcsql.html#230 <odbcsql.html#230>`_

-

-   `SQL_NTS`:idx:

-     `odbcsql.html#361 <odbcsql.html#361>`_

-

-   `SQL_NULLABLE`:idx:

-     `odbcsql.html#501 <odbcsql.html#501>`_

-

-   `SQL_NULLABLE_UNKNOWN`:idx:

-     `odbcsql.html#502 <odbcsql.html#502>`_

-

-   `SQL_NULL_DATA`:idx:

-     `odbcsql.html#352 <odbcsql.html#352>`_

-

-   `SQL_NULL_HANDLE`:idx:

-     `odbcsql.html#519 <odbcsql.html#519>`_

-

-   `SQL_NULL_HDBC`:idx:

-     `odbcsql.html#516 <odbcsql.html#516>`_

-

-   `SQL_NULL_HDESC`:idx:

-     `odbcsql.html#518 <odbcsql.html#518>`_

-

-   `SQL_NULL_HENV`:idx:

-     `odbcsql.html#515 <odbcsql.html#515>`_

-

-   `SQL_NULL_HSTMT`:idx:

-     `odbcsql.html#517 <odbcsql.html#517>`_

-

-   `SQL_NUMERIC`:idx:

-     `odbcsql.html#137 <odbcsql.html#137>`_

-

-   `SQLNumResultCols`:idx:

-     `odbcsql.html#642 <odbcsql.html#642>`_

-

-   `SQL_ODBC_CURSORS`:idx:

-     `odbcsql.html#340 <odbcsql.html#340>`_

-

-   `SQL_OJ_CAPABILITIES`:idx:

-     `odbcsql.html#540 <odbcsql.html#540>`_

-

-   `SQL_OPT_TRACE`:idx:

-     `odbcsql.html#408 <odbcsql.html#408>`_

-

-   `SQL_OPT_TRACEFILE`:idx:

-     `odbcsql.html#409 <odbcsql.html#409>`_

-

-   `SQL_OUTER_JOIN_CAPABILITIES`:idx:

-     `odbcsql.html#541 <odbcsql.html#541>`_

-

-   `SQL_OV_ODBC2`:idx:

-     `odbcsql.html#239 <odbcsql.html#239>`_

-

-   `SQL_OV_ODBC3`:idx:

-     `odbcsql.html#238 <odbcsql.html#238>`_

-

-   `SQL_PACKET_SIZE`:idx:

-     `odbcsql.html#414 <odbcsql.html#414>`_

-

-   `SQL_PARAM_INPUT`:idx:

-     `odbcsql.html#347 <odbcsql.html#347>`_

-

-   `SQL_PARAM_INPUT_OUTPUT`:idx:

-     `odbcsql.html#348 <odbcsql.html#348>`_

-

-   `SQL_PARAM_OUTPUT`:idx:

-     `odbcsql.html#350 <odbcsql.html#350>`_

-

-   `SQL_PARAM_TYPE_UNKNOWN`:idx:

-     `odbcsql.html#346 <odbcsql.html#346>`_

-

-   `SQL_POSITION`:idx:

-     `odbcsql.html#322 <odbcsql.html#322>`_

-

-   `SQLPrepare`:idx:

-     `odbcsql.html#638 <odbcsql.html#638>`_

-

-   `SQLPrimaryKeys`:idx:

-     `odbcsql.html#668 <odbcsql.html#668>`_

-

-   `SQLProcedureColumns`:idx:

-     `odbcsql.html#669 <odbcsql.html#669>`_

-

-   `SQLProcedures`:idx:

-     `odbcsql.html#667 <odbcsql.html#667>`_

-

-   `SQLPutData`:idx:

-     `odbcsql.html#651 <odbcsql.html#651>`_

-

-   `SQL_QUERY_TIMEOUT`:idx:

-     `odbcsql.html#379 <odbcsql.html#379>`_

-

-   `SQL_QUICK`:idx:

-     `odbcsql.html#528 <odbcsql.html#528>`_

-

-   `SQL_QUIET_MODE`:idx:

-     `odbcsql.html#413 <odbcsql.html#413>`_

-

-   `SQL_REAL`:idx:

-     `odbcsql.html#142 <odbcsql.html#142>`_

-

-   `SQL_REFRESH`:idx:

-     `odbcsql.html#323 <odbcsql.html#323>`_

-

-   `SQL_RESET_PARAMS`:idx:

-     `odbcsql.html#506 <odbcsql.html#506>`_

-

-   `SQL_RESULT_COL`:idx:

-     `odbcsql.html#349 <odbcsql.html#349>`_

-

-   `SQL_RETRIEVE_DATA`:idx:

-     `odbcsql.html#390 <odbcsql.html#390>`_

-

-   `SQL_RETURN_VALUE`:idx:

-     `odbcsql.html#351 <odbcsql.html#351>`_

-

-   `SQL_ROLLBACK`:idx:

-     `odbcsql.html#619 <odbcsql.html#619>`_

-

-   `SQL_ROW_ADDED`:idx:

-     `odbcsql.html#333 <odbcsql.html#333>`_

-

-   `SQLRowCount`:idx:

-     `odbcsql.html#659 <odbcsql.html#659>`_

-

-   `SQL_ROW_DELETED`:idx:

-     `odbcsql.html#330 <odbcsql.html#330>`_

-

-   `SQL_ROW_ERROR`:idx:

-     `odbcsql.html#334 <odbcsql.html#334>`_

-

-   `SQL_ROW_IDENTIFIER`:idx:

-     `odbcsql.html#525 <odbcsql.html#525>`_

-

-   `SQL_ROW_IGNORE`:idx:

-     `odbcsql.html#337 <odbcsql.html#337>`_

-

-   `SQL_ROW_NOROW`:idx:

-     `odbcsql.html#332 <odbcsql.html#332>`_

-

-   `SQL_ROW_NUMBER`:idx:

-     `odbcsql.html#393 <odbcsql.html#393>`_

-

-   `SQL_ROW_PROCEED`:idx:

-     `odbcsql.html#336 <odbcsql.html#336>`_

-

-   `SQL_ROWSET_SIZE`:idx:

-     `odbcsql.html#388 <odbcsql.html#388>`_

-

-   `SQL_ROW_SUCCESS`:idx:

-     `odbcsql.html#329 <odbcsql.html#329>`_

-

-   `SQL_ROW_SUCCESS_WITH_INFO`:idx:

-     `odbcsql.html#335 <odbcsql.html#335>`_

-

-   `SQL_ROW_UPDATED`:idx:

-     `odbcsql.html#331 <odbcsql.html#331>`_

-

-   `SQL_ROWVER`:idx:

-     `odbcsql.html#524 <odbcsql.html#524>`_

-

-   `SQL_SCCO_LOCK`:idx:

-     `odbcsql.html#550 <odbcsql.html#550>`_

-

-   `SQL_SCCO_OPT_ROWVER`:idx:

-     `odbcsql.html#551 <odbcsql.html#551>`_

-

-   `SQL_SCCO_OPT_VALUES`:idx:

-     `odbcsql.html#552 <odbcsql.html#552>`_

-

-   `SQL_SCCO_READ_ONLY`:idx:

-     `odbcsql.html#549 <odbcsql.html#549>`_

-

-   `SQL_SCOPE_CURROW`:idx:

-     `odbcsql.html#520 <odbcsql.html#520>`_

-

-   `SQL_SCOPE_SESSION`:idx:

-     `odbcsql.html#522 <odbcsql.html#522>`_

-

-   `SQL_SCOPE_TRANSACTION`:idx:

-     `odbcsql.html#521 <odbcsql.html#521>`_

-

-   `SQL_SCROLLABLE`:idx:

-     `odbcsql.html#436 <odbcsql.html#436>`_

-

-   `SQL_SCROLL_CONCURRENCY`:idx:

-     `odbcsql.html#534 <odbcsql.html#534>`_

-

-   `SQL_SCROLL_OPTIONS`:idx:

-     `odbcsql.html#251 <odbcsql.html#251>`_

-

-   `SQL_SENSITIVE`:idx:

-     `odbcsql.html#491 <odbcsql.html#491>`_

-

-   `SQLSetConnectAttr`:idx:

-     `odbcsql.html#656 <odbcsql.html#656>`_

-

-   `SQLSetCursorName`:idx:

-     `odbcsql.html#658 <odbcsql.html#658>`_

-

-   `SQLSetEnvAttr`:idx:

-     `odbcsql.html#628 <odbcsql.html#628>`_

-

-   `SQLSetPos`:idx:

-     `odbcsql.html#653 <odbcsql.html#653>`_

-

-   `SQL_SETPOS_MAX_OPTION_VALUE`:idx:

-     `odbcsql.html#318 <odbcsql.html#318>`_

-

-   `SQLSetStmtAttr`:idx:

-     `odbcsql.html#647 <odbcsql.html#647>`_

-

-   `SQL_SIGNED_OFFSET`:idx:

-     `odbcsql.html#191 <odbcsql.html#191>`_

-

-   `SQL_SIMULATE_CURSOR`:idx:

-     `odbcsql.html#389 <odbcsql.html#389>`_

-

-   `SQL_SMALLINT`:idx:

-     `odbcsql.html#140 <odbcsql.html#140>`_

-

-   `SQL_SO_DYNAMIC`:idx:

-     `odbcsql.html#259 <odbcsql.html#259>`_

-

-   `SQL_SO_FORWARD_ONLY`:idx:

-     `odbcsql.html#257 <odbcsql.html#257>`_

-

-   `SQL_SO_KEYSET_DRIVEN`:idx:

-     `odbcsql.html#258 <odbcsql.html#258>`_

-

-   `SQL_SO_MIXED`:idx:

-     `odbcsql.html#260 <odbcsql.html#260>`_

-

-   `SQL_SO_STATIC`:idx:

-     `odbcsql.html#261 <odbcsql.html#261>`_

-

-   `SQLSpecialColumns`:idx:

-     `odbcsql.html#666 <odbcsql.html#666>`_

-

-   `SQL_SS_ADDITIONS`:idx:

-     `odbcsql.html#566 <odbcsql.html#566>`_

-

-   `SQL_SS_DELETIONS`:idx:

-     `odbcsql.html#567 <odbcsql.html#567>`_

-

-   `SQL_SS_UPDATES`:idx:

-     `odbcsql.html#568 <odbcsql.html#568>`_

-

-   `SQL_STATIC_CURSOR_ATTRIBUTES1`:idx:

-     `odbcsql.html#279 <odbcsql.html#279>`_

-

-   `SQL_STATIC_CURSOR_ATTRIBUTES2`:idx:

-     `odbcsql.html#280 <odbcsql.html#280>`_

-

-   `SQL_STATIC_SENSITIVITY`:idx:

-     `odbcsql.html#263 <odbcsql.html#263>`_

-

-   `SQLStatistics`:idx:

-     `odbcsql.html#670 <odbcsql.html#670>`_

-

-   `SQL_STILL_EXECUTING`:idx:

-     `odbcsql.html#359 <odbcsql.html#359>`_

-

-   `SQL_SUCCESS`:idx:

-     `odbcsql.html#354 <odbcsql.html#354>`_

-

-   `SQL_SUCCESS_WITH_INFO`:idx:

-     `odbcsql.html#355 <odbcsql.html#355>`_

-

-   `SQLTables`:idx:

-     `odbcsql.html#664 <odbcsql.html#664>`_

-

-   `SQL_TABLE_STAT`:idx:

-     `odbcsql.html#530 <odbcsql.html#530>`_

-

-   `SQL_TC_ALL`:idx:

-     `odbcsql.html#555 <odbcsql.html#555>`_

-

-   `SQL_TC_DDL_COMMIT`:idx:

-     `odbcsql.html#556 <odbcsql.html#556>`_

-

-   `SQL_TC_DDL_IGNORE`:idx:

-     `odbcsql.html#557 <odbcsql.html#557>`_

-

-   `SQL_TC_DML`:idx:

-     `odbcsql.html#554 <odbcsql.html#554>`_

-

-   `SQL_TC_NONE`:idx:

-     `odbcsql.html#553 <odbcsql.html#553>`_

-

-   `SQL_TIME`:idx:

-     `odbcsql.html#150 <odbcsql.html#150>`_

-

-   `SQL_TIME_LEN`:idx:

-     `odbcsql.html#364 <odbcsql.html#364>`_

-

-   `SQL_TIMESTAMP`:idx:

-     `odbcsql.html#151 <odbcsql.html#151>`_

-

-   `SQL_TIMESTAMP_LEN`:idx:

-     `odbcsql.html#365 <odbcsql.html#365>`_

-

-   `SQL_TIMESTAMP_STRUCT`:idx:

-     `odbcsql.html#235 <odbcsql.html#235>`_

-

-   `SQL_TIME_STRUCT`:idx:

-     `odbcsql.html#233 <odbcsql.html#233>`_

-

-   `SQL_TINYINT`:idx:

-     `odbcsql.html#131 <odbcsql.html#131>`_

-

-   `SQL_TRANSACTION_CAPABLE`:idx:

-     `odbcsql.html#536 <odbcsql.html#536>`_

-

-   `SQL_TRANSACTION_ISOLATION_OPTION`:idx:

-     `odbcsql.html#539 <odbcsql.html#539>`_

-

-   `SQL_TRANSACTION_READ_COMMITTED`:idx:

-     `odbcsql.html#561 <odbcsql.html#561>`_

-

-   `SQL_TRANSACTION_READ_UNCOMMITTED`:idx:

-     `odbcsql.html#559 <odbcsql.html#559>`_

-

-   `SQL_TRANSACTION_REPEATABLE_READ`:idx:

-     `odbcsql.html#563 <odbcsql.html#563>`_

-

-   `SQL_TRANSACTION_SERIALIZABLE`:idx:

-     `odbcsql.html#565 <odbcsql.html#565>`_

-

-   `SQL_TRANSLATE_DLL`:idx:

-     `odbcsql.html#410 <odbcsql.html#410>`_

-

-   `SQL_TRANSLATE_OPTION`:idx:

-     `odbcsql.html#411 <odbcsql.html#411>`_

-

-   `SQL_TRUE`:idx:

-     `odbcsql.html#499 <odbcsql.html#499>`_

-

-   `SQL_TXN_CAPABLE`:idx:

-     `odbcsql.html#535 <odbcsql.html#535>`_

-

-   `SQL_TXN_ISOLATION`:idx:

-     `odbcsql.html#402 <odbcsql.html#402>`_

-

-   `SQL_TXN_ISOLATION_OPTION`:idx:

-     `odbcsql.html#538 <odbcsql.html#538>`_

-

-   `SQL_TXN_READ_COMMITTED`:idx:

-     `odbcsql.html#560 <odbcsql.html#560>`_

-

-   `SQL_TXN_READ_UNCOMMITTED`:idx:

-     `odbcsql.html#558 <odbcsql.html#558>`_

-

-   `SQL_TXN_REPEATABLE_READ`:idx:

-     `odbcsql.html#562 <odbcsql.html#562>`_

-

-   `SQL_TXN_SERIALIZABLE`:idx:

-     `odbcsql.html#564 <odbcsql.html#564>`_

-

-   `SQL_TYPE_DATE`:idx:

-     `odbcsql.html#146 <odbcsql.html#146>`_

-

-   `SQL_TYPE_MAX`:idx:

-     `odbcsql.html#227 <odbcsql.html#227>`_

-

-   `SQL_TYPE_MIN`:idx:

-     `odbcsql.html#226 <odbcsql.html#226>`_

-

-   `SQL_TYPE_NULL`:idx:

-     `odbcsql.html#225 <odbcsql.html#225>`_

-

-   `SQL_TYPE_TIME`:idx:

-     `odbcsql.html#147 <odbcsql.html#147>`_

-

-   `SQL_TYPE_TIMESTAMP`:idx:

-     `odbcsql.html#148 <odbcsql.html#148>`_

-

-   `SQL_UB_DEFAULT`:idx:

-     `odbcsql.html#254 <odbcsql.html#254>`_

-

-   `SQL_UB_FIXED`:idx:

-     `odbcsql.html#255 <odbcsql.html#255>`_

-

-   `SQL_UB_OFF`:idx:

-     `odbcsql.html#252 <odbcsql.html#252>`_

-

-   `SQL_UB_ON`:idx:

-     `odbcsql.html#253 <odbcsql.html#253>`_

-

-   `SQL_UB_VARIABLE`:idx:

-     `odbcsql.html#256 <odbcsql.html#256>`_

-

-   `SQL_UNBIND`:idx:

-     `odbcsql.html#505 <odbcsql.html#505>`_

-

-   `SQL_UNICODE`:idx:

-     `odbcsql.html#180 <odbcsql.html#180>`_

-

-   `SQL_UNICODE_CHAR`:idx:

-     `odbcsql.html#183 <odbcsql.html#183>`_

-

-   `SQL_UNICODE_LONGVARCHAR`:idx:

-     `odbcsql.html#182 <odbcsql.html#182>`_

-

-   `SQL_UNICODE_VARCHAR`:idx:

-     `odbcsql.html#181 <odbcsql.html#181>`_

-

-   `SQL_UNKNOWN_TYPE`:idx:

-     `odbcsql.html#125 <odbcsql.html#125>`_

-

-   `SQL_UNSIGNED_OFFSET`:idx:

-     `odbcsql.html#192 <odbcsql.html#192>`_

-

-   `SQL_UNSPECIFIED`:idx:

-     `odbcsql.html#489 <odbcsql.html#489>`_

-

-   `SQL_UPDATE`:idx:

-     `odbcsql.html#324 <odbcsql.html#324>`_

-

-   `SQL_UPDATE_BY_BOOKMARK`:idx:

-     `odbcsql.html#319 <odbcsql.html#319>`_

-

-   `SQL_USE_BOOKMARKS`:idx:

-     `odbcsql.html#391 <odbcsql.html#391>`_

-

-   `SQL_USER_NAME`:idx:

-     `odbcsql.html#537 <odbcsql.html#537>`_

-

-   `SQL_VARBINARY`:idx:

-     `odbcsql.html#128 <odbcsql.html#128>`_

-

-   `SQL_VARCHAR`:idx:

-     `odbcsql.html#145 <odbcsql.html#145>`_

-

-   `SQL_WCHAR`:idx:

-     `odbcsql.html#133 <odbcsql.html#133>`_

-

-   `SQL_WLONGVARCHAR`:idx:

-     `odbcsql.html#135 <odbcsql.html#135>`_

-

-   `SQL_WVARCHAR`:idx:

-     `odbcsql.html#134 <odbcsql.html#134>`_

-

-   `SQL_XOPEN_CLI_YEAR`:idx:

-     `odbcsql.html#542 <odbcsql.html#542>`_

-

-   `sqrt`:idx:

-     * `math.html#110 <math.html#110>`_

-     * `complex.html#109 <complex.html#109>`_

-

-   `SS_DISABLE`:idx:

-     `posix.html#765 <posix.html#765>`_

-

-   `SS_ONSTACK`:idx:

-     `posix.html#764 <posix.html#764>`_

-

-   `stack_trace`:idx:

-     `nimrodc.html#108 <nimrodc.html#108>`_

-

-   `startsWith`:idx:

-     `strutils.html#137 <strutils.html#137>`_

-

-   `stat`:idx:

-     `posix.html#1065 <posix.html#1065>`_

-

-   `statement macros`:idx:

-     `tut2.html#114 <tut2.html#114>`_

-

-   `Statements`:idx:

-     `manual.html#173 <manual.html#173>`_

-

-   `static error`:idx:

-     `manual.html#109 <manual.html#109>`_

-

-   `static type`:idx:

-     `manual.html#103 <manual.html#103>`_

-

-   `statvfs`:idx:

-     `posix.html#1056 <posix.html#1056>`_

-

-   `stdcall`:idx:

-     `manual.html#164 <manual.html#164>`_

-

-   `stderr`:idx:

-     `system.html#485 <system.html#485>`_

-

-   `STDERR_FILENO`:idx:

-     `posix.html#127 <posix.html#127>`_

-

-   `stdin`:idx:

-     `system.html#483 <system.html#483>`_

-

-   `STDIN_FILENO`:idx:

-     `posix.html#128 <posix.html#128>`_

-

-   `stdout`:idx:

-     `system.html#484 <system.html#484>`_

-

-   `STDOUT_FILENO`:idx:

-     `posix.html#129 <posix.html#129>`_

-

-   `ST_NOSUID`:idx:

-     `posix.html#673 <posix.html#673>`_

-

-   `ST_RDONLY`:idx:

-     `posix.html#672 <posix.html#672>`_

-

-   `strerror`:idx:

-     `posix.html#1160 <posix.html#1160>`_

-

-   `strfmon`:idx:

-     `posix.html#848 <posix.html#848>`_

-

-   `strftime`:idx:

-     `posix.html#1110 <posix.html#1110>`_

-

-   `string`:idx:

-     * `manual.html#150 <manual.html#150>`_

-     * `system.html#111 <system.html#111>`_

-

-   `strip`:idx:

-     `strutils.html#105 <strutils.html#105>`_

-

-   `strptime`:idx:

-     `posix.html#1111 <posix.html#1111>`_

-

-   `strStart`:idx:

-     `strutils.html#103 <strutils.html#103>`_

-

-   `structured type`:idx:

-     `manual.html#151 <manual.html#151>`_

-

-   `strutils`:idx:

-     `nimrodc.html#117 <nimrodc.html#117>`_

-

-   `style-insensitive`:idx:

-     `manual.html#118 <manual.html#118>`_

-

-   `S_TYPEISMQ`:idx:

-     `posix.html#1074 <posix.html#1074>`_

-

-   `S_TYPEISSEM`:idx:

-     `posix.html#1075 <posix.html#1075>`_

-

-   `S_TYPEISSHM`:idx:

-     `posix.html#1076 <posix.html#1076>`_

-

-   `S_TYPEISTMO`:idx:

-     `posix.html#1077 <posix.html#1077>`_

-

-   `subrange`:idx:

-     * `manual.html#149 <manual.html#149>`_

-     * `tut1.html#115 <tut1.html#115>`_

-

-   `succ`:idx:

-     `system.html#157 <system.html#157>`_

-

-   `swab`:idx:

-     `posix.html#1031 <posix.html#1031>`_

-

-   `swap`:idx:

-     `system.html#419 <system.html#419>`_

-

-   `swapcontext`:idx:

-     `posix.html#1191 <posix.html#1191>`_

-

-   `symlink`:idx:

-     `posix.html#1032 <posix.html#1032>`_

-

-   `sync`:idx:

-     `posix.html#1033 <posix.html#1033>`_

-

-   `syscall`:idx:

-     `manual.html#171 <manual.html#171>`_

-

-   `sysconf`:idx:

-     `posix.html#1034 <posix.html#1034>`_

-

-   `system`:idx:

-     `manual.html#218 <manual.html#218>`_

-

-   `tabulator`:idx:

-     `manual.html#125 <manual.html#125>`_

-

-   `TAddress`:idx:

-     `system.html#372 <system.html#372>`_

-

-   `Taiocb`:idx:

-     `posix.html#204 <posix.html#204>`_

-

-   `TAllocfunc`:idx:

-     `zlib.html#108 <zlib.html#108>`_

-

-   `tan`:idx:

-     `math.html#125 <math.html#125>`_

-

-   `tanh`:idx:

-     `math.html#126 <math.html#126>`_

-

-   `TBaseLexer`:idx:

-     `lexbase.html#103 <lexbase.html#103>`_

-

-   `Tblkcnt`:idx:

-     `posix.html#143 <posix.html#143>`_

-

-   `Tblksize`:idx:

-     `posix.html#144 <posix.html#144>`_

-

-   `TCfgEvent`:idx:

-     `parsecfg.html#102 <parsecfg.html#102>`_

-

-   `TCfgEventKind`:idx:

-     `parsecfg.html#101 <parsecfg.html#101>`_

-

-   `TCfgParser`:idx:

-     `parsecfg.html#103 <parsecfg.html#103>`_

-

-   `tcgetpgrp`:idx:

-     `posix.html#1035 <posix.html#1035>`_

-

-   `TCharSet`:idx:

-     `strutils.html#101 <strutils.html#101>`_

-

-   `TClock`:idx:

-     `posix.html#145 <posix.html#145>`_

-

-   `TClockId`:idx:

-     `posix.html#146 <posix.html#146>`_

-

-   `TCmdLineKind`:idx:

-     `parseopt.html#101 <parseopt.html#101>`_

-

-   `TComplex`:idx:

-     `complex.html#101 <complex.html#101>`_

-

-   `tcsetpgrp`:idx:

-     `posix.html#1036 <posix.html#1036>`_

-

-   `TDev`:idx:

-     `posix.html#147 <posix.html#147>`_

-

-   `TDIR`:idx:

-     `posix.html#130 <posix.html#130>`_

-

-   `Tdirent`:idx:

-     `posix.html#131 <posix.html#131>`_

-

-   `telldir`:idx:

-     `posix.html#806 <posix.html#806>`_

-

-   `template`:idx:

-     `manual.html#209 <manual.html#209>`_

-

-   `TEndian`:idx:

-     `system.html#385 <system.html#385>`_

-

-   `Tfd_set`:idx:

-     `posix.html#201 <posix.html#201>`_

-

-   `Tfenv`:idx:

-     `posix.html#133 <posix.html#133>`_

-

-   `Tfexcept`:idx:

-     `posix.html#134 <posix.html#134>`_

-

-   `TFile`:idx:

-     `system.html#480 <system.html#480>`_

-

-   `TFileHandle`:idx:

-     `system.html#482 <system.html#482>`_

-

-   `TFileMode`:idx:

-     `system.html#481 <system.html#481>`_

-

-   `TFileStream`:idx:

-     `streams.html#119 <streams.html#119>`_

-

-   `TFloatClass`:idx:

-     `math.html#103 <math.html#103>`_

-

-   `Tflock`:idx:

-     `posix.html#132 <posix.html#132>`_

-

-   `T_FMT`:idx:

-     `posix.html#392 <posix.html#392>`_

-

-   `T_FMT_AMPM`:idx:

-     `posix.html#393 <posix.html#393>`_

-

-   `TFormatFlag`:idx:

-     `strtabs.html#111 <strtabs.html#111>`_

-

-   `TFreeFunc`:idx:

-     `zlib.html#109 <zlib.html#109>`_

-

-   `Tfsblkcnt`:idx:

-     `posix.html#148 <posix.html#148>`_

-

-   `Tfsfilcnt`:idx:

-     `posix.html#149 <posix.html#149>`_

-

-   `TFTW`:idx:

-     `posix.html#135 <posix.html#135>`_

-

-   `TGC_Strategy`:idx:

-     `system.html#463 <system.html#463>`_

-

-   `TGid`:idx:

-     `posix.html#150 <posix.html#150>`_

-

-   `TGlob`:idx:

-     `posix.html#136 <posix.html#136>`_

-

-   `TGroup`:idx:

-     `posix.html#137 <posix.html#137>`_

-

-   `THash`:idx:

-     `hashes.html#101 <hashes.html#101>`_

-

-   `THOUSEP`:idx:

-     `posix.html#440 <posix.html#440>`_

-

-   `Ticonv`:idx:

-     `posix.html#138 <posix.html#138>`_

-

-   `Tid`:idx:

-     `posix.html#151 <posix.html#151>`_

-

-   `time`:idx:

-     `posix.html#1112 <posix.html#1112>`_

-

-   `TimeInfoToTime`:idx:

-     `times.html#108 <times.html#108>`_

-

-   `TIMER_ABSTIME`:idx:

-     `posix.html#699 <posix.html#699>`_

-

-   `timer_create`:idx:

-     `posix.html#1113 <posix.html#1113>`_

-

-   `timer_delete`:idx:

-     `posix.html#1114 <posix.html#1114>`_

-

-   `timer_getoverrun`:idx:

-     `posix.html#1116 <posix.html#1116>`_

-

-   `timer_gettime`:idx:

-     `posix.html#1115 <posix.html#1115>`_

-

-   `timer_settime`:idx:

-     `posix.html#1117 <posix.html#1117>`_

-

-   `times`:idx:

-     `nimrodc.html#119 <nimrodc.html#119>`_

-

-   `timezone`:idx:

-     `posix.html#702 <posix.html#702>`_

-

-   `Tino`:idx:

-     `posix.html#152 <posix.html#152>`_

-

-   `TInternalState`:idx:

-     `zlib.html#110 <zlib.html#110>`_

-

-   `Tipc_perm`:idx:

-     `posix.html#182 <posix.html#182>`_

-

-   `titimerspec`:idx:

-     `posix.html#188 <posix.html#188>`_

-

-   `TKey`:idx:

-     `posix.html#153 <posix.html#153>`_

-

-   `Tlconv`:idx:

-     `posix.html#139 <posix.html#139>`_

-

-   `Tmcontext`:idx:

-     `posix.html#202 <posix.html#202>`_

-

-   `TMode`:idx:

-     `posix.html#154 <posix.html#154>`_

-

-   `TMonth`:idx:

-     `times.html#101 <times.html#101>`_

-

-   `TMqAttr`:idx:

-     `posix.html#141 <posix.html#141>`_

-

-   `TMqd`:idx:

-     `posix.html#140 <posix.html#140>`_

-

-   `Tnl_catd`:idx:

-     `posix.html#198 <posix.html#198>`_

-

-   `TNlink`:idx:

-     `posix.html#155 <posix.html#155>`_

-

-   `Tnl_item`:idx:

-     `posix.html#197 <posix.html#197>`_

-

-   `toBiggestFloat`:idx:

-     `system.html#401 <system.html#401>`_

-

-   `toBiggestInt`:idx:

-     `system.html#403 <system.html#403>`_

-

-   `toBin`:idx:

-     `strutils.html#142 <strutils.html#142>`_

-

-   `TObject`:idx:

-     `system.html#131 <system.html#131>`_

-

-   `TOff`:idx:

-     `posix.html#156 <posix.html#156>`_

-

-   `toFloat`:idx:

-     `system.html#400 <system.html#400>`_

-

-   `toHex`:idx:

-     `strutils.html#128 <strutils.html#128>`_

-

-   `toInt`:idx:

-     `system.html#402 <system.html#402>`_

-

-   `toLower`:idx:

-     * `strutils.html#106 <strutils.html#106>`_

-     * `strutils.html#107 <strutils.html#107>`_

-

-   `toOct`:idx:

-     `strutils.html#141 <strutils.html#141>`_

-

-   `toOctal`:idx:

-     `strutils.html#118 <strutils.html#118>`_

-

-   `TOptParser`:idx:

-     `parseopt.html#102 <parseopt.html#102>`_

-

-   `toString`:idx:

-     `strutils.html#133 <strutils.html#133>`_

-

-   `toU16`:idx:

-     `system.html#179 <system.html#179>`_

-

-   `toU32`:idx:

-     `system.html#180 <system.html#180>`_

-

-   `toU8`:idx:

-     `system.html#178 <system.html#178>`_

-

-   `toUpper`:idx:

-     * `strutils.html#108 <strutils.html#108>`_

-     * `strutils.html#109 <strutils.html#109>`_

-

-   `TPasswd`:idx:

-     `posix.html#142 <posix.html#142>`_

-

-   `TPathComponent`:idx:

-     `os.html#152 <os.html#152>`_

-

-   `TPid`:idx:

-     `posix.html#157 <posix.html#157>`_

-

-   `Tposix_spawnattr`:idx:

-     `posix.html#205 <posix.html#205>`_

-

-   `Tposix_spawn_file_actions`:idx:

-     `posix.html#206 <posix.html#206>`_

-

-   `Tposix_typed_mem_info`:idx:

-     `posix.html#185 <posix.html#185>`_

-

-   `Tpthread`:idx:

-     `posix.html#170 <posix.html#170>`_

-

-   `Tpthread_attr`:idx:

-     `posix.html#158 <posix.html#158>`_

-

-   `Tpthread_barrier`:idx:

-     `posix.html#159 <posix.html#159>`_

-

-   `Tpthread_barrierattr`:idx:

-     `posix.html#160 <posix.html#160>`_

-

-   `Tpthread_cond`:idx:

-     `posix.html#161 <posix.html#161>`_

-

-   `Tpthread_condattr`:idx:

-     `posix.html#162 <posix.html#162>`_

-

-   `Tpthread_key`:idx:

-     `posix.html#163 <posix.html#163>`_

-

-   `Tpthread_mutex`:idx:

-     `posix.html#164 <posix.html#164>`_

-

-   `Tpthread_mutexattr`:idx:

-     `posix.html#165 <posix.html#165>`_

-

-   `Tpthread_once`:idx:

-     `posix.html#166 <posix.html#166>`_

-

-   `Tpthread_rwlock`:idx:

-     `posix.html#167 <posix.html#167>`_

-

-   `Tpthread_rwlockattr`:idx:

-     `posix.html#168 <posix.html#168>`_

-

-   `Tpthread_spinlock`:idx:

-     `posix.html#169 <posix.html#169>`_

-

-   `traced`:idx:

-     * `manual.html#159 <manual.html#159>`_

-     * `tut1.html#121 <tut1.html#121>`_

-

-   `TResult`:idx:

-     `system.html#155 <system.html#155>`_

-

-   `truncate`:idx:

-     `posix.html#1037 <posix.html#1037>`_

-

-   `try`:idx:

-     * `manual.html#185 <manual.html#185>`_

-     * `tut2.html#108 <tut2.html#108>`_

-

-   `Tsched_param`:idx:

-     `posix.html#199 <posix.html#199>`_

-

-   `TSem`:idx:

-     `posix.html#181 <posix.html#181>`_

-

-   `TSigaction`:idx:

-     `posix.html#193 <posix.html#193>`_

-

-   `Tsig_atomic`:idx:

-     `posix.html#189 <posix.html#189>`_

-

-   `TsigEvent`:idx:

-     `posix.html#191 <posix.html#191>`_

-

-   `TsigInfo`:idx:

-     `posix.html#196 <posix.html#196>`_

-

-   `Tsigset`:idx:

-     `posix.html#190 <posix.html#190>`_

-

-   `TSigStack`:idx:

-     `posix.html#195 <posix.html#195>`_

-

-   `TsigVal`:idx:

-     `posix.html#192 <posix.html#192>`_

-

-   `TSqlChar`:idx:

-     `odbcsql.html#101 <odbcsql.html#101>`_

-

-   `TSqlDouble`:idx:

-     `odbcsql.html#113 <odbcsql.html#113>`_

-

-   `TSqlFloat`:idx:

-     `odbcsql.html#114 <odbcsql.html#114>`_

-

-   `TSqlHandle`:idx:

-     `odbcsql.html#104 <odbcsql.html#104>`_

-

-   `TSqlHDBC`:idx:

-     `odbcsql.html#106 <odbcsql.html#106>`_

-

-   `TSqlHDesc`:idx:

-     `odbcsql.html#108 <odbcsql.html#108>`_

-

-   `TSqlHEnv`:idx:

-     `odbcsql.html#105 <odbcsql.html#105>`_

-

-   `TSqlHStmt`:idx:

-     `odbcsql.html#107 <odbcsql.html#107>`_

-

-   `TSqlHWND`:idx:

-     `odbcsql.html#115 <odbcsql.html#115>`_

-

-   `TSqlInteger`:idx:

-     `odbcsql.html#109 <odbcsql.html#109>`_

-

-   `TSqlPointer`:idx:

-     `odbcsql.html#111 <odbcsql.html#111>`_

-

-   `TSqlReal`:idx:

-     `odbcsql.html#112 <odbcsql.html#112>`_

-

-   `TSqlSmallInt`:idx:

-     `odbcsql.html#102 <odbcsql.html#102>`_

-

-   `TSqlUInteger`:idx:

-     `odbcsql.html#110 <odbcsql.html#110>`_

-

-   `TSqlUSmallInt`:idx:

-     `odbcsql.html#103 <odbcsql.html#103>`_

-

-   `TStack`:idx:

-     `posix.html#194 <posix.html#194>`_

-

-   `TStat`:idx:

-     `posix.html#183 <posix.html#183>`_

-

-   `TStatvfs`:idx:

-     `posix.html#184 <posix.html#184>`_

-

-   `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>`_

-

-   `Tsuseconds`:idx:

-     `posix.html#171 <posix.html#171>`_

-

-   `Ttime`:idx:

-     `posix.html#172 <posix.html#172>`_

-

-   `TTime`:idx:

-     `times.html#103 <times.html#103>`_

-

-   `TTimeInfo`:idx:

-     `times.html#104 <times.html#104>`_

-

-   `Ttimer`:idx:

-     `posix.html#173 <posix.html#173>`_

-

-   `Ttimespec`:idx:

-     `posix.html#187 <posix.html#187>`_

-

-   `Ttimeval`:idx:

-     `posix.html#200 <posix.html#200>`_

-

-   `Ttm`:idx:

-     `posix.html#186 <posix.html#186>`_

-

-   `Ttrace_attr`:idx:

-     `posix.html#174 <posix.html#174>`_

-

-   `Ttrace_event_id`:idx:

-     `posix.html#175 <posix.html#175>`_

-

-   `Ttrace_event_set`:idx:

-     `posix.html#176 <posix.html#176>`_

-

-   `Ttrace_id`:idx:

-     `posix.html#177 <posix.html#177>`_

-

-   `ttyname`:idx:

-     `posix.html#1038 <posix.html#1038>`_

-

-   `ttyname_r`:idx:

-     `posix.html#1039 <posix.html#1039>`_

-

-   `Tucontext`:idx:

-     `posix.html#203 <posix.html#203>`_

-

-   `Tuid`:idx:

-     `posix.html#178 <posix.html#178>`_

-

-   `tuple`:idx:

-     `manual.html#154 <manual.html#154>`_

-

-   `Tuseconds`:idx:

-     `posix.html#179 <posix.html#179>`_

-

-   `Tutsname`:idx:

-     `posix.html#180 <posix.html#180>`_

-

-   `TWeekDay`:idx:

-     `times.html#102 <times.html#102>`_

-

-   `type`:idx:

-     * `manual.html#102 <manual.html#102>`_

-     * `manual.html#140 <manual.html#140>`_

-     * `manual.html#206 <manual.html#206>`_

-

-   `type casts`:idx:

-     `tut2.html#101 <tut2.html#101>`_

-

-   `type conversions`:idx:

-     `tut2.html#102 <tut2.html#102>`_

-

-   `type parameters`:idx:

-     * `manual.html#208 <manual.html#208>`_

-     * `tut2.html#110 <tut2.html#110>`_

-

-   `type suffix`:idx:

-     `manual.html#137 <manual.html#137>`_

-

-   `TZipArchive`:idx:

-     `zipfiles.html#101 <zipfiles.html#101>`_

-

-   `Tzip_source_callback`:idx:

-     `libzip.html#102 <libzip.html#102>`_

-

-   `Tzip_source_cmd`:idx:

-     `libzip.html#101 <libzip.html#101>`_

-

-   `Tzip_stat`:idx:

-     `libzip.html#104 <libzip.html#104>`_

-

-   `tzset`:idx:

-     `posix.html#1118 <posix.html#1118>`_

-

-   `TZStream`:idx:

-     `zlib.html#112 <zlib.html#112>`_

-

-   `TZStreamRec`:idx:

-     `zlib.html#113 <zlib.html#113>`_

-

-   `ualarm`:idx:

-     `posix.html#1040 <posix.html#1040>`_

-

-   `Uint`:idx:

-     `zlib.html#101 <zlib.html#101>`_

-

-   `Ulong`:idx:

-     `zlib.html#102 <zlib.html#102>`_

-

-   `Ulongf`:idx:

-     `zlib.html#103 <zlib.html#103>`_

-

-   `umask`:idx:

-     `posix.html#1066 <posix.html#1066>`_

-

-   `uname`:idx:

-     `posix.html#866 <posix.html#866>`_

-

-   `unchecked runtime error`:idx:

-     `manual.html#111 <manual.html#111>`_

-

-   `uncompress`:idx:

-     `zlib.html#156 <zlib.html#156>`_

-

-   `undef`:idx:

-     `manual.html#223 <manual.html#223>`_

-

-   `UnixToNativePath`:idx:

-     `os.html#124 <os.html#124>`_

-

-   `unlink`:idx:

-     `posix.html#1041 <posix.html#1041>`_

-

-   `unsigned integer`:idx:

-     * `manual.html#142 <manual.html#142>`_

-     * `tut1.html#108 <tut1.html#108>`_

-

-   `unsigned operations`:idx:

-     * `manual.html#143 <manual.html#143>`_

-     * `tut1.html#109 <tut1.html#109>`_

-

-   `untraced`:idx:

-     * `manual.html#160 <manual.html#160>`_

-     * `tut1.html#122 <tut1.html#122>`_

-

-   `usleep`:idx:

-     `posix.html#1042 <posix.html#1042>`_

-

-   `Var`:idx:

-     `manual.html#178 <manual.html#178>`_

-

-   `varargs`:idx:

-     `nimrodc.html#106 <nimrodc.html#106>`_

-

-   `variant`:idx:

-     * `manual.html#156 <manual.html#156>`_

-     * `tut2.html#103 <tut2.html#103>`_

-

-   `vertical tabulator`:idx:

-     `manual.html#126 <manual.html#126>`_

-

-   `vfork`:idx:

-     `posix.html#1043 <posix.html#1043>`_

-

-   `volatile`:idx:

-     `nimrodc.html#111 <nimrodc.html#111>`_

-

-   `wait`:idx:

-     `posix.html#1119 <posix.html#1119>`_

-

-   `waitid`:idx:

-     `posix.html#1120 <posix.html#1120>`_

-

-   `waitpid`:idx:

-     `posix.html#1121 <posix.html#1121>`_

-

-   `walkDir`:idx:

-     `os.html#153 <os.html#153>`_

-

-   `walkFiles`:idx:

-     * `os.html#151 <os.html#151>`_

-     * `zipfiles.html#110 <zipfiles.html#110>`_

-

-   `warning`:idx:

-     * `dialogs.html#103 <dialogs.html#103>`_

-     * `manual.html#220 <manual.html#220>`_

-     * `manual.html#226 <manual.html#226>`_

-

-   `WCONTINUED`:idx:

-     `posix.html#714 <posix.html#714>`_

-

-   `WEXITED`:idx:

-     `posix.html#712 <posix.html#712>`_

-

-   `WEXITSTATUS`:idx:

-     `posix.html#705 <posix.html#705>`_

-

-   `when`:idx:

-     * `manual.html#182 <manual.html#182>`_

-     * `tut1.html#106 <tut1.html#106>`_

-

-   `while`:idx:

-     `manual.html#194 <manual.html#194>`_

-

-   `Whitespace`:idx:

-     `strutils.html#102 <strutils.html#102>`_

-

-   `WIFCONTINUED`:idx:

-     `posix.html#706 <posix.html#706>`_

-

-   `WIFEXITED`:idx:

-     `posix.html#707 <posix.html#707>`_

-

-   `WIFSIGNALED`:idx:

-     `posix.html#708 <posix.html#708>`_

-

-   `WIFSTOPPED`:idx:

-     `posix.html#709 <posix.html#709>`_

-

-   `WNOHANG`:idx:

-     `posix.html#703 <posix.html#703>`_

-

-   `WNOWAIT`:idx:

-     `posix.html#715 <posix.html#715>`_

-

-   `W_OK`:idx:

-     `posix.html#480 <posix.html#480>`_

-

-   `write`:idx:

-     * `posix.html#1044 <posix.html#1044>`_

-     * `system.html#493 <system.html#493>`_

-     * `system.html#494 <system.html#494>`_

-     * `system.html#495 <system.html#495>`_

-     * `system.html#496 <system.html#496>`_

-     * `system.html#497 <system.html#497>`_

-     * `system.html#498 <system.html#498>`_

-     * `system.html#499 <system.html#499>`_

-     * `streams.html#103 <streams.html#103>`_

-     * `streams.html#104 <streams.html#104>`_

-

-   `writeBuffer`:idx:

-     `system.html#509 <system.html#509>`_

-

-   `writeBytes`:idx:

-     `system.html#507 <system.html#507>`_

-

-   `writeChars`:idx:

-     `system.html#508 <system.html#508>`_

-

-   `writeln`:idx:

-     * `system.html#501 <system.html#501>`_

-     * `system.html#502 <system.html#502>`_

-

-   `WSTOPPED`:idx:

-     `posix.html#713 <posix.html#713>`_

-

-   `WSTOPSIG`:idx:

-     `posix.html#710 <posix.html#710>`_

-

-   `WTERMSIG`:idx:

-     `posix.html#711 <posix.html#711>`_

-

-   `WUNTRACED`:idx:

-     `posix.html#704 <posix.html#704>`_

-

-   `X_OK`:idx:

-     `posix.html#481 <posix.html#481>`_

-

-   `xor`:idx:

-     * `system.html#118 <system.html#118>`_

-     * `system.html#241 <system.html#241>`_

-     * `system.html#242 <system.html#242>`_

-     * `system.html#243 <system.html#243>`_

-     * `system.html#244 <system.html#244>`_

-     * `system.html#245 <system.html#245>`_

-

-   `YESEXPR`:idx:

-     `posix.html#441 <posix.html#441>`_

-

-   `yield`:idx:

-     `manual.html#191 <manual.html#191>`_

-

-   `Z_ASCII`:idx:

-     `zlib.html#138 <zlib.html#138>`_

-

-   `Z_BEST_COMPRESSION`:idx:

-     `zlib.html#132 <zlib.html#132>`_

-

-   `Z_BEST_SPEED`:idx:

-     `zlib.html#131 <zlib.html#131>`_

-

-   `Z_BINARY`:idx:

-     `zlib.html#137 <zlib.html#137>`_

-

-   `Z_BUF_ERROR`:idx:

-     `zlib.html#128 <zlib.html#128>`_

-

-   `Z_DATA_ERROR`:idx:

-     `zlib.html#126 <zlib.html#126>`_

-

-   `Z_DEFAULT_COMPRESSION`:idx:

-     `zlib.html#133 <zlib.html#133>`_

-

-   `Z_DEFAULT_STRATEGY`:idx:

-     `zlib.html#136 <zlib.html#136>`_

-

-   `Z_DEFLATED`:idx:

-     `zlib.html#140 <zlib.html#140>`_

-

-   `ze`:idx:

-     * `system.html#172 <system.html#172>`_

-     * `system.html#173 <system.html#173>`_

-

-   `ze64`: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>`_

-

-   `zeroMem`:idx:

-     `system.html#409 <system.html#409>`_

-

-   `Z_ERRNO`:idx:

-     `zlib.html#124 <zlib.html#124>`_

-

-   `zError`:idx:

-     `zlib.html#184 <zlib.html#184>`_

-

-   `Z_FILTERED`:idx:

-     `zlib.html#134 <zlib.html#134>`_

-

-   `Z_FINISH`:idx:

-     `zlib.html#120 <zlib.html#120>`_

-

-   `Z_FULL_FLUSH`:idx:

-     `zlib.html#119 <zlib.html#119>`_

-

-   `Z_HUFFMAN_ONLY`:idx:

-     `zlib.html#135 <zlib.html#135>`_

-

-   `zip_add`:idx:

-     `libzip.html#170 <libzip.html#170>`_

-

-   `zip_add_dir`:idx:

-     `libzip.html#171 <libzip.html#171>`_

-

-   `ZIP_AFL_TORRENT`:idx:

-     `libzip.html#116 <libzip.html#116>`_

-

-   `ZIP_CHECKCONS`:idx:

-     `libzip.html#110 <libzip.html#110>`_

-

-   `zip_close`:idx:

-     `libzip.html#172 <libzip.html#172>`_

-

-   `ZIP_CM_BZIP2`:idx:

-     `libzip.html#155 <libzip.html#155>`_

-

-   `ZIP_CM_DEFAULT`:idx:

-     `libzip.html#144 <libzip.html#144>`_

-

-   `ZIP_CM_DEFLATE`:idx:

-     `libzip.html#152 <libzip.html#152>`_

-

-   `ZIP_CM_DEFLATE64`:idx:

-     `libzip.html#153 <libzip.html#153>`_

-

-   `ZIP_CM_IMPLODE`:idx:

-     `libzip.html#151 <libzip.html#151>`_

-

-   `ZIP_CM_LZ77`:idx:

-     `libzip.html#158 <libzip.html#158>`_

-

-   `ZIP_CM_LZMA`:idx:

-     `libzip.html#156 <libzip.html#156>`_

-

-   `ZIP_CM_PKWARE_IMPLODE`:idx:

-     `libzip.html#154 <libzip.html#154>`_

-

-   `ZIP_CM_PPMD`:idx:

-     `libzip.html#160 <libzip.html#160>`_

-

-   `ZIP_CM_REDUCE_1`:idx:

-     `libzip.html#147 <libzip.html#147>`_

-

-   `ZIP_CM_REDUCE_2`:idx:

-     `libzip.html#148 <libzip.html#148>`_

-

-   `ZIP_CM_REDUCE_3`:idx:

-     `libzip.html#149 <libzip.html#149>`_

-

-   `ZIP_CM_REDUCE_4`:idx:

-     `libzip.html#150 <libzip.html#150>`_

-

-   `ZIP_CM_SHRINK`:idx:

-     `libzip.html#146 <libzip.html#146>`_

-

-   `ZIP_CM_STORE`:idx:

-     `libzip.html#145 <libzip.html#145>`_

-

-   `ZIP_CM_TERSE`:idx:

-     `libzip.html#157 <libzip.html#157>`_

-

-   `ZIP_CM_WAVPACK`:idx:

-     `libzip.html#159 <libzip.html#159>`_

-

-   `ZIP_CREATE`:idx:

-     `libzip.html#108 <libzip.html#108>`_

-

-   `zip_delete`:idx:

-     `libzip.html#173 <libzip.html#173>`_

-

-   `ZIP_EM_NONE`:idx:

-     `libzip.html#161 <libzip.html#161>`_

-

-   `ZIP_EM_TRAD_PKWARE`:idx:

-     `libzip.html#162 <libzip.html#162>`_

-

-   `ZIP_EM_UNKNOWN`:idx:

-     `libzip.html#163 <libzip.html#163>`_

-

-   `ZIP_ER_CHANGED`:idx:

-     `libzip.html#132 <libzip.html#132>`_

-

-   `ZIP_ER_CLOSE`:idx:

-     `libzip.html#120 <libzip.html#120>`_

-

-   `ZIP_ER_COMPNOTSUPP`:idx:

-     `libzip.html#133 <libzip.html#133>`_

-

-   `ZIP_ER_CRC`:idx:

-     `libzip.html#124 <libzip.html#124>`_

-

-   `ZIP_ER_DELETED`:idx:

-     `libzip.html#140 <libzip.html#140>`_

-

-   `ZIP_ER_EOF`:idx:

-     `libzip.html#134 <libzip.html#134>`_

-

-   `ZIP_ER_EXISTS`:idx:

-     `libzip.html#127 <libzip.html#127>`_

-

-   `ZIP_ER_INCONS`:idx:

-     `libzip.html#138 <libzip.html#138>`_

-

-   `ZIP_ER_INTERNAL`:idx:

-     `libzip.html#137 <libzip.html#137>`_

-

-   `ZIP_ER_INVAL`:idx:

-     `libzip.html#135 <libzip.html#135>`_

-

-   `ZIP_ER_MEMORY`:idx:

-     `libzip.html#131 <libzip.html#131>`_

-

-   `ZIP_ER_MULTIDISK`:idx:

-     `libzip.html#118 <libzip.html#118>`_

-

-   `ZIP_ER_NOENT`:idx:

-     `libzip.html#126 <libzip.html#126>`_

-

-   `ZIP_ER_NOZIP`:idx:

-     `libzip.html#136 <libzip.html#136>`_

-

-   `ZIP_ER_OK`:idx:

-     `libzip.html#117 <libzip.html#117>`_

-

-   `ZIP_ER_OPEN`:idx:

-     `libzip.html#128 <libzip.html#128>`_

-

-   `ZIP_ER_READ`:idx:

-     `libzip.html#122 <libzip.html#122>`_

-

-   `ZIP_ER_REMOVE`:idx:

-     `libzip.html#139 <libzip.html#139>`_

-

-   `ZIP_ER_RENAME`:idx:

-     `libzip.html#119 <libzip.html#119>`_

-

-   `zip_error_clear`:idx:

-     `libzip.html#174 <libzip.html#174>`_

-

-   `zip_error_get`:idx:

-     `libzip.html#175 <libzip.html#175>`_

-

-   `zip_error_get_sys_type`:idx:

-     `libzip.html#176 <libzip.html#176>`_

-

-   `zip_error_to_str`:idx:

-     `libzip.html#177 <libzip.html#177>`_

-

-   `ZIP_ER_SEEK`:idx:

-     `libzip.html#121 <libzip.html#121>`_

-

-   `ZIP_ER_TMPOPEN`:idx:

-     `libzip.html#129 <libzip.html#129>`_

-

-   `ZIP_ER_WRITE`:idx:

-     `libzip.html#123 <libzip.html#123>`_

-

-   `ZIP_ER_ZIPCLOSED`:idx:

-     `libzip.html#125 <libzip.html#125>`_

-

-   `ZIP_ER_ZLIB`:idx:

-     `libzip.html#130 <libzip.html#130>`_

-

-   `ZIP_ET_NONE`:idx:

-     `libzip.html#141 <libzip.html#141>`_

-

-   `ZIP_ET_SYS`:idx:

-     `libzip.html#142 <libzip.html#142>`_

-

-   `ZIP_ET_ZLIB`:idx:

-     `libzip.html#143 <libzip.html#143>`_

-

-   `ZIP_EXCL`:idx:

-     `libzip.html#109 <libzip.html#109>`_

-

-   `zip_fclose`:idx:

-     `libzip.html#178 <libzip.html#178>`_

-

-   `zip_file_error_clear`:idx:

-     `libzip.html#179 <libzip.html#179>`_

-

-   `zip_file_error_get`:idx:

-     `libzip.html#180 <libzip.html#180>`_

-

-   `zip_file_strerror`:idx:

-     `libzip.html#181 <libzip.html#181>`_

-

-   `ZIP_FL_COMPRESSED`:idx:

-     `libzip.html#113 <libzip.html#113>`_

-

-   `ZIP_FL_NOCASE`:idx:

-     `libzip.html#111 <libzip.html#111>`_

-

-   `ZIP_FL_NODIR`:idx:

-     `libzip.html#112 <libzip.html#112>`_

-

-   `ZIP_FL_RECOMPRESS`:idx:

-     `libzip.html#115 <libzip.html#115>`_

-

-   `ZIP_FL_UNCHANGED`:idx:

-     `libzip.html#114 <libzip.html#114>`_

-

-   `zip_fopen`:idx:

-     `libzip.html#182 <libzip.html#182>`_

-

-   `zip_fopen_index`:idx:

-     `libzip.html#183 <libzip.html#183>`_

-

-   `zip_fread`:idx:

-     `libzip.html#184 <libzip.html#184>`_

-

-   `zip_get_archive_comment`:idx:

-     `libzip.html#185 <libzip.html#185>`_

-

-   `zip_get_archive_flag`:idx:

-     `libzip.html#186 <libzip.html#186>`_

-

-   `zip_get_file_comment`:idx:

-     `libzip.html#187 <libzip.html#187>`_

-

-   `zip_get_name`:idx:

-     `libzip.html#188 <libzip.html#188>`_

-

-   `zip_get_num_files`:idx:

-     `libzip.html#189 <libzip.html#189>`_

-

-   `zip_name_locate`:idx:

-     `libzip.html#190 <libzip.html#190>`_

-

-   `zip_open`:idx:

-     `libzip.html#191 <libzip.html#191>`_

-

-   `zip_rename`:idx:

-     `libzip.html#192 <libzip.html#192>`_

-

-   `zip_replace`:idx:

-     `libzip.html#193 <libzip.html#193>`_

-

-   `zip_set_archive_comment`:idx:

-     `libzip.html#194 <libzip.html#194>`_

-

-   `zip_set_archive_flag`:idx:

-     `libzip.html#195 <libzip.html#195>`_

-

-   `zip_set_file_comment`:idx:

-     `libzip.html#196 <libzip.html#196>`_

-

-   `zip_source_buffer`:idx:

-     `libzip.html#197 <libzip.html#197>`_

-

-   `ZIP_SOURCE_CLOSE`:idx:

-     `libzip.html#166 <libzip.html#166>`_

-

-   `ZIP_SOURCE_ERROR`:idx:

-     `libzip.html#168 <libzip.html#168>`_

-

-   `zip_source_file`:idx:

-     `libzip.html#198 <libzip.html#198>`_

-

-   `zip_source_filep`:idx:

-     `libzip.html#199 <libzip.html#199>`_

-

-   `zip_source_free`:idx:

-     `libzip.html#200 <libzip.html#200>`_

-

-   `zip_source_function`:idx:

-     `libzip.html#201 <libzip.html#201>`_

-

-   `ZIP_SOURCE_OPEN`:idx:

-     `libzip.html#164 <libzip.html#164>`_

-

-   `ZIP_SOURCE_READ`:idx:

-     `libzip.html#165 <libzip.html#165>`_

-

-   `ZIP_SOURCE_STAT`:idx:

-     `libzip.html#167 <libzip.html#167>`_

-

-   `zip_source_zip`:idx:

-     `libzip.html#202 <libzip.html#202>`_

-

-   `zip_stat`:idx:

-     `libzip.html#203 <libzip.html#203>`_

-

-   `zip_stat_index`:idx:

-     `libzip.html#204 <libzip.html#204>`_

-

-   `zip_stat_init`:idx:

-     `libzip.html#205 <libzip.html#205>`_

-

-   `zip_strerror`:idx:

-     `libzip.html#206 <libzip.html#206>`_

-

-   `zip_unchange`:idx:

-     `libzip.html#207 <libzip.html#207>`_

-

-   `zip_unchange_all`:idx:

-     `libzip.html#208 <libzip.html#208>`_

-

-   `zip_unchange_archive`:idx:

-     `libzip.html#209 <libzip.html#209>`_

-

-   `zlibAllocMem`:idx:

-     `zlib.html#187 <zlib.html#187>`_

-

-   `zlibFreeMem`:idx:

-     `zlib.html#188 <zlib.html#188>`_

-

-   `zlibVersion`:idx:

-     `zlib.html#142 <zlib.html#142>`_

-

-   `Z_MEM_ERROR`:idx:

-     `zlib.html#127 <zlib.html#127>`_

-

-   `Z_NEED_DICT`:idx:

-     `zlib.html#123 <zlib.html#123>`_

-

-   `Z_NO_COMPRESSION`:idx:

-     `zlib.html#130 <zlib.html#130>`_

-

-   `Z_NO_FLUSH`:idx:

-     `zlib.html#116 <zlib.html#116>`_

-

-   `Z_NULL`:idx:

-     `zlib.html#141 <zlib.html#141>`_

-

-   `z_off_t`:idx:

-     `zlib.html#105 <zlib.html#105>`_

-

-   `Z_OK`:idx:

-     `zlib.html#121 <zlib.html#121>`_

-

-   `Z_PARTIAL_FLUSH`:idx:

-     `zlib.html#117 <zlib.html#117>`_

-

-   `Z_STREAM_END`:idx:

-     `zlib.html#122 <zlib.html#122>`_

-

-   `Z_STREAM_ERROR`:idx:

-     `zlib.html#125 <zlib.html#125>`_

-

-   `Z_SYNC_FLUSH`:idx:

-     `zlib.html#118 <zlib.html#118>`_

-

-   `Z_UNKNOWN`:idx:

-     `zlib.html#139 <zlib.html#139>`_

-

-   `Z_VERSION_ERROR`:idx:

-     `zlib.html#129 <zlib.html#129>`_
\ No newline at end of file
+
+=====
+Index
+=====
+
+.. index::
+
+
+   `!=`:idx:
+     `system.html#351 <system.html#351>`_
+
+   `$`:idx:
+     * `system.html#422 <system.html#422>`_
+     * `system.html#423 <system.html#423>`_
+     * `system.html#424 <system.html#424>`_
+     * `system.html#425 <system.html#425>`_
+     * `system.html#426 <system.html#426>`_
+     * `system.html#427 <system.html#427>`_
+     * `system.html#428 <system.html#428>`_
+     * `system.html#429 <system.html#429>`_
+     * `times.html#109 <times.html#109>`_
+     * `times.html#110 <times.html#110>`_
+
+   `%`:idx:
+     * `strutils.html#111 <strutils.html#111>`_
+     * `strutils.html#112 <strutils.html#112>`_
+     * `strtabs.html#112 <strtabs.html#112>`_
+
+   `%%`:idx:
+     * `system.html#296 <system.html#296>`_
+     * `system.html#297 <system.html#297>`_
+     * `system.html#298 <system.html#298>`_
+     * `system.html#299 <system.html#299>`_
+     * `system.html#300 <system.html#300>`_
+
+   `&`:idx:
+     * `system.html#362 <system.html#362>`_
+     * `system.html#363 <system.html#363>`_
+     * `system.html#364 <system.html#364>`_
+     * `system.html#365 <system.html#365>`_
+     * `system.html#453 <system.html#453>`_
+     * `system.html#454 <system.html#454>`_
+     * `system.html#455 <system.html#455>`_
+     * `system.html#456 <system.html#456>`_
+
+   `*`:idx:
+     * `system.html#206 <system.html#206>`_
+     * `system.html#207 <system.html#207>`_
+     * `system.html#208 <system.html#208>`_
+     * `system.html#209 <system.html#209>`_
+     * `system.html#210 <system.html#210>`_
+     * `system.html#315 <system.html#315>`_
+     * `system.html#323 <system.html#323>`_
+     * `complex.html#107 <complex.html#107>`_
+
+   `*%`:idx:
+     * `system.html#286 <system.html#286>`_
+     * `system.html#287 <system.html#287>`_
+     * `system.html#288 <system.html#288>`_
+     * `system.html#289 <system.html#289>`_
+     * `system.html#290 <system.html#290>`_
+
+   `+`:idx:
+     * `system.html#181 <system.html#181>`_
+     * `system.html#182 <system.html#182>`_
+     * `system.html#183 <system.html#183>`_
+     * `system.html#184 <system.html#184>`_
+     * `system.html#185 <system.html#185>`_
+     * `system.html#196 <system.html#196>`_
+     * `system.html#197 <system.html#197>`_
+     * `system.html#198 <system.html#198>`_
+     * `system.html#199 <system.html#199>`_
+     * `system.html#200 <system.html#200>`_
+     * `system.html#311 <system.html#311>`_
+     * `system.html#313 <system.html#313>`_
+     * `system.html#324 <system.html#324>`_
+     * `complex.html#103 <complex.html#103>`_
+
+   `+%`:idx:
+     * `system.html#276 <system.html#276>`_
+     * `system.html#277 <system.html#277>`_
+     * `system.html#278 <system.html#278>`_
+     * `system.html#279 <system.html#279>`_
+     * `system.html#280 <system.html#280>`_
+
+   `-`: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>`_
+     * `system.html#190 <system.html#190>`_
+     * `system.html#201 <system.html#201>`_
+     * `system.html#202 <system.html#202>`_
+     * `system.html#203 <system.html#203>`_
+     * `system.html#204 <system.html#204>`_
+     * `system.html#205 <system.html#205>`_
+     * `system.html#312 <system.html#312>`_
+     * `system.html#314 <system.html#314>`_
+     * `system.html#325 <system.html#325>`_
+     * `complex.html#104 <complex.html#104>`_
+     * `complex.html#105 <complex.html#105>`_
+     * `times.html#113 <times.html#113>`_
+
+   `-%`:idx:
+     * `system.html#281 <system.html#281>`_
+     * `system.html#282 <system.html#282>`_
+     * `system.html#283 <system.html#283>`_
+     * `system.html#284 <system.html#284>`_
+     * `system.html#285 <system.html#285>`_
+
+   `-+-`:idx:
+     `system.html#326 <system.html#326>`_
+
+   `/`:idx:
+     * `system.html#316 <system.html#316>`_
+     * `os.html#119 <os.html#119>`_
+     * `complex.html#106 <complex.html#106>`_
+
+   `/%`:idx:
+     * `system.html#291 <system.html#291>`_
+     * `system.html#292 <system.html#292>`_
+     * `system.html#293 <system.html#293>`_
+     * `system.html#294 <system.html#294>`_
+     * `system.html#295 <system.html#295>`_
+
+   `/../`:idx:
+     `os.html#123 <os.html#123>`_
+
+   `<`:idx:
+     * `system.html#256 <system.html#256>`_
+     * `system.html#257 <system.html#257>`_
+     * `system.html#258 <system.html#258>`_
+     * `system.html#259 <system.html#259>`_
+     * `system.html#260 <system.html#260>`_
+     * `system.html#319 <system.html#319>`_
+     * `system.html#343 <system.html#343>`_
+     * `system.html#344 <system.html#344>`_
+     * `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>`_
+     * `times.html#114 <times.html#114>`_
+
+   `<%`:idx:
+     * `system.html#306 <system.html#306>`_
+     * `system.html#307 <system.html#307>`_
+     * `system.html#308 <system.html#308>`_
+     * `system.html#309 <system.html#309>`_
+     * `system.html#310 <system.html#310>`_
+
+   `<=`:idx:
+     * `system.html#251 <system.html#251>`_
+     * `system.html#252 <system.html#252>`_
+     * `system.html#253 <system.html#253>`_
+     * `system.html#254 <system.html#254>`_
+     * `system.html#255 <system.html#255>`_
+     * `system.html#318 <system.html#318>`_
+     * `system.html#336 <system.html#336>`_
+     * `system.html#337 <system.html#337>`_
+     * `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>`_
+
+   `<=`:idx:
+     `times.html#115 <times.html#115>`_
+
+   `<=%`:idx:
+     * `system.html#301 <system.html#301>`_
+     * `system.html#302 <system.html#302>`_
+     * `system.html#303 <system.html#303>`_
+     * `system.html#304 <system.html#304>`_
+     * `system.html#305 <system.html#305>`_
+
+   `==`:idx:
+     * `system.html#246 <system.html#246>`_
+     * `system.html#247 <system.html#247>`_
+     * `system.html#248 <system.html#248>`_
+     * `system.html#249 <system.html#249>`_
+     * `system.html#250 <system.html#250>`_
+     * `system.html#317 <system.html#317>`_
+     * `system.html#327 <system.html#327>`_
+     * `system.html#328 <system.html#328>`_
+     * `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#458 <system.html#458>`_
+     * `complex.html#102 <complex.html#102>`_
+     * `md5.html#107 <md5.html#107>`_
+
+   `=~`:idx:
+     `regexprs.html#111 <regexprs.html#111>`_
+
+   `>`:idx:
+     `system.html#353 <system.html#353>`_
+
+   `>%`:idx:
+     `system.html#421 <system.html#421>`_
+
+   `>=`:idx:
+     `system.html#352 <system.html#352>`_
+
+   `>=%`:idx:
+     `system.html#420 <system.html#420>`_
+
+   `@`:idx:
+     `system.html#361 <system.html#361>`_
+
+   `[]`:idx:
+     `strtabs.html#107 <strtabs.html#107>`_
+
+   `[]=`:idx:
+     `strtabs.html#106 <strtabs.html#106>`_
+
+   `[ESC]`:idx:
+     `manual.html#134 <manual.html#134>`_
+
+   `abs`:idx:
+     * `system.html#261 <system.html#261>`_
+     * `system.html#262 <system.html#262>`_
+     * `system.html#263 <system.html#263>`_
+     * `system.html#264 <system.html#264>`_
+     * `system.html#265 <system.html#265>`_
+     * `system.html#320 <system.html#320>`_
+     * `complex.html#108 <complex.html#108>`_
+
+   `acyclic`:idx:
+     `nimrodc.html#113 <nimrodc.html#113>`_
+
+   `add`:idx:
+     * `system.html#366 <system.html#366>`_
+     * `system.html#367 <system.html#367>`_
+     * `system.html#368 <system.html#368>`_
+     * `system.html#369 <system.html#369>`_
+     * `system.html#370 <system.html#370>`_
+
+   `addf`:idx:
+     `strutils.html#113 <strutils.html#113>`_
+
+   `addFile`:idx:
+     * `zipfiles.html#105 <zipfiles.html#105>`_
+     * `zipfiles.html#106 <zipfiles.html#106>`_
+     * `zipfiles.html#107 <zipfiles.html#107>`_
+
+   `addQuitProc`:idx:
+     `system.html#404 <system.html#404>`_
+
+   `addSep`:idx:
+     `strutils.html#151 <strutils.html#151>`_
+
+   `alert`:idx:
+     `manual.html#131 <manual.html#131>`_
+
+   `allCharsInSet`:idx:
+     `strutils.html#152 <strutils.html#152>`_
+
+   `alloc`:idx:
+     `system.html#413 <system.html#413>`_
+
+   `alloc0`:idx:
+     `system.html#414 <system.html#414>`_
+
+   `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#116 <system.html#116>`_
+     * `system.html#231 <system.html#231>`_
+     * `system.html#232 <system.html#232>`_
+     * `system.html#233 <system.html#233>`_
+     * `system.html#234 <system.html#234>`_
+     * `system.html#235 <system.html#235>`_
+
+   `apostrophe`:idx:
+     `manual.html#129 <manual.html#129>`_
+
+   `AppendFileExt`:idx:
+     `os.html#131 <os.html#131>`_
+
+   `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>`_
+
+   `arithmetic bit shifts`:idx:
+     `tut1.html#110 <tut1.html#110>`_
+
+   `array`:idx:
+     * `tut1.html#117 <tut1.html#117>`_
+     * `system.html#124 <system.html#124>`_
+
+   `array properties`:idx:
+     `tut2.html#105 <tut2.html#105>`_
+
+   `Arrays`:idx:
+     `manual.html#152 <manual.html#152>`_
+
+   `assembler`:idx:
+     `manual.html#196 <manual.html#196>`_
+
+   `assert`:idx:
+     `system.html#418 <system.html#418>`_
+
+   `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#144 <manual.html#144>`_
+     * `tut1.html#111 <tut1.html#111>`_
+
+   `backslash`:idx:
+     * `manual.html#127 <manual.html#127>`_
+     * `regexprs.html#101 <regexprs.html#101>`_
+
+   `backspace`:idx:
+     `manual.html#132 <manual.html#132>`_
+
+   `BiggestFloat`:idx:
+     `system.html#374 <system.html#374>`_
+
+   `BiggestInt`:idx:
+     `system.html#373 <system.html#373>`_
+
+   `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#192 <manual.html#192>`_
+
+   `bool`:idx:
+     `system.html#109 <system.html#109>`_
+
+   `boolean`:idx:
+     * `manual.html#146 <manual.html#146>`_
+     * `tut1.html#107 <tut1.html#107>`_
+
+   `break`:idx:
+     `manual.html#193 <manual.html#193>`_
+
+   `breakpoint`:idx:
+     `endb.html#103 <endb.html#103>`_
+
+   `Byte`:idx:
+     `system.html#128 <system.html#128>`_
+
+   `calling conventions`:idx:
+     `manual.html#163 <manual.html#163>`_
+
+   `capitalize`:idx:
+     `strutils.html#119 <strutils.html#119>`_
+
+   `card`:idx:
+     `system.html#169 <system.html#169>`_
+
+   `carriage return`:idx:
+     `manual.html#122 <manual.html#122>`_
+
+   `case`:idx:
+     `manual.html#181 <manual.html#181>`_
+
+   `cchar`:idx:
+     `system.html#375 <system.html#375>`_
+
+   `cdecl`:idx:
+     `manual.html#165 <manual.html#165>`_
+
+   `cdouble`:idx:
+     `system.html#382 <system.html#382>`_
+
+   `cfloat`:idx:
+     `system.html#381 <system.html#381>`_
+
+   `cgiError`:idx:
+     `cgi.html#106 <cgi.html#106>`_
+
+   `ChangeFileExt`:idx:
+     `os.html#132 <os.html#132>`_
+
+   `char`:idx:
+     `system.html#110 <system.html#110>`_
+
+   `character type`:idx:
+     `manual.html#147 <manual.html#147>`_
+
+   `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_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>`_
+
+   `check_scramble`:idx:
+     `mysql.html#279 <mysql.html#279>`_
+
+   `check_scramble_323`:idx:
+     `mysql.html#273 <mysql.html#273>`_
+
+   `chr`:idx:
+     `system.html#171 <system.html#171>`_
+
+   `cint`:idx:
+     `system.html#378 <system.html#378>`_
+
+   `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#379 <system.html#379>`_
+
+   `clongdouble`:idx:
+     `system.html#383 <system.html#383>`_
+
+   `clonglong`:idx:
+     `system.html#380 <system.html#380>`_
+
+   `close`:idx:
+     * `lexbase.html#105 <lexbase.html#105>`_
+     * `parsecfg.html#105 <parsecfg.html#105>`_
+     * `parsexml.html#108 <parsexml.html#108>`_
+     * `zipfiles.html#103 <zipfiles.html#103>`_
+
+   `CloseFile`:idx:
+     `system.html#489 <system.html#489>`_
+
+   `closure`:idx:
+     `manual.html#170 <manual.html#170>`_
+
+   `cmp`:idx:
+     * `system.html#359 <system.html#359>`_
+     * `system.html#360 <system.html#360>`_
+
+   `cmpIgnoreCase`:idx:
+     `strutils.html#137 <strutils.html#137>`_
+
+   `cmpIgnoreStyle`:idx:
+     `strutils.html#138 <strutils.html#138>`_
+
+   `cmpPaths`:idx:
+     `os.html#130 <os.html#130>`_
+
+   `cmpRunesIgnoreCase`:idx:
+     `unicode.html#115 <unicode.html#115>`_
+
+   `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>`_
+
+   `COMP_HEADER_SIZE`:idx:
+     `mysql.html#266 <mysql.html#266>`_
+
+   `CompileDate`:idx:
+     `system.html#391 <system.html#391>`_
+
+   `CompileTime`:idx:
+     `system.html#392 <system.html#392>`_
+
+   `complex statements`:idx:
+     `manual.html#175 <manual.html#175>`_
+
+   `const`:idx:
+     `manual.html#179 <manual.html#179>`_
+
+   `constant expressions`:idx:
+     `manual.html#108 <manual.html#108>`_
+
+   `Constants`:idx:
+     * `manual.html#139 <manual.html#139>`_
+     * `tut1.html#104 <tut1.html#104>`_
+
+   `contains`:idx:
+     * `system.html#354 <system.html#354>`_
+     * `strutils.html#139 <strutils.html#139>`_
+     * `strutils.html#140 <strutils.html#140>`_
+     * `strutils.html#141 <strutils.html#141>`_
+
+   `continue`:idx:
+     `manual.html#195 <manual.html#195>`_
+
+   `copy`:idx:
+     * `system.html#405 <system.html#405>`_
+     * `system.html#406 <system.html#406>`_
+
+   `copyFile`:idx:
+     `os.html#134 <os.html#134>`_
+
+   `copyMem`:idx:
+     `system.html#410 <system.html#410>`_
+
+   `cos`:idx:
+     `math.html#126 <math.html#126>`_
+
+   `cosh`:idx:
+     `math.html#127 <math.html#127>`_
+
+   `countBits`:idx:
+     `math.html#109 <math.html#109>`_
+
+   `countdown`:idx:
+     `system.html#439 <system.html#439>`_
+
+   `countup`:idx:
+     `system.html#440 <system.html#440>`_
+
+   `cpuEndian`:idx:
+     `system.html#397 <system.html#397>`_
+
+   `createDir`:idx:
+     * `os.html#138 <os.html#138>`_
+     * `zipfiles.html#104 <zipfiles.html#104>`_
+
+   `create_random_string`:idx:
+     `mysql.html#269 <mysql.html#269>`_
+
+   `cschar`:idx:
+     `system.html#376 <system.html#376>`_
+
+   `cshort`:idx:
+     `system.html#377 <system.html#377>`_
+
+   `cstring`:idx:
+     `system.html#112 <system.html#112>`_
+
+   `cstringArray`:idx:
+     `system.html#384 <system.html#384>`_
+
+   `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#176 <manual.html#176>`_
+
+   `dbgLineHook`:idx:
+     `system.html#435 <system.html#435>`_
+
+   `dead_code_elim`:idx:
+     `nimrodc.html#114 <nimrodc.html#114>`_
+
+   `dealloc`:idx:
+     `system.html#416 <system.html#416>`_
+
+   `debugger`:idx:
+     `nimrodc.html#110 <nimrodc.html#110>`_
+
+   `dec`:idx:
+     `system.html#160 <system.html#160>`_
+
+   `define`:idx:
+     `manual.html#222 <manual.html#222>`_
+
+   `defined`:idx:
+     `system.html#114 <system.html#114>`_
+
+   `deleteStr`:idx:
+     `strutils.html#129 <strutils.html#129>`_
+
+   `Digits`:idx:
+     `strutils.html#104 <strutils.html#104>`_
+
+   `DirSep`:idx:
+     `os.html#103 <os.html#103>`_
+
+   `discard`:idx:
+     `manual.html#177 <manual.html#177>`_
+
+   `div`:idx:
+     * `system.html#211 <system.html#211>`_
+     * `system.html#212 <system.html#212>`_
+     * `system.html#213 <system.html#213>`_
+     * `system.html#214 <system.html#214>`_
+     * `system.html#215 <system.html#215>`_
+
+   `dom`:idx:
+     `nimrodc.html#120 <nimrodc.html#120>`_
+
+   `domain specific languages`:idx:
+     * `manual.html#211 <manual.html#211>`_
+     * `tut2.html#111 <tut2.html#111>`_
+
+   `dynamic type`:idx:
+     `manual.html#104 <manual.html#104>`_
+
+   `DYNAMIC_ARRAY`:idx:
+     `mysql.html#340 <mysql.html#340>`_
+
+   `dynlib`:idx:
+     `nimrodc.html#103 <nimrodc.html#103>`_
+
+   `E`:idx:
+     `math.html#102 <math.html#102>`_
+
+   `EAccessViolation`:idx:
+     `system.html#143 <system.html#143>`_
+
+   `EArithmetic`:idx:
+     `system.html#140 <system.html#140>`_
+
+   `EAssertionFailed`:idx:
+     `system.html#144 <system.html#144>`_
+
+   `EAsynch`:idx:
+     `system.html#134 <system.html#134>`_
+
+   `E_Base`:idx:
+     `system.html#133 <system.html#133>`_
+
+   `ECgi`:idx:
+     `cgi.html#104 <cgi.html#104>`_
+
+   `echo`:idx:
+     * `system.html#475 <system.html#475>`_
+     * `system.html#476 <system.html#476>`_
+
+   `ECMAScript`:idx:
+     `nimrodc.html#115 <nimrodc.html#115>`_
+
+   `EControlC`:idx:
+     `system.html#145 <system.html#145>`_
+
+   `editDistance`:idx:
+     `strutils.html#158 <strutils.html#158>`_
+
+   `EDivByZero`:idx:
+     `system.html#141 <system.html#141>`_
+
+   `EInvalidField`:idx:
+     `system.html#149 <system.html#149>`_
+
+   `EInvalidIndex`:idx:
+     `system.html#148 <system.html#148>`_
+
+   `EInvalidObjectAssignment`:idx:
+     `system.html#153 <system.html#153>`_
+
+   `EInvalidObjectConversion`:idx:
+     `system.html#154 <system.html#154>`_
+
+   `EInvalidRegEx`:idx:
+     `regexprs.html#104 <regexprs.html#104>`_
+
+   `EInvalidValue`:idx:
+     `system.html#146 <system.html#146>`_
+
+   `EIO`:idx:
+     `system.html#137 <system.html#137>`_
+
+   `elementName`:idx:
+     `parsexml.html#111 <parsexml.html#111>`_
+
+   `Embedded Nimrod Debugger`:idx:
+     `endb.html#101 <endb.html#101>`_
+
+   `ENDB`:idx:
+     `endb.html#102 <endb.html#102>`_
+
+   `EndOfFile`:idx:
+     * `system.html#490 <system.html#490>`_
+     * `lexbase.html#101 <lexbase.html#101>`_
+
+   `endsWith`:idx:
+     `strutils.html#150 <strutils.html#150>`_
+
+   `ENoExceptionToReraise`:idx:
+     * `manual.html#184 <manual.html#184>`_
+     * `system.html#152 <system.html#152>`_
+
+   `entityName`:idx:
+     `parsexml.html#112 <parsexml.html#112>`_
+
+   `enum_cursor_type`:idx:
+     `mysql.html#237 <mysql.html#237>`_
+
+   `Enumeration`:idx:
+     `manual.html#148 <manual.html#148>`_
+
+   `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>`_
+
+   `EOS`:idx:
+     `system.html#138 <system.html#138>`_
+
+   `EOutOfMemory`:idx:
+     `system.html#147 <system.html#147>`_
+
+   `EOutOfRange`:idx:
+     * `manual.html#145 <manual.html#145>`_
+     * `tut1.html#112 <tut1.html#112>`_
+     * `system.html#150 <system.html#150>`_
+
+   `EOverflow`:idx:
+     `system.html#142 <system.html#142>`_
+
+   `equalMem`:idx:
+     `system.html#412 <system.html#412>`_
+
+   `EraseLine`:idx:
+     `terminal.html#108 <terminal.html#108>`_
+
+   `EraseScreen`:idx:
+     `terminal.html#109 <terminal.html#109>`_
+
+   `ERessourceExhausted`:idx:
+     `system.html#139 <system.html#139>`_
+
+   `error`:idx:
+     * `manual.html#221 <manual.html#221>`_
+     * `manual.html#224 <manual.html#224>`_
+
+   `errorMsg`:idx:
+     `parsexml.html#120 <parsexml.html#120>`_
+
+   `errorMsgExpected`:idx:
+     `parsexml.html#121 <parsexml.html#121>`_
+
+   `errorStr`:idx:
+     `parsecfg.html#110 <parsecfg.html#110>`_
+
+   `escape`:idx:
+     * `manual.html#133 <manual.html#133>`_
+     * `strutils.html#156 <strutils.html#156>`_
+
+   `escape sequences`:idx:
+     `manual.html#120 <manual.html#120>`_
+
+   `EStackOverflow`:idx:
+     `system.html#151 <system.html#151>`_
+
+   `ESynch`:idx:
+     `system.html#135 <system.html#135>`_
+
+   `ESystem`:idx:
+     `system.html#136 <system.html#136>`_
+
+   `except`:idx:
+     `manual.html#187 <manual.html#187>`_
+
+   `exception handlers`:idx:
+     `manual.html#186 <manual.html#186>`_
+
+   `exceptions`:idx:
+     `tut2.html#106 <tut2.html#106>`_
+
+   `excl`:idx:
+     `system.html#168 <system.html#168>`_
+
+   `executeShellCommand`:idx:
+     `os.html#133 <os.html#133>`_
+
+   `ExeExt`:idx:
+     `os.html#107 <os.html#107>`_
+
+   `existsDir`:idx:
+     `os.html#139 <os.html#139>`_
+
+   `existsEnv`:idx:
+     `os.html#144 <os.html#144>`_
+
+   `ExistsFile`:idx:
+     `os.html#117 <os.html#117>`_
+
+   `exp`:idx:
+     `math.html#119 <math.html#119>`_
+
+   `expandFilename`:idx:
+     `os.html#116 <os.html#116>`_
+
+   `exportc`:idx:
+     `nimrodc.html#102 <nimrodc.html#102>`_
+
+   `expression macros`:idx:
+     `tut2.html#112 <tut2.html#112>`_
+
+   `extractDir`:idx:
+     `os.html#126 <os.html#126>`_
+
+   `extractFileExt`:idx:
+     `os.html#128 <os.html#128>`_
+
+   `extractFilename`:idx:
+     `os.html#127 <os.html#127>`_
+
+   `extractFileTrunk`:idx:
+     `os.html#129 <os.html#129>`_
+
+   `ExtSep`:idx:
+     `os.html#109 <os.html#109>`_
+
+   `fac`:idx:
+     `math.html#106 <math.html#106>`_
+
+   `fastcall`:idx:
+     `manual.html#168 <manual.html#168>`_
+
+   `fatal`:idx:
+     `manual.html#225 <manual.html#225>`_
+
+   `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#514 <system.html#514>`_
+
+   `fileNewer`:idx:
+     `os.html#141 <os.html#141>`_
+
+   `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>`_
+
+   `finally`:idx:
+     `manual.html#188 <manual.html#188>`_
+
+   `find`:idx:
+     * `system.html#459 <system.html#459>`_
+     * `strutils.html#124 <strutils.html#124>`_
+     * `strutils.html#125 <strutils.html#125>`_
+     * `strutils.html#126 <strutils.html#126>`_
+     * `regexprs.html#109 <regexprs.html#109>`_
+     * `regexprs.html#110 <regexprs.html#110>`_
+
+   `findChars`:idx:
+     `strutils.html#123 <strutils.html#123>`_
+
+   `findSubStr`:idx:
+     * `strutils.html#121 <strutils.html#121>`_
+     * `strutils.html#122 <strutils.html#122>`_
+
+   `float`:idx:
+     `system.html#106 <system.html#106>`_
+
+   `float32`:idx:
+     `system.html#107 <system.html#107>`_
+
+   `float64`:idx:
+     `system.html#108 <system.html#108>`_
+
+   `FlushFile`:idx:
+     `system.html#492 <system.html#492>`_
+
+   `for`:idx:
+     * `manual.html#203 <manual.html#203>`_
+     * `tut1.html#105 <tut1.html#105>`_
+
+   `form feed`:idx:
+     `manual.html#124 <manual.html#124>`_
+
+   `forward`:idx:
+     `manual.html#200 <manual.html#200>`_
+
+   `frexp`:idx:
+     `math.html#120 <math.html#120>`_
+
+   `functional`:idx:
+     * `manual.html#162 <manual.html#162>`_
+     * `tut1.html#124 <tut1.html#124>`_
+
+   `FUNCTIONPOINT`:idx:
+     `libcurl.html#265 <libcurl.html#265>`_
+
+   `funtions`:idx:
+     `manual.html#198 <manual.html#198>`_
+
+   `GC_disable`:idx:
+     `system.html#461 <system.html#461>`_
+
+   `GC_disableMarkAndSweep`:idx:
+     `system.html#467 <system.html#467>`_
+
+   `GC_enable`:idx:
+     `system.html#462 <system.html#462>`_
+
+   `GC_enableMarkAndSweep`:idx:
+     `system.html#466 <system.html#466>`_
+
+   `GC_fullCollect`:idx:
+     `system.html#463 <system.html#463>`_
+
+   `GC_getStatistics`:idx:
+     `system.html#468 <system.html#468>`_
+
+   `GC_ref`:idx:
+     * `system.html#469 <system.html#469>`_
+     * `system.html#470 <system.html#470>`_
+     * `system.html#471 <system.html#471>`_
+
+   `GC_setStrategy`:idx:
+     `system.html#465 <system.html#465>`_
+
+   `GC_unref`:idx:
+     * `system.html#472 <system.html#472>`_
+     * `system.html#473 <system.html#473>`_
+     * `system.html#474 <system.html#474>`_
+
+   `generic character types`:idx:
+     `regexprs.html#102 <regexprs.html#102>`_
+
+   `Generics`:idx:
+     * `manual.html#207 <manual.html#207>`_
+     * `tut2.html#108 <tut2.html#108>`_
+
+   `getApplicationDir`:idx:
+     `os.html#110 <os.html#110>`_
+
+   `getApplicationFilename`:idx:
+     `os.html#111 <os.html#111>`_
+
+   `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#115 <os.html#115>`_
+
+   `getContentLength`:idx:
+     `cgi.html#109 <cgi.html#109>`_
+
+   `getContentType`:idx:
+     `cgi.html#110 <cgi.html#110>`_
+
+   `getCurrentDir`:idx:
+     `os.html#112 <os.html#112>`_
+
+   `getCurrentExceptionMsg`:idx:
+     `system.html#431 <system.html#431>`_
+
+   `getCurrentLine`:idx:
+     `lexbase.html#106 <lexbase.html#106>`_
+
+   `getDateStr`:idx:
+     `times.html#111 <times.html#111>`_
+
+   `getDocumentRoot`:idx:
+     `cgi.html#111 <cgi.html#111>`_
+
+   `getEnv`:idx:
+     `os.html#143 <os.html#143>`_
+
+   `getFilename`:idx:
+     * `parsecfg.html#109 <parsecfg.html#109>`_
+     * `parsexml.html#119 <parsexml.html#119>`_
+
+   `getFilePos`:idx:
+     `system.html#512 <system.html#512>`_
+
+   `getFileSize`:idx:
+     `system.html#504 <system.html#504>`_
+
+   `getFreeMem`:idx:
+     `system.html#437 <system.html#437>`_
+
+   `getGatewayInterface`:idx:
+     `cgi.html#112 <cgi.html#112>`_
+
+   `getGMTime`:idx:
+     `times.html#107 <times.html#107>`_
+
+   `getHomeDir`:idx:
+     `os.html#114 <os.html#114>`_
+
+   `getHttpAccept`:idx:
+     `cgi.html#113 <cgi.html#113>`_
+
+   `getHttpAcceptCharset`:idx:
+     `cgi.html#114 <cgi.html#114>`_
+
+   `getHttpAcceptEncoding`:idx:
+     `cgi.html#115 <cgi.html#115>`_
+
+   `getHttpAcceptLanguage`:idx:
+     `cgi.html#116 <cgi.html#116>`_
+
+   `getHttpConnection`:idx:
+     `cgi.html#117 <cgi.html#117>`_
+
+   `getHttpCookie`:idx:
+     `cgi.html#118 <cgi.html#118>`_
+
+   `getHttpHost`:idx:
+     `cgi.html#119 <cgi.html#119>`_
+
+   `getHttpReferer`:idx:
+     `cgi.html#120 <cgi.html#120>`_
+
+   `getHttpUserAgent`:idx:
+     `cgi.html#121 <cgi.html#121>`_
+
+   `getLastModificationTime`:idx:
+     `os.html#140 <os.html#140>`_
+
+   `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#436 <system.html#436>`_
+
+   `getopt`:idx:
+     `parseopt.html#106 <parseopt.html#106>`_
+
+   `getPathInfo`:idx:
+     `cgi.html#122 <cgi.html#122>`_
+
+   `getPathTranslated`:idx:
+     `cgi.html#123 <cgi.html#123>`_
+
+   `getQueryString`:idx:
+     `cgi.html#124 <cgi.html#124>`_
+
+   `getRefcount`:idx:
+     `system.html#430 <system.html#430>`_
+
+   `getRemoteAddr`:idx:
+     `cgi.html#125 <cgi.html#125>`_
+
+   `getRemoteHost`:idx:
+     `cgi.html#126 <cgi.html#126>`_
+
+   `getRemoteIdent`:idx:
+     `cgi.html#127 <cgi.html#127>`_
+
+   `getRemotePort`:idx:
+     `cgi.html#128 <cgi.html#128>`_
+
+   `getRemoteUser`:idx:
+     `cgi.html#129 <cgi.html#129>`_
+
+   `getRequestMethod`:idx:
+     `cgi.html#130 <cgi.html#130>`_
+
+   `getRequestURI`:idx:
+     `cgi.html#131 <cgi.html#131>`_
+
+   `getRestOfCommandLine`:idx:
+     `parseopt.html#105 <parseopt.html#105>`_
+
+   `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#132 <cgi.html#132>`_
+
+   `getScriptName`:idx:
+     `cgi.html#133 <cgi.html#133>`_
+
+   `getServerAddr`:idx:
+     `cgi.html#134 <cgi.html#134>`_
+
+   `getServerAdmin`:idx:
+     `cgi.html#135 <cgi.html#135>`_
+
+   `getServerName`:idx:
+     `cgi.html#136 <cgi.html#136>`_
+
+   `getServerPort`:idx:
+     `cgi.html#137 <cgi.html#137>`_
+
+   `getServerProtocol`:idx:
+     `cgi.html#138 <cgi.html#138>`_
+
+   `getServerSignature`:idx:
+     `cgi.html#139 <cgi.html#139>`_
+
+   `getServerSoftware`:idx:
+     `cgi.html#140 <cgi.html#140>`_
+
+   `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#438 <system.html#438>`_
+
+   `get_tty_password`:idx:
+     `mysql.html#282 <mysql.html#282>`_
+
+   `gptr`:idx:
+     `mysql.html#105 <mysql.html#105>`_
+
+   `GROUP_FLAG`:idx:
+     `mysql.html#139 <mysql.html#139>`_
+
+   `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>`_
+
+   `header`:idx:
+     `nimrodc.html#105 <nimrodc.html#105>`_
+
+   `high`:idx:
+     `system.html#121 <system.html#121>`_
+
+   `hint`:idx:
+     * `manual.html#219 <manual.html#219>`_
+     * `manual.html#227 <manual.html#227>`_
+
+   `hostCPU`:idx:
+     `system.html#399 <system.html#399>`_
+
+   `HOSTNAME_LENGTH`:idx:
+     `mysql.html#111 <mysql.html#111>`_
+
+   `hostOS`:idx:
+     `system.html#398 <system.html#398>`_
+
+   `HTML`:idx:
+     `parsexml.html#102 <parsexml.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>`_
+
+   `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>`_
+
+   `if`:idx:
+     `manual.html#180 <manual.html#180>`_
+
+   `implicit block`:idx:
+     `manual.html#205 <manual.html#205>`_
+
+   `import`:idx:
+     * `manual.html#215 <manual.html#215>`_
+     * `tut1.html#128 <tut1.html#128>`_
+
+   `importc`:idx:
+     `nimrodc.html#101 <nimrodc.html#101>`_
+
+   `in`:idx:
+     `system.html#355 <system.html#355>`_
+
+   `inc`:idx:
+     `system.html#159 <system.html#159>`_
+
+   `incl`:idx:
+     `system.html#167 <system.html#167>`_
+
+   `include`:idx:
+     `tut1.html#129 <tut1.html#129>`_
+
+   `indentation sensitive`:idx:
+     `manual.html#113 <manual.html#113>`_
+
+   `inf`:idx:
+     `system.html#432 <system.html#432>`_
+
+   `information hiding`:idx:
+     * `manual.html#213 <manual.html#213>`_
+     * `tut1.html#126 <tut1.html#126>`_
+
+   `init`:idx:
+     `parseopt.html#103 <parseopt.html#103>`_
+
+   `inline`:idx:
+     `manual.html#167 <manual.html#167>`_
+
+   `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#143 <strutils.html#143>`_
+
+   `is`:idx:
+     `system.html#357 <system.html#357>`_
+
+   `isAlpha`:idx:
+     `unicode.html#111 <unicode.html#111>`_
+
+   `IS_BLOB`:idx:
+     `mysql.html#304 <mysql.html#304>`_
+
+   `isLower`:idx:
+     `unicode.html#109 <unicode.html#109>`_
+
+   `isMainModule`:idx:
+     `system.html#390 <system.html#390>`_
+
+   `isNil`:idx:
+     * `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>`_
+
+   `is_not`:idx:
+     `system.html#358 <system.html#358>`_
+
+   `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#112 <unicode.html#112>`_
+
+   `isUpper`:idx:
+     `unicode.html#110 <unicode.html#110>`_
+
+   `isWhiteSpace`:idx:
+     `unicode.html#113 <unicode.html#113>`_
+
+   `Item_result`:idx:
+     `mysql.html#255 <mysql.html#255>`_
+
+   `items`:idx:
+     * `system.html#441 <system.html#441>`_
+     * `system.html#442 <system.html#442>`_
+     * `system.html#443 <system.html#443>`_
+     * `system.html#444 <system.html#444>`_
+     * `system.html#445 <system.html#445>`_
+     * `system.html#446 <system.html#446>`_
+
+   `iterator`:idx:
+     `manual.html#204 <manual.html#204>`_
+
+   `iterOverEnvironment`:idx:
+     `os.html#150 <os.html#150>`_
+
+   `JavaScript`:idx:
+     `nimrodc.html#116 <nimrodc.html#116>`_
+
+   `JoinPath`:idx:
+     * `os.html#118 <os.html#118>`_
+     * `os.html#120 <os.html#120>`_
+
+   `keywords`:idx:
+     `manual.html#117 <manual.html#117>`_
+
+   `kind`:idx:
+     `parsexml.html#110 <parsexml.html#110>`_
+
+   `l-values`:idx:
+     `manual.html#107 <manual.html#107>`_
+
+   `len`:idx:
+     * `system.html#162 <system.html#162>`_
+     * `system.html#163 <system.html#163>`_
+     * `system.html#164 <system.html#164>`_
+     * `system.html#165 <system.html#165>`_
+     * `system.html#166 <system.html#166>`_
+     * `strtabs.html#109 <strtabs.html#109>`_
+
+   `Letters`:idx:
+     `strutils.html#103 <strutils.html#103>`_
+
+   `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>`_
+
+   `line_dir`:idx:
+     `nimrodc.html#107 <nimrodc.html#107>`_
+
+   `lines`:idx:
+     `system.html#513 <system.html#513>`_
+
+   `line_trace`:idx:
+     `nimrodc.html#109 <nimrodc.html#109>`_
+
+   `Literal strings`:idx:
+     `manual.html#119 <manual.html#119>`_
+
+   `ln`:idx:
+     `math.html#116 <math.html#116>`_
+
+   `load_defaults`:idx:
+     `mysql.html#285 <mysql.html#285>`_
+
+   `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#122 <system.html#122>`_
+
+   `Macros`:idx:
+     * `manual.html#210 <manual.html#210>`_
+     * `tut2.html#110 <tut2.html#110>`_
+
+   `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>`_
+
+   `match`:idx:
+     * `regexprs.html#106 <regexprs.html#106>`_
+     * `regexprs.html#107 <regexprs.html#107>`_
+
+   `matchLen`:idx:
+     `regexprs.html#108 <regexprs.html#108>`_
+
+   `math`:idx:
+     `nimrodc.html#118 <nimrodc.html#118>`_
+
+   `max`:idx:
+     * `system.html#271 <system.html#271>`_
+     * `system.html#272 <system.html#272>`_
+     * `system.html#273 <system.html#273>`_
+     * `system.html#274 <system.html#274>`_
+     * `system.html#275 <system.html#275>`_
+     * `system.html#322 <system.html#322>`_
+
+   `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>`_
+
+   `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>`_
+
+   `method call syntax`:idx:
+     `tut2.html#104 <tut2.html#104>`_
+
+   `methods`:idx:
+     `manual.html#197 <manual.html#197>`_
+
+   `min`:idx:
+     * `system.html#266 <system.html#266>`_
+     * `system.html#267 <system.html#267>`_
+     * `system.html#268 <system.html#268>`_
+     * `system.html#269 <system.html#269>`_
+     * `system.html#270 <system.html#270>`_
+     * `system.html#321 <system.html#321>`_
+
+   `mod`:idx:
+     * `system.html#216 <system.html#216>`_
+     * `system.html#217 <system.html#217>`_
+     * `system.html#218 <system.html#218>`_
+     * `system.html#219 <system.html#219>`_
+     * `system.html#220 <system.html#220>`_
+
+   `modify_defaults_file`:idx:
+     `mysql.html#284 <mysql.html#284>`_
+
+   `module`:idx:
+     * `manual.html#212 <manual.html#212>`_
+     * `tut1.html#125 <tut1.html#125>`_
+
+   `moveFile`:idx:
+     `os.html#135 <os.html#135>`_
+
+   `moveMem`:idx:
+     `system.html#411 <system.html#411>`_
+
+   `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:
+     `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>`_
+
+   `nan`:idx:
+     `system.html#434 <system.html#434>`_
+
+   `Natural`:idx:
+     `system.html#129 <system.html#129>`_
+
+   `neginf`:idx:
+     `system.html#433 <system.html#433>`_
+
+   `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#119 <system.html#119>`_
+     * `system.html#120 <system.html#120>`_
+
+   `newFileStream`:idx:
+     * `streams.html#120 <streams.html#120>`_
+     * `streams.html#121 <streams.html#121>`_
+
+   `newline`:idx:
+     `manual.html#121 <manual.html#121>`_
+
+   `NewLines`:idx:
+     `lexbase.html#102 <lexbase.html#102>`_
+
+   `newSeq`:idx:
+     `system.html#161 <system.html#161>`_
+
+   `newString`:idx:
+     `system.html#408 <system.html#408>`_
+
+   `newStringStream`:idx:
+     `streams.html#117 <streams.html#117>`_
+
+   `newStringTable`:idx:
+     * `strtabs.html#104 <strtabs.html#104>`_
+     * `strtabs.html#105 <strtabs.html#105>`_
+
+   `next`:idx:
+     * `parseopt.html#104 <parseopt.html#104>`_
+     * `parsecfg.html#106 <parsecfg.html#106>`_
+     * `parsexml.html#122 <parsexml.html#122>`_
+
+   `nextPowerOfTwo`:idx:
+     `math.html#108 <math.html#108>`_
+
+   `nimcall`:idx:
+     `manual.html#169 <manual.html#169>`_
+
+   `NimrodMajor`:idx:
+     `system.html#394 <system.html#394>`_
+
+   `NimrodMinor`:idx:
+     `system.html#395 <system.html#395>`_
+
+   `NimrodPatch`:idx:
+     `system.html#396 <system.html#396>`_
+
+   `NimrodVersion`:idx:
+     `system.html#393 <system.html#393>`_
+
+   `nl`:idx:
+     `strutils.html#108 <strutils.html#108>`_
+
+   `noconv`:idx:
+     `manual.html#172 <manual.html#172>`_
+
+   `no_decl`:idx:
+     `nimrodc.html#104 <nimrodc.html#104>`_
+
+   `NO_DEFAULT_VALUE_FLAG`:idx:
+     `mysql.html#136 <mysql.html#136>`_
+
+   `normalize`:idx:
+     `strutils.html#120 <strutils.html#120>`_
+
+   `not`:idx:
+     * `system.html#115 <system.html#115>`_
+     * `system.html#191 <system.html#191>`_
+     * `system.html#192 <system.html#192>`_
+     * `system.html#193 <system.html#193>`_
+     * `system.html#194 <system.html#194>`_
+     * `system.html#195 <system.html#195>`_
+
+   `not_in`:idx:
+     `system.html#356 <system.html#356>`_
+
+   `NOT_NULL_FLAG`:idx:
+     `mysql.html#124 <mysql.html#124>`_
+
+   `NULL_LENGTH`:idx:
+     `mysql.html#289 <mysql.html#289>`_
+
+   `Numerical constants`:idx:
+     `manual.html#136 <manual.html#136>`_
+
+   `NUM_FLAG`:idx:
+     `mysql.html#137 <mysql.html#137>`_
+
+   `object`:idx:
+     `manual.html#155 <manual.html#155>`_
+
+   `octet2hex`:idx:
+     `mysql.html#276 <mysql.html#276>`_
+
+   `ONLY_KILL_QUERY`:idx:
+     `mysql.html#189 <mysql.html#189>`_
+
+   `open`:idx:
+     * `lexbase.html#104 <lexbase.html#104>`_
+     * `parsecfg.html#104 <parsecfg.html#104>`_
+     * `parsexml.html#107 <parsexml.html#107>`_
+     * `zipfiles.html#102 <zipfiles.html#102>`_
+
+   `openarray`:idx:
+     * `tut1.html#119 <tut1.html#119>`_
+     * `system.html#125 <system.html#125>`_
+
+   `OpenFile`:idx:
+     * `system.html#487 <system.html#487>`_
+     * `system.html#488 <system.html#488>`_
+
+   `operator`:idx:
+     `manual.html#138 <manual.html#138>`_
+
+   `Operators`:idx:
+     `manual.html#202 <manual.html#202>`_
+
+   `or`:idx:
+     * `system.html#117 <system.html#117>`_
+     * `system.html#236 <system.html#236>`_
+     * `system.html#237 <system.html#237>`_
+     * `system.html#238 <system.html#238>`_
+     * `system.html#239 <system.html#239>`_
+     * `system.html#240 <system.html#240>`_
+
+   `ord`:idx:
+     `system.html#170 <system.html#170>`_
+
+   `ordinal`:idx:
+     `tut1.html#114 <tut1.html#114>`_
+
+   `Ordinal types`:idx:
+     `manual.html#141 <manual.html#141>`_
+
+   `OSError`:idx:
+     `os.html#147 <os.html#147>`_
+
+   `packet_error`:idx:
+     `mysql.html#201 <mysql.html#201>`_
+
+   `pairs`:idx:
+     `strtabs.html#110 <strtabs.html#110>`_
+
+   `paramCount`:idx:
+     `os.html#145 <os.html#145>`_
+
+   `paramStr`:idx:
+     `os.html#146 <os.html#146>`_
+
+   `ParDir`:idx:
+     `os.html#102 <os.html#102>`_
+
+   `parentDir`:idx:
+     `os.html#122 <os.html#122>`_
+
+   `ParseBiggestInt`:idx:
+     `strutils.html#145 <strutils.html#145>`_
+
+   `parseCmdLine`:idx:
+     `os.html#154 <os.html#154>`_
+
+   `ParseFloat`:idx:
+     `strutils.html#146 <strutils.html#146>`_
+
+   `ParseInt`:idx:
+     `strutils.html#144 <strutils.html#144>`_
+
+   `PART_KEY_FLAG`:idx:
+     `mysql.html#138 <mysql.html#138>`_
+
+   `PathSep`:idx:
+     `os.html#105 <os.html#105>`_
+
+   `Pcharacter_set`:idx:
+     `mysql.html#350 <mysql.html#350>`_
+
+   `Pcharset_info_st`:idx:
+     `mysql.html#349 <mysql.html#349>`_
+
+   `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>`_
+
+   `Pfd_set`:idx:
+     `libcurl.html#138 <libcurl.html#138>`_
+
+   `PFileStream`:idx:
+     `streams.html#118 <streams.html#118>`_
+
+   `PFloat32`:idx:
+     `system.html#386 <system.html#386>`_
+
+   `PFloat64`:idx:
+     `system.html#387 <system.html#387>`_
+
+   `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#389 <system.html#389>`_
+
+   `PInt64`:idx:
+     `system.html#388 <system.html#388>`_
+
+   `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>`_
+
+   `PObject`:idx:
+     `system.html#132 <system.html#132>`_
+
+   `pointer`:idx:
+     `system.html#113 <system.html#113>`_
+
+   `pointers`:idx:
+     * `manual.html#158 <manual.html#158>`_
+     * `tut1.html#120 <tut1.html#120>`_
+
+   `pop`:idx:
+     `system.html#460 <system.html#460>`_
+
+   `Positive`:idx:
+     `system.html#130 <system.html#130>`_
+
+   `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>`_
+
+   `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>`_
+
+   `pred`:idx:
+     `system.html#158 <system.html#158>`_
+
+   `PRI_KEY_FLAG`:idx:
+     `mysql.html#125 <mysql.html#125>`_
+
+   `procedural type`:idx:
+     * `manual.html#161 <manual.html#161>`_
+     * `tut1.html#123 <tut1.html#123>`_
+
+   `procedures`:idx:
+     `manual.html#199 <manual.html#199>`_
+
+   `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>`_
+
+   `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>`_
+
+   `PUSED_MEM`:idx:
+     `mysql.html#322 <mysql.html#322>`_
+
+   `push/pop`:idx:
+     `manual.html#228 <manual.html#228>`_
+
+   `putEnv`:idx:
+     `os.html#142 <os.html#142>`_
+
+   `PVIO`:idx:
+     `mysql.html#103 <mysql.html#103>`_
+
+   `PZipFileStream`:idx:
+     `zipfiles.html#108 <zipfiles.html#108>`_
+
+   `quit`:idx:
+     * `system.html#479 <system.html#479>`_
+     * `system.html#480 <system.html#480>`_
+
+   `QuitFailure`:idx:
+     `system.html#478 <system.html#478>`_
+
+   `QuitSuccess`:idx:
+     `system.html#477 <system.html#477>`_
+
+   `quotation mark`:idx:
+     `manual.html#128 <manual.html#128>`_
+
+   `quoteIfContainsWhite`:idx:
+     `strutils.html#153 <strutils.html#153>`_
+
+   `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#123 <system.html#123>`_
+
+   `re-raised`:idx:
+     `manual.html#183 <manual.html#183>`_
+
+   `readBool`:idx:
+     `streams.html#106 <streams.html#106>`_
+
+   `readBuffer`:idx:
+     `system.html#507 <system.html#507>`_
+
+   `ReadBytes`:idx:
+     `system.html#505 <system.html#505>`_
+
+   `readChar`:idx:
+     * `system.html#491 <system.html#491>`_
+     * `streams.html#105 <streams.html#105>`_
+
+   `ReadChars`:idx:
+     `system.html#506 <system.html#506>`_
+
+   `readData`:idx:
+     `cgi.html#107 <cgi.html#107>`_
+
+   `readFile`:idx:
+     `system.html#493 <system.html#493>`_
+
+   `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#501 <system.html#501>`_
+     * `streams.html#114 <streams.html#114>`_
+
+   `readStr`:idx:
+     `streams.html#113 <streams.html#113>`_
+
+   `realloc`:idx:
+     `system.html#415 <system.html#415>`_
+
+   `reBinary`:idx:
+     `regexprs.html#116 <regexprs.html#116>`_
+
+   `Recursive module dependancies`:idx:
+     `manual.html#216 <manual.html#216>`_
+
+   `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:
+     `nimrodc.html#112 <nimrodc.html#112>`_
+
+   `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#137 <os.html#137>`_
+
+   `removeFile`:idx:
+     `os.html#136 <os.html#136>`_
+
+   `reNatural`:idx:
+     `regexprs.html#113 <regexprs.html#113>`_
+
+   `reOctal`:idx:
+     `regexprs.html#117 <regexprs.html#117>`_
+
+   `repeatChar`:idx:
+     `strutils.html#148 <strutils.html#148>`_
+
+   `replaceStr`:idx:
+     * `strutils.html#127 <strutils.html#127>`_
+     * `strutils.html#128 <strutils.html#128>`_
+
+   `repr`:idx:
+     `system.html#371 <system.html#371>`_
+
+   `ResetAttributes`:idx:
+     `terminal.html#110 <terminal.html#110>`_
+
+   `result`:idx:
+     * `manual.html#190 <manual.html#190>`_
+     * `manual.html#201 <manual.html#201>`_
+
+   `return`:idx:
+     `manual.html#189 <manual.html#189>`_
+
+   `reURL`:idx:
+     `regexprs.html#120 <regexprs.html#120>`_
+
+   `round`:idx:
+     `math.html#121 <math.html#121>`_
+
+   `runeAt`:idx:
+     `unicode.html#104 <unicode.html#104>`_
+
+   `runeLen`:idx:
+     `unicode.html#103 <unicode.html#103>`_
+
+   `runes`:idx:
+     `unicode.html#114 <unicode.html#114>`_
+
+   `safe`:idx:
+     `manual.html#112 <manual.html#112>`_
+
+   `safecall`:idx:
+     `manual.html#166 <manual.html#166>`_
+
+   `sameFile`:idx:
+     `os.html#148 <os.html#148>`_
+
+   `sameFileContent`:idx:
+     `os.html#149 <os.html#149>`_
+
+   `scope`:idx:
+     * `manual.html#106 <manual.html#106>`_
+     * `manual.html#217 <manual.html#217>`_
+
+   `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>`_
+
+   `ScriptExt`:idx:
+     `os.html#108 <os.html#108>`_
+
+   `separate compilation`:idx:
+     * `manual.html#214 <manual.html#214>`_
+     * `tut1.html#127 <tut1.html#127>`_
+
+   `seq`:idx:
+     `system.html#126 <system.html#126>`_
+
+   `seqToPtr`:idx:
+     `system.html#457 <system.html#457>`_
+
+   `Sequences`:idx:
+     * `manual.html#153 <manual.html#153>`_
+     * `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#127 <system.html#127>`_
+
+   `set type`:idx:
+     * `manual.html#157 <manual.html#157>`_
+     * `tut1.html#116 <tut1.html#116>`_
+
+   `setBackgroundColor`:idx:
+     `terminal.html#116 <terminal.html#116>`_
+
+   `setCurrentDir`:idx:
+     `os.html#113 <os.html#113>`_
+
+   `setCursorPos`:idx:
+     `terminal.html#101 <terminal.html#101>`_
+
+   `setCursorXPos`:idx:
+     `terminal.html#102 <terminal.html#102>`_
+
+   `setCursorYPos`:idx:
+     `terminal.html#103 <terminal.html#103>`_
+
+   `setFilePos`:idx:
+     `system.html#511 <system.html#511>`_
+
+   `SET_FLAG`:idx:
+     `mysql.html#135 <mysql.html#135>`_
+
+   `setForegroundColor`:idx:
+     `terminal.html#115 <terminal.html#115>`_
+
+   `setLen`:idx:
+     * `system.html#407 <system.html#407>`_
+     * `system.html#417 <system.html#417>`_
+
+   `setTestData`:idx:
+     `cgi.html#141 <cgi.html#141>`_
+
+   `shl`:idx:
+     * `system.html#226 <system.html#226>`_
+     * `system.html#227 <system.html#227>`_
+     * `system.html#228 <system.html#228>`_
+     * `system.html#229 <system.html#229>`_
+     * `system.html#230 <system.html#230>`_
+
+   `shr`:idx:
+     * `system.html#221 <system.html#221>`_
+     * `system.html#222 <system.html#222>`_
+     * `system.html#223 <system.html#223>`_
+     * `system.html#224 <system.html#224>`_
+     * `system.html#225 <system.html#225>`_
+
+   `simple assertions`:idx:
+     `regexprs.html#103 <regexprs.html#103>`_
+
+   `simple statements`:idx:
+     `manual.html#174 <manual.html#174>`_
+
+   `sinh`:idx:
+     `math.html#129 <math.html#129>`_
+
+   `sizeof`:idx:
+     `system.html#156 <system.html#156>`_
+
+   `sockaddr`:idx:
+     `mysql.html#251 <mysql.html#251>`_
+
+   `split`:idx:
+     * `strutils.html#131 <strutils.html#131>`_
+     * `strutils.html#132 <strutils.html#132>`_
+
+   `SplitFilename`:idx:
+     `os.html#125 <os.html#125>`_
+
+   `splitLines`:idx:
+     `strutils.html#133 <strutils.html#133>`_
+
+   `splitLinesSeq`:idx:
+     `strutils.html#134 <strutils.html#134>`_
+
+   `SplitPath`:idx:
+     `os.html#121 <os.html#121>`_
+
+   `splitSeq`:idx:
+     * `strutils.html#135 <strutils.html#135>`_
+     * `strutils.html#136 <strutils.html#136>`_
+
+   `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>`_
+
+   `stack_trace`:idx:
+     `nimrodc.html#108 <nimrodc.html#108>`_
+
+   `startsWith`:idx:
+     `strutils.html#149 <strutils.html#149>`_
+
+   `statement macros`:idx:
+     `tut2.html#113 <tut2.html#113>`_
+
+   `Statements`:idx:
+     `manual.html#173 <manual.html#173>`_
+
+   `static error`:idx:
+     `manual.html#109 <manual.html#109>`_
+
+   `static type`:idx:
+     `manual.html#103 <manual.html#103>`_
+
+   `stdcall`:idx:
+     `manual.html#164 <manual.html#164>`_
+
+   `stderr`:idx:
+     `system.html#486 <system.html#486>`_
+
+   `stdin`:idx:
+     `system.html#484 <system.html#484>`_
+
+   `stdout`:idx:
+     `system.html#485 <system.html#485>`_
+
+   `st_dynamic_array`:idx:
+     `mysql.html#339 <mysql.html#339>`_
+
+   `st_mem_root`:idx:
+     `mysql.html#324 <mysql.html#324>`_
+
+   `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#150 <manual.html#150>`_
+     * `system.html#111 <system.html#111>`_
+
+   `string interpolation`:idx:
+     `strutils.html#110 <strutils.html#110>`_
+
+   `strip`:idx:
+     `strutils.html#114 <strutils.html#114>`_
+
+   `strStart`:idx:
+     `strutils.html#107 <strutils.html#107>`_
+
+   `structured type`:idx:
+     `manual.html#151 <manual.html#151>`_
+
+   `strutils`:idx:
+     `nimrodc.html#117 <nimrodc.html#117>`_
+
+   `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-insensitive`:idx:
+     `manual.html#118 <manual.html#118>`_
+
+   `subrange`:idx:
+     * `manual.html#149 <manual.html#149>`_
+     * `tut1.html#115 <tut1.html#115>`_
+
+   `substitution`:idx:
+     `strutils.html#109 <strutils.html#109>`_
+
+   `succ`:idx:
+     `system.html#157 <system.html#157>`_
+
+   `sum`:idx:
+     `math.html#110 <math.html#110>`_
+
+   `swap`:idx:
+     `system.html#419 <system.html#419>`_
+
+   `syscall`:idx:
+     `manual.html#171 <manual.html#171>`_
+
+   `system`:idx:
+     `manual.html#218 <manual.html#218>`_
+
+   `tabulator`:idx:
+     `manual.html#125 <manual.html#125>`_
+
+   `TAddress`:idx:
+     `system.html#372 <system.html#372>`_
+
+   `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>`_
+
+   `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>`_
+
+   `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>`_
+
+   `template`:idx:
+     `manual.html#209 <manual.html#209>`_
+
+   `TEndian`:idx:
+     `system.html#385 <system.html#385>`_
+
+   `TFile`:idx:
+     `system.html#481 <system.html#481>`_
+
+   `TFileHandle`:idx:
+     `system.html#483 <system.html#483>`_
+
+   `TFileMode`:idx:
+     `system.html#482 <system.html#482>`_
+
+   `TFileStream`:idx:
+     `streams.html#119 <streams.html#119>`_
+
+   `TFloatClass`:idx:
+     `math.html#103 <math.html#103>`_
+
+   `TForegroundColor`:idx:
+     `terminal.html#113 <terminal.html#113>`_
+
+   `TFormatFlag`:idx:
+     `strtabs.html#111 <strtabs.html#111>`_
+
+   `TGC_Strategy`:idx:
+     `system.html#464 <system.html#464>`_
+
+   `THash`:idx:
+     `hashes.html#101 <hashes.html#101>`_
+
+   `TimeInfoToTime`:idx:
+     `times.html#108 <times.html#108>`_
+
+   `times`:idx:
+     `nimrodc.html#119 <nimrodc.html#119>`_
+
+   `TIMESTAMP_FLAG`:idx:
+     `mysql.html#134 <mysql.html#134>`_
+
+   `TMonth`:idx:
+     `times.html#101 <times.html#101>`_
+
+   `toBiggestFloat`:idx:
+     `system.html#401 <system.html#401>`_
+
+   `toBiggestInt`:idx:
+     `system.html#403 <system.html#403>`_
+
+   `toBin`:idx:
+     `strutils.html#155 <strutils.html#155>`_
+
+   `TObject`:idx:
+     `system.html#131 <system.html#131>`_
+
+   `toFloat`:idx:
+     `system.html#400 <system.html#400>`_
+
+   `toHex`:idx:
+     `strutils.html#142 <strutils.html#142>`_
+
+   `toInt`:idx:
+     `system.html#402 <system.html#402>`_
+
+   `toLower`:idx:
+     * `strutils.html#115 <strutils.html#115>`_
+     * `strutils.html#116 <strutils.html#116>`_
+     * `unicode.html#106 <unicode.html#106>`_
+
+   `toOct`:idx:
+     `strutils.html#154 <strutils.html#154>`_
+
+   `toOctal`:idx:
+     `strutils.html#130 <strutils.html#130>`_
+
+   `TOptParser`:idx:
+     `parseopt.html#102 <parseopt.html#102>`_
+
+   `toString`:idx:
+     `strutils.html#147 <strutils.html#147>`_
+
+   `toTitle`:idx:
+     `unicode.html#108 <unicode.html#108>`_
+
+   `toU16`:idx:
+     `system.html#179 <system.html#179>`_
+
+   `toU32`:idx:
+     `system.html#180 <system.html#180>`_
+
+   `toU8`:idx:
+     `system.html#178 <system.html#178>`_
+
+   `toUpper`:idx:
+     * `strutils.html#117 <strutils.html#117>`_
+     * `strutils.html#118 <strutils.html#118>`_
+     * `unicode.html#107 <unicode.html#107>`_
+
+   `toUTF8`:idx:
+     `unicode.html#105 <unicode.html#105>`_
+
+   `TPathComponent`:idx:
+     `os.html#152 <os.html#152>`_
+
+   `traced`:idx:
+     * `manual.html#159 <manual.html#159>`_
+     * `tut1.html#121 <tut1.html#121>`_
+
+   `TRequestMethod`:idx:
+     `cgi.html#105 <cgi.html#105>`_
+
+   `TResult`:idx:
+     `system.html#155 <system.html#155>`_
+
+   `TRune`:idx:
+     `unicode.html#101 <unicode.html#101>`_
+
+   `TRune16`:idx:
+     `unicode.html#102 <unicode.html#102>`_
+
+   `try`:idx:
+     * `manual.html#185 <manual.html#185>`_
+     * `tut2.html#107 <tut2.html#107>`_
+
+   `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>`_
+
+   `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>`_
+
+   `TTime`:idx:
+     `times.html#103 <times.html#103>`_
+
+   `TTimeInfo`:idx:
+     `times.html#104 <times.html#104>`_
+
+   `tuple`:idx:
+     `manual.html#154 <manual.html#154>`_
+
+   `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>`_
+
+   `type`:idx:
+     * `manual.html#102 <manual.html#102>`_
+     * `manual.html#140 <manual.html#140>`_
+     * `manual.html#206 <manual.html#206>`_
+
+   `type casts`:idx:
+     `tut2.html#101 <tut2.html#101>`_
+
+   `type conversions`:idx:
+     `tut2.html#102 <tut2.html#102>`_
+
+   `type parameters`:idx:
+     * `manual.html#208 <manual.html#208>`_
+     * `tut2.html#109 <tut2.html#109>`_
+
+   `type suffix`:idx:
+     `manual.html#137 <manual.html#137>`_
+
+   `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>`_
+
+   `unchecked runtime error`:idx:
+     `manual.html#111 <manual.html#111>`_
+
+   `undef`:idx:
+     `manual.html#223 <manual.html#223>`_
+
+   `UNIQUE_FLAG`:idx:
+     `mysql.html#140 <mysql.html#140>`_
+
+   `UNIQUE_KEY_FLAG`:idx:
+     `mysql.html#126 <mysql.html#126>`_
+
+   `UnixToNativePath`:idx:
+     `os.html#124 <os.html#124>`_
+
+   `unsigned integer`:idx:
+     * `manual.html#142 <manual.html#142>`_
+     * `tut1.html#108 <tut1.html#108>`_
+
+   `unsigned operations`:idx:
+     * `manual.html#143 <manual.html#143>`_
+     * `tut1.html#109 <tut1.html#109>`_
+
+   `UNSIGNED_FLAG`:idx:
+     `mysql.html#129 <mysql.html#129>`_
+
+   `untraced`:idx:
+     * `manual.html#160 <manual.html#160>`_
+     * `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#108 <cgi.html#108>`_
+
+   `validEmailAddress`:idx:
+     `strutils.html#157 <strutils.html#157>`_
+
+   `Var`:idx:
+     `manual.html#178 <manual.html#178>`_
+
+   `varargs`:idx:
+     `nimrodc.html#106 <nimrodc.html#106>`_
+
+   `variance`:idx:
+     `math.html#112 <math.html#112>`_
+
+   `variant`:idx:
+     * `manual.html#156 <manual.html#156>`_
+     * `tut2.html#103 <tut2.html#103>`_
+
+   `vertical tabulator`:idx:
+     `manual.html#126 <manual.html#126>`_
+
+   `volatile`:idx:
+     `nimrodc.html#111 <nimrodc.html#111>`_
+
+   `walkDir`:idx:
+     `os.html#153 <os.html#153>`_
+
+   `walkFiles`:idx:
+     * `os.html#151 <os.html#151>`_
+     * `zipfiles.html#110 <zipfiles.html#110>`_
+
+   `warning`:idx:
+     * `manual.html#220 <manual.html#220>`_
+     * `manual.html#226 <manual.html#226>`_
+
+   `when`:idx:
+     * `manual.html#182 <manual.html#182>`_
+     * `tut1.html#106 <tut1.html#106>`_
+
+   `while`:idx:
+     `manual.html#194 <manual.html#194>`_
+
+   `Whitespace`:idx:
+     `strutils.html#102 <strutils.html#102>`_
+
+   `write`:idx:
+     * `system.html#494 <system.html#494>`_
+     * `system.html#495 <system.html#495>`_
+     * `system.html#496 <system.html#496>`_
+     * `system.html#497 <system.html#497>`_
+     * `system.html#498 <system.html#498>`_
+     * `system.html#499 <system.html#499>`_
+     * `system.html#500 <system.html#500>`_
+     * `streams.html#103 <streams.html#103>`_
+     * `streams.html#104 <streams.html#104>`_
+
+   `writeBuffer`:idx:
+     `system.html#510 <system.html#510>`_
+
+   `writeBytes`:idx:
+     `system.html#508 <system.html#508>`_
+
+   `writeChars`:idx:
+     `system.html#509 <system.html#509>`_
+
+   `writeContentType`:idx:
+     `cgi.html#142 <cgi.html#142>`_
+
+   `writeln`:idx:
+     * `system.html#502 <system.html#502>`_
+     * `system.html#503 <system.html#503>`_
+
+   `WriteStyled`:idx:
+     `terminal.html#112 <terminal.html#112>`_
+
+   `XML`:idx:
+     `parsexml.html#101 <parsexml.html#101>`_
+
+   `XMLencode`:idx:
+     `cgi.html#103 <cgi.html#103>`_
+
+   `xor`:idx:
+     * `system.html#118 <system.html#118>`_
+     * `system.html#241 <system.html#241>`_
+     * `system.html#242 <system.html#242>`_
+     * `system.html#243 <system.html#243>`_
+     * `system.html#244 <system.html#244>`_
+     * `system.html#245 <system.html#245>`_
+
+   `yield`:idx:
+     `manual.html#191 <manual.html#191>`_
+
+   `ze`:idx:
+     * `system.html#172 <system.html#172>`_
+     * `system.html#173 <system.html#173>`_
+
+   `ze64`: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>`_
+
+   `ZEROFILL_FLAG`:idx:
+     `mysql.html#130 <mysql.html#130>`_
+
+   `zeroMem`:idx:
+     `system.html#409 <system.html#409>`_
\ No newline at end of file
diff --git a/doc/tut1.txt b/doc/tut1.txt
index ef56c2caa..58a56e8f1 100644
--- a/doc/tut1.txt
+++ b/doc/tut1.txt
@@ -46,12 +46,14 @@ The most used commands and switches have abbreviations, so you can also use::
 
 Though it should be pretty obvious what the program does, I will explain the
 syntax: Statements which are not indented are executed when the program
-starts. Indentation is Nimrod's way of grouping statements. String literals
-are enclosed in double quotes. The ``var`` statement declares a new variable
-named ``name`` of type ``string`` with the value that is returned by the
-``readline`` procedure. Since the compiler knows that ``readline`` returns
-a string, you can leave out the type in the declaration (this is called
-`local type inference`:idx:). So this will work too:
+starts. Indentation is Nimrod's way of grouping statements. Indentation is
+done with spaces only, tabulators are not allowed.
+
+String literals are enclosed in double quotes. The ``var`` statement declares 
+a new variable named ``name`` of type ``string`` with the value that is 
+returned by the ``readline`` procedure. Since the compiler knows that 
+``readline`` returns a string, you can leave out the type in the declaration 
+(this is called `local type inference`:idx:). So this will work too:
 
 .. code-block:: Nimrod
   var name = readline(stdin)
@@ -73,7 +75,7 @@ keywords, comments, operators, and other punctation marks. Case is
 *insignificant* in Nimrod and even underscores are ignored:
 ``This_is_an_identifier`` and this is the same identifier
 ``ThisIsAnIdentifier``. This feature enables you to use other
-peoples code without bothering about a naming convention that conflicts with
+people's code without bothering about a naming convention that conflicts with
 yours. It also frees you from remembering the exact spelling of an identifier
 (was it ``parseURL`` or ``parseUrl`` or ``parse_URL``?).
 
@@ -129,6 +131,9 @@ the syntax, watch their indentation:
   Echo("Hi!")
     # comment has not the right indentation -> syntax error!
 
+**Note**: To comment out a large piece of code, it is often better to use a
+``when false:`` statement.
+
 
 Numbers
 -------
@@ -137,7 +142,7 @@ Numerical literals are written as in most other languages. As a special twist,
 underscores are allowed for better readability: ``1_000_000`` (one million).
 A number that contains a dot (or 'e' or 'E') is a floating point literal:
 ``1.0e9`` (one million). Hexadecimal literals are prefixed with ``0x``,
-binary literals with ``0b`` and octal literals with ``0c``. A leading zero
+binary literals with ``0b`` and octal literals with ``0o``. A leading zero
 alone does not produce an octal.
 
 
@@ -426,7 +431,11 @@ The ``when`` statement is useful for writing platform specific code, similar to
 the ``#ifdef`` construct in the C programming language.
 
 **Note**: The documentation generator currently always follows the first branch 
-of when statements. 
+of when statements.
+
+**Note**: To comment out a large piece of code, it is often better to use a
+``when false:`` statement than to use real comments. This way nesting is
+possible.
 
 
 Statements and indentation
@@ -440,7 +449,7 @@ statements*. *Simple statements* cannot contain other statements:
 Assignment, procedure calls or the ``return`` statement belong to the simple
 statements. *Complex statements* like ``if``, ``when``, ``for``, ``while`` can 
 contain other statements. To avoid ambiguities, complex statements always have
-to be intended, but single simple statements do not:
+to be indented, but single simple statements do not:
 
 .. code-block:: nimrod
   # no indentation needed for single assignment statement:
@@ -518,9 +527,11 @@ shorthand for ``return result``. So all tree code snippets are equivalent:
 .. code-block:: nimrod
   return 42
 
+.. code-block:: nimrod
   result = 42
   return
 
+.. code-block:: nimrod
   result = 42
   return result
 
@@ -880,7 +891,7 @@ In Nimrod new types can be defined within a ``type`` statement:
 .. code-block:: nimrod
   type
     biggestInt = int64      # biggest integer type that is available
-    biggestFLoat = float64  # biggest float type that is available
+    biggestFloat = float64  # biggest float type that is available
 
 Enumeration and object types cannot be defined on the fly, but only within a
 ``type`` statement.
@@ -980,7 +991,7 @@ basetype can only be an ordinal type. The reason is that sets are implemented
 as high performance bit vectors.
 
 Sets can be constructed via the set constructor: ``{}`` is the empty set. The
-empty set is type combatible with any concrete set type. The constructor
+empty set is type compatible with any concrete set type. The constructor
 can also be used to include elements (and ranges of elements):
 
 .. code-block:: nimrod
@@ -1013,7 +1024,7 @@ operation             meaning
 ==================    ========================================================
 
 Sets are often used to define a type for the *flags* of a procedure. This is
-much cleaner (and type safe solution) solution than just defining integer 
+much cleaner (and type safe) solution than just defining integer 
 constants that should be ``or``'ed together.
 
 
@@ -1047,36 +1058,6 @@ The built-in ``len`` proc returns the array's length. ``low(a)`` returns the
 lowest valid index for the array `a` and ``high(a)`` the highest valid index.
 
 
-Open arrays
------------
-Often fixed size arrays turn out to be too inflexible; procedures should
-be able to deal with arrays of different sizes. The `openarray`:idx: type
-allows this. Openarrays are always indexed with an ``int`` starting at
-position 0. The ``len``, ``low`` and ``high`` operations are available
-for open arrays too. Any array with a compatible base type can be passed to
-an openarray parameter, the index type does not matter.
-
-The openarray type cannot be nested: Multidimensional openarrays are not
-supported because this is seldom needed and cannot be done efficiently.
-
-An openarray is also a means to implement passing a variable number of
-arguments to a procedure. The compiler converts the list of arguments
-to an array automatically:
-
-.. code-block:: nimrod
-  proc myWriteln(f: TFile, a: openarray[string]) =
-    for s in items(a):
-      write(f, s)
-    write(f, "\n")
-
-  myWriteln(stdout, "abc", "def", "xyz")
-  # is transformed by the compiler to:
-  myWriteln(stdout, ["abc", "def", "xyz"])
-
-This transformation is only done if the openarray parameter is the
-last parameter in the procedure header.
-
-
 Sequences
 ---------
 `Sequences`:idx: are similar to arrays but of dynamic length which may change
@@ -1108,6 +1089,38 @@ rather than ``nil`` as the *empty* value. But ``@[]`` creates a sequence
 object on the heap, so there is a trade-off to be made here.
 
 
+Open arrays
+-----------
+**Note**: Openarrays can only be used for parameters.
+
+Often fixed size arrays turn out to be too inflexible; procedures should
+be able to deal with arrays of different sizes. The `openarray`:idx: type
+allows this. Openarrays are always indexed with an ``int`` starting at
+position 0. The ``len``, ``low`` and ``high`` operations are available
+for open arrays too. Any array with a compatible base type can be passed to
+an openarray parameter, the index type does not matter.
+
+The openarray type cannot be nested: Multidimensional openarrays are not
+supported because this is seldom needed and cannot be done efficiently.
+
+An openarray is also a means to implement passing a variable number of
+arguments to a procedure. The compiler converts the list of arguments
+to an array automatically:
+
+.. code-block:: nimrod
+  proc myWriteln(f: TFile, a: openarray[string]) =
+    for s in items(a):
+      write(f, s)
+    write(f, "\n")
+
+  myWriteln(stdout, "abc", "def", "xyz")
+  # is transformed by the compiler to:
+  myWriteln(stdout, ["abc", "def", "xyz"])
+
+This transformation is only done if the openarray parameter is the
+last parameter in the procedure header.
+
+
 Tuples
 ------
 
@@ -1271,8 +1284,19 @@ with an asterisk (``*``) are exported:
     # multiply two int sequences:
     for i in 0..len(a)-1: result[i] = a[i] * b[i]
 
+  when isMainModule: 
+    # test the new ``*`` operator for sequences:
+    assert(@[1, 2, 3] * @[1, 2, 3] == @[1, 4, 9])
+
 The above module exports ``x`` and ``*``, but not ``y``.
 
+The top-level statements of a module are executed at the start of the program.
+This can be used to initalize complex data structures for example.
+
+Each module has a special magic constant ``isMainModule`` that is true if the
+module is compiled as the main file. This is very useful to embed tests within
+the module as shown by the above example.
+
 Modules that depend on each other are possible, but strongly discouraged, 
 because then one module cannot be reused without the other.
 
diff --git a/doc/tut2.txt b/doc/tut2.txt
index dc14aabc0..0bea28a8f 100644
--- a/doc/tut2.txt
+++ b/doc/tut2.txt
@@ -33,7 +33,8 @@ Object Oriented Programming
 While Nimrod's support for object oriented programming (OOP) is minimalistic, 
 powerful OOP technics can be used. OOP is seen as *one* way to design a 
 program, not *the only* way. Often a procedural approach leads to simpler
-and more efficient code.
+and more efficient code. In particular, prefering aggregation over inheritance
+often yields to a better design.
 
 
 Objects
@@ -196,8 +197,8 @@ for any type:
   stdout.writeln("Hallo") # the same as write(stdout, "Hallo")
 
 If it gives you warm fuzzy feelings, you can even write ``1.`+`(2)`` instead of
-``1 + 2`` and claim that Nimrod is a pure object oriented language. (That 
-would not even be lying: *pure OO* has no meaning anyway. :-)
+``1 + 2`` and claim that Nimrod is a pure object oriented language. (But
+that's not true. :-)
 
 
 Properties
@@ -237,15 +238,15 @@ The ``[]`` array access operator can be overloaded to provide
   type
     TVector* = object
       x, y, z: float
-

+
   proc `[]=`* (v: var TVector, i: int, value: float) =
-    # setter

+    # setter
     case i
     of 0: v.x = value
     of 1: v.y = value
     of 2: v.z = value
     else: assert(false)
-

+
   proc `[]`* (v: TVector, i: int): float = 
     # getter
     case i
@@ -253,25 +254,29 @@ The ``[]`` array access operator can be overloaded to provide
     of 1: result = v.y
     of 2: result = v.z
     else: assert(false)
-   

+   
 The example is silly, since a vector is better modelled by a tuple which 
 already provides ``v[]`` access.
 
 
-Dynamic binding
----------------
-In Nimrod procedural types are used to implement dynamic binding. The following
-example also shows some more conventions: The ``self`` or ``this`` object 
-is named ``my`` (because it is shorter than the alternatives), each class 
-provides a constructor, etc.
+Dynamic dispatch
+----------------
+In Nimrod procedural types are used to implement dynamic dispatch. The
+following example also shows some more conventions: The ``self`` or ``this``
+object is named ``my`` (because it is shorter than the alternatives), each
+class provides a constructor, etc.
 
 .. code-block:: nimrod
   type
-    TFigure = object of TObject    # abstract base class:
-      draw: proc (my: var TFigure) # concrete classes implement this proc
+    TFigure = object of TObject     # abstract base class:
+      fDraw: proc (my: var TFigure) # concrete classes implement this proc
     
   proc init(f: var TFigure) = 
-    f.draw = nil
+    f.fDraw = nil
+  
+  proc draw(f: var TFigure) =
+    # ``draw`` dispatches dynamically:
+    f.fDraw(f)
   
   type
     TCircle = object of TFigure
@@ -282,7 +287,7 @@ provides a constructor, etc.
   proc init(my: var TCircle) = 
     init(TFigure(my)) # call base constructor
     my.radius = 5
-    my.draw = drawCircle
+    my.fdraw = drawCircle
 
   type
     TRectangle = object of TFigure
@@ -294,50 +299,7 @@ provides a constructor, etc.
     init(TFigure(my)) # call base constructor
     my.width = 5
     my.height = 10
-    my.draw = drawRectangle
-
-  # now use these classes:
-  var
-    r: TRectangle
-    c: TCircle
-  init(r)
-  init(c)
-  r.draw(r)
-  c.draw(c) 
-
-The last line shows the syntactical difference between static and dynamic 
-binding: The ``r.draw(r)`` dynamic call refers to ``r`` twice. This difference
-is not necessarily bad. But if you want to eliminate the somewhat redundant
-``r``, it can be done by using *closures*: 
-
-.. code-block:: nimrod
-  type
-    TFigure = object of TObject    # abstract base class:
-      draw: proc () {.closure.}    # concrete classes implement this proc
-    
-  proc init(f: var TFigure) = 
-    f.draw = nil
-  
-  type
-    TCircle = object of TFigure
-      radius: int
-  
-  proc init(me: var TCircle) = 
-    init(TFigure(me)) # call base constructor
-    me.radius = 5
-    me.draw = lambda () = 
-      echo("o " & $me.radius)
-
-  type
-    TRectangle = object of TFigure
-      width, height: int
-  
-  proc init(me: var TRectangle) = 
-    init(TFigure(me)) # call base constructor
-    me.width = 5
-    me.height = 10
-    me.draw = lambda () =
-      echo("[]")
+    my.fdraw = drawRectangle
 
   # now use these classes:
   var
@@ -348,10 +310,12 @@ is not necessarily bad. But if you want to eliminate the somewhat redundant
   r.draw()
   c.draw() 
 
-The example also introduces `lambda`:idx: expressions: A ``lambda`` expression
-defines a new proc with the ``closure`` calling convention on the fly.
+The code uses a ``draw`` procedure that is bound statically, but inside it
+the dynamic dispatch happens with the help of the ``fdraw`` field. This is
+slightly more inconvienent than in traditional OOP-languages, but has the
+advantage of being much more flexible (and somewhat faster). The above approach
+also allows some form *monkey patching* by modifying the ``fdraw`` field.
 
-`Version 0.7.4: Closures and lambda expressions are not implemented.`:red:
 
 
 Exceptions
@@ -432,7 +396,7 @@ is not executed (if an exception occurs).
 Generics
 ========
 
-`Version 0.7.4: Complex generic types like in the example do not work.`:red:
+`Version 0.7.6: Complex generic types like in the example do not work.`:red:
 
 `Generics`:idx: are Nimrod's means to parametrize procs, iterators or types 
 with `type parameters`:idx:. They are most useful for efficient type safe
@@ -458,8 +422,8 @@ containers:
     else:
       var it = root
       while it != nil:
-        # compare the data items; uses the generic ``cmd`` proc that works for
-        # any type that has a ``==`` and ``<`` operator
+        # compare the data items; uses the generic ``cmd`` proc
+        # that works for any type that has a ``==`` and ``<`` operator
         var c = cmp(it.data, n.data) 
         if c < 0:
           if it.le == nil:
@@ -491,7 +455,7 @@ containers:
       
   var
     root: PBinaryTree[string] # instantiate a PBinaryTree with ``string``
-  add(root, newNode("hallo")) # instantiates generic procs ``newNode`` and ``add``
+  add(root, newNode("hallo")) # instantiates ``newNode`` and ``add``
   add(root, "world")          # instantiates the second ``add`` proc
   for str in preorder(root):
     stdout.writeln(str)
@@ -567,6 +531,7 @@ Turning the ``log`` proc into a template solves this problem in an elegant way:
 The "types" of templates can be the symbols ``expr`` (stands for *expression*), 
 ``stmt`` (stands for *statement*) or ``typedesc`` (stands for *type 
 description*). These are no real types, they just help the compiler parsing.
+In later versions, real types will be supported too.
 
 The template body does not open a new scope. To open a new scope
 use a ``block`` statement:
@@ -587,6 +552,35 @@ use a ``block`` statement:
   b = 42  # does not work, `b` is unknown
 
 
+If there is a ``stmt`` parameter it should be the last in the template
+declaration. The reason is that statements can be passed to a template
+via a special ``:`` syntax:
+
+.. code-block:: nimrod
+
+  template withFile(f, filename, mode: expr, actions: stmt): stmt =
+    block:
+      var fn = filename
+      var f: TFile
+      if openFile(f, fn, mode):
+        try:
+          actions
+        finally:
+          closeFile(f)
+      else:
+        quit("cannot open: " & fn)
+      
+  withFile(txt, "ttempl3.txt", fmWrite):
+    txt.writeln("line 1")
+    txt.writeln("line 2")
+  
+In the example the two ``writeln`` statements are bound to the ``actions``
+parameter. The ``withFile`` template contains boilerplate code and helps to
+avoid a common bug: To forget to close the file. Note how the
+``var fn = filename`` statement ensures that ``filename`` is evaluated only
+once. 
+
+
 Macros
 ======
 
@@ -658,36 +652,6 @@ The macro call expands to:
   writeln(stdout, x)
 
 
-Lets return to the dynamic binding ``r.draw(r)`` notational "problem". Apart 
-from closures, there is another "solution": Define an infix ``!`` macro 
-operator which hides it: 
-
-.. code-block:: 
-
-  macro `!` (n: expr): expr = 
-    result = newNimNode(nnkCall, n)
-    var dot = newNimNode(nnkDotExpr, n)
-    dot.add(n[1])    # obj
-    if n[2].kind == nnkCall:
-      # transforms ``obj!method(arg1, arg2, ...)`` to
-      # ``(obj.method)(obj, arg1, arg2, ...)``
-      dot.add(n[2][0]) # method
-      result.add(dot)
-      result.add(n[1]) # obj
-      for i in 1..n[2].len-1:
-        result.add(n[2][i])
-    else:
-      # transforms ``obj!method`` to
-      # ``(obj.method)(obj)``
-      dot.add(n[2]) # method
-      result.add(dot)
-      result.add(n[1]) # obj
-  
-  r!draw(a, b, c) # will be transfomed into ``r.draw(r, a, b, c)``
-
-Great! 20 lines of complex code to safe a few keystrokes! Obviously, this is
-exactly you should not do! (But it makes a cool example.)
-
 
 Statement Macros
 ----------------
diff --git a/ide/nimide.nim b/ide/nimide.nim
index c5abc3bbf..671405bbc 100644
--- a/ide/nimide.nim
+++ b/ide/nimide.nim
@@ -22,6 +22,8 @@ type
     menu: PGtkMenuBar
     notebook: PGtkNotebook
     tabname: int               # used for generating tab names
+    tabs: seq[PTab]
+    currTab: int
   PEditor = ptr TEditor
 
 proc on_window_destroy(obj: PGtkObject, event: PGdkEvent, 
@@ -46,9 +48,50 @@ proc getTabIndex(e: PEditor, tab: PTab): int =
     if tab.hbox == v: return i
     inc(i)
   
+proc getActiveTab(e: PEditor): PTab = 
+  nil
+  
+type
+  TAnswer = enum
+    answerYes, answerNo, answerCancel
+  
+proc askWhetherToSave(e: PEditor): TAnswer = 
+  var dialog = gtk_dialog_new_with_buttons("Should the changes be saved?", 
+    e.window, GTK_DIALOG_MODAL, GTK_STOCK_SAVE, 1,
+                                "gtk-discard", 2,
+                                GTK_STOCK_CANCEL, 3, nil)
+  result = TAnswer(gtk_dialog_run(dialog)+1)
+  gtk_widget_destroy(dialog)
+
+proc saveTab(tab: PTab) = 
+  if tab.untitled: 
+    tab.filename = ChooseFileToSave(tab.e.window, getRoot(tab))
+    tab.untitled = false
+  XXX
+  
 proc OnCloseTab(button: PGtkButton, tab: PTab) {.cdecl.} = 
-  var idx = getTabIndex(tab.e, tab)
-  if idx >= 0: gtk_notebook_remove_page(tab.e.notebook, idx)
+  var idx = -1
+  for i in 0..high(tab.e.tabs): 
+    if tab.e.tabs[i] == tab: 
+      idx = i
+      break
+  if idx >= 0: 
+    if gtk_text_buffer_get_modified(gtk_text_view_get_buffer(tab.textView)):
+      case askWhetherToSave(tab.e)
+      of answerCancel: return
+      of answerYes: saveTab(tab)
+      of answerNo: nil
+    
+    gtk_notebook_remove_page(tab.e.notebook, idx)
+    if idx < high(tab.e.tabs):
+      for i in idx..high(tab.e.tabs)-1:  
+        tab.e.tabs[i] = tab.e.tabs[i+1]
+    else:
+      dec currTab
+    GC_unref(tab.filename)
+    dealloc(tab)
+  #var idx = getTabIndex(tab.e, tab)
+  #if idx >= 0: gtk_notebook_remove_page(tab.e.notebook, idx)
 
 proc createTab(e: PEditor, filename: string, untitled: bool) = 
   var t = cast[PTab](alloc0(sizeof(TTab)))
@@ -78,7 +121,21 @@ proc createTab(e: PEditor, filename: string, untitled: bool) =
   gtk_widget_show(lab)
  
   var idx = gtk_notebook_append_page(e.notebook, scroll, t.hbox)
+  e.currTab = idx
+  add(e.tabs, t)
   gtk_notebook_set_current_page(e.notebook, idx)
+  
+
+proc on_open_menu_item_activate(menuItem: PGtkMenuItem, e: PEditor) {.cdecl.} =
+  var files = ChooseFilesToOpen(e.window, getRoot(getActiveTab(e)))
+  for f in items(files): createTab(e, f, untitled=false)
+
+proc on_save_menu_item_activate(menuItem: PGtkMenuItem, e: PEditor) {.cdecl.} =
+  var cp = gtk_notebook_get_current_page(e.notebook)
+  
+  
+proc on_save_as_menu_item_activate(menuItem: PGtkMenuItem, e: PEditor) {.cdecl.} =
+  nil
 
 proc on_new_menu_item_activate(menuItem: PGtkMenuItem, e: PEditor) {.cdecl.} =
   inc(e.tabname)
@@ -91,6 +148,8 @@ proc main(e: PEditor) =
   e.window = GTK_WINDOW(glade_xml_get_widget(builder, "window"))
   e.statusbar = GTK_STATUSBAR(glade_xml_get_widget(builder, "statusbar"))
   e.notebook = GTK_NOTEBOOK(glade_xml_get_widget(builder, "notebook"))
+  e.tabs = @[]
+  e.currTab = -1
   setHomogeneous(e.notebook^, 1)
 
   # connect the signal handlers:
@@ -108,6 +167,18 @@ proc main(e: PEditor) =
   discard g_signal_connect(quitItem, "activate", 
                            G_CALLBACK(on_window_destroy), e)
 
+  var openItem = GTK_MENU_ITEM(glade_xml_get_widget(builder, "open_menu_item"))
+  discard g_signal_connect(openItem, "activate", 
+                           G_CALLBACK(on_open_menu_item_activate), e)
+  
+  var saveItem = GTK_MENU_ITEM(glade_xml_get_widget(builder, "save_menu_item")) 
+  discard g_signal_connect(saveItem, "activate", 
+                           G_CALLBACK(on_save_menu_item_activate), e)
+  
+  var saveAsItem = GTK_MENU_ITEM(glade_xml_get_widget(builder, "save_as_menu_item")) 
+  discard g_signal_connect(saveAsItem, "activate", 
+                           G_CALLBACK(on_save_as_menu_item_activate), e)
+
   gtk_window_set_default_icon_name(GTK_STOCK_EDIT)
   gtk_widget_show(e.window)
   gtk_main()
diff --git a/koch.py b/koch.py
index 974fdec04..5b6cf8cff 100644
--- a/koch.py
+++ b/koch.py
@@ -3,26 +3,19 @@
 ##########################################################################
 ##                                                                      ##
 ##             Build script of the Nimrod Compiler                      ##
-##                      (c) 2008 Andreas Rumpf                          ##
+##                      (c) 2009 Andreas Rumpf                          ##
 ##                                                                      ##
 ##########################################################################
 
-import os, os.path, sys, re, shutil, cPickle, time, getopt, glob, zlib
-from string import split, replace, lower, join, find, strip
-
-if sys.version[0] >= "3": # this script does not work with Python 3.0
-  sys.exit("wrong python version: use Python 1.5.2 - 2.6")
-
-True = 0 == 0 # Python 1.5 does not have True and False :-(
-False = 0 == 1
+import sys, os, os.path, re, shutil, time, getopt, glob, zlib, pickle
+from pycompab import *
 
 # --------------------- constants  ----------------------------------------
 
-NIMROD_VERSION = '0.7.4'
+NIMROD_VERSION = '0.7.6'
 # This string contains Nimrod's version. It is the only place
 # where the version needs to be updated. The rest is done by
-# the build process automatically. It is replaced **everywhere**
-# automatically!
+# the build process automatically. It is replaced **everywhere**!
 # Format is: Major.Minor.Patch
 # Major part: plan is to use number 1 for the first version that is stable;
 #             higher versions may be incompatible with previous versions
@@ -30,39 +23,39 @@ NIMROD_VERSION = '0.7.4'
 #             backwards-compatible)
 # Patch level: is increased for every patch
 
-EXPLAIN = True
-force = False
+EXPLAIN = true
+force = false
 
-GENERATE_DIFF = False
+GENERATE_DIFF = false
 # if set, a diff.log file is generated when bootstrapping
 
-USE_FPC = True
+USE_FPC = true
 
-BOOTCMD = "%s cc --compile:build/platdef.c %s rod/nimrod.nim"
+BOOTCMD = "$1 cc --compile:build/platdef.c $2 rod/nimrod.nim"
 # the command used for bootstrapping
 
 # --------------------------------------------------------------------------
 
 def Error(msg): sys.exit("[Koch] *** ERROR: " + msg)
-def Warn(msg): print "[Koch] *** WARNING: " + msg
-def Echo(msg): print "[Koch] " + msg
-def _Info(msg): print "[Koch] " + msg
+def Warn(msg): print("[Koch] *** WARNING: " + msg)
+def Echo(msg): print("[Koch] " + msg)
+def _Info(msg): print("[Koch] " + msg)
 
 _FINGERPRINTS_FILE = "koch.dat"
   # in this file all the fingerprints are kept to allow recognizing when a file
   # has changed. This works reliably, which cannot be said from just taking
   # filetime-stamps.
 
-def FileCmp(filenameA, filenameB):
+def SameFileContent(filenameA, filenameB):
   SIZE = 4096*2
-  result = True
+  result = true
   a = open(filenameA, "rb")
   b = open(filenameB, "rb")
-  while True:
+  while true:
     x = a.read(SIZE)
     y = b.read(SIZE)
     if x != y:
-      result = False
+      result = false
       break
     elif len(x) < SIZE: # EOF?
       break
@@ -70,41 +63,11 @@ def FileCmp(filenameA, filenameB):
   b.close()
   return result
 
-def Subs(frmt, **substitution):
-  import string
-  chars = string.digits+string.letters+"_"
-  d = substitution
-  result = []
-  i = 0
-  while i < len(frmt):
-    if frmt[i] == '$':
-      i = i+1
-      if frmt[i] == '$':
-        result.append('$')
-        i = i+1
-      elif frmt[i] == '{':
-        i = i+1
-        j = i
-        while frmt[i] != '}': i = i+1
-        i = i+1 # skip }
-        result.append(d[frmt[j:i-1]])
-      elif frmt[i] in string.letters+"_":
-        j = i
-        i = i+1
-        while i < len(frmt) and frmt[i] in chars: i = i + 1
-        result.append(d[frmt[j:i]])
-      else:
-        assert(false)
-    else:
-      result.append(frmt[i])
-      i = i+1
-  return join(result, "")
-
 def SplitArg(s):
   if ':' in s: c = ':'
   elif '=' in s: c = '='
   else: return (s, '')
-  i = s.find(c)
+  i = find(s, c)
   return (s[:i], s[i+1:])
 
 _baseDir = os.getcwd()
@@ -150,7 +113,7 @@ def Remove(f):
   try:
     os.remove(Path(f))
   except OSError:
-    Warn("could not remove: %s" % f)
+    Warn("could not remove: " + f)
 
 def Move(src, dest):
   try:
@@ -164,22 +127,26 @@ def Move(src, dest):
   d = Path(dest)
   try:
     m(s, d)
-  except IOError, OSError:
-    Warn("could not move %s to %s" % (s, d))
+  except IOError:
+    Warn(Subs("could not move $1 to $2", s, d))
+  except OSError:
+    Warn(Subs("could not move $1 to $2", s, d))
 
 def Copy(src, dest):
   s = Path(src)
   d = Path(dest)
   try:
     shutil.copyfile(s, d)
-  except IOError, OSError:
-    Warn("could not copy %s to %s" % (s, d))
+  except IOError:
+    Warn(Subs("could not copy $1 to $2", s, d))
+  except OSError:
+    Warn(Subs("could not copy $1 to $2", s, d))
 
 def RemoveDir(f):
   try:
     shutil.rmtree(Path(f))
   except OSError:
-    Warn("could not remove: %s" % f)
+    Warn("could not remove: " + f)
 
 def Exists(f): return os.path.exists(Path(f))
 
@@ -198,7 +165,7 @@ def Mkdir(dest):
     Warn("could not create directory: " + d)
 
 def Glob(pattern): # needed because glob.glob() is buggy on Windows 95:
-  # things like tests/t*.mor won't work
+  # things like tests/t*.nim won't work
   global _baseDir
   (head, tail) = os.path.split(Path(pattern))
   result = []
@@ -250,14 +217,14 @@ class Changed:
         # a success:
         c.success()
   """
-  def __init__(self, id, files, explain=False,
+  def __init__(self, id, files, explain=false,
                fingerprintsfile=_FINGERPRINTS_FILE):
     # load the fingerprints file:
     # fingerprints is a dict[target, files] where files is a dict[filename, hash]
     self.fingers = {} # default value
     if Exists(fingerprintsfile):
       try:
-        self.fingers = cPickle.load(open(fingerprintsfile))
+        self.fingers = pickle.load(open(fingerprintsfile, "rb"))
       except OSError:
         Error("Cannot read from " + fingerprintsfile)
     self.filename = fingerprintsfile
@@ -267,7 +234,7 @@ class Changed:
     self.explain = explain
 
   def _hashFile(self, f):
-    x = open(f)
+    x = open(f, "rb")
     result = self._hashStr(x.read())
     x.close() # for other Python implementations
     return result
@@ -275,29 +242,29 @@ class Changed:
   def check(self):
     if type(self.files) == type(""):
       self.files = split(self.files)
-    result = False
+    result = false
     target = self.id
-    if not self.fingers.has_key(target):
+    if not has_key(self.fingers, target):
       self.fingers[target] = {}
-      if self.explain: _Info("no entries for target '%s'" % target)
-      result = True
+      if self.explain: _Info(Subs("no entries for target '$1'", target))
+      result = true
     for d in self.files:
       if Exists(d):
         n = self._hashFile(d)
-        if not self.fingers[target].has_key(d) or n != self.fingers[target][d]:
-          result = True
-          if self.explain: _Info("'%s' modified since last build" % d)
+        if not has_key(self.fingers[target], d) or n != self.fingers[target][d]:
+          result = true
+          if self.explain: _Info(Subs("'$1' modified since last build", d))
           self.fingers[target][d] = n
       else:
-        Warn("'%s' does not exist!" % d)
-        result = True
+        Warn(Subs("'$1' does not exist!", d))
+        result = true
     return result
 
   def update(self, filename):
     self.fingers[self.id][filename] = self._hashFile(filename)
 
   def success(self):
-    cPickle.dump(self.fingers, open(self.filename, "w+"))
+    pickle.dump(self.fingers, open(self.filename, "wb+"))
 
 
 # --------------------------------------------------------------------------
@@ -318,12 +285,12 @@ def CogRule(name, filename, dependson):
 
 _nim_exe = os.path.join(os.getcwd(), "bin", ExeExt("nim"))
 _output_obj = os.path.join(os.getcwd(), "obj")
-FPC_CMD = (r"fpc -Cs16777216  -gl -bl -Crtoi -Sgidh -vw -Se1 -o%s "
-           r"-FU%s %s") % (_nim_exe, _output_obj,
-           os.path.join(os.getcwd(), "nim", "nimrod.pas"))
+FPC_CMD = Subs(r"fpc -Cs16777216  -gl -bl -Crtoi -Sgidh -vw -Se1 -o$1 "
+               r"-FU$2 $3", _nim_exe, _output_obj,
+               os.path.join(os.getcwd(), "nim", "nimrod.pas"))
 
 def buildRod(options):
-  Exec("nim compile --compile:build/platdef.c %s rod/nimrod" % options)
+  Exec(Subs("nim compile --compile:build/platdef.c $1 rod/nimrod", options))
   Move(ExeExt("rod/nimrod"), ExeExt("bin/nimrod"))
 
 def cmd_nim():
@@ -341,8 +308,8 @@ def cmd_nim():
     Exec(FPC_CMD)
     if Exists(ExeExt("bin/nim")):
       c.success()
-    return True
-  return False
+    return true
+  return false
 
 def cmd_rod(options):
   prereqs = Glob("lib/*.nim") + Glob("rod/*.nim") + [
@@ -356,13 +323,13 @@ def cmd_rod(options):
 
 # ------------------- constants -----------------------------------------------
 
-HELP = """\
+HELP = Subs("""\
 +-----------------------------------------------------------------+
 |         Maintenance script for Nimrod                           |
-|             Version %s|
-|             (c) 2008 Andreas Rumpf                              |
+|             Version $1|
+|             (c) 2009 Andreas Rumpf                              |
 +-----------------------------------------------------------------+
-Your Python version: %s
+Your Python version: $2
 
 Usage:
   koch.py [options] command [options for command]
@@ -382,27 +349,27 @@ Possible Commands:
   csource                  build the C sources for installation
   zip                      build the installation ZIP package
   inno                     build the Inno Setup installer
-""" % (NIMROD_VERSION + ' ' * (44-len(NIMROD_VERSION)), sys.version)
+""", NIMROD_VERSION + ' ' * (44-len(NIMROD_VERSION)), sys.version)
 
 def main(args):
   if len(args) == 0:
-    print HELP
+    print(HELP)
   else:
     i = 0
     while args[i][:1] == "-":
       a = args[i]
       if a in ("--force", "-f", "-B", "-b"):
         global force
-        force = True
+        force = true
       elif a in ("-h", "--help", "-?"):
-        print HELP
+        print(HELP)
         return
       elif a == "--diff":
         global GENERATE_DIFF
-        GENERATE_DIFF = True
+        GENERATE_DIFF = true
       elif a == "--no_fpc":
         global USE_FPC
-        USE_FPC = False
+        USE_FPC = false
       else:
         Error("illegal option: " + a)
       i = i + 1
@@ -417,19 +384,23 @@ def main(args):
     elif cmd == "zip": cmd_zip()
     elif cmd == "inno": cmd_inno()
     elif cmd == "csource": cmd_csource()
+    elif cmd == "install": cmd_install() # for backwards compability
     else: Error("illegal command: " + cmd)
     
 def cmd_csource():
-  Exec("nimrod cc -r tools/niminst --var:version=%s csource rod/nimrod" %
-       NIMROD_VERSION)
+  Exec(Subs("nimrod cc -r tools/niminst --var:version=$1 csource rod/nimrod",
+       NIMROD_VERSION))
 
 def cmd_zip():
-  Exec("nimrod cc -r tools/niminst --var:version=%s zip rod/nimrod" %
-       NIMROD_VERSION)
+  Exec(Subs("nimrod cc -r tools/niminst --var:version=$1 zip rod/nimrod",
+       NIMROD_VERSION))
   
 def cmd_inno():
-  Exec("nimrod cc -r tools/niminst --var:version=%s inno rod/nimrod" %
-       NIMROD_VERSION)
+  Exec(Subs("nimrod cc -r tools/niminst --var:version=$1 inno rod/nimrod",
+       NIMROD_VERSION))
+
+def cmd_install():
+  Exec("sh ./build.sh")
 
 # -------------------------- bootstrap ----------------------------------------
 
@@ -448,13 +419,13 @@ def genBootDiff(genA, genB):
     return a != b
 
   BOOTLOG = "bootdiff.log"
-  result = False
+  result = false
   for f in Glob("diff/*.c"): Remove(f)
   if Exists(BOOTLOG): Remove(BOOTLOG)
   if GENERATE_DIFF:
     lines = [] # lines of the generated logfile
     if len(genA) != len(genB): Warn("number of generated files differ!")
-    for filename, acontent in genA.iteritems():
+    for filename, acontent in genA.items():
       bcontent = genB[filename]
       if bcontent != acontent:
         lines.append("------------------------------------------------------")
@@ -464,8 +435,8 @@ def genBootDiff(genA, genB):
           la = acontent[i][:-1] # without newline!
           lb = bcontent[i][:-1]
           if interestingDiff(la, lb):
-            lines.append("%6d - %s" % (i, la))
-            lines.append("%6d + %s" % (i, lb))
+            lines.append(Subs("$1 - $2", i, la))
+            lines.append(Subs("$1 + $2", i, lb))
         if len(acontent) > len(bcontent):
           cont = acontent
           marker = "-"
@@ -473,10 +444,10 @@ def genBootDiff(genA, genB):
           cont = bcontent
           marker = "+"
         for i in range(min(len(acontent), len(bcontent)), len(cont)):
-          lines.append("%6d %s %s" % (i, marker, cont[i]))
+          lines.append(Subs("$1 $2 $3", i, marker, cont[i]))
         open(os.path.join("diff", "a_"+filename), "w+").write(join(acontent, ""))
         open(os.path.join("diff", "b_"+filename), "w+").write(join(bcontent, ""))
-    if lines: result = True
+    if lines: result = true
     open(BOOTLOG, "w+").write(join(lines, "\n"))
   return result
 
@@ -488,17 +459,17 @@ def cmd_rodsrc():
     compiler = "nim"
   else:
     compiler = "nimrod"
-  CMD = "%s boot --skip_proj_cfg -o:rod/%s.nim nim/%s"
-  result = False
+  CMD = "$1 boot --skip_proj_cfg -o:rod/$2.nim nim/$3"
+  result = false
   for fi in Glob("nim/*.pas"):
     f = FilenameNoExt(fi)
     if f in PAS_FILES_BLACKLIST: continue
     c = Changed(f+"__rodsrc", fi, EXPLAIN)
     if c.check() or force:
-      Exec(CMD % (compiler, f, f+".pas"))
-      Exec("%s parse rod/%s.nim" % (compiler, f))
+      Exec(Subs(CMD, compiler, f, f+".pas"))
+      Exec(Subs("$1 parse rod/$2.nim", compiler, f))
       c.success()
-      result = True
+      result = true
   return result
 
 def moveExes():
@@ -506,7 +477,7 @@ def moveExes():
 
 def cmd_boot(args):
   def myExec(compiler, args=args):
-    Exec(BOOTCMD % (compiler, args))
+    Exec(Subs(BOOTCMD, compiler, args))
     # some C compilers (PellesC) output the executable to the
     # wrong directory. We work around this bug here:
     if Exists(ExeExt("rod/nimcache/nimrod")):
@@ -515,7 +486,7 @@ def cmd_boot(args):
   writePlatdefC(getNimrodPath())
   d = detect("fpc -h")
   if USE_FPC and d:
-    Echo("'%s' detected" % d)
+    Echo(Subs("'$1' detected", d))
     cmd_nim()
     compiler = "nim"
   else:
@@ -536,34 +507,34 @@ def cmd_boot(args):
   if diff:
     Warn("generated C files are not equal: cycle once again...")
   # check if the executables are the same (they should!):
-  if FileCmp(Path(ExeExt("rod/nimrod")),
-             Path(ExeExt("bin/nimrod"))):
+  if SameFileContent(Path(ExeExt("rod/nimrod")),
+                     Path(ExeExt("bin/nimrod"))):
     Echo("executables are equal: SUCCESS!")
   else:
     Echo("executables are not equal: cycle once again...")
-    diff = True
+    diff = true
   if diff:
     # move the new executable to bin directory:
     moveExes()
     # use the new executable to compile Nimrod:
     myExec("nimrod")
-    if FileCmp(Path(ExeExt("rod/nimrod")),
-               Path(ExeExt("bin/nimrod"))):
+    if SameFileContent(Path(ExeExt("rod/nimrod")),
+                       Path(ExeExt("bin/nimrod"))):
       Echo("executables are equal: SUCCESS!")
     else:
       Warn("executables are still not equal")
 
 # ------------------ profile --------------------------------------------------
 def cmd_profile():
-  Exec(BOOTCMD % ("nimrod", "-d:release --profiler:on"))
+  Exec(Subs(BOOTCMD, "nimrod", "-d:release --profiler:on"))
   moveExes()
-  Exec(BOOTCMD % ("nimrod", "--compile_only"))
+  Exec(Subs(BOOTCMD, "nimrod", "--compile_only"))
 
 # ------------------ web ------------------------------------------------------
 
 def cmd_web():
-  Exec("nimrod cc -r tools/nimweb.nim web/nimrod --putenv:nimrodversion=%s" 
-       % NIMROD_VERSION)
+  Exec(Subs("nimrod cc -r tools/nimweb.nim web/nimrod "
+            "--putenv:nimrodversion=$1", NIMROD_VERSION))
        
 # -----------------------------------------------------------------------------
 
@@ -587,7 +558,7 @@ def cmd_clean(dir = "."):
   for f in Glob("rod/*.nim"): Remove(f) # remove generated source code
   def visit(extRegEx, dirname, names):
     if os.path.split(dirname)[1] == "nimcache":
-      shutil.rmtree(path=dirname, ignore_errors=True)
+      shutil.rmtree(path=dirname, ignore_errors=true)
       del names
     else:
       for name in names:
@@ -637,10 +608,10 @@ def writePlatdefC(nimrodpath):
   import os
   host, processor = getOSandProcessor()
   f = open(os.path.join(nimrodpath, "build/platdef.c"), "w+")
-  f.write('/* Generated by koch.py */\n'
-          'char* nimOS(void) { return "%s"; }\n'
-          'char* nimCPU(void) { return "%s"; }\n'
-          '\n' % (host, processor))
+  f.write(Subs('/* Generated by koch.py */\n'
+               'char* nimOS(void) { return "$1"; }\n'
+               'char* nimCPU(void) { return "$2"; }\n'
+               '\n', host, processor))
   f.close()
 
 def detect(cmd, lookFor="version"):
diff --git a/lib/alloc.nim b/lib/alloc.nim
index 504453699..8648b322a 100644
--- a/lib/alloc.nim
+++ b/lib/alloc.nim
@@ -1,13 +1,20 @@
 #
 #
 #            Nimrod's Runtime Library
-#        (c) Copyright 2008 Andreas Rumpf
+#        (c) Copyright 2009 Andreas Rumpf
 #
 #    See the file "copying.txt", included in this
 #    distribution, for details about the copyright.
 #
 
 # Low level allocator for Nimrod.
+# TODO: 
+# - eliminate "used" field
+# - make searching for block O(1)
+
+proc raiseOutOfMem {.noinline.} =
+  assert false
+  quit(1)
 
 # ------------ platform specific chunk allocation code -----------------------
 
@@ -15,20 +22,14 @@ when defined(posix):
   const # XXX: make these variables for portability?
     PROT_READ  = 1             # page can be read 
     PROT_WRITE = 2             # page can be written 
-    PROT_EXEC  = 4             # page can be executed 
-    PROT_NONE  = 0             # page can not be accessed 
-
-    MAP_SHARED    = 1          # Share changes 
-    MAP_PRIVATE   = 2          # Changes are private 
-    MAP_TYPE      = 0xf        # Mask for type of mapping 
-    MAP_FIXED     = 0x10       # Interpret addr exactly 
-    MAP_ANONYMOUS = 0x20       # don't use a file 
-
-    MAP_GROWSDOWN  = 0x100     # stack-like segment 
-    MAP_DENYWRITE  = 0x800     # ETXTBSY 
-    MAP_EXECUTABLE = 0x1000    # mark it as an executable 
-    MAP_LOCKED     = 0x2000    # pages are locked 
-    MAP_NORESERVE  = 0x4000    # don't check for reservations 
+    MAP_PRIVATE = 2            # Changes are private 
+  
+  when defined(linux):
+    const MAP_ANONYMOUS = 0x20       # don't use a file
+  elif defined(macosx):
+    const MAP_ANONYMOUS = 0x1000
+  else:
+    const MAP_ANONYMOUS = 0 # other operating systems may not know about this
 
   proc mmap(adr: pointer, len: int, prot, flags, fildes: cint,
             off: int): pointer {.header: "<sys/mman.h>".}
@@ -42,7 +43,7 @@ when defined(posix):
       raiseOutOfMem()
       
   proc osDeallocPages(p: pointer, size: int) {.inline} =
-    munmap(p, len)
+    munmap(p, size)
   
 elif defined(windows): 
   const
@@ -51,20 +52,27 @@ elif defined(windows):
     MEM_TOP_DOWN = 0x100000
     PAGE_READWRITE = 0x04
 
+    MEM_DECOMMIT = 0x4000
+    MEM_RELEASE = 0x8000
+
   proc VirtualAlloc(lpAddress: pointer, dwSize: int, flAllocationType,
                     flProtect: int32): pointer {.
                     header: "<windows.h>", stdcall.}
   
+  proc VirtualFree(lpAddress: pointer, dwSize: int, 
+                   dwFreeType: int32) {.header: "<windows.h>", stdcall.}
+  
   proc osAllocPages(size: int): pointer {.inline.} = 
     result = VirtualAlloc(nil, size, MEM_RESERVE or MEM_COMMIT,
                           PAGE_READWRITE)
     if result == nil: raiseOutOfMem()
 
-  proc osDeallocPages(p: pointer, size: int) {.inline.} =
-    nil
+  proc osDeallocPages(p: pointer, size: int) {.inline.} = 
+    # according to Microsoft, 0 is the only correct value here:
+    VirtualFree(p, 0, MEM_RELEASE)
 
 else: 
-  {.error: "Port GC to your platform".}
+  {.error: "Port memory manager to your platform".}
 
 # --------------------- end of non-portable code -----------------------------
 
@@ -78,59 +86,79 @@ else:
 # Guess the page size of the system; if it is the
 # wrong value, performance may be worse (this is not
 # for sure though), but GC still works; must be a power of two!
+when defined(linux) or defined(windows) or defined(macosx):
+  const
+    PageShift = 12
+    PageSize = 1 shl PageShift # on 32 bit systems 4096
+else:
+  {.error: "unkown page size".}
+
 const
-  PageShift = if sizeof(pointer) == 4: 12 else: 13
-  PageSize = 1 shl PageShift # on 32 bit systems 4096
-
-  MemAlignment = sizeof(pointer)*2 # minimal memory block that can be allocated
-  BitsPerUnit = sizeof(int)*8
-    # a "unit" is a word, i.e. 4 bytes
-    # on a 32 bit system; I do not use the term "word" because under 32-bit
-    # Windows it is sometimes only 16 bits
-
-  BitsPerPage = PageSize div MemAlignment
-  UnitsPerPage = BitsPerPage div BitsPerUnit
-    # how many units do we need to describe a page:
+  PageMask = PageSize-1
+  
+  SmallChunkSize = PageSize # * 4
+
+  MemAlign = 8 # minimal memory block that can be allocated
+
+  BitsPerPage = PageSize div MemAlign
+  UnitsPerPage = BitsPerPage div (sizeof(int)*8)
+    # how many ints do we need to describe a page:
     # on 32 bit systems this is only 16 (!)
 
-  smallRequest = PageSize div 4
-  ChunkOsReturn = 1024 # in pages
+  ChunkOsReturn = 64 * PageSize
   InitialMemoryRequest = ChunkOsReturn div 2 # < ChunkOsReturn!
-  debugMemMan = true # we wish to debug the memory manager...
+  
+  # Compile time options:
+  coalescRight = true
+  coalescLeft = true
 
-type
-  PChunkDesc = ptr TChunkDesc
-  TChunkDesc {.final, pure.} = object
-    key: TAddress    # address at bit 0
-    next: PChunkDesc
-    bits: array[0..127, int] # a bit vector
-
-  PChunkDescArray = ptr array[0..1000_000, PChunkDesc]
-  TChunkSet {.final, pure.} = object
-    counter, max: int
-    head: PChunkDesc
-    data: PChunkDescArray
+const
+  TrunkShift = 9
+  BitsPerTrunk = 1 shl TrunkShift # needs to be a power of 2 and divisible by 64
+  TrunkMask = BitsPerTrunk - 1
+  IntsPerTrunk = BitsPerTrunk div (sizeof(int)*8)
+  IntShift = 5 + ord(sizeof(int) == 8) # 5 or 6, depending on int width
+  IntMask = 1 shl IntShift - 1
+
+type 
+  PTrunk = ptr TTrunk
+  TTrunk {.final.} = object 
+    next: PTrunk         # all nodes are connected with this pointer
+    key: int             # start address at bit 0
+    bits: array[0..IntsPerTrunk-1, int] # a bit vector
   
-when sizeof(int) == 4:
-  type THalfWord = int16
-else:
-  type THalfWord = int32
+  TTrunkBuckets = array[0..1023, PTrunk]
+  TIntSet {.final.} = object 
+    data: TTrunkBuckets
   
 type
+  TAlignType = float
   TFreeCell {.final, pure.} = object
-    zeroField: pointer   # type info nil means cell is not used
-    next: ptr TFreeCell  # next free cell in chunk
-
-  PChunk = ptr TChunk
-  TChunk {.final, pure.} = object
-    size: int            # lowest two bits are used for merging:
-                         # bit 0: chunk to the left is accessible and free
-                         # bit 1: chunk to the right is accessible and free
-    len: int             # for small object allocation
-    prev, next: PChunk   # chunks of the same (or bigger) size
-                         #len, used: THalfWord # index of next to allocate cell
+    next: ptr TFreeCell  # next free cell in chunk (overlaid with refcount)
+    zeroField: pointer   # nil means cell is not used (overlaid with typ field)
+
+  PChunk = ptr TBaseChunk
+  PBigChunk = ptr TBigChunk
+  PSmallChunk = ptr TSmallChunk
+  TBaseChunk {.pure.} = object
+    prevSize: int        # size of previous chunk; for coalescing
+    size: int            # if < PageSize it is a small chunk
+    used: bool           # later will be optimized into prevSize...
+  
+  TSmallChunk = object of TBaseChunk
+    next, prev: PSmallChunk  # chunks of the same size
     freeList: ptr TFreeCell
-    data: float          # a float for alignment purposes
+    free: int            # how many bytes remain    
+    acc: int             # accumulator for small object allocation
+    data: TAlignType     # start of usable memory
+  
+  TBigChunk = object of TBaseChunk # not necessarily > PageSize!
+    next: PBigChunk      # chunks of the same (or bigger) size
+    prev: PBigChunk
+    data: TAlignType     # start of usable memory
+
+template smallChunkOverhead(): expr = sizeof(TSmallChunk)-sizeof(TAlignType)
+template bigChunkOverhead(): expr = sizeof(TBigChunk)-sizeof(TAlignType)
 
 proc roundup(x, v: int): int {.inline.} = return ((-x) and (v-1)) +% x
 
@@ -147,240 +175,325 @@ assert(roundup(15, 8) == 16)
 type
   PLLChunk = ptr TLLChunk
   TLLChunk {.pure.} = object ## *low-level* chunk
-    size: int
-    when sizeof(int) == 4:
-      align: int
+    size: int                # remaining size
+    acc: int                 # accumulator
     
   TAllocator {.final, pure.} = object
     llmem: PLLChunk
-    UsedPagesCount, FreePagesCount, maxPagesCount: int
-    freeSmallChunks: array[0..smallRequest div MemAlign-1, PChunk]
-    freeBigChunks: array[0..ChunkOsReturn-1, PChunk]
+    currMem, maxMem: int  # currently and maximum used memory size (allocated from OS)
+    freeSmallChunks: array[0..SmallChunkSize div MemAlign-1, PSmallChunk]
+    freeChunksList: PBigChunk # XXX make this a datastructure with O(1) access
+    chunkStarts: TIntSet
+   
+proc incCurrMem(a: var TAllocator, bytes: int) {.inline.} = 
+  inc(a.currMem, bytes)
+
+proc decCurrMem(a: var TAllocator, bytes: int) {.inline.} =
+  a.maxMem = max(a.maxMem, a.currMem)
+  dec(a.currMem, bytes)
+
+proc getMaxMem(a: var TAllocator): int =
+  # Since we update maxPagesCount only when freeing pages, 
+  # maxPagesCount may not be up to date. Thus we use the
+  # maximum of these both values here:
+  return max(a.currMem, a.maxMem)
+   
+var
+  allocator: TAllocator
     
-
 proc llAlloc(a: var TAllocator, size: int): pointer =
   # *low-level* alloc for the memory managers data structures. Deallocation
   # is never done.
-  assert(size <= PageSize-8)
-  if a.llmem.size + size > PageSize:
-    a.llmem = osGetPages(PageSize)
-    inc(a.gUsedPages)
-    a.llmem.size = 8
-  result = cast[pointer](cast[TAddress](a.llmem) + a.llmem.size)
-  inc(llmem.size, size)
+  if a.llmem == nil or size > a.llmem.size:
+    var request = roundup(size+sizeof(TLLChunk), PageSize)
+    a.llmem = cast[PLLChunk](osAllocPages(request))
+    incCurrMem(a, request)
+    a.llmem.size = request - sizeof(TLLChunk)
+    a.llmem.acc = sizeof(TLLChunk)
+  result = cast[pointer](cast[TAddress](a.llmem) + a.llmem.acc)
+  dec(a.llmem.size, size)
+  inc(a.llmem.acc, size)
   zeroMem(result, size)
-
-
-const
-  InitChunkSetSize = 1024 # must be a power of two!
-
-proc ChunkSetInit(s: var TChunkSet) =
-  s.data = cast[PChunkDescArray](llAlloc(InitChunkSetSize * sizeof(PChunkDesc)))
-  s.max = InitChunkSetSize-1
-  s.counter = 0
-  s.head = nil
-
-proc ChunkSetGet(t: TChunkSet, key: TAddress): PChunkDesc =
-  var h = cast[int](key) and t.max
-  while t.data[h] != nil:
-    if t.data[h].key == key: return t.data[h]
-    h = nextTry(h, t.max)
-  return nil
-
-proc ChunkSetRawInsert(t: TChunkSet, data: PChunkDescArray,
-                       desc: PChunkDesc) =
-  var h = cast[int](desc.key) and t.max
-  while data[h] != nil:
-    assert(data[h] != desc)
-    h = nextTry(h, t.max)
-  assert(data[h] == nil)
-  data[h] = desc
-
-proc ChunkSetEnlarge(t: var TChunkSet) =
-  var oldMax = t.max
-  t.max = ((t.max+1)*2)-1
-  var n = cast[PChunkDescArray](llAlloc((t.max + 1) * sizeof(PChunkDescArray)))
-  for i in 0 .. oldmax:
-    if t.data[i] != nil:
-      ChunkSetRawInsert(t, n, t.data[i])
-  tlsf_free(t.data)
-  t.data = n
-
-proc ChunkSetPut(t: var TChunkSet, key: TAddress): PChunkDesc =
-  var h = cast[int](key) and t.max
-  while true:
-    var x = t.data[h]
-    if x == nil: break
-    if x.key == key: return x
-    h = nextTry(h, t.max)
-
-  if ((t.max+1)*2 < t.counter*3) or ((t.max+1)-t.counter < 4):
-    ChunkSetEnlarge(t)
-  inc(t.counter)
-  h = cast[int](key) and t.max
-  while t.data[h] != nil: h = nextTry(h, t.max)
-  assert(t.data[h] == nil)
-  # the new page descriptor goes into result
-  result = cast[PChunkDesc](llAlloc(sizeof(TChunkDesc)))
-  result.next = t.head
-  result.key = key
-  t.head = result
-  t.data[h] = result
-
-# ---------- slightly higher level procs --------------------------------------
-
-proc in_Operator(s: TChunkSet, cell: PChunk): bool =
-  var u = cast[TAddress](cell)
-  var t = ChunkSetGet(s, u shr PageShift)
-  if t != nil:
-    u = (u %% PageSize) /% MemAlignment
-    result = (t.bits[u /% BitsPerUnit] and (1 shl (u %% BitsPerUnit))) != 0
-  else:
+  
+proc IntSetGet(t: TIntSet, key: int): PTrunk = 
+  var it = t.data[key and high(t.data)]
+  while it != nil: 
+    if it.key == key: return it
+    it = it.next
+  result = nil
+
+proc IntSetPut(t: var TIntSet, key: int): PTrunk = 
+  result = IntSetGet(t, key)
+  if result == nil:
+    result = cast[PTrunk](llAlloc(allocator, sizeof(result^)))
+    result.next = t.data[key and high(t.data)]
+    t.data[key and high(t.data)] = result
+    result.key = key
+
+proc Contains(s: TIntSet, key: int): bool = 
+  var t = IntSetGet(s, key shr TrunkShift)
+  if t != nil: 
+    var u = key and TrunkMask
+    result = (t.bits[u shr IntShift] and (1 shl (u and IntMask))) != 0
+  else: 
     result = false
+  
+proc Incl(s: var TIntSet, key: int) = 
+  var t = IntSetPut(s, key shr TrunkShift)
+  var u = key and TrunkMask
+  t.bits[u shr IntShift] = t.bits[u shr IntShift] or (1 shl (u and IntMask))
 
-proc incl(s: var TCellSet, cell: PCell) =
-  var u = cast[TAddress](cell)
-  var t = ChunkSetPut(s, u shr PageShift)
-  u = (u %% PageSize) /% MemAlignment
-  t.bits[u /% BitsPerUnit] = t.bits[u /% BitsPerUnit] or
-    (1 shl (u %% BitsPerUnit))
-
-proc excl(s: var TCellSet, cell: PCell) =
-  var u = cast[TAddress](cell)
-  var t = ChunkSetGet(s, u shr PageShift)
+proc Excl(s: var TIntSet, key: int) = 
+  var t = IntSetGet(s, key shr TrunkShift)
   if t != nil:
-    u = (u %% PageSize) /% MemAlignment
-    t.bits[u /% BitsPerUnit] = (t.bits[u /% BitsPerUnit] and
-                                  not (1 shl (u %% BitsPerUnit)))
-
-iterator elements(t: TChunkSet): PChunk {.inline.} =
-  # while traversing it is forbidden to add pointers to the tree!
-  var r = t.head
-  while r != nil:
-    var i = 0
-    while i <= high(r.bits):
-      var w = r.bits[i] # taking a copy of r.bits[i] here is correct, because
-      # modifying operations are not allowed during traversation
-      var j = 0
-      while w != 0:         # test all remaining bits for zero
-        if (w and 1) != 0:  # the bit is set!
-          yield cast[PCell]((r.key shl PageShift) or # +%
-                              (i*%BitsPerUnit+%j) *% MemAlignment)
-        inc(j)
-        w = w shr 1
-      inc(i)
-    r = r.next
+    var u = key and TrunkMask
+    t.bits[u shr IntShift] = t.bits[u shr IntShift] and not
+        (1 shl (u and IntMask))
+
+proc ContainsOrIncl(s: var TIntSet, key: int): bool = 
+  var t = IntSetGet(s, key shr TrunkShift)
+  if t != nil: 
+    var u = key and TrunkMask
+    result = (t.bits[u shr IntShift] and (1 shl (u and IntMask))) != 0
+    if not result: 
+      t.bits[u shr IntShift] = t.bits[u shr IntShift] or
+          (1 shl (u and IntMask))
+  else: 
+    Incl(s, key)
+    result = false
+   
+# ------------- chunk management ----------------------------------------------
+proc pageIndex(c: PChunk): int {.inline.} = 
+  result = cast[TAddress](c) shr PageShift
 
+proc pageIndex(p: pointer): int {.inline.} = 
+  result = cast[TAddress](p) shr PageShift
 
-# ------------- chunk management ----------------------------------------------
-proc removeChunk(a: var TAllocator, c: PChunk) {.inline.} = 
-  if c.prev != nil: c.prev.next = c.next
-  if c.next != nil: c.next.prev = c.prev
-  if a.freeChunks[c.size div PageSize] == c: 
-    a.freeChunks[c.size div PageSize] = c.next
-  
-proc addChunk(a: var TAllocator, c: PChunk) {.inline.} = 
-  var s = abs(c.size) div PageSize
+proc pageAddr(p: pointer): PChunk {.inline.} = 
+  result = cast[PChunk](cast[TAddress](p) and not PageMask)
+  assert(Contains(allocator.chunkStarts, pageIndex(result)))
+
+var lastSize = PageSize
+
+proc requestOsChunks(a: var TAllocator, size: int): PBigChunk = 
+  incCurrMem(a, size)
+  result = cast[PBigChunk](osAllocPages(size))
+  assert((cast[TAddress](result) and PageMask) == 0)
+  result.next = nil
+  result.prev = nil
+  result.used = false
+  result.size = size
+  # update next.prevSize:
+  var nxt = cast[TAddress](result) +% size
+  assert((nxt and PageMask) == 0)
+  var next = cast[PChunk](nxt)
+  if pageIndex(next) in a.chunkStarts:
+    #echo("Next already allocated!")
+    next.prevSize = size
+  # set result.prevSize:
+  var prv = cast[TAddress](result) -% lastSize
+  assert((nxt and PageMask) == 0)
+  var prev = cast[PChunk](prv)
+  if pageIndex(prev) in a.chunkStarts and prev.size == lastSize:
+    #echo("Prev already allocated!")
+    result.prevSize = lastSize
+  else:
+    result.prevSize = 0 # unknown
+  lastSize = size # for next request
+
+proc freeOsChunks(a: var TAllocator, p: pointer, size: int) = 
+  # update next.prevSize:
+  var c = cast[PChunk](p)
+  var nxt = cast[TAddress](p) +% c.size
+  assert((nxt and PageMask) == 0)
+  var next = cast[PChunk](nxt)
+  if pageIndex(next) in a.chunkStarts:
+    next.prevSize = 0 # XXX used
+  excl(a.chunkStarts, pageIndex(p))
+  osDeallocPages(p, size)
+  decCurrMem(a, size)
+
+proc isAccessible(p: pointer): bool {.inline.} = 
+  result = Contains(allocator.chunkStarts, pageIndex(p))
+
+proc ListAdd[T](head: var T, c: T) {.inline.} = 
+  assert c.prev == nil
+  assert c.next == nil
+  c.next = head
+  if head != nil: 
+    assert head.prev == nil
+    head.prev = c
+  head = c
+
+proc ListRemove[T](head: var T, c: T) {.inline.} =
+  if c == head: 
+    head = c.next
+    assert c.prev == nil
+    if head != nil: head.prev = nil
+  else:
+    assert c.prev != nil
+    c.prev.next = c.next
+    if c.next != nil: c.next.prev = c.prev
+  c.next = nil
   c.prev = nil
-  c.next = a.freeChunks[s]
-  a.freeChunks[s] = c
-
-proc freeChunk(a: var TAllocator, c: PChunk) = 
-  assert(c.size > 0)
-  if c.size < PageSize: c.size = PageSize
-  var le = cast[PChunk](cast[TAddress](p) and not PageMask -% PageSize)
-  var ri = cast[PChunk](cast[TAddress](p) and not PageMask +% 
-                        c.size +% PageSize)
-  if isStartOfAChunk(ri) and ri.size < 0:
-    removeChunk(a, ri)
-    inc(c.size, -ri.size)
-  if isEndOfAChunk(le): 
-    le = cast[PChunk](cast[TAddress](p) and not PageMask -% 
-                      le.chunkStart+PageSize)
-    if le.size < 0:
-      removeChunk(a, le)
-      inc(le.size, c.size)
-      addChunk(a, le)
-      return
-  c.size = -c.size
-  addChunk(a, c)
-
-proc splitChunk(a: var TAllocator, c: PChunk, size: int) = 
-  var rest = cast[PChunk](cast[TAddress](p) + size)
-  rest.size = size - c.size # results in negative number, because rest is free
-  addChunk(a, rest)
-  # mark pages as accessible:
-  ChunkTablePut(a, rest, bitAccessible)
+  
+proc isSmallChunk(c: PChunk): bool {.inline.} = 
+  return c.size <= SmallChunkSize-smallChunkOverhead()
+  #return c.size < SmallChunkSize
+  
+proc chunkUnused(c: PChunk): bool {.inline.} = 
+  result = not c.used
+  
+proc freeBigChunk(a: var TAllocator, c: PBigChunk) = 
+  var c = c
+  assert(c.size >= PageSize)
+  when coalescRight:
+    var ri = cast[PChunk](cast[TAddress](c) +% c.size)
+    assert((cast[TAddress](ri) and PageMask) == 0)
+    if isAccessible(ri) and chunkUnused(ri):
+      if not isSmallChunk(ri):
+        ListRemove(a.freeChunksList, cast[PBigChunk](ri))
+        inc(c.size, ri.size)
+        excl(a.chunkStarts, pageIndex(ri))
+  when coalescLeft:
+    if c.prevSize != 0: 
+      var le = cast[PChunk](cast[TAddress](c) -% c.prevSize)
+      assert((cast[TAddress](le) and PageMask) == 0)
+      if isAccessible(le) and chunkUnused(le):
+        if not isSmallChunk(le):
+          ListRemove(a.freeChunksList, cast[PBigChunk](le))
+          inc(le.size, c.size)
+          excl(a.chunkStarts, pageIndex(c))
+          c = cast[PBigChunk](le)
+
+  if c.size < ChunkOsReturn: 
+    ListAdd(a.freeChunksList, c)
+    c.used = false
+  else:
+    freeOsChunks(a, c, c.size)
+
+proc splitChunk(a: var TAllocator, c: PBigChunk, size: int) = 
+  var rest = cast[PBigChunk](cast[TAddress](c) +% size)
+  rest.size = c.size - size
+  rest.used = false
+  rest.next = nil # XXX
+  rest.prev = nil
+  rest.prevSize = size
   c.size = size
+  incl(a.chunkStarts, pageIndex(rest))
+  ListAdd(a.freeChunksList, rest)
+
+proc getBigChunk(a: var TAllocator, size: int): PBigChunk = 
+  # use first fit for now:
+  assert((size and PageMask) == 0)
+  result = a.freeChunksList
+  block search:
+    while result != nil:
+      assert chunkUnused(result)
+      if result.size == size: 
+        ListRemove(a.freeChunksList, result)
+        break search
+      elif result.size > size:
+        splitChunk(a, result, size)
+        ListRemove(a.freeChunksList, result)
+        break search
+      result = result.next
+    if size < InitialMemoryRequest: 
+      result = requestOsChunks(a, InitialMemoryRequest)
+      splitChunk(a, result, size)
+    else:
+      result = requestOsChunks(a, size)
+  result.prevSize = 0
+  result.used = true
+  incl(a.chunkStarts, pageIndex(result))
 
-proc getChunkOfSize(a: var TAllocator, size: int): PChunk = 
-  for i in size..high(a.freeChunks):
-    result = a.freeChunks[i]
-    if result != nil:
-      if i != size: splitChunk(a, result, size)
-      else: removeChunk(a, result)
-      result.prev = nil
-      result.next = nil
-      break
+proc getSmallChunk(a: var TAllocator): PSmallChunk = 
+  var res = getBigChunk(a, PageSize)
+  assert res.prev == nil
+  assert res.next == nil
+  result = cast[PSmallChunk](res)
 
 # -----------------------------------------------------------------------------
 
-proc getChunk(p: pointer): PChunk {.inline.} = 
-  result = cast[PChunk](cast[TAddress](p) and not PageMask)
-
 proc getCellSize(p: pointer): int {.inline.} = 
-  var c = getChunk(p)
-  result = abs(c.size)
+  var c = pageAddr(p)
+  result = c.size
   
-proc alloc(a: var TAllocator, size: int): pointer =
-  if size <= smallRequest: 
-    # allocate a small block
+proc alloc(a: var TAllocator, requestedSize: int): pointer =
+  var size = roundup(max(requestedSize, sizeof(TFreeCell)), MemAlign)
+  if size <= SmallChunkSize-smallChunkOverhead(): 
+    # allocate a small block: for small chunks, we use only its next pointer
     var s = size div MemAlign
     var c = a.freeSmallChunks[s]
     if c == nil: 
-      c = getChunkOfSize(0)
+      c = getSmallChunk(a)
       c.freeList = nil
+      assert c.size == PageSize
       c.size = size
-      a.freeSmallChunks[s] = c
-      c.len = 1
-      c.used = 1
-      c.chunkStart = 0
-      result = addr(c.data[0])
-    elif c.freeList != nil:
-      result = c.freeList
-      assert(c.freeList.zeroField == nil)
-      c.freeList = c.freeList.next
-      inc(c.used)
-      if c.freeList == nil: removeChunk(a, c)
+      c.acc = size
+      c.free = SmallChunkSize - smallChunkOverhead() - size
+      c.next = nil
+      c.prev = nil
+      ListAdd(a.freeSmallChunks[s], c)
+      result = addr(c.data)
     else:
-      assert(c.len*size <= high(c.data))
-      result = addr(c.data[c.len*size])
-      inc(c.len)
-      inc(c.used)
-      if c.len*size > high(c.data): removeChunk(a, c)
+      assert c.next != c
+      assert c.size == size
+      if c.freeList == nil:
+        assert(c.acc + smallChunkOverhead() + size <= SmallChunkSize) 
+        result = cast[pointer](cast[TAddress](addr(c.data)) +% c.acc)
+        inc(c.acc, size)      
+      else:
+        result = c.freeList
+        assert(c.freeList.zeroField == nil)
+        c.freeList = c.freeList.next
+      dec(c.free, size)
+    if c.free < size: 
+      ListRemove(a.freeSmallChunks[s], c)
   else:
+    size = roundup(requestedSize+bigChunkOverhead(), PageSize)
     # allocate a large block
-    var c = getChunkOfSize(size shr PageShift)
-    result = addr(c.data[0])
-    c.freeList = nil
-    c.size = size
-    c.len = 0
-    c.used = 0
-    c.chunkStart = 0
+    var c = getBigChunk(a, size)
+    assert c.prev == nil
+    assert c.next == nil
+    assert c.size == size
+    result = addr(c.data)
+  cast[ptr TFreeCell](result).zeroField = cast[ptr TFreeCell](1) # make it != nil
+  #echo("setting to one: ", $cast[TAddress](addr(cast[ptr TFreeCell](result).zeroField)))
+
+proc contains(list, x: PSmallChunk): bool = 
+  var it = list
+  while it != nil:
+    if it == x: return true
+    it = it.next
 
 proc dealloc(a: var TAllocator, p: pointer) = 
-  var c = getChunk(p)
-  if c.size <= smallRequest: 
-    # free small block:
+  var c = pageAddr(p)
+  if isSmallChunk(c):
+    # `p` is within a small chunk:
+    var c = cast[PSmallChunk](c)
+    var s = c.size
     var f = cast[ptr TFreeCell](p)
+    #echo("setting to nil: ", $cast[TAddress](addr(f.zeroField)))
+    assert(f.zeroField != nil)
     f.zeroField = nil
     f.next = c.freeList
-    c.freeList = p
-    dec(c.used)
-    if c.used == 0: freeChunk(c)
+    c.freeList = f
+    # check if it is not in the freeSmallChunks[s] list:
+    if c.free < s:
+      assert c notin a.freeSmallChunks[s div memAlign]
+      # add it to the freeSmallChunks[s] array:
+      ListAdd(a.freeSmallChunks[s div memAlign], c)
+      inc(c.free, s)
+    else:
+      inc(c.free, s)
+      if c.free == SmallChunkSize-smallChunkOverhead():
+        ListRemove(a.freeSmallChunks[s div memAlign], c)
+        c.size = SmallChunkSize
+        freeBigChunk(a, cast[PBigChunk](c))
   else:
     # free big chunk
-    freeChunk(c)
+    freeBigChunk(a, cast[PBigChunk](c))
 
 proc realloc(a: var TAllocator, p: pointer, size: int): pointer = 
   # could be made faster, but this is unnecessary, the GC does not use it anyway
@@ -389,6 +502,34 @@ proc realloc(a: var TAllocator, p: pointer, size: int): pointer =
   dealloc(a, p)
 
 proc isAllocatedPtr(a: TAllocator, p: pointer): bool = 
-  var c = getChunk(p)
-  if c in a.accessibleChunks and c.size > 0:
-    result = cast[ptr TFreeCell](p).zeroField != nil
+  if isAccessible(p):
+    var c = pageAddr(p)
+    if not chunkUnused(c):
+      if isSmallChunk(c):
+        result = (cast[TAddress](p) -% cast[TAddress](c) -%
+                 smallChunkOverhead()) %% c.size == 0 and
+          cast[ptr TFreeCell](p).zeroField != nil
+      else:
+        var c = cast[PBigChunk](c)
+        result = p == addr(c.data)
+
+when isMainModule:
+  const iterations = 4000_000
+  incl(allocator.chunkStarts, 11)
+  assert 11 in allocator.chunkStarts
+  excl(allocator.chunkStarts, 11)
+  assert 11 notin allocator.chunkStarts
+  var p: array [1..iterations, pointer]
+  for i in 7..7:
+    var x = i * 8
+    for j in 1.. iterations:
+      p[j] = alloc(allocator, x)
+    for j in 1..iterations:
+      assert isAllocatedPtr(allocator, p[j])
+    echo($i, " used memory: ", $(allocator.currMem))
+    for j in countdown(iterations, 1):
+      #echo("j: ", $j)
+      dealloc(allocator, p[j])
+      assert(not isAllocatedPtr(allocator, p[j]))
+    echo($i, " after freeing: ", $(allocator.currMem))
+    
diff --git a/lib/amd64.asm.in b/lib/amd64.asm.in
index 2c14bf241..0fa66fa7d 100644
--- a/lib/amd64.asm.in
+++ b/lib/amd64.asm.in
@@ -5,7 +5,6 @@
 ; that is the only convention any C compiler supports.

 

 \python{

-# as usual I use my own preprocessor :-)

 import os

 

 def c(name): 

diff --git a/lib/assign.nim b/lib/assign.nim
index 3d4bf4d61..17b4f5949 100644
--- a/lib/assign.nim
+++ b/lib/assign.nim
@@ -43,8 +43,12 @@ proc genericAssign(dest, src: Pointer, mt: PNimType) =
       x^ = nil
       return
     assert(dest != nil)
-    unsureAsgnRef(cast[ppointer](dest),
-                  newObj(mt, seq.len * mt.base.size + GenericSeqSize))
+    when defined(boehmGC):
+      unsureAsgnRef(cast[ppointer](dest),
+                    newObj(seq.len * mt.base.size + GenericSeqSize))
+    else:
+      unsureAsgnRef(cast[ppointer](dest),
+                    newObj(mt, seq.len * mt.base.size + GenericSeqSize))
     var dst = cast[taddress](cast[ppointer](dest)^)
     for i in 0..seq.len-1:
       genericAssign(
diff --git a/lib/base/cgi.html b/lib/base/cgi.html
deleted file mode 100644
index dded002bc..000000000
--- a/lib/base/cgi.html
+++ /dev/null
@@ -1,486 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!--  This file is generated by Nimrod. -->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>Module cgi</title>
-<style type="text/css">
-
-span.DecNumber {color: blue}
-span.BinNumber {color: blue}
-span.HexNumber {color: blue}
-span.OctNumber {color: blue}
-span.FloatNumber {color: blue}
-span.Identifier  {color: black}
-span.Keyword {font-weight: bold}
-span.StringLit {color: blue}
-span.LongStringLit {color: blue}
-span.CharLit {color: blue}
-span.EscapeSequence {color: black}
-span.Operator {color: black}
-span.Punctation {color: black}
-span.Comment, span.LongComment {font-style:italic; color: green}
-span.RegularExpression  {color: pink}
-span.TagStart {color: yellow}
-span.TagEnd {color: yellow}
-span.Key  {color: blue}
-span.Value  {color: black}
-span.RawData {color: blue}
-span.Assembler  {color: blue}
-span.Preprocessor {color: yellow}
-span.Directive  {color: yellow}
-span.Command, span.Rule, span.Hyperlink, span.Label, span.Reference, 
-span.Other  {color: black}
-
-div.navigation {
-  float: left; 
-  width: 27%;  //25em;
-  margin: 0; padding: 0; /*
-  border: 1px dashed gold; */
-  outline: 3px outset #7F7F7F; //#99ff99; //gold;
-  background-color: #7F7F7F;
-}
-
-div.navigation ul {list-style-type: none;}
-div.navigation ul li a, div.navigation ul li a:visited {
-  font-weight: bold;
-  color: #FFFFFF; // #CC0000;
-  text-decoration: none;
-}
-div.navigation ul li a:hover {
-  font-weight: bold;
-  text-decoration: none;
-  /*outline: 2px outset #7F7F7F;*/
-  color: gold;
-  /* background-color: #FFFFFF; // #1A1A1A; // #779977;*/
-}
-
-div.content {
-  margin-left: 27%; // 25em;
-  padding: 0 1em; 
-  /*border: 1px dashed #1A1A1A;*/
-  min-width: 16em;
-}
-
-dl.item dd, dl.item dd p {
-  margin-top:3px;
-}
-dl.item dd pre {
-  margin-left: 15pt;
-  border: 0px;
-}
-dl.item dt, dl.item dt pre {
-  margin:  20pt 0 0 0;
-}
-
-pre, span.tok {
-  background-color:#F9F9F9;
-  border:1px dotted #2F6FAB;
-  color:black;
-}
-
-/*
-:Author: David Goodger
-:Contact: goodger@python.org
-:Date: Date: 2006-05-21 22:44:42 +0200 (Sun, 21 May 2006)
-:Revision: Revision: 4564
-:Copyright: This stylesheet has been placed in the public domain.
-
-Default cascading style sheet for the HTML output of Docutils.
-
-See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
-customize this style sheet.
-*/
-/* used to remove borders from tables and images */
-.borderless, table.borderless td, table.borderless th { border: 0 }
-
-table.borderless td, table.borderless th {
-  /* Override padding for "table.docutils td" with "! important".
-     The right padding separates the table cells. */
-  padding: 0 0.5em 0 0 ! important }
-
-.first { margin-top: 0 ! important }
-.last, .with-subtitle { margin-bottom: 0 ! important }
-.hidden { display: none }
-a.toc-backref { text-decoration: none ; color: black }
-blockquote.epigraph { margin: 2em 5em ; }
-dl.docutils dd { margin-bottom: 0.5em }
-div.abstract { margin: 2em 5em }
-div.abstract p.topic-title { font-weight: bold ; text-align: center }
-div.admonition, div.attention, div.caution, div.danger, div.error,
-div.hint, div.important, div.note, div.tip, div.warning {
-  margin: 2em ; border: medium outset ; padding: 1em }
-div.admonition p.admonition-title, div.hint p.admonition-title,
-div.important p.admonition-title, div.note p.admonition-title,
-div.tip p.admonition-title { font-weight: bold ; font-family: sans-serif }
-
-div.attention p.admonition-title, div.caution p.admonition-title,
-div.danger p.admonition-title, div.error p.admonition-title,
-div.warning p.admonition-title { color: red ; font-weight: bold ;
-  font-family: sans-serif }
-
-/* Uncomment (and remove this text!) to get reduced vertical space in
-   compound paragraphs.
-div.compound .compound-first, div.compound .compound-middle {
-  margin-bottom: 0.5em }
-
-div.compound .compound-last, div.compound .compound-middle {
-  margin-top: 0.5em }
-*/
-
-div.dedication { margin: 2em 5em ; text-align: center ; font-style: italic }
-div.dedication p.topic-title { font-weight: bold ; font-style: normal }
-div.figure { margin-left: 2em ; margin-right: 2em }
-div.footer, div.header { clear: both; font-size: smaller }
-div.line-block { display: block ; margin-top: 1em ; margin-bottom: 1em }
-div.line-block div.line-block { margin-top: 0 ; margin-bottom: 0 ;
-  margin-left: 1.5em }
-div.sidebar { margin-left: 1em ; border: medium outset ;
-  padding: 1em ; background-color: #ffffee ; width: 40% ; float: right ;
-  clear: right }
-
-div.sidebar p.rubric { font-family: sans-serif ; font-size: medium }
-div.system-messages { margin: 5em }
-div.system-messages h1 { color: red }
-div.system-message { border: medium outset ; padding: 1em }
-div.system-message p.system-message-title { color: red ; font-weight: bold }
-div.topic { margin: 2em;}
-h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
-h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
-  margin-top: 0.4em }
-h1.title { text-align: center }
-h2.subtitle { text-align: center }
-hr.docutils { width: 75% }
-img.align-left { clear: left }
-img.align-right { clear: right }
-ol.simple, ul.simple { margin-bottom: 1em }
-ol.arabic { list-style: decimal }
-ol.loweralpha { list-style: lower-alpha }
-ol.upperalpha { list-style: upper-alpha }
-ol.lowerroman { list-style: lower-roman }
-ol.upperroman { list-style: upper-roman }
-p.attribution { text-align: right ; margin-left: 50% }
-p.caption { font-style: italic }
-p.credits { font-style: italic ; font-size: smaller }
-p.label { white-space: nowrap }
-p.rubric { font-weight:bold;font-size:larger;color:maroon;text-align:center}
-p.sidebar-title {font-family: sans-serif ;font-weight: bold ;font-size: larger }
-p.sidebar-subtitle {font-family: sans-serif ; font-weight: bold }
-p.topic-title { font-weight: bold }
-pre.address { margin-bottom: 0;margin-top:0;font-family:serif;font-size:100% }
-pre.literal-block, pre.doctest-block {margin-left: 2em ;margin-right: 2em }
-span.classifier {font-family: sans-serif;font-style: oblique }
-span.classifier-delimiter {font-family: sans-serif;font-weight: bold }
-span.interpreted {font-family: sans-serif }
-span.option {white-space: nowrap }
-span.pre {white-space: pre }
-span.problematic {color: red }
-span.section-subtitle {
-  /* font-size relative to parent (h1..h6 element) */
-  font-size: 80% }
-
-table.citation { border-left: solid 1px gray; margin-left: 1px }
-table.docinfo {margin: 2em 4em }
-table.docutils {margin-top: 0.5em;margin-bottom: 0.5em }
-table.footnote {border-left: solid 1px black;margin-left: 1px }
-
-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 th.field-name, table.docinfo th.docinfo-name {
-  font-weight: bold;text-align: left;white-space: nowrap;padding-left: 0 }
-h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
-h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {font-size: 100% }
-ul.auto-toc { list-style-type: none }
-/*a.reference { color: #E00000; font-weight:bold;}
-a.reference:hover {color: #E00000;background-color: #ffff00;display: margin;
-  font-weight:bold;}*/
-
-</style>
-<script type="text/javascript">
-  //<![CDATA[
-    function toggleElem(id) {
-      var e = document.getElementById(id);
-      e.style.display = e.style.display == 'none' ? 'block' : 'none';
-    }
-
-    var gOpen = 'none'
-    function toggleAll() {
-      gOpen = gOpen == 'none' ? 'block' : 'none';
-      var i = 1
-      while (1) {
-        var e = document.getElementById("m"+i)
-        if (!e) break;
-        e.style.display = gOpen
-        i++;
-      }
-      document.getElementById('toggleButton').value =
-        gOpen == 'none' ? 'Show Details' : 'Hide Details';
-    }
-  //]]>
-</script>
-
-</head>
-<body>
-<div class="document" id="documentId">
-<h1 class="title">Module cgi</h1>
-<div class="navigation">
-<p class="topic-title first">Navigation</p>
-<ul class="simple">
-<li>
-  <a class="reference" href="#6" id="56">Types</a>
-  <ul class="simple">
-      <li><a class="reference" href="#103">ECgi</a></li>
-  <li><a class="reference" href="#104">TRequestMethod</a></li>
-
-  </ul>
-</li>
-<li>
-  <a class="reference" href="#9" id="59">Procs</a>
-  <ul class="simple">
-      <li><a class="reference" href="#101">URLencode</a></li>
-  <li><a class="reference" href="#102">URLdecode</a></li>
-  <li><a class="reference" href="#105">readData</a></li>
-  <li><a class="reference" href="#106">validateData</a></li>
-  <li><a class="reference" href="#107">getContentLength</a></li>
-  <li><a class="reference" href="#108">getContentType</a></li>
-  <li><a class="reference" href="#109">getDocumentRoot</a></li>
-  <li><a class="reference" href="#110">getGatewayInterface</a></li>
-  <li><a class="reference" href="#111">getHttpAccept</a></li>
-  <li><a class="reference" href="#112">getHttpAcceptCharset</a></li>
-  <li><a class="reference" href="#113">getHttpAccept Encoding</a></li>
-  <li><a class="reference" href="#114">getHttpAccept Language</a></li>
-  <li><a class="reference" href="#115">getHttpConnection</a></li>
-  <li><a class="reference" href="#116">getHttpCookie</a></li>
-  <li><a class="reference" href="#117">getHttpHost</a></li>
-  <li><a class="reference" href="#118">getHttpReferer</a></li>
-  <li><a class="reference" href="#119">getHttpUserAgent</a></li>
-  <li><a class="reference" href="#120">getPathInfo</a></li>
-  <li><a class="reference" href="#121">getPathTranslated</a></li>
-  <li><a class="reference" href="#122">getQueryString</a></li>
-  <li><a class="reference" href="#123">getRemoteAddr</a></li>
-  <li><a class="reference" href="#124">getRemoteHost</a></li>
-  <li><a class="reference" href="#125">getRemoteIdent</a></li>
-  <li><a class="reference" href="#126">getRemotePort</a></li>
-  <li><a class="reference" href="#127">getRemoteUser</a></li>
-  <li><a class="reference" href="#128">getRequestMethod</a></li>
-  <li><a class="reference" href="#129">getRequestURI</a></li>
-  <li><a class="reference" href="#130">getScriptFilename</a></li>
-  <li><a class="reference" href="#131">getScriptName</a></li>
-  <li><a class="reference" href="#132">getServerAddr</a></li>
-  <li><a class="reference" href="#133">getServerAdmin</a></li>
-  <li><a class="reference" href="#134">getServerName</a></li>
-  <li><a class="reference" href="#135">getServerPort</a></li>
-  <li><a class="reference" href="#136">getServerProtocol</a></li>
-  <li><a class="reference" href="#137">getServerSignature</a></li>
-  <li><a class="reference" href="#138">getServerSoftware</a></li>
-  <li><a class="reference" href="#139">setTestData</a></li>
-  <li><a class="reference" href="#140">writeContentType</a></li>
-
-  </ul>
-</li>
-
-</ul>
-</div>
-<div class="content">
-This module implements helper procs for CGI applictions. Example:<pre>
-<span class="Keyword">import</span> <span class="Identifier">strtabs</span><span class="Punctation">,</span> <span class="Identifier">cgi</span>
-
-<span class="Comment"># Fill the values when debugging:</span>
-<span class="Keyword">when</span> <span class="Identifier">debug</span><span class="Punctation">:</span>
-  <span class="Identifier">setTestData</span><span class="Punctation">(</span><span class="StringLit">&quot;name&quot;</span><span class="Punctation">,</span> <span class="StringLit">&quot;Klaus&quot;</span><span class="Punctation">,</span> <span class="StringLit">&quot;password&quot;</span><span class="Punctation">,</span> <span class="StringLit">&quot;123456&quot;</span><span class="Punctation">)</span>
-<span class="Comment"># read the data into `myData`</span>
-<span class="Keyword">var</span> <span class="Identifier">myData</span> <span class="Operator">=</span> <span class="Identifier">readData</span><span class="Punctation">(</span><span class="Punctation">)</span>
-<span class="Comment"># check that the data's variable names are &quot;name&quot; or &quot;passwort&quot;</span>
-<span class="Identifier">validateData</span><span class="Punctation">(</span><span class="Identifier">myData</span><span class="Punctation">,</span> <span class="StringLit">&quot;name&quot;</span><span class="Punctation">,</span> <span class="StringLit">&quot;password&quot;</span><span class="Punctation">)</span>
-<span class="Comment"># start generating content:</span>
-<span class="Identifier">writeContentType</span><span class="Punctation">(</span><span class="Punctation">)</span>
-<span class="Comment"># generate content:</span>
-<span class="Identifier">write</span><span class="Punctation">(</span><span class="Identifier">stdout</span><span class="Punctation">,</span> <span class="StringLit">&quot;&lt;!DOCTYPE HTML PUBLIC </span><span class="EscapeSequence">\&quot;</span>-//W3C//DTD HTML 4.01//EN<span class="EscapeSequence">\&quot;</span><span class="EscapeSequence">&gt;\n</span><span class="StringLit">&quot;</span><span class="Punctation">)</span>
-<span class="Identifier">write</span><span class="Punctation">(</span><span class="Identifier">stdout</span><span class="Punctation">,</span> <span class="StringLit">&quot;&lt;html&gt;&lt;head&gt;&lt;title&gt;Test&lt;/title&gt;&lt;/head&gt;&lt;body&gt;</span><span class="EscapeSequence">\n</span><span class="StringLit">&quot;</span><span class="Punctation">)</span>
-<span class="Identifier">writeln</span><span class="Punctation">(</span><span class="Identifier">stdout</span><span class="Punctation">,</span> <span class="StringLit">&quot;your name: &quot;</span> <span class="Operator">&amp;</span> <span class="Identifier">myData</span><span class="Punctation">[</span><span class="StringLit">&quot;name&quot;</span><span class="Punctation">]</span><span class="Punctation">)</span>
-<span class="Identifier">writeln</span><span class="Punctation">(</span><span class="Identifier">stdout</span><span class="Punctation">,</span> <span class="StringLit">&quot;your password: &quot;</span> <span class="Operator">&amp;</span> <span class="Identifier">myData</span><span class="Punctation">[</span><span class="StringLit">&quot;password&quot;</span><span class="Punctation">]</span><span class="Punctation">)</span>
-<span class="Identifier">writeln</span><span class="Punctation">(</span><span class="Identifier">stdout</span><span class="Punctation">,</span> <span class="StringLit">&quot;&lt;/body&gt;&lt;/html&gt;&quot;</span><span class="Punctation">)</span></pre>
-<div class="section" id="6">
-<h1><a class="toc-backref" href="#56">Types</a></h1>
-<dl class="item">
-<dt id="103"><pre><span class="Identifier">ECgi</span><span class="Operator">*</span> <span class="Other">=</span> <span class="Keyword">object</span> <span class="Keyword">of</span> <span class="Identifier">EIO</span></pre></dt>
-<dd>
-the exception that is raised, if a CGI error occurs
-</dd>
-<dt id="104"><pre><span class="Identifier">TRequestMethod</span><span class="Operator">*</span> <span class="Other">=</span> <span class="Keyword">enum</span> 
-  <span class="Identifier">methodPost</span><span class="Other">,</span>                 <span class="Comment">## query uses the POST method</span>
-  <span class="Identifier">methodGet</span>                   <span class="Comment">## query uses the GET method</span></pre></dt>
-<dd>
-the used request method
-</dd>
-
-</dl></div>
-<div class="section" id="9">
-<h1><a class="toc-backref" href="#59">Procs</a></h1>
-<dl class="item">
-<dt id="101"><pre><span class="Keyword">proc</span> <span class="Identifier">URLencode</span><span class="Operator">*</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-Encodes a value to be HTTP safe: This means that characters in the set <tt class="docutils literal"><span class="pre">{'A'..'Z', 'a'..'z', '0'..'9', '_'}</span></tt> are carried over to the result, a space is converted to <tt class="docutils literal"><span class="pre">'+'</span></tt> and every other character is encoded as <tt class="docutils literal"><span class="pre">'%xx'</span></tt> where <tt class="docutils literal"><span class="pre">xx</span></tt> denotes its hexadecimal value. 
-</dd>
-<dt id="102"><pre><span class="Keyword">proc</span> <span class="Identifier">URLdecode</span><span class="Operator">*</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-Decodes a value from its HTTP representation: This means that a <tt class="docutils literal"><span class="pre">'+'</span></tt> is converted to a space, <tt class="docutils literal"><span class="pre">'%xx'</span></tt> (where <tt class="docutils literal"><span class="pre">xx</span></tt> denotes a hexadecimal value) is converted to the character with ordinal number <tt class="docutils literal"><span class="pre">xx</span></tt>, and and every other character is carried over. 
-</dd>
-<dt id="105"><pre><span class="Keyword">proc</span> <span class="Identifier">readData</span><span class="Operator">*</span><span class="Other">(</span><span class="Identifier">allowedMethods</span><span class="Other">:</span> <span class="Identifier">set</span><span class="Other">[</span><span class="Identifier">TRequestMethod</span><span class="Other">]</span> <span class="Other">=</span> <span class="Other">{</span><span class="Identifier">methodPost</span><span class="Other">,</span> <span class="Identifier">methodGet</span><span class="Other">}</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">PStringTable</span></pre></dt>
-<dd>
-Read CGI data. If the client does not use a method listed in the <cite>allowedMethods</cite> set, an <cite>ECgi</cite> exception is raised.
-</dd>
-<dt id="106"><pre><span class="Keyword">proc</span> <span class="Identifier">validateData</span><span class="Operator">*</span><span class="Other">(</span><span class="Identifier">data</span><span class="Other">:</span> <span class="Identifier">PStringTable</span><span class="Other">,</span> <span class="Identifier">validKeys</span><span class="Other">:</span> <span class="Identifier">openarray</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">)</span></pre></dt>
-<dd>
-validates data; raises <cite>ECgi</cite> if this fails. This checks that each variable name of the CGI <cite>data</cite> occurs in the <cite>validKeys</cite> array.
-</dd>
-<dt id="107"><pre><span class="Keyword">proc</span> <span class="Identifier">getContentLength</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">CONTENT_LENGTH</span></tt> environment variable
-</dd>
-<dt id="108"><pre><span class="Keyword">proc</span> <span class="Identifier">getContentType</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">CONTENT_TYPE</span></tt> environment variable
-</dd>
-<dt id="109"><pre><span class="Keyword">proc</span> <span class="Identifier">getDocumentRoot</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">DOCUMENT_ROOT</span></tt> environment variable
-</dd>
-<dt id="110"><pre><span class="Keyword">proc</span> <span class="Identifier">getGatewayInterface</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">GATEWAY_INTERFACE</span></tt> environment variable
-</dd>
-<dt id="111"><pre><span class="Keyword">proc</span> <span class="Identifier">getHttpAccept</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">HTTP_ACCEPT</span></tt> environment variable
-</dd>
-<dt id="112"><pre><span class="Keyword">proc</span> <span class="Identifier">getHttpAcceptCharset</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">HTTP_ACCEPT_CHARSET</span></tt> environment variable
-</dd>
-<dt id="113"><pre><span class="Keyword">proc</span> <span class="Identifier">getHttpAcceptEncoding</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">HTTP_ACCEPT_ENCODING</span></tt> environment variable
-</dd>
-<dt id="114"><pre><span class="Keyword">proc</span> <span class="Identifier">getHttpAcceptLanguage</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">HTTP_ACCEPT_LANGUAGE</span></tt> environment variable
-</dd>
-<dt id="115"><pre><span class="Keyword">proc</span> <span class="Identifier">getHttpConnection</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">HTTP_CONNECTION</span></tt> environment variable
-</dd>
-<dt id="116"><pre><span class="Keyword">proc</span> <span class="Identifier">getHttpCookie</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">HTTP_COOKIE</span></tt> environment variable
-</dd>
-<dt id="117"><pre><span class="Keyword">proc</span> <span class="Identifier">getHttpHost</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">HTTP_HOST</span></tt> environment variable
-</dd>
-<dt id="118"><pre><span class="Keyword">proc</span> <span class="Identifier">getHttpReferer</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">HTTP_REFERER</span></tt> environment variable
-</dd>
-<dt id="119"><pre><span class="Keyword">proc</span> <span class="Identifier">getHttpUserAgent</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">HTTP_USER_AGENT</span></tt> environment variable
-</dd>
-<dt id="120"><pre><span class="Keyword">proc</span> <span class="Identifier">getPathInfo</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">PATH_INFO</span></tt> environment variable
-</dd>
-<dt id="121"><pre><span class="Keyword">proc</span> <span class="Identifier">getPathTranslated</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">PATH_TRANSLATED</span></tt> environment variable
-</dd>
-<dt id="122"><pre><span class="Keyword">proc</span> <span class="Identifier">getQueryString</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">QUERY_STRING</span></tt> environment variable
-</dd>
-<dt id="123"><pre><span class="Keyword">proc</span> <span class="Identifier">getRemoteAddr</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">REMOTE_ADDR</span></tt> environment variable
-</dd>
-<dt id="124"><pre><span class="Keyword">proc</span> <span class="Identifier">getRemoteHost</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">REMOTE_HOST</span></tt> environment variable
-</dd>
-<dt id="125"><pre><span class="Keyword">proc</span> <span class="Identifier">getRemoteIdent</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">REMOTE_IDENT</span></tt> environment variable
-</dd>
-<dt id="126"><pre><span class="Keyword">proc</span> <span class="Identifier">getRemotePort</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">REMOTE_PORT</span></tt> environment variable
-</dd>
-<dt id="127"><pre><span class="Keyword">proc</span> <span class="Identifier">getRemoteUser</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">REMOTE_USER</span></tt> environment variable
-</dd>
-<dt id="128"><pre><span class="Keyword">proc</span> <span class="Identifier">getRequestMethod</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">REQUEST_METHOD</span></tt> environment variable
-</dd>
-<dt id="129"><pre><span class="Keyword">proc</span> <span class="Identifier">getRequestURI</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">REQUEST_URI</span></tt> environment variable
-</dd>
-<dt id="130"><pre><span class="Keyword">proc</span> <span class="Identifier">getScriptFilename</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">SCRIPT_FILENAME</span></tt> environment variable
-</dd>
-<dt id="131"><pre><span class="Keyword">proc</span> <span class="Identifier">getScriptName</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">SCRIPT_NAME</span></tt> environment variable
-</dd>
-<dt id="132"><pre><span class="Keyword">proc</span> <span class="Identifier">getServerAddr</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">SERVER_ADDR</span></tt> environment variable
-</dd>
-<dt id="133"><pre><span class="Keyword">proc</span> <span class="Identifier">getServerAdmin</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">SERVER_ADMIN</span></tt> environment variable
-</dd>
-<dt id="134"><pre><span class="Keyword">proc</span> <span class="Identifier">getServerName</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">SERVER_NAME</span></tt> environment variable
-</dd>
-<dt id="135"><pre><span class="Keyword">proc</span> <span class="Identifier">getServerPort</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">SERVER_PORT</span></tt> environment variable
-</dd>
-<dt id="136"><pre><span class="Keyword">proc</span> <span class="Identifier">getServerProtocol</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">SERVER_PROTOCOL</span></tt> environment variable
-</dd>
-<dt id="137"><pre><span class="Keyword">proc</span> <span class="Identifier">getServerSignature</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">SERVER_SIGNATURE</span></tt> environment variable
-</dd>
-<dt id="138"><pre><span class="Keyword">proc</span> <span class="Identifier">getServerSoftware</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span></pre></dt>
-<dd>
-returns contents of the <tt class="docutils literal"><span class="pre">SERVER_SOFTWARE</span></tt> environment variable
-</dd>
-<dt id="139"><pre><span class="Keyword">proc</span> <span class="Identifier">setTestData</span><span class="Operator">*</span><span class="Other">(</span><span class="Identifier">keysvalues</span><span class="Other">:</span> <span class="Identifier">openarray</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">)</span></pre></dt>
-<dd>
-fills the appropriate environment variables to test your CGI application. This can only simulate the 'GET' 'REQUEST_METHOD'. <cite>keysvalues</cite> should provide embedded (name, value)-pairs. Example:<pre><span class="Identifier">setTestData</span><span class="Punctation">(</span><span class="StringLit">&quot;name&quot;</span><span class="Punctation">,</span> <span class="StringLit">&quot;Hanz&quot;</span><span class="Punctation">,</span> <span class="StringLit">&quot;password&quot;</span><span class="Punctation">,</span> <span class="StringLit">&quot;12345&quot;</span><span class="Punctation">)</span></pre>
-</dd>
-<dt id="140"><pre><span class="Keyword">proc</span> <span class="Identifier">writeContentType</span><span class="Operator">*</span><span class="Other">(</span><span class="Other">)</span></pre></dt>
-<dd>
-call this before starting to send your HTML data to <cite>stdout</cite>. This is just a shorthand for: .. code-block:: Nimrod<blockquote>write(stdout, &quot;Content-type: text/htmlnn&quot;)</blockquote>
-
-</dd>
-
-</dl></div>
-
-</div>
-
-<small>Generated: 2008-12-08 20:29:49 UTC</small>
-</div>
-</body>
-</html>
diff --git a/lib/base/cgi.nim b/lib/base/cgi.nim
index 59b7b9d09..0dc3a4394 100644
--- a/lib/base/cgi.nim
+++ b/lib/base/cgi.nim
@@ -1,7 +1,7 @@
 #
 #
 #            Nimrod's Runtime Library
-#        (c) Copyright 2008 Andreas Rumpf
+#        (c) Copyright 2009 Andreas Rumpf
 #
 #    See the file "copying.txt", included in this
 #    distribution, for details about the copyright.
@@ -71,20 +71,40 @@ proc URLdecode*(s: string): string =
     else: add(result, s[i])
     inc(i)
 
+proc addXmlChar(dest: var string, c: Char) {.inline.} = 
+  case c
+  of '&': add(dest, "&amp;")
+  of '<': add(dest, "&lt;")
+  of '>': add(dest, "&gt;")
+  of '\"': add(dest, "&quot;")
+  else: add(dest, c)
+  
+proc XMLencode*(s: string): string = 
+  ## Encodes a value to be XML safe:
+  ## * ``"`` is replaced by ``&quot;``
+  ## * ``<`` is replaced by ``&lt;``
+  ## * ``>`` is replaced by ``&gt;``
+  ## * ``&`` is replaced by ``&amp;``
+  ## * every other character is carried over.
+  result = ""
+  for i in 0..len(s)-1: addXmlChar(result, s[i])
+
 type
   ECgi* = object of EIO  ## the exception that is raised, if a CGI error occurs
   TRequestMethod* = enum ## the used request method
+    methodNone,          ## no REQUEST_METHOD environment variable
     methodPost,          ## query uses the POST method
     methodGet            ## query uses the GET method
 
-proc cgiError(msg: string) {.noreturn.} = 
+proc cgiError*(msg: string) {.noreturn.} = 
+  ## raises an ECgi exception with message `msg`.
   var e: ref ECgi
   new(e)
   e.msg = msg
   raise e
 
 proc readData*(allowedMethods: set[TRequestMethod] = 
-               {methodPost, methodGet}): PStringTable = 
+               {methodNone, methodPost, methodGet}): PStringTable = 
   ## Read CGI data. If the client does not use a method listed in the
   ## `allowedMethods` set, an `ECgi` exception is raised.
   result = newStringTable()
@@ -103,7 +123,11 @@ proc readData*(allowedMethods: set[TRequestMethod] =
       cgiError("'REQUEST_METHOD' 'GET' is not supported")
     # read from the QUERY_STRING environment variable:
     enc = getenv("QUERY_STRING")
-  else: cgiError("'REQUEST_METHOD' must be 'POST' or 'GET'")
+  else: 
+    if methodNone in allowedMethods:
+      return result
+    else:
+      cgiError("'REQUEST_METHOD' must be 'POST' or 'GET'")
   
   # decode everything in one pass:
   var i = 0
@@ -129,7 +153,6 @@ proc readData*(allowedMethods: set[TRequestMethod] =
     setLen(value, 0) # reuse memory
     while true:
       case enc[i]
-      of '\0': return
       of '%': 
         var x = 0
         handleHexChar(enc[i+1], x)
@@ -137,12 +160,13 @@ proc readData*(allowedMethods: set[TRequestMethod] =
         inc(i, 2)
         add(value, chr(x))
       of '+': add(value, ' ')
-      of '=', '&': break
+      of '&', '\0': break
       else: add(value, enc[i])
       inc(i)
-    if enc[i] != '&': cgiError("'&' expected")
-    inc(i) # skip '='
     result[name] = value
+    if enc[i] == '&': inc(i)
+    elif enc[i] == '\0': break
+    else: cgiError("'&' expected")
 
 proc validateData*(data: PStringTable, validKeys: openarray[string]) = 
   ## validates data; raises `ECgi` if this fails. This checks that each variable
diff --git a/lib/base/dialogs.nim b/lib/base/dialogs.nim
index 144283a69..cf81a3d29 100644
--- a/lib/base/dialogs.nim
+++ b/lib/base/dialogs.nim
@@ -1,7 +1,7 @@
 #
 #
 #            Nimrod's Runtime Library
-#        (c) Copyright 2008 Andreas Rumpf
+#        (c) Copyright 2009 Andreas Rumpf
 #
 #    See the file "copying.txt", included in this
 #    distribution, for details about the copyright.
diff --git a/lib/base/gtk/gtk2.nim b/lib/base/gtk/gtk2.nim
index b20d5e635..d1e72e708 100644
--- a/lib/base/gtk/gtk2.nim
+++ b/lib/base/gtk/gtk2.nim
@@ -17267,5 +17267,5 @@ proc gtk_file_chooser_set_do_overwrite_confirmation*(chooser: PGtkFileChooser,
 proc gtk_nimrod_init*() =
   var
     cmdLine {.importc: "cmdLine".}: array [0..255, cstring]
-    cmdCount {.importc: "cmdCount".}: int
+    cmdCount {.importc: "cmdCount".}: cint
   gtk_init(addr(cmdLine), addr(cmdCount))
diff --git a/lib/base/odbcsql.nim b/lib/base/odbcsql.nim
index e6eda0106..8f8804092 100644
--- a/lib/base/odbcsql.nim
+++ b/lib/base/odbcsql.nim
@@ -226,8 +226,8 @@ const
   SQL_DRIVER_NOPROMPT* = 0
   SQL_DRIVER_COMPLETE* = 1
   SQL_DRIVER_PROMPT* = 2
-  SQL_DRIVER_COMPLETE_REQUIRED* = 3 # whether an attribute is a pointer or not 
-  SQL_IS_POINTER* = (- 4)
+  SQL_DRIVER_COMPLETE_REQUIRED* = 3 
+  SQL_IS_POINTER* = (- 4)  # whether an attribute is a pointer or not 
   SQL_IS_UINTEGER* = (- 5)
   SQL_IS_INTEGER* = (- 6)
   SQL_IS_USMALLINT* = (- 7)
@@ -737,7 +737,8 @@ proc SQLFreeStmt*(StatementHandle: TSqlHStmt, Option: TSqlUSmallInt): TSqlSmallI
 proc SQLColAttribute*(StatementHandle: TSqlHStmt, ColumnNumber: TSqlUSmallInt, 
                       FieldIdentifier: TSqlUSmallInt, 
                       CharacterAttribute: PSQLCHAR, BufferLength: TSqlSmallInt, 
-                      StringLength: PSQLSMALLINT, NumericAttribute: TSqlPointer): TSqlSmallInt{.
+                      StringLength: PSQLSMALLINT, 
+                      NumericAttribute: TSqlPointer): TSqlSmallInt{.
     dynlib: odbclib, importc.}
 proc SQLEndTran*(HandleType: TSqlSmallInt, Handle: TSqlHandle, 
                  CompletionType: TSqlSmallInt): TSqlSmallInt{.dynlib: odbclib, 
@@ -756,7 +757,8 @@ proc SQLSpecialColumns*(StatementHandle: TSqlHStmt, IdentifierType: TSqlUSmallIn
                         CatalogName: PSQLCHAR, NameLength1: TSqlSmallInt, 
                         SchemaName: PSQLCHAR, NameLength2: TSqlSmallInt, 
                         TableName: PSQLCHAR, NameLength3: TSqlSmallInt, 
-                        Scope: TSqlUSmallInt, Nullable: TSqlUSmallInt): TSqlSmallInt{.
+                        Scope: TSqlUSmallInt, 
+                        Nullable: TSqlUSmallInt): TSqlSmallInt{.
     dynlib: odbclib, importc.}
 proc SQLProcedures*(hstmt: TSqlHStmt, szTableQualifier: PSQLCHAR, 
                     cbTableQualifier: TSqlSmallInt, szTableOwner: PSQLCHAR, 
@@ -778,6 +780,7 @@ proc SQLStatistics*(hstmt: TSqlHStmt, CatalogName: PSQLCHAR,
                     NameLength1: TSqlSmallInt, SchemaName: PSQLCHAR, 
                     NameLength2: TSqlSmallInt, TableName: PSQLCHAR, 
                     NameLength3: TSqlSmallInt, Unique: TSqlUSmallInt, 
-                    Reserved: TSqlUSmallInt): TSqlSmallInt{.dynlib: odbclib, importc.}
+                    Reserved: TSqlUSmallInt): TSqlSmallInt {.
+                    dynlib: odbclib, importc.}
 
-{.pop.}
\ No newline at end of file
+{.pop.}
diff --git a/lib/base/opengl/gl.nim b/lib/base/opengl/gl.nim
index 4cc84cba1..79f09b544 100644
--- a/lib/base/opengl/gl.nim
+++ b/lib/base/opengl/gl.nim
@@ -1397,34 +1397,34 @@ proc glVertexPointer*(size: TGLint, atype: TGLenum, stride: TGLsizei,
                       pointer: Pointer){.dynlib: dllname, importc.}
 proc glViewport*(x, y: TGLint, width, height: TGLsizei){.dynlib: dllname, importc.}
 type
-  PFNGLARRAYELEMENTEXTPROC* = proc (i: TGLint)
-  PFNGLDRAWARRAYSEXTPROC* = proc (mode: TGLenum, first: TGLint, count: TGLsizei)
-  PFNGLVERTEXPOINTEREXTPROC* = proc (size: TGLint, atype: TGLenum, 
+  PFN_GLARRAY_ELEMENT_EXTPROC* = proc (i: TGLint)
+  PFN_GLDRAW_ARRAYS_EXTPROC* = proc (mode: TGLenum, first: TGLint, count: TGLsizei)
+  PFN_GLVERTEX_POINTER_EXTPROC* = proc (size: TGLint, atype: TGLenum, 
                                      stride, count: TGLsizei, pointer: Pointer)
-  PFNGLNORMALPOINTEREXTPROC* = proc (atype: TGLenum, stride, count: TGLsizei, 
+  PFN_GLNORMAL_POINTER_EXTPROC* = proc (atype: TGLenum, stride, count: TGLsizei, 
                                      pointer: Pointer)
-  PFNGLCOLORPOINTEREXTPROC* = proc (size: TGLint, atype: TGLenum, 
+  PFN_GLCOLOR_POINTER_EXTPROC* = proc (size: TGLint, atype: TGLenum, 
                                     stride, count: TGLsizei, pointer: Pointer)
-  PFNGLINDEXPOINTEREXTPROC* = proc (atype: TGLenum, stride, count: TGLsizei, 
+  PFN_GLINDEX_POINTER_EXTPROC* = proc (atype: TGLenum, stride, count: TGLsizei, 
                                     pointer: Pointer)
-  PFNGLTEXCOORDPOINTEREXTPROC* = proc (size: TGLint, atype: TGLenum, 
+  PFN_GLTEXCOORD_POINTER_EXTPROC* = proc (size: TGLint, atype: TGLenum, 
                                        stride, count: TGLsizei, pointer: Pointer)
-  PFNGLEDGEFLAGPOINTEREXTPROC* = proc (stride, count: TGLsizei, 
+  PFN_GLEDGEFLAG_POINTER_EXTPROC* = proc (stride, count: TGLsizei, 
                                        pointer: PGLboolean)
-  PFNGLGETPOINTERVEXTPROC* = proc (pname: TGLenum, params: Pointer)
-  PFNGLARRAYELEMENTARRAYEXTPROC* = proc (mode: TGLenum, count: TGLsizei, 
+  PFN_GLGET_POINTER_VEXT_PROC* = proc (pname: TGLenum, params: Pointer)
+  PFN_GLARRAY_ELEMENT_ARRAY_EXTPROC* = proc (mode: TGLenum, count: TGLsizei, 
       pi: Pointer)            # WIN_swap_hint
-  PFNGLADDSWAPHINTRECTWINPROC* = proc (x, y: TGLint, width, height: TGLsizei)
-  PFNGLCOLORTABLEEXTPROC* = proc (target, internalFormat: TGLenum, 
+  PFN_GLADDSWAPHINT_RECT_WINPROC* = proc (x, y: TGLint, width, height: TGLsizei)
+  PFN_GLCOLOR_TABLE_EXTPROC* = proc (target, internalFormat: TGLenum, 
                                   width: TGLsizei, format, atype: TGLenum, 
                                   data: Pointer)
-  PFNGLCOLORSUBTABLEEXTPROC* = proc (target: TGLenum, start, count: TGLsizei, 
+  PFN_GLCOLOR_SUBTABLE_EXTPROC* = proc (target: TGLenum, start, count: TGLsizei, 
                                      format, atype: TGLenum, data: Pointer)
-  PFNGLGETCOLORTABLEEXTPROC* = proc (target, format, atype: TGLenum, 
+  PFN_GLGETCOLOR_TABLE_EXTPROC* = proc (target, format, atype: TGLenum, 
                                      data: Pointer)
-  PFNGLGETCOLORTABLEPARAMETERIVEXTPROC* = proc (target, pname: TGLenum, 
+  PFN_GLGETCOLOR_TABLE_PARAMETER_IVEXTPROC* = proc (target, pname: TGLenum, 
       params: PGLint)
-  PFNGLGETCOLORTABLEPARAMETERFVEXTPROC* = proc (target, pname: TGLenum, 
+  PFN_GLGETCOLOR_TABLE_PARAMETER_FVEXTPROC* = proc (target, pname: TGLenum, 
       params: PGLfloat)
 
 {.pop.}
diff --git a/lib/base/pcre.nim b/lib/base/pcre.nim
index ebebd8bd7..4f4c27a09 100644
--- a/lib/base/pcre.nim
+++ b/lib/base/pcre.nim
@@ -7,18 +7,6 @@
 #    distribution, for details about the copyright.
 #
 
-# This file was created by a complicated procedure which saved me a considerable
-# amount of time: the pcre.h header was converted to modpcre.h by hand, so that
-# h2pas could handle it. Then I used pas2mor to generate a Nimrod binding.
-# Unfortunately, I had to fix some things later on; thus don't do all this
-# again! My manual changes will be lost!
-
-# Converted by Pas2mor v1.37
-#
-#  Automatically converted by H2Pas 0.99.16 from modpcre.h
-#  The following command line parameters were used:
-#    -D -c -l pcre.lib -T modpcre.h
-
 {.compile: "pcre_all.c" .}
 
 type
diff --git a/lib/base/regexprs.nim b/lib/base/regexprs.nim
index 9979035b8..e2aac3d17 100644
--- a/lib/base/regexprs.nim
+++ b/lib/base/regexprs.nim
@@ -1,7 +1,7 @@
 #
 #
 #            Nimrod's Runtime Library
-#        (c) Copyright 2006 Andreas Rumpf
+#        (c) Copyright 2009 Andreas Rumpf
 #
 #    See the file "copying.txt", included in this
 #    distribution, for details about the copyright.
@@ -35,7 +35,7 @@ const
 
 proc match*(s, pattern: string, matches: var openarray[string],
             start: int = 0): bool
-  ## returns ``true`` if ``s`` matches the ``pattern[start..]`` and
+  ## returns ``true`` if ``s[start..]`` matches the ``pattern`` and
   ## the captured substrings in the array ``matches``. If it does not
   ## match, nothing is written into ``matches`` and ``false`` is
   ## returned.
@@ -113,3 +113,42 @@ proc match(s, pattern: string, start: int = 0): bool =
 
 proc find(s, pattern: string, start: int = 0): bool =
   return matchOrFind(s, rawCompile(pattern, PCRE_MULTILINE), start) >= 0'i32
+
+template `=~` *(s, pattern: expr): expr = 
+  ## This calls ``match`` with an implicit declared ``matches`` array that 
+  ## can be used in the scope of the ``=~`` call: 
+  ## 
+  ## .. code-block:: nimrod
+  ##
+  ##   if line =~ r"\s*(\w+)\s*\=\s*(\w+)": 
+  ##     # matches a key=value pair:
+  ##     echo("Key: ", matches[1])
+  ##     echo("Value: ", matches[2])
+  ##   elif line =~ r"\s*(\#.*)":
+  ##     # matches a comment
+  ##     # note that the implicit ``matches`` array is different from the
+  ##     # ``matches`` array of the first branch
+  ##     echo("comment: ", matches[1])
+  ##   else:
+  ##     echo("syntax error")
+  ## 
+  var matches: array[0..maxSubPatterns-1, string]
+  match(s, pattern, matches)
+  
+
+const ## common regular expressions
+  reIdentifier* = r"\b[a-zA-Z_]+[a-zA-Z_0-9]*\b"  ## describes an identifier
+  reNatural* = r"\b\d+\b" ## describes a natural number
+  reInteger* = r"\b[-+]?\d+\b" ## describes an integer
+  reHex* = r"\b0[xX][0-9a-fA-F]+\b" ## describes a hexadecimal number
+  reBinary* = r"\b0[bB][01]+\b" ## describes a binary number (example: 0b11101)
+  reOctal* = r"\b0[oO][0-7]+\b" ## describes an octal number (example: 0o777)
+  reFloat* = r"\b[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?\b"
+    ## describes a floating point number
+  reEmail* = r"\b[a-zA-Z0-9!#$%&'*+/=?^_`{|}~\-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)" &
+             r"*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+(?:[a-zA-Z]{2}|com|org|" &
+             r"net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b"
+    ## describes a common email address
+  reURL* = r"\b(http(s)?|ftp|gopher|telnet|file|notes|ms\-help):" &
+           r"((//)|(\\\\))+[\w\d:#@%/;$()~_?\+\-\=\\\.\&]*\b"
+    ## describes an URL
diff --git a/lib/copying.txt b/lib/copying.txt
index 2657a09df..be182d65c 100644
--- a/lib/copying.txt
+++ b/lib/copying.txt
@@ -1,6 +1,6 @@
 =======================================================

                   The Nimrod Runtime Library

-             Copyright (C) 2004-2007  Andreas Rumpf

+             Copyright (C) 2004-2009  Andreas Rumpf

 =======================================================

 

 This is the file copying.txt, it applies to the Nimrod Run-Time Library

diff --git a/lib/debugger.nim b/lib/debugger.nim
index f5d526d70..73a1e4db2 100644
--- a/lib/debugger.nim
+++ b/lib/debugger.nim
@@ -348,9 +348,9 @@ proc dbgStackFrame(s: string, start: int, currFrame: PExtendedFrame) =
 proc CommandPrompt() =
   # if we return from this routine, user code executes again
   var
-    again: bool = True
+    again = True
     dbgFramePtr = framePtr # for going down and up the stack
-    dbgDown: int = 0 # how often we did go down
+    dbgDown = 0 # how often we did go down
 
   while again:
     write(stdout, "*** endb| >>")
@@ -478,10 +478,10 @@ proc dbgRegisterGlobal(name: cstring, address: pointer,
   inc(dbgGlobalData.f.len)
 
 proc endb(line: int) {.compilerproc.} =
-  # This proc is called before any Nimrod code line!
+  # This proc is called before every Nimrod code line!
   # Thus, it must have as few parameters as possible to keep the
   # code size small!
-  # check if we are at an enabled breakpoint or "in the mood"
+  # Check if we are at an enabled breakpoint or "in the mood"
   framePtr.line = line # this is done here for smaller code size!
   if dbgLineHook != nil: dbgLineHook()
   case dbgState
diff --git a/lib/dyncalls.nim b/lib/dyncalls.nim
index 6e74a9698..c46b8a931 100644
--- a/lib/dyncalls.nim
+++ b/lib/dyncalls.nim
@@ -58,7 +58,10 @@ when defined(posix):
   proc nimLoadLibrary(path: string): TLibHandle =
     result = dlopen(path, RTLD_NOW)
     if result == nil:
-      raise newException(EInvalidLibrary, "could not load: " & path)
+      writeToStdErr("could not load: ")
+      writeToStdErr(path)
+      writeToStdErr("\n")
+      #raise newException(EInvalidLibrary, "could not load: " & path)
 
   proc nimGetProcAddr(lib: TLibHandle, name: cstring): TProcAddr =
     result = dlsym(lib, name)
@@ -84,7 +87,10 @@ elif defined(windows) or defined(dos):
   proc nimLoadLibrary(path: string): TLibHandle =
     result = cast[TLibHandle](winLoadLibrary(path))
     if result == nil:
-      raise newException(EInvalidLibrary, "could not load: " & path)
+      writeToStdErr("could not load: ")
+      writeToStdErr(path)
+      writeToStdErr("\n")
+      #raise newException(EInvalidLibrary, "could not load: " & path)
 
   proc nimGetProcAddr(lib: TLibHandle, name: cstring): TProcAddr =
     result = GetProcAddress(cast[THINSTANCE](lib), name)
@@ -118,7 +124,10 @@ elif defined(mac):
         NSDestroyObjectFileImage(img)
         result = TLibHandle(modul)
         if result == nil:
-          raise newException(EInvalidLibrary, "could not load: " & path)
+          writeToStdErr("could not load: ")
+          writeToStdErr(path)
+          writeToStdErr("\n")          
+          #raise newException(EInvalidLibrary, "could not load: " & path)
 
   proc nimGetProcAddr(lib: TLibHandle, cname: string): TProcAddr =
     var
diff --git a/lib/excpt.nim b/lib/excpt.nim
index be307af09..38d34f3f4 100644
--- a/lib/excpt.nim
+++ b/lib/excpt.nim
@@ -1,7 +1,7 @@
 #
 #
 #            Nimrod's Runtime Library
-#        (c) Copyright 2008 Andreas Rumpf
+#        (c) Copyright 2009 Andreas Rumpf
 #
 #    See the file "copying.txt", included in this
 #    distribution, for details about the copyright.
diff --git a/lib/gc.nim b/lib/gc.nim
index e5e8072c5..aaef70c03 100644
--- a/lib/gc.nim
+++ b/lib/gc.nim
@@ -1,7 +1,7 @@
 #
 #
 #            Nimrod's Runtime Library
-#        (c) Copyright 2008 Andreas Rumpf
+#        (c) Copyright 2009 Andreas Rumpf
 #
 #    See the file "copying.txt", included in this
 #    distribution, for details about the copyright.
@@ -15,37 +15,10 @@
 # * generational
 
 # Future Improvements:
-# * Both dlmalloc and TLSF lack zero-overhead object allocation. Thus, for
-#   small objects we should use our own allocator.
 # * Support for multi-threading. However, locks for the reference counting
 #   might turn out to be too slow.
 
 # ---------------------------------------------------------------------------
-# Interface to TLSF:
-const
-  useTLSF = false # benchmarking showed that *dlmalloc* is faster than *TLSF*
-
-when useTLSF:
-  {.compile: "tlsf.c".}
-
-  proc tlsfUsed: int {.importc: "TLSF_GET_USED_SIZE", noconv.}
-  proc tlsfMax: int {.importc: "TLSF_GET_MAX_SIZE", noconv.}
-
-  proc tlsf_malloc(size: int): pointer {.importc, noconv.}
-  proc tlsf_free(p: pointer) {.importc, noconv.}
-  proc tlsf_realloc(p: pointer, size: int): pointer {.importc, noconv.}
-else:
-  # use DL malloc
-  {.compile: "dlmalloc.c".}
-  proc tlsfUsed: int {.importc: "dlmalloc_footprint", noconv.}
-  proc tlsfMax: int {.importc: "dlmalloc_max_footprint", noconv.}
-
-  proc tlsf_malloc(size: int): pointer {.importc: "dlmalloc", noconv.}
-  proc tlsf_free(p: pointer) {.importc: "dlfree", noconv.}
-  proc tlsf_realloc(p: pointer, size: int): pointer {.
-    importc: "dlrealloc", noconv.}
-
-# ---------------------------------------------------------------------------
 
 proc getOccupiedMem(): int = return tlsfUsed()
 proc getFreeMem(): int = return tlsfMax() - tlsfUsed()
@@ -54,38 +27,13 @@ proc getTotalMem(): int = return tlsfMax()
 # ---------------------------------------------------------------------------
 
 const
-  debugGC = false # we wish to debug the GC...
-  logGC = false
-  traceGC = false # extensive debugging
-  reallyDealloc = true # for debugging purposes this can be set to false
-  cycleGC = true # (de)activate the cycle GC
-  stressGC = debugGC
-
-# Guess the page size of the system; if it is the
-# wrong value, performance may be worse (this is not
-# for sure though), but GC still works; must be a power of two!
-const
-  PageShift = if sizeof(pointer) == 4: 12 else: 13
-  PageSize = 1 shl PageShift # on 32 bit systems 4096
   CycleIncrease = 2 # is a multiplicative increase
-
   InitialCycleThreshold = 4*1024*1024 # X MB because cycle checking is slow
   ZctThreshold = 256  # we collect garbage if the ZCT's size
                       # reaches this threshold
                       # this seems to be a good value
 
 const
-  MemAlignment = 8 # BUGFIX: on AMD64, dlmalloc aligns at 8 byte boundary
-  BitsPerUnit = sizeof(int)*8
-    # a "unit" is a word, i.e. 4 bytes
-    # on a 32 bit system; I do not use the term "word" because under 32-bit
-    # Windows it is sometimes only 16 bits
-
-  BitsPerPage = PageSize div MemAlignment
-  UnitsPerPage = BitsPerPage div BitsPerUnit
-    # how many units do we need to describe a page:
-    # on 32 bit systems this is only 16 (!)
-
   rcIncrement = 0b1000 # so that lowest 3 bits are not touched
   # NOTE: Most colors are currently unused
   rcBlack = 0b000 # cell is colored black; in use or free
@@ -101,40 +49,9 @@ type
   TWalkOp = enum
     waZctDecRef, waPush, waCycleDecRef
 
-  TCell {.pure.} = object
-    refcount: int  # the refcount and some flags
-    typ: PNimType
-    when debugGC:
-      filename: cstring
-      line: int
-
-  PCell = ptr TCell
   TFinalizer {.compilerproc.} = proc (self: pointer)
     # A ref type can have a finalizer that is called before the object's
     # storage is freed.
-  PPointer = ptr pointer
-  TByteArray = array[0..1000_0000, byte]
-  PByte = ptr TByteArray
-  PString = ptr string
-
-  PPageDesc = ptr TPageDesc
-  TBitIndex = range[0..UnitsPerPage-1]
-  TPageDesc {.final, pure.} = object
-    next: PPageDesc # all nodes are connected with this pointer
-    key: TAddress   # start address at bit 0
-    bits: array[TBitIndex, int] # a bit vector
-
-  PPageDescArray = ptr array[0..1000_000, PPageDesc]
-  TCellSet {.final, pure.} = object
-    counter, max: int
-    head: PPageDesc
-    data: PPageDescArray
-
-  PCellArray = ptr array[0..100_000_000, PCell]
-  TCellSeq {.final, pure.} = object
-    len, cap: int
-    d: PCellArray
-
   TGcHeap {.final, pure.} = object # this contains the zero count and
                                    # non-zero count table
     mask: TAddress           # mask for fast pointer detection
@@ -152,7 +69,6 @@ type
     tempStack: TCellSeq      # temporary stack for recursion elimination
 
 var
-  gOutOfMem: ref EOutOfMemory
   stackBottom: pointer
   gch: TGcHeap
   cycleThreshold: int = InitialCycleThreshold
@@ -171,12 +87,10 @@ proc unsureAsgnRef(dest: ppointer, src: pointer) {.compilerproc.}
 proc newObj(typ: PNimType, size: int): pointer {.compilerproc.}
 proc newSeq(typ: PNimType, len: int): pointer {.compilerproc.}
 
-proc raiseOutOfMem() {.noreturn.} =
-  if gOutOfMem == nil:
-    writeToStdErr("out of memory; cannot even throw an exception")
-    quit(1)
-  gOutOfMem.msg = "out of memory"
-  raise gOutOfMem
+proc addZCT(s: var TCellSeq, c: PCell) {.noinline.} =
+  if (c.refcount and colorMask) != rcZct:
+    c.refcount = c.refcount and not colorMask or rcZct
+    add(s, c)
 
 proc cellToUsr(cell: PCell): pointer {.inline.} =
   # convert object (=pointer to refcount) to pointer to userdata
@@ -198,11 +112,6 @@ proc internRefcount(p: pointer): int {.exportc: "getRefcount".} =
   if result > 0: result = result shr rcShift
   else: result = 0
 
-proc gcAlloc(size: int): pointer =
-  result = tlsf_malloc(size)
-  if result == nil: raiseOutOfMem()
-  zeroMem(result, size)
-
 proc GC_disable() = inc(recGcLock)
 proc GC_enable() =
   if recGcLock > 0: dec(recGcLock)
@@ -221,160 +130,10 @@ proc GC_disableMarkAndSweep() =
   cycleThreshold = high(cycleThreshold)-1
   # set to the max value to suppress the cycle detector
 
-proc nextTry(h, maxHash: int): int {.inline.} =
-  result = ((5*h) + 1) and maxHash
-  # For any initial h in range(maxHash), repeating that maxHash times
-  # generates each int in range(maxHash) exactly once (see any text on
-  # random-number generation for proof).
-
 # this that has to equals zero, otherwise we have to round up UnitsPerPage:
 when BitsPerPage mod BitsPerUnit != 0:
   {.error: "(BitsPerPage mod BitsPerUnit) should be zero!".}
 
-# ------------------- cell set handling ---------------------------------------
-
-proc inOperator(s: TCellSeq, c: PCell): bool {.inline.} =
-  for i in 0 .. s.len-1:
-    if s.d[i] == c: return True
-  return False
-
-proc add(s: var TCellSeq, c: PCell) {.inline.} =
-  if s.len >= s.cap:
-    s.cap = s.cap * 3 div 2
-    var d = cast[PCellArray](tlsf_malloc(s.cap * sizeof(PCell)))
-    if d == nil: raiseOutOfMem()
-    copyMem(d, s.d, s.len * sizeof(PCell))
-    tlsf_free(s.d)
-    s.d = d
-    # BUGFIX: realloc failes on AMD64, sigh...
-    #s.d = cast[PCellArray](tlsf_realloc(s.d, s.cap * sizeof(PCell)))
-    #if s.d == nil: raiseOutOfMem()
-  s.d[s.len] = c
-  inc(s.len)
-
-proc addZCT(s: var TCellSeq, c: PCell) =
-  if (c.refcount and colorMask) != rcZct:
-    c.refcount = c.refcount and not colorMask or rcZct
-    add(s, c)
-
-proc init(s: var TCellSeq, cap: int = 1024) =
-  s.len = 0
-  s.cap = cap
-  s.d = cast[PCellArray](gcAlloc(cap * sizeof(PCell)))
-
-const
-  InitCellSetSize = 1024 # must be a power of two!
-
-proc CellSetInit(s: var TCellSet) =
-  s.data = cast[PPageDescArray](gcAlloc(InitCellSetSize * sizeof(PPageDesc)))
-  s.max = InitCellSetSize-1
-  s.counter = 0
-  s.head = nil
-
-proc CellSetDeinit(s: var TCellSet) =
-  var it = s.head
-  while it != nil:
-    var n = it.next
-    tlsf_free(it)
-    it = n
-  s.head = nil # play it safe here
-  tlsf_free(s.data)
-  s.data = nil
-  s.counter = 0
-  
-proc CellSetGet(t: TCellSet, key: TAddress): PPageDesc =
-  var h = cast[int](key) and t.max
-  while t.data[h] != nil:
-    if t.data[h].key == key: return t.data[h]
-    h = nextTry(h, t.max)
-  return nil
-
-proc CellSetRawInsert(t: TCellSet, data: PPageDescArray,
-                      desc: PPageDesc) =
-  var h = cast[int](desc.key) and t.max
-  while data[h] != nil:
-    assert(data[h] != desc)
-    h = nextTry(h, t.max)
-  assert(data[h] == nil)
-  data[h] = desc
-
-proc CellSetEnlarge(t: var TCellSet) =
-  var oldMax = t.max
-  t.max = ((t.max+1)*2)-1
-  var n = cast[PPageDescArray](gcAlloc((t.max + 1) * sizeof(PPageDesc)))
-  for i in 0 .. oldmax:
-    if t.data[i] != nil:
-      CellSetRawInsert(t, n, t.data[i])
-  tlsf_free(t.data)
-  t.data = n
-
-proc CellSetPut(t: var TCellSet, key: TAddress): PPageDesc =
-  var h = cast[int](key) and t.max
-  while true:
-    var x = t.data[h]
-    if x == nil: break
-    if x.key == key: return x
-    h = nextTry(h, t.max)
-
-  if ((t.max+1)*2 < t.counter*3) or ((t.max+1)-t.counter < 4):
-    CellSetEnlarge(t)
-  inc(t.counter)
-  h = cast[int](key) and t.max
-  while t.data[h] != nil: h = nextTry(h, t.max)
-  assert(t.data[h] == nil)
-  # the new page descriptor goes into result
-  result = cast[PPageDesc](gcAlloc(sizeof(TPageDesc)))
-  result.next = t.head
-  result.key = key
-  t.head = result
-  t.data[h] = result
-
-# ---------- slightly higher level procs --------------------------------------
-
-proc contains(s: TCellSet, cell: PCell): bool =
-  var u = cast[TAddress](cell)
-  var t = CellSetGet(s, u shr PageShift)
-  if t != nil:
-    u = (u %% PageSize) /% MemAlignment
-    result = (t.bits[u /% BitsPerUnit] and (1 shl (u %% BitsPerUnit))) != 0
-  else:
-    result = false
-
-proc incl(s: var TCellSet, cell: PCell) =
-  var u = cast[TAddress](cell)
-  var t = CellSetPut(s, u shr PageShift)
-  u = (u %% PageSize) /% MemAlignment
-  t.bits[u /% BitsPerUnit] = t.bits[u /% BitsPerUnit] or
-    (1 shl (u %% BitsPerUnit))
-
-proc excl(s: var TCellSet, cell: PCell) =
-  var u = cast[TAddress](cell)
-  var t = CellSetGet(s, u shr PageShift)
-  if t != nil:
-    u = (u %% PageSize) /% MemAlignment
-    t.bits[u /% BitsPerUnit] = (t.bits[u /% BitsPerUnit] and
-                                  not (1 shl (u %% BitsPerUnit)))
-
-iterator elements(t: TCellSet): PCell {.inline.} =
-  # while traversing it is forbidden to add pointers to the tree!
-  var r = t.head
-  while r != nil:
-    var i = 0
-    while i <= high(r.bits):
-      var w = r.bits[i] # taking a copy of r.bits[i] here is correct, because
-      # modifying operations are not allowed during traversation
-      var j = 0
-      while w != 0:         # test all remaining bits for zero
-        if (w and 1) != 0:  # the bit is set!
-          yield cast[PCell]((r.key shl PageShift) or # +%
-                              (i*%BitsPerUnit+%j) *% MemAlignment)
-        inc(j)
-        w = w shr 1
-      inc(i)
-    r = r.next
-
-# --------------- end of Cellset routines -------------------------------------
-
 when debugGC:
   proc writeCell(msg: CString, c: PCell) =
     var kind = -1
@@ -450,7 +209,6 @@ proc IsOnStack(p: pointer): bool {.noinline.}
 proc forAllChildren(cell: PCell, op: TWalkOp)
 proc doOperation(p: pointer, op: TWalkOp)
 proc forAllChildrenAux(dest: Pointer, mt: PNimType, op: TWalkOp)
-proc reprAny(p: pointer, typ: PNimType): string {.compilerproc.}
 # we need the prototype here for debugging purposes
 
 proc prepareDealloc(cell: PCell) =
@@ -479,13 +237,13 @@ proc decRef(c: PCell) {.inline.} =
   if c.refcount <% rcIncrement:
     addZCT(gch.zct, c)
   elif canBeCycleRoot(c):
-    possibleRoot(gch, c) 
+    incl(gch.cycleRoots, c) 
 
 proc incRef(c: PCell) {.inline.} = 
   c.refcount = c.refcount +% rcIncrement
   if canBeCycleRoot(c):
     # OPT: the code generator should special case this
-    possibleRoot(gch, c)
+    incl(gch.cycleRoots, c)
 
 proc nimGCref(p: pointer) {.compilerproc, inline.} = incRef(usrToCell(p))
 proc nimGCunref(p: pointer) {.compilerproc, inline.} = decRef(usrToCell(p))
@@ -534,26 +292,6 @@ proc initGC() =
   gch.mask = 0
   new(gOutOfMem) # reserve space for the EOutOfMemory exception here!
 
-proc getDiscriminant(aa: Pointer, n: ptr TNimNode): int =
-  assert(n.kind == nkCase)
-  var d: int
-  var a = cast[TAddress](aa)
-  case n.typ.size
-  of 1: d = ze(cast[ptr int8](a +% n.offset)^)
-  of 2: d = ze(cast[ptr int16](a +% n.offset)^)
-  of 4: d = int(cast[ptr int32](a +% n.offset)^)
-  else: assert(false)
-  return d
-
-proc selectBranch(aa: Pointer, n: ptr TNimNode): ptr TNimNode =
-  var discr = getDiscriminant(aa, n)
-  if discr <% n.len:
-    result = n.sons[discr]
-    if result == nil: result = n.sons[n.len]
-    # n.sons[n.len] contains the ``else`` part (but may be nil)
-  else:
-    result = n.sons[n.len]
-
 proc forAllSlotsAux(dest: pointer, n: ptr TNimNode, op: TWalkOp) =
   var d = cast[TAddress](dest)
   case n.kind
@@ -749,7 +487,7 @@ proc collectCycles(gch: var TGcHeap) =
   CellSetDeinit(gch.cycleRoots)
   gch.cycleRoots = newRoots
 
-proc gcMark(p: pointer) = # {.fastcall.} =
+proc gcMark(p: pointer) {.noinline.} =
   # the addresses are not as objects on the stack, so turn them to objects:
   var cell = usrToCell(p)
   var c = cast[TAddress](cell)
@@ -759,7 +497,7 @@ proc gcMark(p: pointer) = # {.fastcall.} =
     incl(gch.stackCells, cell)  # yes: mark it
 
 # ----------------- stack management --------------------------------------
-#  inspired from Smart Eiffel (c)
+#  inspired from Smart Eiffel
 
 proc stackSize(): int {.noinline.} =
   var stackTop: array[0..1, pointer]
@@ -885,7 +623,7 @@ else:
       # in a platform independant way
 
   proc markStackAndRegisters(gch: var TGcHeap) {.noinline, cdecl.} =
-    when true:
+    when false:
       # new version: several C compilers are too smart here
       var
         max = cast[TAddress](stackBottom)
@@ -910,7 +648,7 @@ else:
         max = stackBottom
         registers: C_JmpBuf # The jmp_buf buffer is in the C stack.
         sp: PPointer        # Used to traverse the stack and registers assuming
-                            # that `setjmp' will save registers in the C stack.
+                            # that 'setjmp' will save registers in the C stack.
       if c_setjmp(registers) == 0'i32: # To fill the C stack with registers.
         sp = cast[ppointer](addr(registers))
         while sp <= max:
@@ -937,7 +675,7 @@ proc updateZCT() =
       dec(L)
       d[j] = d[L]
       c.refcount = c.refcount and not colorMask
-      # we have a new cell at position i, so don't increment i
+      # we have a new cell at position j, so don't increment j
     else:
       inc(j)
   gch.zct.len = L
diff --git a/lib/macros.nim b/lib/macros.nim
index f2783b637..2c71f31c8 100644
--- a/lib/macros.nim
+++ b/lib/macros.nim
@@ -58,12 +58,12 @@ type
     nnkTypeDef, nnkYieldStmt, nnkTryStmt, nnkFinally, 
     nnkRaiseStmt, nnkReturnStmt, nnkBreakStmt, nnkContinueStmt, 
     nnkBlockStmt, nnkDiscardStmt, nnkStmtList, nnkImportStmt, 
-    nnkFromStmt, nnkImportAs, nnkIncludeStmt, nnkAccessStmt, 
-    nnkCommentStmt, nnkStmtListExpr, nnkBlockExpr, nnkStmtListType, 
-    nnkBlockType, nnkVm, nnkTypeOfExpr, nnkObjectTy, 
-    nnkTupleTy, nnkRecList, nnkRecCase, nnkRecWhen, 
-    nnkRefTy, nnkPtrTy, nnkVarTy, nnkProcTy, 
-    nnkEnumTy, nnkEnumFieldDef, nnkReturnToken
+    nnkFromStmt, nnkImportAs, nnkIncludeStmt, nnkCommentStmt, 
+    nnkStmtListExpr, nnkBlockExpr, nnkStmtListType, nnkBlockType, 
+    nnkVm, nnkTypeOfExpr, nnkObjectTy, nnkTupleTy, 
+    nnkRecList, nnkRecCase, nnkRecWhen, nnkRefTy, 
+    nnkPtrTy, nnkVarTy, nnkProcTy, nnkEnumTy, 
+    nnkEnumFieldDef, nnkReturnToken
   TNimNodeKinds* = set[TNimrodNodeKind]
   TNimrodTypeKind* = enum
     ntyNone, ntyBool, ntyChar, ntyEmpty, 
@@ -86,12 +86,24 @@ type
 #[[[end]]]

 

 type

+  TNimrodIdent = object of TObject

+    ## represents a Nimrod identifier in the AST

+

   TNimrodNode {.final.} = object   # hidden

   TNimrodSymbol {.final.} = object # hidden

   TNimrodType {.final.} = object   # hidden

+  

   PNimrodType* {.compilerproc.} = ref TNimrodType

+    ## represents a Nimrod type in the compiler; currently this is not very

+    ## useful as there is no API to deal with Nimrod types.

+  

   PNimrodSymbol* {.compilerproc.} = ref TNimrodSymbol

+    ## represents a Nimrod *symbol* in the compiler; a *symbol* is a looked-up

+    ## *ident*.

+  

   PNimrodNode* {.compilerproc.} = ref TNimrodNode

+    ## represents a Nimrod AST node. Macros operate on this type.

+    

   expr* = PNimrodNode

   stmt* = PNimrodNode

 

@@ -100,23 +112,35 @@ type
 # its father. How to do this without back references?

 

 proc `[]`* (n: PNimrodNode, i: int): PNimrodNode {.magic: "NChild".}

+  ## get `n`'s `i`'th child.

+

 proc `[]=`* (n: PNimrodNode, i: int, child: PNimrodNode) {.magic: "NSetChild".}

-  ## provide access to `n`'s children

+  ## set `n`'s `i`'th child to `child`.

 

-type

-  TNimrodIdent = object of TObject

+proc `!` *(s: string): TNimrodIdent {.magic: "StrToIdent".}
+  ## constructs an identifier from the string `s`

 

-converter StrToIdent*(s: string): TNimrodIdent {.magic: "StrToIdent".}

 proc `$`*(i: TNimrodIdent): string {.magic: "IdentToStr".}

+  ## converts a Nimrod identifier to a string

+

 proc `==`* (a, b: TNimrodIdent): bool {.magic: "EqIdent".}

+  ## compares two Nimrod identifiers

 

 proc len*(n: PNimrodNode): int {.magic: "NLen".}

+  ## returns the number of children of `n`.

 

-## returns the number of children that a node has

 proc add*(father, child: PNimrodNode) {.magic: "NAdd".}

-proc add*(father: PNimrodNode, child: openArray[PNimrodNode]) {.magic: "NAddMultiple".}

+  ## adds the `child` to the `father` node

+

+proc add*(father: PNimrodNode, children: openArray[PNimrodNode]) {.

+  magic: "NAddMultiple".}

+  ## adds each `children` to the `father` node

+

 proc del*(father: PNimrodNode, idx = 0, n = 1) {.magic: "NDel".}

+  ## deletes `n` children of `father` starting at index `idx`. 

+

 proc kind*(n: PNimrodNode): TNimrodNodeKind {.magic: "NKind".}

+  ## returns the `kind` of the node `n`.

 

 proc intVal*(n: PNimrodNode): biggestInt {.magic: "NIntVal".}

 proc floatVal*(n: PNimrodNode): biggestFloat {.magic: "NFloatVal".}

@@ -133,43 +157,81 @@ proc `typ=`*(n: PNimrodNode, typ: PNimrodType) {.magic: "NSetType".}
 proc `strVal=`*(n: PNimrodNode, val: string) {.magic: "NSetStrVal".}

 

 proc newNimNode*(kind: TNimrodNodeKind,

-                 n: PNimrodNode=nil): PNimrodNode {.magic: "NNewNimNode".}

+                 n: PNimrodNode=nil): PNimrodNode {.magic: "NNewNimNode".}
+
 proc copyNimNode*(n: PNimrodNode): PNimrodNode {.magic: "NCopyNimNode".}

 proc copyNimTree*(n: PNimrodNode): PNimrodNode {.magic: "NCopyNimTree".}

 

 proc error*(msg: string) {.magic: "NError".}

+  ## writes an error message at compile time

+

 proc warning*(msg: string) {.magic: "NWarning".}

+  ## writes a warning message at compile time

+

 proc hint*(msg: string) {.magic: "NHint".}

+  ## writes a hint message at compile time

 

 proc newStrLitNode*(s: string): PNimrodNode {.compileTime.} =

+  ## creates a string literal node from `s`

   result = newNimNode(nnkStrLit)

   result.strVal = s

 

 proc newIntLitNode*(i: biggestInt): PNimrodNode {.compileTime.} =

+  ## creates a int literal node from `i`

   result = newNimNode(nnkIntLit)

   result.intVal = i

 

-proc newIntLitNode*(f: biggestFloat): PNimrodNode {.compileTime.} =

+proc newFloatLitNode*(f: biggestFloat): PNimrodNode {.compileTime.} =

+  ## creates a float literal node from `f`

   result = newNimNode(nnkFloatLit)

   result.floatVal = f

 

 proc newIdentNode*(i: TNimrodIdent): PNimrodNode {.compileTime.} =

+  ## creates an identifier node from `i`

   result = newNimNode(nnkIdent)

   result.ident = i

+
+proc newIdentNode*(i: string): PNimrodNode {.compileTime.} =

+  ## creates an identifier node from `i`

+  result = newNimNode(nnkIdent)

+  result.ident = !i
 

 proc toStrLit*(n: PNimrodNode): PNimrodNode {.compileTime.} =

+  ## converts the AST `n` to the concrete Nimrod code and wraps that 

+  ## in a string literal node

   return newStrLitNode(repr(n))

 

 proc expectKind*(n: PNimrodNode, k: TNimrodNodeKind) {.compileTime.} =

+  ## checks that `n` is of kind `k`. If this is not the case,

+  ## compilation aborts with an error message. This is useful for writing

+  ## macros that check the AST that is passed to them.

   if n.kind != k: error("macro expects a node of kind: " & repr(k))

 

 proc expectMinLen*(n: PNimrodNode, min: int) {.compileTime.} =

+  ## checks that `n` has at least `min` children. If this is not the case,

+  ## compilation aborts with an error message. This is useful for writing

+  ## macros that check its number of arguments. 

   if n.len < min: error("macro expects a node with " & $min & " children")

 

+proc expectLen*(n: PNimrodNode, len: int) {.compileTime.} =

+  ## checks that `n` has exactly `len` children. If this is not the case,

+  ## compilation aborts with an error message. This is useful for writing

+  ## macros that check its number of arguments. 

+  if n.len != len: error("macro expects a node with " & $len & " children")

+

 proc newCall*(theProc: TNimrodIdent,

               args: openArray[PNimrodNode]): PNimrodNode {.compileTime.} =

   ## produces a new call node. `theProc` is the proc that is called with

   ## the arguments ``args[0..]``.

   result = newNimNode(nnkCall)

   result.add(newIdentNode(theProc))

+  result.add(args)
+  

+proc newCall*(theProc: string,

+              args: openArray[PNimrodNode]): PNimrodNode {.compileTime.} =

+  ## produces a new call node. `theProc` is the proc that is called with

+  ## the arguments ``args[0..]``.

+  result = newNimNode(nnkCall)

+  result.add(newIdentNode(theProc))

   result.add(args)

+
diff --git a/lib/math.nim b/lib/math.nim
index 57c1c7e3d..31783efce 100644
--- a/lib/math.nim
+++ b/lib/math.nim
@@ -51,6 +51,20 @@ proc classify*(x: float): TFloatClass =
   # XXX: fcSubnormal is not detected!
 
 
+proc binom*(n, k: int): int {.noSideEffect.} = 
+  ## computes the binomial coefficient
+  if k <= 0: return 1
+  if 2*k > n: return binom(n, n-k)
+  result = n
+  for i in countup(2, k):
+    result = (result * (n + 1 - i)) div i
+    
+proc fac*(n: int): int {.noSideEffect.} = 
+  ## computes the faculty function
+  result = 1
+  for i in countup(2, n):
+    result = result * i
+
 proc isPowerOfTwo*(x: int): bool {.noSideEffect.} =
   ## returns true, if x is a power of two, false otherwise.
   ## Negative numbers are not a power of two.
@@ -74,6 +88,25 @@ proc countBits*(n: int32): int {.noSideEffect.}
 
 include cntbits
 
+proc sum*[T](x: openarray[T]): T {.noSideEffect.} = 
+  ## computes the sum of the elements in `x`. 
+  ## If `x` is empty, 0 is returned.
+  for i in items(x): result = result + i
+
+proc mean*(x: openarray[float]): float {.noSideEffect.} = 
+  ## computes the mean of the elements in `x`. 
+  ## If `x` is empty, NaN is returned.
+  result = sum(x) / toFloat(len(x))
+
+proc variance*(x: openarray[float]): float {.noSideEffect.} = 
+  ## computes the mean of the elements in `x`. 
+  ## If `x` is empty, NaN is returned.
+  result = 0.0
+  var m = mean(x)
+  for i in 0 .. high(x):
+    var diff = x[i] - m
+    result = result + diff*diff
+  result = result / toFloat(len(x))
 
 when not defined(ECMAScript):
   proc random*(max: int): int
diff --git a/lib/memman.nim b/lib/memman.nim
index e8ebcd61c..249607e2d 100644
--- a/lib/memman.nim
+++ b/lib/memman.nim
@@ -360,7 +360,7 @@ proc findSuitableBlock(t: var TLSF, fl, sl: var int): Pbhdr =
 
 proc extractBlockHdr(b: Pbhdr, t: var TLSF, fl, sl: int) {.inline.} = 
   t.matrix[fl][sl] = b.freePtr.next
-  if t.matrix[fl][sl] != 0:
+  if t.matrix[fl][sl] != nil:
     t.matrix[fl][sl].freePtr.prev = nil
   else:
     clear_bit(sl, t.slBitmap[fl])
diff --git a/lib/nimbase.h b/lib/nimbase.h
index 378b66278..5041edf63 100644
--- a/lib/nimbase.h
+++ b/lib/nimbase.h
@@ -1,12 +1,24 @@
 /*
 
             Nimrod's Runtime Library
-        (c) Copyright 2008 Andreas Rumpf
+        (c) Copyright 2009 Andreas Rumpf
 
     See the file "copying.txt", included in this
     distribution, for details about the copyright.
 */
 
+/* compiler symbols:
+__BORLANDC__
+_MSC_VER
+__WATCOMC__
+__LCC__
+__GNUC__
+__DMC__
+__POCC__
+__TINYC__
+*/
+
+
 #ifndef NIMBASE_H
 #define NIMBASE_H
 
@@ -239,17 +251,6 @@ static unsigned long nimInf[2]={0xffffffff, 0x7fffffff};
 #  define INF (*(double*) nimInf)
 #endif */
 
-/* compiler symbols:
-__BORLANDC__
-_MSC_VER
-__WATCOMC__
-__LCC__
-__GNUC__
-__DMC__
-__POCC__
-__TINYC__
-*/
-
 /* C99 compiler? */
 #if (defined(__STD_VERSION__) && (__STD_VERSION__ >= 199901))
 #  define HAVE_STDINT_H
diff --git a/lib/os.nim b/lib/os.nim
index bffc6014c..b69002715 100644
--- a/lib/os.nim
+++ b/lib/os.nim
@@ -1,7 +1,7 @@
 #
 #
 #            Nimrod's Runtime Library
-#        (c) Copyright 2008 Andreas Rumpf
+#        (c) Copyright 2009 Andreas Rumpf
 #
 #    See the file "copying.txt", included in this
 #    distribution, for details about the copyright.
@@ -178,12 +178,14 @@ proc ExistsFile*(filename: string): bool
 proc JoinPath*(head, tail: string): string {.noSideEffect.}
   ## Joins two directory names to one.
   ##
-  ## For example on Unix::
+  ## For example on Unix:
   ##
+  ## ..code-block:: nimrod
   ##   JoinPath("usr", "lib")
   ##
-  ## results in::
+  ## results in:
   ##
+  ## ..code-block:: nimrod
   ##   "usr/lib"
   ##
   ## If head is the empty string, tail is returned.
@@ -312,7 +314,7 @@ proc createDir*(dir: string)
   ##
   ## The directory may contain several
   ## subdirectories that do not exist yet. The full path is created. If this
-  ## fails, `EOS` is raised. It does NOT fail if the path already exists
+  ## fails, `EOS` is raised. It does **not** fail if the path already exists
   ## because for most usages this does not indicate an error.
 
 proc existsDir*(dir: string): bool
@@ -650,8 +652,7 @@ proc searchExtPos(s: string): int =
       break # do not skip over path
 
 proc SplitFilename(filename: string, name, extension: var string) =
-  var
-    extPos = searchExtPos(filename)
+  var extPos = searchExtPos(filename)
   if extPos >= 0:
     name = copy(filename, 0, extPos-1)
     extension = copy(filename, extPos)
@@ -664,14 +665,12 @@ proc normExt(ext: string): string =
   else: result = extSep & ext
 
 proc ChangeFileExt(filename, ext: string): string =
-  var
-    extPos = searchExtPos(filename)
+  var extPos = searchExtPos(filename)
   if extPos < 0: result = filename & normExt(ext)
   else: result = copy(filename, 0, extPos-1) & normExt(ext)
 
 proc AppendFileExt(filename, ext: string): string =
-  var
-    extPos = searchExtPos(filename)
+  var extPos = searchExtPos(filename)
   if extPos < 0: result = filename & normExt(ext)
   else: result = filename #make a string copy here
 
@@ -850,12 +849,12 @@ proc rawCreateDir(dir: string) =
       OSError()
 
 proc createDir(dir: string) =
-  for i in 0.. dir.len-1:
+  for i in 1.. dir.len-1:
     if dir[i] in {dirsep, altsep}: rawCreateDir(copy(dir, 0, i-1))
   rawCreateDir(dir)
 
 proc executeShellCommand(command: string): int =
-  return csystem(command)
+  result = csystem(command)
 
 var
   envComputed: bool = false
@@ -892,8 +891,7 @@ else:
   proc getEnvVarsC() =
     # retrieves the variables of char** env of C's main proc
     if not envComputed:
-      var
-        i: int = 0
+      var i = 0
       while True:
         if gEnv[i] == nil: break
         add environment, $gEnv[i]
@@ -904,13 +902,13 @@ proc findEnvVar(key: string): int =
   getEnvVarsC()
   var temp = key & '='
   for i in 0..high(environment):
-    if findSubStr(temp, environment[i]) == 0: return i
+    if startsWith(environment[i], temp): return i
   return -1
 
 proc getEnv(key: string): string =
   var i = findEnvVar(key)
   if i >= 0:
-    return copy(environment[i], findSubStr("=", environment[i])+1)
+    return copy(environment[i], find(environment[i], '=')+1)
   else:
     var env = cgetenv(key)
     if env == nil: return ""
@@ -925,7 +923,7 @@ iterator iterOverEnvironment*(): tuple[key, value: string] =
   ## tuple is the name of the current variable stored, in the second its value.
   getEnvVarsC()
   for i in 0..high(environment):
-    var p = findSubStr("=", environment[i])
+    var p = find(environment[i], '=')
     yield (copy(environment[i], 0, p-1), copy(environment[i], p+1))
 
 proc putEnv(key, val: string) =
@@ -1140,7 +1138,7 @@ else:
   proc GetConfigDir(): string = return getEnv("HOME") & "/.config/"
 
   var
-    cmdCount {.importc: "cmdCount".}: int
+    cmdCount {.importc: "cmdCount".}: cint
     cmdLine {.importc: "cmdLine".}: cstringArray
 
   proc paramStr(i: int): string =
diff --git a/lib/parsecfg.nim b/lib/parsecfg.nim
index 2508c8bd6..29ba8b4ad 100644
--- a/lib/parsecfg.nim
+++ b/lib/parsecfg.nim
@@ -10,7 +10,7 @@
 ## The ``parsecfg`` module implements a high performance configuration file 
 ## parser. The configuration file's syntax is similar to the Windows ``.ini`` 
 ## format, but much more powerful, as it is not a line based parser. String 
-## literals, raw string literals and triple quote string literals are supported 
+## literals, raw string literals and triple quoted string literals are supported 
 ## as in the Nimrod programming language.
 
 ## This is an example of how a configuration file may look like:
@@ -135,7 +135,6 @@ proc handleDecChars(c: var TCfgParser, xi: var int) =
     inc(c.bufpos)
 
 proc getEscapedChar(c: var TCfgParser, tok: var TToken) = 
-  var xi: int
   inc(c.bufpos)               # skip '\'
   case c.buf[c.bufpos]
   of 'n', 'N': 
@@ -173,12 +172,12 @@ proc getEscapedChar(c: var TCfgParser, tok: var TToken) =
     Inc(c.bufpos)
   of 'x', 'X': 
     inc(c.bufpos)
-    xi = 0
+    var xi = 0
     handleHexChar(c, xi)
     handleHexChar(c, xi)
     add(tok.literal, Chr(xi))
   of '0'..'9': 
-    xi = 0
+    var xi = 0
     handleDecChars(c, xi)
     if (xi <= 255): add(tok.literal, Chr(xi))
     else: tok.kind = tkInvalid
@@ -191,12 +190,8 @@ proc HandleCRLF(c: var TCfgParser, pos: int): int =
   else: result = pos
   
 proc getString(c: var TCfgParser, tok: var TToken, rawMode: bool) = 
-  var 
-    pos: int
-    ch: Char
-    buf: cstring
-  pos = c.bufPos + 1          # skip "
-  buf = c.buf                 # put `buf` in a register
+  var pos = c.bufPos + 1          # skip "
+  var buf = c.buf                 # put `buf` in a register
   tok.kind = tkSymbol
   if (buf[pos] == '\"') and (buf[pos + 1] == '\"'): 
     # long string literal:
@@ -211,19 +206,18 @@ proc getString(c: var TCfgParser, tok: var TToken, rawMode: bool) =
         Inc(pos)
       of '\c', '\L': 
         pos = HandleCRLF(c, pos)
-        tok.literal = tok.literal & nl
+        add(tok.literal, nl)
       of lexbase.EndOfFile: 
         tok.kind = tkInvalid
         break 
       else: 
         add(tok.literal, buf[pos])
         Inc(pos)
-    c.bufpos = pos +
-        3                     # skip the three """
+    c.bufpos = pos + 3       # skip the three """
   else: 
     # ordinary string literal
     while true: 
-      ch = buf[pos]
+      var ch = buf[pos]
       if ch == '\"': 
         inc(pos)              # skip '"'
         break 
@@ -240,11 +234,8 @@ proc getString(c: var TCfgParser, tok: var TToken, rawMode: bool) =
     c.bufpos = pos
 
 proc getSymbol(c: var TCfgParser, tok: var TToken) = 
-  var 
-    pos: int
-    buf: cstring
-  pos = c.bufpos
-  buf = c.buf
+  var pos = c.bufpos
+  var buf = c.buf
   while true: 
     add(tok.literal, buf[pos])
     Inc(pos)
@@ -253,11 +244,8 @@ proc getSymbol(c: var TCfgParser, tok: var TToken) =
   tok.kind = tkSymbol
 
 proc skip(c: var TCfgParser) = 
-  var 
-    buf: cstring
-    pos: int
-  pos = c.bufpos
-  buf = c.buf
+  var pos = c.bufpos
+  var buf = c.buf
   while true: 
     case buf[pos]
     of ' ', '\t': 
diff --git a/lib/parseopt.nim b/lib/parseopt.nim
index 1cce0a11e..12060ba70 100644
--- a/lib/parseopt.nim
+++ b/lib/parseopt.nim
@@ -1,7 +1,7 @@
 #
 #
 #            Nimrod's Runtime Library
-#        (c) Copyright 2008 Andreas Rumpf
+#        (c) Copyright 2009 Andreas Rumpf
 #
 #    See the file "copying.txt", included in this
 #    distribution, for details about the copyright.
@@ -73,8 +73,7 @@ proc parseWord(s: string, i: int, w: var string,
       inc(result)
 
 proc handleShortOption(p: var TOptParser) = 
-  var i: int
-  i = p.pos
+  var i = p.pos
   p.kind = cmdShortOption
   add(p.key, p.cmd[i])
   inc(i)
@@ -91,8 +90,7 @@ proc handleShortOption(p: var TOptParser) =
   p.pos = i
 
 proc next(p: var TOptParser) = 
-  var i: int
-  i = p.pos
+  var i = p.pos
   while p.cmd[i] in {'\x09', ' '}: inc(i)
   p.pos = i
   setlen(p.key, 0)
diff --git a/lib/posix/posix.nim b/lib/posix/posix.nim
index 38677420d..570c24980 100644
--- a/lib/posix/posix.nim
+++ b/lib/posix/posix.nim
@@ -1,15 +1,16 @@
 #

 #

 #            Nimrod's Runtime Library

-#        (c) Copyright 2008 Andreas Rumpf

+#        (c) Copyright 2009 Andreas Rumpf

 #

 #    See the file "copying.txt", included in this

 #    distribution, for details about the copyright.

 #

 

-# Until ndbm!!

+# Until std_arg!!

 # done: ipc, pwd, stat, semaphore, sys/types, sys/utsname, pthread, unistd,

-# statvfs, mman, time, wait, signal, nl_types, sched, spawn, select, ucontext

+# statvfs, mman, time, wait, signal, nl_types, sched, spawn, select, ucontext,
+# net/if, sys/socket, sys/uio, netinet/in, netinet/tcp, netdb

 

 ## This is a raw POSIX interface module. It does not not provide any

 ## convenience: cstrings are used instead of proper Nimrod strings and

@@ -60,24 +61,26 @@ const
   MM_NULLTAG* = nil

   

   STDERR_FILENO* = 2 ## File number of stderr;

-  STDIN_FILENO* = 0 ## File number of stdin;

+  STDIN_FILENO* = 0  ## File number of stdin;

   STDOUT_FILENO* = 1 ## File number of stdout; 

 

 type

   TDIR* {.importc: "DIR", header: "<dirent.h>", final, pure.} = object

     ## A type representing a directory stream. 

 

-  Tdirent* {.importc: "struct dirent", header: "<dirent.h>", final, pure.} = object

+  Tdirent* {.importc: "struct dirent", 
+             header: "<dirent.h>", final, pure.} = object ## dirent_t struct

     d_ino*: TIno  ## File serial number.

     d_name*: array [0..255, char] ## Name of entry.

 

-  Tflock* {.importc: "flock", header: "<fcntl.h>", final, pure.} = object

-    l_type*: cshort  ## Type of lock; F_RDLCK, F_WRLCK, F_UNLCK. 

+  Tflock* {.importc: "flock", final, pure,
+            header: "<fcntl.h>".} = object ## flock type

+    l_type*: cshort   ## Type of lock; F_RDLCK, F_WRLCK, F_UNLCK. 

     l_whence*: cshort ## Flag for starting offset. 

-    l_start*: Toff ## Relative offset in bytes. 

-    l_len*: Toff   ## Size; if 0 then until EOF. 

-    l_pid*: TPid   ## Process ID of the process holding the lock; 

-                   ## returned with F_GETLK. 

+    l_start*: Toff    ## Relative offset in bytes. 

+    l_len*: Toff      ## Size; if 0 then until EOF. 

+    l_pid*: TPid      ## Process ID of the process holding the lock; 

+                      ## returned with F_GETLK. 

   

   Tfenv* {.importc: "fenv_t", header: "<fenv.h>", final, pure.} = 

     object ## Represents the entire floating-point environment. The

@@ -99,14 +102,16 @@ type
     base*: cint

     level*: cint

     

-  TGlob* {.importc: "glob_t", header: "<glob.h>", final, pure.} = object

-    gl_pathc*: int ## Count of paths matched by pattern. 

+  TGlob* {.importc: "glob_t", header: "<glob.h>", 
+           final, pure.} = object ## glob_t

+    gl_pathc*: int         ## Count of paths matched by pattern. 

     gl_pathv*: ptr cstring ## Pointer to a list of matched pathnames. 

-    gl_offs*: int ##  Slots to reserve at the beginning of gl_pathv. 

+    gl_offs*: int          ## Slots to reserve at the beginning of gl_pathv. 

   

-  TGroup* {.importc: "struct group", header: "<grp.h>", final, pure.} = object

-    gr_name*: cstring ## The name of the group. 

-    gr_gid*: TGid  ## Numerical group ID. 

+  TGroup* {.importc: "struct group", header: "<grp.h>", 
+            final, pure.} = object ## struct group

+    gr_name*: cstring     ## The name of the group. 

+    gr_gid*: TGid         ## Numerical group ID. 

     gr_mem*: cstringArray ## Pointer to a null-terminated array of character 

                           ## pointers to member names. 

 

@@ -140,18 +145,21 @@ type
     thousands_sep*: cstring

 

   TMqd* {.importc: "mqd_t", header: "<mqueue.h>", final, pure.} = object

-  TMqAttr* {.importc: "struct mq_attr", header: "<mqueue.h>", final, pure.} = object

-    mq_flags*: int ##    Message queue flags. 

-    mq_maxmsg*: int ##   Maximum number of messages. 

-    mq_msgsize*: int ##  Maximum message size. 

-    mq_curmsgs*: int ##  Number of messages currently queued. 

-

-  TPasswd* {.importc: "struct passwd", header: "<pwd.h>", final, pure.} = object

-    pw_name*: cstring ##   User's login name. 

-    pw_uid*: TUid ##    Numerical user ID. 

-    pw_gid*: TGid ##    Numerical group ID. 

-    pw_dir*: cstring ## Initial working directory. 

-    pw_shell*: cstring ##  Program to use as shell. 

+  TMqAttr* {.importc: "struct mq_attr", 
+             header: "<mqueue.h>", 
+             final, pure.} = object ## message queue attribute

+    mq_flags*: int   ## Message queue flags. 

+    mq_maxmsg*: int  ## Maximum number of messages. 

+    mq_msgsize*: int ## Maximum message size. 

+    mq_curmsgs*: int ## Number of messages currently queued. 

+

+  TPasswd* {.importc: "struct passwd", header: "<pwd.h>", 
+             final, pure.} = object ## struct passwd

+    pw_name*: cstring   ## User's login name. 

+    pw_uid*: TUid       ## Numerical user ID. 

+    pw_gid*: TGid       ## Numerical group ID. 

+    pw_dir*: cstring    ## Initial working directory. 

+    pw_shell*: cstring  ## Program to use as shell. 

 

   Tblkcnt* {.importc: "blkcnt_t", header: "<sys/types.h>".} = int

     ## used for file block counts

@@ -171,30 +179,40 @@ type
   TOff* {.importc: "off_t", header: "<sys/types.h>".} = int64

   TPid* {.importc: "pid_t", header: "<sys/types.h>".} = int

   Tpthread_attr* {.importc: "pthread_attr_t", header: "<sys/types.h>".} = int

-  Tpthread_barrier* {.importc: "pthread_barrier_t", header: "<sys/types.h>".} = int

-  Tpthread_barrierattr* {.importc: "pthread_barrierattr_t", header: "<sys/types.h>".} = int

+  Tpthread_barrier* {.importc: "pthread_barrier_t", 
+                      header: "<sys/types.h>".} = int

+  Tpthread_barrierattr* {.importc: "pthread_barrierattr_t", 
+                          header: "<sys/types.h>".} = int

   Tpthread_cond* {.importc: "pthread_cond_t", header: "<sys/types.h>".} = int

-  Tpthread_condattr* {.importc: "pthread_condattr_t", header: "<sys/types.h>".} = int

+  Tpthread_condattr* {.importc: "pthread_condattr_t", 
+                       header: "<sys/types.h>".} = int

   Tpthread_key* {.importc: "pthread_key_t", header: "<sys/types.h>".} = int

   Tpthread_mutex* {.importc: "pthread_mutex_t", header: "<sys/types.h>".} = int

-  Tpthread_mutexattr* {.importc: "pthread_mutexattr_t", header: "<sys/types.h>".} = int

+  Tpthread_mutexattr* {.importc: "pthread_mutexattr_t", 
+                        header: "<sys/types.h>".} = int

   Tpthread_once* {.importc: "pthread_once_t", header: "<sys/types.h>".} = int

   Tpthread_rwlock* {.importc: "pthread_rwlock_t", header: "<sys/types.h>".} = int

-  Tpthread_rwlockattr* {.importc: "pthread_rwlockattr_t", header: "<sys/types.h>".} = int

-  Tpthread_spinlock* {.importc: "pthread_spinlock_t", header: "<sys/types.h>".} = int

+  Tpthread_rwlockattr* {.importc: "pthread_rwlockattr_t", 
+                         header: "<sys/types.h>".} = int

+  Tpthread_spinlock* {.importc: "pthread_spinlock_t", 
+                       header: "<sys/types.h>".} = int

   Tpthread* {.importc: "pthread_t", header: "<sys/types.h>".} = int

   Tsuseconds* {.importc: "suseconds_t", header: "<sys/types.h>".} = int

   Ttime* {.importc: "time_t", header: "<sys/types.h>".} = int

   Ttimer* {.importc: "timer_t", header: "<sys/types.h>".} = int

   Ttrace_attr* {.importc: "trace_attr_t", header: "<sys/types.h>".} = int

-  Ttrace_event_id* {.importc: "trace_event_id_t", header: "<sys/types.h>".} = int

-  Ttrace_event_set* {.importc: "trace_event_set_t", header: "<sys/types.h>".} = int

+  Ttrace_event_id* {.importc: "trace_event_id_t", 
+                     header: "<sys/types.h>".} = int

+  Ttrace_event_set* {.importc: "trace_event_set_t", 
+                      header: "<sys/types.h>".} = int

   Ttrace_id* {.importc: "trace_id_t", header: "<sys/types.h>".} = int

   Tuid* {.importc: "uid_t", header: "<sys/types.h>".} = int

   Tuseconds* {.importc: "useconds_t", header: "<sys/types.h>".} = int

   

-  Tutsname* {.importc: "struct utsname", header: "<sys/utsname.h>", final, pure.} = object

-    sysname*,    ## Name of this implementation of the operating system. 

+  Tutsname* {.importc: "struct utsname", 
+              header: "<sys/utsname.h>", 
+              final, pure.} = object ## struct utsname

+    sysname*,      ## Name of this implementation of the operating system. 

       nodename*,   ## Name of this node within the communications 

                    ## network to which this node is attached, if any. 

       release*,    ## Current release level of this implementation. 

@@ -203,58 +221,63 @@ type
                                      ## system is running. 

 

   TSem* {.importc: "sem_t", header: "<semaphore.h>", final, pure.} = object

-  Tipc_perm* {.importc: "struct ipc_perm", header: "<sys/ipc.h>", final, pure.} = object

+  Tipc_perm* {.importc: "struct ipc_perm", 
+               header: "<sys/ipc.h>", final, pure.} = object ## struct ipc_perm

     uid*: tuid    ## Owner's user ID. 

     gid*: tgid    ## Owner's group ID. 

     cuid*: Tuid   ## Creator's user ID. 

     cgid*: Tgid   ## Creator's group ID. 

-    mode*: TMode   ## Read/write permission. 

+    mode*: TMode  ## Read/write permission. 

   

-  TStat* {.importc: "struct stat", header: "<sys/stat.h>", final, pure.} = object

-    st_dev*: TDev  ##   Device ID of device containing file. 

-    st_ino*: TIno  ##   File serial number. 

-    st_mode*: TMode ##   Mode of file (see below). 

-    st_nlink*: tnlink ##   Number of hard links to the file. 

-    st_uid*: tuid ##   User ID of file. 

-    st_gid*: Tgid ##   Group ID of file. 

-    st_rdev*: TDev ##   Device ID (if file is character or block special). 

-    st_size*: TOff ##   For regular files, the file size in bytes. 

-                   ## For symbolic links, the length in bytes of the 

-                   ## pathname contained in the symbolic link. 

-                   ## For a shared memory object, the length in bytes. 

-                   ## For a typed memory object, the length in bytes. 

-                   ## For other file types, the use of this field is 

-                   ## unspecified. 

-    st_atime*: ttime ## Time of last access. 

-    st_mtime*: ttime ## Time of last data modification. 

-    st_ctime*: ttime ## Time of last status change. 

-    st_blksize*: Tblksize ## A file system-specific preferred I/O block size  

-                          ## for this object. In some file system types, this 

-                          ## may vary from file to file. 

-    st_blocks*: Tblkcnt ## Number of blocks allocated for this object. 

+  TStat* {.importc: "struct stat", 
+           header: "<sys/stat.h>", final, pure.} = object ## struct stat

+    st_dev*: TDev          ## Device ID of device containing file. 

+    st_ino*: TIno          ## File serial number. 

+    st_mode*: TMode        ## Mode of file (see below). 

+    st_nlink*: tnlink      ## Number of hard links to the file. 

+    st_uid*: tuid          ## User ID of file. 

+    st_gid*: Tgid          ## Group ID of file. 

+    st_rdev*: TDev         ## Device ID (if file is character or block special). 

+    st_size*: TOff         ## For regular files, the file size in bytes. 

+                           ## For symbolic links, the length in bytes of the 

+                           ## pathname contained in the symbolic link. 

+                           ## For a shared memory object, the length in bytes. 

+                           ## For a typed memory object, the length in bytes. 

+                           ## For other file types, the use of this field is 

+                           ## unspecified. 

+    st_atime*: ttime       ## Time of last access. 

+    st_mtime*: ttime       ## Time of last data modification. 

+    st_ctime*: ttime       ## Time of last status change. 

+    st_blksize*: Tblksize  ## A file system-specific preferred I/O block size  

+                           ## for this object. In some file system types, this 

+                           ## may vary from file to file. 

+    st_blocks*: Tblkcnt    ## Number of blocks allocated for this object. 

 

   

-  TStatvfs* {.importc: "struct statvfs", header: "<sys/statvfs.h>", final, pure.} = object  

-    f_bsize*: int   ## File system block size. 

-    f_frsize*: int  ## Fundamental file system block size. 

-    f_blocks*: Tfsblkcnt  ## Total number of blocks on file system in units of f_frsize. 

+  TStatvfs* {.importc: "struct statvfs", header: "<sys/statvfs.h>", 
+              final, pure.} = object ## struct statvfs

+    f_bsize*: int        ## File system block size. 

+    f_frsize*: int       ## Fundamental file system block size. 

+    f_blocks*: Tfsblkcnt ## Total number of blocks on file system
+                         ## in units of f_frsize. 

     f_bfree*: Tfsblkcnt  ## Total number of free blocks. 

     f_bavail*: Tfsblkcnt ## Number of free blocks available to 

                          ## non-privileged process. 

     f_files*: Tfsfilcnt  ## Total number of file serial numbers. 

-    f_ffree*: Tfsfilcnt   ## Total number of free file serial numbers. 

-    f_favail*: Tfsfilcnt  ## Number of file serial numbers available to 

-                          ## non-privileged process. 

-    f_fsid*: int    ## File system ID. 

-    f_flag*: int    ## Bit mask of f_flag values. 

-    f_namemax*: int ##  Maximum filename length. 

+    f_ffree*: Tfsfilcnt  ## Total number of free file serial numbers. 

+    f_favail*: Tfsfilcnt ## Number of file serial numbers available to 

+                         ## non-privileged process. 

+    f_fsid*: int         ## File system ID. 

+    f_flag*: int         ## Bit mask of f_flag values. 

+    f_namemax*: int      ## Maximum filename length. 

 

   Tposix_typed_mem_info* {.importc: "struct posix_typed_mem_info", 

                            header: "<sys/mman.h>", final, pure.} = object

     posix_tmi_length*: int

   

-  Ttm* {.importc: "struct tm", header: "<time.h>", final, pure.} = object

-    tm_sec*: cint ## Seconds [0,60]. 

+  Ttm* {.importc: "struct tm", header: "<time.h>", 
+         final, pure.} = object ## struct tm

+    tm_sec*: cint   ## Seconds [0,60]. 

     tm_min*: cint   ## Minutes [0,59]. 

     tm_hour*: cint  ## Hour [0,23]. 

     tm_mday*: cint  ## Day of month [1,31]. 

@@ -263,10 +286,12 @@ type
     tm_wday*: cint  ## Day of week [0,6] (Sunday =0). 

     tm_yday*: cint  ## Day of year [0,365]. 

     tm_isdst*: cint ## Daylight Savings flag. 

-  Ttimespec* {.importc: "struct timespec", header: "<time.h>", final, pure.} = object

+  Ttimespec* {.importc: "struct timespec", 
+               header: "<time.h>", final, pure.} = object ## struct timespec

     tv_sec*: Ttime ## Seconds. 

-    tv_nsec*: int ## Nanoseconds. 

-  titimerspec* {.importc: "struct itimerspec", header: "<time.h>", final, pure.} = object

+    tv_nsec*: int  ## Nanoseconds. 

+  titimerspec* {.importc: "struct itimerspec", header: "<time.h>", 
+                 final, pure.} = object ## struct itimerspec

     it_interval*: ttimespec ## Timer period. 

     it_value*: ttimespec    ## Timer expiration. 

   

@@ -276,17 +301,20 @@ type
     ## interrupts.

   Tsigset* {.importc: "sigset_t", header: "<signal.h>", final, pure.} = object

   

-  TsigEvent* {.importc: "struct sigevent", header: "<signal.h>", final, pure.} = object

+  TsigEvent* {.importc: "struct sigevent", 
+               header: "<signal.h>", final, pure.} = object ## struct sigevent

     sigev_notify*: cint           ## Notification type. 

     sigev_signo*: cint            ## Signal number. 

-    sigev_value*: Tsigval        ##     Signal value. 

-    sigev_notify_function*: proc (x: TSigval) {.noconv.} ##  Notification function. 

+    sigev_value*: Tsigval         ## Signal value. 

+    sigev_notify_function*: proc (x: TSigval) {.noconv.} ## Notification function. 

     sigev_notify_attributes*: ptr Tpthreadattr ## Notification attributes.

 

-  TsigVal* {.importc: "union sigval", header: "<signal.h>", final, pure.} = object

+  TsigVal* {.importc: "union sigval", 
+             header: "<signal.h>", final, pure.} = object ## struct sigval

     sival_ptr*: pointer ## pointer signal value; 

                         ## integer signal value not defined!

-  TSigaction* {.importc: "struct sigaction", header: "<signal.h>", final, pure.} = object

+  TSigaction* {.importc: "struct sigaction", 
+                header: "<signal.h>", final, pure.} = object ## struct sigaction

     sa_handler*: proc (x: cint) {.noconv.}  ## Pointer to a signal-catching

                                             ## function or one of the macros 

                                             ## SIG_IGN or SIG_DFL. 

@@ -295,70 +323,222 @@ type
     sa_flags*: cint   ## Special flags. 

     sa_sigaction*: proc (x: cint, y: var TSigInfo, z: pointer) {.noconv.}

 

-  TStack* {.importc: "stack_t", header: "<signal.h>", final, pure.} = object

-    ss_sp*: pointer ##       Stack base or pointer. 

-    ss_size*: int ##     Stack size. 

-    ss_flags*: cint ##    Flags. 

-

-  TSigStack* {.importc: "struct sigstack", header: "<signal.h>", final, pure.} = object

-    ss_onstack*: cint ##  Non-zero when signal stack is in use. 

-    ss_sp*: pointer ## Signal stack pointer. 

-

-  TsigInfo* {.importc: "siginfo_t", header: "<signal.h>", final, pure.} = object

-    si_signo*: cint ##  Signal number. 

-    si_code*: cint ##   Signal code. 

-    si_errno*: cint ##  If non-zero, an errno value associated with 

-                    ## this signal, as defined in <errno.h>. 

-    si_pid*: tpid ##    Sending process ID. 

-    si_uid*: tuid ##    Real user ID of sending process. 

-    si_addr*: pointer ##   Address of faulting instruction. 

-    si_status*: cint ## Exit value or signal. 

-    si_band*: int ##   Band event for SIGPOLL. 

+  TStack* {.importc: "stack_t",
+            header: "<signal.h>", final, pure.} = object ## stack_t

+    ss_sp*: pointer  ## Stack base or pointer. 

+    ss_size*: int    ## Stack size. 

+    ss_flags*: cint  ## Flags. 

+

+  TSigStack* {.importc: "struct sigstack", 
+               header: "<signal.h>", final, pure.} = object ## struct sigstack

+    ss_onstack*: cint ## Non-zero when signal stack is in use. 

+    ss_sp*: pointer   ## Signal stack pointer. 

+

+  TsigInfo* {.importc: "siginfo_t", 
+              header: "<signal.h>", final, pure.} = object ## siginfo_t

+    si_signo*: cint    ## Signal number. 

+    si_code*: cint     ## Signal code. 

+    si_errno*: cint    ## If non-zero, an errno value associated with 

+                       ## this signal, as defined in <errno.h>. 

+    si_pid*: tpid      ## Sending process ID. 

+    si_uid*: tuid      ## Real user ID of sending process. 

+    si_addr*: pointer  ## Address of faulting instruction. 

+    si_status*: cint   ## Exit value or signal. 

+    si_band*: int      ## Band event for SIGPOLL. 

     si_value*: TSigval ## Signal value. 

   

   Tnl_item* {.importc: "nl_item", header: "<nl_types.h>".} = cint

   Tnl_catd* {.importc: "nl_catd", header: "<nl_types.h>".} = cint

 

-  Tsched_param* {.importc: "struct sched_param", header: "<sched.h>", final, pure.} = object

+  Tsched_param* {.importc: "struct sched_param", 
+                  header: "<sched.h>", 
+                  final, pure.} = object ## struct sched_param

     sched_priority*: cint

-    sched_ss_low_priority*: cint ## Low scheduling priority for 

-                                 ## sporadic server. 

+    sched_ss_low_priority*: cint     ## Low scheduling priority for 

+                                     ## sporadic server. 

     sched_ss_repl_period*: ttimespec ## Replenishment period for 

                                      ## sporadic server. 

-    sched_ss_init_budget*: ttimespec ##  Initial budget for sporadic server. 

-    sched_ss_max_repl*: cint    ## Maximum pending replenishments for 

-                                ## sporadic server. 

-

-  Ttimeval* {.importc: "struct timeval", header: "<sys/select.h>", final, pure.} = object

-    tv_sec*: ttime ##      Seconds. 

-    tv_usec*: tsuseconds ##     Microseconds. 

-  Tfd_set* {.importc: "struct fd_set", header: "<sys/select.h>", final, pure.} = object

-  Tmcontext* {.importc: "mcontext_t", header: "<ucontext.h>", final, pure.} = object

-  Tucontext* {.importc: "ucontext_t", header: "<ucontext.h>", final, pure.} = object

+    sched_ss_init_budget*: ttimespec ## Initial budget for sporadic server. 

+    sched_ss_max_repl*: cint         ## Maximum pending replenishments for 

+                                     ## sporadic server. 

+

+  Ttimeval* {.importc: "struct timeval", header: "<sys/select.h>", 
+              final, pure.} = object ## struct timeval

+    tv_sec*: ttime       ## Seconds. 

+    tv_usec*: tsuseconds ## Microseconds. 

+  Tfd_set* {.importc: "struct fd_set", header: "<sys/select.h>", 
+             final, pure.} = object

+  Tmcontext* {.importc: "mcontext_t", header: "<ucontext.h>", 
+               final, pure.} = object

+  Tucontext* {.importc: "ucontext_t", header: "<ucontext.h>", 
+               final, pure.} = object ## ucontext_t

     uc_link*: ptr Tucontext ## Pointer to the context that is resumed 

                             ## when this context returns. 

-    uc_sigmask*: Tsigset ## The set of signals that are blocked when this 

-                         ## context is active. 

-    uc_stack*: TStack    ## The stack used by this context. 

+    uc_sigmask*: Tsigset    ## The set of signals that are blocked when this 

+                            ## context is active. 

+    uc_stack*: TStack       ## The stack used by this context. 

     uc_mcontext*: Tmcontext ## A machine-specific representation of the saved 

                             ## context. 

 

 when hasAioH:

   type

-    Taiocb* {.importc: "struct aiocb", header: "<aio.h>", final, pure.} = object

-      aio_fildes*: cint ##    File descriptor. 

-      aio_offset*: TOff ##    File offset. 

-      aio_buf*: pointer ##    Location of buffer. 

-      aio_nbytes*: int   ##  Length of transfer. 

-      aio_reqprio*: cint ##   Request priority offset. 

+    Taiocb* {.importc: "struct aiocb", header: "<aio.h>", 
+              final, pure.} = object ## struct aiocb

+      aio_fildes*: cint         ## File descriptor. 

+      aio_offset*: TOff         ## File offset. 

+      aio_buf*: pointer         ## Location of buffer. 

+      aio_nbytes*: int          ## Length of transfer. 

+      aio_reqprio*: cint        ## Request priority offset. 

       aio_sigevent*: TSigEvent  ## Signal number and value. 

-      aio_lio_opcode: cint ## Operation to be performed. 

+      aio_lio_opcode: cint      ## Operation to be performed. 

  

 when hasSpawnH:

   type

-    Tposix_spawnattr* {.importc: "posix_spawnattr_t", header: "<spawn.h>".} = cint

-    Tposix_spawn_file_actions* {.importc: "posix_spawn_file_actions_t", header: "<spawn.h>".} = cint 

-

+    Tposix_spawnattr* {.importc: "posix_spawnattr_t", 
+                        header: "<spawn.h>".} = cint

+    Tposix_spawn_file_actions* {.importc: "posix_spawn_file_actions_t", 
+                                 header: "<spawn.h>".} = cint 

+

+type
+  Tif_nameindex* {.importc: "struct if_nameindex", final, 
+                   pure, header: "<net/if.h>".} = object ## struct if_nameindex
+    if_index*: cint   ## Numeric index of the interface. 
+    if_name*: cstring ## Null-terminated name of the interface. 
+
+  TSocklen* {.importc: "socklen_t", header: "<sys/socket.h>".} = cint
+  TSa_Family* {.importc: "sa_family_t", header: "<sys/socket.h>".} = cint
+  
+  TSockAddr* {.importc: "struct sockaddr", header: "<sys/socket.h>", 
+               pure, final.} = object ## struct sockaddr
+    sa_family*: Tsa_family         ## Address family. 
+    sa_data*: array [0..255, char] ## Socket address (variable-length data). 
+  
+  Tsockaddr_storage* {.importc: "struct sockaddr_storage",
+                       header: "<sys/socket.h>", 
+                       pure, final.} = object ## struct sockaddr_storage
+    ss_family*: Tsa_family ## Address family. 
+
+  TIOVec* {.importc: "struct iovec", pure, final,
+            header: "<sys/uio.h>".} = object ## struct iovec
+    iov_base*: pointer ## Base address of a memory region for input or output. 
+    iov_len*: int    ## The size of the memory pointed to by iov_base. 
+    
+  Tmsghdr* {.importc: "struct msghdr", pure, final,
+             header: "<sys/socket.h>".} = object  ## struct msghdr
+    msg_name*: pointer  ## Optional address. 
+    msg_namelen*: TSockLen  ## Size of address. 
+    msg_iov*: ptr TIOVec    ## Scatter/gather array. 
+    msg_iovlen*: cint   ## Members in msg_iov. 
+    msg_control*: pointer  ## Ancillary data; see below. 
+    msg_controllen*: TSockLen ## Ancillary data buffer len. 
+    msg_flags*: cint ## Flags on received message. 
+
+
+  Tcmsghdr* {.importc: "struct cmsghdr", pure, final, 
+              header: "<sys/socket.h>".} = object ## struct cmsghdr
+    cmsg_len*: TSockLen ## Data byte count, including the cmsghdr. 
+    cmsg_level*: cint   ## Originating protocol. 
+    cmsg_type*: cint    ## Protocol-specific type. 
+
+  TLinger* {.importc: "struct linger", pure, final, 
+             header: "<sys/socket.h>".} = object ## struct linger
+    l_onoff*: cint  ## Indicates whether linger option is enabled. 
+    l_linger*: cint ## Linger time, in seconds. 
+  
+  TInPort* = int16 ## unsigned!
+  TInAddrScalar* = int32 ## unsigned!
+  
+  TInAddr* {.importc: "struct in_addr", pure, final, 
+             header: "<netinet/in.h>".} = object ## struct in_addr
+    s_addr*: TInAddrScalar
+
+  Tsockaddr_in* {.importc: "struct sockaddr_in", pure, final, 
+                  header: "<netinet/in.h>".} = object ## struct sockaddr_in
+    sin_family*: TSa_family ## AF_INET. 
+    sin_port*: TInPort      ## Port number. 
+    sin_addr*: TInAddr      ## IP address. 
+
+  TIn6Addr* {.importc: "struct in6_addr", pure, final,
+              header: "<netinet/in.h>".} = object ## struct in6_addr
+    s6_addr*: array [0..15, char]
+
+  Tsockaddr_in6* {.importc: "struct sockaddr_in6", pure, final,
+                   header: "<netinet/in.h>".} = object ## struct sockaddr_in6
+    sin6_family*: TSa_family ## AF_INET6. 
+    sin6_port*: TInPort      ## Port number. 
+    sin6_flowinfo*: int32    ## IPv6 traffic class and flow information. 
+    sin6_addr*: Tin6Addr     ## IPv6 address. 
+    sin6_scope_id*: int32    ## Set of interfaces for a scope. 
+  
+  Tipv6_mreq* {.importc: "struct ipv6_mreq", pure, final, 
+                header: "<netinet/in.h>".} = object ## struct ipv6_mreq
+    ipv6mr_multiaddr*: TIn6Addr ## IPv6 multicast address. 
+    ipv6mr_interface*: cint     ## Interface index. 
+
+  Thostent* {.importc: "struct hostent", pure, final, 
+              header: "<netdb.h>".} = object ## struct hostent
+    h_name*: cstring           ## Official name of the host. 
+    h_aliases*: cstringArray   ## A pointer to an array of pointers to 
+                               ## alternative host names, terminated by a 
+                               ## null pointer. 
+    h_addrtype*: cint          ## Address type. 
+    h_length*: cint            ## The length, in bytes, of the address. 
+    h_addr_list*: cstringArray ## A pointer to an array of pointers to network 
+                               ## addresses (in network byte order) for the
+                               ## host, terminated by a null pointer. 
+
+  Tnetent* {.importc: "struct netent", pure, final, 
+              header: "<netdb.h>".} = object ## struct netent
+    n_name*: cstring         ## Official, fully-qualified (including the 
+                             ## domain) name of the host. 
+    n_aliases*: cstringArray ## A pointer to an array of pointers to 
+                             ## alternative network names, terminated by a 
+                             ## null pointer. 
+    n_addrtype*: cint        ## The address type of the network. 
+    n_net*: int32            ## The network number, in host byte order. 
+
+  TProtoent* {.importc: "struct protoent", pure, final, 
+              header: "<netdb.h>".} = object ## struct protoent
+    p_name*: cstring         ## Official name of the protocol. 
+    p_aliases*: cstringArray ## A pointer to an array of pointers to 
+                             ## alternative protocol names, terminated by 
+                             ## a null pointer. 
+    p_proto*: cint           ## The protocol number. 
+
+  TServent* {.importc: "struct servent", pure, final, 
+              header: "<netdb.h>".} = object ## struct servent
+    s_name*: cstring         ## Official name of the service. 
+    s_aliases*: cstringArray ## A pointer to an array of pointers to 
+                             ## alternative service names, terminated by 
+                             ## a null pointer. 
+    s_port*: cint            ## The port number at which the service 
+                             ## resides, in network byte order. 
+    s_proto*: cstring        ## The name of the protocol to use when 
+                             ## contacting the service. 
+
+  Taddrinfo* {.importc: "struct addrinfo", pure, final, 
+              header: "<netdb.h>".} = object ## struct addrinfo
+    ai_flags*: cint         ## Input flags. 
+    ai_family*: cint        ## Address family of socket. 
+    ai_socktype*: cint      ## Socket type. 
+    ai_protocol*: cint      ## Protocol of socket. 
+    ai_addrlen*: TSockLen   ## Length of socket address. 
+    ai_addr*: ptr TSockAddr ## Socket address of socket. 
+    ai_canonname*: cstring  ## Canonical name of service location. 
+    ai_next*: ptr TAddrInfo ## Pointer to next in list. 
+  
+  TPollfd* {.importc: "struct pollfd", pure, final, 
+             header: "<poll.h>".} = object ## struct pollfd
+    fd*: cint        ## The following descriptor being polled. 
+    events*: cshort  ## The input event flags (see below). 
+    revents*: cshort ## The output event flags (see below).  
+  
+  Tnfds* {.importc: "nfds_t", header: "<poll.h>".} = cint
+
+var
+  errno* {.importc, header: "<errno.h>".}: cint ## error variable

+  daylight* {.importc, header: "<time.h>".}: cint

+  timezone* {.importc, header: "<time.h>".}: int

   

 # Constants as variables:

 when hasAioH:

@@ -399,7 +579,6 @@ var
     ## All symbols are not made available for relocation processing by 

     ## other modules. 

     

-  errno* {.importc, header: "<errno.h>".}: cint ## error variable

   E2BIG* {.importc, header: "<errno.h>".}: cint

       ## Argument list too long.

   EACCES* {.importc, header: "<errno.h>".}: cint

@@ -1026,18 +1205,20 @@ var
   SC_XBS5_ILP32_OFF32*{.importc: "_SC_XBS5_ILP32_OFF32", header: "<unistd.h>".}: cint

   SC_XBS5_ILP32_OFFBIG*{.importc: "_SC_XBS5_ILP32_OFFBIG", header: "<unistd.h>".}: cint

   SC_XBS5_LP64_OFF64*{.importc: "_SC_XBS5_LP64_OFF64", header: "<unistd.h>".}: cint

-  SC_XBS5_LPBIG_OFFBIG*{.importc: "_SC_XBS5_LPBIG_OFFBIG", header: "<unistd.h>".}: cint

+  SC_XBS5_LPBIG_OFFBIG*{.importc: "_SC_XBS5_LPBIG_OFFBIG", 
+                         header: "<unistd.h>".}: cint

   SC_XOPEN_CRYPT*{.importc: "_SC_XOPEN_CRYPT", header: "<unistd.h>".}: cint

   SC_XOPEN_ENH_I18N*{.importc: "_SC_XOPEN_ENH_I18N", header: "<unistd.h>".}: cint

   SC_XOPEN_LEGACY*{.importc: "_SC_XOPEN_LEGACY", header: "<unistd.h>".}: cint

   SC_XOPEN_REALTIME*{.importc: "_SC_XOPEN_REALTIME", header: "<unistd.h>".}: cint

-  SC_XOPEN_REALTIME_THREADS*{.importc: "_SC_XOPEN_REALTIME_THREADS", header: "<unistd.h>".}: cint

+  SC_XOPEN_REALTIME_THREADS*{.importc: "_SC_XOPEN_REALTIME_THREADS", 
+                              header: "<unistd.h>".}: cint

   SC_XOPEN_SHM*{.importc: "_SC_XOPEN_SHM", header: "<unistd.h>".}: cint

   SC_XOPEN_STREAMS*{.importc: "_SC_XOPEN_STREAMS", header: "<unistd.h>".}: cint

   SC_XOPEN_UNIX*{.importc: "_SC_XOPEN_UNIX", header: "<unistd.h>".}: cint

   SC_XOPEN_VERSION*{.importc: "_SC_XOPEN_VERSION", header: "<unistd.h>".}: cint

   

-  SEM_FAILED* {.importc, header: "<semaphore.h>".}: cint

+  SEM_FAILED* {.importc, header: "<semaphore.h>".}: pointer

   IPC_CREAT* {.importc, header: "<sys/ipc.h>".}: cint

     ## Create entry if key does not exist.

   IPC_EXCL* {.importc, header: "<sys/ipc.h>".}: cint

@@ -1133,9 +1314,12 @@ var
     ## Lock pages that become mapped.

   MAP_FAILED* {.importc, header: "<sys/mman.h>".}: cint

   POSIX_MADV_NORMAL* {.importc, header: "<sys/mman.h>".}: cint

-    ## The application has no advice to give on its behavior with respect to the specified range. It is the default characteristic if no advice is given for a range of memory.

+    ## The application has no advice to give on its behavior with 
+    ## respect to the specified range. It is the default characteristic 
+    ## if no advice is given for a range of memory.

   POSIX_MADV_SEQUENTIAL* {.importc, header: "<sys/mman.h>".}: cint

-    ## The application expects to access the specified range sequentially from lower addresses to higher addresses.

+    ## The application expects to access the specified range sequentially
+    ## from lower addresses to higher addresses.

   POSIX_MADV_RANDOM* {.importc, header: "<sys/mman.h>".}: cint

     ## The application expects to access the specified range in a random order.

   POSIX_MADV_WILLNEED* {.importc, header: "<sys/mman.h>".}: cint

@@ -1146,20 +1330,19 @@ var
   POSIX_TYPED_MEM_MAP_ALLOCATABLE* {.importc, header: "<sys/mman.h>".}: cint

 

 

-  CLOCKS_PER_SEC* {.importc, header: "<time.h>".}: cint

+  CLOCKS_PER_SEC* {.importc, header: "<time.h>".}: int

     ## A number used to convert the value returned by the clock() function

     ## into seconds.

-  CLOCK_PROCESS_CPUTIME_ID* {.importc, header: "<time.h>".}: cstring

+  CLOCK_PROCESS_CPUTIME_ID* {.importc, header: "<time.h>".}: cint

     ## The identifier of the CPU-time clock associated with the process 

     ## making a clock() or timer*() function call.

-  CLOCK_THREAD_CPUTIME_ID* {.importc, header: "<time.h>".}: cstring

-  CLOCK_REALTIME* {.importc, header: "<time.h>".}: cstring

+  CLOCK_THREAD_CPUTIME_ID* {.importc, header: "<time.h>".}: cint

+  CLOCK_REALTIME* {.importc, header: "<time.h>".}: cint

     ## The identifier of the system-wide realtime clock.

   TIMER_ABSTIME* {.importc, header: "<time.h>".}: cint

-    ## Flag indicating time is absolute. For functions taking timer objects, this refers to the clock associated with the timer. [Option End]

+    ## Flag indicating time is absolute. For functions taking timer 
+    ## objects, this refers to the clock associated with the timer.

   CLOCK_MONOTONIC* {.importc, header: "<time.h>".}: cint

-  daylight* {.importc, header: "<time.h>".}: cint

-  timezone* {.importc, header: "<time.h>".}: int

 

   WNOHANG* {.importc, header: "<sys/wait.h>".}: cint

     ## Do not hang if no status is available; return immediately.

@@ -1258,6 +1441,213 @@ var
   SEEK_SET* {.importc, header: "<unistd.h>".}: cint

   SEEK_CUR* {.importc, header: "<unistd.h>".}: cint

   SEEK_END* {.importc, header: "<unistd.h>".}: cint

+
+  IF_NAMESIZE* {.importc, header: "<net/if.h>".}: cint
+
+  SCM_RIGHTS* {.importc, header: "<sys/socket.h>".}: cint
+    ## Indicates that the data array contains the access rights 
+    ## to be sent or received. 
+
+  SOCK_DGRAM* {.importc, header: "<sys/socket.h>".}: cint ## Datagram socket.
+  SOCK_RAW* {.importc, header: "<sys/socket.h>".}: cint
+    ## Raw Protocol Interface.
+  SOCK_SEQPACKET* {.importc, header: "<sys/socket.h>".}: cint
+    ## Sequenced-packet socket.
+  SOCK_STREAM* {.importc, header: "<sys/socket.h>".}: cint
+    ## Byte-stream socket. 
+    
+  SOL_SOCKET* {.importc, header: "<sys/socket.h>".}: cint
+    ## Options to be accessed at socket level, not protocol level. 
+    
+  SO_ACCEPTCONN* {.importc, header: "<sys/socket.h>".}: cint
+    ## Socket is accepting connections.
+  SO_BROADCAST* {.importc, header: "<sys/socket.h>".}: cint
+    ## Transmission of broadcast messages is supported.
+  SO_DEBUG* {.importc, header: "<sys/socket.h>".}: cint
+    ## Debugging information is being recorded.
+  SO_DONTROUTE* {.importc, header: "<sys/socket.h>".}: cint
+    ## Bypass normal routing.
+  SO_ERROR* {.importc, header: "<sys/socket.h>".}: cint
+    ## Socket error status.
+  SO_KEEPALIVE* {.importc, header: "<sys/socket.h>".}: cint
+    ## Connections are kept alive with periodic messages.
+  SO_LINGER* {.importc, header: "<sys/socket.h>".}: cint
+    ## Socket lingers on close.
+  SO_OOBINLINE* {.importc, header: "<sys/socket.h>".}: cint
+    ## Out-of-band data is transmitted in line.
+  SO_RCVBUF* {.importc, header: "<sys/socket.h>".}: cint
+    ## Receive buffer size.
+  SO_RCVLOWAT* {.importc, header: "<sys/socket.h>".}: cint
+    ## Receive *low water mark*.
+  SO_RCVTIMEO* {.importc, header: "<sys/socket.h>".}: cint
+    ## Receive timeout.
+  SO_REUSEADDR* {.importc, header: "<sys/socket.h>".}: cint
+    ## Reuse of local addresses is supported.
+  SO_SNDBUF* {.importc, header: "<sys/socket.h>".}: cint
+    ## Send buffer size.
+  SO_SNDLOWAT* {.importc, header: "<sys/socket.h>".}: cint
+    ## Send *low water mark*.
+  SO_SNDTIMEO* {.importc, header: "<sys/socket.h>".}: cint
+    ## Send timeout.
+  SO_TYPE* {.importc, header: "<sys/socket.h>".}: cint
+    ## Socket type. 
+      
+  SOMAXCONN* {.importc, header: "<sys/socket.h>".}: cint
+    ## The maximum backlog queue length. 
+    
+  MSG_CTRUNC* {.importc, header: "<sys/socket.h>".}: cint
+    ## Control data truncated.
+  MSG_DONTROUTE* {.importc, header: "<sys/socket.h>".}: cint
+    ## Send without using routing tables.
+  MSG_EOR* {.importc, header: "<sys/socket.h>".}: cint
+    ## Terminates a record (if supported by the protocol).
+  MSG_OOB* {.importc, header: "<sys/socket.h>".}: cint
+    ## Out-of-band data.
+  MSG_PEEK* {.importc, header: "<sys/socket.h>".}: cint
+    ## Leave received data in queue.
+  MSG_TRUNC* {.importc, header: "<sys/socket.h>".}: cint
+    ## Normal data truncated.
+  MSG_WAITALL* {.importc, header: "<sys/socket.h>".}: cint
+    ## Attempt to fill the read buffer. 
+
+  AF_INET* {.importc, header: "<sys/socket.h>".}: cint
+    ## Internet domain sockets for use with IPv4 addresses.
+  AF_INET6* {.importc, header: "<sys/socket.h>".}: cint
+    ## Internet domain sockets for use with IPv6 addresses.
+  AF_UNIX* {.importc, header: "<sys/socket.h>".}: cint
+    ## UNIX domain sockets.
+  AF_UNSPEC* {.importc, header: "<sys/socket.h>".}: cint
+    ## Unspecified. 
+
+  SHUT_RD* {.importc, header: "<sys/socket.h>".}: cint
+    ## Disables further receive operations.
+  SHUT_RDWR* {.importc, header: "<sys/socket.h>".}: cint
+    ## Disables further send and receive operations.
+  SHUT_WR* {.importc, header: "<sys/socket.h>".}: cint
+    ## Disables further send operations. 
+    
+  IPPROTO_IP* {.importc, header: "<netinet/in.h>".}: cint
+    ## Internet protocol.
+  IPPROTO_IPV6* {.importc, header: "<netinet/in.h>".}: cint
+    ## Internet Protocol Version 6.
+  IPPROTO_ICMP* {.importc, header: "<netinet/in.h>".}: cint
+    ## Control message protocol.
+  IPPROTO_RAW* {.importc, header: "<netinet/in.h>".}: cint
+    ## Raw IP Packets Protocol. 
+  IPPROTO_TCP* {.importc, header: "<netinet/in.h>".}: cint
+    ## Transmission control protocol.
+  IPPROTO_UDP* {.importc, header: "<netinet/in.h>".}: cint
+    ## User datagram protocol.
+
+  INADDR_ANY* {.importc, header: "<netinet/in.h>".}: TinAddrScalar
+    ## IPv4 local host address.
+  INADDR_BROADCAST* {.importc, header: "<netinet/in.h>".}: TinAddrScalar
+    ## IPv4 broadcast address.
+
+  INET_ADDRSTRLEN* {.importc, header: "<netinet/in.h>".}: cint
+    ## 16. Length of the string form for IP. 
+
+  IPV6_JOIN_GROUP* {.importc, header: "<netinet/in.h>".}: cint
+    ## Join a multicast group.
+  IPV6_LEAVE_GROUP* {.importc, header: "<netinet/in.h>".}: cint
+    ## Quit a multicast group.
+  IPV6_MULTICAST_HOPS* {.importc, header: "<netinet/in.h>".}: cint
+    ## Multicast hop limit.
+  IPV6_MULTICAST_IF* {.importc, header: "<netinet/in.h>".}: cint
+    ## Interface to use for outgoing multicast packets.
+  IPV6_MULTICAST_LOOP* {.importc, header: "<netinet/in.h>".}: cint
+    ## Multicast packets are delivered back to the local application.
+  IPV6_UNICAST_HOPS* {.importc, header: "<netinet/in.h>".}: cint
+    ## Unicast hop limit.
+  IPV6_V6ONLY* {.importc, header: "<netinet/in.h>".}: cint
+    ## Restrict AF_INET6 socket to IPv6 communications only.
+
+  TCP_NODELAY* {.importc, header: "<netinet/tcp.h>".}: cint
+    ## Avoid coalescing of small segments. 
+
+  IPPORT_RESERVED* {.importc, header: "<netdb.h>".}: cint 
+
+  HOST_NOT_FOUND* {.importc, header: "<netdb.h>".}: cint 
+  NO_DATA* {.importc, header: "<netdb.h>".}: cint 
+  NO_RECOVERY* {.importc, header: "<netdb.h>".}: cint 
+  TRY_AGAIN* {.importc, header: "<netdb.h>".}: cint 
+
+  AI_PASSIVE* {.importc, header: "<netdb.h>".}: cint 
+    ## Socket address is intended for bind().
+  AI_CANONNAME* {.importc, header: "<netdb.h>".}: cint 
+    ## Request for canonical name.
+  AI_NUMERICHOST* {.importc, header: "<netdb.h>".}: cint 
+    ## Return numeric host address as name.
+  AI_NUMERICSERV* {.importc, header: "<netdb.h>".}: cint 
+    ## Inhibit service name resolution.
+  AI_V4MAPPED* {.importc, header: "<netdb.h>".}: cint 
+     ## If no IPv6 addresses are found, query for IPv4 addresses and
+     ## return them to the caller as IPv4-mapped IPv6 addresses.
+  AI_ALL* {.importc, header: "<netdb.h>".}: cint 
+    ## Query for both IPv4 and IPv6 addresses.
+  AI_ADDRCONFIG* {.importc, header: "<netdb.h>".}: cint 
+    ## Query for IPv4 addresses only when an IPv4 address is configured; 
+    ## query for IPv6 addresses only when an IPv6 address is configured.
+
+  NI_NOFQDN* {.importc, header: "<netdb.h>".}: cint 
+    ## Only the nodename portion of the FQDN is returned for local hosts.
+  NI_NUMERICHOST* {.importc, header: "<netdb.h>".}: cint 
+    ## The numeric form of the node's address is returned instead of its name.
+  NI_NAMEREQD* {.importc, header: "<netdb.h>".}: cint 
+    ## Return an error if the node's name cannot be located in the database.
+  NI_NUMERICSERV* {.importc, header: "<netdb.h>".}: cint 
+    ## The numeric form of the service address is returned instead of its name.
+  NI_NUMERICSCOPE* {.importc, header: "<netdb.h>".}: cint 
+    ## For IPv6 addresses, the numeric form of the scope identifier is
+    ## returned instead of its name.
+  NI_DGRAM* {.importc, header: "<netdb.h>".}: cint 
+    ## Indicates that the service is a datagram service (SOCK_DGRAM). 
+
+  EAI_AGAIN* {.importc, header: "<netdb.h>".}: cint 
+    ## The name could not be resolved at this time. Future attempts may succeed.
+  EAI_BADFLAGS* {.importc, header: "<netdb.h>".}: cint 
+    ## The flags had an invalid value.
+  EAI_FAIL* {.importc, header: "<netdb.h>".}: cint 
+    ## A non-recoverable error occurred.
+  EAI_FAMILY* {.importc, header: "<netdb.h>".}: cint 
+    ## The address family was not recognized or the address length 
+    ## was invalid for the specified family.
+  EAI_MEMORY* {.importc, header: "<netdb.h>".}: cint 
+    ## There was a memory allocation failure.
+  EAI_NONAME* {.importc, header: "<netdb.h>".}: cint 
+    ## The name does not resolve for the supplied parameters.
+    ## NI_NAMEREQD is set and the host's name cannot be located, 
+    ## or both nodename and servname were null.
+  EAI_SERVICE* {.importc, header: "<netdb.h>".}: cint 
+    ## The service passed was not recognized for the specified socket type.
+  EAI_SOCKTYPE* {.importc, header: "<netdb.h>".}: cint 
+    ## The intended socket type was not recognized.
+  EAI_SYSTEM* {.importc, header: "<netdb.h>".}: cint 
+    ## A system error occurred. The error code can be found in errno.
+  EAI_OVERFLOW* {.importc, header: "<netdb.h>".}: cint 
+    ## An argument buffer overflowed.
+
+  POLLIN* {.importc, header: "<poll.h>".}: cshort
+    ## Data other than high-priority data may be read without blocking.
+  POLLRDNORM* {.importc, header: "<poll.h>".}: cshort
+    ## Normal data may be read without blocking.
+  POLLRDBAND* {.importc, header: "<poll.h>".}: cshort
+    ## Priority data may be read without blocking.
+  POLLPRI* {.importc, header: "<poll.h>".}: cshort
+    ## High priority data may be read without blocking.
+  POLLOUT* {.importc, header: "<poll.h>".}: cshort
+    ## Normal data may be written without blocking.
+  POLLWRNORM* {.importc, header: "<poll.h>".}: cshort
+    ## Equivalent to POLLOUT.
+  POLLWRBAND* {.importc, header: "<poll.h>".}: cshort
+    ## Priority data may be written.
+  POLLERR* {.importc, header: "<poll.h>".}: cshort
+    ## An error has occurred (revents only).
+  POLLHUP* {.importc, header: "<poll.h>".}: cshort
+    ## Device has been disconnected (revents only).
+  POLLNVAL* {.importc, header: "<poll.h>".}: cshort
+    ## Invalid fd member (revents only). 
+
 

 when hasSpawnh:

   var

@@ -1290,6 +1680,13 @@ proc inet_addr*(a1: cstring): int32 {.importc, header: "<arpa/inet.h>".}
 proc inet_ntoa*(a1: int32): cstring {.importc, header: "<arpa/inet.h>".}

 proc inet_ntop*(a1: cint, a2: pointer, a3: cstring, a4: int32): cstring {.importc, header: "<arpa/inet.h>".}

 proc inet_pton*(a1: cint, a2: cstring, a3: pointer): cint {.importc, header: "<arpa/inet.h>".}

+
+var
+  in6addr_any* {.importc, header: "<netinet/in.h>".}: TIn6Addr
+  in6addr_loopback* {.importc, header: "<netinet/in.h>".}: TIn6Addr
+
+proc IN6ADDR_ANY_INIT* (): TIn6Addr {.importc, header: "<netinet/in.h>".}
+proc IN6ADDR_LOOPBACK_INIT* (): TIn6Addr {.importc, header: "<netinet/in.h>".}
 

 # dirent.h

 proc closedir*(a1: ptr TDIR): cint  {.importc, header: "<dirent.h>".}

@@ -1529,13 +1926,20 @@ proc pthread_setconcurrency*(a1: cint): cint {.importc, header: "<pthread.h>".}
 proc pthread_setschedparam*(a1: Tpthread, a2: cint,

           a3: ptr Tsched_param): cint {.importc, header: "<pthread.h>".}

 

-proc pthread_setschedprio*(a1: Tpthread, a2: cint): cint {.importc, header: "<pthread.h>".}

-proc pthread_setspecific*(a1: Tpthread_key, a2: pointer): cint {.importc, header: "<pthread.h>".}

-proc pthread_spin_destroy*(a1: ptr Tpthread_spinlock): cint {.importc, header: "<pthread.h>".}

-proc pthread_spin_init*(a1: ptr Tpthread_spinlock, a2: cint): cint {.importc, header: "<pthread.h>".}

-proc pthread_spin_lock*(a1: ptr Tpthread_spinlock): cint {.importc, header: "<pthread.h>".}

-proc pthread_spin_trylock*(a1: ptr Tpthread_spinlock): cint{.importc, header: "<pthread.h>".}

-proc pthread_spin_unlock*(a1: ptr Tpthread_spinlock): cint {.importc, header: "<pthread.h>".}

+proc pthread_setschedprio*(a1: Tpthread, a2: cint): cint {.
+  importc, header: "<pthread.h>".}

+proc pthread_setspecific*(a1: Tpthread_key, a2: pointer): cint {.
+  importc, header: "<pthread.h>".}

+proc pthread_spin_destroy*(a1: ptr Tpthread_spinlock): cint {.
+  importc, header: "<pthread.h>".}

+proc pthread_spin_init*(a1: ptr Tpthread_spinlock, a2: cint): cint {.
+  importc, header: "<pthread.h>".}

+proc pthread_spin_lock*(a1: ptr Tpthread_spinlock): cint {.
+  importc, header: "<pthread.h>".}

+proc pthread_spin_trylock*(a1: ptr Tpthread_spinlock): cint{.
+  importc, header: "<pthread.h>".}

+proc pthread_spin_unlock*(a1: ptr Tpthread_spinlock): cint {.
+  importc, header: "<pthread.h>".}

 proc pthread_testcancel*() {.importc, header: "<pthread.h>".}

 

 

@@ -1555,7 +1959,8 @@ proc execl*(a1, a2: cstring): cint {.varargs, importc, header: "<unistd.h>".}
 proc execle*(a1, a2: cstring): cint {.varargs, importc, header: "<unistd.h>".}

 proc execlp*(a1, a2: cstring): cint {.varargs, importc, header: "<unistd.h>".}

 proc execv*(a1: cstring, a2: cstringArray): cint {.importc, header: "<unistd.h>".}

-proc execve*(a1: cstring, a2, a3: cstringArray): cint {.importc, header: "<unistd.h>".}

+proc execve*(a1: cstring, a2, a3: cstringArray): cint {.
+  importc, header: "<unistd.h>".}

 proc execvp*(a1: cstring, a2: cstringArray): cint {.importc, header: "<unistd.h>".}

 proc fchown*(a1: cint, a2: Tuid, a3: Tgid): cint {.importc, header: "<unistd.h>".}

 proc fchdir*(a1: cint): cint {.importc, header: "<unistd.h>".}

@@ -1569,13 +1974,15 @@ proc getegid*(): TGid {.importc, header: "<unistd.h>".}
 proc geteuid*(): TUid {.importc, header: "<unistd.h>".}

 proc getgid*(): TGid {.importc, header: "<unistd.h>".}

 

-proc getgroups*(a1: cint, a2: ptr array[0..255, Tgid]): cint {.importc, header: "<unistd.h>".}

+proc getgroups*(a1: cint, a2: ptr array[0..255, Tgid]): cint {.
+  importc, header: "<unistd.h>".}

 proc gethostid*(): int {.importc, header: "<unistd.h>".}

 proc gethostname*(a1: cstring, a2: int): cint {.importc, header: "<unistd.h>".}

 proc getlogin*(): cstring {.importc, header: "<unistd.h>".}

 proc getlogin_r*(a1: cstring, a2: int): cint {.importc, header: "<unistd.h>".}

 

-proc getopt*(a1: cint, a2: cstringArray, a3: cstring): cint {.importc, header: "<unistd.h>".}

+proc getopt*(a1: cint, a2: cstringArray, a3: cstring): cint {.
+  importc, header: "<unistd.h>".}

 proc getpgid*(a1: Tpid): Tpid {.importc, header: "<unistd.h>".}

 proc getpgrp*(): Tpid {.importc, header: "<unistd.h>".}

 proc getpid*(): Tpid {.importc, header: "<unistd.h>".}

@@ -1594,8 +2001,10 @@ proc pathconf*(a1: cstring, a2: cint): int {.importc, header: "<unistd.h>".}
 

 proc pause*(): cint {.importc, header: "<unistd.h>".}

 proc pipe*(a: array[0..1, cint]): cint {.importc, header: "<unistd.h>".}

-proc pread*(a1: cint, a2: pointer, a3: int, a4: Toff): int {.importc, header: "<unistd.h>".}

-proc pwrite*(a1: cint, a2: pointer, a3: int, a4: Toff): int {.importc, header: "<unistd.h>".}

+proc pread*(a1: cint, a2: pointer, a3: int, a4: Toff): int {.
+  importc, header: "<unistd.h>".}

+proc pwrite*(a1: cint, a2: pointer, a3: int, a4: Toff): int {.
+  importc, header: "<unistd.h>".}

 proc read*(a1: cint, a2: pointer, a3: int): int {.importc, header: "<unistd.h>".}

 proc readlink*(a1, a2: cstring, a3: int): int {.importc, header: "<unistd.h>".}

 

@@ -1619,7 +2028,8 @@ proc tcgetpgrp*(a1: cint): tpid {.importc, header: "<unistd.h>".}
 proc tcsetpgrp*(a1: cint, a2: Tpid): cint {.importc, header: "<unistd.h>".}

 proc truncate*(a1: cstring, a2: Toff): cint {.importc, header: "<unistd.h>".}

 proc ttyname*(a1: cint): cstring {.importc, header: "<unistd.h>".}

-proc ttyname_r*(a1: cint, a2: cstring, a3: int): cint {.importc, header: "<unistd.h>".}

+proc ttyname_r*(a1: cint, a2: cstring, a3: int): cint {.
+  importc, header: "<unistd.h>".}

 proc ualarm*(a1, a2: Tuseconds): Tuseconds {.importc, header: "<unistd.h>".}

 proc unlink*(a1: cstring): cint {.importc, header: "<unistd.h>".}

 proc usleep*(a1: Tuseconds): cint {.importc, header: "<unistd.h>".}

@@ -1628,19 +2038,25 @@ proc write*(a1: cint, a2: pointer, a3: int): int {.importc, header: "<unistd.h>"
 

 proc sem_close*(a1: ptr Tsem): cint {.importc, header: "<semaphore.h>".}

 proc sem_destroy*(a1: ptr Tsem): cint {.importc, header: "<semaphore.h>".}

-proc sem_getvalue*(a1: ptr Tsem, a2: var cint): cint {.importc, header: "<semaphore.h>".}

-proc sem_init*(a1: ptr Tsem, a2: cint, a3: cint): cint {.importc, header: "<semaphore.h>".}

-proc sem_open*(a1: cstring, a2: cint): ptr TSem {.varargs, importc, header: "<semaphore.h>".}

+proc sem_getvalue*(a1: ptr Tsem, a2: var cint): cint {.
+  importc, header: "<semaphore.h>".}

+proc sem_init*(a1: ptr Tsem, a2: cint, a3: cint): cint {.
+  importc, header: "<semaphore.h>".}

+proc sem_open*(a1: cstring, a2: cint): ptr TSem {.
+  varargs, importc, header: "<semaphore.h>".}

 proc sem_post*(a1: ptr Tsem): cint {.importc, header: "<semaphore.h>".}

-proc sem_timedwait*(a1: ptr Tsem, a2: ptr Ttimespec): cint {.importc, header: "<semaphore.h>".}

+proc sem_timedwait*(a1: ptr Tsem, a2: ptr Ttimespec): cint {.
+  importc, header: "<semaphore.h>".}

 proc sem_trywait*(a1: ptr Tsem): cint {.importc, header: "<semaphore.h>".}

 proc sem_unlink*(a1: cstring): cint {.importc, header: "<semaphore.h>".}

 proc sem_wait*(a1: ptr Tsem): cint {.importc, header: "<semaphore.h>".}

 

 proc ftok*(a1: cstring, a2: cint): Tkey {.importc, header: "<sys/ipc.h>".}

 

-proc statvfs*(a1: cstring, a2: var Tstatvfs): cint {.importc, header: "<sys/statvfs.h>".}

-proc fstatvfs*(a1: cint, a2: var Tstatvfs): cint {.importc, header: "<sys/statvfs.h>".}

+proc statvfs*(a1: cstring, a2: var Tstatvfs): cint {.
+  importc, header: "<sys/statvfs.h>".}

+proc fstatvfs*(a1: cint, a2: var Tstatvfs): cint {.
+  importc, header: "<sys/statvfs.h>".}

 

 proc chmod*(a1: cstring, a2: TMode): cint {.importc, header: "<sys/stat.h>".}

 proc fchmod*(a1: cint, a2: TMode): cint {.importc, header: "<sys/stat.h>".}

@@ -1648,7 +2064,8 @@ proc fstat*(a1: cint, a2: var Tstat): cint {.importc, header: "<sys/stat.h>".}
 proc lstat*(a1: cstring, a2: var Tstat): cint {.importc, header: "<sys/stat.h>".}

 proc mkdir*(a1: cstring, a2: TMode): cint {.importc, header: "<sys/stat.h>".}

 proc mkfifo*(a1: cstring, a2: TMode): cint {.importc, header: "<sys/stat.h>".}

-proc mknod*(a1: cstring, a2: TMode, a3: Tdev): cint {.importc, header: "<sys/stat.h>".}

+proc mknod*(a1: cstring, a2: TMode, a3: Tdev): cint {.
+  importc, header: "<sys/stat.h>".}

 proc stat*(a1: cstring, a2: var Tstat): cint {.importc, header: "<sys/stat.h>".}

 proc umask*(a1: Tmode): TMode {.importc, header: "<sys/stat.h>".}

 

@@ -1679,30 +2096,40 @@ proc S_TYPEISTMO*(buf: var TStat): bool {.importc, header: "<sys/stat.h>".}
   

 proc mlock*(a1: pointer, a2: int): cint {.importc, header: "<sys/mman.h>".}

 proc mlockall*(a1: cint): cint {.importc, header: "<sys/mman.h>".}

-proc mmap*(a1: pointer, a2: int, a3, a4, a5: cint, a6: Toff): pointer {.importc, header: "<sys/mman.h>".}

-proc mprotect*(a1: pointer, a2: int, a3: cint): cint {.importc, header: "<sys/mman.h>".}

+proc mmap*(a1: pointer, a2: int, a3, a4, a5: cint, a6: Toff): pointer {.
+  importc, header: "<sys/mman.h>".}

+proc mprotect*(a1: pointer, a2: int, a3: cint): cint {.
+  importc, header: "<sys/mman.h>".}

 proc msync*(a1: pointer, a2: int, a3: cint): cint {.importc, header: "<sys/mman.h>".}

 proc munlock*(a1: pointer, a2: int): cint {.importc, header: "<sys/mman.h>".}

 proc munlockall*(): cint {.importc, header: "<sys/mman.h>".}

 proc munmap*(a1: pointer, a2: int): cint {.importc, header: "<sys/mman.h>".}

-proc posix_madvise*(a1: pointer, a2: int, a3: cint): cint {.importc, header: "<sys/mman.h>".}

+proc posix_madvise*(a1: pointer, a2: int, a3: cint): cint {.
+  importc, header: "<sys/mman.h>".}

 proc posix_mem_offset*(a1: pointer, a2: int, a3: var Toff,

            a4: var int, a5: var cint): cint {.importc, header: "<sys/mman.h>".}

-proc posix_typed_mem_get_info*(a1: cint, a2: var Tposix_typed_mem_info): cint {.importc, header: "<sys/mman.h>".}

-proc posix_typed_mem_open*(a1: cstring, a2, a3: cint): cint {.importc, header: "<sys/mman.h>".}

-proc shm_open*(a1: cstring, a2: cint, a3: Tmode): cint {.importc, header: "<sys/mman.h>".}

+proc posix_typed_mem_get_info*(a1: cint, 
+  a2: var Tposix_typed_mem_info): cint {.importc, header: "<sys/mman.h>".}

+proc posix_typed_mem_open*(a1: cstring, a2, a3: cint): cint {.
+  importc, header: "<sys/mman.h>".}

+proc shm_open*(a1: cstring, a2: cint, a3: Tmode): cint {.
+  importc, header: "<sys/mman.h>".}

 proc shm_unlink*(a1: cstring): cint {.importc, header: "<sys/mman.h>".}

 

 proc asctime*(a1: var ttm): cstring{.importc, header: "<time.h>".}

 

 proc asctime_r*(a1: var ttm, a2: cstring): cstring {.importc, header: "<time.h>".}

 proc clock*(): Tclock {.importc, header: "<time.h>".}

-proc clock_getcpuclockid*(a1: tpid, a2: var Tclockid): cint {.importc, header: "<time.h>".}

-proc clock_getres*(a1: Tclockid, a2: var Ttimespec): cint {.importc, header: "<time.h>".}

-proc clock_gettime*(a1: Tclockid, a2: var Ttimespec): cint {.importc, header: "<time.h>".}

+proc clock_getcpuclockid*(a1: tpid, a2: var Tclockid): cint {.
+  importc, header: "<time.h>".}

+proc clock_getres*(a1: Tclockid, a2: var Ttimespec): cint {.
+  importc, header: "<time.h>".}

+proc clock_gettime*(a1: Tclockid, a2: var Ttimespec): cint {.
+  importc, header: "<time.h>".}

 proc clock_nanosleep*(a1: Tclockid, a2: cint, a3: var Ttimespec,

                a4: var Ttimespec): cint {.importc, header: "<time.h>".}

-proc clock_settime*(a1: Tclockid, a2: var Ttimespec): cint {.importc, header: "<time.h>".}

+proc clock_settime*(a1: Tclockid, a2: var Ttimespec): cint {.
+  importc, header: "<time.h>".}

 

 proc ctime*(a1: var Ttime): cstring {.importc, header: "<time.h>".}

 proc ctime_r*(a1: var Ttime, a2: cstring): cstring {.importc, header: "<time.h>".}

@@ -1722,7 +2149,8 @@ proc time*(a1: var Ttime): ttime {.importc, header: "<time.h>".}
 proc timer_create*(a1: var Tclockid, a2: var Tsigevent,

                a3: var Ttimer): cint {.importc, header: "<time.h>".}

 proc timer_delete*(a1: var Ttimer): cint {.importc, header: "<time.h>".}

-proc timer_gettime*(a1: Ttimer, a2: var Titimerspec): cint {.importc, header: "<time.h>".}

+proc timer_gettime*(a1: Ttimer, a2: var Titimerspec): cint {.
+  importc, header: "<time.h>".}

 proc timer_getoverrun*(a1: Ttimer): cint {.importc, header: "<time.h>".}

 proc timer_settime*(a1: Ttimer, a2: cint, a3: var Titimerspec,

                a4: var titimerspec): cint {.importc, header: "<time.h>".}

@@ -1730,16 +2158,21 @@ proc tzset*() {.importc, header: "<time.h>".}
 

 

 proc wait*(a1: var cint): tpid {.importc, header: "<sys/wait.h>".}

-proc waitid*(a1: cint, a2: tid, a3: var Tsiginfo, a4: cint): cint {.importc, header: "<sys/wait.h>".}

-proc waitpid*(a1: tpid, a2: var cint, a3: cint): tpid  {.importc, header: "<sys/wait.h>".}

+proc waitid*(a1: cint, a2: tid, a3: var Tsiginfo, a4: cint): cint {.
+  importc, header: "<sys/wait.h>".}

+proc waitpid*(a1: tpid, a2: var cint, a3: cint): tpid  {.
+  importc, header: "<sys/wait.h>".}

 

-proc bsd_signal*(a1: cint, a2: proc (x: pointer) {.noconv.}) {.importc, header: "<signal.h>".}

+proc bsd_signal*(a1: cint, a2: proc (x: pointer) {.noconv.}) {.
+  importc, header: "<signal.h>".}

 proc kill*(a1: Tpid, a2: cint): cint {.importc, header: "<signal.h>".}

 proc killpg*(a1: Tpid, a2: cint): cint {.importc, header: "<signal.h>".}

 proc pthread_kill*(a1: tpthread, a2: cint): cint {.importc, header: "<signal.h>".}

-proc pthread_sigmask*(a1: cint, a2, a3: var Tsigset): cint {.importc, header: "<signal.h>".}

+proc pthread_sigmask*(a1: cint, a2, a3: var Tsigset): cint {.
+  importc, header: "<signal.h>".}

 proc `raise`*(a1: cint): cint {.importc, header: "<signal.h>".}

-proc sigaction*(a1: cint, a2, a3: var Tsigaction): cint {.importc, header: "<signal.h>".}

+proc sigaction*(a1: cint, a2, a3: var Tsigaction): cint {.
+  importc, header: "<signal.h>".}

 proc sigaddset*(a1: var Tsigset, a2: cint): cint {.importc, header: "<signal.h>".}

 proc sigaltstack*(a1, a2: var Tstack): cint {.importc, header: "<signal.h>".}

 proc sigdelset*(a1: var Tsigset, a2: cint): cint {.importc, header: "<signal.h>".}

@@ -1749,36 +2182,47 @@ proc sighold*(a1: cint): cint {.importc, header: "<signal.h>".}
 proc sigignore*(a1: cint): cint {.importc, header: "<signal.h>".}

 proc siginterrupt*(a1, a2: cint): cint {.importc, header: "<signal.h>".}

 proc sigismember*(a1: var Tsigset, a2: cint): cint {.importc, header: "<signal.h>".}

-proc signal*(a1: cint, a2: proc (x: cint) {.noconv.}) {.importc, header: "<signal.h>".}

+proc signal*(a1: cint, a2: proc (x: cint) {.noconv.}) {.
+  importc, header: "<signal.h>".}

 proc sigpause*(a1: cint): cint {.importc, header: "<signal.h>".}

 proc sigpending*(a1: var tsigset): cint {.importc, header: "<signal.h>".}

-proc sigprocmask*(a1: cint, a2, a3: var tsigset): cint {.importc, header: "<signal.h>".}

-proc sigqueue*(a1: tpid, a2: cint, a3: Tsigval): cint {.importc, header: "<signal.h>".}

+proc sigprocmask*(a1: cint, a2, a3: var tsigset): cint {.
+  importc, header: "<signal.h>".}

+proc sigqueue*(a1: tpid, a2: cint, a3: Tsigval): cint {.
+  importc, header: "<signal.h>".}

 proc sigrelse*(a1: cint): cint {.importc, header: "<signal.h>".}

 proc sigset*(a1: int, a2: proc (x: cint) {.noconv.}) {.importc, header: "<signal.h>".}

 proc sigsuspend*(a1: var Tsigset): cint {.importc, header: "<signal.h>".}

-proc sigtimedwait*(a1: var Tsigset, a2: var tsiginfo, a3: var ttimespec): cint {.importc, header: "<signal.h>".}

+proc sigtimedwait*(a1: var Tsigset, a2: var tsiginfo, 
+                   a3: var ttimespec): cint {.importc, header: "<signal.h>".}

 proc sigwait*(a1: var Tsigset, a2: var cint): cint {.importc, header: "<signal.h>".}

-proc sigwaitinfo*(a1: var Tsigset, a2: var tsiginfo): cint {.importc, header: "<signal.h>".}

+proc sigwaitinfo*(a1: var Tsigset, a2: var tsiginfo): cint {.
+  importc, header: "<signal.h>".}

 

 

 proc catclose*(a1: Tnl_catd): cint {.importc, header: "<nl_types.h>".}

-proc catgets*(a1: Tnl_catd, a2, a3: cint, a4: cstring): cstring {.importc, header: "<nl_types.h>".}

+proc catgets*(a1: Tnl_catd, a2, a3: cint, a4: cstring): cstring {.
+  importc, header: "<nl_types.h>".}

 proc catopen*(a1: cstring, a2: cint): Tnl_catd {.importc, header: "<nl_types.h>".}

 

 proc sched_get_priority_max*(a1: cint): cint {.importc, header: "<sched.h>".}

 proc sched_get_priority_min*(a1: cint): cint {.importc, header: "<sched.h>".}

-proc sched_getparam*(a1: tpid, a2: var Tsched_param): cint {.importc, header: "<sched.h>".}

+proc sched_getparam*(a1: tpid, a2: var Tsched_param): cint {.
+  importc, header: "<sched.h>".}

 proc sched_getscheduler*(a1: tpid): cint {.importc, header: "<sched.h>".}

-proc sched_rr_get_interval*(a1: tpid, a2: var Ttimespec): cint {.importc, header: "<sched.h>".}

-proc sched_setparam*(a1: tpid, a2: var Tsched_param): cint {.importc, header: "<sched.h>".}

-proc sched_setscheduler*(a1: tpid, a2: cint, a3: var tsched_param): cint {.importc, header: "<sched.h>".}

+proc sched_rr_get_interval*(a1: tpid, a2: var Ttimespec): cint {.
+  importc, header: "<sched.h>".}

+proc sched_setparam*(a1: tpid, a2: var Tsched_param): cint {.
+  importc, header: "<sched.h>".}

+proc sched_setscheduler*(a1: tpid, a2: cint, a3: var tsched_param): cint {.
+  importc, header: "<sched.h>".}

 proc sched_yield*(): cint {.importc, header: "<sched.h>".}

 

 proc strerror*(errnum: cint): cstring {.importc, header: "<string.h>".}

 

 proc FD_CLR*(a1: cint, a2: var Tfd_set) {.importc, header: "<sys/select.h>".}

-proc FD_ISSET*(a1: cint, a2: var Tfd_set): cint {.importc, header: "<sys/select.h>".}

+proc FD_ISSET*(a1: cint, a2: var Tfd_set): cint {.
+  importc, header: "<sys/select.h>".}

 proc FD_SET*(a1: cint, a2: var Tfd_set) {.importc, header: "<sys/select.h>".}

 proc FD_ZERO*(a1: var Tfd_set) {.importc, header: "<sys/select.h>".}

 

@@ -1790,16 +2234,21 @@ proc select*(a1: cint, a2, a3, a4: var Tfd_set, a5: var ttimeval): cint {.
 when hasSpawnH:

   proc posix_spawn*(a1: var tpid, a2: cstring,

             a3: var Tposix_spawn_file_actions,

-            a4: var Tposix_spawnattr, a5, a6: cstringArray): cint {.importc, header: "<spawn.h>".}

+            a4: var Tposix_spawnattr, 
+            a5, a6: cstringArray): cint {.importc, header: "<spawn.h>".}

   proc posix_spawn_file_actions_addclose*(a1: var tposix_spawn_file_actions,

             a2: cint): cint {.importc, header: "<spawn.h>".}

   proc posix_spawn_file_actions_adddup2*(a1: var tposix_spawn_file_actions,

             a2, a3: cint): cint {.importc, header: "<spawn.h>".}

   proc posix_spawn_file_actions_addopen*(a1: var tposix_spawn_file_actions,

-            a2: cint, a3: cstring, a4: cint, a5: tmode): cint {.importc, header: "<spawn.h>".}

-  proc posix_spawn_file_actions_destroy*(a1: var tposix_spawn_file_actions): cint {.importc, header: "<spawn.h>".}

-  proc posix_spawn_file_actions_init*(a1: var tposix_spawn_file_actions): cint {.importc, header: "<spawn.h>".}

-  proc posix_spawnattr_destroy*(a1: var tposix_spawnattr): cint {.importc, header: "<spawn.h>".}

+            a2: cint, a3: cstring, a4: cint, a5: tmode): cint {.
+            importc, header: "<spawn.h>".}

+  proc posix_spawn_file_actions_destroy*(
+    a1: var tposix_spawn_file_actions): cint {.importc, header: "<spawn.h>".}

+  proc posix_spawn_file_actions_init*(
+    a1: var tposix_spawn_file_actions): cint {.importc, header: "<spawn.h>".}

+  proc posix_spawnattr_destroy*(a1: var tposix_spawnattr): cint {.
+    importc, header: "<spawn.h>".}

   proc posix_spawnattr_getsigdefault*(a1: var tposix_spawnattr,

             a2: var Tsigset): cint {.importc, header: "<spawn.h>".}

   proc posix_spawnattr_getflags*(a1: var tposix_spawnattr,

@@ -1813,15 +2262,20 @@ when hasSpawnH:
   proc posix_spawnattr_getsigmask*(a1: var tposix_spawnattr,

             a2: var tsigset): cint {.importc, header: "<spawn.h>".}

   

-  proc posix_spawnattr_init*(a1: var tposix_spawnattr): cint {.importc, header: "<spawn.h>".}

+  proc posix_spawnattr_init*(a1: var tposix_spawnattr): cint {.
+    importc, header: "<spawn.h>".}

   proc posix_spawnattr_setsigdefault*(a1: var tposix_spawnattr,

             a2: var tsigset): cint {.importc, header: "<spawn.h>".}

-  proc posix_spawnattr_setflags*(a1: var tposix_spawnattr, a2: cshort): cint {.importc, header: "<spawn.h>".}

-  proc posix_spawnattr_setpgroup*(a1: var tposix_spawnattr, a2: tpid): cint {.importc, header: "<spawn.h>".}

+  proc posix_spawnattr_setflags*(a1: var tposix_spawnattr, a2: cshort): cint {.
+    importc, header: "<spawn.h>".}

+  proc posix_spawnattr_setpgroup*(a1: var tposix_spawnattr, a2: tpid): cint {.
+    importc, header: "<spawn.h>".}

   

   proc posix_spawnattr_setschedparam*(a1: var tposix_spawnattr,

             a2: var tsched_param): cint {.importc, header: "<spawn.h>".}

-  proc posix_spawnattr_setschedpolicy*(a1: var tposix_spawnattr, a2: cint): cint {.importc, header: "<spawn.h>".}

+  proc posix_spawnattr_setschedpolicy*(a1: var tposix_spawnattr, 
+                                       a2: cint): cint {.
+                                       importc, header: "<spawn.h>".}

   proc posix_spawnattr_setsigmask*(a1: var tposix_spawnattr,

             a2: var tsigset): cint {.importc, header: "<spawn.h>".}

   proc posix_spawnp*(a1: var tpid, a2: cstring,

@@ -1830,6 +2284,149 @@ when hasSpawnH:
             a5, a6: cstringArray): cint {.importc, header: "<spawn.h>".}

 

 proc getcontext*(a1: var Tucontext): cint {.importc, header: "<ucontext.h>".}

-proc makecontext*(a1: var Tucontext, a4: proc (){.noconv.}, a3: cint) {.varargs, importc, header: "<ucontext.h>".}

+proc makecontext*(a1: var Tucontext, a4: proc (){.noconv.}, a3: cint) {.
+  varargs, importc, header: "<ucontext.h>".}

 proc setcontext*(a1: var Tucontext): cint {.importc, header: "<ucontext.h>".}

 proc swapcontext*(a1, a2: var Tucontext): cint {.importc, header: "<ucontext.h>".}

+proc if_nametoindex*(a1: cstring): cint {.importc, header: "<net/if.h>".}
+proc if_indextoname*(a1: cint, a2: cstring): cstring {.
+  importc, header: "<net/if.h>".}
+proc if_nameindex*(): ptr Tif_nameindex {.importc, header: "<net/if.h>".}
+proc if_freenameindex*(a1: ptr Tif_nameindex) {.importc, header: "<net/if.h>".}
+
+proc readv*(a1: cint, a2: ptr TIOVec, a3: cint): int {.
+  importc, header: "<sys/uio.h>".}
+proc writev*(a1: cint, a2: ptr TIOVec, a3: cint): int {.
+  importc, header: "<sys/uio.h>".}
+
+proc CMSG_DATA*(cmsg: ptr Tcmsghdr): cstring {.
+  importc, header: "<sys/socket.h>".}
+
+proc CMSG_NXTHDR*(mhdr: ptr TMsgHdr, cmsg: ptr TCMsgHdr): ptr TCmsgHdr {.
+  importc, header: "<sys/socket.h>".}
+
+proc CMSG_FIRSTHDR*(mhdr: ptr TMsgHdr): ptr TCMsgHdr {.
+  importc, header: "<sys/socket.h>".}
+
+proc accept*(a1: cint, a2: ptr Tsockaddr, a3: ptr Tsocklen): cint {.
+  importc, header: "<sys/socket.h>".}
+
+proc bind*(a1: cint, a2: ptr Tsockaddr, a3: Tsocklen): cint {.
+  importc, header: "<sys/socket.h>".}
+  
+proc connect*(a1: cint, a2: ptr Tsockaddr, a3: Tsocklen): cint {.
+  importc, header: "<sys/socket.h>".}
+proc getpeername*(a1: cint, a2: ptr Tsockaddr, a3: ptr Tsocklen): cint {.
+  importc, header: "<sys/socket.h>".}
+proc getsockname*(a1: cint, a2: ptr Tsockaddr, a3: ptr Tsocklen): cint {.
+  importc, header: "<sys/socket.h>".}
+
+proc getsockopt*(a1, a2, a3: cint, a4: pointer, a5: ptr Tsocklen): cint {.
+  importc, header: "<sys/socket.h>".}
+
+proc listen*(a1, a2: cint): cint {.
+  importc, header: "<sys/socket.h>".}
+proc recv*(a1: cint, a2: pointer, a3: int, a4: cint): int {.
+  importc, header: "<sys/socket.h>".}
+proc recvfrom*(a1: cint, a2: pointer, a3: int, a4: cint,
+        a5: ptr Tsockaddr, a6: ptr Tsocklen): int {.
+  importc, header: "<sys/socket.h>".}
+proc recvmsg*(a1: cint, a2: ptr Tmsghdr, a3: cint): int {.
+  importc, header: "<sys/socket.h>".}
+proc send*(a1: cint, a2: pointer, a3: int, a4: cint): int {.
+  importc, header: "<sys/socket.h>".}
+proc sendmsg*(a1: cint, a2: ptr Tmsghdr, a3: cint): int {.
+  importc, header: "<sys/socket.h>".}
+proc sendto*(a1: cint, a2: pointer, a3: int, a4: cint, a5: ptr Tsockaddr,
+             a6: Tsocklen): int {.
+  importc, header: "<sys/socket.h>".}
+proc setsockopt*(a1, a2, a3: cint, a4: pointer, a5: Tsocklen): cint {.
+  importc, header: "<sys/socket.h>".}
+proc shutdown*(a1, a2: cint): cint {.
+  importc, header: "<sys/socket.h>".}
+proc socket*(a1, a2, a3: cint): cint {.
+  importc, header: "<sys/socket.h>".}
+proc sockatmark*(a1: cint): cint {.
+  importc, header: "<sys/socket.h>".}
+proc socketpair*(a1, a2, a3: cint, a4: var array[0..1, cint]): cint {.
+  importc, header: "<sys/socket.h>".}
+
+proc IN6_IS_ADDR_UNSPECIFIED* (a1: ptr TIn6Addr): cint {.
+  importc, header: "<netinet/in.h>".}
+  ## Unspecified address.
+proc IN6_IS_ADDR_LOOPBACK* (a1: ptr TIn6Addr): cint {.
+  importc, header: "<netinet/in.h>".}
+  ## Loopback address.
+proc IN6_IS_ADDR_MULTICAST* (a1: ptr TIn6Addr): cint {.
+  importc, header: "<netinet/in.h>".}
+  ## Multicast address.
+proc IN6_IS_ADDR_LINKLOCAL* (a1: ptr TIn6Addr): cint {.
+  importc, header: "<netinet/in.h>".}
+  ## Unicast link-local address.
+proc IN6_IS_ADDR_SITELOCAL* (a1: ptr TIn6Addr): cint {.
+  importc, header: "<netinet/in.h>".}
+  ## Unicast site-local address.
+proc IN6_IS_ADDR_V4MAPPED* (a1: ptr TIn6Addr): cint {.
+  importc, header: "<netinet/in.h>".}
+  ## IPv4 mapped address.
+proc IN6_IS_ADDR_V4COMPAT* (a1: ptr TIn6Addr): cint {.
+  importc, header: "<netinet/in.h>".}
+  ## IPv4-compatible address.
+proc IN6_IS_ADDR_MC_NODELOCAL* (a1: ptr TIn6Addr): cint {.
+  importc, header: "<netinet/in.h>".}
+  ## Multicast node-local address.
+proc IN6_IS_ADDR_MC_LINKLOCAL* (a1: ptr TIn6Addr): cint {.
+  importc, header: "<netinet/in.h>".}
+  ## Multicast link-local address.
+proc IN6_IS_ADDR_MC_SITELOCAL* (a1: ptr TIn6Addr): cint {.
+  importc, header: "<netinet/in.h>".}
+  ## Multicast site-local address.
+proc IN6_IS_ADDR_MC_ORGLOCAL* (a1: ptr TIn6Addr): cint {.
+  importc, header: "<netinet/in.h>".}
+  ## Multicast organization-local address.
+proc IN6_IS_ADDR_MC_GLOBAL* (a1: ptr TIn6Addr): cint {.
+  importc, header: "<netinet/in.h>".}
+  ## Multicast global address.
+
+proc endhostent*() {.importc, header: "<netdb.h>".}
+proc endnetent*() {.importc, header: "<netdb.h>".}
+proc endprotoent*() {.importc, header: "<netdb.h>".}
+proc endservent*() {.importc, header: "<netdb.h>".}
+proc freeaddrinfo*(a1: ptr Taddrinfo) {.importc, header: "<netdb.h>".}
+
+proc gai_strerror*(a1: cint): cstring {.importc, header: "<netdb.h>".}
+
+proc getaddrinfo*(a1, a2: cstring, a3: ptr TAddrInfo, 
+                  a4: var ptr TAddrInfo): cint {.importc, header: "<netdb.h>".}
+                  
+proc gethostbyaddr*(a1: pointer, a2: Tsocklen, a3: cint): ptr THostent {.
+                    importc, header: "<netdb.h>".}
+proc gethostbyname*(a1: cstring): ptr THostent {.importc, header: "<netdb.h>".}
+proc gethostent*(): ptr THostent {.importc, header: "<netdb.h>".}
+
+proc getnameinfo*(a1: ptr Tsockaddr, a2: Tsocklen,
+                  a3: cstring, a4: Tsocklen, a5: cstring,
+                  a6: Tsocklen, a7: cint): cint {.importc, header: "<netdb.h>".}
+
+proc getnetbyaddr*(a1: int32, a2: cint): ptr TNetent {.importc, header: "<netdb.h>".}
+proc getnetbyname*(a1: cstring): ptr TNetent {.importc, header: "<netdb.h>".}
+proc getnetent*(): ptr TNetent {.importc, header: "<netdb.h>".}
+
+proc getprotobyname*(a1: cstring): ptr TProtoent {.importc, header: "<netdb.h>".}
+proc getprotobynumber*(a1: cint): ptr TProtoent {.importc, header: "<netdb.h>".}
+proc getprotoent*(): ptr TProtoent {.importc, header: "<netdb.h>".}
+
+proc getservbyname*(a1, a2: cstring): ptr TServent {.importc, header: "<netdb.h>".}
+proc getservbyport*(a1: cint, a2: cstring): ptr TServent {.
+  importc, header: "<netdb.h>".}
+proc getservent*(): ptr TServent {.importc, header: "<netdb.h>".}
+
+proc sethostent*(a1: cint) {.importc, header: "<netdb.h>".}
+proc setnetent*(a1: cint) {.importc, header: "<netdb.h>".}
+proc setprotoent*(a1: cint) {.importc, header: "<netdb.h>".}
+proc setservent*(a1: cint) {.importc, header: "<netdb.h>".}
+
+proc poll*(a1: ptr Tpollfd, a2: Tnfds, a3: int): cint {.
+  importc, header: "<poll.h>".}
+
+
diff --git a/lib/repr.nim b/lib/repr.nim
index 7f5b0d33c..35c5f9f42 100644
--- a/lib/repr.nim
+++ b/lib/repr.nim
@@ -104,17 +104,17 @@ proc reprSet(p: pointer, typ: PNimType): string {.compilerproc.} =
 type
   TReprClosure {.final.} = object # we cannot use a global variable here
                                   # as this wouldn't be thread-safe
-    marked: TCellSet
+    marked: TCellSeq
     recdepth: int       # do not recurse endless
     indent: int         # indentation
 
 proc initReprClosure(cl: var TReprClosure) =
-  CellSetInit(cl.marked)
+  Init(cl.marked)
   cl.recdepth = -1      # default is to display everything!
   cl.indent = 0
 
 proc deinitReprClosure(cl: var TReprClosure) =
-  CellSetDeinit(cl.marked)
+  Deinit(cl.marked)
 
 proc reprBreak(result: var string, cl: TReprClosure) =
   add result, "\n"
@@ -145,7 +145,6 @@ proc reprSequence(result: var string, p: pointer, typ: PNimType,
             typ.Base, cl)
   add result, "]"
 
-
 proc reprRecordAux(result: var string, p: pointer, n: ptr TNimNode,
                    cl: var TReprClosure) =
   case n.kind
@@ -172,11 +171,14 @@ proc reprRecord(result: var string, p: pointer, typ: PNimType,
 proc reprRef(result: var string, p: pointer, typ: PNimType,
              cl: var TReprClosure) =
   # we know that p is not nil here:
-  var cell = usrToCell(p)
+  when defined(boehmGC):
+    var cell = cast[PCell](p)
+  else:
+    var cell = usrToCell(p)
   add result, "ref " & reprPointer(p)
   if cell notin cl.marked:
     # only the address is shown:
-    incl(cl.marked, cell)
+    add(cl.marked, cell)
     add result, " --> "
     reprAux(result, p, typ.base, cl)
 
diff --git a/lib/streams.nim b/lib/streams.nim
index f09b91625..238cba4ec 100644
--- a/lib/streams.nim
+++ b/lib/streams.nim
@@ -100,7 +100,7 @@ proc readLine*(s: PStream): string =
 type
   PStringStream* = ref TStringStream ## a stream that encapsulates a string
   TStringStream* = object of TStream
-    data: string
+    data*: string
     pos: int
     
 proc ssAtEnd(s: PStringStream): bool = 
diff --git a/lib/strtabs.nim b/lib/strtabs.nim
index e6abaee6f..10cd0b933 100644
--- a/lib/strtabs.nim
+++ b/lib/strtabs.nim
@@ -16,10 +16,10 @@ import
   os, hashes, strutils
 
 type
-  TStringTableMode* = enum    # describes the tables operation mode
-    modeCaseSensitive,        # the table is case sensitive
-    modeCaseInsensitive,      # the table is case insensitive
-    modeStyleInsensitive      # the table is style insensitive
+  TStringTableMode* = enum    ## describes the tables operation mode
+    modeCaseSensitive,        ## the table is case sensitive
+    modeCaseInsensitive,      ## the table is case insensitive
+    modeStyleInsensitive      ## the table is style insensitive
   TKeyValuePair = tuple[key, val: string]
   TKeyValuePairSeq = seq[TKeyValuePair]
   TStringTable* = object of TObject
@@ -61,14 +61,14 @@ iterator pairs*(t: PStringTable): tuple[key, value: string] =
       yield (t.data[h].key, t.data[h].val)
 
 type
-  TFormatFlag* = enum         # flags for the `%` operator
-    useEnvironment,           # use environment variable if the ``$key``
-                              # is not found in the table
-    useEmpty,                 # use the empty string as a default, thus it
-                              # won't throw an exception if ``$key`` is not
-                              # in the table
-    useKey                    # do not replace ``$key`` if it is not found
-                              # in the table (or in the environment)
+  TFormatFlag* = enum         ## flags for the `%` operator
+    useEnvironment,           ## use environment variable if the ``$key``
+                              ## is not found in the table
+    useEmpty,                 ## use the empty string as a default, thus it
+                              ## won't throw an exception if ``$key`` is not
+                              ## in the table
+    useKey                    ## do not replace ``$key`` if it is not found
+                              ## in the table (or in the environment)
 
 proc `%`*(f: string, t: PStringTable, flags: set[TFormatFlag] = {}): string
   ## The `%` operator for string tables.
@@ -110,9 +110,7 @@ proc mustRehash(length, counter: int): bool =
   result = (length * 2 < counter * 3) or (length - counter < 4)
 
 proc nextTry(h, maxHash: THash): THash =
-  result = ((5 * h) + 1) and maxHash # For any initial h in range(maxHash), repeating that maxHash times
-                                     # generates each int in range(maxHash) exactly once (see any text on
-                                     # random-number generation for proof).
+  result = ((5 * h) + 1) and maxHash
 
 proc RawGet(t: PStringTable, key: string): int =
   var h: THash
@@ -166,35 +164,30 @@ proc getValue(t: PStringTable, flags: set[TFormatFlag], key: string): string =
   if hasKey(t, key): return t[key]
   if useEnvironment in flags: result = os.getEnv(key)
   else: result = ""
-  if (result == ""):
+  if result.len == 0:
     if useKey in flags: result = '$' & key
     elif not (useEmpty in flags): raiseFormatException(key)
 
 proc `%`(f: string, t: PStringTable, flags: set[TFormatFlag] = {}): string =
   const
     PatternChars = {'a'..'z', 'A'..'Z', '0'..'9', '_', '\x80'..'\xFF'}
-  var
-    i, j: int
-    key: string
   result = ""
-  i = strStart
-  while i <= len(f) + strStart - 1:
+  var i = 0
+  while i < len(f):
     if f[i] == '$':
-      case f[i + 1]
+      case f[i+1]
       of '$':
         add(result, '$')
         inc(i, 2)
       of '{':
-        j = i + 1
-        while (j <= len(f) + strStart - 1) and (f[j] != '}'): inc(j)
-        key = copy(f, i + 2, j - 1)
-        result = result & getValue(t, flags, key)
+        var j = i + 1
+        while j < f.len and f[j] != '}': inc(j)
+        add(result, getValue(t, flags, copy(f, i+2, j-1)))
         i = j + 1
       of 'a'..'z', 'A'..'Z', '\x80'..'\xFF', '_':
-        j = i + 1
-        while (j <= len(f) + strStart - 1) and (f[j] in PatternChars): inc(j)
-        key = copy(f, i+1, j - 1)
-        result = result & getValue(t, flags, key)
+        var j = i + 1
+        while j < f.len and f[j] in PatternChars: inc(j)
+        add(result, getValue(t, flags, copy(f, i+1, j-1)))
         i = j
       else:
         add(result, f[i])
diff --git a/lib/strutils.nim b/lib/strutils.nim
index 6189c6a88..e3a412053 100644
--- a/lib/strutils.nim
+++ b/lib/strutils.nim
@@ -1,7 +1,7 @@
 #
 #
 #            Nimrod's Runtime Library
-#        (c) Copyright 2006 Andreas Rumpf
+#        (c) Copyright 2009 Andreas Rumpf
 #
 #    See the file "copying.txt", included in this
 #    distribution, for details about the copyright.
@@ -9,8 +9,7 @@
 
 ## This module contains various string utility routines.
 ## See the module `regexprs` for regular expression support.
-## All the routines here are avaiable for the EMCAScript target
-## too!
+## All the routines here are avaiable for the EMCAScript target too!
 
 {.deadCodeElim: on.}
 
@@ -33,13 +32,66 @@ type
 const
   Whitespace* = {' ', '\t', '\v', '\r', '\l', '\f'}
     ## All the characters that count as whitespace.
+    
+  Letters* = {'A'..'Z', 'a'..'z'}
+    ## the set of letters
+  
+  Digits* = {'0'..'9'}
+    ## the set of digits
+  
+  IdentChars* = {'a'..'z', 'A'..'Z', '0'..'9', '_'}
+    ## the set of characters an identifier can consist of
+  
+  IdentStartChars* = {'a'..'z', 'A'..'Z', '_'}
+    ## the set of characters an identifier can start with
 
   strStart* = 0 # this is only for bootstraping
                 # XXX: remove this someday
   nl* = "\n"    # this is only for bootstraping XXX: remove this somehow
 
-proc strip*(s: string): string {.noSideEffect.}
-  ## Strips leading and trailing whitespace from `s`.
+proc `%` *(formatstr: string, a: openarray[string]): string {.noSideEffect.}
+  ## The `substitution`:idx: operator performs string substitutions in
+  ## `formatstr` and returns a modified `formatstr`. This is often called
+  ## `string interpolation`:idx:.
+  ##
+  ## This is best explained by an example:
+  ##
+  ## .. code-block:: nimrod
+  ##   "$1 eats $2." % ["The cat", "fish"]
+  ##
+  ## Results in:
+  ##
+  ## .. code-block:: nimrod
+  ##   "The cat eats fish."
+  ##
+  ## The substitution variables (the thing after the ``$``)
+  ## are enumerated from 1 to 9.
+  ## Substitution variables can also be words (that is
+  ## ``[A-Za-z_]+[A-Za-z0-9_]*``) in which case the arguments in `a` with even
+  ## indices are keys and with odd indices are the corresponding values.
+  ## An example:
+  ##
+  ## .. code-block:: nimrod
+  ##   "$animal eats $food." % ["animal", "The cat", "food", "fish"]
+  ##
+  ## Results in:
+  ##
+  ## .. code-block:: nimrod
+  ##   "The cat eats fish."
+  ##
+  ## The variables are compared with `cmpIgnoreStyle`. `EInvalidValue` is
+  ## raised if an ill-formed format string has been passed to the `%` operator.
+
+proc `%` *(formatstr, a: string): string {.noSideEffect.}
+  ## This is the same as ``formatstr % [a]``.
+
+proc addf*(s: var string, formatstr: string, a: openarray[string])
+  ## The same as ``add(s, formatstr % a)``, but more efficient.
+
+proc strip*(s: string, leading = true, trailing = true): string {.noSideEffect.}
+  ## Strips whitespace from `s` and returns the resulting string.
+  ## If `leading` is true, leading whitespace is stripped.
+  ## If `trailing` is true, trailing whitespace is stripped.
 
 proc toLower*(s: string): string {.noSideEffect.}
   ## Converts `s` into lower case. This works only for the letters A-Z.
@@ -65,15 +117,36 @@ proc normalize*(s: string): string {.noSideEffect.}
   ## Normalizes the string `s`. That means to convert it to lower case and
   ## remove any '_'. This is needed for Nimrod identifiers for example.
 
-proc findSubStr*(sub, s: string, start: int = 0): int {.noSideEffect.}
+proc findSubStr*(sub, s: string, start: int = 0): int {.
+  noSideEffect, deprecated.}
+  ## Searches for `sub` in `s` starting at position `start`. Searching is
+  ## case-sensitive. If `sub` is not in `s`, -1 is returned.
+  ## **Deprecated since version 0.7.6**: Use `find` instead, but beware that
+  ## this has a different parameter order.
+
+proc findSubStr*(sub: char, s: string, start: int = 0): int {.
+  noSideEffect, deprecated.}
+  ## Searches for `sub` in `s` starting at position `start`. Searching is
+  ## case-sensitive. If `sub` is not in `s`, -1 is returned.
+  ## **Deprecated since version 0.7.6**: Use `find` instead, but beware that
+  ## this has a different parameter order.
+
+proc findChars*(chars: set[char], s: string, start: int = 0): int {.
+  noSideEffect, deprecated.}
+  ## Searches for `chars` in `s` starting at position `start`. If `s` contains
+  ## none of the characters in `chars`, -1 is returned.
+  ## **Deprecated since version 0.7.6**: Use `find` instead, but beware that
+  ## this has a different parameter order.
+
+proc find*(s, sub: string, start: int = 0): int {.noSideEffect.}
   ## Searches for `sub` in `s` starting at position `start`. Searching is
   ## case-sensitive. If `sub` is not in `s`, -1 is returned.
 
-proc findSubStr*(sub: char, s: string, start: int = 0): int {.noSideEffect.}
+proc find*(s: string, sub: char, start: int = 0): int {.noSideEffect.}
   ## Searches for `sub` in `s` starting at position `start`. Searching is
   ## case-sensitive. If `sub` is not in `s`, -1 is returned.
 
-proc findChars*(chars: set[char], s: string, start: int = 0): int {.noSideEffect.}
+proc find*(s: string, chars: set[char], start: int = 0): int {.noSideEffect.}
   ## Searches for `chars` in `s` starting at position `start`. If `s` contains
   ## none of the characters in `chars`, -1 is returned.
 
@@ -95,15 +168,15 @@ iterator split*(s: string, seps: set[char] = Whitespace): string =
   ## Splits the string `s` into substrings.
   ##
   ## Substrings are separated by a substring containing only `seps`.
-  ## The seperator substrings are not returned in `sub`, nor are they part
-  ## of `sub`.
-  ## Examples::
+  ## Examples:
   ##
+  ## .. code-block:: nimrod
   ##   for word in split("  this is an  example  "):
   ##     writeln(stdout, word)
   ##
-  ## Results in::
+  ## Results in:
   ##
+  ## .. code-block:: nimrod
   ##   "this"
   ##   "is"
   ##   "an"
@@ -123,18 +196,54 @@ iterator split*(s: string, seps: set[char] = Whitespace): string =
     while last < len(s) and s[last] not_in seps: inc(last) # BUGFIX!
     yield copy(s, first, last-1)
 
+iterator split*(s: string, sep: char): string =
+  ## Splits the string `s` into substrings.
+  ##
+  ## Substrings are separated by the character `sep`.
+  ## Example:
+  ##
+  ## .. code-block:: nimrod
+  ##   for word in split(";;this;is;an;;example;;;", ';'):
+  ##     writeln(stdout, word)
+  ##
+  ## Results in:
+  ##
+  ## .. code-block:: nimrod
+  ##   ""
+  ##   ""
+  ##   "this"
+  ##   "is"
+  ##   "an"
+  ##   ""
+  ##   "example"
+  ##   ""
+  ##   ""
+  ##   ""
+  ##
+  var last = 0
+  assert('\0' != sep)
+  if len(s) > 0:
+    # `<=` is correct here for the edge cases!
+    while last <= len(s):
+      var first = last
+      while last < len(s) and s[last] != sep: inc(last)
+      yield copy(s, first, last-1)
+      inc(last)
+
 iterator splitLines*(s: string): string =
   ## Splits the string `s` into its containing lines. Each newline
   ## combination (CR, LF, CR-LF) is supported. The result strings contain
   ## no trailing ``\n``.
   ##
-  ## Example::
+  ## Example:
   ##
+  ## .. code-block:: nimrod
   ##   for line in lines("\nthis\nis\nan\n\nexample\n"):
   ##     writeln(stdout, line)
   ##
-  ## Results in::
+  ## Results in:
   ##
+  ## .. code-block:: nimrod
   ##   ""
   ##   "this"
   ##   "is"
@@ -164,6 +273,11 @@ proc splitSeq*(s: string, seps: set[char] = Whitespace): seq[string] {.
   noSideEffect.}
   ## The same as `split`, but is a proc that returns a sequence of substrings.
 
+proc splitSeq*(s: string, sep: char): seq[string] {.noSideEffect.} =
+  ## The same as `split`, but is a proc that returns a sequence of substrings.
+  result = @[]
+  for sub in split(s, sep): add(result, sub)
+
 proc cmpIgnoreCase*(a, b: string): int {.noSideEffect.}
   ## Compares two strings in a case insensitive manner. Returns:
   ##
@@ -207,7 +321,7 @@ proc ParseBiggestInt*(s: string): biggestInt {.noSideEffect.}
   ## Parses a decimal integer value contained in `s`. If `s` is not
   ## a valid integer, `EInvalidValue` is raised.
 
-proc ParseFloat*(s: string): float {.noSideEffect.}
+proc ParseFloat*(s: string, start = 0): float {.noSideEffect.}
   ## Parses a decimal floating point value contained in `s`. If `s` is not
   ## a valid floating point number, `EInvalidValue` is raised. ``NAN``,
   ## ``INF``, ``-INF`` are also supported (case insensitive comparison).
@@ -217,37 +331,6 @@ proc ParseFloat*(s: string): float {.noSideEffect.}
 proc toString*[Ty](x: Ty): string
   ## This generic proc is the same as the stringify operator `$`.
 
-proc `%` *(formatstr: string, a: openarray[string]): string {.noSideEffect.}
-  ## The substitution operator performs string substitutions in `formatstr`
-  ## and returns the modified `formatstr`.
-  ##
-  ## This is best explained by an example::
-  ##
-  ##   "$1 eats $2." % ["The cat", "fish"]
-  ##
-  ## Results in::
-  ##
-  ##   "The cat eats fish."
-  ##
-  ## The substitution variables (the thing after the ``$``)
-  ## are enumerated from 1 to 9.
-  ## Substitution variables can also be words (that is
-  ## ``[A-Za-z_]+[A-Za-z0-9_]*``) in which case the arguments in `a` with even
-  ## indices are keys and with odd indices are the corresponding values. Again
-  ## an example::
-  ##
-  ##   "$animal eats $food." % ["animal", "The cat", "food", "fish"]
-  ##
-  ## Results in::
-  ##
-  ##   "The cat eats fish."
-  ##
-  ## The variables are compared with `cmpIgnoreStyle`. `EInvalidValue` is
-  ## raised if an ill-formed format string has been passed to the `%` operator.
-
-proc `%` *(formatstr, a: string): string {.noSideEffect.}
-  ## This is the same as `formatstr % [a]`.
-
 proc repeatChar*(count: int, c: Char = ' '): string
   ## Returns a string of length `count` consisting only of
   ## the character `c`.
@@ -260,7 +343,25 @@ proc endsWith*(s, suffix: string): bool {.noSideEffect.}
   ## Returns true iff ``s`` ends with ``suffix``.
   ## If ``suffix == ""`` true is returned.
 
-# implementation
+proc addSep*(dest: var string, sep = ", ", startLen = 0) {.noSideEffect,
+                                                           inline.} = 
+  ## A shorthand for: 
+  ## 
+  ## .. code-block:: nimrod
+  ##   if dest.len > startLen: add(dest, sep)
+  ## 
+  ## This is often useful for generating some code where the items need to
+  ## be *separated* by `sep`. `sep` is only added if `dest` is longer than
+  ## `startLen`. The following example creates a string describing
+  ## an array of integers:  
+  ## 
+  ## .. code-block:: nimrod
+  ##   var arr = "["
+  ##   for x in items([2, 3, 5, 7, 11]):
+  ##     addSep(arr, startLen=len("["))
+  ##     add(arr, $x)
+  ##   add(arr, "]")
+  if dest.len > startLen: add(dest, sep)
 
 proc allCharsInSet*(s: string, theSet: TCharSet): bool =
   ## returns true iff each character of `s` is in the set `theSet`.
@@ -271,7 +372,7 @@ proc allCharsInSet*(s: string, theSet: TCharSet): bool =
 proc quoteIfContainsWhite*(s: string): string =
   ## returns ``'"' & s & '"'`` if `s` contains a space and does not
   ## start with a quote, else returns `s`
-  if findChars({' ', '\t'}, s) >= 0 and s[0] != '"':
+  if find(s, {' ', '\t'}) >= 0 and s[0] != '"':
     result = '"' & s & '"'
   else:
     result = s
@@ -307,10 +408,8 @@ proc intToStr(x: int, minchars: int = 1): string =
 proc toString[Ty](x: Ty): string = return $x
 
 proc toOctal(c: char): string =
-  var
-    val: int
   result = newString(3)
-  val = ord(c)
+  var val = ord(c)
   for i in countdown(2, 0):
     result[i] = Chr(val mod 8 + ord('0'))
     val = val div 8
@@ -326,18 +425,15 @@ proc findNormalized(x: string, inArray: openarray[string]): int =
               # security whole ...
   return -1
 
-proc `%`(formatstr: string, a: openarray[string]): string =
-  # the format operator
-  const
-    PatternChars = {'a'..'z', 'A'..'Z', '0'..'9', '\128'..'\255', '_'}
-  result = ""
+proc addf(s: var string, formatstr: string, a: openarray[string]) =
+  const PatternChars = {'a'..'z', 'A'..'Z', '0'..'9', '\128'..'\255', '_'}
   var i = 0
   while i < len(formatstr):
     if formatstr[i] == '$':
       case formatstr[i+1] # again we use the fact that strings
                           # are zero-terminated here
       of '$':
-        add result, '$'
+        add s, '$'
         inc(i, 2)
       of '1'..'9':
         var j = 0
@@ -345,25 +441,29 @@ proc `%`(formatstr: string, a: openarray[string]): string =
         while formatstr[i] in {'0'..'9'}:
           j = j * 10 + ord(formatstr[i]) - ord('0')
           inc(i)
-        add result, a[j - 1]
+        add s, a[j - 1]
       of '{':
         var j = i+1
         while formatstr[j] notin {'\0', '}'}: inc(j)
         var x = findNormalized(copy(formatstr, i+2, j-1), a)
-        if x >= 0 and x < high(a): add result, a[x+1]
+        if x >= 0 and x < high(a): add s, a[x+1]
         else: raise newException(EInvalidValue, "invalid format string")
         i = j+1
       of 'a'..'z', 'A'..'Z', '\128'..'\255', '_':
         var j = i+1
         while formatstr[j] in PatternChars: inc(j)
         var x = findNormalized(copy(formatstr, i+1, j-1), a)
-        if x >= 0 and x < high(a): add result, a[x+1]
+        if x >= 0 and x < high(a): add s, a[x+1]
         else: raise newException(EInvalidValue, "invalid format string")
         i = j
       else: raise newException(EInvalidValue, "invalid format string")
     else:
-      add result, formatstr[i]
+      add s, formatstr[i]
       inc(i)
+  
+proc `%`(formatstr: string, a: openarray[string]): string =
+  result = ""
+  addf(result, formatstr, a)
 
 proc cmpIgnoreCase(a, b: string): int =
   # makes usage of the fact that strings are zero-terminated
@@ -377,9 +477,8 @@ proc cmpIgnoreCase(a, b: string): int =
                                        # thus we compile without checks here
 
 proc cmpIgnoreStyle(a, b: string): int =
-  var
-    i = 0
-    j = 0
+  var i = 0
+  var j = 0
   while True:
     while a[i] == '_': inc(i)
     while b[j] == '_': inc(j) # BUGFIX: typo
@@ -400,14 +499,16 @@ proc splitSeq(s: string, seps: set[char]): seq[string] =
 
 # ---------------------------------------------------------------------------
 
-proc strip(s: string): string =
+proc strip(s: string, leading = true, trailing = true): string =
   const
     chars: set[Char] = Whitespace
   var
     first = 0
     last = len(s)-1
-  while s[first] in chars: inc(first)
-  while last >= 0 and s[last] in chars: dec(last)
+  if leading: 
+    while s[first] in chars: inc(first)
+  if trailing:
+    while last >= 0 and s[last] in chars: dec(last)
   result = copy(s, first, last)
 
 proc toLower(c: Char): Char =
@@ -451,7 +552,7 @@ proc preprocessSub(sub: string, a: var TSkipTable) =
   for i in 0..0xff: a[chr(i)] = m+1
   for i in 0..m-1: a[sub[i]] = m-i
 
-proc findSubStrAux(sub, s: string, start: int, a: TSkipTable): int =
+proc findSubStrAux(s, sub: string, start: int, a: TSkipTable): int =
   # fast "quick search" algorithm:
   var
     m = len(sub)
@@ -469,7 +570,7 @@ proc findSubStrAux(sub, s: string, start: int, a: TSkipTable): int =
 proc findSubStr(sub, s: string, start: int = 0): int =
   var a: TSkipTable
   preprocessSub(sub, a)
-  result = findSubStrAux(sub, s, start, a)
+  result = findSubStrAux(s, sub, start, a)
   # slow linear search:
   #var
   #  i, j, M, N: int
@@ -492,6 +593,20 @@ proc findSubStr(sub, s: string, start: int = 0): int =
   #    elif (i >= N):
   #      return -1
 
+proc find(s, sub: string, start: int = 0): int =
+  var a: TSkipTable
+  preprocessSub(sub, a)
+  result = findSubStrAux(s, sub, start, a)
+
+proc find(s: string, sub: char, start: int = 0): int =
+  for i in start..len(s)-1:
+    if sub == s[i]: return i
+  return -1
+ 
+proc find(s: string, chars: set[char], start: int = 0): int =
+  for i in start..s.len-1:
+    if s[i] in chars: return i
+  return -1 
 
 proc findSubStr(sub: char, s: string, start: int = 0): int =
   for i in start..len(s)-1:
@@ -504,23 +619,21 @@ proc findChars(chars: set[char], s: string, start: int = 0): int =
   return -1
   
 proc contains(s: string, chars: set[char]): bool =
-  return findChars(chars, s) >= 0
+  return find(s, chars) >= 0
 
 proc contains(s: string, c: char): bool =
-  return findSubStr(c, s) >= 0
+  return find(s, c) >= 0
 
 proc contains(s, sub: string): bool =
-  return findSubStr(sub, s) >= 0
+  return find(s, sub) >= 0
 
 proc replaceStr(s, sub, by: string): string =
-  var
-    i, j: int
-    a: TSkipTable
+  var a: TSkipTable
   result = ""
   preprocessSub(sub, a)
-  i = 0
+  var i = 0
   while true:
-    j = findSubStrAux(sub, s, i, a)
+    var j = findSubStrAux(s, sub, i, a)
     if j < 0: break
     add result, copy(s, i, j - 1)
     add result, by
@@ -583,7 +696,10 @@ proc rawParseInt(s: string, index: var int): BiggestInt =
       while s[i] == '_':
         inc(i)               # underscores are allowed and ignored
     result = result * sign
-    index = i                # store index back
+    if s[i] == '\0':
+      index = i              # store index back
+    else:
+      index = -1 # BUGFIX: error!
   else:
     index = -1
 
@@ -602,17 +718,17 @@ proc parseInt(s: string): int =
     result = int(res) # convert to smaller integer type
 
 proc ParseBiggestInt(s: string): biggestInt =
-  var
-    index: int = 0
+  var index = 0
   result = rawParseInt(s, index)
   if index == -1:
     raise newException(EInvalidValue, "invalid integer: " & s)
 
-proc ParseFloat(s: string): float =
+proc ParseFloat(s: string, start = 0): float =
   var
     esign = 1.0
     sign = 1.0
-    exponent, i: int
+    i = start
+    exponent: int
     flags: int
   result = 0.0
   if s[i] == '+': inc(i)
@@ -677,7 +793,7 @@ proc ParseFloat(s: string): float =
 
 proc toOct*(x: BiggestInt, len: int): string =
   ## converts `x` into its octal representation. The resulting string is
-  ## always `len` characters long. No leading ``0c`` prefix is generated.
+  ## always `len` characters long. No leading ``0o`` prefix is generated.
   var
     mask: BiggestInt = 7
     shift: BiggestInt = 0
@@ -701,7 +817,7 @@ proc toBin*(x: BiggestInt, len: int): string =
     shift = shift + 1
     mask = mask shl 1
 
-proc escape*(s: string, prefix, suffix = "\""): string =
+proc escape*(s: string, prefix = "\"", suffix = "\""): string =
   ## Escapes a string `s`. This does these operations (at the same time):
   ## * replaces any ``\`` by ``\\``
   ## * replaces any ``'`` by ``\'``
@@ -723,8 +839,34 @@ proc escape*(s: string, prefix, suffix = "\""): string =
     else: add(result, c)
   add(result, suffix)
 
+proc validEmailAddress*(s: string): bool = 
+  ## returns true if `s` seems to be a valid e-mail address. 
+  ## The checking also uses a domain list.
+  const
+    chars = Letters + Digits + {'!','#','$','%','&',
+      '\'','*','+','/','=','?','^','_','`','{','}','|','~','-','.'}
+  var i = 0
+  if s[i] notin chars or s[i] == '.': return false
+  while s[i] in chars: 
+    if s[i] == '.' and s[i+1] == '.': return false
+    inc(i)
+  if s[i] != '@': return false
+  var j = len(s)-1
+  if s[j] notin letters: return false
+  while j >= i and s[j] in letters: dec(j)
+  inc(i) # skip '@'
+  while s[i] in {'0'..'9', 'a'..'z', '-', '.'}: inc(i) 
+  if s[i] != '\0': return false
+  
+  var x = copy(s, j+1)
+  if len(x) == 2 and x[0] in Letters and x[1] in Letters: return true
+  case toLower(x)
+  of "com", "org", "net", "gov", "mil", "biz", "info", "mobi", "name",
+     "aero", "jobs", "museum": return true
+  return false
+  
 proc editDistance*(a, b: string): int =
-  ## returns the edit distance between `s` and `t`. This uses the Levenshtein
+  ## returns the edit distance between `a` and `b`. This uses the Levenshtein
   ## distance algorithm with only a linear memory overhead. This implementation
   ## is highly optimized!
   var len1 = a.len
diff --git a/lib/sysstr.nim b/lib/sysstr.nim
index 72f50f85a..ea46fa503 100644
--- a/lib/sysstr.nim
+++ b/lib/sysstr.nim
@@ -37,16 +37,21 @@ proc eqStrings(a, b: NimString): bool {.inline, compilerProc.} =
 proc rawNewString(space: int): NimString {.compilerProc.} =
   var s = space
   if s < 8: s = 7
-  result = cast[NimString](newObj(addr(strDesc), sizeof(TGenericSeq) +
-                          (s+1) * sizeof(char)))
-  #result.len = 0
+  when defined(boehmGC):
+    result = cast[NimString](boehmAllocAtomic(
+      sizeof(TGenericSeq) + (s+1) * sizeof(char)))
+    result.len = 0
+    result.data[0] = '\0'
+  else:
+    result = cast[NimString](newObj(addr(strDesc), sizeof(TGenericSeq) +
+                            (s+1) * sizeof(char)))
   result.space = s
-  #result.data[0] = '\0'
 
 proc mnewString(len: int): NimString {.exportc.} =
   result = rawNewString(len)
   result.len = len
-  #result.data[len] = '\0'
+  when defined(boehmGC):
+    result.data[len] = '\0'
 
 proc toNimStr(str: CString, len: int): NimString {.compilerProc.} =
   result = rawNewString(len)
@@ -224,10 +229,11 @@ proc setLengthSeq(seq: PGenericSeq, elemSize, newLen: int): PGenericSeq {.
                                  GenericSeqSize))
     elif newLen < result.len:
       # we need to decref here, otherwise the GC leaks!
-      for i in newLen..result.len-1:
-        forAllChildrenAux(cast[pointer](cast[TAddress](result) +% 
-                          GenericSeqSize +% (i*%elemSize)),
-                          extGetCellType(result).base, waZctDecRef)
+      when not defined(boehmGC):
+        for i in newLen..result.len-1:
+          forAllChildrenAux(cast[pointer](cast[TAddress](result) +% 
+                            GenericSeqSize +% (i*%elemSize)),
+                            extGetCellType(result).base, waZctDecRef)
       # and set the memory to nil:
       zeroMem(cast[pointer](cast[TAddress](result) +% GenericSeqSize +%
              (newLen*%elemSize)), (result.len-%newLen) *% elemSize)
diff --git a/lib/system.nim b/lib/system.nim
index 1ac6a8445..67a4221f1 100644
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -14,8 +14,8 @@
 ## explicitly. Because of this there can not be a user-defined module named
 ## ``system``.
 ##
-##   *"The good thing about reinventing the wheel is that you can get a
-##   round one."*
+##   *The good thing about reinventing the wheel is that you can get a
+##   round one.*
 
 {.push hints: off.}
 
@@ -1044,8 +1044,9 @@ proc isNil*(x: cstring): bool {.noSideEffect, magic: "IsNil".}
 
 
 # Fixup some magic symbols here:
-{.fixup_system.} # This is an undocumented pragma that can only be used
-                 # once in the system module.
+#{.fixup_system.} 
+# This is an undocumented pragma that can only be used
+# once in the system module.
 
 proc `&` *[T](x, y: seq[T]): seq[T] {.noSideEffect.} =
   newSeq(result, x.len + y.len)
@@ -1099,6 +1100,13 @@ proc find*[T, S](a: T, item: S): int {.inline.} =
     inc(result)
   result = -1
 
+proc pop*[T](s: var seq[T]): T {.inline.} = 
+  ## returns the last item of `s` and decreases ``s.len`` by one. This treats
+  ## `s` as a stack and implements the common *pop* operation.
+  var L = s.len-1
+  result = s[L]
+  setLen(s, L)
+
 # ----------------- FPU ------------------------------------------------------
 
 #proc disableFPUExceptions*()
@@ -1401,16 +1409,95 @@ when not defined(EcmaScript) and not defined(NimrodVM):
   # as it would recurse endlessly!
   include arithm
   {.pop.} # stack trace
+  include dyncalls
 
   const
     GenericSeqSize = (2 * sizeof(int))
-
-  when not defined(boehmgc) and not defined(nogc):
+    
+  proc reprAny(p: pointer, typ: PNimType): string {.compilerproc.}
+
+  proc getDiscriminant(aa: Pointer, n: ptr TNimNode): int =
+    assert(n.kind == nkCase)
+    var d: int
+    var a = cast[TAddress](aa)
+    case n.typ.size
+    of 1: d = ze(cast[ptr int8](a +% n.offset)^)
+    of 2: d = ze(cast[ptr int16](a +% n.offset)^)
+    of 4: d = int(cast[ptr int32](a +% n.offset)^)
+    else: assert(false)
+    return d
+
+  proc selectBranch(aa: Pointer, n: ptr TNimNode): ptr TNimNode =
+    var discr = getDiscriminant(aa, n)
+    if discr <% n.len:
+      result = n.sons[discr]
+      if result == nil: result = n.sons[n.len]
+      # n.sons[n.len] contains the ``else`` part (but may be nil)
+    else:
+      result = n.sons[n.len]
+
+  when defined(boehmgc):
+    const
+      boehmLib = "/opt/lib/libgc.so"
+  
+    proc boehmGC_disable {.importc: "GC_disable", dynlib: boehmLib.} 
+    proc boehmGC_enable {.importc: "GC_enable", dynlib: boehmLib.} 
+    proc boehmGCincremental {.
+      importc: "GC_enable_incremental", dynlib: boehmLib.} 
+    proc boehmGCfullCollect {.importc: "GC_gcollect", dynlib: boehmLib.}  
+    proc boehmAlloc(size: int): pointer {.
+      importc: "GC_malloc", dynlib: boehmLib.}
+    proc boehmAllocAtomic(size: int): pointer {.
+      importc: "GC_malloc_atomic", dynlib: boehmLib.}
+    proc boehmRealloc(p: pointer, size: int): pointer {.
+      importc: "GC_realloc", dynlib: boehmLib.}
+    proc boehmDealloc(p: pointer) {.importc: "GC_free", dynlib: boehmLib.}
+      
+  include cellsets
+  
+  when defined(boehmGC):
+    proc initGC() = nil
+    
+    #boehmGCincremental()
+
+    proc GC_disable() = boehmGC_disable()
+    proc GC_enable() = boehmGC_enable()
+    proc GC_fullCollect() = boehmGCfullCollect()
+    proc GC_setStrategy(strategy: TGC_Strategy) = nil
+    proc GC_enableMarkAndSweep() = nil
+    proc GC_disableMarkAndSweep() = nil
+    proc GC_getStatistics(): string = return ""
+    
+    proc getOccupiedMem(): int = return -1
+    proc getFreeMem(): int = return -1
+    proc getTotalMem(): int = return -1
+      
+    proc growObj(old: pointer, newsize: int): pointer {.inline.} = 
+      result = boehmRealloc(old, newsize)
+    proc newObj(size: int): pointer {.compilerproc.} =
+      result = boehmAlloc(size)      
+    proc newSeq(baseSize, len: int): pointer {.compilerproc.} =
+      # XXX: overflow checks!
+      result = newObj(len * baseSize + GenericSeqSize)
+      cast[PGenericSeq](result).len = len
+      cast[PGenericSeq](result).space = len
+
+    proc setStackBottom(theStackBottom: pointer) {.compilerproc.} = nil
+    proc nimGCref(p: pointer) {.compilerproc, inline.} = nil
+    proc nimGCunref(p: pointer) {.compilerproc, inline.} = nil
+    
+    proc unsureAsgnRef(dest: ppointer, src: pointer) {.compilerproc, inline.} =
+      dest^ = src
+    proc asgnRef(dest: ppointer, src: pointer) {.compilerproc, inline.} =
+      dest^ = src
+    proc asgnRefNoCycle(dest: ppointer, src: pointer) {.compilerproc, inline.} =
+      dest^ = src
+
+  elif not defined(nogc):
     include gc
 
   include sysstr
   include assign
-  include dyncalls
   include repr
 
   # we have to implement it here after gentostr for the cstrToNimStrDummy proc
diff --git a/lib/tinalloc.nim b/lib/tinalloc.nim
deleted file mode 100644
index 27a1e0b00..000000000
--- a/lib/tinalloc.nim
+++ /dev/null
@@ -1,72 +0,0 @@
-# Memory handling for small objects
-
-const
-  minRequestSize = 2 * sizeof(pointer) # minimal block is 16 bytes
-  pageSize = 1024 * sizeof(int)
-  pageBits = pageSize div minRequestSize
-  pageMask = pageSize-1
-
-  bitarraySize = pageBits div (sizeof(int)*8)
-  dataSize = pageSize - (bitarraySize+6) * sizeof(pointer)
-
-type
-  TMinRequest {.final.} = object
-    next, prev: ptr TMinRequest  # stores next free bit
-
-  TChunk {.pure.} = object # a chunk manages at least a page
-    size: int              # lowest bit signals if it is a small chunk (0) or
-                           # a big chunk (1)
-    typ: PNimType
-    next, prev: ptr TChunk
-    nextOfSameType: ptr TChunk
-
-  TSmallChunk = object of TChunk ## manages pageSize bytes for a type and a 
-                                 ## fixed size
-    free: int                    ## index of first free bit
-    bits: array[0..bitarraySize-1, int]
-    data: array[0..dataSize div minRequestSize - 1, TMinRequest]
-  
-  PSmallChunk = ptr TSmallChunk
-
-assert(sizeof(TSmallChunk) == pageSize)
-
-proc getNewChunk(size: int, typ: PNimType): PSmallChunk =
-  result = cast[PSmallChunk](getPages(1))
-  result.size = PageSize
-  result.typ = typ
-  result.next = chunkHead
-  result.prev = nil
-  chunkHead.prev = result
-  chunkHead = result.next
-  result.nextOfSameType = cast[PSmallChunk](typ.chunk)
-  typ.chunk = result
-  result.free = addr(result.data[0])
-  result.data[0].next = addr(result.data[1])
-  result.data[0].prev = nil
-  result.data[high(result.data)].next = nil
-  result.data[high(result.data)].prev = addr(result.data[high(result.data)-1])
-  for i in 1..high(result.data)-1:
-    result.data[i].next = addr(result.data[i+1])
-    result.data[i].prev = addr(result.data[i-1])
-
-proc newSmallObj(size: int, typ: PNimType): pointer =
-  var chunk = cast[PSmallChunk](typ.chunk)
-  if chunk == nil or chunk.free <= 0: 
-    if chunk.free < 0: GC_collect()
-    chunk = getNewChunk(size, typ)
-    chunk.nextOfSameType = typ.chunk
-    typ.chunk = chunk
-  var idx = chunk.free
-  setBit(chunk.bits[idx /% bitarraySize], idx %% bitarraySize)
-  result = cast[pointer](cast[TAddress](addr(chunk.data)) + 
-                        minRequestSize * idx)
-  var res = cast[PMinRequest](result)
-  chunk.free = res.next
-  res.next
-  
-proc freeObj(obj: pointer) = 
-  var chunk = cast[PChunk](cast[TAddress(obj) and not pageMask)
-  if size and 1 == 0: # small chunk  
-    var idx = (cast[TAddress](obj) shr pageShift) div minRequestSize
-    resetBit(chunk.bits[idx /% bitarraySize], idx %% bitarraySize)
-  
diff --git a/lib/unicode.nim b/lib/unicode.nim
index 045439690..70a18f70d 100644
--- a/lib/unicode.nim
+++ b/lib/unicode.nim
@@ -9,6 +9,8 @@
 
 ## This module provides support to handle the Unicode UTF-8 encoding.
 
+{.deadCodeElim: on.}
+
 type
   TRune* = int ## type that can hold any Unicode character
   TRune16* = int16 ## 16 bit Unicode character
diff --git a/nim/ast.pas b/nim/ast.pas
index c22385805..a57632468 100644
--- a/nim/ast.pas
+++ b/nim/ast.pas
@@ -93,12 +93,12 @@ type
     nkTypeDef, nkYieldStmt, nkTryStmt, nkFinally, 
     nkRaiseStmt, nkReturnStmt, nkBreakStmt, nkContinueStmt, 
     nkBlockStmt, nkDiscardStmt, nkStmtList, nkImportStmt, 
-    nkFromStmt, nkImportAs, nkIncludeStmt, nkAccessStmt, 
-    nkCommentStmt, nkStmtListExpr, nkBlockExpr, nkStmtListType, 
-    nkBlockType, nkVm, nkTypeOfExpr, nkObjectTy, 
-    nkTupleTy, nkRecList, nkRecCase, nkRecWhen, 
-    nkRefTy, nkPtrTy, nkVarTy, nkProcTy, 
-    nkEnumTy, nkEnumFieldDef, nkReturnToken);
+    nkFromStmt, nkImportAs, nkIncludeStmt, nkCommentStmt, 
+    nkStmtListExpr, nkBlockExpr, nkStmtListType, nkBlockType, 
+    nkVm, nkTypeOfExpr, nkObjectTy, nkTupleTy, 
+    nkRecList, nkRecCase, nkRecWhen, nkRefTy, 
+    nkPtrTy, nkVarTy, nkProcTy, nkEnumTy, 
+    nkEnumFieldDef, nkReturnToken);
   TNodeKinds = set of TNodeKind;
 const
   NodeKindToStr: array [TNodeKind] of string = (
@@ -128,12 +128,12 @@ const
     'nkTypeDef', 'nkYieldStmt', 'nkTryStmt', 'nkFinally', 
     'nkRaiseStmt', 'nkReturnStmt', 'nkBreakStmt', 'nkContinueStmt', 
     'nkBlockStmt', 'nkDiscardStmt', 'nkStmtList', 'nkImportStmt', 
-    'nkFromStmt', 'nkImportAs', 'nkIncludeStmt', 'nkAccessStmt', 
-    'nkCommentStmt', 'nkStmtListExpr', 'nkBlockExpr', 'nkStmtListType', 
-    'nkBlockType', 'nkVm', 'nkTypeOfExpr', 'nkObjectTy', 
-    'nkTupleTy', 'nkRecList', 'nkRecCase', 'nkRecWhen', 
-    'nkRefTy', 'nkPtrTy', 'nkVarTy', 'nkProcTy', 
-    'nkEnumTy', 'nkEnumFieldDef', 'nkReturnToken');
+    'nkFromStmt', 'nkImportAs', 'nkIncludeStmt', 'nkCommentStmt', 
+    'nkStmtListExpr', 'nkBlockExpr', 'nkStmtListType', 'nkBlockType', 
+    'nkVm', 'nkTypeOfExpr', 'nkObjectTy', 'nkTupleTy', 
+    'nkRecList', 'nkRecCase', 'nkRecWhen', 'nkRefTy', 
+    'nkPtrTy', 'nkVarTy', 'nkProcTy', 'nkEnumTy', 
+    'nkEnumFieldDef', 'nkReturnToken');
 type
   TSymFlag = (
     sfUsed, sfStar, sfMinus, sfInInterface, 
@@ -327,7 +327,8 @@ type
   );

 

   TLocFlag = (

-    lfIndirect,    // backend introduced a pointer

+    lfIndirect,    // backend introduced a pointer
+    lfParamCopy,   // backend introduced a parameter copy (LLVM)

     lfNoDeepCopy,  // no need for a deep copy

     lfNoDecl,      // do not declare it in C

     lfDynamicLib,  // link symbol to dynamic library

diff --git a/nim/ccgexprs.pas b/nim/ccgexprs.pas
index 161804208..03de5c4de 100644
--- a/nim/ccgexprs.pas
+++ b/nim/ccgexprs.pas
@@ -1233,16 +1233,14 @@ begin
         app(r, '.Sup');
         s := skipGeneric(s.sons[0]);
       end;    
-      appf(p.s[cpsStmts], '$1.m_type = $2;$n',
-          [r, genTypeInfo(p.module, t)])
+      appf(p.s[cpsStmts], '$1.m_type = $2;$n', [r, genTypeInfo(p.module, t)])
     end;
     frEmbedded: begin 
       // worst case for performance:
       useMagic(p.module, 'objectInit');
       if takeAddr then r := addrLoc(a)
       else r := rdLoc(a);
-      appf(p.s[cpsStmts], 'objectInit($1, $2);$n',
-          [r, genTypeInfo(p.module, t)])
+      appf(p.s[cpsStmts], 'objectInit($1, $2);$n', [r, genTypeInfo(p.module, t)])
     end
   end
 end;
@@ -1256,9 +1254,15 @@ begin
   refType := skipVarGenericRange(e.sons[1].typ);
   InitLocExpr(p, e.sons[1], a);
   initLoc(b, locExpr, a.t, OnHeap);
-  b.r := ropef('($1) newObj($2, sizeof($3))',
-    [getTypeDesc(p.module, reftype), genTypeInfo(p.module, refType),
-    getTypeDesc(p.module, skipGenericRange(reftype.sons[0]))]);
+  
+  if optBoehmGC in gGlobalOptions then 
+    b.r := ropef('($1) newObj(sizeof($2))',
+      [getTypeDesc(p.module, reftype), 
+      getTypeDesc(p.module, skipGenericRange(reftype.sons[0]))])  
+  else
+    b.r := ropef('($1) newObj($2, sizeof($3))',
+      [getTypeDesc(p.module, reftype), genTypeInfo(p.module, refType),
+      getTypeDesc(p.module, skipGenericRange(reftype.sons[0]))]);
   genAssignment(p, a, b, {@set}[]);
   // set the object type:
   bt := skipGenericRange(refType.sons[0]);
@@ -1275,10 +1279,16 @@ begin
   InitLocExpr(p, e.sons[1], a);
   InitLocExpr(p, e.sons[2], b);
   initLoc(c, locExpr, a.t, OnHeap);
-  c.r := ropef('($1) newSeq($2, $3)',
-    [getTypeDesc(p.module, seqtype),
-     genTypeInfo(p.module, seqType),
-     rdLoc(b)]);
+  if optBoehmGC in gGlobalOptions then 
+    c.r := ropef('($1) newSeq(sizeof($2), $3)',
+      [getTypeDesc(p.module, seqtype), 
+       getTypeDesc(p.module, skipGenericRange(seqtype.sons[0])),
+       rdLoc(b)])
+  else
+    c.r := ropef('($1) newSeq($2, $3)',
+      [getTypeDesc(p.module, seqtype),
+       genTypeInfo(p.module, seqType),
+       rdLoc(b)]);
   genAssignment(p, a, c, {@set}[]);
 end;
 
@@ -1324,7 +1334,8 @@ begin
   refType := skipVarGenericRange(e.sons[1].typ);
   InitLocExpr(p, e.sons[1], a);
   
-  // This is a little hack:
+  // This is a little hack: 
+  // XXX this is also a bug, if the finalizer expression produces side-effects
   oldModule := p.module;
   p.module := gmti;
   InitLocExpr(p, e.sons[2], f);
@@ -2290,7 +2301,7 @@ begin
   len := sonsLen(n);
   result := toRope('{'+'');
   for i := 0 to len - 2 do
-    app(result, ropef('$1,$n', [genConstExpr(p, n.sons[i])]));
+    appf(result, '$1,$n', [genConstExpr(p, n.sons[i])]);
   if len > 0 then app(result, genConstExpr(p, n.sons[len-1]));
   app(result, '}' + tnl)
 end;
@@ -2299,6 +2310,7 @@ function genConstExpr(p: BProc; n: PNode): PRope;
 var
   trans: PNode;
   cs: TBitSet;
+  d: TLoc;
 begin
   case n.Kind of
     nkHiddenStdConv, nkHiddenSubConv: result := genConstExpr(p, n.sons[1]);
@@ -2317,7 +2329,10 @@ begin
         trans := n;
       result := genConstSimpleList(p, trans);
     end
-    else
-      result := genLiteral(p, n)
+    else begin
+      //  result := genLiteral(p, n)
+      initLocExpr(p, n, d);
+      result := rdLoc(d)
+    end
   end
 end;
diff --git a/nim/ccgstmts.pas b/nim/ccgstmts.pas
index e611bbeea..7588f7e15 100644
--- a/nim/ccgstmts.pas
+++ b/nim/ccgstmts.pas
@@ -1,7 +1,7 @@
 //
 //
 //           The Nimrod Compiler
-//        (c) Copyright 2008 Andreas Rumpf
+//        (c) Copyright 2009 Andreas Rumpf
 //
 //    See the file "copying.txt", included in this
 //    distribution, for details about the copyright.
@@ -18,25 +18,41 @@ begin
   line := toLinenumber(t.info); // BUGFIX
   if line < 0 then line := 0; // negative numbers are not allowed in #line
   if optLineDir in p.Options then
-    appf(p.s[cpsStmts], '#line $2 "$1"$n',
+    appff(p.s[cpsStmts], 
+      '#line $2 "$1"$n',
+      '; line $2 "$1"$n',
       [toRope(toFilename(t.info)), toRope(line)]);
   if ([optStackTrace, optEndb] * p.Options = [optStackTrace, optEndb]) and
       ((p.prc = nil) or not (sfPure in p.prc.flags)) then begin
     useMagic(p.module, 'endb');      // new: endb support
-    appf(p.s[cpsStmts], 'endb($1);$n', [toRope(line)])
+    appff(p.s[cpsStmts], 'endb($1);$n', 
+         'call void @endb(%NI $1)$n',
+         [toRope(line)])
   end
   else if ([optLineTrace, optStackTrace] * p.Options =
         [optLineTrace, optStackTrace]) and ((p.prc = nil) or
-      not (sfPure in p.prc.flags)) then
-    appf(p.s[cpsStmts], 'F.line = $1;$n', [toRope(line)])
+      not (sfPure in p.prc.flags)) then begin
+    inc(p.labels);
+    appff(p.s[cpsStmts], 'F.line = $1;$n', 
+         '%LOC$2 = getelementptr %TF %F, %NI 2$n' +
+         'store %NI $1, %NI* %LOC$2$n',
+         [toRope(line), toRope(p.labels)])
+  end
 end;
 
 procedure finishTryStmt(p: BProc; howMany: int);
 var
   i: int;
 begin
-  for i := 1 to howMany do
-    app(p.s[cpsStmts], 'excHandler = excHandler->prev;' + tnl);
+  for i := 1 to howMany do begin
+    inc(p.labels, 3);
+    appff(p.s[cpsStmts], 'excHandler = excHandler->prev;$n',
+          '%LOC$1 = load %TSafePoint** @excHandler$n' +
+          '%LOC$2 = getelementptr %TSafePoint* %LOC$1, %NI 0$n' +
+          '%LOC$3 = load %TSafePoint** %LOC$2$n' +
+          'store %TSafePoint* %LOC$3, %TSafePoint** @excHandler$n', 
+          [toRope(p.labels), toRope(p.labels-1), toRope(p.labels-2)]);
+  end
 end;
 
 procedure genReturnStmt(p: BProc; t: PNode);
@@ -45,7 +61,7 @@ begin
   genLineDir(p, t);
   if (t.sons[0] <> nil) then genStmts(p, t.sons[0]);
   finishTryStmt(p, p.nestedTryStmts);
-  app(p.s[cpsStmts], 'goto BeforeRet;' + tnl)
+  appff(p.s[cpsStmts], 'goto BeforeRet;$n', 'br label %BeforeRet$n', [])
 end;
 
 procedure initVariable(p: BProc; v: PSym);
@@ -53,11 +69,29 @@ begin
   if containsGarbageCollectedRef(v.typ) or (v.ast = nil) then
     // Language change: always initialize variables if v.ast == nil!
     if not (skipVarGenericRange(v.typ).Kind in [tyArray, tyArrayConstr, tySet,
-                                                tyTuple, tyObject]) then
-      appf(p.s[cpsStmts], '$1 = 0;$n', [rdLoc(v.loc)])
-    else
-      appf(p.s[cpsStmts], 'memset((void*)$1, 0, sizeof($2));$n',
-        [addrLoc(v.loc), rdLoc(v.loc)])
+                                                tyTuple, tyObject]) then begin
+      if gCmd = cmdCompileToLLVM then
+        appf(p.s[cpsStmts], 'store $2 0, $2* $1$n', 
+             [addrLoc(v.loc), getTypeDesc(p.module, v.loc.t)])
+      else
+        appf(p.s[cpsStmts], '$1 = 0;$n', [rdLoc(v.loc)])
+    end
+    else begin
+      if gCmd = cmdCompileToLLVM then begin
+        app(p.module.s[cfsProcHeaders], 
+            'declare void @llvm.memset.i32(i8*, i8, i32, i32)' + tnl);
+        inc(p.labels, 2);
+        appf(p.s[cpsStmts], 
+            '%LOC$3 = getelementptr $2* null, %NI 1$n' +
+            '%LOC$4 = cast $2* %LOC$3 to i32$n' +
+            'call void @llvm.memset.i32(i8* $1, i8 0, i32 %LOC$4, i32 0)$n', 
+            [addrLoc(v.loc), getTypeDesc(p.module, v.loc.t), 
+            toRope(p.labels), toRope(p.labels-1)])
+      end
+      else
+        appf(p.s[cpsStmts], 'memset((void*)$1, 0, sizeof($2));$n',
+          [addrLoc(v.loc), rdLoc(v.loc)])
+   end
 end;
 
 procedure genVarStmt(p: BProc; n: PNode);
@@ -73,7 +107,7 @@ begin
     assert(a.sons[0].kind = nkSym);
     v := a.sons[0].sym;
     if sfGlobal in v.flags then
-      assignGlobalVar(p.module, v)
+      assignGlobalVar(p, v)
     else begin
       assignLocalVar(p, v);
       initVariable(p, v) // XXX: this is not required if a.sons[2] != nil,
@@ -140,10 +174,14 @@ begin
       nkElifBranch: begin
         initLocExpr(p, it.sons[0], a);
         Lelse := getLabel(p);
-        appf(p.s[cpsStmts], 'if (!$1) goto $2;$n', [rdLoc(a), Lelse]);
+        inc(p.labels);
+        appff(p.s[cpsStmts], 'if (!$1) goto $2;$n', 
+                             'br i1 $1, label %LOC$3, label %$2$n' +
+                             'LOC$3: $n', 
+                             [rdLoc(a), Lelse, toRope(p.labels)]);
         genStmts(p, it.sons[1]);
         if sonsLen(n) > 1 then
-          appf(p.s[cpsStmts], 'goto $1;$n', [Lend]);
+          appff(p.s[cpsStmts], 'goto $1;$n', 'br label %$1$n', [Lend]);
         fixLabel(p, Lelse);
       end;
       nkElse: begin
@@ -857,7 +895,7 @@ begin
     nkCaseStmt:    genCaseStmt(p, t);
     nkReturnStmt:  genReturnStmt(p, t);
     nkBreakStmt:   genBreakStmt(p, t);
-    nkCall: begin
+    nkCall, nkHiddenCallConv, nkInfix, nkPrefix, nkPostfix, nkCommand: begin
       genLineDir(p, t);
       initLocExpr(p, t, a);
     end;
diff --git a/nim/ccgtypes.pas b/nim/ccgtypes.pas
index f6eb64c08..ee7388e1c 100644
--- a/nim/ccgtypes.pas
+++ b/nim/ccgtypes.pas
@@ -1,7 +1,7 @@
 //
 //
 //           The Nimrod Compiler
-//        (c) Copyright 2008 Andreas Rumpf
+//        (c) Copyright 2009 Andreas Rumpf
 //
 //    See the file "copying.txt", included in this
 //    distribution, for details about the copyright.
@@ -45,7 +45,19 @@ function mangleName(s: PSym): PRope;
 begin
   result := s.loc.r;
   if result = nil then begin
-    result := toRope(mangle(s.name.s));
+    if gCmd = cmdCompileToLLVM then begin
+      case s.kind of
+        skProc, skConverter, skConst: result := toRope('@'+'');
+        skVar: begin
+          if (sfGlobal in s.flags) then result := toRope('@'+'')
+          else result := toRope('%'+'');
+        end;
+        skForVar, skTemp, skParam, skType, skEnumField, skModule: 
+          result := toRope('%'+'');
+        else InternalError(s.info, 'mangleName');
+      end;
+    end;
+    app(result, toRope(mangle(s.name.s)));
     app(result, '_'+'');
     app(result, toRope(s.id));
     if optGenMapping in gGlobalOptions then
@@ -58,15 +70,33 @@ end;
 
 function getTypeName(typ: PType): PRope;
 begin
-  if (typ.sym <> nil) and ([sfImportc, sfExportc] * typ.sym.flags <> []) then
+  if (typ.sym <> nil) and ([sfImportc, sfExportc] * typ.sym.flags <> [])
+  and (gCmd <> cmdCompileToLLVM) then
     result := typ.sym.loc.r
   else begin
-    if typ.loc.r = nil then typ.loc.r := con('TY', toRope(typ.id));
+    if typ.loc.r = nil then 
+      typ.loc.r := ropeff('TY$1', '%TY$1', [toRope(typ.id)]);
     result := typ.loc.r
   end;
   if result = nil then InternalError('getTypeName: ' + typeKindToStr[typ.kind]);
 end;
 
+// ----------------------------- other helpers ----------------------------
+(*
+function getSizeof(m: BModule; var labels: int; 
+                   var body: PRope; typ: PType): PRope;
+begin
+  if (gCmd <> cmdCompileToLLVM) then 
+    result := ropef('sizeof($1)', getTypeDesc(m, typ))
+  else begin
+    inc(labels, 2);
+    result := ropef('%UOC$1', [toRope(labels)]);
+    appf(body, '%UOC$1 = getelementptr $3* null, %NI 1$n' +
+               '$2 = cast $3* %UOC$1 to i32$n', 
+               [toRope(labels-1), result, getTypeDesc(m, typ)]);
+  end
+end; *)
+
 // ------------------------------ C type generator ------------------------
 
 function mapType(typ: PType): TCTypeKind;
@@ -104,10 +134,6 @@ begin
     tyPtr, tyVar, tyRef: begin
       case typ.sons[0].kind of
         tyOpenArray, tyArrayConstr, tyArray: result := ctArray;
-        (*tySet: begin
-          if mapType(typ.sons[0]) = ctArray then result := ctArray
-          else result := ctPtr
-        end*)
         else result := ctPtr
       end
     end;
@@ -155,6 +181,10 @@ const
     // but one can //define it to what you want so there will no problem
     'N_INLINE', 'N_NOINLINE', 'N_FASTCALL', 'N_CLOSURE', 'N_NOCONV');
 
+  CallingConvToStrLLVM: array [TCallingConvention] of string = ('fastcc $1',
+    'stdcall $1', 'ccc $1', 'safecall $1', 'syscall $1',
+    '$1 alwaysinline', '$1 noinline', 'fastcc $1', 'ccc $1', '$1');
+
 function CacheGetType(const tab: TIdTable; key: PType): PRope;
 begin
   // returns nil if we need to declare this type
@@ -165,7 +195,13 @@ end;
 
 function getTempName(): PRope;
 begin
-  result := con('TMP', toRope(gId));
+  result := ropeff('TMP$1', '%TMP$1', [toRope(gId)]);
+  inc(gId);
+end;
+
+function getGlobalTempName(): PRope;
+begin
+  result := ropeff('TMP$1', '@TMP$1', [toRope(gId)]);
   inc(gId);
 end;
 
@@ -194,7 +230,8 @@ end;
 
 procedure fillResult(param: PSym);
 begin
-  fillLoc(param.loc, locParam, param.typ, toRope('Result'), OnStack);
+  fillLoc(param.loc, locParam, param.typ, ropeff('Result', '%Result', []), 
+          OnStack);
   if (mapType(param.typ) <> ctArray) and IsInvalidReturnType(param.typ) then
   begin
     include(param.loc.flags, lfIndirect);
@@ -232,7 +269,7 @@ begin
     if arr.kind = tyVar then arr := arr.sons[0];
     j := 0;
     while arr.Kind = tyOpenArray do begin // need to pass hidden parameter:
-      appf(params, ', NI $1Len$2', [param.loc.r, toRope(j)]);
+      appff(params, ', NI $1Len$2', ', @NI $1Len$2', [param.loc.r, toRope(j)]);
       inc(j);
       arr := arr.sons[0]
     end;
@@ -241,8 +278,9 @@ begin
   if (t.sons[0] <> nil) and isInvalidReturnType(t.sons[0]) then begin
     if params <> nil then app(params, ', ');
     app(params, getTypeDescAux(m, t.sons[0], check));
-    if mapType(t.sons[0]) <> ctArray then app(params, '*'+'');
-    app(params, ' Result');
+    if (mapType(t.sons[0]) <> ctArray) or (gCmd = cmdCompileToLLVM) then 
+      app(params, '*'+'');
+    appff(params, ' Result', ' @Result', []);
   end;
   if t.callConv = ccClosure then begin
     if params <> nil then app(params, ', ');
@@ -252,7 +290,7 @@ begin
     if params <> nil then app(params, ', ');
     app(params, '...')
   end;
-  if params = nil then
+  if (params = nil) and (gCmd <> cmdCompileToLLVM) then
     app(params, 'void)')
   else
     app(params, ')'+'');
@@ -621,7 +659,7 @@ begin
   end
 end;
 
-function getTypeDesc(m: BModule; typ: PType): PRope;
+function getTypeDesc(m: BModule; typ: PType): PRope; overload;
 var
   check: TIntSet;
 begin
@@ -629,6 +667,19 @@ begin
   result := getTypeDescAux(m, typ, check);
 end;
 
+function getTypeDesc(m: BModule; const magic: string): PRope; overload;
+var
+  sym: PSym;
+begin
+  sym := magicsys.getCompilerProc(magic);
+  if sym <> nil then 
+    result := getTypeDesc(m, sym.typ)
+  else begin
+    rawMessage(errSystemNeeds, magic);
+    result := nil
+  end
+end;
+
 procedure finishTypeDescriptions(m: BModule);
 var
   i: int;
@@ -1012,4 +1063,4 @@ begin
     end
   end
 end;
-*)
\ No newline at end of file
+*)
diff --git a/nim/ccgutils.pas b/nim/ccgutils.pas
index 97ef65f70..56eff6c9e 100644
--- a/nim/ccgutils.pas
+++ b/nim/ccgutils.pas
@@ -20,6 +20,7 @@ uses
 
 function toCChar(c: Char): string;
 function makeCString(const s: string): PRope;
+function makeLLVMString(const s: string): PRope;
 
 function TableGetType(const tab: TIdTable; key: PType): PObject;
 function GetUniqueType(key: PType): PType;
@@ -154,6 +155,33 @@ begin
   app(result, toRope(res));
 end;
 
+function makeLLVMString(const s: string): PRope;
+const
+  MaxLineLength = 64;
+var
+  i: int;
+  res: string;
+begin
+  result := nil;
+  res := 'c"';
+  for i := strStart to length(s)+strStart-1 do begin
+    if (i-strStart+1) mod MaxLineLength = 0 then begin
+      app(result, toRope(res));
+      setLength(res, 0);
+    end;
+    case s[i] of
+     #0..#31, #128..#255, '"', '\': begin
+       addChar(res, '\');
+       add(res, toHex(ord(s[i]), 2));
+     end
+     else
+       addChar(res, s[i])
+    end;
+  end;
+  add(res, '\00"');
+  app(result, toRope(res));
+end;
+
 begin
   InitTypeTables();
 end.
diff --git a/nim/cgen.pas b/nim/cgen.pas
index 02713f902..5dcb7f50b 100644
--- a/nim/cgen.pas
+++ b/nim/cgen.pas
@@ -37,9 +37,9 @@ type
                        // reasons
     cfsFieldInfo,      // section for field information
     cfsTypeInfo,       // section for type information
+    cfsProcHeaders,    // section for C procs prototypes
     cfsData,           // section for C constant data
     cfsVars,           // section for C variable declarations
-    cfsProcHeaders,    // section for C procs prototypes
     cfsProcs,          // section for C procs that are not inline
     cfsTypeInit1,      // section 1 for declarations of type information
     cfsTypeInit2,      // section 2 for initialization of type information
@@ -120,6 +120,7 @@ type
     forwardedProcs: TSymSeq; // keep forwarded procs here
     typeNodes, nimTypes: int;// used for type info generation
     typeNodesName, nimTypesName: PRope; // used for type info generation
+    labels: natural;         // for generating unique module-scope names
   end;
 
 var
@@ -132,6 +133,24 @@ var
   gForwardedProcsCounter: int = 0;
   gmti: BModule; // generated type info: no need to initialize: defaults fit
 
+function ropeff(const cformat, llvmformat: string; 
+                const args: array of PRope): PRope;
+begin
+  if gCmd = cmdCompileToLLVM then 
+    result := ropef(llvmformat, args)
+  else
+    result := ropef(cformat, args)
+end;
+
+procedure appff(var dest: PRope; const cformat, llvmformat: string; 
+                const args: array of PRope);
+begin
+  if gCmd = cmdCompileToLLVM then 
+    appf(dest, llvmformat, args)
+  else
+    appf(dest, cformat, args);
+end;
+
 procedure addForwardedProc(m: BModule; prc: PSym);
 var
   L: int;
@@ -240,8 +259,12 @@ end;
 procedure getTemp(p: BProc; t: PType; var result: TLoc);
 begin
   inc(p.labels);
-  result.r := con('LOC', toRope(p.labels));
-  appf(p.s[cpsLocals], '$1 $2;$n', [getTypeDesc(p.module, t), result.r]);
+  if gCmd = cmdCompileToLLVM then 
+    result.r := con('%LOC', toRope(p.labels))
+  else begin
+    result.r := con('LOC', toRope(p.labels));
+    appf(p.s[cpsLocals], '$1 $2;$n', [getTypeDesc(p.module, t), result.r]);
+  end;
   result.k := locTemp;
   result.a := -1;
   result.t := getUniqueType(t);
@@ -251,6 +274,86 @@ end;
 
 // -------------------------- Variable manager ----------------------------
 
+function cstringLit(p: BProc; var r: PRope; const s: string): PRope; overload;
+begin
+  if gCmd = cmdCompileToLLVM then begin
+    inc(p.module.labels);
+    inc(p.labels);
+    result := ropef('%LOC$1', [toRope(p.labels)]);
+    appf(p.module.s[cfsData], '@C$1 = private constant [$2 x i8] $3$n', [
+         toRope(p.module.labels), toRope(length(s)), makeLLVMString(s)]);
+    appf(r, '$1 = getelementptr [$2 x i8]* @C$3, %NI 0, %NI 0$n', 
+        [result, toRope(length(s)), toRope(p.module.labels)]);
+  end
+  else
+    result := makeCString(s)
+end;
+
+function cstringLit(m: BModule; var r: PRope; const s: string): PRope; overload;
+begin
+  if gCmd = cmdCompileToLLVM then begin
+    inc(m.labels, 2);
+    result := ropef('%MOC$1', [toRope(m.labels-1)]);
+    appf(m.s[cfsData], '@MOC$1 = private constant [$2 x i8] $3$n', [
+         toRope(m.labels), toRope(length(s)), makeLLVMString(s)]);
+    appf(r, '$1 = getelementptr [$2 x i8]* @MOC$3, %NI 0, %NI 0$n', 
+        [result, toRope(length(s)), toRope(m.labels)]);
+  end
+  else
+    result := makeCString(s)
+end;
+
+procedure allocParam(p: BProc; s: PSym);
+var
+  tmp: PRope;
+begin
+  assert(s.kind = skParam);
+  if not (lfParamCopy in s.loc.flags) then begin
+    inc(p.labels);
+    tmp := con('%LOC', toRope(p.labels));
+    include(s.loc.flags, lfParamCopy);
+    include(s.loc.flags, lfIndirect);
+    appf(p.s[cpsInit], 
+        '$1 = alloca $3$n' +
+        'store $3 $2, $3* $1$n', [tmp, s.loc.r, getTypeDesc(p.module, s.loc.t)]);
+    s.loc.r := tmp
+  end;
+end;
+
+procedure localDebugInfo(p: BProc; s: PSym); 
+var
+  name, a: PRope;
+begin
+  if [optStackTrace, optEndb] * p.options <> [optStackTrace, optEndb] then exit;
+  if gCmd = cmdCompileToLLVM then begin
+    // "address" is the 0th field
+    // "typ" is the 1rst field
+    // "name" is the 2nd field
+    name := cstringLit(p, p.s[cpsInit], normalize(s.name.s));
+    if (s.kind = skParam) and not ccgIntroducedPtr(s) then allocParam(p, s);
+    inc(p.labels, 3);
+    appf(p.s[cpsInit], 
+        '%LOC$6 = getelementptr %TF* %F, %NI 0, $1, %NI 0$n' +
+        '%LOC$7 = getelementptr %TF* %F, %NI 0, $1, %NI 1$n' +
+        '%LOC$8 = getelementptr %TF* %F, %NI 0, $1, %NI 2$n' +
+        'store i8* $2, i8** %LOC$6$n' +
+        'store $3* $4, $3** %LOC$7$n' +
+        'store i8* $5, i8** %LOC$8$n', 
+        [toRope(p.frameLen), s.loc.r, getTypeDesc(p.module, 'TNimType'),
+         genTypeInfo(p.module, s.loc.t), name, toRope(p.labels), 
+         toRope(p.labels-1), toRope(p.labels-2)])
+  end
+  else begin
+    a := con('&'+'', s.loc.r);
+    if (s.kind = skParam) and ccgIntroducedPtr(s) then a := s.loc.r;
+    appf(p.s[cpsInit],
+      'F.s[$1].address = (void*)$3; F.s[$1].typ = $4; F.s[$1].name = $2;$n',
+      [toRope(p.frameLen), makeCString(normalize(s.name.s)), a,
+      genTypeInfo(p.module, s.loc.t)]);
+  end;
+  inc(p.frameLen);
+end;
+
 procedure assignLocalVar(p: BProc; s: PSym);
 begin
   //assert(s.loc.k == locNone) // not yet assigned
@@ -258,45 +361,54 @@ begin
   // for each module that uses them!
   if s.loc.k = locNone then
     fillLoc(s.loc, locLocalVar, s.typ, mangleName(s), OnStack);
-  app(p.s[cpsLocals], getTypeDesc(p.module, s.loc.t));
-  if sfRegister in s.flags then
-    app(p.s[cpsLocals], ' register');
-  if (sfVolatile in s.flags) or (p.nestedTryStmts > 0) then
-    app(p.s[cpsLocals], ' volatile');
+  if gCmd = cmdCompileToLLVM then begin
+    appf(p.s[cpsLocals], '$1 = alloca $2$n', 
+         [s.loc.r, getTypeDesc(p.module, s.loc.t)]);
+    include(s.loc.flags, lfIndirect);
+  end
+  else begin
+    app(p.s[cpsLocals], getTypeDesc(p.module, s.loc.t));
+    if sfRegister in s.flags then
+      app(p.s[cpsLocals], ' register');
+    if (sfVolatile in s.flags) or (p.nestedTryStmts > 0) then
+      app(p.s[cpsLocals], ' volatile');
 
-  appf(p.s[cpsLocals], ' $1;$n', [s.loc.r]);
+    appf(p.s[cpsLocals], ' $1;$n', [s.loc.r]);
+  end;
   // if debugging we need a new slot for the local variable:
-  if [optStackTrace, optEndb] * p.Options = [optStackTrace, optEndb] then begin
-    appf(p.s[cpsInit],
-      'F.s[$1].name = $2; F.s[$1].address = (void*)&$3; F.s[$1].typ = $4;$n',
-      [toRope(p.frameLen), makeCString(normalize(s.name.s)), s.loc.r,
-      genTypeInfo(p.module, s.loc.t)]);
-    inc(p.frameLen);
-  end
+  localDebugInfo(p, s);
 end;
 
-procedure assignGlobalVar(m: BModule; s: PSym);
+procedure assignGlobalVar(p: BProc; s: PSym);
 begin
   if s.loc.k = locNone then
     fillLoc(s.loc, locGlobalVar, s.typ, mangleName(s), OnHeap);
-  useHeader(m, s);
-  if lfNoDecl in s.loc.flags then exit;
-  if sfImportc in s.flags then app(m.s[cfsVars], 'extern ');
-  app(m.s[cfsVars], getTypeDesc(m, s.loc.t));
-  if sfRegister in s.flags then
-    app(m.s[cfsVars], ' register');
-  if sfVolatile in s.flags then
-    app(m.s[cfsVars], ' volatile');
-  if sfThreadVar in s.flags then
-    app(m.s[cfsVars], ' NIM_THREADVAR');
-  appf(m.s[cfsVars], ' $1;$n', [s.loc.r]);
-  if [optStackTrace, optEndb] * m.module.options =
+  if gCmd = cmdCompileToLLVM then begin
+    appf(p.module.s[cfsVars], '$1 = linkonce global $2 zeroinitializer$n', 
+         [s.loc.r, getTypeDesc(p.module, s.loc.t)]);
+    include(s.loc.flags, lfIndirect);
+  end
+  else begin
+    useHeader(p.module, s);
+    if lfNoDecl in s.loc.flags then exit;
+    if sfImportc in s.flags then app(p.module.s[cfsVars], 'extern ');
+    app(p.module.s[cfsVars], getTypeDesc(p.module, s.loc.t));
+    if sfRegister in s.flags then app(p.module.s[cfsVars], ' register');
+    if sfVolatile in s.flags then app(p.module.s[cfsVars], ' volatile');
+    if sfThreadVar in s.flags then app(p.module.s[cfsVars], ' NIM_THREADVAR');
+    appf(p.module.s[cfsVars], ' $1;$n', [s.loc.r]);
+  end;
+  if [optStackTrace, optEndb] * p.module.module.options =
      [optStackTrace, optEndb] then begin
-    useMagic(m, 'dbgRegisterGlobal');
-    appf(m.s[cfsDebugInit],
+    useMagic(p.module, 'dbgRegisterGlobal');
+    appff(p.module.s[cfsDebugInit], 
       'dbgRegisterGlobal($1, &$2, $3);$n',
-      [makeCString(normalize(s.owner.name.s + '.' +{&} s.name.s)), s.loc.r,
-      genTypeInfo(m, s.typ)])
+      'call void @dbgRegisterGlobal(i8* $1, i8* $2, $4* $3)$n',
+      [cstringLit(p, p.module.s[cfsDebugInit], 
+                  normalize(s.owner.name.s + '.' +{&} s.name.s)),
+       s.loc.r,
+       genTypeInfo(p.module, s.typ),
+       getTypeDesc(p.module, 'TNimType')]);
   end;
 end;
 
@@ -308,15 +420,9 @@ end;
 procedure assignParam(p: BProc; s: PSym);
 begin
   assert(s.loc.r <> nil);
-  if [optStackTrace, optEndb] * p.options = [optStackTrace, optEndb] then begin
-    appf(p.s[cpsInit],
-      'F.s[$1].name = $2; F.s[$1].address = (void*)$3; ' +
-      'F.s[$1].typ = $4;$n',
-      [toRope(p.frameLen), makeCString(normalize(s.name.s)),
-      iff(ccgIntroducedPtr(s), s.loc.r, con('&'+'', s.loc.r)),
-      genTypeInfo(p.module, s.loc.t)]);
-    inc(p.frameLen)
-  end
+  if (sfAddrTaken in s.flags) and (gCmd = cmdCompileToLLVM) then 
+    allocParam(p, s);
+  localDebugInfo(p, s);
 end;
 
 procedure fillProcLoc(sym: PSym);
@@ -359,19 +465,26 @@ begin
   assert(lib <> nil);
   if not lib.generated then begin
     lib.generated := true;
+    tmp := getGlobalTempName();
+    assert(lib.name = nil);
+    lib.name := tmp;
+    // BUGFIX: useMagic has awful side-effects
+    appff(m.s[cfsVars], 'static void* $1;$n', 
+                        '$1 = linkonce global i8* zeroinitializer$n', [tmp]);
+    inc(m.labels);
+    appff(m.s[cfsDynLibInit],
+        '$1 = nimLoadLibrary((NimStringDesc*) &$2);$n',
+        '%MOC$4 = call i8* @nimLoadLibrary($3 $2)$n' +
+        'store i8* %MOC$4, i8** $1$n',
+        [tmp, getStrLit(m, lib.path), getTypeDesc(m, getSysType(tyString)),
+         toRope(m.labels)]);
+    //appf(m.s[cfsDynLibDeinit],
+    //  'if ($1 != NIM_NIL) nimUnloadLibrary($1);$n', [tmp]);
     useMagic(m, 'nimLoadLibrary');
     useMagic(m, 'nimUnloadLibrary');
     useMagic(m, 'NimStringDesc');
-    tmp := getTempName();
-    appf(m.s[cfsVars], 'static void* $1;$n', [tmp]);
-    appf(m.s[cfsDynLibInit],
-      '$1 = nimLoadLibrary((NimStringDesc*) &$2);$n',
-      [tmp, getStrLit(m, lib.path)]);
-    appf(m.s[cfsDynLibDeinit],
-      'if ($1 != NIM_NIL) nimUnloadLibrary($1);$n', [tmp]);
-    assert(lib.name = nil);
-    lib.name := tmp
-  end
+  end;
+  if lib.name = nil then InternalError('loadDynamicLib');
 end;
 
 procedure SymInDynamicLib(m: BModule; sym: PSym);
@@ -383,14 +496,25 @@ begin
   extname := sym.loc.r;
   loadDynamicLib(m, lib);
   useMagic(m, 'nimGetProcAddr');
-  tmp := ropef('Dl_$1', [toRope(sym.id)]);
+  if gCmd = cmdCompileToLLVM then include(sym.loc.flags, lfIndirect);
+
+  tmp := ropeff('Dl_$1', '@Dl_$1', [toRope(sym.id)]);
   sym.loc.r := tmp; // from now on we only need the internal name
   sym.typ.sym := nil; // generate a new name
-  appf(m.s[cfsDynLibInit], '$1 = ($2) nimGetProcAddr($3, $4);$n',
-    [tmp, getTypeDesc(m, sym.typ), lib.name, makeCString(ropeToStr(extname))]);
-
-  app(m.s[cfsVars], getTypeDesc(m, sym.loc.t));
-  appf(m.s[cfsVars], ' $1;$n', [sym.loc.r]);
+  inc(m.labels, 2);
+  appff(m.s[cfsDynLibInit], 
+    '$1 = ($2) nimGetProcAddr($3, $4);$n',
+    '%MOC$5 = load i8* $3$n' +
+    '%MOC$6 = call $2 @nimGetProcAddr(i8* %MOC$5, i8* $4)$n' +
+    'store $2 %MOC$6, $2* $1$n',
+    [tmp, getTypeDesc(m, sym.typ), lib.name, 
+    cstringLit(m, m.s[cfsDynLibInit], ropeToStr(extname)),
+    toRope(m.labels), toRope(m.labels-1)]);
+
+  appff(m.s[cfsVars], 
+    '$2 $1;$n', 
+    '$1 = linkonce global $2 zeroinitializer$n',
+    [sym.loc.r, getTypeDesc(m, sym.loc.t)]);
 end;
 
 // ----------------------------- sections ---------------------------------
@@ -433,14 +557,23 @@ var
 begin
   if p.frameLen > 0 then begin
     useMagic(p.module, 'TVarSlot');
-    slots := ropef('  TVarSlot s[$1];$n', [toRope(p.frameLen)])
+    slots := ropeff('  TVarSlot s[$1];$n',
+                    ', [$1 x %TVarSlot]', [toRope(p.frameLen)])
   end
   else
     slots := nil;
-  appf(p.s[cpsLocals], 'volatile struct {TFrame* prev;' +
+  appff(p.s[cpsLocals], 
+    'volatile struct {TFrame* prev;' +
     'NCSTRING procname;NI line;NCSTRING filename;' +
-    'NI len;$n$1} F;$n', [slots]);
-  prepend(p.s[cpsInit], ropef('F.len = $1;$n', [toRope(p.frameLen)]))
+    'NI len;$n$1} F;$n', 
+    '%TF = type {%TFrame*, i8*, %NI, %NI$1}$n' + 
+    '%F = alloca %TF$n',
+    [slots]);
+  inc(p.labels);
+  prepend(p.s[cpsInit], ropeff('F.len = $1;$n',
+      '%LOC$2 = getelementptr %TF %F, %NI 4$n' +
+      'store %NI $1, %NI* %LOC$2$n',
+      [toRope(p.frameLen), toRope(p.labels)]))
 end;
 
 function retIsNotVoid(s: PSym): bool;
@@ -448,10 +581,48 @@ begin
   result := (s.typ.sons[0] <> nil) and not isInvalidReturnType(s.typ.sons[0])
 end;
 
+function initFrame(p: BProc; procname, filename: PRope): PRope;
+begin
+  inc(p.labels, 5);
+  result := ropeff(
+    'F.procname = $1;$n' +
+    'F.prev = framePtr;$n' +
+    'F.filename = $2;$n' +
+    'F.line = 0;$n' +
+    'framePtr = (TFrame*)&F;$n',
+    
+    '%LOC$3 = getelementptr %TF %F, %NI 1$n' +
+    '%LOC$4 = getelementptr %TF %F, %NI 0$n' +
+    '%LOC$5 = getelementptr %TF %F, %NI 3$n' +
+    '%LOC$6 = getelementptr %TF %F, %NI 2$n' +
+    
+    'store i8* $1, i8** %LOC$3$n' +
+    'store %TFrame* @framePtr, %TFrame** %LOC$4$n' +
+    'store i8* $2, i8** %LOC$5$n' +
+    'store %NI 0, %NI* %LOC$6$n' +
+    
+    '%LOC$7 = bitcast %TF* %F to %TFrame*$n' +
+    'store %TFrame* %LOC$7, %TFrame** @framePtr$n',
+    [procname, filename, toRope(p.labels), toRope(p.labels-1), 
+     toRope(p.labels-2), toRope(p.labels-3), toRope(p.labels-4)]);
+end;
+
+function deinitFrame(p: BProc): PRope;
+begin
+  inc(p.labels, 3);
+  result := ropeff('framePtr = framePtr->prev;$n',
+    
+                   '%LOC$1 = load %TFrame* @framePtr$n' +
+                   '%LOC$2 = getelementptr %TFrame* %LOC$1, %NI 0$n' +
+                   '%LOC$3 = load %TFrame** %LOC$2$n' +
+                   'store %TFrame* $LOC$3, %TFrame** @framePtr', [
+                   toRope(p.labels), toRope(p.labels-1), toRope(p.labels-2)])
+end;
+
 procedure genProcAux(m: BModule; prc: PSym);
 var
   p: BProc;
-  generatedProc, header, returnStmt: PRope;
+  generatedProc, header, returnStmt, procname, filename: PRope;
   i: int;
   res, param: PSym;
 begin
@@ -466,7 +637,7 @@ begin
       // declare the result symbol:
       assignLocalVar(p, res);
       assert(res.loc.r <> nil);
-      returnStmt := ropef('return $1;$n', [rdLoc(res.loc)]);
+      returnStmt := ropeff('return $1;$n', 'ret $1$n', [rdLoc(res.loc)]);
     end
     else begin
       fillResult(res);
@@ -482,22 +653,21 @@ begin
 
   genStmts(p, prc.ast.sons[codePos]); // modifies p.locals, p.init, etc.
   if sfPure in prc.flags then
-    generatedProc := ropef('$1 {$n$2$3$4}$n',
+    generatedProc := ropeff('$1 {$n$2$3$4}$n', 'define $1 {$n$2$3$4}$n',
       [header, p.s[cpsLocals], p.s[cpsInit], p.s[cpsStmts]])
   else begin
-    generatedProc := con(header, '{' + tnl);
+    generatedProc := ropeff('$1 {$n', 'define $1 {$n', [header]);
     if optStackTrace in prc.options then begin
       getFrameDecl(p);
-      prepend(p.s[cpsInit], ropef(
-        'F.procname = $1;$n' +
-        'F.prev = framePtr;$n' +
-        'F.filename = $2;$n' +
-        'F.line = 0;$n' +
-        'framePtr = (TFrame*)&F;$n',
-        [makeCString(prc.owner.name.s +{&} '.' +{&} prc.name.s),
-        makeCString(toFilename(prc.info))]));
-    end;
-    if optProfiler in prc.options then begin
+      app(generatedProc, p.s[cpsLocals]);
+      procname := CStringLit(p, generatedProc, 
+                             prc.owner.name.s +{&} '.' +{&} prc.name.s);
+      filename := CStringLit(p, generatedProc, toFilename(prc.info));
+      app(generatedProc, initFrame(p, procname, filename));
+    end
+    else
+      app(generatedProc, p.s[cpsLocals]);
+    if (optProfiler in prc.options) and (gCmd <> cmdCompileToLLVM) then begin
       if gProcProfile >= 64*1024 then // XXX: hard coded value!
         InternalError(prc.info, 'too many procedures for profiling');
       useMagic(m, 'profileData');
@@ -511,12 +681,13 @@ begin
       end;
       prepend(p.s[cpsInit], toRope('NIM_profilingStart = getticks();' + tnl));
     end;
-    app(generatedProc, con(p.s));
+    app(generatedProc, p.s[cpsInit]);
+    app(generatedProc, p.s[cpsStmts]);
     if p.beforeRetNeeded then
       app(generatedProc, 'BeforeRet: ;' + tnl);
     if optStackTrace in prc.options then
-      app(generatedProc, 'framePtr = framePtr->prev;' + tnl);
-    if optProfiler in prc.options then
+      app(generatedProc, deinitFrame(p));
+    if (optProfiler in prc.options) and (gCmd <> cmdCompileToLLVM) then 
       appf(generatedProc,
         'profileData[$1].total += elapsed(getticks(), NIM_profilingStart);$n',
         [toRope(prc.loc.a)]);
@@ -533,8 +704,10 @@ begin
   if lfDynamicLib in sym.loc.Flags then begin
     if (sym.owner.id <> m.module.id) and
         not intSetContainsOrIncl(m.declaredThings, sym.id) then begin
-      appf(m.s[cfsVars], 'extern $1 Dl_$2;$n',
-           [getTypeDesc(m, sym.loc.t), toRope(sym.id)])
+      appff(m.s[cfsVars], 'extern $1 Dl_$2;$n',
+           '@Dl_$2 = linkonce global $1 zeroinitializer$n',
+           [getTypeDesc(m, sym.loc.t), toRope(sym.id)]);
+      if gCmd = cmdCompileToLLVM then include(sym.loc.flags, lfIndirect);
     end
   end
   else begin
@@ -586,15 +759,22 @@ begin
   if sym.owner.id <> m.module.id then begin
     // else we already have the symbol generated!
     assert(sym.loc.r <> nil);
-    app(m.s[cfsVars], 'extern ');
-    app(m.s[cfsVars], getTypeDesc(m, sym.loc.t));
-    if sfRegister in sym.flags then
-      app(m.s[cfsVars], ' register');
-    if sfVolatile in sym.flags then
-      app(m.s[cfsVars], ' volatile');
-    if sfThreadVar in sym.flags then
-      app(m.s[cfsVars], ' NIM_THREADVAR');
-    appf(m.s[cfsVars], ' $1;$n', [sym.loc.r])
+    if gCmd = cmdCompileToLLVM then begin
+      include(sym.loc.flags, lfIndirect);
+      appf(m.s[cfsVars], '$1 = linkonce global $2 zeroinitializer$n', 
+           [sym.loc.r, getTypeDesc(m, sym.loc.t)]);
+    end
+    else begin
+      app(m.s[cfsVars], 'extern ');
+      app(m.s[cfsVars], getTypeDesc(m, sym.loc.t));
+      if sfRegister in sym.flags then
+        app(m.s[cfsVars], ' register');
+      if sfVolatile in sym.flags then
+        app(m.s[cfsVars], ' volatile');
+      if sfThreadVar in sym.flags then
+        app(m.s[cfsVars], ' NIM_THREADVAR');
+      appf(m.s[cfsVars], ' $1;$n', [sym.loc.r])
+    end
   end
 end;
 
@@ -609,8 +789,9 @@ begin
   if sym.owner.id <> m.module.id then begin
     // else we already have the symbol generated!
     assert(sym.loc.r <> nil);
-    app(m.s[cfsData], 'extern ');
-    appf(m.s[cfsData], 'NIM_CONST $1 $2;$n',
+    appff(m.s[cfsData], 
+      'extern NIM_CONST $1 $2;$n',
+      '$1 = linkonce constant $2 zeroinitializer',
       [getTypeDesc(m, sym.loc.t), sym.loc.r])
   end
 end;
@@ -618,27 +799,36 @@ end;
 function getFileHeader(const cfilenoext: string): PRope;
 begin
   if optCompileOnly in gGlobalOptions then
-    result := ropef(
+    result := ropeff(
       '/* Generated by the Nimrod Compiler v$1 */$n' +
       '/*   (c) 2008 Andreas Rumpf */$n',
+      '; Generated by the Nimrod Compiler v$1$n' +
+      ';   (c) 2008 Andreas Rumpf$n',
       [toRope(versionAsString)])
   else
-    result := ropef(
+    result := ropeff(
       '/* Generated by the Nimrod Compiler v$1 */$n' +
       '/*   (c) 2008 Andreas Rumpf */$n' +
       '/* Compiled for: $2, $3, $4 */$n' +
       '/* Command for C compiler:$n   $5 */$n',
+      '; Generated by the Nimrod Compiler v$1$n' +
+      ';   (c) 2008 Andreas Rumpf$n' +
+      '; Compiled for: $2, $3, $4$n' +
+      '; Command for C compiler:$n   $5$n',
       [toRope(versionAsString), toRope(platform.OS[targetOS].name),
       toRope(platform.CPU[targetCPU].name),
       toRope(extccomp.CC[extccomp.ccompiler].name),
       toRope(getCompileCFileCmd(cfilenoext))]);
   case platform.CPU[targetCPU].intSize of
-    16: appf(result, '$ntypedef short int NI;$n' +
-                     'typedef unsigned short int NU;$n', []);
-    32: appf(result, '$ntypedef long int NI;$n' +
-                     'typedef unsigned long int NU;$n', []);
-    64: appf(result, '$ntypedef long long int NI;$n' +
-                     'typedef unsigned long long int NU;$n', []);
+    16: appff(result, '$ntypedef short int NI;$n' +
+                      'typedef unsigned short int NU;$n',
+                      '$n%NI = type i16$n', []);
+    32: appff(result, '$ntypedef long int NI;$n' +
+                      'typedef unsigned long int NU;$n',
+                      '$n%NI = type i32$n', []);
+    64: appff(result, '$ntypedef long long int NI;$n' +
+                      'typedef unsigned long long int NU;$n',
+                      '$n%NI = type i64$n', []);
     else begin end
   end
 end;
@@ -651,18 +841,37 @@ const
     '  systemInit();$n' +
     '$1' +
     '$2';
+  CommonMainBodyLLVM = 
+    '  %MOC$3 = bitcast [8 x %NI]* %dummy to i8*$n' +
+    '  call void @setStackBottom(i8* %MOC$3)$n' +
+    '  call void @nim__datInit()$n' +
+    '  call void systemInit()$n' +
+    '$1' +
+    '$2';    
   PosixMain =
-    'NI cmdCount;$n' +
+    'int cmdCount;$n' +
     'char** cmdLine;$n' +
     'char** gEnv;$n' +
     'int main(int argc, char** args, char** env) {$n' +
     '  int dummy[8];$n' +
     '  cmdLine = args;$n' +
-    '  cmdCount = (NI)argc;$n' +
+    '  cmdCount = argc;$n' +
     '  gEnv = env;$n' +{&}
     CommonMainBody +{&}
     '  return 0;$n' +
     '}$n';
+  PosixMainLLVM =
+    '@cmdCount = linkonce i32$n' +
+    '@cmdLine = linkonce i8**$n' +
+    '@gEnv = linkonce i8**$n' +
+    'define i32 @main(i32 %argc, i8** %args, i8** %env) {$n' +
+    '  %dummy = alloca [8 x %NI]$n' +
+    '  store i8** %args, i8*** @cmdLine$n' +
+    '  store i32 %argc, i32* @cmdCount$n' +
+    '  store i8** %env, i8*** @gEnv$n' +{&}
+    CommonMainBodyLLVM +{&}
+    '  ret i32 0$n' +
+    '}$n';
   WinMain =
     'N_STDCALL(int, WinMain)(HINSTANCE hCurInstance, $n' +
     '                        HINSTANCE hPrevInstance, $n' +
@@ -671,6 +880,14 @@ const
     CommonMainBody +{&}
     '  return 0;$n' +
     '}$n';
+  WinMainLLVM =
+    'define stdcall i32 @WinMain(i32 %hCurInstance, $n' +
+    '                            i32 %hPrevInstance, $n' +
+    '                            i8* %lpCmdLine, i32 %nCmdShow) {$n' +
+    '  %dummy = alloca [8 x %NI]$n' +{&}
+    CommonMainBodyLLVM +{&}
+    '  ret i32 0$n' +
+    '}$n';
   WinDllMain =
     'BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, $n' +
     '                    LPVOID lpvReserved) {$n' +
@@ -678,6 +895,13 @@ const
     CommonMainBody +{&}
     '  return 1;$n' +
     '}$n';
+  WinDllMainLLVM =
+    'define stdcall i32 @DllMain(i32 %hinstDLL, i32 %fwdreason, $n' +
+    '                            i8* %lpvReserved) {$n' +
+    '  %dummy = alloca [8 x %NI]$n' +{&}
+    CommonMainBodyLLVM +{&}
+    '  ret i32 1$n' +
+    '}$n';
 var
   frmt: TFormatStr;
 begin
@@ -685,21 +909,28 @@ begin
   if (platform.targetOS = osWindows) and
       (gGlobalOptions * [optGenGuiApp, optGenDynLib] <> []) then begin
     if optGenGuiApp in gGlobalOptions then
-      frmt := WinMain
+      if gCmd = cmdCompileToLLVM then frmt := WinMainLLVM else frmt := WinMain
     else
-      frmt := WinDllMain;
+      if gCmd = cmdCompileToLLVM then 
+        frmt := WinDllMainLLVM 
+      else 
+        frmt := WinDllMain;
     {@discard} lists.IncludeStr(m.headerFiles, '<windows.h>')
   end
-  else
-    frmt := PosixMain;
+  else 
+    if gCmd = cmdCompileToLLVM then 
+      frmt := PosixMainLLVM 
+    else 
+      frmt := PosixMain;
   if gBreakpoints <> nil then
     useMagic(m, 'dbgRegisterBreakpoint');
-  appf(m.s[cfsProcs], frmt, [gBreakpoints, mainModInit])
+  inc(m.labels);
+  appf(m.s[cfsProcs], frmt, [gBreakpoints, mainModInit, toRope(m.labels)])
 end;
 
 function getInitName(m: PSym): PRope;
 begin
-  result := con(m.name.s, toRope('Init'));
+  result := ropeff('$1Init', '@$1Init', [toRope(m.name.s)]);
 end;
 
 procedure registerModuleToMain(m: PSym);
@@ -707,14 +938,15 @@ var
   initname: PRope;
 begin
   initname := getInitName(m);
-  appf(mainModProcs, 'N_NOINLINE(void, $1)(void);$n', [initname]);
+  appff(mainModProcs, 'N_NOINLINE(void, $1)(void);$n',
+                      'declare void $1() noinline$n', [initname]);
   if not (sfSystemModule in m.flags) then
-    appf(mainModInit, '$1();$n', [initname]);
+    appff(mainModInit, '$1();$n', 'call void ()* $1$n', [initname]);
 end;
 
 procedure genInitCode(m: BModule);
 var
-  initname, prc: PRope;
+  initname, prc, procname, filename: PRope;
 begin
   if optProfiler in m.initProc.options then begin
     // This does not really belong here, but there is no good place for this
@@ -723,31 +955,28 @@ begin
     {@discard} lists.IncludeStr(m.headerFiles, '<cycle.h>');
   end;
   initname := getInitName(m.module);
-  prc := ropef('N_NOINLINE(void, $1)(void) {$n', [initname]);
-  
+  prc := ropeff('N_NOINLINE(void, $1)(void) {$n',
+                'define void $1() noinline {$n', [initname]);
   if m.typeNodes > 0 then begin
     useMagic(m, 'TNimNode');
-    appf(m.s[cfsTypeInit1], 'static TNimNode $1[$2];$n', 
+    appff(m.s[cfsTypeInit1], 'static TNimNode $1[$2];$n',
+         '$1 = private alloca [$2 x @TNimNode]$n', 
          [m.typeNodesName, toRope(m.typeNodes)]);
   end;
   if m.nimTypes > 0 then begin
     useMagic(m, 'TNimType');
-    appf(m.s[cfsTypeInit1], 'static TNimType $1[$2];$n', 
+    appff(m.s[cfsTypeInit1], 'static TNimType $1[$2];$n', 
+         '$1 = private alloca [$2 x @TNimType]$n',
          [m.nimTypesName, toRope(m.nimTypes)]);
   end;
   if optStackTrace in m.initProc.options then begin
     getFrameDecl(m.initProc);
     app(prc, m.initProc.s[cpsLocals]);
     app(prc, m.s[cfsTypeInit1]);
-    appf(prc,
-      'F.len = 0;$n' + // IMPORTANT: else the debugger crashes!
-      'F.procname = $1;$n' +
-      'F.prev = framePtr;$n' +
-      'F.filename = $2;$n' +
-      'F.line = 0;$n' +
-      'framePtr = (TFrame*)&F;$n',
-      [makeCString('module ' + m.module.name.s),
-      makeCString(toFilename(m.module.info))])
+    
+    procname := CStringLit(m.initProc, prc, 'module ' +{&} m.module.name.s);
+    filename := CStringLit(m.initProc, prc, toFilename(m.module.info));
+    app(prc, initFrame(m.initProc, procname, filename));
   end
   else begin
     app(prc, m.initProc.s[cpsLocals]);
@@ -760,7 +989,7 @@ begin
   app(prc, m.initProc.s[cpsInit]);
   app(prc, m.initProc.s[cpsStmts]);
   if optStackTrace in m.initProc.options then
-    app(prc, 'framePtr = framePtr->prev;' + tnl);
+    app(prc, deinitFrame(m.initProc));
   app(prc, '}' +{&} tnl +{&} tnl);
   app(m.s[cfsProcs], prc)
 end;
@@ -817,7 +1046,8 @@ begin
   s := NewSym(skModule, getIdent(moduleName), nil);
   gmti := rawNewModule(s, joinPath(options.projectPath, moduleName)+'.nim');
   addPendingModule(gmti);
-  appf(mainModProcs, 'N_NOINLINE(void, $1)(void);$n', [getInitName(s)]);
+  appff(mainModProcs, 'N_NOINLINE(void, $1)(void);$n',
+                      'declare void $1() noinline$n', [getInitName(s)]);
 end;
 
 function myOpen(module: PSym; const filename: string): PPassContext;
diff --git a/nim/commands.pas b/nim/commands.pas
index d87a8f084..8a4435eb0 100644
--- a/nim/commands.pas
+++ b/nim/commands.pas
@@ -77,14 +77,14 @@ const
 +{&} '  --debugger:on|off         turn Embedded Nimrod Debugger ON|OFF' +{&} nl
 +{&} '  -x, --checks:on|off       code generation for all runtime checks ON|OFF' +{&} nl
 +{&} '  --obj_checks:on|off       code generation for obj conversion checks ON|OFF' +{&} nl
-+{&} '  --field_checks:on|off     code generation for case record fields ON|OFF' +{&} nl
++{&} '  --field_checks:on|off     code generation for case variant fields ON|OFF' +{&} nl
 +{&} '  --range_checks:on|off     code generation for range checks ON|OFF' +{&} nl
 +{&} '  --bound_checks:on|off     code generation for bound checks ON|OFF' +{&} nl
 +{&} '  --overflow_checks:on|off  code generation for over-/underflow checks ON|OFF' +{&} nl
 +{&} '  -a, --assertions:on|off   code generation for assertions ON|OFF' +{&} nl
 +{&} '  --dead_code_elim:on|off   whole program dead code elimination ON|OFF' +{&} nl
 +{&} '  --opt:none|speed|size     optimize not at all or for speed|size' +{&} nl
-+{&} '  --app:console|gui|lib     generate a console|GUI application or a shared lib' +{&} nl
++{&} '  --app:console|gui         generate a console|GUI application' +{&} nl
 +{&} '  -r, --run                 run the compiled program with given arguments' +{&} nl
 +{&} '  --advanced                show advanced command line switches' +{&} nl
 +{&} '  -h, --help                show this help' +{&} nl
@@ -125,7 +125,6 @@ const
 +{&} '  --checkpoints:on|off      turn on|off checkpoints; for debugging Nimrod' +{&} nl
 +{&} '  --skip_cfg                do not read the general configuration file' +{&} nl
 +{&} '  --skip_proj_cfg           do not read the project''s configuration file' +{&} nl
-+{&} '  --import:MODULE_FILE      import the given module implicitly for each module' +{&} nl
 +{&} '  --index:FILE              use FILE to generate a documenation index file' +{&} nl
 +{&} '  --putenv:key=value        set an environment variable' +{&} nl
 +{&} '  --list_cmd                list the commands used to execute external programs' +{&} nl
@@ -506,7 +505,7 @@ begin
       expectArg(switch, arg, pass, info);
       gErrorMax := parseInt(arg);
     end;
-    else if findSubStr('.', switch) >= strStart then
+    else if strutils.find(switch, '.') >= strStart then
       options.setConfigVar(switch, arg)
     else
       InvalidCmdLineOption(pass, switch, info)
diff --git a/nim/debugids.pas b/nim/debugids.pas
deleted file mode 100644
index fff9ed10b..000000000
--- a/nim/debugids.pas
+++ /dev/null
@@ -1,129 +0,0 @@
-//
-//
-//           The Nimrod Compiler
-//        (c) Copyright 2008 Andreas Rumpf
-//
-//    See the file "copying.txt", included in this
-//    distribution, for details about the copyright.
-//
-unit debugids;
-
-interface
-
-{$include 'config.inc'}
-
-uses
-  nsystem, nos, strutils, ast;
-
-const
-  idfile = 'debugids.txt';
-
-// This module implements debugging facilities for the ID mechanism.
-procedure registerID(s: PSym);
-
-procedure writeIDTable();
-procedure loadIDTable();
-
-implementation
-
-type
-  TIdSymTuple = record{@tuple} // keep id from sym to better detect bugs
-    id: int;
-    s: PSym;
-  end;
-  TIdSymTupleSeq = array of TIdSymTuple;
-  TIdSymTable = record
-    counter: int;
-    data: TIdSymTupleSeq;
-  end;
-
-function TableRawGet(const t: TTable; key: PObject): int;
-var
-  h: THash;
-begin
-  h := hashNode(key) and high(t.data); // start with real hash value
-  while t.data[h].key <> nil do begin
-    if (t.data[h].key = key) then begin
-      result := h; exit
-    end;
-    h := nextTry(h, high(t.data))
-  end;
-  result := -1
-end;
-
-function TableSearch(const t: TTable; key, closure: PObject;
-                     comparator: TCmpProc): PObject;
-var
-  h: THash;
-begin
-  h := hashNode(key) and high(t.data); // start with real hash value
-  while t.data[h].key <> nil do begin
-    if (t.data[h].key = key) then
-      if comparator(t.data[h].val, closure) then begin // BUGFIX 1
-        result := t.data[h].val; exit
-      end;
-    h := nextTry(h, high(t.data))
-  end;
-  result := nil
-end;
-
-function TableGet(const t: TTable; key: PObject): PObject;
-var
-  index: int;
-begin
-  index := TableRawGet(t, key);
-  if index >= 0 then result := t.data[index].val
-  else result := nil
-end;
-
-procedure TableRawInsert(var data: TPairSeq; key, val: PObject);
-var
-  h: THash;
-begin
-  h := HashNode(key) and high(data);
-  while data[h].key <> nil do begin
-    assert(data[h].key <> key);
-    h := nextTry(h, high(data))
-  end;
-  assert(data[h].key = nil);
-  data[h].key := key;
-  data[h].val := val;
-end;
-
-procedure TableEnlarge(var t: TTable);
-var
-  n: TPairSeq;
-  i: int;
-begin
-{@ignore}
-  n := emptySeq;
-  setLength(n, length(t.data) * growthFactor);
-  fillChar(n[0], length(n)*sizeof(n[0]), 0);
-{@emit
-  newSeq(n, length(t.data) * growthFactor); }
-  for i := 0 to high(t.data) do
-    if t.data[i].key <> nil then
-      TableRawInsert(n, t.data[i].key, t.data[i].val);
-{@ignore}
-  t.data := n;
-{@emit
-  swap(t.data, n);
-}
-end;
-
-procedure TablePut(var t: TTable; key, val: PObject);
-var
-  index: int;
-begin
-  index := TableRawGet(t, key);
-  if index >= 0 then
-    t.data[index].val := val
-  else begin
-    if mustRehash(length(t.data), t.counter) then TableEnlarge(t);
-    TableRawInsert(t.data, key, val);
-    inc(t.counter)
-  end;
-end;
-
-
-end.
diff --git a/nim/docgen.pas b/nim/docgen.pas
index bd4613180..15969f51d 100644
--- a/nim/docgen.pas
+++ b/nim/docgen.pas
@@ -40,7 +40,7 @@ type
     modDesc: PRope;     // module description
     dependsOn: PRope;   // dependencies
     id: int;            // for generating IDs
-    splitAfter: int;    // split to long entries in the TOC
+    splitAfter: int;    // split too long entries in the TOC
     tocPart: array of TTocEntry;
     hasToc: bool;
     toc, section: TSections;
@@ -777,7 +777,7 @@ begin
     rnLineBlock: outer := '<p>$1</p>';
     rnLineBlockItem: outer := '$1<br />';
 
-    rnBlockQuote: outer := '<blockquote>$1</blockquote>$n';
+    rnBlockQuote: outer := '<blockquote><p>$1</p></blockquote>$n';
 
     rnTable, rnGridTable:
       outer := '<table border="1" class="docutils">$1</table>';
diff --git a/nim/extccomp.pas b/nim/extccomp.pas
index 51cf009d1..f51e5f690 100644
--- a/nim/extccomp.pas
+++ b/nim/extccomp.pas
@@ -352,13 +352,13 @@ end;
 
 procedure addCompileOption(const option: string);
 begin
-  if strutils.findSubStr(option, compileOptions, strStart) < strStart then
+  if strutils.find(compileOptions, option, strStart) < strStart then
     addOpt(compileOptions, option)
 end;
 
 procedure addLinkOption(const option: string);
 begin
-  if findSubStr(option, linkOptions, strStart) < strStart then
+  if find(linkOptions, option, strStart) < strStart then
     addOpt(linkOptions, option)
 end;
 
diff --git a/nim/idents.pas b/nim/idents.pas
index 44957ba7a..c0e4c994f 100644
--- a/nim/idents.pas
+++ b/nim/idents.pas
@@ -1,7 +1,7 @@
 //
 //
 //           The Nimrod Compiler
-//        (c) Copyright 2008 Andreas Rumpf
+//        (c) Copyright 2009 Andreas Rumpf
 //
 //    See the file "copying.txt", included in this
 //    distribution, for details about the copyright.
@@ -38,8 +38,15 @@ function getIdent(identifier: cstring; len: int; h: THash): PIdent; overload;
   // special version for the scanner; the scanner's buffering scheme makes
   // this horribly efficient. Most of the time no character copying is needed!
 
+function IdentEq(id: PIdent; const name: string): bool;
+
 implementation
 
+function IdentEq(id: PIdent; const name: string): bool;
+begin
+  result := id.id = getIdent(name).id;
+end;
+
 var
   buckets: array [0..4096*2-1] of PIdent;
 
diff --git a/nim/llstream.pas b/nim/llstream.pas
index 2d4336664..df4c823a6 100644
--- a/nim/llstream.pas
+++ b/nim/llstream.pas
@@ -22,7 +22,7 @@ type
     llsFile,          // stream encapsulates a file
     llsStdIn);        // stream encapsulates stdin
   TLLStream = object(NObject)
-    kind: TLLStreamKind; // exposed for low-level access (lexbase uses this)
+    kind: TLLStreamKind; // accessible for low-level access (lexbase uses this)
     f: TBinaryFile;
     s: string;
     pos: int; // for string streams
diff --git a/nim/main.pas b/nim/main.pas
index 565373685..c888e5c3c 100644
--- a/nim/main.pas
+++ b/nim/main.pas
@@ -119,7 +119,7 @@ procedure CompileProject(const filename: string);
 begin
   {@discard} CompileModule(
     JoinPath(options.libpath, appendFileExt('system', nimExt)), false, true);
-  {@discard} CompileModule(filename, true, false);
+  {@discard} CompileModule(appendFileExt(filename, nimExt), true, false);
 end;
 
 procedure semanticPasses;
@@ -352,6 +352,11 @@ begin
       wantFile(filename);
       CommandCompileToEcmaScript(filename);
     end;
+    wCompileToLLVM: begin
+      gCmd := cmdCompileToLLVM;
+      wantFile(filename);
+      CommandCompileToC(filename);
+    end;
     wPretty: begin
       gCmd := cmdPretty;
       wantFile(filename);
diff --git a/nim/msgs.pas b/nim/msgs.pas
index a91c328ef..0eb1651d9 100644
--- a/nim/msgs.pas
+++ b/nim/msgs.pas
@@ -278,6 +278,7 @@ type
     errXRequiresOneArgument,
     errUnhandledExceptionX,
     errCyclicTree,
+    errXisNoMacroOrTemplate,
     errUser,
     warnCannotOpenFile,
     warnOctalEscape,
@@ -491,7 +492,7 @@ const
     '$1 here not allowed',
     'invalid control flow: $1',
     'a type has no value',
-    '''$1'' is no type',
+    'invalid type: ''$1''',
     '''^'' needs a pointer or reference type',
     'invalid context for builtin ''$1''',
     'invalid expression',
@@ -536,6 +537,7 @@ const
     'converter requires one parameter',
     'unhandled exception: $1',
     'macro returned a cyclic abstract syntax tree',
+    '''$1'' is no macro or template',
     '$1',
     'cannot open ''$1'' [CannotOpenFile]',
     'octal escape sequences do not exist; leading zero is ignored [OctalEscape]',
@@ -645,8 +647,8 @@ const // this format is understood by many text editors: it is the same that
 procedure MessageOut(const s: string);

 

 procedure rawMessage(const msg: TMsgKind; const arg: string = ''); overload;

-procedure rawMessage(const msg: TMsgKind; const args: array of string); overload;
-
+procedure rawMessage(const msg: TMsgKind; const args: array of string); overload;

+

 procedure liMessage(const info: TLineInfo; const msg: TMsgKind;

                     const arg: string = '');

 

@@ -840,37 +842,37 @@ begin
                              getMessageStr(errInstantiationFrom, '')]));

   end;

 end;

-
-procedure rawMessage(const msg: TMsgKind; const args: array of string);
-var
-  frmt: string;
-begin
-  case msg of
-    errMin..errMax: begin
-      writeContext();
-      frmt := rawErrorFormat;
-    end;
-    warnMin..warnMax: begin
-      if not (optWarns in gOptions) then exit;
-      if not (msg in gNotes) then exit;
-      frmt := rawWarningFormat;
-      inc(gWarnCounter);
-    end;
-    hintMin..hintMax: begin
-      if not (optHints in gOptions) then exit;
-      if not (msg in gNotes) then exit;
-      frmt := rawHintFormat;
-      inc(gHintCounter);
-    end;
-    else assert(false) // cannot happen
-  end;
-  MessageOut(Format(frmt, format(msgKindToString(msg), args)));
-  handleError(msg);
-end;
+

+procedure rawMessage(const msg: TMsgKind; const args: array of string);

+var

+  frmt: string;

+begin

+  case msg of

+    errMin..errMax: begin

+      writeContext();

+      frmt := rawErrorFormat;

+    end;

+    warnMin..warnMax: begin

+      if not (optWarns in gOptions) then exit;

+      if not (msg in gNotes) then exit;

+      frmt := rawWarningFormat;

+      inc(gWarnCounter);

+    end;

+    hintMin..hintMax: begin

+      if not (optHints in gOptions) then exit;

+      if not (msg in gNotes) then exit;

+      frmt := rawHintFormat;

+      inc(gHintCounter);

+    end;

+    else assert(false) // cannot happen

+  end;

+  MessageOut(Format(frmt, format(msgKindToString(msg), args)));

+  handleError(msg);

+end;

 

 procedure rawMessage(const msg: TMsgKind; const arg: string = '');

-begin
-  rawMessage(msg, [arg]);
+begin

+  rawMessage(msg, [arg]);

 end;

 

 procedure liMessage(const info: TLineInfo; const msg: TMsgKind;

diff --git a/nim/nimconf.pas b/nim/nimconf.pas
index 1a70abdbe..8f908bf62 100644
--- a/nim/nimconf.pas
+++ b/nim/nimconf.pas
@@ -9,9 +9,7 @@
 
 unit nimconf;
 
-// This module used to handle the reading of the config file. We now just
-// read environment variables. This is easier to avoid bootstraping issues.
-
+// This module handles the reading of the config file.
 {$include 'config.inc'}
 
 interface
@@ -258,7 +256,7 @@ begin
     addChar(s, '.');
     confTok(L, tok);
     checkSymbol(L, tok);
-    s := s +{&} tokToStr(tok);
+    add(s, tokToStr(tok));
     confTok(L, tok)
   end;
   if tok.tokType = tkBracketLe then begin
@@ -266,7 +264,7 @@ begin
     // BUGFIX: do not copy '['!
     confTok(L, tok);
     checkSymbol(L, tok);
-    val := val +{&} tokToStr(tok);
+    add(val, tokToStr(tok));
     confTok(L, tok);
     if tok.tokType = tkBracketRi then confTok(L, tok)
     else lexMessage(L, errTokenExpected, ''']''');
@@ -276,12 +274,12 @@ begin
     if length(val) > 0 then addChar(val, ':'); // BUGFIX
     confTok(L, tok); // skip ':' or '='
     checkSymbol(L, tok);
-    val := val +{&} tokToStr(tok);
+    add(val, tokToStr(tok));
     confTok(L, tok); // skip symbol
     while (tok.ident <> nil) and (tok.ident.id = getIdent('&'+'').id) do begin
       confTok(L, tok);
       checkSymbol(L, tok);
-      val := val +{&} tokToStr(tok);
+      add(val, tokToStr(tok));
       confTok(L, tok)
     end
   end;
diff --git a/nim/nimrod.pas b/nim/nimrod.pas
index 99d9a9d0f..728325ccc 100644
--- a/nim/nimrod.pas
+++ b/nim/nimrod.pas
@@ -61,7 +61,7 @@ type
 
 procedure HandleCmdLine;
 var
-  command, filename: string;
+  command, filename, prog: string;
   start: TTime;
 begin
   {@emit start := getTime(); }
@@ -92,13 +92,21 @@ begin
                                 toString(getTime() - start)]);
     }
     end;
-    if optRun in gGlobalOptions then
-      execExternalProgram(quoteIfContainsWhite(changeFileExt(filename, '')) +{&}
-                         ' ' +{&} arguments)
+    if optRun in gGlobalOptions then begin
+      {$ifdef unix}
+      prog := './' + quoteIfContainsWhite(changeFileExt(filename, ''));
+      {$else}
+      prog := quoteIfContainsWhite(changeFileExt(filename, ''));
+      {$endif}
+      execExternalProgram(prog +{&} ' ' +{&} arguments)
+    end
   end
 end;
 
 begin
+//{@emit
+//  GC_disableMarkAndSweep();
+//}
   cmdLineInfo := newLineInfo('command line', -1, -1);
   condsyms.InitDefines();
   HandleCmdLine();
diff --git a/nim/nos.pas b/nim/nos.pas
index 73b17ae58..4926c99b0 100644
--- a/nim/nos.pas
+++ b/nim/nos.pas
@@ -123,7 +123,7 @@ procedure createDir(const dir: string);
 var
   i: int;
 begin
-  for i := 1 to length(dir) do begin
+  for i := 2 to length(dir) do begin
     if dir[i] in [sep, altsep] then sysutils.createDir(ncopy(dir, 1, i-1));
   end;
   sysutils.createDir(dir);
diff --git a/nim/nsystem.pas b/nim/nsystem.pas
index f476e09ca..51ca05605 100644
--- a/nim/nsystem.pas
+++ b/nim/nsystem.pas
@@ -43,6 +43,7 @@ type
 {$endif}
   EOutOfRange = class(Exception)
   end;
+  EOS = class(Exception) end;
 
   float32 = single;
   float64 = double;
diff --git a/nim/nversion.pas b/nim/nversion.pas
index 7d179bb35..de0ad2b79 100644
--- a/nim/nversion.pas
+++ b/nim/nversion.pas
@@ -31,10 +31,10 @@ const
   //cog.outl('VersionMinor = %s;' % ver[1])
   //cog.outl('VersionPatch = %s;' % ver[2])
   //]]]
-  VersionAsString = '0.7.4';
+  VersionAsString = '0.7.6';
   VersionMajor = 0;
   VersionMinor = 7;
-  VersionPatch = 4;
+  VersionPatch = 6;
   //[[[[end]]]]
 
 implementation
diff --git a/nim/options.pas b/nim/options.pas
index 5bbfbbbee..d6f6d14da 100644
--- a/nim/options.pas
+++ b/nim/options.pas
@@ -55,6 +55,7 @@ type
     cmdCompileToC,
     cmdCompileToCpp,
     cmdCompileToEcmaScript,
+    cmdCompileToLLVM,
     cmdInterpret,
     cmdPretty,
     cmdDoc,
@@ -207,7 +208,15 @@ begin
   if startsWith(dir, prefix) then begin
     result := ncopy(dir, length(prefix) + strStart); exit
   end;
-  result := dir
+  result := dir;
+end;
+
+function removeTrailingDirSep(const path: string): string;
+begin
+  if (length(path) > 0) and (path[length(path)+strStart-1] = dirSep) then
+    result := ncopy(path, strStart, length(path)+strStart-2)
+  else
+    result := path
 end;
 
 function toGeneratedFile(const path, ext: string): string;
@@ -215,7 +224,8 @@ var
   head, tail: string;
 begin
   splitPath(path, head, tail);
-  result := joinPath([projectPath, genSubDir, shortenDir(head +{&} dirSep), 
+  if length(head) > 0 then head := shortenDir(head +{&} dirSep);
+  result := joinPath([projectPath, genSubDir, head, 
                       changeFileExt(tail, ext)])
 end;
 
@@ -225,10 +235,18 @@ var
   head, tail, subdir: string;
 begin
   splitPath(f, head, tail);
-  subdir := joinPath([projectPath, genSubDir, shortenDir(head +{&} dirSep)]);
+  if length(head) > 0 then
+    head := removeTrailingDirSep(shortenDir(head +{&} dirSep));
+  subdir := joinPath([projectPath, genSubDir, head]);
   if createSubDir then begin
-    //Writeln(output, subdir);
-    createDir(subdir);
+    try
+      createDir(subdir);
+    except
+      on EOS do begin
+        writeln(output, 'cannot create directory: ' + subdir);
+        halt(1)
+      end
+    end
   end;
   result := joinPath(subdir, tail)
 end;
diff --git a/nim/parsecfg.pas b/nim/parsecfg.pas
index a99da6852..3c10cc8fc 100644
--- a/nim/parsecfg.pas
+++ b/nim/parsecfg.pas
@@ -350,7 +350,7 @@ begin
       addChar(result.key, '.');
       rawGetTok(c, c.tok);
       if c.tok.kind = tkSymbol then begin
-        result.key := result.key +{&} c.tok.literal;
+        add(result.key, c.tok.literal);
         rawGetTok(c, c.tok);
       end
       else begin
diff --git a/nim/passes.pas b/nim/passes.pas
index 028cfc2a2..f5dff3559 100644
--- a/nim/passes.pas
+++ b/nim/passes.pas
@@ -57,7 +57,7 @@ function astNeeded(s: PSym): bool;
   // appropriate to free the procedure body's memory. This is important
   // to keep memory usage down.
 
-// some passes (the semantic checker) need these:
+// the semantic checker needs these:
 var
   gImportModule: function (const filename: string): PSym;
   gIncludeFile: function (const filename: string): PNode;
diff --git a/nim/platform.pas b/nim/platform.pas
index 8bf4f3d9b..9f8d30f60 100644
--- a/nim/platform.pas
+++ b/nim/platform.pas
@@ -12,7 +12,7 @@ unit platform;
 // and operating systems.
 // Note: Unfortunately if an OS or CPU is listed here this does not mean that
 // Nimrod has been tested on this platform or that the RTL has been ported.
-// Feel free to test for your exentric platform!
+// Feel free to test for your excentric platform!
 
 interface
 
diff --git a/nim/pragmas.pas b/nim/pragmas.pas
index 636a1198a..9a60e6bd3 100644
--- a/nim/pragmas.pas
+++ b/nim/pragmas.pas
@@ -228,7 +228,7 @@ procedure processDynLib(c: PContext; n: PNode; sym: PSym);
 var
   lib: PLib;
 begin
-  if sym = nil then
+  if (sym = nil) or (sym.kind = skModule) then
     POptionEntry(c.optionStack.tail).dynlib := getLib(c, libDynamic,
                                                       expectStrLit(c, n))
   else begin
@@ -553,13 +553,6 @@ begin
           wPassL: extccomp.addLinkOption(expectStrLit(c, it));
           wPassC: extccomp.addCompileOption(expectStrLit(c, it));
 
-          // fixupSystem not even documented:
-          wFixupSystem: begin
-            if c.module = magicSys.SystemModule then
-              magicsys.FinishSystem(magicsys.SystemModule.tab)
-            else
-              invalidPragma(it)
-          end;
           wBreakpoint: PragmaBreakpoint(c, it);
           wCheckpoint: PragmaCheckpoint(c, it);
 
@@ -585,7 +578,7 @@ begin
       processNote(c, n)
     end;
   end;
-  if sym <> nil then begin
+  if (sym <> nil) and (sym.kind <> skModule) then begin
     lib := POptionEntry(c.optionstack.tail).dynlib;
     if ([lfDynamicLib, lfHeader] * sym.loc.flags = []) and
          (sfImportc in sym.flags) and
@@ -625,7 +618,7 @@ begin
       wHints, wLinedir, wStacktrace, wLinetrace, wOptimization,
       wHint, wWarning, wError, wFatal, wDefine, wUndef,
       wCompile, wLink, wLinkSys, wPure,
-      wPush, wPop, wFixupSystem, wBreakpoint, wCheckpoint,
+      wPush, wPop, wBreakpoint, wCheckpoint,
       wPassL, wPassC, wDeadCodeElim]);
 end;
 
diff --git a/nim/rodread.pas b/nim/rodread.pas
index 549cfec58..a34153ccf 100644
--- a/nim/rodread.pas
+++ b/nim/rodread.pas
@@ -1,7 +1,7 @@
 //
 //
 //           The Nimrod Compiler
-//        (c) Copyright 2008 Andreas Rumpf
+//        (c) Copyright 2009 Andreas Rumpf
 //
 //    See the file "copying.txt", included in this
 //    distribution, for details about the copyright.
@@ -123,7 +123,7 @@ type
     files: TStringSeq;
     dataIdx: int;       // offset of start of data section
     convertersIdx: int; // offset of start of converters section
-    initIdx, interfIdx, compilerProcsIdx: int;
+    initIdx, interfIdx, compilerProcsIdx, cgenIdx: int;
     filename: string;
     index, imports: TIndex;
     readerIndex: int;
@@ -841,6 +841,10 @@ begin
       r.initIdx := r.pos+2; // "(\10"
       skipSection(r);
     end
+    else if section = 'CGEN' then begin
+      r.cgenIdx := r.pos+2;
+      skipSection(r);
+    end
     else begin
       MessageOut('skipping section: ' + toString(r.pos));
       skipSection(r);
diff --git a/nim/rodwrite.pas b/nim/rodwrite.pas
index 637f69ff7..72d5c893d 100644
--- a/nim/rodwrite.pas
+++ b/nim/rodwrite.pas
@@ -530,6 +530,7 @@ begin
     nkVarSection: begin
       for i := 0 to sonsLen(n)-1 do begin
         a := n.sons[i];
+        if a.kind = nkCommentStmt then continue;
         if a.kind <> nkIdentDefs then InternalError(a.info, 'rodwrite.process');
         addInterfaceSym(w, a.sons[0].sym);
       end
@@ -537,6 +538,7 @@ begin
     nkConstSection: begin
       for i := 0 to sonsLen(n)-1 do begin
         a := n.sons[i];
+        if a.kind = nkCommentStmt then continue;
         if a.kind <> nkConstDef then InternalError(a.info, 'rodwrite.process');
         addInterfaceSym(w, a.sons[0].sym);
       end
@@ -544,6 +546,7 @@ begin
     nkTypeSection: begin
       for i := 0 to sonsLen(n)-1 do begin
         a := n.sons[i];
+        if a.kind = nkCommentStmt then continue;
         if a.sons[0].kind <> nkSym then
           InternalError(a.info, 'rodwrite.process');
         s := a.sons[0].sym;
diff --git a/nim/ropes.pas b/nim/ropes.pas
index a6ba2a11b..864afd5b8 100644
--- a/nim/ropes.pas
+++ b/nim/ropes.pas
@@ -1,7 +1,7 @@
 //
 //
 //           The Nimrod Compiler
-//        (c) Copyright 2008 Andreas Rumpf
+//        (c) Copyright 2009 Andreas Rumpf
 //
 //    See the file "copying.txt", included in this
 //    distribution, for details about the copyright.
@@ -112,8 +112,6 @@ function ropef(const frmt: TFormatStr; const args: array of PRope): PRope;
 procedure appf(var c: PRope; const frmt: TFormatStr;
   const args: array of PRope);
 
-procedure RopeSeqInsert(var rs: TRopeSeq; r: PRope; at: Natural);
-
 function getCacheStats: string;
 
 function RopeEqualsFile(r: PRope; const f: string): Boolean;
@@ -524,8 +522,7 @@ begin
   assert(RopeInvariant(result));
 end;
 
-procedure appf(var c: PRope; const frmt: TFormatStr;
-  const args: array of PRope);
+procedure appf(var c: PRope; const frmt: TFormatStr; const args: array of PRope);
 begin
   app(c, ropef(frmt, args))
 end;
diff --git a/nim/rst.pas b/nim/rst.pas
index 55c2c933a..0c5377646 100644
--- a/nim/rst.pas
+++ b/nim/rst.pas
@@ -1967,6 +1967,10 @@ begin
       initParser(q, p.s);
       q.filename := filename;
       getTokens(readFile(path), false, q.tok);
+      // workaround a GCC bug: 
+      if find(q.tok[high(q.tok)].symbol, #0#1#2) > 0 then begin
+        InternalError('Too many binary zeros in include file');
+      end;
       result := parseDoc(q);
     end
   end
diff --git a/nim/scanner.pas b/nim/scanner.pas
index a78f9c6ce..d035b973b 100644
--- a/nim/scanner.pas
+++ b/nim/scanner.pas
@@ -428,7 +428,7 @@ begin
     L.bufpos := pos; // restore position
 
   try
-    if (L.buf[pos] = '0') and (L.buf[pos+1] in ['x','X','b','B','o','O'])
+    if (L.buf[pos] = '0') and (L.buf[pos+1] in ['x','X','b','B','o','O','c','C'])
     then begin
       inc(pos, 2);
       xi := 0;
@@ -451,7 +451,7 @@ begin
             end
           end
         end;
-        'o': begin
+        'o', 'c', 'C': begin
           result.base := base8;
           while true do begin
             case L.buf[pos] of
diff --git a/nim/sem.pas b/nim/sem.pas
index 6d97da3e8..3494754fd 100644
--- a/nim/sem.pas
+++ b/nim/sem.pas
@@ -1,7 +1,7 @@
 //
 //
 //           The Nimrod Compiler
-//        (c) Copyright 2008 Andreas Rumpf
+//        (c) Copyright 2009 Andreas Rumpf
 //
 //    See the file "copying.txt", included in this
 //    distribution, for details about the copyright.
@@ -183,7 +183,7 @@ begin
   c := newContext(module, filename);
   if (c.p <> nil) then InternalError(module.info, 'sem.myOpen');
   c.semConstExpr := semConstExpr;
-  c.p := newProcCon(nil);
+  c.p := newProcCon(module);
   pushOwner(c.module);
   openScope(c.tab); // scope for imported symbols
   SymTabAdd(c.tab, module); // a module knows itself
diff --git a/nim/semdata.pas b/nim/semdata.pas
index 9ffd41eac..3393ed4b3 100644
--- a/nim/semdata.pas
+++ b/nim/semdata.pas
@@ -1,7 +1,7 @@
 //
 //
 //           The Nimrod Compiler
-//        (c) Copyright 2008 Andreas Rumpf
+//        (c) Copyright 2009 Andreas Rumpf
 //
 //    See the file "copying.txt", included in this
 //    distribution, for details about the copyright.
@@ -128,6 +128,7 @@ end;
 
 function newProcCon(owner: PSym): PProcCon;
 begin
+  if owner = nil then InternalError('owner is nil');
   new(result);
 {@ignore}
   fillChar(result^, sizeof(result^), 0);
diff --git a/nim/semexprs.pas b/nim/semexprs.pas
index 3e95e3457..59d7f969a 100644
--- a/nim/semexprs.pas
+++ b/nim/semexprs.pas
@@ -1,7 +1,7 @@
 //
 //
 //           The Ethexor Morpork Compiler
-//        (c) Copyright 2008 Andreas Rumpf
+//        (c) Copyright 2009 Andreas Rumpf
 //
 //    See the file "copying.txt", included in this
 //    distribution, for details about the copyright.
@@ -87,19 +87,23 @@ begin
   end
 end;
 
-function isCastable(castDest, src: PType): Boolean;
+function isCastable(dst, src: PType): Boolean;
+//const
+//  castableTypeKinds = {@set}[tyInt, tyPtr, tyRef, tyCstring, tyString, 
+//                             tySequence, tyPointer, tyNil, tyOpenArray,
+//                             tyProc, tySet, tyEnum, tyBool, tyChar];
 var
   ds, ss: biggestInt;
 begin
   // this is very unrestrictive; cast is allowed if castDest.size >= src.size
-  ds := computeSize(castDest);
+  ds := computeSize(dst);
   ss := computeSize(src);
   if ds < 0 then result := false
   else if ss < 0 then result := false
-  else
+  else 
     result := (ds >= ss) or
-      (castDest.kind in [tyInt..tyFloat128]) or
-      (src.kind in [tyInt..tyFloat128])
+      (skipGeneric(dst).kind in [tyInt..tyFloat128]) or
+      (skipGeneric(src).kind in [tyInt..tyFloat128])
 end;
 
 function semConv(c: PContext; n: PNode; s: PSym): PNode;
@@ -620,6 +624,11 @@ begin
   end;
 end;
 
+procedure checkDeprecated(n: PNode; s: PSym);
+begin
+  if sfDeprecated in s.flags then liMessage(n.info, warnDeprecated, s.name.s);  
+end;
+
 function semSym(c: PContext; n: PNode; s: PSym; flags: TExprFlags): PNode;
 begin
   result := newSymNode(s);
@@ -652,7 +661,8 @@ begin
       end
     end
     else begin end
-  end
+  end;
+  checkDeprecated(n, s);
 end;
 
 function isTypeExpr(n: PNode): bool;
@@ -787,6 +797,7 @@ begin
       result := newSymNode(f);
       result.info := n.info;
       result.typ := ty;
+      checkDeprecated(n, f);
     end
     else
       liMessage(n.sons[1].info, errEnumHasNoValueX, i.s);
@@ -814,6 +825,7 @@ begin
         n.sons[0] := makeDeref(n.sons[0]);
         n.sons[1] := newSymNode(f); // we now have the correct field
         n.typ := f.typ;
+        checkDeprecated(n, f);
         if check = nil then result := n
         else begin
           check.sons[0] := n;
@@ -831,14 +843,17 @@ begin
       n.sons[1] := newSymNode(f);
       n.typ := f.typ;
       result := n;
+      checkDeprecated(n, f);
       exit
     end
   end;
   // allow things like "".replace(...)
   // --> replace("", ...)
   f := SymTabGet(c.tab, i);
-  if (f <> nil) and (f.kind = skStub) then loadStub(f);
-  if (f <> nil) and (f.kind in [skProc, skIterator]) then begin
+  //if (f <> nil) and (f.kind = skStub) then loadStub(f);
+  // XXX ``loadStub`` is not correct here as we don't care for ``f`` really
+  if (f <> nil) then begin
+    // BUGFIX: do not check for (f.kind in [skProc, skIterator]) here
     result := newNodeI(nkDotCall, n.info);
     // This special node kind is to merge with the call handler in `semExpr`.
     addSon(result, newIdentNode(i, n.info));
@@ -1121,6 +1136,57 @@ begin
     result := semFieldAccess(c, n, flags);
 end;
 
+function isCallExpr(n: PNode): bool;
+begin
+  result := n.kind in [nkCall, nkInfix, nkPrefix, nkPostfix, nkCommand];
+end;
+
+function semMacroStmt(c: PContext; n: PNode): PNode;
+var
+  s: PSym;
+  a: PNode;
+  i: int;
+begin
+  checkMinSonsLen(n, 2);
+  if isCallExpr(n.sons[0]) then
+    a := n.sons[0].sons[0]
+  else
+    a := n.sons[0];
+  s := qualifiedLookup(c, a, false);
+  if (s <> nil) then begin
+    checkDeprecated(n, s);
+    case s.kind of
+      skMacro: begin
+        include(s.flags, sfUsed);
+        result := semMacroExpr(c, n, s);
+      end;
+      skTemplate: begin
+        include(s.flags, sfUsed);
+        // transform
+        // nkMacroStmt(nkCall(a...), stmt, b...)
+        // to
+        // nkCall(a..., stmt, b...)
+        result := newNodeI(nkCall, n.info);
+        addSon(result, a);
+        if isCallExpr(n.sons[0]) then begin
+          for i := 1 to sonsLen(n.sons[0])-1 do
+            addSon(result, n.sons[0].sons[i]);
+        end;
+        for i := 1 to sonsLen(n)-1 do
+          addSon(result, n.sons[i]);
+        pushInfoContext(n.info);
+        result := evalTemplate(c, result, s);
+        popInfoContext();
+      end;
+      else
+        liMessage(n.info, errXisNoMacroOrTemplate, s.name.s);
+    end
+  end
+  else
+    liMessage(n.info, errInvalidExpressionX,
+              renderTree(a, {@set}[renderNoComments]));
+end;
+
 function semExpr(c: PContext; n: PNode; flags: TExprFlags = {@set}[]): PNode;
 var
   s: PSym;
@@ -1174,6 +1240,7 @@ begin
       checkMinSonsLen(n, 1);
       s := qualifiedLookup(c, n.sons[0], false);
       if (s <> nil) then begin
+        checkDeprecated(n, s);
         case s.kind of
           skMacro: begin
             include(s.flags, sfUsed);
@@ -1200,6 +1267,9 @@ begin
       end
       else result := semIndirectOp(c, n);
     end;
+    nkMacroStmt: begin
+      result := semMacroStmt(c, n);
+    end;
     nkBracketExpr: begin
       checkMinSonsLen(n, 1);
       s := qualifiedLookup(c, n.sons[0], false);
@@ -1221,7 +1291,7 @@ begin
     nkPar: begin
       case checkPar(n) of
         paNone: result := nil;
-        paTuplePositions:  result := semTuplePositionsConstr(c, n);
+        paTuplePositions: result := semTuplePositionsConstr(c, n);
         paTupleFields: result := semTupleFieldsConstr(c, n);
         paSingle: result := semExpr(c, n.sons[0]);
       end;
diff --git a/nim/semfold.pas b/nim/semfold.pas
index 422ddbd01..781c3b97d 100644
--- a/nim/semfold.pas
+++ b/nim/semfold.pas
@@ -406,6 +406,8 @@ begin
           else            result := copyTree(s.ast); // BUGFIX
         end
       end
+      else if s.kind = skProc then // BUGFIX
+        result := n
     end;
     nkCharLit..nkNilLit: result := copyNode(n);
     nkIfExpr: result := getConstIfExpr(module, n);
diff --git a/nim/seminst.pas b/nim/seminst.pas
index 4c3d416d4..a49d8478e 100644
--- a/nim/seminst.pas
+++ b/nim/seminst.pas
@@ -58,10 +58,29 @@ begin
   end
 end;
 
+procedure genericToConcreteTypeKind(t: PType);
+var
+  body: PNode;
+begin
+  if (t.kind = tyGeneric) and (t.sym <> nil) then begin
+    body := t.sym.ast.sons[2];
+    case body.kind of
+      nkObjectTy: t.kind := tyObject;
+      nkTupleTy: t.kind := tyTuple;
+      nkRefTy: t.kind := tyRef;
+      nkPtrTy: t.kind := tyPtr;
+      nkVarTy: t.kind := tyVar;
+      nkProcTy: t.kind := tyProc;
+      else InternalError('genericToConcreteTypeKind');
+    end
+  end
+end;
+
 function instantiateType(c: PInstantiateClosure; typ: PType): PType;
 var
   i: int;
 begin
+  if typ = nil then begin result := nil; exit end;
   result := PType(idTableGet(c.typeMap, typ));
   if result <> nil then exit;
   //if typ.kind = tyOpenArray then
@@ -73,6 +92,7 @@ begin
       result.sons[i] := instantiateType(c, result.sons[i]);
     if result.n <> nil then
       result.n := instTypeNode(c, result.n);
+    genericToConcreteTypeKind(result);
   end
   else
     result := typ;
@@ -272,6 +292,20 @@ begin
   result := instantiateType(c, t);
 end;
 
+function newInstantiateClosure(p: PContext;
+          const instantiator: TLineInfo): PInstantiateClosure;
+begin
+  new(result);
+{@ignore}
+  fillChar(result^, sizeof(result^), 0);
+{@emit}
+  InitIdTable(result.typeMap);
+  InitIdTable(result.symMap);
+  result.fn := nil;
+  result.instantiator := instantiator;
+  result.module := p.module;
+end;
+
 function partialSpecialization(c: PContext; n: PNode; s: PSym): PNode;
 begin
   result := n;
diff --git a/nim/semstmts.pas b/nim/semstmts.pas
index 098b95072..ebf14693c 100644
--- a/nim/semstmts.pas
+++ b/nim/semstmts.pas
@@ -42,7 +42,7 @@ begin
   end;
   if result = nil then result := newNodeI(nkNilLit, n.info);
   // The ``when`` statement implements the mechanism for platform dependant
-  // code. Thus we try to ensure here consistent ID distribution after the
+  // code. Thus we try to ensure here consistent ID allocation after the
   // ``when`` statement.
   IDsynchronizationPoint(200);
 end;
@@ -59,9 +59,11 @@ begin
     case it.kind of
       nkElifBranch: begin
         checkSonsLen(it, 2);
+        openScope(c.tab);
         it.sons[0] := semExprWithType(c, it.sons[0]);
         checkBool(it.sons[0]);
-        it.sons[1] := semStmtScope(c, it.sons[1])
+        it.sons[1] := semStmt(c, it.sons[1]);
+        closeScope(c.tab);
       end;
       nkElse: begin
         if sonsLen(it) = 1 then it.sons[0] := semStmtScope(c, it.sons[0])
@@ -144,7 +146,7 @@ begin
       // now parse the string literal and substitute symbols:
       a := strStart;
       repeat
-        b := findSubStr(marker, str, a);
+        b := strutils.find(str, marker, a);
         if b < strStart then
           sub := ncopy(str, a)
         else
@@ -153,7 +155,7 @@ begin
           addSon(result, newStrNode(nkStrLit, sub));
 
         if b < strStart then break;
-        c := findSubStr(marker, str, b+1);
+        c := strutils.find(str, marker, b+1);
         if c < strStart then
           sub := ncopy(str, b+1)
         else
@@ -179,11 +181,13 @@ function semWhile(c: PContext; n: PNode): PNode;
 begin
   result := n;
   checkSonsLen(n, 2);
+  openScope(c.tab);
   n.sons[0] := semExprWithType(c, n.sons[0]);
   CheckBool(n.sons[0]);
   inc(c.p.nestedLoopCounter);
-  n.sons[1] := semStmtScope(c, n.sons[1]);
+  n.sons[1] := semStmt(c, n.sons[1]);
   dec(c.p.nestedLoopCounter);
+  closeScope(c.tab);
 end;
 
 function semCase(c: PContext; n: PNode): PNode;
@@ -197,6 +201,7 @@ begin
   // check selector:
   result := n;
   checkMinSonsLen(n, 2);
+  openScope(c.tab);
   n.sons[0] := semExprWithType(c, n.sons[0]);
   chckCovered := false;
   covered := 0;
@@ -216,7 +221,7 @@ begin
       end;
       nkElifBranch: begin
         chckCovered := false;
-        checkSonsLen(n, 2);
+        checkSonsLen(x, 2);
         x.sons[0] := semExprWithType(c, x.sons[0]);
         checkBool(x.sons[0]);
         x.sons[1] := semStmtScope(c, x.sons[1])
@@ -231,6 +236,7 @@ begin
   end;
   if chckCovered and (covered <> lengthOrd(n.sons[0].typ)) then
     liMessage(n.info, errNotAllCasesCovered);
+  closeScope(c.tab);
 end;
 
 function semAsgn(c: PContext; n: PNode): PNode;
@@ -388,7 +394,7 @@ begin
     if (a.kind <> nkIdentDefs) and (a.kind <> nkVarTuple) then IllFormedAst(a);
     checkMinSonsLen(a, 3);
     len := sonsLen(a);
-    if a.sons[len-2] <> nil then
+    if a.sons[len-2] <> nil then 
       typ := semTypeNode(c, a.sons[len-2], nil)
     else
       typ := nil;
@@ -401,6 +407,8 @@ begin
     end
     else
       def := nil;
+    if not typeAllowed(typ, skVar) then
+      liMessage(a.info, errXisNoType, typeToString(typ));
     tup := skipGeneric(typ);
     if a.kind = nkVarTuple then begin
       if tup.kind <> tyTuple then liMessage(a.info, errXExpected, 'tuple');
@@ -408,7 +416,7 @@ begin
         liMessage(a.info, errWrongNumberOfVariables);
     end;
     for j := 0 to len-3 do begin
-      if c.p.owner = nil then begin
+      if (c.p.owner.kind = skModule) then begin
         v := semIdentWithPragma(c, skVar, a.sons[j], {@set}[sfStar, sfMinus]);
         include(v.flags, sfGlobal);
       end
@@ -441,7 +449,7 @@ begin
     if a.kind = nkCommentStmt then continue;
     if (a.kind <> nkConstDef) then IllFormedAst(a);
     checkSonsLen(a, 3);
-    if (c.p.owner = nil) then begin
+    if (c.p.owner.kind = skModule) then begin
       v := semIdentWithPragma(c, skConst, a.sons[0], {@set}[sfStar, sfMinus]);
       include(v.flags, sfGlobal);
     end
@@ -456,6 +464,8 @@ begin
       def := fitRemoveHiddenConv(c, typ, def);
     end
     else typ := def.typ;
+    if not typeAllowed(typ, skConst) then
+      liMessage(a.info, errXisNoType, typeToString(typ));
 
     v.typ := typ;
     v.ast := def; // no need to copy
@@ -480,6 +490,7 @@ begin
   result := n;
   checkMinSonsLen(n, 3);
   len := sonsLen(n);
+  openScope(c.tab);
   if n.sons[len-2].kind = nkRange then begin
     checkSonsLen(n.sons[len-2], 2);
     // convert ``in 3..5`` to ``in countup(3, 5)``
@@ -500,7 +511,6 @@ begin
   end;
   n.sons[len-2] := semExprWithType(c, n.sons[len-2]);
   iter := skipGeneric(n.sons[len-2].typ);
-  openScope(c.tab);
   if iter.kind <> tyTuple then begin
     if len <> 3 then liMessage(n.info, errWrongNumberOfVariables);
     v := newSymS(skForVar, n.sons[0], c);
@@ -573,7 +583,7 @@ begin
   end;
 end;
 
-procedure semGenericParamList(c: PContext; n: PNode);
+procedure semGenericParamList(c: PContext; n: PNode; father: PType = nil);
 var
   i: int;
   s: PSym;
@@ -590,6 +600,7 @@ begin
       s.typ := newTypeS(tyGenericParam, c);
       s.typ.sym := s;
     end;
+    if father <> nil then addSon(father, s.typ);
     s.position := i;
     n.sons[i] := newSymNode(s);
     addDecl(c, s);
@@ -631,7 +642,7 @@ begin
     if a.kind = nkCommentStmt then continue;
     if (a.kind <> nkTypeDef) then IllFormedAst(a);
     checkSonsLen(a, 3);
-    if (c.p.owner = nil) then begin
+    if (c.p.owner.kind = skModule) then begin
       s := semIdentWithPragma(c, skType, a.sons[0], {@set}[sfStar, sfMinus]);
       include(s.flags, sfGlobal);
     end
@@ -665,7 +676,8 @@ begin
       openScope(c.tab);
       pushOwner(s);
       s.typ.kind := tyGeneric;
-      semGenericParamList(c, a.sons[1]);
+      semGenericParamList(c, a.sons[1], s.typ);
+      addSon(s.typ, nil);
       // process the type body for symbol lookup of generic params
       // we can use the same algorithm as for template parameters:
       a.sons[2] := resolveTemplateParams(c, a.sons[2]);
@@ -736,7 +748,7 @@ var
 begin
   result := n;
   checkSonsLen(n, codePos+1);
-  if c.p.owner <> nil then
+  if c.p.owner.kind <> skModule then
     liMessage(n.info, errIteratorNotAllowed);
   oldP := c.p; // restore later
   s := semIdentVis(c, skIterator, n.sons[0], {@set}[sfStar]);
@@ -857,7 +869,7 @@ var
 begin
   result := n;
   checkSonsLen(n, codePos+1);
-  if c.p.owner = nil then begin
+  if c.p.owner.kind = skModule then begin
     s := semIdentVis(c, kind, n.sons[0], {@set}[sfStar]);
     include(s.flags, sfGlobal);
   end
@@ -885,7 +897,7 @@ begin
   proto := SearchForProc(c, s, c.tab.tos-2); // -2 because we have a scope open
                                              // for parameters
   if proto = nil then begin
-    if oldP.owner <> nil then // we are in a nested proc
+    if oldP.owner.kind <> skModule then // we are in a nested proc
       s.typ.callConv := ccClosure
     else
       s.typ.callConv := lastOptionEntry(c).defaultCC;
@@ -1025,7 +1037,7 @@ begin
   if nfSem in n.flags then exit;
   case n.kind of
     nkAsgn: result := semAsgn(c, n);
-    nkCall, nkInfix, nkPrefix, nkPostfix, nkCommand:
+    nkCall, nkInfix, nkPrefix, nkPostfix, nkCommand, nkMacroStmt:
       result := semCommand(c, n);
     nkEmpty, nkCommentStmt, nkNilLit: begin end;
     nkBlockStmt: result := semBlock(c, n);
@@ -1051,8 +1063,7 @@ begin
     nkDiscardStmt: result := semDiscard(c, n);
     nkWhileStmt: result := semWhile(c, n);
     nkTryStmt: result := semTry(c, n);
-    nkBreakStmt, nkContinueStmt:
-      result := semBreakOrContinue(c, n);
+    nkBreakStmt, nkContinueStmt: result := semBreakOrContinue(c, n);
     nkForStmt: result := semFor(c, n);
     nkCaseStmt: result := semCase(c, n);
     nkReturnStmt: result := semReturn(c, n);
diff --git a/nim/semtempl.pas b/nim/semtempl.pas
index c07a7bd13..ebc5e1ebb 100644
--- a/nim/semtempl.pas
+++ b/nim/semtempl.pas
@@ -164,7 +164,7 @@ var
   i, j, len, counter: int;
   params, p, paramKind: PNode;
 begin
-  if c.p.owner = nil then begin
+  if c.p.owner.kind = skModule then begin
     s := semIdentVis(c, skTemplate, n.sons[0], {@set}[sfStar]);
     include(s.flags, sfGlobal);
   end
diff --git a/nim/semtypes.pas b/nim/semtypes.pas
index 37958c4d0..014ff0216 100644
--- a/nim/semtypes.pas
+++ b/nim/semtypes.pas
@@ -51,10 +51,12 @@ begin
         e := newSymS(skEnumField, n.sons[i].sons[0], c);
         v := semConstExpr(c, n.sons[i].sons[1]);
         x := getOrdValue(v);
-        if (x <> counter) and (i <> 1) then
-          include(result.flags, tfEnumHasWholes);
-        if x < counter then
-          liMessage(n.sons[i].info, errInvalidOrderInEnumX, e.name.s);
+        if i <> 1 then begin
+          if (x <> counter) then
+            include(result.flags, tfEnumHasWholes);
+          if x < counter then
+            liMessage(n.sons[i].info, errInvalidOrderInEnumX, e.name.s);
+        end;
         counter := x;
       end;
       nkSym: e := n.sons[i].sym;
@@ -247,7 +249,7 @@ begin
     end
   end
 end;
-
+(*
 function instGenericAux(c: PContext; templ, actual: PNode;
                         sym: PSym): PNode;
 var
@@ -271,34 +273,48 @@ begin
         result.sons[i] := instGenericAux(c, templ.sons[i], actual, sym);
     end
   end
-end;
+end; *)
 
 function semGeneric(c: PContext; n: PNode; s: PSym; prev: PType): PType;
 var
   i: int;
   elem: PType;
   inst: PNode;
+  cl: PInstantiateClosure;
 begin
   if (s.typ = nil) or (s.typ.kind <> tyGeneric) then
     liMessage(n.info, errCannotInstantiateX, s.name.s);
   result := newOrPrevType(tyGenericInst, prev, c); // new ID...
   result.containerID := s.typ.containerID; // ... but the same containerID
   result.sym := s;
-  if (s.typ.containerID = 0) then
-    InternalError(n.info, 'semtypes.semGeneric');  
+  if (s.typ.containerID = 0) then InternalError(n.info, 'semtypes.semGeneric');
+  cl := newInstantiateClosure(c, n.info);
+  // check the number of supplied arguments suffices:
+  if sonsLen(n) <> sonsLen(s.typ) then begin
+    //MessageOut('n: ' +{&} toString(sonsLen(n)) +{&} ' s: '
+    //           +{&} toString(sonsLen(s.typ)));
+    liMessage(n.info, errWrongNumberOfTypeParams);
+  end;
+  // a generic type should be instantiated with itself:
+  // idTablePut(cl.typeMap, s.typ, result);
+  // iterate over arguments:
   for i := 1 to sonsLen(n)-1 do begin
     elem := semTypeNode(c, n.sons[i], nil);
     if elem.kind = tyGenericParam then 
-      result.kind := tyGeneric; // prevend type from instantiation
+      result.kind := tyGeneric // prevend type from instantiation
+    else
+      idTablePut(cl.typeMap, s.typ.sons[i-1], elem);
     addSon(result, elem);
   end;
   if s.ast <> nil then begin
     if (result.kind = tyGenericInst) then begin
-      inst := instGenericAux(c, s.ast.sons[2], n, s);
+      // inst := instGenericAux(c, s.ast.sons[2], n, s);
       internalError(n.info, 'Generic containers not implemented');
       // XXX: implementation does not work this way
+      // we need to do the following: 
+      // traverse and copy the type and replace any tyGenericParam type
       // does checking of instantiated type for us:
-      elem := semTypeNode(c, inst, nil);
+      elem := instantiateType(cl, s.typ); //semTypeNode(c, inst, nil);
       elem.id := result.containerID;
       addSon(result, elem);
     end
diff --git a/nim/sigmatch.pas b/nim/sigmatch.pas
index 289a17673..ebcbb2529 100644
--- a/nim/sigmatch.pas
+++ b/nim/sigmatch.pas
@@ -80,7 +80,7 @@ var
 begin
   result := msgKindToString(errTypeMismatch);
   for i := 1 to sonsLen(n)-1 do begin
-    debug(n.sons[i].typ);
+    //debug(n.sons[i].typ);
     add(result, typeToString(n.sons[i].typ));
     if i <> sonsLen(n)-1 then add(result, ', ');
   end;
@@ -361,9 +361,7 @@ begin // is a subtype of f?
         tyProc: begin
           if (sonsLen(f) = sonsLen(a)) and (f.callconv = a.callconv) then begin
             // Note: We have to do unification for the parameters before the
-            // return type! Otherwise it'd be counter-intuitive for the standard
-            // Nimrod syntax. For the C-based syntax it IS counter-intuitive.
-            // But that is one of the reasons a standard syntax was picked.
+            // return type!
             result := isEqual; // start with maximum; also correct for no
                                // params at all
             for i := 1 to sonsLen(f)-1 do begin
@@ -433,8 +431,9 @@ begin // is a subtype of f?
     end;
     tyAnyEnum: begin
       case a.kind of
-        tyRange: result := typeRel(mapping, f, base(a));
-        tyEnum:  result := isSubtype;
+        tyRange:   result := typeRel(mapping, f, base(a));
+        tyEnum:    result := isSubtype;
+        tyAnyEnum: result := isEqual;
         else begin end
       end
     end;
@@ -726,11 +725,11 @@ begin
         end
         else begin
           setSon(m.call, formal.position+1, arg);
-        end;
-        inc(f);
+        end
       end
     end;
     inc(a);
+    inc(f);
   end;
   // iterate over all formal params and check all are provided:
   f := 1;
diff --git a/nim/strtabs.pas b/nim/strtabs.pas
index b07aefab1..4fcf32891 100644
--- a/nim/strtabs.pas
+++ b/nim/strtabs.pas
@@ -269,14 +269,14 @@ begin
           j := i+1;
           while (j <= length(f)+strStart-1) and (f[j] <> '}') do inc(j);
           key := ncopy(f, i+2+strStart-1, j-1+strStart-1);
-          result := result +{&} getValue(t, flags, key);
+          add(result, getValue(t, flags, key));
           i := j+1
         end;
         'a'..'z', 'A'..'Z', #128..#255, '_': begin
           j := i+1;
           while (j <= length(f)+strStart-1) and (f[j] in PatternChars) do inc(j);
           key := ncopy(f, i+1+strStart-1, j-1+strStart-1);
-          result := result +{&} getValue(t, flags, key);
+          add(result, getValue(t, flags, key));
           i := j
         end
         else begin
diff --git a/nim/strutils.pas b/nim/strutils.pas
index 71a428dbb..cd07105be 100644
--- a/nim/strutils.pas
+++ b/nim/strutils.pas
@@ -28,6 +28,7 @@ function cmp(const x, y: string): int;
 function cmpIgnoreCase(const x, y: string): int;
 
 function format(const f: string; const args: array of string): string;
+procedure addf(var result: string; const f: string; args: array of string);
 
 function toHex(x: BiggestInt; len: int): string;
 function toOctal(value: Char): string;
@@ -47,7 +48,7 @@ function ToString(b: Boolean): string; overload;
 
 function IntToStr(i: BiggestInt; minChars: int): string;
 
-function findSubStr(const sub, s: string; start: int = 1): int;
+function find(const s, sub: string; start: int = 1): int; overload;
 function replaceStr(const s, search, by: string): string;
 procedure deleteStr(var s: string; first, last: int);
 
@@ -81,8 +82,8 @@ implementation
 
 function quoteIfContainsWhite(const s: string): string;
 begin
-  if ((findSubStr(' ', s) >= strStart)
-  or (findSubStr(#9, s) >= strStart)) and (s[strStart] <> '"') then
+  if ((find(s, ' ') >= strStart)
+  or (find(s, #9) >= strStart)) and (s[strStart] <> '"') then
     result := '"' +{&} s +{&} '"'
   else
     result := s
@@ -247,7 +248,7 @@ begin
       result := result + s[i]
 end;
 
-function findSubStr(const sub, s: string; start: int = 1): int;
+function find(const s, sub: string; start: int = 1): int;
 var
   i, j, M, N: int;
 begin
@@ -277,7 +278,7 @@ begin
   result := '';
   i := 1;
   repeat
-    j := findSubStr(search, s, i);
+    j := find(s, search, i);
     if j = 0 then begin
       // copy the rest:
       result := result + copy(s, i, length(s) - i + 1);
@@ -475,7 +476,7 @@ begin
   until false
 end;
 
-function find(const x: string; const inArray: array of string): int;
+function find(const x: string; const inArray: array of string): int; overload;
 var
   i: int;
   y: string;
@@ -491,30 +492,29 @@ begin
   result := -1
 end;
 
-function format(const f: string; const args: array of string): string;
+procedure addf(var result: string; const f: string; args: array of string);
 const
   PatternChars = ['a'..'z', 'A'..'Z', '0'..'9', '_', #128..#255];
 var
   i, j, x: int;
 begin
-  result := '';
   i := 1;
   while i <= length(f) do
     if f[i] = '$' then begin
       case f[i+1] of
         '$': begin
-          result := result + '$';
+          addChar(result, '$');
           inc(i, 2);
         end;
         '1'..'9': begin
-          result := result + args[ord(f[i+1]) - ord('0') - 1];
+          add(result, args[ord(f[i+1]) - ord('0') - 1]);
           inc(i, 2);
         end;
         '{': begin
           j := i+1;
           while (j <= length(f)) and (f[j] <> '}') do inc(j);
           x := find(ncopy(f, i+2, j-1), args);
-          if (x >= 0) and (x < high(args)) then result := result + args[x+1]
+          if (x >= 0) and (x < high(args)) then add(result, args[x+1])
           else raise EInvalidFormatStr.create('');
           i := j+1
         end;
@@ -522,7 +522,7 @@ begin
           j := i+1;
           while (j <= length(f)) and (f[j] in PatternChars) do inc(j);
           x := find(ncopy(f, i+1, j-1), args);
-          if (x >= 0) and (x < high(args)) then result := result + args[x+1]
+          if (x >= 0) and (x < high(args)) then add(result, args[x+1])
           else raise EInvalidFormatStr.create(ncopy(f, i+1, j-1));
           i := j
         end
@@ -530,11 +530,17 @@ begin
       end
     end
     else begin
-      result := result + f[i];
+      addChar(result, f[i]);
       inc(i)
     end
 end;
 
+function format(const f: string; const args: array of string): string;
+begin
+  result := '';
+  addf(result, f, args)
+end;
+
 {@ignore}
 {$ifopt Q-} {$Q+}
 {$else}     {$define Q_off}
diff --git a/nim/transf.pas b/nim/transf.pas
index 98d1e89ea..5d9f44143 100644
--- a/nim/transf.pas
+++ b/nim/transf.pas
@@ -14,6 +14,7 @@ unit transf;
 // * inlines iterators
 // * inlines constants
 // * performes contant folding
+// * introduces nkHiddenDeref, nkHiddenSubConv, etc.
 
 interface
 
@@ -446,12 +447,51 @@ begin
   end;
 end;
 
+function skipPassAsOpenArray(n: PNode): PNode;
+begin
+  result := n;
+  while result.kind = nkPassAsOpenArray do 
+    result := result.sons[0]
+end;
+
+type 
+  TPutArgInto = (paDirectMapping, paFastAsgn, paVarAsgn);
+
+function putArgInto(arg: PNode; formal: PType): TPutArgInto;
+// This analyses how to treat the mapping "formal <-> arg" in an
+// inline context.
+var
+  i: int;
+begin
+  if skipGeneric(formal).kind = tyOpenArray then begin
+    result := paDirectMapping; // XXX really correct?
+    // what if ``arg`` has side-effects?
+    exit
+  end;
+  case arg.kind of
+    nkEmpty..nkNilLit: result := paDirectMapping;
+    nkPar, nkCurly, nkBracket: begin
+      result := paFastAsgn;
+      for i := 0 to sonsLen(arg)-1 do 
+        if putArgInto(arg.sons[i], formal) <> paDirectMapping then
+          exit;
+      result := paDirectMapping;
+    end;
+    else begin
+      if skipGeneric(formal).kind = tyVar then
+        result := paVarAsgn
+      else
+        result := paFastAsgn
+    end
+  end
+end;
+
 function transformFor(c: PTransf; n: PNode): PNode;
 // generate access statements for the parameters (unless they are constant)
 // put mapping from formal parameters to actual parameters
 var
   i, len: int;
-  call, e, v, body: PNode;
+  call, v, body, arg: PNode;
   newC: PTransCon;
   temp, formal: PSym;
 begin
@@ -473,24 +513,24 @@ begin
   // generate access statements for the parameters (unless they are constant)
   pushTransCon(c, newC);
   for i := 1 to sonsLen(call)-1 do begin
-    e := getConstExpr(c.module, call.sons[i]);
+    arg := skipPassAsOpenArray(transform(c, call.sons[i]));
     formal := skipGeneric(newC.owner.typ).n.sons[i].sym;
-    if e <> nil then
-      IdNodeTablePut(newC.mapping, formal, e)
-    else if (skipConv(call.sons[i]).kind = nkSym) then begin
-      // since parameters cannot be modified, we can identify the formal and
-      // the actual params
-      IdNodeTablePut(newC.mapping, formal, call.sons[i]);
-    end
-    else begin
-      // generate a temporary and produce an assignment statement:
-      temp := newTemp(c, formal.typ, formal.info);
-      addVar(v, newSymNode(temp));
-      // BUGFIX: do not copy call.sons[i], but transform it!
-      addSon(result, newAsgnStmt(c, newSymNode(temp),
-                                 transform(c, call.sons[i])));
-      IdNodeTablePut(newC.mapping, formal, newSymNode(temp)); // BUGFIX
-    end
+    //if IdentEq(newc.Owner.name, 'items') then 
+    //  liMessage(arg.info, warnUser, 'items: ' + nodeKindToStr[arg.kind]);
+    case putArgInto(arg, formal.typ) of
+      paDirectMapping: IdNodeTablePut(newC.mapping, formal, arg);
+      paFastAsgn: begin
+        // generate a temporary and produce an assignment statement:
+        temp := newTemp(c, formal.typ, formal.info);
+        addVar(v, newSymNode(temp));
+        addSon(result, newAsgnStmt(c, newSymNode(temp), arg));
+        IdNodeTablePut(newC.mapping, formal, newSymNode(temp));
+      end;
+      paVarAsgn: begin
+        assert(skipGeneric(formal.typ).kind = tyVar);
+        InternalError(arg.info, 'not implemented: pass to var parameter');
+      end;
+    end;
   end;
   body := newC.owner.ast.sons[codePos];
   pushInfoContext(n.info);
@@ -668,7 +708,7 @@ function transformCase(c: PTransf; n: PNode): PNode;
 // removes `elif` branches of a case stmt
 var
   len, i, j: int;
-  ifs: PNode;
+  ifs, elsen: PNode;
 begin
   len := sonsLen(n);
   i := len-1;
@@ -678,9 +718,11 @@ begin
     if (n.sons[i].kind <> nkOfBranch) then 
       InternalError(n.sons[i].info, 'transformCase');
     ifs := newNodeI(nkIfStmt, n.sons[i+1].info);
+    elsen := newNodeI(nkElse, ifs.info);
     for j := i+1 to len-1 do addSon(ifs, n.sons[j]);
     setLength(n.sons, i+2);
-    n.sons[i+1] := ifs;
+    addSon(elsen, ifs);
+    n.sons[i+1] := elsen;
   end;
   result := n;
   for j := 0 to sonsLen(n)-1 do result.sons[j] := transform(c, n.sons[j]);
diff --git a/nim/types.pas b/nim/types.pas
index 25ad54b33..af19a1671 100644
--- a/nim/types.pas
+++ b/nim/types.pas
@@ -1,12 +1,11 @@
 //
 //
 //           The Nimrod Compiler
-//        (c) Copyright 2008 Andreas Rumpf
+//        (c) Copyright 2009 Andreas Rumpf
 //
 //    See the file "copying.txt", included in this
 //    distribution, for details about the copyright.
 //
-
 unit types;
 
 // this module contains routines for accessing and iterating over types
@@ -47,7 +46,6 @@ function mutateType(t: PType; iter: TTypeMutator; closure: PObject): PType;
 // Returns result of `iter`.
 
 
-
 function SameType(x, y: PType): Boolean;
 function SameTypeOrNil(a, b: PType): Boolean;
 
@@ -115,6 +113,8 @@ function analyseObjectWithTypeField(t: PType): TTypeFieldResult;
 // made or intializing of the type field suffices or if there is no type field
 // at all in this type.
 
+function typeAllowed(t: PType; kind: TSymKind): bool;
+
 implementation
 
 function InvalidGenericInst(f: PType): bool;
@@ -185,11 +185,13 @@ begin
   n := sym.typ.n;
   for i := 1 to sonsLen(n)-1 do begin
     p := n.sons[i];
-    assert(p.kind = nkSym);
-    result := result +{&} p.sym.name.s +{&} ': ' +{&} typeToString(p.sym.typ);
-    if i <> sonsLen(n)-1 then result := result + ', ';
+    if (p.kind <> nkSym) then InternalError('getProcHeader');
+    add(result, p.sym.name.s);
+    add(result, ': ');
+    add(result, typeToString(p.sym.typ));
+    if i <> sonsLen(n)-1 then add(result, ', ');
   end;
-  result := result + ')';
+  addChar(result, ')');
   if n.sons[0].typ <> nil then
     result := result +{&} ': ' +{&} typeToString(n.sons[0].typ);
 end;
@@ -928,6 +930,96 @@ begin
   end
 end;
 
+function typeAllowedAux(var marker: TIntSet; t: PType; 
+                        kind: TSymKind): bool; forward;
+
+function typeAllowedNode(var marker: TIntSet; n: PNode; kind: TSymKind): bool;
+var
+  i: int;
+begin
+  result := true;
+  if n <> nil then begin
+    result := typeAllowedAux(marker, n.typ, kind);
+    if result then 
+      case n.kind of
+        nkNone..nkNilLit: begin end;
+        else begin
+          for i := 0 to sonsLen(n)-1 do begin
+            result := typeAllowedNode(marker, n.sons[i], kind);
+            if not result then exit
+          end
+        end
+      end
+  end
+end;
+
+function typeAllowedAux(var marker: TIntSet; t: PType; kind: TSymKind): bool;
+var
+  i: int;
+begin
+  assert(kind in [skVar, skConst, skParam]);
+  result := true;
+  if t = nil then exit;
+  // if we have already checked the type, return true, because we stop the
+  // evaluation if something is wrong:
+  if IntSetContainsOrIncl(marker, t.id) then exit;
+  case skipGeneric(t).kind of 
+    tyVar: begin
+      case skipGeneric(t.sons[0]).kind of
+        tyVar: result := false; // ``var var`` is always an invalid type:
+        tyOpenArray: result := (kind = skParam) and 
+                                typeAllowedAux(marker, t.sons[0], kind);
+        else result := (kind <> skConst) and 
+                                typeAllowedAux(marker, t.sons[0], kind);
+      end
+    end;
+    tyProc: begin
+      for i := 1 to sonsLen(t)-1 do begin
+        result := typeAllowedAux(marker, t.sons[i], skParam);
+        if not result then exit;
+      end;
+      if t.sons[0] <> nil then
+        result := typeAllowedAux(marker, t.sons[0], skVar)
+    end;
+    tyGeneric, tyGenericParam, tyForward, tyNone: result := false;
+    tyEmpty, tyNil: result := kind = skConst;
+    tyString, tyBool, tyChar, tyEnum, tyInt..tyFloat128, tyCString, tyPointer: 
+      result := true;
+    tyAnyEnum: result := kind = skParam;
+    tyGenericInst: result := typeAllowedAux(marker, lastSon(t), kind);
+    tyRange: result := skipGeneric(t.sons[0]).kind in 
+                         [tyChar, tyEnum, tyInt..tyFloat128];
+    tyOpenArray: 
+      result := (kind = skParam) and typeAllowedAux(marker, t.sons[0], skVar);
+    tySequence: result := (kind <> skConst) 
+      and typeAllowedAux(marker, t.sons[0], skVar)
+      or (t.sons[0].kind = tyEmpty);
+    tyArray: result := typeAllowedAux(marker, t.sons[1], skVar);
+    tyPtr, tyRef: result := typeAllowedAux(marker, t.sons[0], skVar);
+    tyArrayConstr, tyTuple, tySet: begin
+      for i := 0 to sonsLen(t)-1 do begin
+        result := typeAllowedAux(marker, t.sons[i], kind);
+        if not result then exit
+      end;
+    end;
+    tyObject: begin
+      for i := 0 to sonsLen(t)-1 do begin
+        result := typeAllowedAux(marker, t.sons[i], skVar);
+        if not result then exit
+      end;
+      if t.n <> nil then result := typeAllowedNode(marker, t.n, skVar)
+    end
+  end
+end;
+
+function typeAllowed(t: PType; kind: TSymKind): bool;
+var 
+  marker: TIntSet; 
+begin
+  IntSetInit(marker);
+  result := typeAllowedAux(marker, t, kind);
+end;
+
 function align(address, alignment: biggestInt): biggestInt;
 begin
   result := (address + (alignment-1)) and not (alignment-1);
diff --git a/nim/wordrecg.pas b/nim/wordrecg.pas
index 587005c2a..dd2df0047 100644
--- a/nim/wordrecg.pas
+++ b/nim/wordrecg.pas
@@ -1,7 +1,7 @@
 //
 //
 //           The Nimrod Compiler
-//        (c) Copyright 2008 Andreas Rumpf
+//        (c) Copyright 2009 Andreas Rumpf
 //
 //    See the file "copying.txt", included in this
 //    distribution, for details about the copyright.
@@ -66,7 +66,7 @@ type
     wMerge, wLib, wDynlib, wCompilerproc, wCppmethod, wFatal,
     wError, wWarning, wHint, wLine, wPush, wPop,
     wDefine, wUndef, wLinedir, wStacktrace, wLinetrace, wPragma,
-    wLink, wCompile, wLinksys, wFixupsystem, wDeprecated, wVarargs,
+    wLink, wCompile, wLinksys, wDeprecated, wVarargs,
     wByref, wCallconv, wBreakpoint, wDebugger, wNimcall, wStdcall,
     wCdecl, wSafecall, wSyscall, wInline, wNoInline, wFastcall, wClosure,
     wNoconv, wOn, wOff, wChecks, wRangechecks, wBoundchecks,
@@ -84,7 +84,7 @@ type
     wMaxErr, wExpr, wStmt, wTypeDesc,
     wSubsChar, wAstCache, wAcyclic, wIndex,
     // commands:
-    wCompileToC, wCompileToCpp, wCompileToEcmaScript,
+    wCompileToC, wCompileToCpp, wCompileToEcmaScript, wCompileToLLVM,
     wPretty, wDoc, wPas,
     wGenDepend, wListDef, wCheck, wParse, wScan, wBoot, wLazy,
     wRst2html, wI,
@@ -140,7 +140,7 @@ const
     'merge', 'lib', 'dynlib', 'compilerproc', 'cppmethod', 'fatal',
     'error', 'warning', 'hint', 'line', 'push', 'pop',
     'define', 'undef', 'linedir', 'stacktrace', 'linetrace', 'pragma',
-    'link', 'compile', 'linksys', 'fixupsystem', 'deprecated', 'varargs',
+    'link', 'compile', 'linksys', 'deprecated', 'varargs',
     'byref', 'callconv', 'breakpoint', 'debugger', 'nimcall', 'stdcall',
     'cdecl', 'safecall', 'syscall', 'inline', 'noinline', 'fastcall', 'closure',
     'noconv', 'on', 'off', 'checks', 'rangechecks', 'boundchecks',
@@ -158,7 +158,7 @@ const
     'maxerr', 'expr', 'stmt', 'typedesc',
     'subschar', 'astcache', 'acyclic', 'index',
     // commands:
-    'compiletoc', 'compiletocpp', 'compiletoecmascript',
+    'compiletoc', 'compiletocpp', 'compiletoecmascript', 'compiletollvm',
     'pretty', 'doc', 'pas', 'gendepend', 'listdef', 'check', 'parse',
     'scan', 'boot', 'lazy', 'rst2html', 'i'+'',
 
diff --git a/rod/nimrod.cfg b/rod/nimrod.cfg
index 31abf7a2a..65bb92bc5 100644
--- a/rod/nimrod.cfg
+++ b/rod/nimrod.cfg
@@ -13,3 +13,4 @@
 @elif vcc:
   cgen.speed = ""
 @end
+
diff --git a/rod/nimrod.ini b/rod/nimrod.ini
index 3d0852f3b..755c1dd17 100644
--- a/rod/nimrod.ini
+++ b/rod/nimrod.ini
@@ -59,6 +59,12 @@ Files: "tests/*.cfg"
 Files: "tests/*.tmpl"
 Files: "tests/gtk/*.nim"
 
+Files: "examples/*.nim"
+Files: "examples/*.html"
+Files: "examples/*.txt"
+Files: "examples/*.cfg"
+Files: "examples/*.tmpl"
+
 Files: "lib/base/*.c"
 Files: "lib/base/*.nim"
 Files: "lib/base/gtk/*.nim"
@@ -75,8 +81,8 @@ Files: "lib/base/lua/*.nim"
 
 [Windows]
 Files: "bin/nimrod.exe"
-Files: "dist/llvm-gcc4.2"
-BinPath: r"bin;dist\llvm-gcc4.2\bin"
+Files: "dist/mingw"
+BinPath: r"bin;dist\mingw\bin"
 
 [Unix]
 
diff --git a/tests/tcasestm.nim b/tests/tcasestm.nim
index ef3f2dfc9..16051ceb8 100644
--- a/tests/tcasestm.nim
+++ b/tests/tcasestm.nim
@@ -1,4 +1,4 @@
-# Test the case statment
+# Test the case statement
 
 type
   tenum = enum eA, eB, eC
@@ -6,6 +6,7 @@ type
 var
   x: string
   y: Tenum = eA
+  i: int
 
 case y
 of eA: write(stdout, "a\n")
@@ -18,3 +19,14 @@ of "aa", "bb": write(stdout, "Du bist nicht mein Meister\n")
 of "cc", "hash", "when": nil
 of "will", "it", "finally", "be", "generated": nil
 else: write(stdout, "das sollte nicht passieren!\N")
+
+case i
+of 0..5, 8, 9: nil
+of 6, 7: nil
+elif x == "Ha": 
+  nil
+elif x == "Ho":
+  nil
+else:
+  nil
+
diff --git a/tests/tlibs.nim b/tests/tlibs.nim
index 2326fba64..b5c4036a6 100644
--- a/tests/tlibs.nim
+++ b/tests/tlibs.nim
@@ -1,7 +1,8 @@
 # Test wether the bindings at least compile...
 
 import
-  unicode,
+  unicode, cgi, terminal, libcurl, web, 
+  parsexml, parseopt, parsecfg,
   osproc, zipfiles,
   sdl, smpeg, sdl_gfx, sdl_net, sdl_mixer, sdl_ttf,
   sdl_image, sdl_mixer_nosmpeg,
diff --git a/tests/tprocvar.nim b/tests/tprocvar.nim
index ec23dcb1d..f51543dfa 100644
--- a/tests/tprocvar.nim
+++ b/tests/tprocvar.nim
@@ -1,4 +1,13 @@
 # test variables of type proc

+
+proc pa() {.cdecl.} = write(stdout, "pa")
+proc pb() {.cdecl.} = write(stdout, "pb")
+proc pc() {.cdecl.} = write(stdout, "pc")
+proc pd() {.cdecl.} = write(stdout, "pd")
+proc pe() {.cdecl.} = write(stdout, "pe")
+
+const
+  algos = [pa, pb, pc, pd, pe]
 

 var

   x: proc (a, b: int): int {.cdecl.}

@@ -6,9 +15,12 @@ var
 proc ha(c, d: int): int {.cdecl.} =

   echo(c + d)

   result = c + d

+
+for a in items(algos):
+  a()
 

 x = ha

 discard x(3, 4)

 

-#OUT 7

+#OUT papbpcpdpe7

 

diff --git a/tests/trectype.nim b/tests/trectype.nim
index 3161b0255..a7a6f56e0 100644
--- a/tests/trectype.nim
+++ b/tests/trectype.nim
@@ -13,5 +13,9 @@ type
   PB = ref TB

   TB = array [0..3, P1]

   T1 = array [0..6, PB]

+
+var
+  x: PA
+new(x)
 #ERROR_MSG internal error: cannot generate C type for: PA
 
diff --git a/tests/tregex.nim b/tests/tregex.nim
index aa32ca847..d9d22d603 100644
--- a/tests/tregex.nim
+++ b/tests/tregex.nim
@@ -3,10 +3,17 @@
 

 import

   regexprs

+
+if "keyA = valueA" =~ r"\s*(\w+)\s*\=\s*(\w+)":
+  write(stdout, "key: ", matches[1])
+elif "# comment!" =~ r"\s*(\#.*)":
+  echo("comment: ", matches[1])
+else: 
+  echo("Bug!")
 

 if "Username".match("[A-Za-z]+"):

   echo("Yes!")

 else:

   echo("Bug!")

 

-#OUT Yes!

+#OUT key: keyAYes!

diff --git a/todo.txt b/todo.txt
index 44050d637..3e80ba6f1 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,6 +1,13 @@
 TO IMPLEMENT
 ============
 
+Plan
+----
+
+* implement new memory manager --> hopefully faster turnaround times
+* implement LLVM backend --> faster turnaround times
+
+
 RST
 ---
 - footnotes; prefix :i: whitespace before :i:, _reference, `reference`__
@@ -9,55 +16,181 @@ RST
 Bugs
 ----
 
+- BUG: check if "break" is valid is not complete: "break" within "for"
+  may be incorrect, if the called iterator is not in a loop
+  --> check that "yield" is inside a loop!
+- BUG: returning an array does not work --> see md5.nim module
+- BUG: if not nodeOfDegree(g, 1) >= 0: inc(counter)
 - BUG: addr/deref may not work when interpreting
 - BUG: the parser allows empty object case branches
 - BUG: when optmizing cgen.c with Visual C++, GCC, LLVM (O3), it breaks.
 - BUG: ``-cc:bcc`` command line option does not error
 - BUG: symbol files still do not work
 - BUG: tlastmod returns wrong results on BSD (Linux, MacOS X: works)
-- BUG: sigmatch for ``len`` matches the open array too often... (?)
 
 
 High priority
 -------------
 
+- typeAllowed() for parameters...
+- implicit conversions from ``ptr/ref T`` to ``var T`` and from
+  ``ptr/ref T`` to ``T``? Yes.
+- implement generic types
 - implement tuple unpacking
 - implement closures for the C code generator
-- implement a better memory manager
-- implement stack walking via assembler for horribly advanced optimizers
-
-- documentation: ``[]`` overloading, type convertions,
-  anonymous procs, ``len(s) == s.len``, type converters
+- documentation: type converters
 - implement two-phase lookup for generics (this is hard...): This is useful
   for macros too! Alternative: Explicit early name binding. Both are hard to
   implement
-- get rid of ``nkHiddenStdConv`` in several places: this mechanism caused more
-  bugs than it ever solved!
+- language change: inheritance should only work with reference types, so that
+  the ``type`` field is not needed for objects! --> zero overhead aggregation
+
+For the next versions
+=====================
+
+- multi-processor support
+- IDE
+- better support for GDB?
+- support for generation of dynamic libraries
+- better code generator: skip ropes datastructure, it uses too much memory
+- make set optimizations part of the transformation (--> all backends profit
+  from it), but this really needs a more abstract code generator
+
+
+Further ideas/nice to have
+==========================
+
+- queues additional to streams: have to positions (read/write) instead of one
+- introduce: refany type???
+- CLR code generator; better use XYZ? --> Version 1.2?
+- provide an interactive shell: if the user wants his commands
+  to be executed, the command should end with #
+- implement packed arrays (bit arrays)/ packed records
+- implement tables (implement as library? - no! Builtin because of
+  constructor syntax is nice to have)
+
+
+Version 2
+---------
+
+- language support for aggregation: 
+  type
+    TMyObject = object 
+      x: TOtherObject
+      
+  --> can be done via type converters elegantly
+  
+
+- type tags: 
+  type
+    sqlString* = type string
+
+  everywhere where a string is expected, a "sqlString" is allowed, but not
+  vice versa. However, this causes problems: 
+  
+  type
+    TDollar = type decimal
+    
+  TDollar * int --> allowed
+  TDollar div int --> allowed
+  TDollar + int --> not allowed
+  TDollar + TEuro --> not allowed, or implicit conversion
+
+  --> Explicit converters are probably flawed
+
+- explicit nil types?
+  * nil seq[int]
+  * nil string
+  * nil ref int
+  * nil ptr THallo
+  * nil proc 
+
+.. code-block:: nimrod
+  var
+    x: string = nil # initialized with invalid value!
+  if not isNil(x):
+    # now x 
+  
+- better for backwards compability: default nilable, but prefix ``!`` operator
+  to specify that null is not allowed
+  
+  type
+    PWindow = ! ref TWindow
+    
 
 
 Library
 -------
-- xml, html, url, fastcgi: implement from scratch
-- socket library (does SDL for us?)
+
+- gui module
+- finish json module: hard
+- socket, http, ftp, email, fastcgi: implement from scratch
+- ncurses bindings
 - osproc for Windows
 - bignums
 - python
+- TCL
+- automate module: expect-like module for Nimrod
+- parsecsv module
+
+- YAML module
 
 
 Low priority
 ------------
 
+- ``when T is int`` for generic code
+- ``when validCode( proc ()  )`` for generic code
+  
+  when compiles:
+    
+  elif compiles: 
+    
+
+- copy more of C++'s object modell?
+- syntactic sugar for OOP: 
+
+  type
+    TObj* = object
+      fx = 0.nat
+      fy = 0.nat
+      s = ""
+      proc setX(var, val: int) = my.fx = val
+      proc getX: int = return my.fx
+
+      `x=`: proc (var, val: int) = setX
+      x: proc: int = getX
+      
+      proc q*(query: int): int = 
+        # implicit "my: TObj" parameter
+        # variables are looked up automatically:
+        return fx
+              
+      proc setEvent(var, e: TEvent): int = 
+        # implicit "my: var TObj" parameter
+        nil
+        
+      proc init(var) = 
+        # constructor
+        nil
+        
+  o.x = 13 # ambigious
+
+- implement stack walking via assembler for horribly advanced optimizers
 - use `` notation for identifier concatenation?
 - Visual C++: emit ``default: __assume(0);`` for optimization
 - macros: ``typecheck`` pragma; this is really a good idea! This allows
   transformations based on types!
 - make callconv a set
 - partial generic instantation is missing
-- commas are not optional any longer as this may lead to bugs (which?)
 - get code generation for C++ exception handling right!
 - find a way for easy constructors and destructors; though constructors are
   flawed... destructors are not, however!
-- multiple dispatch
+- multiple dispatch: no, but provide a proc ``typeId`` to allow the user to
+  implement it efficiently
+- replace ropes with strings in the C code generator: This may yield a HUGE
+  speedup of the compiler! (10%)
+- code generated for type information is wasteful
 
 
 Changelog
@@ -369,27 +502,44 @@ Changelog
   resolutions
 - ``macros`` are no longer part of the ``system`` module, to use macros you 
   have to import the ``macros`` module
+0.7.5
+- GC now uses the simpler "markStackAndRegisters" version
+- fixed a bug that kept the "recursive modules" example from working
+- docgen: changed ``<blockquote>`` to ``<blockquote><p>`` to generate valid
+  HTML
+- BUGFIX: ``nkCommand``, etc. supported by the C code generator for statements
+- ``addf`` for ``strutils``
+- added common regular expressions for regexprs
+- BUGFIX: ``g.show(name="VC", vc)`` 
+  Error: cannot bind parameter 'name' twice
+- BUGFIX: got rid of debug output in sigmatch module
+- implemented ``nkMacroStmt``
+- ``findSubStr``, ``findChars`` deprecated: use ``find`` instead; the library
+  has already been adapted
+- deprecated items are now warned for
+- BUGFIX: octal numbers with the prefix ``0c`` are now properly supported
+- posix module now declares socket stuff
+- new ``terminal`` module
+- BUGFIX: ``parseInt``, ``ParseBiggestInt`` now throw an exception if the
+  string does not end after the parsed number 
+- libcurl wrapper library
+- BUGFIX: ``semEnum``: enumerations now may start with negative values
+- started ``web`` library
+- added ``system.pop`` built-in for sequences
+- added ``parsexml`` module
+- BUGFIX: c.p.owner is now never nil
+- the scoping rules for ``for``, ``while``, ``if``, ``case`` changed
+  in a subtle way to support the new ``=~`` template
+- BUGFIX: generated ``nimcache`` directory never ends in a slash
+- BUGFIX: ``createDir`` now works for global directories under 
+  UNIX "/somepath/here"
+- BUGFIX: now executes the executable with "./" &exe under UNIX
+- added ``strutils.addSep`` proc
+- BUGFIX: constant array of procs
+- BUGFIX: elif in case statements 
+- mysql, sqlite3 interface
+- md5 module
+- BUGFIX: iterators using open arrays
+- BUGFIX: [$anyEnum]
 
 
-For the next versions
-=====================
-
-- multi-processor support
-- IDE
-- better support for GDB?
-- support for generation of dynamic libraries
-- better code generator: skip ropes datastructure, it uses too much memory
-- make set optimizations part of the transformation (--> all backends profit
-  from it), but this really needs a more abstract code generator
-
-
-Further ideas/nice to have
-==========================
-
-- introduce: refany type???
-- CLR code generator; better use XYZ? --> Version 1.2?
-- provide an interactive shell: if the user wants his commands
-  to be executed, the command should end with #
-- implement packed arrays (bit arrays)/ packed records
-- implement tables (implement as library? - no! Builtin because of
-  constructor syntax is nice to have)
diff --git a/tools/niminst b/tools/niminst
index 4f007f577..a21ff1486 100644
--- a/tools/niminst
+++ b/tools/niminst
Binary files differdiff --git a/tools/niminst.nim b/tools/niminst.nim
index 2418ea6c9..2b05e2e68 100644
--- a/tools/niminst.nim
+++ b/tools/niminst.nim
@@ -114,7 +114,7 @@ proc parseCmdLine(c: var TConfigData) =
       of "version", "v": writeln(stdout, Version)
       of "o", "output": c.outdir = val
       of "var":
-        var idx = findSubStr('=', val)
+        var idx = val.find('=')
         if idx < 0: quit("invalid command line")
         c.vars[copy(val, 0, idx-1)] = copy(val, idx+1)
       else: quit(Usage)
diff --git a/tools/nimweb.nim b/tools/nimweb.nim
index 81602549c..135be9570 100644
--- a/tools/nimweb.nim
+++ b/tools/nimweb.nim
@@ -70,7 +70,7 @@ proc parseCmdLine(c: var TConfigData) =
       of "version", "v": writeln(stdout, Version)
       of "o", "output": c.outdir = val
       of "var":
-        var idx = findSubStr('=', val)
+        var idx = val.find('=')
         if idx < 0: quit("invalid command line")
         c.vars[copy(val, 0, idx-1)] = copy(val, idx+1)
       else: quit(Usage)
diff --git a/tools/sunset.tmpl b/tools/sunset.tmpl
index 02e49218c..e10f58eff 100644
--- a/tools/sunset.tmpl
+++ b/tools/sunset.tmpl
@@ -62,7 +62,7 @@
       </div>
     </div>
     <div id="footer">
-      copyright &copy; 2008 $c.authors | Last update: ${getDateStr()}
+      copyright &copy; 2009 $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/whiteutils.py b/whiteutils.py
index e203e7e08..763f08361 100644
--- a/whiteutils.py
+++ b/whiteutils.py
@@ -7,8 +7,9 @@
 # $Id: whiteutils.py 110 2005-08-27 22:35:20Z ned $
 # modified to run with Python1.5.2 by Andreas Rumpf
 
-import re, types
-from string import strip, split, replace, join
+import sys, re, types, os, os.path, re, shutil, time, getopt
+import glob, zlib
+from pycompab import *
 
 def whitePrefix(strings):
     """ Determine the whitespace prefix common to all non-blank lines