summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/ansi_c.nim2
-rw-r--r--lib/arithm.nim36
-rw-r--r--lib/assign.nim240
-rw-r--r--lib/base/cairo/cairo.nim684
-rw-r--r--lib/base/cairo/cairoft.nim14
-rw-r--r--lib/base/cairo/cairowin32.nim30
-rw-r--r--lib/base/cairo/cairoxlib.nim24
-rw-r--r--lib/base/dialogs.nim14
-rw-r--r--lib/base/gtk/atk.nim1
-rw-r--r--lib/base/gtk/gdk2.nim1629
-rw-r--r--lib/base/gtk/gdk2pixbuf.nim244
-rw-r--r--lib/base/gtk/glib2.nim242
-rw-r--r--lib/base/gtk/gtk2.nim1843
-rw-r--r--lib/base/gtk/libglade2.nim91
-rw-r--r--lib/base/gtk/pango.nim859
-rw-r--r--lib/base/gtk/pangoutils.nim44
-rw-r--r--lib/base/lex.nim73
-rw-r--r--lib/base/nregex.nim124
-rw-r--r--lib/base/pcre.nim587
-rw-r--r--lib/base/regexprs.nim229
-rw-r--r--lib/cntbits.nim40
-rw-r--r--lib/complex.nim212
-rw-r--r--lib/contnrs.nim1
-rw-r--r--lib/debugger.nim1000
-rw-r--r--lib/dlmalloc.c11
-rw-r--r--lib/dyncalls.nim21
-rw-r--r--lib/ecmasys.nim1
-rw-r--r--lib/excpt.nim15
-rw-r--r--lib/gc.nim1150
-rw-r--r--lib/generics.nim7
-rw-r--r--lib/hashes.nim194
-rw-r--r--lib/hti.nim6
-rw-r--r--lib/int64s.nim142
-rw-r--r--lib/lexbase.nim353
-rw-r--r--lib/macros.nim351
-rw-r--r--lib/math.nim8
-rw-r--r--lib/memman.nim8
-rw-r--r--lib/nimbase.h54
-rw-r--r--lib/os.nim670
-rw-r--r--lib/parsecfg.nim39
-rw-r--r--lib/posix/posix.nim287
-rw-r--r--lib/process.nim1009
-rw-r--r--lib/repr.nim2
-rw-r--r--lib/sets.nim22
-rw-r--r--lib/smallalc.nim19
-rw-r--r--lib/strtabs.nim105
-rw-r--r--lib/strutils.nim177
-rw-r--r--lib/sysio.nim25
-rw-r--r--lib/sysstr.nim155
-rw-r--r--lib/system.nim623
-rw-r--r--lib/times.nim38
-rw-r--r--lib/unicode.nim4
-rw-r--r--lib/windows/windows.nim1470
53 files changed, 7224 insertions, 8005 deletions
diff --git a/lib/ansi_c.nim b/lib/ansi_c.nim
index 6691ca4cc..8e39c9e39 100644
--- a/lib/ansi_c.nim
+++ b/lib/ansi_c.nim
@@ -47,7 +47,7 @@ else:
       # only Mac OS X has this shit
 
 proc c_longjmp(jmpb: C_JmpBuf, retval: cint) {.nodecl, importc: "longjmp".}
-proc c_setjmp(jmpb: var C_JmpBuf) {.nodecl, importc: "setjmp".}
+proc c_setjmp(jmpb: var C_JmpBuf): cint {.nodecl, importc: "setjmp".}
 
 proc c_signal(sig: cint, handler: proc (a: cint) {.noconv.}) {.
   importc: "signal", header: "<signal.h>".}
diff --git a/lib/arithm.nim b/lib/arithm.nim
index c8abded91..91a2232c9 100644
--- a/lib/arithm.nim
+++ b/lib/arithm.nim
@@ -1,7 +1,7 @@
 #
 #
 #            Nimrod's Runtime Library
-#        (c) Copyright 2006 Andreas Rumpf
+#        (c) Copyright 2008 Andreas Rumpf
 #
 #    See the file "copying.txt", included in this
 #    distribution, for details about the copyright.
@@ -10,11 +10,11 @@
 
 # simple integer arithmetic with overflow checking
 
-proc raiseOverflow {.exportc: "raiseOverflow".} =
+proc raiseOverflow {.compilerproc, noinline.} =
   # a single proc to reduce code size to a minimum
   raise newException(EOverflow, "over- or underflow")
 
-proc raiseDivByZero {.exportc: "raiseDivByZero".} =
+proc raiseDivByZero {.exportc: "raiseDivByZero", noinline.} =
   raise newException(EDivByZero, "divison by zero")
 
 proc addInt64(a, b: int64): int64 {.compilerProc, inline.} =
@@ -75,9 +75,9 @@ proc mulInt64(a, b: int64): int64 {.compilerproc.} =
   var
     resAsFloat, floatProd: float64
   result = a *% b
-  floatProd = float64(a) # conversion
-  floatProd = floatProd * float64(b)
-  resAsFloat = float64(result)
+  floatProd = toBiggestFloat(a) # conversion
+  floatProd = floatProd * toBiggestFloat(b)
+  resAsFloat = toBiggestFloat(result)
 
   # Fast path for normal case: small multiplicands, and no info
   # is lost in either method.
@@ -101,16 +101,14 @@ proc absInt(a: int): int {.compilerProc, inline.} =
     else: return -a
   raiseOverflow()
 
-when defined(I386) and (defined(vcc) or defined(wcc) or defined(dmc)):
-  # or defined(gcc)):
-  {.define: asmVersion.}
-  # my Version of Borland C++Builder does not have
-  # tasm32, which is needed for assembler blocks
-  # this is why Borland is not included in the 'when'
-else:
-  {.define: useInline.}
+const
+  asmVersion = defined(I386) and (defined(vcc) or defined(wcc) or defined(dmc))
+    # my Version of Borland C++Builder does not have
+    # tasm32, which is needed for assembler blocks
+    # this is why Borland is not included in the 'when'
+  useInline = not asmVersion
 
-when defined(asmVersion) and defined(gcc):
+when asmVersion and defined(gcc):
   proc addInt(a, b: int): int {.compilerProc, pure, inline.}
   proc subInt(a, b: int): int {.compilerProc, pure, inline.}
   proc mulInt(a, b: int): int {.compilerProc, pure, inline.}
@@ -118,7 +116,7 @@ when defined(asmVersion) and defined(gcc):
   proc modInt(a, b: int): int {.compilerProc, pure, inline.}
   proc negInt(a: int): int {.compilerProc, pure, inline.}
 
-elif defined(asmVersion):
+elif asmVersion:
   proc addInt(a, b: int): int {.compilerProc, pure.}
   proc subInt(a, b: int): int {.compilerProc, pure.}
   proc mulInt(a, b: int): int {.compilerProc, pure.}
@@ -126,7 +124,7 @@ elif defined(asmVersion):
   proc modInt(a, b: int): int {.compilerProc, pure.}
   proc negInt(a: int): int {.compilerProc, pure.}
 
-elif defined(useInline):
+elif useInline:
   proc addInt(a, b: int): int {.compilerProc, inline.}
   proc subInt(a, b: int): int {.compilerProc, inline.}
   proc mulInt(a, b: int): int {.compilerProc.}
@@ -145,7 +143,7 @@ else:
 
 # implementation:
 
-when defined(asmVersion) and not defined(gcc):
+when asmVersion and not defined(gcc):
   # assembler optimized versions for compilers that
   # have an intel syntax assembler:
   proc addInt(a, b: int): int =
@@ -210,7 +208,7 @@ when defined(asmVersion) and not defined(gcc):
       theEnd:
     """
 
-elif defined(asmVersion) and defined(gcc):
+elif asmVersion and defined(gcc):
   proc addInt(a, b: int): int =
     asm """ "addl %1,%%eax\n"
              "jno 1\n"
diff --git a/lib/assign.nim b/lib/assign.nim
index 5ac475ef0..3d4bf4d61 100644
--- a/lib/assign.nim
+++ b/lib/assign.nim
@@ -1,120 +1,120 @@
-#

-#

-#            Nimrod's Runtime Library

-#        (c) Copyright 2006 Andreas Rumpf

-#

-#    See the file "copying.txt", included in this

-#    distribution, for details about the copyright.

-#

-

-#when defined(debugGC):

-#  {.define: logAssign.}

-proc genericAssign(dest, src: Pointer, mt: PNimType) {.compilerProc.}

-proc genericAssignAux(dest, src: Pointer, n: ptr TNimNode) =

-  var

-    d = cast[TAddress](dest)

-    s = cast[TAddress](src)

-  case n.kind

-  of nkNone: assert(false)

-  of nkSlot:

-    genericAssign(cast[pointer](d +% n.offset), cast[pointer](s +% n.offset),

-                  n.typ)

-  of nkList: 

-    for i in 0..n.len-1: 

-      genericAssignAux(dest, src, n.sons[i])

-  of nkCase: 

-    copyMem(cast[pointer](d +% n.offset), cast[pointer](s +% n.offset),

-            n.typ.size)

-    var m = selectBranch(src, n)

-    if m != nil: genericAssignAux(dest, src, m)

-

-proc genericAssign(dest, src: Pointer, mt: PNimType) =

-  var

-    d = cast[TAddress](dest)

-    s = cast[TAddress](src)

-

-  assert(mt != nil)

-  case mt.Kind

-  of tySequence:

-    var s2 = cast[ppointer](src)^

-    var seq = cast[PGenericSeq](s2)

-    if s2 == nil:  # this can happen! nil sequences are allowed

-      var x = cast[ppointer](dest)

-      x^ = nil

-      return

-    assert(dest != nil)

-    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(

-        cast[pointer](dst +% i*% mt.base.size +% GenericSeqSize),

-        cast[pointer](cast[taddress](s2) +% i *% mt.base.size +%

-                     GenericSeqSize),

-        mt.Base)

-    var dstseq = cast[PGenericSeq](dst)

-    dstseq.len = seq.len

-    dstseq.space = seq.len

-  of tyObject, tyTuple, tyPureObject: 

-    # we don't need to copy m_type field for tyObject, as they are equal anyway

-    genericAssignAux(dest, src, mt.node)

-  of tyArray, tyArrayConstr:

-    for i in 0..(mt.size div mt.base.size)-1:

-      genericAssign(cast[pointer](d +% i*% mt.base.size),

-                    cast[pointer](s +% i*% mt.base.size), mt.base)

-  of tyString: # a leaf

-    var s2 = cast[ppointer](s)^

-    if s2 != nil: # nil strings are possible!

-      unsureAsgnRef(cast[ppointer](dest), copyString(cast[mstring](s2)))

-    else:

-      var x = cast[ppointer](dest)

-      x^ = nil

-      return

-  of tyRef:  # BUGFIX: a long time this has been forgotten!

-    unsureAsgnRef(cast[ppointer](dest), cast[ppointer](s)^)

-  else:

-    copyMem(dest, src, mt.size) # copy raw bits

-

-proc genericSeqAssign(dest, src: Pointer, mt: PNimType) {.compilerProc.} =

-  var src = src # ugly, but I like to stress the parser sometimes :-)

-  genericAssign(dest, addr(src), mt)

-

-proc genericAssignOpenArray(dest, src: pointer, len: int,

-                            mt: PNimType) {.compilerproc.} =

-  var

-    d = cast[TAddress](dest)

-    s = cast[TAddress](src)

-  for i in 0..len-1:

-    genericAssign(cast[pointer](d +% i*% mt.base.size),

-                  cast[pointer](s +% i*% mt.base.size), mt.base)

-

-proc objectInit(dest: Pointer, typ: PNimType) {.compilerProc.}

-proc objectInitAux(dest: Pointer, n: ptr TNimNode) =

-  var d = cast[TAddress](dest)

-  case n.kind

-  of nkNone: assert(false)

-  of nkSLot: objectInit(cast[pointer](d +% n.offset), n.typ)

-  of nkList: 

-    for i in 0..n.len-1:

-      objectInitAux(dest, n.sons[i])

-  of nkCase: 

-    var m = selectBranch(dest, n)

-    if m != nil: objectInitAux(dest, m)   

-

-proc objectInit(dest: Pointer, typ: PNimType) =

-  # the generic init proc that takes care of initialization of complex

-  # objects on the stack or heap

-  var d = cast[TAddress](dest)

-  case typ.kind

-  of tyObject:

-    # iterate over any structural type

-    # here we have to init the type field:

-    var pint = cast[ptr PNimType](dest)

-    pint^ = typ

-    objectInitAux(dest, typ.node)

-  of tyTuple, tyPureObject:

-    objectInitAux(dest, typ.node)

-  of tyArray, tyArrayConstr:

-    for i in 0..(typ.size div typ.base.size)-1:

-      objectInit(cast[pointer](d +% i * typ.base.size), typ.base)

-  else: nil # nothing to do

+#
+#
+#            Nimrod's Runtime Library
+#        (c) Copyright 2006 Andreas Rumpf
+#
+#    See the file "copying.txt", included in this
+#    distribution, for details about the copyright.
+#
+
+#when defined(debugGC):
+#  {.define: logAssign.}
+proc genericAssign(dest, src: Pointer, mt: PNimType) {.compilerProc.}
+proc genericAssignAux(dest, src: Pointer, n: ptr TNimNode) =
+  var
+    d = cast[TAddress](dest)
+    s = cast[TAddress](src)
+  case n.kind
+  of nkNone: assert(false)
+  of nkSlot:
+    genericAssign(cast[pointer](d +% n.offset), cast[pointer](s +% n.offset),
+                  n.typ)
+  of nkList:
+    for i in 0..n.len-1:
+      genericAssignAux(dest, src, n.sons[i])
+  of nkCase:
+    copyMem(cast[pointer](d +% n.offset), cast[pointer](s +% n.offset),
+            n.typ.size)
+    var m = selectBranch(src, n)
+    if m != nil: genericAssignAux(dest, src, m)
+
+proc genericAssign(dest, src: Pointer, mt: PNimType) =
+  var
+    d = cast[TAddress](dest)
+    s = cast[TAddress](src)
+
+  assert(mt != nil)
+  case mt.Kind
+  of tySequence:
+    var s2 = cast[ppointer](src)^
+    var seq = cast[PGenericSeq](s2)
+    if s2 == nil:  # this can happen! nil sequences are allowed
+      var x = cast[ppointer](dest)
+      x^ = nil
+      return
+    assert(dest != nil)
+    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(
+        cast[pointer](dst +% i*% mt.base.size +% GenericSeqSize),
+        cast[pointer](cast[taddress](s2) +% i *% mt.base.size +%
+                     GenericSeqSize),
+        mt.Base)
+    var dstseq = cast[PGenericSeq](dst)
+    dstseq.len = seq.len
+    dstseq.space = seq.len
+  of tyObject, tyTuple, tyPureObject:
+    # we don't need to copy m_type field for tyObject, as they are equal anyway
+    genericAssignAux(dest, src, mt.node)
+  of tyArray, tyArrayConstr:
+    for i in 0..(mt.size div mt.base.size)-1:
+      genericAssign(cast[pointer](d +% i*% mt.base.size),
+                    cast[pointer](s +% i*% mt.base.size), mt.base)
+  of tyString: # a leaf
+    var s2 = cast[ppointer](s)^
+    if s2 != nil: # nil strings are possible!
+      unsureAsgnRef(cast[ppointer](dest), copyString(cast[NimString](s2)))
+    else:
+      var x = cast[ppointer](dest)
+      x^ = nil
+      return
+  of tyRef:  # BUGFIX: a long time this has been forgotten!
+    unsureAsgnRef(cast[ppointer](dest), cast[ppointer](s)^)
+  else:
+    copyMem(dest, src, mt.size) # copy raw bits
+
+proc genericSeqAssign(dest, src: Pointer, mt: PNimType) {.compilerProc.} =
+  var src = src # ugly, but I like to stress the parser sometimes :-)
+  genericAssign(dest, addr(src), mt)
+
+proc genericAssignOpenArray(dest, src: pointer, len: int,
+                            mt: PNimType) {.compilerproc.} =
+  var
+    d = cast[TAddress](dest)
+    s = cast[TAddress](src)
+  for i in 0..len-1:
+    genericAssign(cast[pointer](d +% i*% mt.base.size),
+                  cast[pointer](s +% i*% mt.base.size), mt.base)
+
+proc objectInit(dest: Pointer, typ: PNimType) {.compilerProc.}
+proc objectInitAux(dest: Pointer, n: ptr TNimNode) =
+  var d = cast[TAddress](dest)
+  case n.kind
+  of nkNone: assert(false)
+  of nkSLot: objectInit(cast[pointer](d +% n.offset), n.typ)
+  of nkList:
+    for i in 0..n.len-1:
+      objectInitAux(dest, n.sons[i])
+  of nkCase:
+    var m = selectBranch(dest, n)
+    if m != nil: objectInitAux(dest, m)
+
+proc objectInit(dest: Pointer, typ: PNimType) =
+  # the generic init proc that takes care of initialization of complex
+  # objects on the stack or heap
+  var d = cast[TAddress](dest)
+  case typ.kind
+  of tyObject:
+    # iterate over any structural type
+    # here we have to init the type field:
+    var pint = cast[ptr PNimType](dest)
+    pint^ = typ
+    objectInitAux(dest, typ.node)
+  of tyTuple, tyPureObject:
+    objectInitAux(dest, typ.node)
+  of tyArray, tyArrayConstr:
+    for i in 0..(typ.size div typ.base.size)-1:
+      objectInit(cast[pointer](d +% i * typ.base.size), typ.base)
+  else: nil # nothing to do
diff --git a/lib/base/cairo/cairo.nim b/lib/base/cairo/cairo.nim
index d2a99f355..6da8183f3 100644
--- a/lib/base/cairo/cairo.nim
+++ b/lib/base/cairo/cairo.nim
@@ -58,7 +58,7 @@ else:
 
 type
   PByte = cstring
-  cairo_status_t* = enum
+  TCairoStatus* = enum
     CAIRO_STATUS_SUCCESS = 0, CAIRO_STATUS_NO_MEMORY,
     CAIRO_STATUS_INVALID_RESTORE, CAIRO_STATUS_INVALID_POP_GROUP,
     CAIRO_STATUS_NO_CURRENT_POINT, CAIRO_STATUS_INVALID_MATRIX,
@@ -69,93 +69,93 @@ type
     CAIRO_STATUS_PATTERN_TYPE_MISMATCH, CAIRO_STATUS_INVALID_CONTENT,
     CAIRO_STATUS_INVALID_FORMAT, CAIRO_STATUS_INVALID_VISUAL,
     CAIRO_STATUS_FILE_NOT_FOUND, CAIRO_STATUS_INVALID_DASH
-  cairo_operator_t* = enum
+  TCairoOperator* = enum
     CAIRO_OPERATOR_CLEAR, CAIRO_OPERATOR_SOURCE, CAIRO_OPERATOR_OVER,
     CAIRO_OPERATOR_IN, CAIRO_OPERATOR_OUT, CAIRO_OPERATOR_ATOP,
     CAIRO_OPERATOR_DEST, CAIRO_OPERATOR_DEST_OVER, CAIRO_OPERATOR_DEST_IN,
     CAIRO_OPERATOR_DEST_OUT, CAIRO_OPERATOR_DEST_ATOP, CAIRO_OPERATOR_XOR,
     CAIRO_OPERATOR_ADD, CAIRO_OPERATOR_SATURATE
-  cairo_antialias_t* = enum
+  TCairoAntialias* = enum
     CAIRO_ANTIALIAS_DEFAULT, CAIRO_ANTIALIAS_NONE, CAIRO_ANTIALIAS_GRAY,
     CAIRO_ANTIALIAS_SUBPIXEL
-  cairo_fill_rule_t* = enum
+  TCairoFillRule* = enum
     CAIRO_FILL_RULE_WINDING, CAIRO_FILL_RULE_EVEN_ODD
-  cairo_line_cap_t* = enum
+  TCairoLineCap* = enum
     CAIRO_LINE_CAP_BUTT, CAIRO_LINE_CAP_ROUND, CAIRO_LINE_CAP_SQUARE
-  cairo_line_join_t* = enum
+  TCairoLineJoin* = enum
     CAIRO_LINE_JOIN_MITER, CAIRO_LINE_JOIN_ROUND, CAIRO_LINE_JOIN_BEVEL
-  cairo_font_slant_t* = enum
+  TCairoFontSlant* = enum
     CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_SLANT_ITALIC, CAIRO_FONT_SLANT_OBLIQUE
-  cairo_font_weight_t* = enum
+  TCairoFontWeight* = enum
     CAIRO_FONT_WEIGHT_NORMAL, CAIRO_FONT_WEIGHT_BOLD
-  cairo_subpixel_order_t* = enum
+  TCairoSubpixelOrder* = enum
     CAIRO_SUBPIXEL_ORDER_DEFAULT, CAIRO_SUBPIXEL_ORDER_RGB,
     CAIRO_SUBPIXEL_ORDER_BGR, CAIRO_SUBPIXEL_ORDER_VRGB,
     CAIRO_SUBPIXEL_ORDER_VBGR
-  cairo_hint_style_t* = enum
+  TCairoHintStyle* = enum
     CAIRO_HINT_STYLE_DEFAULT, CAIRO_HINT_STYLE_NONE, CAIRO_HINT_STYLE_SLIGHT,
     CAIRO_HINT_STYLE_MEDIUM, CAIRO_HINT_STYLE_FULL
-  cairo_hint_metrics_t* = enum
+  TCairoHintMetrics* = enum
     CAIRO_HINT_METRICS_DEFAULT, CAIRO_HINT_METRICS_OFF, CAIRO_HINT_METRICS_ON
-  cairo_path_data_type_t* = enum
+  TCairoPathDataType* = enum
     CAIRO_PATH_MOVE_TO, CAIRO_PATH_LINE_TO, CAIRO_PATH_CURVE_TO,
     CAIRO_PATH_CLOSE_PATH
-  cairo_content_t* = enum
+  TCairoContent* = enum
     CAIRO_CONTENT_COLOR = 0x00001000, CAIRO_CONTENT_ALPHA = 0x00002000,
     CAIRO_CONTENT_COLOR_ALPHA = 0x00003000
-  cairo_format_t* = enum
+  TCairoFormat* = enum
     CAIRO_FORMAT_ARGB32, CAIRO_FORMAT_RGB24, CAIRO_FORMAT_A8, CAIRO_FORMAT_A1
-  cairo_extend_t* = enum
+  TCairoExtend* = enum
     CAIRO_EXTEND_NONE, CAIRO_EXTEND_REPEAT, CAIRO_EXTEND_REFLECT,
     CAIRO_EXTEND_PAD
-  cairo_filter_t* = enum
+  TCairoFilter* = enum
     CAIRO_FILTER_FAST, CAIRO_FILTER_GOOD, CAIRO_FILTER_BEST,
     CAIRO_FILTER_NEAREST, CAIRO_FILTER_BILINEAR, CAIRO_FILTER_GAUSSIAN
-  cairo_font_type_t* = enum
+  TCairoFontType* = enum
     CAIRO_FONT_TYPE_TOY, CAIRO_FONT_TYPE_FT, CAIRO_FONT_TYPE_WIN32,
     CAIRO_FONT_TYPE_ATSUI
-  cairo_pattern_type_t* = enum
+  TCairoPatternType* = enum
     CAIRO_PATTERN_TYPE_SOLID, CAIRO_PATTERN_TYPE_SURFACE,
     CAIRO_PATTERN_TYPE_LINEAR, CAIRO_PATTERN_TYPE_RADIAL
-  cairo_surface_type_t* = enum
+  TCairoSurfaceType* = enum
     CAIRO_SURFACE_TYPE_IMAGE, CAIRO_SURFACE_TYPE_PDF, CAIRO_SURFACE_TYPE_PS,
     CAIRO_SURFACE_TYPE_XLIB, CAIRO_SURFACE_TYPE_XCB, CAIRO_SURFACE_TYPE_GLITZ,
     CAIRO_SURFACE_TYPE_QUARTZ, CAIRO_SURFACE_TYPE_WIN32,
     CAIRO_SURFACE_TYPE_BEOS, CAIRO_SURFACE_TYPE_DIRECTFB,
     CAIRO_SURFACE_TYPE_SVG, CAIRO_SURFACE_TYPE_OS2
-  cairo_svg_version_t* = enum
+  TCairoSvgVersion* = enum
     CAIRO_SVG_VERSION_1_1, CAIRO_SVG_VERSION_1_2
-  Pcairo_surface_t* = ref cairo_surface_t
-  PPcairo_surface_t* = ref Pcairo_surface_t
-  Pcairo_t* = ref cairo_t
-  Pcairo_pattern_t* = ref cairo_pattern_t
-  Pcairo_font_options_t* = ref cairo_font_options_t
-  Pcairo_font_face_t* = ref cairo_font_face_t
-  Pcairo_scaled_font_t* = ref cairo_scaled_font_t
-  Pcairo_bool_t* = ref cairo_bool_t
-  cairo_bool_t* = int32
-  Pcairo_matrix_t* = ref cairo_matrix_t
-  Pcairo_user_data_key_t* = ref cairo_user_data_key_t
-  Pcairo_glyph_t* = ref cairo_glyph_t
-  Pcairo_text_extents_t* = ref cairo_text_extents_t
-  Pcairo_font_extents_t* = ref cairo_font_extents_t
-  Pcairo_path_data_type_t* = ref cairo_path_data_type_t
-  Pcairo_path_data_t* = ref cairo_path_data_t
-  Pcairo_path_t* = ref cairo_path_t
-  Pcairo_rectangle_t* = ref cairo_rectangle_t
-  Pcairo_rectangle_list_t* = ref cairo_rectangle_list_t
-  cairo_destroy_func_t* = proc (data: Pointer){.cdecl.}
-  cairo_write_func_t* = proc (closure: Pointer, data: PByte, len: int32): cairo_status_t{.
+  PCairoSurface* = ptr TCairoSurface
+  PPCairoSurface* = ptr PCairoSurface
+  PCairo* = ptr TCairo
+  PCairoPattern* = ptr TCairoPattern
+  PCairoFontOptions* = ptr TCairoFontOptions
+  PCairoFontFace* = ptr TCairoFontFace
+  PCairoScaledFont* = ptr TCairoScaledFont
+  PCairoBool* = ptr TCairoBool
+  TCairoBool* = int32
+  PCairoMatrix* = ptr TCairoMatrix
+  PCairoUserDataKey* = ptr TCairoUserDataKey
+  PCairoGlyph* = ptr TCairoGlyph
+  PCairoTextExtents* = ptr TCairoTextExtents
+  PCairoFontExtents* = ptr TCairoFontExtents
+  PCairoPathDataType* = ptr TCairoPathDataType
+  PCairoPathData* = ptr TCairoPathData
+  PCairoPath* = ptr TCairoPath
+  PCairoRectangle* = ptr TCairoRectangle
+  PCairoRectangleList* = ptr TCairoRectangleList
+  TCairoDestroyFunc* = proc (data: Pointer){.cdecl.}
+  TCairoWriteFunc* = proc (closure: Pointer, data: PByte, len: int32): TCairoStatus{.
       cdecl.}
-  cairo_read_func_t* = proc (closure: Pointer, data: PByte, len: int32): cairo_status_t{.
+  TCairoReadFunc* = proc (closure: Pointer, data: PByte, len: int32): TCairoStatus{.
       cdecl.}
-  cairo_t* {.final.} = object           #OPAQUE
-  cairo_surface_t* {.final.} = object   #OPAQUE
-  cairo_pattern_t* {.final.} = object   #OPAQUE
-  cairo_scaled_font_t* {.final.} = object #OPAQUE
-  cairo_font_face_t* {.final.} = object #OPAQUE
-  cairo_font_options_t* {.final.} = object #OPAQUE
-  cairo_matrix_t* {.final.} = object
+  TCairo* {.final.} = object           #OPAQUE
+  TCairoSurface* {.final.} = object   #OPAQUE
+  TCairoPattern* {.final.} = object   #OPAQUE
+  TCairoScaledFont* {.final.} = object #OPAQUE
+  TCairoFontFace* {.final.} = object #OPAQUE
+  TCairoFontOptions* {.final.} = object #OPAQUE
+  TCairoMatrix* {.final.} = object
     xx: float64
     yx: float64
     xy: float64
@@ -163,15 +163,15 @@ type
     x0: float64
     y0: float64
 
-  cairo_user_data_key_t* {.final.} = object
+  TCairoUserDataKey* {.final.} = object
     unused: int32
 
-  cairo_glyph_t* {.final.} = object
+  TCairoGlyph* {.final.} = object
     index: int32
     x: float64
     y: float64
 
-  cairo_text_extents_t* {.final.} = object
+  TCairoTextExtents* {.final.} = object
     x_bearing: float64
     y_bearing: float64
     width: float64
@@ -179,30 +179,30 @@ type
     x_advance: float64
     y_advance: float64
 
-  cairo_font_extents_t* {.final.} = object
+  TCairoFontExtents* {.final.} = object
     ascent: float64
     descent: float64
     height: float64
     max_x_advance: float64
     max_y_advance: float64
 
-  cairo_path_data_t* {.final.} = object #* _type : cairo_path_data_type_t;
-                                        #       length : LongInt;
-                                        #    end
+  TCairoPathData* {.final.} = object #* _type : TCairoPathDataType;
+                                     #       length : LongInt;
+                                     #    end
     x: float64
     y: float64
 
-  cairo_path_t* {.final.} = object
-    status: cairo_status_t
-    data: Pcairo_path_data_t
+  TCairoPath* {.final.} = object
+    status: TCairoStatus
+    data: PCairoPathData
     num_data: int32
 
-  cairo_rectangle_t* {.final.} = object
+  TCairoRectangle* {.final.} = object
     x, y, width, height: float64
 
-  cairo_rectangle_list_t* {.final.} = object
-    status: cairo_status_t
-    rectangles: Pcairo_rectangle_t
+  TCairoRectangleList* {.final.} = object
+    status: TCairoStatus
+    rectangles: PCairoRectangle
     num_rectangles: int32
 
 
@@ -211,480 +211,480 @@ proc cairo_version_string*(): cstring{.cdecl, importc, dynlib: LIB_CAIRO.}
   #Helper function to retrieve decoded version
 proc cairo_version*(major, minor, micro: var int32)
   #* Functions for manipulating state objects
-proc cairo_create*(target: Pcairo_surface_t): Pcairo_t{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_reference*(cr: Pcairo_t): Pcairo_t{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_destroy*(cr: Pcairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_get_reference_count*(cr: Pcairo_t): int32{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_get_user_data*(cr: Pcairo_t, key: Pcairo_user_data_key_t): pointer{.
-    cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_set_user_data*(cr: PCairo_t, key: Pcairo_user_data_key_t,
-                          user_data: Pointer, destroy: cairo_destroy_func_t): cairo_status_t{.
-    cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_save*(cr: Pcairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_restore*(cr: Pcairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_push_group*(cr: PCairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_push_group_with_content*(cr: PCairo_t, content: cairo_content_t){.
-    cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pop_group*(cr: PCairo_t): Pcairo_pattern_t{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pop_group_to_source*(cr: PCairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_create*(target: PCairoSurface): PCairo{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_reference*(cr: PCairo): PCairo{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_destroy*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_get_reference_count*(cr: PCairo): int32{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_get_user_data*(cr: PCairo, key: PCairoUserDataKey): pointer{.
+    cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_set_user_data*(cr: PCairo, key: PCairoUserDataKey,
+                          user_data: Pointer, destroy: TCairoDestroyFunc): TCairoStatus{.
+    cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_save*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_restore*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_push_group*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_push_group_with_content*(cr: PCairo, content: TCairoContent){.
+    cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_pop_group*(cr: PCairo): PCairoPattern{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_pop_group_to_source*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
   #* Modify state
-proc cairo_set_operator*(cr: Pcairo_t, op: cairo_operator_t){.cdecl, importc,
+proc cairo_set_operator*(cr: PCairo, op: TCairoOperator){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_set_source*(cr: Pcairo_t, source: Pcairo_pattern_t){.cdecl, importc,
+proc cairo_set_source*(cr: PCairo, source: PCairoPattern){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_set_source_rgb*(cr: Pcairo_t, red, green, blue: float64){.cdecl, importc,
+proc cairo_set_source_rgb*(cr: PCairo, red, green, blue: float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_set_source_rgba*(cr: Pcairo_t, red, green, blue, alpha: float64){.
+proc cairo_set_source_rgba*(cr: PCairo, red, green, blue, alpha: float64){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_set_source_surface*(cr: Pcairo_t, surface: Pcairo_surface_t,
+proc cairo_set_source_surface*(cr: PCairo, surface: PCairoSurface,
                                x, y: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_set_tolerance*(cr: Pcairo_t, tolerance: float64){.cdecl, importc,
+proc cairo_set_tolerance*(cr: PCairo, tolerance: float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_set_antialias*(cr: Pcairo_t, antialias: cairo_antialias_t){.cdecl, importc,
+proc cairo_set_antialias*(cr: PCairo, antialias: TCairoAntialias){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_set_fill_rule*(cr: Pcairo_t, fill_rule: cairo_fill_rule_t){.cdecl, importc,
+proc cairo_set_fill_rule*(cr: PCairo, fill_rule: TCairoFillRule){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_set_line_width*(cr: Pcairo_t, width: float64){.cdecl, importc,
+proc cairo_set_line_width*(cr: PCairo, width: float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_set_line_cap*(cr: Pcairo_t, line_cap: cairo_line_cap_t){.cdecl, importc,
+proc cairo_set_line_cap*(cr: PCairo, line_cap: TCairoLineCap){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_set_line_join*(cr: Pcairo_t, line_join: cairo_line_join_t){.cdecl, importc,
+proc cairo_set_line_join*(cr: PCairo, line_join: TCairoLineJoin){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_set_dash*(cr: Pcairo_t, dashes: openarray[float64],
+proc cairo_set_dash*(cr: PCairo, dashes: openarray[float64],
                      offset: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_set_miter_limit*(cr: Pcairo_t, limit: float64){.cdecl, importc,
+proc cairo_set_miter_limit*(cr: PCairo, limit: float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_translate*(cr: Pcairo_t, tx, ty: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_scale*(cr: Pcairo_t, sx, sy: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_rotate*(cr: Pcairo_t, angle: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_transform*(cr: Pcairo_t, matrix: Pcairo_matrix_t){.cdecl, importc,
+proc cairo_translate*(cr: PCairo, tx, ty: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_scale*(cr: PCairo, sx, sy: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_rotate*(cr: PCairo, angle: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_transform*(cr: PCairo, matrix: PCairoMatrix){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_set_matrix*(cr: Pcairo_t, matrix: Pcairo_matrix_t){.cdecl, importc,
+proc cairo_set_matrix*(cr: PCairo, matrix: PCairoMatrix){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_identity_matrix*(cr: Pcairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_user_to_device*(cr: Pcairo_t, x, y: var float64){.cdecl, importc,
+proc cairo_identity_matrix*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_user_to_device*(cr: PCairo, x, y: var float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_user_to_device_distance*(cr: Pcairo_t, dx, dy: var float64){.cdecl, importc,
+proc cairo_user_to_device_distance*(cr: PCairo, dx, dy: var float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_device_to_user*(cr: Pcairo_t, x, y: var float64){.cdecl, importc,
+proc cairo_device_to_user*(cr: PCairo, x, y: var float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_device_to_user_distance*(cr: Pcairo_t, dx, dy: var float64){.cdecl, importc,
+proc cairo_device_to_user_distance*(cr: PCairo, dx, dy: var float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
   #* Path creation functions
-proc cairo_new_path*(cr: Pcairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_move_to*(cr: Pcairo_t, x, y: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_new_sub_path*(cr: Pcairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_line_to*(cr: Pcairo_t, x, y: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_curve_to*(cr: Pcairo_t, x1, y1, x2, y2, x3, y3: float64){.cdecl, importc,
+proc cairo_new_path*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_move_to*(cr: PCairo, x, y: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_new_sub_path*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_line_to*(cr: PCairo, x, y: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_curve_to*(cr: PCairo, x1, y1, x2, y2, x3, y3: float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_arc*(cr: Pcairo_t, xc, yc, radius, angle1, angle2: float64){.cdecl, importc,
+proc cairo_arc*(cr: PCairo, xc, yc, radius, angle1, angle2: float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_arc_negative*(cr: Pcairo_t, xc, yc, radius, angle1, angle2: float64){.
+proc cairo_arc_negative*(cr: PCairo, xc, yc, radius, angle1, angle2: float64){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_rel_move_to*(cr: Pcairo_t, dx, dy: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_rel_line_to*(cr: Pcairo_t, dx, dy: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_rel_curve_to*(cr: Pcairo_t, dx1, dy1, dx2, dy2, dx3, dy3: float64){.
+proc cairo_rel_move_to*(cr: PCairo, dx, dy: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_rel_line_to*(cr: PCairo, dx, dy: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_rel_curve_to*(cr: PCairo, dx1, dy1, dx2, dy2, dx3, dy3: float64){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_rectangle*(cr: Pcairo_t, x, y, width, height: float64){.cdecl, importc,
+proc cairo_rectangle*(cr: PCairo, x, y, width, height: float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_close_path*(cr: Pcairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_close_path*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
   #* Painting functions
-proc cairo_paint*(cr: Pcairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_paint_with_alpha*(cr: Pcairo_t, alpha: float64){.cdecl, importc,
+proc cairo_paint*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_paint_with_alpha*(cr: PCairo, alpha: float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_mask*(cr: Pcairo_t, pattern: Pcairo_pattern_t){.cdecl, importc,
+proc cairo_mask*(cr: PCairo, pattern: PCairoPattern){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_mask_surface*(cr: Pcairo_t, surface: Pcairo_surface_t,
+proc cairo_mask_surface*(cr: PCairo, surface: PCairoSurface,
                          surface_x, surface_y: float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_stroke*(cr: Pcairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_stroke_preserve*(cr: Pcairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_fill*(cr: Pcairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_fill_preserve*(cr: Pcairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_copy_page*(cr: Pcairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_show_page*(cr: Pcairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_stroke*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_stroke_preserve*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_fill*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_fill_preserve*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_copy_page*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_show_page*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
   #* Insideness testing
-proc cairo_in_stroke*(cr: Pcairo_t, x, y: float64): cairo_bool_t{.cdecl, importc,
+proc cairo_in_stroke*(cr: PCairo, x, y: float64): TCairoBool{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_in_fill*(cr: Pcairo_t, x, y: float64): cairo_bool_t{.cdecl, importc,
+proc cairo_in_fill*(cr: PCairo, x, y: float64): TCairoBool{.cdecl, importc,
     dynlib: LIB_CAIRO.}
   #* Rectangular extents
-proc cairo_stroke_extents*(cr: Pcairo_t, x1, y1, x2, y2: var float64){.cdecl, importc,
+proc cairo_stroke_extents*(cr: PCairo, x1, y1, x2, y2: var float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_fill_extents*(cr: Pcairo_t, x1, y1, x2, y2: var float64){.cdecl, importc,
+proc cairo_fill_extents*(cr: PCairo, x1, y1, x2, y2: var float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
   #* Clipping
-proc cairo_reset_clip*(cr: Pcairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_clip*(cr: Pcairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_clip_preserve*(cr: Pcairo_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_clip_extents*(cr: Pcairo_t, x1, y1, x2, y2: var float64){.cdecl, importc,
+proc cairo_reset_clip*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_clip*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_clip_preserve*(cr: PCairo){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_clip_extents*(cr: PCairo, x1, y1, x2, y2: var float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_copy_clip_rectangle_list*(cr: Pcairo_t): Pcairo_rectangle_list_t{.
+proc cairo_copy_clip_rectangle_list*(cr: PCairo): PCairoRectangleList{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_rectangle_list_destroy*(rectangle_list: Pcairo_rectangle_list_t){.
+proc cairo_rectangle_list_destroy*(rectangle_list: PCairoRectangleList){.
     cdecl, importc, dynlib: LIB_CAIRO.}
   #* Font/Text functions
-proc cairo_font_options_create*(): Pcairo_font_options_t{.cdecl, importc,
+proc cairo_font_options_create*(): PCairoFontOptions{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_font_options_copy*(original: Pcairo_font_options_t): Pcairo_font_options_t{.
+proc cairo_font_options_copy*(original: PCairoFontOptions): PCairoFontOptions{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_font_options_destroy*(options: Pcairo_font_options_t){.cdecl, importc,
+proc cairo_font_options_destroy*(options: PCairoFontOptions){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_font_options_status*(options: Pcairo_font_options_t): cairo_status_t{.
+proc cairo_font_options_status*(options: PCairoFontOptions): TCairoStatus{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_font_options_merge*(options, other: Pcairo_font_options_t){.cdecl, importc,
+proc cairo_font_options_merge*(options, other: PCairoFontOptions){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_font_options_equal*(options, other: Pcairo_font_options_t): cairo_bool_t{.
+proc cairo_font_options_equal*(options, other: PCairoFontOptions): TCairoBool{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_font_options_hash*(options: Pcairo_font_options_t): int32{.cdecl, importc,
+proc cairo_font_options_hash*(options: PCairoFontOptions): int32{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_font_options_set_antialias*(options: Pcairo_font_options_t,
-                                       antialias: cairo_antialias_t){.cdecl, importc,
+proc cairo_font_options_set_antialias*(options: PCairoFontOptions,
+                                       antialias: TCairoAntialias){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_font_options_get_antialias*(options: Pcairo_font_options_t): cairo_antialias_t{.
+proc cairo_font_options_get_antialias*(options: PCairoFontOptions): TCairoAntialias{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_font_options_set_subpixel_order*(options: Pcairo_font_options_t,
-    subpixel_order: cairo_subpixel_order_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_font_options_get_subpixel_order*(options: Pcairo_font_options_t): cairo_subpixel_order_t{.
+proc cairo_font_options_set_subpixel_order*(options: PCairoFontOptions,
+    subpixel_order: TCairoSubpixelOrder){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_font_options_get_subpixel_order*(options: PCairoFontOptions): TCairoSubpixelOrder{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_font_options_set_hint_style*(options: Pcairo_font_options_t,
-                                        hint_style: cairo_hint_style_t){.cdecl, importc,
+proc cairo_font_options_set_hint_style*(options: PCairoFontOptions,
+                                        hint_style: TCairoHintStyle){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_font_options_get_hint_style*(options: Pcairo_font_options_t): cairo_hint_style_t{.
+proc cairo_font_options_get_hint_style*(options: PCairoFontOptions): TCairoHintStyle{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_font_options_set_hint_metrics*(options: Pcairo_font_options_t,
-    hint_metrics: cairo_hint_metrics_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_font_options_get_hint_metrics*(options: Pcairo_font_options_t): cairo_hint_metrics_t{.
+proc cairo_font_options_set_hint_metrics*(options: PCairoFontOptions,
+    hint_metrics: TCairoHintMetrics){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_font_options_get_hint_metrics*(options: PCairoFontOptions): TCairoHintMetrics{.
     cdecl, importc, dynlib: LIB_CAIRO.}
   #* This interface is for dealing with text as text, not caring about the
-  #   font object inside the the cairo_t.
-proc cairo_select_font_face*(cr: Pcairo_t, family: cstring,
-                             slant: cairo_font_slant_t,
-                             weight: cairo_font_weight_t){.cdecl, importc,
+  #   font object inside the the TCairo.
+proc cairo_select_font_face*(cr: PCairo, family: cstring,
+                             slant: TCairoFontSlant,
+                             weight: TCairoFontWeight){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_set_font_size*(cr: Pcairo_t, size: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_set_font_matrix*(cr: Pcairo_t, matrix: Pcairo_matrix_t){.cdecl, importc,
+proc cairo_set_font_size*(cr: PCairo, size: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_set_font_matrix*(cr: PCairo, matrix: PCairoMatrix){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_get_font_matrix*(cr: Pcairo_t, matrix: Pcairo_matrix_t){.cdecl, importc,
+proc cairo_get_font_matrix*(cr: PCairo, matrix: PCairoMatrix){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_set_font_options*(cr: Pcairo_t, options: Pcairo_font_options_t){.
+proc cairo_set_font_options*(cr: PCairo, options: PCairoFontOptions){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_get_font_options*(cr: Pcairo_t, options: Pcairo_font_options_t){.
+proc cairo_get_font_options*(cr: PCairo, options: PCairoFontOptions){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_set_font_face*(cr: Pcairo_t, font_face: Pcairo_font_face_t){.cdecl, importc,
+proc cairo_set_font_face*(cr: PCairo, font_face: PCairoFontFace){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_get_font_face*(cr: Pcairo_t): Pcairo_font_face_t{.cdecl, importc,
+proc cairo_get_font_face*(cr: PCairo): PCairoFontFace{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_set_scaled_font*(cr: PCairo_t, scaled_font: Pcairo_scaled_font_t){.
+proc cairo_set_scaled_font*(cr: PCairo, scaled_font: PCairoScaledFont){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_get_scaled_font*(cr: Pcairo_t): Pcairo_scaled_font_t{.cdecl, importc,
+proc cairo_get_scaled_font*(cr: PCairo): PCairoScaledFont{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_show_text*(cr: Pcairo_t, utf8: cstring){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_show_glyphs*(cr: Pcairo_t, glyphs: Pcairo_glyph_t, num_glyphs: int32){.
+proc cairo_show_text*(cr: PCairo, utf8: cstring){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_show_glyphs*(cr: PCairo, glyphs: PCairoGlyph, num_glyphs: int32){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_text_path*(cr: Pcairo_t, utf8: cstring){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_glyph_path*(cr: Pcairo_t, glyphs: Pcairo_glyph_t, num_glyphs: int32){.
+proc cairo_text_path*(cr: PCairo, utf8: cstring){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_glyph_path*(cr: PCairo, glyphs: PCairoGlyph, num_glyphs: int32){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_text_extents*(cr: Pcairo_t, utf8: cstring,
-                         extents: Pcairo_text_extents_t){.cdecl, importc,
+proc cairo_text_extents*(cr: PCairo, utf8: cstring,
+                         extents: PCairoTextExtents){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_glyph_extents*(cr: Pcairo_t, glyphs: Pcairo_glyph_t,
-                          num_glyphs: int32, extents: Pcairo_text_extents_t){.
+proc cairo_glyph_extents*(cr: PCairo, glyphs: PCairoGlyph,
+                          num_glyphs: int32, extents: PCairoTextExtents){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_font_extents*(cr: Pcairo_t, extents: Pcairo_font_extents_t){.cdecl, importc,
+proc cairo_font_extents*(cr: PCairo, extents: PCairoFontExtents){.cdecl, importc,
     dynlib: LIB_CAIRO.}
   #* Generic identifier for a font style
-proc cairo_font_face_reference*(font_face: Pcairo_font_face_t): Pcairo_font_face_t{.
+proc cairo_font_face_reference*(font_face: PCairoFontFace): PCairoFontFace{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_font_face_destroy*(font_face: Pcairo_font_face_t){.cdecl, importc,
+proc cairo_font_face_destroy*(font_face: PCairoFontFace){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_font_face_get_reference_count*(font_face: Pcairo_font_face_t): int32{.
+proc cairo_font_face_get_reference_count*(font_face: PCairoFontFace): int32{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_font_face_status*(font_face: Pcairo_font_face_t): cairo_status_t{.
+proc cairo_font_face_status*(font_face: PCairoFontFace): TCairoStatus{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_font_face_get_type*(font_face: Pcairo_font_face_t): cairo_font_type_t{.
+proc cairo_font_face_get_type*(font_face: PCairoFontFace): TCairoFontType{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_font_face_get_user_data*(font_face: Pcairo_font_face_t,
-                                    key: Pcairo_user_data_key_t): pointer{.
+proc cairo_font_face_get_user_data*(font_face: PCairoFontFace,
+                                    key: PCairoUserDataKey): pointer{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_font_face_set_user_data*(font_face: Pcairo_font_face_t,
-                                    key: Pcairo_user_data_key_t,
+proc cairo_font_face_set_user_data*(font_face: PCairoFontFace,
+                                    key: PCairoUserDataKey,
                                     user_data: pointer,
-                                    destroy: cairo_destroy_func_t): cairo_status_t{.
+                                    destroy: TCairoDestroyFunc): TCairoStatus{.
     cdecl, importc, dynlib: LIB_CAIRO.}
   #* Portable interface to general font features
-proc cairo_scaled_font_create*(font_face: Pcairo_font_face_t,
-                               font_matrix: Pcairo_matrix_t,
-                               ctm: Pcairo_matrix_t,
-                               options: Pcairo_font_options_t): Pcairo_scaled_font_t{.
+proc cairo_scaled_font_create*(font_face: PCairoFontFace,
+                               font_matrix: PCairoMatrix,
+                               ctm: PCairoMatrix,
+                               options: PCairoFontOptions): PCairoScaledFont{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_scaled_font_reference*(scaled_font: Pcairo_scaled_font_t): Pcairo_scaled_font_t{.
+proc cairo_scaled_font_reference*(scaled_font: PCairoScaledFont): PCairoScaledFont{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_scaled_font_destroy*(scaled_font: Pcairo_scaled_font_t){.cdecl, importc,
+proc cairo_scaled_font_destroy*(scaled_font: PCairoScaledFont){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_scaled_font_get_reference_count*(scaled_font: Pcairo_scaled_font_t): int32{.
+proc cairo_scaled_font_get_reference_count*(scaled_font: PCairoScaledFont): int32{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_scaled_font_status*(scaled_font: Pcairo_scaled_font_t): cairo_status_t{.
+proc cairo_scaled_font_status*(scaled_font: PCairoScaledFont): TCairoStatus{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_scaled_font_get_type*(scaled_font: Pcairo_scaled_font_t): cairo_font_type_t{.
+proc cairo_scaled_font_get_type*(scaled_font: PCairoScaledFont): TCairoFontType{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_scaled_font_get_user_data*(scaled_font: Pcairo_scaled_font_t,
-                                      key: Pcairo_user_data_key_t): Pointer{.
+proc cairo_scaled_font_get_user_data*(scaled_font: PCairoScaledFont,
+                                      key: PCairoUserDataKey): Pointer{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_scaled_font_set_user_data*(scaled_font: Pcairo_scaled_font_t,
-                                      key: Pcairo_user_data_key_t,
+proc cairo_scaled_font_set_user_data*(scaled_font: PCairoScaledFont,
+                                      key: PCairoUserDataKey,
                                       user_data: Pointer,
-                                      destroy: cairo_destroy_func_t): cairo_status_t{.
+                                      destroy: TCairoDestroyFunc): TCairoStatus{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_scaled_font_extents*(scaled_font: Pcairo_scaled_font_t,
-                                extents: Pcairo_font_extents_t){.cdecl, importc,
+proc cairo_scaled_font_extents*(scaled_font: PCairoScaledFont,
+                                extents: PCairoFontExtents){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_scaled_font_text_extents*(scaled_font: Pcairo_scaled_font_t,
+proc cairo_scaled_font_text_extents*(scaled_font: PCairoScaledFont,
                                      utf8: cstring,
-                                     extents: Pcairo_text_extents_t){.cdecl, importc,
+                                     extents: PCairoTextExtents){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_scaled_font_glyph_extents*(scaled_font: Pcairo_scaled_font_t,
-                                      glyphs: Pcairo_glyph_t, num_glyphs: int32,
-                                      extents: Pcairo_text_extents_t){.cdecl, importc,
+proc cairo_scaled_font_glyph_extents*(scaled_font: PCairoScaledFont,
+                                      glyphs: PCairoGlyph, num_glyphs: int32,
+                                      extents: PCairoTextExtents){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_scaled_font_get_font_face*(scaled_font: Pcairo_scaled_font_t): Pcairo_font_face_t{.
+proc cairo_scaled_font_get_font_face*(scaled_font: PCairoScaledFont): PCairoFontFace{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_scaled_font_get_font_matrix*(scaled_font: Pcairo_scaled_font_t,
-                                        font_matrix: Pcairo_matrix_t){.cdecl, importc,
+proc cairo_scaled_font_get_font_matrix*(scaled_font: PCairoScaledFont,
+                                        font_matrix: PCairoMatrix){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_scaled_font_get_ctm*(scaled_font: Pcairo_scaled_font_t,
-                                ctm: Pcairo_matrix_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_scaled_font_get_font_options*(scaled_font: Pcairo_scaled_font_t,
-    options: Pcairo_font_options_t){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_scaled_font_get_ctm*(scaled_font: PCairoScaledFont,
+                                ctm: PCairoMatrix){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_scaled_font_get_font_options*(scaled_font: PCairoScaledFont,
+    options: PCairoFontOptions){.cdecl, importc, dynlib: LIB_CAIRO.}
   #* Query functions
-proc cairo_get_operator*(cr: Pcairo_t): cairo_operator_t{.cdecl, importc,
+proc cairo_get_operator*(cr: PCairo): TCairoOperator{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_get_source*(cr: Pcairo_t): Pcairo_pattern_t{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_get_tolerance*(cr: Pcairo_t): float64{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_get_antialias*(cr: Pcairo_t): cairo_antialias_t{.cdecl, importc,
+proc cairo_get_source*(cr: PCairo): PCairoPattern{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_get_tolerance*(cr: PCairo): float64{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_get_antialias*(cr: PCairo): TCairoAntialias{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_get_current_point*(cr: Pcairo_t, x, y: var float64){.cdecl, importc,
+proc cairo_get_current_point*(cr: PCairo, x, y: var float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_get_fill_rule*(cr: Pcairo_t): cairo_fill_rule_t{.cdecl, importc,
+proc cairo_get_fill_rule*(cr: PCairo): TCairoFillRule{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_get_line_width*(cr: Pcairo_t): float64{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_get_line_cap*(cr: Pcairo_t): cairo_line_cap_t{.cdecl, importc,
+proc cairo_get_line_width*(cr: PCairo): float64{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_get_line_cap*(cr: PCairo): TCairoLineCap{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_get_line_join*(cr: Pcairo_t): cairo_line_join_t{.cdecl, importc,
+proc cairo_get_line_join*(cr: PCairo): TCairoLineJoin{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_get_miter_limit*(cr: Pcairo_t): float64{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_get_dash_count*(cr: Pcairo_t): int32{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_get_dash*(cr: Pcairo_t, dashes, offset: var float64){.cdecl, importc,
+proc cairo_get_miter_limit*(cr: PCairo): float64{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_get_dash_count*(cr: PCairo): int32{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_get_dash*(cr: PCairo, dashes, offset: var float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_get_matrix*(cr: Pcairo_t, matrix: Pcairo_matrix_t){.cdecl, importc,
+proc cairo_get_matrix*(cr: PCairo, matrix: PCairoMatrix){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_get_target*(cr: Pcairo_t): Pcairo_surface_t{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_get_group_target*(cr: Pcairo_t): Pcairo_surface_t{.cdecl, importc,
+proc cairo_get_target*(cr: PCairo): PCairoSurface{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_get_group_target*(cr: PCairo): PCairoSurface{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_copy_path*(cr: Pcairo_t): Pcairo_path_t{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_copy_path_flat*(cr: Pcairo_t): Pcairo_path_t{.cdecl, importc,
+proc cairo_copy_path*(cr: PCairo): PCairoPath{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_copy_path_flat*(cr: PCairo): PCairoPath{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_append_path*(cr: Pcairo_t, path: Pcairo_path_t){.cdecl, importc,
+proc cairo_append_path*(cr: PCairo, path: PCairoPath){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_path_destroy*(path: Pcairo_path_t){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_path_destroy*(path: PCairoPath){.cdecl, importc, dynlib: LIB_CAIRO.}
   #* Error status queries
-proc cairo_status*(cr: Pcairo_t): cairo_status_t{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_status_to_string*(status: cairo_status_t): cstring{.cdecl, importc,
+proc cairo_status*(cr: PCairo): TCairoStatus{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_status_to_string*(status: TCairoStatus): cstring{.cdecl, importc,
     dynlib: LIB_CAIRO.}
   #* Surface manipulation
-proc cairo_surface_create_similar*(other: Pcairo_surface_t,
-                                   content: cairo_content_t,
-                                   width, height: int32): Pcairo_surface_t{.
+proc cairo_surface_create_similar*(other: PCairoSurface,
+                                   content: TCairoContent,
+                                   width, height: int32): PCairoSurface{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_surface_reference*(surface: Pcairo_surface_t): Pcairo_surface_t{.
+proc cairo_surface_reference*(surface: PCairoSurface): PCairoSurface{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_surface_finish*(surface: Pcairo_surface_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_surface_destroy*(surface: Pcairo_surface_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_surface_get_reference_count*(surface: Pcairo_surface_t): int32{.
+proc cairo_surface_finish*(surface: PCairoSurface){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_surface_destroy*(surface: PCairoSurface){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_surface_get_reference_count*(surface: PCairoSurface): int32{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_surface_status*(surface: Pcairo_surface_t): cairo_status_t{.cdecl, importc,
+proc cairo_surface_status*(surface: PCairoSurface): TCairoStatus{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_surface_get_type*(surface: Pcairo_surface_t): cairo_surface_type_t{.
+proc cairo_surface_get_type*(surface: PCairoSurface): TCairoSurfaceType{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_surface_get_content*(surface: Pcairo_surface_t): cairo_content_t{.
+proc cairo_surface_get_content*(surface: PCairoSurface): TCairoContent{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_surface_write_to_png*(surface: Pcairo_surface_t, filename: cstring): cairo_status_t{.
+proc cairo_surface_write_to_png*(surface: PCairoSurface, filename: cstring): TCairoStatus{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_surface_write_to_png_stream*(surface: Pcairo_surface_t,
-                                        write_func: cairo_write_func_t,
-                                        closure: pointer): cairo_status_t{.
+proc cairo_surface_write_to_png_stream*(surface: PCairoSurface,
+                                        write_func: TCairoWriteFunc,
+                                        closure: pointer): TCairoStatus{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_surface_get_user_data*(surface: Pcairo_surface_t,
-                                  key: Pcairo_user_data_key_t): pointer{.cdecl, importc,
+proc cairo_surface_get_user_data*(surface: PCairoSurface,
+                                  key: PCairoUserDataKey): pointer{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_surface_set_user_data*(surface: Pcairo_surface_t,
-                                  key: Pcairo_user_data_key_t,
+proc cairo_surface_set_user_data*(surface: PCairoSurface,
+                                  key: PCairoUserDataKey,
                                   user_data: pointer,
-                                  destroy: cairo_destroy_func_t): cairo_status_t{.
+                                  destroy: TCairoDestroyFunc): TCairoStatus{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_surface_get_font_options*(surface: Pcairo_surface_t,
-                                     options: Pcairo_font_options_t){.cdecl, importc,
+proc cairo_surface_get_font_options*(surface: PCairoSurface,
+                                     options: PCairoFontOptions){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_surface_flush*(surface: Pcairo_surface_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_surface_mark_dirty*(surface: Pcairo_surface_t){.cdecl, importc,
+proc cairo_surface_flush*(surface: PCairoSurface){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_surface_mark_dirty*(surface: PCairoSurface){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_surface_mark_dirty_rectangle*(surface: Pcairo_surface_t,
+proc cairo_surface_mark_dirty_rectangle*(surface: PCairoSurface,
     x, y, width, height: int32){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_surface_set_device_offset*(surface: Pcairo_surface_t,
+proc cairo_surface_set_device_offset*(surface: PCairoSurface,
                                       x_offset, y_offset: float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_surface_get_device_offset*(surface: Pcairo_surface_t,
+proc cairo_surface_get_device_offset*(surface: PCairoSurface,
                                       x_offset, y_offset: var float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_surface_set_fallback_resolution*(surface: Pcairo_surface_t,
+proc cairo_surface_set_fallback_resolution*(surface: PCairoSurface,
     x_pixels_per_inch, y_pixels_per_inch: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
   #* Image-surface functions
-proc cairo_image_surface_create*(format: cairo_format_t, width, height: int32): Pcairo_surface_t{.
+proc cairo_image_surface_create*(format: TCairoFormat, width, height: int32): PCairoSurface{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_image_surface_create_for_data*(data: Pbyte, format: cairo_format_t,
-    width, height, stride: int32): Pcairo_surface_t{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_image_surface_get_data*(surface: Pcairo_surface_t): cstring{.cdecl, importc,
+proc cairo_image_surface_create_for_data*(data: Pbyte, format: TCairoFormat,
+    width, height, stride: int32): PCairoSurface{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_image_surface_get_data*(surface: PCairoSurface): cstring{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_image_surface_get_format*(surface: Pcairo_surface_t): cairo_format_t{.
+proc cairo_image_surface_get_format*(surface: PCairoSurface): TCairoFormat{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_image_surface_get_width*(surface: Pcairo_surface_t): int32{.cdecl, importc,
+proc cairo_image_surface_get_width*(surface: PCairoSurface): int32{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_image_surface_get_height*(surface: Pcairo_surface_t): int32{.cdecl, importc,
+proc cairo_image_surface_get_height*(surface: PCairoSurface): int32{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_image_surface_get_stride*(surface: Pcairo_surface_t): int32{.cdecl, importc,
+proc cairo_image_surface_get_stride*(surface: PCairoSurface): int32{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_image_surface_create_from_png*(filename: cstring): Pcairo_surface_t{.
+proc cairo_image_surface_create_from_png*(filename: cstring): PCairoSurface{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_image_surface_create_from_png_stream*(read_func: cairo_read_func_t,
-    closure: pointer): Pcairo_surface_t{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_image_surface_create_from_png_stream*(read_func: TCairoReadFunc,
+    closure: pointer): PCairoSurface{.cdecl, importc, dynlib: LIB_CAIRO.}
   #* Pattern creation functions
-proc cairo_pattern_create_rgb*(red, green, blue: float64): Pcairo_pattern_t{.
+proc cairo_pattern_create_rgb*(red, green, blue: float64): PCairoPattern{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_create_rgba*(red, green, blue, alpha: float64): Pcairo_pattern_t{.
+proc cairo_pattern_create_rgba*(red, green, blue, alpha: float64): PCairoPattern{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_create_for_surface*(surface: Pcairo_surface_t): Pcairo_pattern_t{.
+proc cairo_pattern_create_for_surface*(surface: PCairoSurface): PCairoPattern{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_create_linear*(x0, y0, x1, y1: float64): Pcairo_pattern_t{.
+proc cairo_pattern_create_linear*(x0, y0, x1, y1: float64): PCairoPattern{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_create_radial*(cx0, cy0, radius0, cx1, cy1, radius1: float64): Pcairo_pattern_t{.
+proc cairo_pattern_create_radial*(cx0, cy0, radius0, cx1, cy1, radius1: float64): PCairoPattern{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_reference*(pattern: Pcairo_pattern_t): Pcairo_pattern_t{.
+proc cairo_pattern_reference*(pattern: PCairoPattern): PCairoPattern{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_destroy*(pattern: Pcairo_pattern_t){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_get_reference_count*(pattern: Pcairo_pattern_t): int32{.
+proc cairo_pattern_destroy*(pattern: PCairoPattern){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_pattern_get_reference_count*(pattern: PCairoPattern): int32{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_status*(pattern: Pcairo_pattern_t): cairo_status_t{.cdecl, importc,
+proc cairo_pattern_status*(pattern: PCairoPattern): TCairoStatus{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_pattern_get_user_data*(pattern: Pcairo_pattern_t,
-                                  key: Pcairo_user_data_key_t): Pointer{.cdecl, importc,
+proc cairo_pattern_get_user_data*(pattern: PCairoPattern,
+                                  key: PCairoUserDataKey): Pointer{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_pattern_set_user_data*(pattern: Pcairo_pattern_t,
-                                  key: Pcairo_user_data_key_t,
+proc cairo_pattern_set_user_data*(pattern: PCairoPattern,
+                                  key: PCairoUserDataKey,
                                   user_data: Pointer,
-                                  destroy: cairo_destroy_func_t): cairo_status_t{.
+                                  destroy: TCairoDestroyFunc): TCairoStatus{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_get_type*(pattern: Pcairo_pattern_t): cairo_pattern_type_t{.
+proc cairo_pattern_get_type*(pattern: PCairoPattern): TCairoPatternType{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_add_color_stop_rgb*(pattern: Pcairo_pattern_t,
+proc cairo_pattern_add_color_stop_rgb*(pattern: PCairoPattern,
                                        offset, red, green, blue: float64){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_add_color_stop_rgba*(pattern: Pcairo_pattern_t, offset, red,
+proc cairo_pattern_add_color_stop_rgba*(pattern: PCairoPattern, offset, red,
     green, blue, alpha: float64){.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_set_matrix*(pattern: Pcairo_pattern_t,
-                               matrix: Pcairo_matrix_t){.cdecl, importc,
+proc cairo_pattern_set_matrix*(pattern: PCairoPattern,
+                               matrix: PCairoMatrix){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_pattern_get_matrix*(pattern: Pcairo_pattern_t,
-                               matrix: Pcairo_matrix_t){.cdecl, importc,
+proc cairo_pattern_get_matrix*(pattern: PCairoPattern,
+                               matrix: PCairoMatrix){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_pattern_set_extend*(pattern: Pcairo_pattern_t, extend: cairo_extend_t){.
+proc cairo_pattern_set_extend*(pattern: PCairoPattern, extend: TCairoExtend){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_get_extend*(pattern: Pcairo_pattern_t): cairo_extend_t{.
+proc cairo_pattern_get_extend*(pattern: PCairoPattern): TCairoExtend{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_set_filter*(pattern: Pcairo_pattern_t, filter: cairo_filter_t){.
+proc cairo_pattern_set_filter*(pattern: PCairoPattern, filter: TCairoFilter){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_get_filter*(pattern: Pcairo_pattern_t): cairo_filter_t{.
+proc cairo_pattern_get_filter*(pattern: PCairoPattern): TCairoFilter{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_get_rgba*(pattern: Pcairo_pattern_t,
-                             red, green, blue, alpha: var float64): cairo_status_t{.
+proc cairo_pattern_get_rgba*(pattern: PCairoPattern,
+                             red, green, blue, alpha: var float64): TCairoStatus{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_get_surface*(pattern: Pcairo_pattern_t,
-                                surface: PPcairo_surface_t): cairo_status_t{.
+proc cairo_pattern_get_surface*(pattern: PCairoPattern,
+                                surface: PPCairoSurface): TCairoStatus{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_get_color_stop_rgba*(pattern: Pcairo_pattern_t, index: int32,
-    offset, red, green, blue, alpha: var float64): cairo_status_t{.cdecl, importc,
+proc cairo_pattern_get_color_stop_rgba*(pattern: PCairoPattern, index: int32,
+    offset, red, green, blue, alpha: var float64): TCairoStatus{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_pattern_get_color_stop_count*(pattern: Pcairo_pattern_t,
-    count: var int32): cairo_status_t{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_get_linear_points*(pattern: Pcairo_pattern_t,
-                                      x0, y0, x1, y1: var float64): cairo_status_t{.
+proc cairo_pattern_get_color_stop_count*(pattern: PCairoPattern,
+    count: var int32): TCairoStatus{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_pattern_get_linear_points*(pattern: PCairoPattern,
+                                      x0, y0, x1, y1: var float64): TCairoStatus{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pattern_get_radial_circles*(pattern: Pcairo_pattern_t,
-                                       x0, y0, r0, x1, y1, r1: var float64): cairo_status_t{.
+proc cairo_pattern_get_radial_circles*(pattern: PCairoPattern,
+                                       x0, y0, r0, x1, y1, r1: var float64): TCairoStatus{.
     cdecl, importc, dynlib: LIB_CAIRO.}
   #* Matrix functions
-proc cairo_matrix_init*(matrix: Pcairo_matrix_t, xx, yx, xy, yy, x0, y0: float64){.
+proc cairo_matrix_init*(matrix: PCairoMatrix, xx, yx, xy, yy, x0, y0: float64){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_matrix_init_identity*(matrix: Pcairo_matrix_t){.cdecl, importc,
+proc cairo_matrix_init_identity*(matrix: PCairoMatrix){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_matrix_init_translate*(matrix: Pcairo_matrix_t, tx, ty: float64){.
+proc cairo_matrix_init_translate*(matrix: PCairoMatrix, tx, ty: float64){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_matrix_init_scale*(matrix: Pcairo_matrix_t, sx, sy: float64){.cdecl, importc,
+proc cairo_matrix_init_scale*(matrix: PCairoMatrix, sx, sy: float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_matrix_init_rotate*(matrix: Pcairo_matrix_t, radians: float64){.
+proc cairo_matrix_init_rotate*(matrix: PCairoMatrix, radians: float64){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_matrix_translate*(matrix: Pcairo_matrix_t, tx, ty: float64){.cdecl, importc,
+proc cairo_matrix_translate*(matrix: PCairoMatrix, tx, ty: float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_matrix_scale*(matrix: Pcairo_matrix_t, sx, sy: float64){.cdecl, importc,
+proc cairo_matrix_scale*(matrix: PCairoMatrix, sx, sy: float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_matrix_rotate*(matrix: Pcairo_matrix_t, radians: float64){.cdecl, importc,
+proc cairo_matrix_rotate*(matrix: PCairoMatrix, radians: float64){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_matrix_invert*(matrix: Pcairo_matrix_t): cairo_status_t{.cdecl, importc,
+proc cairo_matrix_invert*(matrix: PCairoMatrix): TCairoStatus{.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_matrix_multiply*(result, a, b: Pcairo_matrix_t){.cdecl, importc,
+proc cairo_matrix_multiply*(result, a, b: PCairoMatrix){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_matrix_transform_distance*(matrix: Pcairo_matrix_t, dx, dy: var float64){.
+proc cairo_matrix_transform_distance*(matrix: PCairoMatrix, dx, dy: var float64){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_matrix_transform_point*(matrix: Pcairo_matrix_t, x, y: var float64){.
+proc cairo_matrix_transform_point*(matrix: PCairoMatrix, x, y: var float64){.
     cdecl, importc, dynlib: LIB_CAIRO.}
   #* PDF functions
 proc cairo_pdf_surface_create*(filename: cstring,
-                               width_in_points, height_in_points: float64): Pcairo_surface_t{.
+                               width_in_points, height_in_points: float64): PCairoSurface{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pdf_surface_create_for_stream*(write_func: cairo_write_func_t,
-    closure: Pointer, width_in_points, height_in_points: float64): Pcairo_surface_t{.
+proc cairo_pdf_surface_create_for_stream*(write_func: TCairoWriteFunc,
+    closure: Pointer, width_in_points, height_in_points: float64): PCairoSurface{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_pdf_surface_set_size*(surface: Pcairo_surface_t,
+proc cairo_pdf_surface_set_size*(surface: PCairoSurface,
                                  width_in_points, height_in_points: float64){.
     cdecl, importc, dynlib: LIB_CAIRO.}
   #* PS functions
 proc cairo_ps_surface_create*(filename: cstring,
-                              width_in_points, height_in_points: float64): Pcairo_surface_t{.
+                              width_in_points, height_in_points: float64): PCairoSurface{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_ps_surface_create_for_stream*(write_func: cairo_write_func_t,
-    closure: Pointer, width_in_points, height_in_points: float64): Pcairo_surface_t{.
+proc cairo_ps_surface_create_for_stream*(write_func: TCairoWriteFunc,
+    closure: Pointer, width_in_points, height_in_points: float64): PCairoSurface{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_ps_surface_set_size*(surface: Pcairo_surface_t,
+proc cairo_ps_surface_set_size*(surface: PCairoSurface,
                                 width_in_points, height_in_points: float64){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_ps_surface_dsc_comment*(surface: Pcairo_surface_t, comment: cstring){.
+proc cairo_ps_surface_dsc_comment*(surface: PCairoSurface, comment: cstring){.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_ps_surface_dsc_begin_setup*(surface: Pcairo_surface_t){.cdecl, importc,
+proc cairo_ps_surface_dsc_begin_setup*(surface: PCairoSurface){.cdecl, importc,
     dynlib: LIB_CAIRO.}
-proc cairo_ps_surface_dsc_begin_page_setup*(surface: Pcairo_surface_t){.cdecl, importc,
+proc cairo_ps_surface_dsc_begin_page_setup*(surface: PCairoSurface){.cdecl, importc,
     dynlib: LIB_CAIRO.}
   #* SVG functions
 proc cairo_svg_surface_create*(filename: cstring,
-                               width_in_points, height_in_points: float64): Pcairo_surface_t{.
+                               width_in_points, height_in_points: float64): PCairoSurface{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_svg_surface_create_for_stream*(write_func: cairo_write_func_t,
-    closure: Pointer, width_in_points, height_in_points: float64): Pcairo_surface_t{.
+proc cairo_svg_surface_create_for_stream*(write_func: TCairoWriteFunc,
+    closure: Pointer, width_in_points, height_in_points: float64): PCairoSurface{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_svg_surface_restrict_to_version*(surface: Pcairo_surface_t,
-    version: cairo_svg_version_t){.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_svg_surface_restrict_to_version*(surface: PCairoSurface,
+    version: TCairoSvgVersion){.cdecl, importc, dynlib: LIB_CAIRO.}
   #todo: see how translate this
-  #procedure cairo_svg_get_versions(cairo_svg_version_t const	**versions,
+  #procedure cairo_svg_get_versions(TCairoSvgVersion const	**versions,
   #                        int                      	 *num_versions);
-proc cairo_svg_version_to_string*(version: cairo_svg_version_t): cstring{.cdecl, importc,
+proc cairo_svg_version_to_string*(version: TCairoSvgVersion): cstring{.cdecl, importc,
     dynlib: LIB_CAIRO.}
   #* Functions to be used while debugging (not intended for use in production code)
 proc cairo_debug_reset_static_data*(){.cdecl, importc, dynlib: LIB_CAIRO.}
@@ -693,6 +693,6 @@ proc cairo_debug_reset_static_data*(){.cdecl, importc, dynlib: LIB_CAIRO.}
 proc cairo_version(major, minor, micro: var int32) =
   var version: int32
   version = cairo_version()
-  major = version div 10000
-  minor = (version mod (major * 10000)) div 100
-  micro = (version mod ((major * 10000) + (minor * 100)))
+  major = version div 10000'i32
+  minor = (version mod (major * 10000'i32)) div 100'i32
+  micro = (version mod ((major * 10000'i32) + (minor * 100'i32)))
diff --git a/lib/base/cairo/cairoft.nim b/lib/base/cairo/cairoft.nim
index c564d1afa..2418aa922 100644
--- a/lib/base/cairo/cairoft.nim
+++ b/lib/base/cairo/cairoft.nim
@@ -4,7 +4,7 @@
 # updated to version 1.4 by Luiz Américo Pereira Câmara 2007
 #
 
-import  Cairo, freetypeh
+import cairo, freetypeh
 
 #todo: properly define FcPattern:
 #It will require translate FontConfig header
@@ -20,17 +20,17 @@ import  Cairo, freetypeh
 
 type 
   FcPattern* = Pointer
-  PFcPattern* = ref FcPattern
+  PFcPattern* = ptr FcPattern
 
-proc cairo_ft_font_face_create_for_pattern*(pattern: PFcPattern): Pcairo_font_face_t{.
+proc cairo_ft_font_face_create_for_pattern*(pattern: PFcPattern): PCairoFontFace{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_ft_font_options_substitute*(options: Pcairo_font_options_t, 
+proc cairo_ft_font_options_substitute*(options: PCairoFontOptions, 
                                        pattern: PFcPattern){.cdecl, importc, 
     dynlib: LIB_CAIRO.}
 proc cairo_ft_font_face_create_for_ft_face*(face: TFT_Face, 
-       load_flags: int32): Pcairo_font_face_t {.cdecl, importc, dynlib: LIB_CAIRO.}
+       load_flags: int32): PCairoFontFace {.cdecl, importc, dynlib: LIB_CAIRO.}
 proc cairo_ft_scaled_font_lock_face*(
-  scaled_font: Pcairo_scaled_font_t): TFT_Face{.cdecl, importc, dynlib: LIB_CAIRO.}
+  scaled_font: PCairoScaledFont): TFT_Face{.cdecl, importc, dynlib: LIB_CAIRO.}
 proc cairo_ft_scaled_font_unlock_face*(
-  scaled_font: Pcairo_scaled_font_t){.cdecl, importc, dynlib: LIB_CAIRO.}
+  scaled_font: PCairoScaledFont){.cdecl, importc, dynlib: LIB_CAIRO.}
 
diff --git a/lib/base/cairo/cairowin32.nim b/lib/base/cairo/cairowin32.nim
index cbd1a6d4c..5d07c2611 100644
--- a/lib/base/cairo/cairowin32.nim
+++ b/lib/base/cairo/cairowin32.nim
@@ -7,30 +7,30 @@
 import 
   Cairo, windows
 
-proc cairo_win32_surface_create*(hdc: HDC): Pcairo_surface_t{.cdecl, importc, 
+proc cairo_win32_surface_create*(hdc: HDC): PCairoSurface{.cdecl, importc, 
     dynlib: LIB_CAIRO.}
-proc cairo_win32_surface_create_with_ddb*(hdc: HDC, format: cairo_format_t, 
-    width, height: int32): Pcairo_surface_t{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_win32_surface_create_with_dib*(format: cairo_format_t, 
-    width, height: int32): Pcairo_surface_t{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_win32_surface_get_dc*(surface: pcairo_surface_t): HDC{.cdecl, importc, 
+proc cairo_win32_surface_create_with_ddb*(hdc: HDC, format: TCairoFormat, 
+    width, height: int32): PCairoSurface{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_win32_surface_create_with_dib*(format: TCairoFormat, 
+    width, height: int32): PCairoSurface{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_win32_surface_get_dc*(surface: PCairoSurface): HDC{.cdecl, importc, 
     dynlib: LIB_CAIRO.}
-proc cairo_win32_surface_get_image*(surface: pcairo_surface_t): Pcairo_surface_t{.
+proc cairo_win32_surface_get_image*(surface: PCairoSurface): PCairoSurface{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_win32_font_face_create_for_logfontw*(logfont: pLOGFONTW): Pcairo_font_face_t{.
+proc cairo_win32_font_face_create_for_logfontw*(logfont: pLOGFONTW): PCairoFontFace{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_win32_font_face_create_for_hfont*(font: HFONT): Pcairo_font_face_t{.
+proc cairo_win32_font_face_create_for_hfont*(font: HFONT): PCairoFontFace{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_win32_scaled_font_select_font*(scaled_font: pcairo_scaled_font_t, 
-    hdc: HDC): cairo_status_t{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_win32_scaled_font_done_font*(scaled_font: pcairo_scaled_font_t){.
+proc cairo_win32_scaled_font_select_font*(scaled_font: PCairoScaledFont, 
+    hdc: HDC): TCairoStatus{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_win32_scaled_font_done_font*(scaled_font: PCairoScaledFont){.
     cdecl, importc, dynlib: LIB_CAIRO.}
 proc cairo_win32_scaled_font_get_metrics_factor*(
-    scaled_font: pcairo_scaled_font_t): float64{.cdecl, importc, dynlib: LIB_CAIRO.}
+    scaled_font: PCairoScaledFont): float64{.cdecl, importc, dynlib: LIB_CAIRO.}
 proc cairo_win32_scaled_font_get_logical_to_device*(
-    scaled_font: pcairo_scaled_font_t, logical_to_device: pcairo_matrix_t){.
+    scaled_font: PCairoScaledFont, logical_to_device: PCairoMatrix){.
     cdecl, importc, dynlib: LIB_CAIRO.}
 proc cairo_win32_scaled_font_get_device_to_logical*(
-    scaled_font: pcairo_scaled_font_t, device_to_logical: pcairo_matrix_t){.
+    scaled_font: PCairoScaledFont, device_to_logical: PCairoMatrix){.
     cdecl, importc, dynlib: LIB_CAIRO.}
 # implementation
diff --git a/lib/base/cairo/cairoxlib.nim b/lib/base/cairo/cairoxlib.nim
index 61a9fb283..dfe44eb87 100644
--- a/lib/base/cairo/cairoxlib.nim
+++ b/lib/base/cairo/cairoxlib.nim
@@ -9,32 +9,32 @@ import
   Cairo, x, xlib, xrender
 
 proc cairo_xlib_surface_create*(dpy: PDisplay, drawable: TDrawable, 
-                                visual: PVisual, width, height: int32): Pcairo_surface_t{.
+                                visual: PVisual, width, height: int32): PCairoSurface{.
     cdecl, importc, dynlib: LIB_CAIRO.}
 proc cairo_xlib_surface_create_for_bitmap*(dpy: PDisplay, bitmap: TPixmap, 
-    screen: PScreen, width, height: int32): Pcairo_surface_t{.cdecl, importc, 
+    screen: PScreen, width, height: int32): PCairoSurface{.cdecl, importc, 
     dynlib: LIB_CAIRO.}
 proc cairo_xlib_surface_create_with_xrender_format*(dpy: PDisplay, 
     drawable: TDrawable, screen: PScreen, format: PXRenderPictFormat, 
-    width, height: int32): Pcairo_surface_t{.cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_xlib_surface_get_depth*(surface: Pcairo_surface_t): int32{.cdecl, importc, 
+    width, height: int32): PCairoSurface{.cdecl, importc, dynlib: LIB_CAIRO.}
+proc cairo_xlib_surface_get_depth*(surface: PCairoSurface): int32{.cdecl, importc, 
     dynlib: LIB_CAIRO.}
-proc cairo_xlib_surface_get_display*(surface: Pcairo_surface_t): PDisplay{.
+proc cairo_xlib_surface_get_display*(surface: PCairoSurface): PDisplay{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_xlib_surface_get_drawable*(surface: Pcairo_surface_t): TDrawable{.
+proc cairo_xlib_surface_get_drawable*(surface: PCairoSurface): TDrawable{.
     cdecl, importc, dynlib: LIB_CAIRO.}
-proc cairo_xlib_surface_get_height*(surface: Pcairo_surface_t): int32{.cdecl, importc, 
+proc cairo_xlib_surface_get_height*(surface: PCairoSurface): int32{.cdecl, importc, 
     dynlib: LIB_CAIRO.}
-proc cairo_xlib_surface_get_screen*(surface: Pcairo_surface_t): PScreen{.cdecl, importc, 
+proc cairo_xlib_surface_get_screen*(surface: PCairoSurface): PScreen{.cdecl, importc, 
     dynlib: LIB_CAIRO.}
-proc cairo_xlib_surface_get_visual*(surface: Pcairo_surface_t): PVisual{.cdecl, importc, 
+proc cairo_xlib_surface_get_visual*(surface: PCairoSurface): PVisual{.cdecl, importc, 
     dynlib: LIB_CAIRO.}
-proc cairo_xlib_surface_get_width*(surface: Pcairo_surface_t): int32{.cdecl, importc, 
+proc cairo_xlib_surface_get_width*(surface: PCairoSurface): int32{.cdecl, importc, 
     dynlib: LIB_CAIRO.}
-proc cairo_xlib_surface_set_size*(surface: Pcairo_surface_t, 
+proc cairo_xlib_surface_set_size*(surface: PCairoSurface, 
                                   width, height: int32){.cdecl, importc, 
     dynlib: LIB_CAIRO.}
-proc cairo_xlib_surface_set_drawable*(surface: Pcairo_surface_t, 
+proc cairo_xlib_surface_set_drawable*(surface: PCairoSurface, 
                                       drawable: TDrawable, width, height: int32){.
     cdecl, importc, dynlib: LIB_CAIRO.}
 # implementation
diff --git a/lib/base/dialogs.nim b/lib/base/dialogs.nim
index cd9c7c6b8..144283a69 100644
--- a/lib/base/dialogs.nim
+++ b/lib/base/dialogs.nim
@@ -90,7 +90,7 @@ proc ChooseFileToOpen*(window: PWindow, root: string = ""): string =
                 GTK_STOCK_OPEN, GTK_RESPONSE_OK, nil))
     if root.len > 0:
       discard gtk_file_chooser_set_current_folder(chooser, root)
-    if gtk_dialog_run(chooser) == GTK_RESPONSE_OK:
+    if gtk_dialog_run(chooser) == cint(GTK_RESPONSE_OK):
       var x = gtk_file_chooser_get_filename(chooser)
       result = $x
       g_free(x)
@@ -99,7 +99,7 @@ proc ChooseFileToOpen*(window: PWindow, root: string = ""): string =
     gtk_widget_destroy(chooser)
 
 proc ChooseFilesToOpen*(window: PWindow, root: string = ""): seq[string] =
-  ## Opens a dialog that requests filenames from the user. Returns []
+  ## Opens a dialog that requests filenames from the user. Returns ``@[]``
   ## if the user closed the dialog without selecting a file. On Windows,
   ## the native dialog is used, else the GTK dialog is used.
   when defined(Windows):
@@ -114,7 +114,7 @@ proc ChooseFilesToOpen*(window: PWindow, root: string = ""): seq[string] =
     opf.lpstrFile = buf
     opf.nMaxFile = sizeof(buf)
     var res = GetOpenFileName(addr(opf))
-    result = []
+    result = @[]
     if res != 0:
       # parsing the result is horrible:
       var
@@ -145,8 +145,8 @@ proc ChooseFilesToOpen*(window: PWindow, root: string = ""): seq[string] =
     if root.len > 0:
       discard gtk_file_chooser_set_current_folder(chooser, root)
     gtk_file_chooser_set_select_multiple(chooser, true)
-    result = []
-    if gtk_dialog_run(chooser) == GTK_RESPONSE_OK:
+    result = @[]
+    if gtk_dialog_run(chooser) == cint(GTK_RESPONSE_OK):
       var L = gtk_file_chooser_get_filenames(chooser)
       var it = L
       while it != nil:
@@ -187,7 +187,7 @@ proc ChooseFileToSave*(window: PWindow, root: string = ""): string =
     if root.len > 0:
       discard gtk_file_chooser_set_current_folder(chooser, root)
     gtk_file_chooser_set_do_overwrite_confirmation(chooser, true)
-    if gtk_dialog_run(chooser) == GTK_RESPONSE_OK:
+    if gtk_dialog_run(chooser) == cint(GTK_RESPONSE_OK):
       var x = gtk_file_chooser_get_filename(chooser)
       result = $x
       g_free(x)
@@ -224,7 +224,7 @@ proc ChooseDir*(window: PWindow, root: string = ""): string =
                 GTK_STOCK_OPEN, GTK_RESPONSE_OK, nil))
     if root.len > 0:
       discard gtk_file_chooser_set_current_folder(chooser, root)
-    if gtk_dialog_run(chooser) == GTK_RESPONSE_OK:
+    if gtk_dialog_run(chooser) == cint(GTK_RESPONSE_OK):
       var x = gtk_file_chooser_get_filename(chooser)
       result = $x
       g_free(x)
diff --git a/lib/base/gtk/atk.nim b/lib/base/gtk/atk.nim
index 96fde8af6..84017bf03 100644
--- a/lib/base/gtk/atk.nim
+++ b/lib/base/gtk/atk.nim
@@ -2,7 +2,6 @@ import
   glib2
 
 when defined(windows):
-  {.define: atkwin.}
   const
     atklib = "libatk-1.0-0.dll"
 else:
diff --git a/lib/base/gtk/gdk2.nim b/lib/base/gtk/gdk2.nim
index 621a64bca..497f5619f 100644
--- a/lib/base/gtk/gdk2.nim
+++ b/lib/base/gtk/gdk2.nim
@@ -1,13 +1,12 @@
-import 
+import
   glib2, gdk2pixbuf, pango
 
-when defined(win32): 
-  {.define: GDK_WINDOWING_WIN32.}
-  const 
+when defined(win32):
+  const
     gdklib = "libgdk-win32-2.0-0.dll"
     GDK_HAVE_WCHAR_H = 1
     GDK_HAVE_WCTYPE_H = 1
-elif defined(darwin): 
+elif defined(darwin):
   #    linklib gtk-x11-2.0
   #    linklib gdk-x11-2.0
   #    linklib pango-1.0.0
@@ -15,16 +14,16 @@ elif defined(darwin):
   #    linklib gobject-2.0.0
   #    linklib gdk_pixbuf-2.0.0
   #    linklib atk-1.0.0
-  const 
+  const
     gdklib = "gdk-x11-2.0"
-else: 
-  const 
+else:
+  const
     gdklib = "libgdk-x11-2.0.so"
-const 
+const
   NUMPTSTOBUFFER* = 200
   GDK_MAX_TIMECOORD_AXES* = 128
 
-type 
+type
   PGdkDeviceClass* = ptr TGdkDeviceClass
   TGdkDeviceClass* = object of TGObjectClass
 
@@ -32,7 +31,7 @@ type
   TGdkVisualClass* = object of TGObjectClass
 
   PGdkColor* = ptr TGdkColor
-  TGdkColor* {.final.} = object 
+  TGdkColor* {.final.} = object
     pixel*: guint32
     red*: guint16
     green*: guint16
@@ -49,37 +48,37 @@ type
   PGdkBitmap* = ptr TGdkBitmap
   TGdkBitmap* = TGdkDrawable
   PGdkFontType* = ptr TGdkFontType
-  TGdkFontType* = enum 
+  TGdkFontType* = enum
     GDK_FONT_FONT, GDK_FONT_FONTSET
   PGdkFont* = ptr TGdkFont
-  TGdkFont* {.final.} = object 
+  TGdkFont* {.final.} = object
     `type`*: TGdkFontType
     ascent*: gint
     descent*: gint
 
   PGdkFunction* = ptr TGdkFunction
-  TGdkFunction* = enum 
-    GDK_COPY, GDK_INVERT, GDK_XOR, GDK_CLEAR, GDK_AND, GDK_AND_REVERSE, 
-    GDK_AND_INVERT, GDK_NOOP, GDK_OR, GDK_EQUIV, GDK_OR_REVERSE, 
+  TGdkFunction* = enum
+    GDK_COPY, GDK_INVERT, GDK_XOR, GDK_CLEAR, GDK_AND, GDK_AND_REVERSE,
+    GDK_AND_INVERT, GDK_NOOP, GDK_OR, GDK_EQUIV, GDK_OR_REVERSE,
     GDK_COPY_INVERT, GDK_OR_INVERT, GDK_NAND, GDK_NOR, GDK_SET
   PGdkCapStyle* = ptr TGdkCapStyle
-  TGdkCapStyle* = enum 
+  TGdkCapStyle* = enum
     GDK_CAP_NOT_LAST, GDK_CAP_BUTT, GDK_CAP_ROUND, GDK_CAP_PROJECTING
   PGdkFill* = ptr TGdkFill
-  TGdkFill* = enum 
+  TGdkFill* = enum
     GDK_SOLID, GDK_TILED, GDK_STIPPLED, GDK_OPAQUE_STIPPLED
   PGdkJoinStyle* = ptr TGdkJoinStyle
-  TGdkJoinStyle* = enum 
+  TGdkJoinStyle* = enum
     GDK_JOIN_MITER, GDK_JOIN_ROUND, GDK_JOIN_BEVEL
   PGdkLineStyle* = ptr TGdkLineStyle
-  TGdkLineStyle* = enum 
+  TGdkLineStyle* = enum
     GDK_LINE_SOLID, GDK_LINE_ON_OFF_DASH, GDK_LINE_DOUBLE_DASH
   PGdkSubwindowMode* = ptr TGdkSubwindowMode
   TGdkSubwindowMode* = int
   PGdkGCValuesMask* = ptr TGdkGCValuesMask
   TGdkGCValuesMask* = int32
   PGdkGCValues* = ptr TGdkGCValues
-  TGdkGCValues* {.final.} = object 
+  TGdkGCValues* {.final.} = object
     foreground*: TGdkColor
     background*: TGdkColor
     font*: PGdkFont
@@ -108,14 +107,14 @@ type
     colormap*: PGdkColormap
 
   PGdkImageType* = ptr TGdkImageType
-  TGdkImageType* = enum 
+  TGdkImageType* = enum
     GDK_IMAGE_NORMAL, GDK_IMAGE_SHARED, GDK_IMAGE_FASTEST
   PGdkImage* = ptr TGdkImage
   PGdkDevice* = ptr TGdkDevice
   PGdkTimeCoord* = ptr TGdkTimeCoord
   PPGdkTimeCoord* = ptr PGdkTimeCoord
   PGdkRgbDither* = ptr TGdkRgbDither
-  TGdkRgbDither* = enum 
+  TGdkRgbDither* = enum
     GDK_RGB_DITHER_NONE, GDK_RGB_DITHER_NORMAL, GDK_RGB_DITHER_MAX
   PGdkDisplay* = ptr TGdkDisplay
   PGdkScreen* = ptr TGdkScreen
@@ -125,7 +124,7 @@ type
   TGdkInputCondition* = int32
   PGdkStatus* = ptr TGdkStatus
   TGdkStatus* = int32
-  TGdkPoint* {.final.} = object 
+  TGdkPoint* {.final.} = object
     x*: gint
     y*: gint
 
@@ -135,14 +134,14 @@ type
   PGdkWChar* = ptr TGdkWChar
   TGdkWChar* = guint32
   PGdkSegment* = ptr TGdkSegment
-  TGdkSegment* {.final.} = object 
+  TGdkSegment* {.final.} = object
     x1*: gint
     y1*: gint
     x2*: gint
     y2*: gint
 
   PGdkRectangle* = ptr TGdkRectangle
-  TGdkRectangle* {.final.} = object 
+  TGdkRectangle* {.final.} = object
     x*: gint
     y*: gint
     width*: gint
@@ -151,13 +150,13 @@ type
   PGdkAtom* = ptr TGdkAtom
   TGdkAtom* = gulong
   PGdkByteOrder* = ptr TGdkByteOrder
-  TGdkByteOrder* = enum 
+  TGdkByteOrder* = enum
     GDK_LSB_FIRST, GDK_MSB_FIRST
   PGdkModifierType* = ptr TGdkModifierType
   TGdkModifierType* = gint
   PGdkVisualType* = ptr TGdkVisualType
-  TGdkVisualType* = enum 
-    GDK_VISUAL_STATIC_GRAY, GDK_VISUAL_GRAYSCALE, GDK_VISUAL_STATIC_COLOR, 
+  TGdkVisualType* = enum
+    GDK_VISUAL_STATIC_GRAY, GDK_VISUAL_GRAYSCALE, GDK_VISUAL_STATIC_COLOR,
     GDK_VISUAL_PSEUDO_COLOR, GDK_VISUAL_TRUE_COLOR, GDK_VISUAL_DIRECT_COLOR
   PGdkVisual* = ptr TGdkVisual
   TGdkVisual* = object of TGObject
@@ -190,16 +189,16 @@ type
   PGdkCursorType* = ptr TGdkCursorType
   TGdkCursorType* = gint
   PGdkCursor* = ptr TGdkCursor
-  TGdkCursor* {.final.} = object 
+  TGdkCursor* {.final.} = object
     `type`*: TGdkCursorType
     ref_count*: guint
 
   PGdkDragAction* = ptr TGdkDragAction
   TGdkDragAction* = int32
   PGdkDragProtocol* = ptr TGdkDragProtocol
-  TGdkDragProtocol* = enum 
-    GDK_DRAG_PROTO_MOTIF, GDK_DRAG_PROTO_XDND, GDK_DRAG_PROTO_ROOTWIN, 
-    GDK_DRAG_PROTO_NONE, GDK_DRAG_PROTO_WIN32_DROPFILES, GDK_DRAG_PROTO_OLE2, 
+  TGdkDragProtocol* = enum
+    GDK_DRAG_PROTO_MOTIF, GDK_DRAG_PROTO_XDND, GDK_DRAG_PROTO_ROOTWIN,
+    GDK_DRAG_PROTO_NONE, GDK_DRAG_PROTO_WIN32_DROPFILES, GDK_DRAG_PROTO_OLE2,
     GDK_DRAG_PROTO_LOCAL
   PGdkDragContext* = ptr TGdkDragContext
   TGdkDragContext* = object of TGObject
@@ -220,46 +219,46 @@ type
   PGdkRegionBox* = ptr TGdkRegionBox
   TGdkRegionBox* = TGdkSegment
   PGdkRegion* = ptr TGdkRegion
-  TGdkRegion* {.final.} = object 
+  TGdkRegion* {.final.} = object
     size*: int32
     numRects*: int32
     rects*: PGdkRegionBox
     extents*: TGdkRegionBox
 
   PPOINTBLOCK* = ptr TPOINTBLOCK
-  TPOINTBLOCK* {.final.} = object 
+  TPOINTBLOCK* {.final.} = object
     pts*: array[0..(NUMPTSTOBUFFER) - 1, TGdkPoint]
     next*: PPOINTBLOCK
 
   PGdkDrawableClass* = ptr TGdkDrawableClass
   TGdkDrawableClass* = object of TGObjectClass
-    create_gc*: proc (drawable: PGdkDrawable, values: PGdkGCValues, 
+    create_gc*: proc (drawable: PGdkDrawable, values: PGdkGCValues,
                       mask: TGdkGCValuesMask): PGdkGC{.cdecl.}
-    draw_rectangle*: proc (drawable: PGdkDrawable, gc: PGdkGC, filled: gint, 
+    draw_rectangle*: proc (drawable: PGdkDrawable, gc: PGdkGC, filled: gint,
                            x: gint, y: gint, width: gint, height: gint){.cdecl.}
-    draw_arc*: proc (drawable: PGdkDrawable, gc: PGdkGC, filled: gint, x: gint, 
-                     y: gint, width: gint, height: gint, angle1: gint, 
+    draw_arc*: proc (drawable: PGdkDrawable, gc: PGdkGC, filled: gint, x: gint,
+                     y: gint, width: gint, height: gint, angle1: gint,
                      angle2: gint){.cdecl.}
-    draw_polygon*: proc (drawable: PGdkDrawable, gc: PGdkGC, filled: gint, 
+    draw_polygon*: proc (drawable: PGdkDrawable, gc: PGdkGC, filled: gint,
                          points: PGdkPoint, npoints: gint){.cdecl.}
-    draw_text*: proc (drawable: PGdkDrawable, font: PGdkFont, gc: PGdkGC, 
+    draw_text*: proc (drawable: PGdkDrawable, font: PGdkFont, gc: PGdkGC,
                       x: gint, y: gint, text: cstring, text_length: gint){.cdecl.}
-    draw_text_wc*: proc (drawable: PGdkDrawable, font: PGdkFont, gc: PGdkGC, 
+    draw_text_wc*: proc (drawable: PGdkDrawable, font: PGdkFont, gc: PGdkGC,
                          x: gint, y: gint, text: PGdkWChar, text_length: gint){.
         cdecl.}
-    draw_drawable*: proc (drawable: PGdkDrawable, gc: PGdkGC, src: PGdkDrawable, 
-                          xsrc: gint, ysrc: gint, xdest: gint, ydest: gint, 
+    draw_drawable*: proc (drawable: PGdkDrawable, gc: PGdkGC, src: PGdkDrawable,
+                          xsrc: gint, ysrc: gint, xdest: gint, ydest: gint,
                           width: gint, height: gint){.cdecl.}
-    draw_points*: proc (drawable: PGdkDrawable, gc: PGdkGC, points: PGdkPoint, 
+    draw_points*: proc (drawable: PGdkDrawable, gc: PGdkGC, points: PGdkPoint,
                         npoints: gint){.cdecl.}
-    draw_segments*: proc (drawable: PGdkDrawable, gc: PGdkGC, segs: PGdkSegment, 
+    draw_segments*: proc (drawable: PGdkDrawable, gc: PGdkGC, segs: PGdkSegment,
                           nsegs: gint){.cdecl.}
-    draw_lines*: proc (drawable: PGdkDrawable, gc: PGdkGC, points: PGdkPoint, 
+    draw_lines*: proc (drawable: PGdkDrawable, gc: PGdkGC, points: PGdkPoint,
                        npoints: gint){.cdecl.}
-    draw_glyphs*: proc (drawable: PGdkDrawable, gc: PGdkGC, font: PPangoFont, 
+    draw_glyphs*: proc (drawable: PGdkDrawable, gc: PGdkGC, font: PPangoFont,
                         x: gint, y: gint, glyphs: PPangoGlyphString){.cdecl.}
-    draw_image*: proc (drawable: PGdkDrawable, gc: PGdkGC, image: PGdkImage, 
-                       xsrc: gint, ysrc: gint, xdest: gint, ydest: gint, 
+    draw_image*: proc (drawable: PGdkDrawable, gc: PGdkGC, image: PGdkImage,
+                       xsrc: gint, ysrc: gint, xdest: gint, ydest: gint,
                        width: gint, height: gint){.cdecl.}
     get_depth*: proc (drawable: PGdkDrawable): gint{.cdecl.}
     get_size*: proc (drawable: PGdkDrawable, width: Pgint, height: Pgint){.cdecl.}
@@ -267,22 +266,22 @@ type
     get_colormap*: proc (drawable: PGdkDrawable): PGdkColormap{.cdecl.}
     get_visual*: proc (drawable: PGdkDrawable): PGdkVisual{.cdecl.}
     get_screen*: proc (drawable: PGdkDrawable): PGdkScreen{.cdecl.}
-    get_image*: proc (drawable: PGdkDrawable, x: gint, y: gint, width: gint, 
+    get_image*: proc (drawable: PGdkDrawable, x: gint, y: gint, width: gint,
                       height: gint): PGdkImage{.cdecl.}
     get_clip_region*: proc (drawable: PGdkDrawable): PGdkRegion{.cdecl.}
     get_visible_region*: proc (drawable: PGdkDrawable): PGdkRegion{.cdecl.}
-    get_composite_drawable*: proc (drawable: PGdkDrawable, x: gint, y: gint, 
-                                   width: gint, height: gint, 
-                                   composite_x_offset: Pgint, 
+    get_composite_drawable*: proc (drawable: PGdkDrawable, x: gint, y: gint,
+                                   width: gint, height: gint,
+                                   composite_x_offset: Pgint,
                                    composite_y_offset: Pgint): PGdkDrawable{.
         cdecl.}
-    `draw_pixbuf`*: proc (drawable: PGdkDrawable, gc: PGdkGC, 
-                          pixbuf: PGdkPixbuf, src_x: gint, src_y: gint, 
-                          dest_x: gint, dest_y: gint, width: gint, height: gint, 
+    `draw_pixbuf`*: proc (drawable: PGdkDrawable, gc: PGdkGC,
+                          pixbuf: PGdkPixbuf, src_x: gint, src_y: gint,
+                          dest_x: gint, dest_y: gint, width: gint, height: gint,
                           dither: TGdkRgbDither, x_dither: gint, y_dither: gint){.
         cdecl.}
-    `copy_to_image`*: proc (drawable: PGdkDrawable, image: PGdkImage, 
-                            src_x: gint, src_y: gint, dest_x: gint, 
+    `copy_to_image`*: proc (drawable: PGdkDrawable, image: PGdkImage,
+                            src_x: gint, src_y: gint, dest_x: gint,
                             dest_y: gint, width: gint, height: gint): PGdkImage{.
         cdecl.}
     `gdk_reserved1`: proc (){.cdecl.}
@@ -306,7 +305,7 @@ type
   PGdkXEvent* = ptr TGdkXEvent
   TGdkXEvent* = proc ()
   PGdkFilterReturn* = ptr TGdkFilterReturn
-  TGdkFilterReturn* = enum 
+  TGdkFilterReturn* = enum
     GDK_FILTER_CONTINUE, GDK_FILTER_TRANSLATE, GDK_FILTER_REMOVE
   TGdkFilterFunc* = proc (xevent: PGdkXEvent, event: PGdkEvent, data: gpointer): TGdkFilterReturn{.
       cdecl.}
@@ -315,34 +314,34 @@ type
   PGdkEventMask* = ptr TGdkEventMask
   TGdkEventMask* = gint32
   PGdkVisibilityState* = ptr TGdkVisibilityState
-  TGdkVisibilityState* = enum 
-    GDK_VISIBILITY_UNOBSCURED, GDK_VISIBILITY_PARTIAL, 
+  TGdkVisibilityState* = enum
+    GDK_VISIBILITY_UNOBSCURED, GDK_VISIBILITY_PARTIAL,
     GDK_VISIBILITY_FULLY_OBSCURED
   PGdkScrollDirection* = ptr TGdkScrollDirection
-  TGdkScrollDirection* = enum 
+  TGdkScrollDirection* = enum
     GDK_SCROLL_UP, GDK_SCROLL_DOWN, GDK_SCROLL_LEFT, GDK_SCROLL_RIGHT
   PGdkNotifyType* = ptr TGdkNotifyType
   TGdkNotifyType* = int
   PGdkCrossingMode* = ptr TGdkCrossingMode
-  TGdkCrossingMode* = enum 
+  TGdkCrossingMode* = enum
     GDK_CROSSING_NORMAL, GDK_CROSSING_GRAB, GDK_CROSSING_UNGRAB
   PGdkPropertyState* = ptr TGdkPropertyState
-  TGdkPropertyState* = enum 
+  TGdkPropertyState* = enum
     GDK_PROPERTY_NEW_VALUE, GDK_PROPERTY_STATE_DELETE
   PGdkWindowState* = ptr TGdkWindowState
   TGdkWindowState* = gint
   PGdkSettingAction* = ptr TGdkSettingAction
-  TGdkSettingAction* = enum 
-    GDK_SETTING_ACTION_NEW, GDK_SETTING_ACTION_CHANGED, 
+  TGdkSettingAction* = enum
+    GDK_SETTING_ACTION_NEW, GDK_SETTING_ACTION_CHANGED,
     GDK_SETTING_ACTION_DELETED
   PGdkEventAny* = ptr TGdkEventAny
-  TGdkEventAny* {.final.} = object 
+  TGdkEventAny* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
 
   PGdkEventExpose* = ptr TGdkEventExpose
-  TGdkEventExpose* {.final.} = object 
+  TGdkEventExpose* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
@@ -351,20 +350,20 @@ type
     count*: gint
 
   PGdkEventNoExpose* = ptr TGdkEventNoExpose
-  TGdkEventNoExpose* {.final.} = object 
+  TGdkEventNoExpose* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
 
   PGdkEventVisibility* = ptr TGdkEventVisibility
-  TGdkEventVisibility* {.final.} = object 
+  TGdkEventVisibility* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
     state*: TGdkVisibilityState
 
   PGdkEventMotion* = ptr TGdkEventMotion
-  TGdkEventMotion* {.final.} = object 
+  TGdkEventMotion* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
@@ -379,7 +378,7 @@ type
     y_root*: gdouble
 
   PGdkEventButton* = ptr TGdkEventButton
-  TGdkEventButton* {.final.} = object 
+  TGdkEventButton* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
@@ -394,7 +393,7 @@ type
     y_root*: gdouble
 
   PGdkEventScroll* = ptr TGdkEventScroll
-  TGdkEventScroll* {.final.} = object 
+  TGdkEventScroll* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
@@ -408,7 +407,7 @@ type
     y_root*: gdouble
 
   PGdkEventKey* = ptr TGdkEventKey
-  TGdkEventKey* {.final.} = object 
+  TGdkEventKey* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
@@ -421,7 +420,7 @@ type
     group*: guint8
 
   PGdkEventCrossing* = ptr TGdkEventCrossing
-  TGdkEventCrossing* {.final.} = object 
+  TGdkEventCrossing* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
@@ -437,14 +436,14 @@ type
     state*: guint
 
   PGdkEventFocus* = ptr TGdkEventFocus
-  TGdkEventFocus* {.final.} = object 
+  TGdkEventFocus* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
     `in`*: gint16
 
   PGdkEventConfigure* = ptr TGdkEventConfigure
-  TGdkEventConfigure* {.final.} = object 
+  TGdkEventConfigure* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
@@ -454,7 +453,7 @@ type
     height*: gint
 
   PGdkEventProperty* = ptr TGdkEventProperty
-  TGdkEventProperty* {.final.} = object 
+  TGdkEventProperty* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
@@ -464,7 +463,7 @@ type
 
   TGdkNativeWindow* = pointer
   PGdkEventSelection* = ptr TGdkEventSelection
-  TGdkEventSelection* {.final.} = object 
+  TGdkEventSelection* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
@@ -475,7 +474,7 @@ type
     requestor*: TGdkNativeWindow
 
   PGdkEventProximity* = ptr TGdkEventProximity
-  TGdkEventProximity* {.final.} = object 
+  TGdkEventProximity* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
@@ -483,11 +482,11 @@ type
     device*: PGdkDevice
 
   PmatDUMMY* = ptr TmatDUMMY
-  TmatDUMMY* {.final.} = object 
+  TmatDUMMY* {.final.} = object
     b*: array[0..19, char]
 
   PGdkEventClient* = ptr TGdkEventClient
-  TGdkEventClient* {.final.} = object 
+  TGdkEventClient* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
@@ -496,7 +495,7 @@ type
     b*: array[0..19, char]
 
   PGdkEventSetting* = ptr TGdkEventSetting
-  TGdkEventSetting* {.final.} = object 
+  TGdkEventSetting* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
@@ -504,7 +503,7 @@ type
     name*: cstring
 
   PGdkEventWindowState* = ptr TGdkEventWindowState
-  TGdkEventWindowState* {.final.} = object 
+  TGdkEventWindowState* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
@@ -512,7 +511,7 @@ type
     new_window_state*: TGdkWindowState
 
   PGdkEventDND* = ptr TGdkEventDND
-  TGdkEventDND* {.final.} = object 
+  TGdkEventDND* {.final.} = object
     `type`*: TGdkEventType
     window*: PGdkWindow
     send_event*: gint8
@@ -521,13 +520,13 @@ type
     x_root*: gshort
     y_root*: gshort
 
-  TGdkEvent* {.final.} = object 
+  TGdkEvent* {.final.} = object
     data*: array[0..255, char] # union of
                                # `type`: TGdkEventType
                                #  any: TGdkEventAny
-                               #  expose: TGdkEventExpose 
-                               #  no_expose: TGdkEventNoExpose 
-                               #  visibility: TGdkEventVisibility 
+                               #  expose: TGdkEventExpose
+                               #  no_expose: TGdkEventNoExpose
+                               #  visibility: TGdkEventVisibility
                                #  motion: TGdkEventMotion
                                #  button: TGdkEventButton
                                #  scroll: TGdkEventScroll
@@ -542,13 +541,13 @@ type
                                #  dnd: TGdkEventDND
                                #  window_state: TGdkEventWindowState
                                #  setting: TGdkEventSetting
-  
+
   PGdkGCClass* = ptr TGdkGCClass
   TGdkGCClass* = object of TGObjectClass
     get_values*: proc (gc: PGdkGC, values: PGdkGCValues){.cdecl.}
     set_values*: proc (gc: PGdkGC, values: PGdkGCValues, mask: TGdkGCValuesMask){.
         cdecl.}
-    set_dashes*: proc (gc: PGdkGC, dash_offset: gint, 
+    set_dashes*: proc (gc: PGdkGC, dash_offset: gint,
                        dash_list: openarray[gint8]){.cdecl.}
     `gdk_reserved1`*: proc (){.cdecl.}
     `gdk_reserved2`*: proc (){.cdecl.}
@@ -573,24 +572,24 @@ type
     windowing_data*: gpointer
 
   PGdkExtensionMode* = ptr TGdkExtensionMode
-  TGdkExtensionMode* = enum 
-    GDK_EXTENSION_EVENTS_NONE, GDK_EXTENSION_EVENTS_ALL, 
+  TGdkExtensionMode* = enum
+    GDK_EXTENSION_EVENTS_NONE, GDK_EXTENSION_EVENTS_ALL,
     GDK_EXTENSION_EVENTS_CURSOR
   PGdkInputSource* = ptr TGdkInputSource
-  TGdkInputSource* = enum 
+  TGdkInputSource* = enum
     GDK_SOURCE_MOUSE, GDK_SOURCE_PEN, GDK_SOURCE_ERASER, GDK_SOURCE_CURSOR
   PGdkInputMode* = ptr TGdkInputMode
-  TGdkInputMode* = enum 
+  TGdkInputMode* = enum
     GDK_MODE_DISABLED, GDK_MODE_SCREEN, GDK_MODE_WINDOW
   PGdkAxisUse* = ptr TGdkAxisUse
   TGdkAxisUse* = int32
   PGdkDeviceKey* = ptr TGdkDeviceKey
-  TGdkDeviceKey* {.final.} = object 
+  TGdkDeviceKey* {.final.} = object
     keyval*: guint
     modifiers*: TGdkModifierType
 
   PGdkDeviceAxis* = ptr TGdkDeviceAxis
-  TGdkDeviceAxis* {.final.} = object 
+  TGdkDeviceAxis* {.final.} = object
     use*: TGdkAxisUse
     min*: gdouble
     max*: gdouble
@@ -605,12 +604,12 @@ type
     num_keys*: gint
     keys*: PGdkDeviceKey
 
-  TGdkTimeCoord* {.final.} = object 
+  TGdkTimeCoord* {.final.} = object
     time*: guint32
     axes*: array[0..(GDK_MAX_TIMECOORD_AXES) - 1, gdouble]
 
   PGdkKeymapKey* = ptr TGdkKeymapKey
-  TGdkKeymapKey* {.final.} = object 
+  TGdkKeymapKey* {.final.} = object
     keycode*: guint
     group*: gint
     level*: gint
@@ -624,12 +623,12 @@ type
     direction_changed*: proc (keymap: PGdkKeymap){.cdecl.}
 
   PGdkPangoAttrStipple* = ptr TGdkPangoAttrStipple
-  TGdkPangoAttrStipple* {.final.} = object 
+  TGdkPangoAttrStipple* {.final.} = object
     attr*: TPangoAttribute
     stipple*: PGdkBitmap
 
   PGdkPangoAttrEmbossed* = ptr TGdkPangoAttrEmbossed
-  TGdkPangoAttrEmbossed* {.final.} = object 
+  TGdkPangoAttrEmbossed* {.final.} = object
     attr*: TPangoAttribute
     embossed*: gboolean
 
@@ -642,18 +641,18 @@ type
   TGdkPixmapObjectClass* = object of TGdkDrawableClass
 
   PGdkPropMode* = ptr TGdkPropMode
-  TGdkPropMode* = enum 
+  TGdkPropMode* = enum
     GDK_PROP_MODE_REPLACE, GDK_PROP_MODE_PREPEND, GDK_PROP_MODE_APPEND
   PGdkFillRule* = ptr TGdkFillRule
-  TGdkFillRule* = enum 
+  TGdkFillRule* = enum
     GDK_EVEN_ODD_RULE, GDK_WINDING_RULE
   PGdkOverlapType* = ptr TGdkOverlapType
-  TGdkOverlapType* = enum 
-    GDK_OVERLAP_RECTANGLE_IN, GDK_OVERLAP_RECTANGLE_OUT, 
+  TGdkOverlapType* = enum
+    GDK_OVERLAP_RECTANGLE_IN, GDK_OVERLAP_RECTANGLE_OUT,
     GDK_OVERLAP_RECTANGLE_PART
   TGdkSpanFunc* = proc (span: PGdkSpan, data: gpointer){.cdecl.}
   PGdkRgbCmap* = ptr TGdkRgbCmap
-  TGdkRgbCmap* {.final.} = object 
+  TGdkRgbCmap* {.final.} = object
     colors*: array[0..255, guint32]
     n_colors*: gint
     info_list*: PGSList
@@ -690,33 +689,33 @@ type
     get_window_at_pointer*: proc (screen: PGdkScreen, win_x: Pgint, win_y: Pgint): PGdkWindow{.
         cdecl.}
     get_n_monitors*: proc (screen: PGdkScreen): gint{.cdecl.}
-    get_monitor_geometry*: proc (screen: PGdkScreen, monitor_num: gint, 
+    get_monitor_geometry*: proc (screen: PGdkScreen, monitor_num: gint,
                                  dest: PGdkRectangle){.cdecl.}
 
   PGdkGrabStatus* = ptr TGdkGrabStatus
   TGdkGrabStatus* = int
-  TGdkInputFunction* = proc (data: gpointer, source: gint, 
+  TGdkInputFunction* = proc (data: gpointer, source: gint,
                              condition: TGdkInputCondition){.cdecl.}
   TGdkDestroyNotify* = proc (data: gpointer){.cdecl.}
-  TGdkSpan* {.final.} = object 
+  TGdkSpan* {.final.} = object
     x*: gint
     y*: gint
     width*: gint
 
   PGdkWindowClass* = ptr TGdkWindowClass
-  TGdkWindowClass* = enum 
+  TGdkWindowClass* = enum
     GDK_INPUT_OUTPUT, GDK_INPUT_ONLY
   PGdkWindowType* = ptr TGdkWindowType
-  TGdkWindowType* = enum 
-    GDK_WINDOW_ROOT, GDK_WINDOW_TOPLEVEL, GDK_WINDOW_CHILD, GDK_WINDOW_DIALOG, 
+  TGdkWindowType* = enum
+    GDK_WINDOW_ROOT, GDK_WINDOW_TOPLEVEL, GDK_WINDOW_CHILD, GDK_WINDOW_DIALOG,
     GDK_WINDOW_TEMP, GDK_WINDOW_FOREIGN
   PGdkWindowAttributesType* = ptr TGdkWindowAttributesType
   TGdkWindowAttributesType* = int32
   PGdkWindowHints* = ptr TGdkWindowHints
   TGdkWindowHints* = int32
   PGdkWindowTypeHint* = ptr TGdkWindowTypeHint
-  TGdkWindowTypeHint* = enum 
-    GDK_WINDOW_TYPE_HINT_NORMAL, GDK_WINDOW_TYPE_HINT_DIALOG, 
+  TGdkWindowTypeHint* = enum
+    GDK_WINDOW_TYPE_HINT_NORMAL, GDK_WINDOW_TYPE_HINT_DIALOG,
     GDK_WINDOW_TYPE_HINT_MENU, GDK_WINDOW_TYPE_HINT_TOOLBAR
   PGdkWMDecoration* = ptr TGdkWMDecoration
   TGdkWMDecoration* = int32
@@ -725,13 +724,13 @@ type
   PGdkGravity* = ptr TGdkGravity
   TGdkGravity* = int
   PGdkWindowEdge* = ptr TGdkWindowEdge
-  TGdkWindowEdge* = enum 
-    GDK_WINDOW_EDGE_NORTH_WEST, GDK_WINDOW_EDGE_NORTH, 
-    GDK_WINDOW_EDGE_NORTH_EAST, GDK_WINDOW_EDGE_WEST, GDK_WINDOW_EDGE_EAST, 
-    GDK_WINDOW_EDGE_SOUTH_WEST, GDK_WINDOW_EDGE_SOUTH, 
+  TGdkWindowEdge* = enum
+    GDK_WINDOW_EDGE_NORTH_WEST, GDK_WINDOW_EDGE_NORTH,
+    GDK_WINDOW_EDGE_NORTH_EAST, GDK_WINDOW_EDGE_WEST, GDK_WINDOW_EDGE_EAST,
+    GDK_WINDOW_EDGE_SOUTH_WEST, GDK_WINDOW_EDGE_SOUTH,
     GDK_WINDOW_EDGE_SOUTH_EAST
   PGdkWindowAttr* = ptr TGdkWindowAttr
-  TGdkWindowAttr* {.final.} = object 
+  TGdkWindowAttr* {.final.} = object
     title*: cstring
     event_mask*: gint
     x*: gint
@@ -748,7 +747,7 @@ type
     override_redirect*: gboolean
 
   PGdkGeometry* = ptr TGdkGeometry
-  TGdkGeometry* {.final.} = object 
+  TGdkGeometry* {.final.} = object
     min_width*: gint
     min_height*: gint
     max_width*: gint
@@ -762,8 +761,8 @@ type
     win_gravity*: TGdkGravity
 
   PGdkPointerHooks* = ptr TGdkPointerHooks
-  TGdkPointerHooks* {.final.} = object 
-    get_pointer*: proc (window: PGdkWindow, x: Pgint, y: Pgint, 
+  TGdkPointerHooks* {.final.} = object
+    get_pointer*: proc (window: PGdkWindow, x: Pgint, y: Pgint,
                         mask: PGdkModifierType): PGdkWindow{.cdecl.}
     window_at_pointer*: proc (screen: PGdkScreen, win_x: Pgint, win_y: Pgint): PGdkWindow{.
         cdecl.}
@@ -793,7 +792,7 @@ type
   PGdkWindowObjectClass* = ptr TGdkWindowObjectClass
   TGdkWindowObjectClass* = object of TGdkDrawableClass
 
-  gdk_window_invalidate_maybe_recurse_child_func* = proc (para1: PGdkWindow, 
+  gdk_window_invalidate_maybe_recurse_child_func* = proc (para1: PGdkWindow,
       para2: gpointer): gboolean
 
 proc GDK_TYPE_COLORMAP*(): GType
@@ -803,38 +802,38 @@ proc GDK_IS_COLORMAP*(anObject: pointer): bool
 proc GDK_IS_COLORMAP_CLASS*(klass: pointer): bool
 proc GDK_COLORMAP_GET_CLASS*(obj: pointer): PGdkColormapClass
 proc GDK_TYPE_COLOR*(): GType
-proc gdk_colormap_get_type*(): GType{.cdecl, dynlib: gdklib, 
+proc gdk_colormap_get_type*(): GType{.cdecl, dynlib: gdklib,
                                       importc: "gdk_colormap_get_type".}
 proc gdk_colormap_new*(visual: PGdkVisual, allocate: gboolean): PGdkColormap{.
     cdecl, dynlib: gdklib, importc: "gdk_colormap_new".}
-proc gdk_colormap_alloc_colors*(colormap: PGdkColormap, colors: PGdkColor, 
-                                ncolors: gint, writeable: gboolean, 
+proc gdk_colormap_alloc_colors*(colormap: PGdkColormap, colors: PGdkColor,
+                                ncolors: gint, writeable: gboolean,
                                 best_match: gboolean, success: Pgboolean): gint{.
     cdecl, dynlib: gdklib, importc: "gdk_colormap_alloc_colors".}
-proc gdk_colormap_alloc_color*(colormap: PGdkColormap, color: PGdkColor, 
+proc gdk_colormap_alloc_color*(colormap: PGdkColormap, color: PGdkColor,
                                writeable: gboolean, best_match: gboolean): gboolean{.
     cdecl, dynlib: gdklib, importc: "gdk_colormap_alloc_color".}
-proc gdk_colormap_free_colors*(colormap: PGdkColormap, colors: PGdkColor, 
-                               ncolors: gint){.cdecl, dynlib: gdklib, 
+proc gdk_colormap_free_colors*(colormap: PGdkColormap, colors: PGdkColor,
+                               ncolors: gint){.cdecl, dynlib: gdklib,
     importc: "gdk_colormap_free_colors".}
-proc gdk_colormap_query_color*(colormap: PGdkColormap, pixel: gulong, 
-                               result: PGdkColor){.cdecl, dynlib: gdklib, 
+proc gdk_colormap_query_color*(colormap: PGdkColormap, pixel: gulong,
+                               result: PGdkColor){.cdecl, dynlib: gdklib,
     importc: "gdk_colormap_query_color".}
-proc gdk_colormap_get_visual*(colormap: PGdkColormap): PGdkVisual{.cdecl, 
+proc gdk_colormap_get_visual*(colormap: PGdkColormap): PGdkVisual{.cdecl,
     dynlib: gdklib, importc: "gdk_colormap_get_visual".}
-proc gdk_color_copy*(color: PGdkColor): PGdkColor{.cdecl, dynlib: gdklib, 
+proc gdk_color_copy*(color: PGdkColor): PGdkColor{.cdecl, dynlib: gdklib,
     importc: "gdk_color_copy".}
-proc gdk_color_free*(color: PGdkColor){.cdecl, dynlib: gdklib, 
+proc gdk_color_free*(color: PGdkColor){.cdecl, dynlib: gdklib,
                                         importc: "gdk_color_free".}
-proc gdk_color_parse*(spec: cstring, color: PGdkColor): gint{.cdecl, 
+proc gdk_color_parse*(spec: cstring, color: PGdkColor): gint{.cdecl,
     dynlib: gdklib, importc: "gdk_color_parse".}
-proc gdk_color_hash*(colora: PGdkColor): guint{.cdecl, dynlib: gdklib, 
+proc gdk_color_hash*(colora: PGdkColor): guint{.cdecl, dynlib: gdklib,
     importc: "gdk_color_hash".}
-proc gdk_color_equal*(colora: PGdkColor, colorb: PGdkColor): gboolean{.cdecl, 
+proc gdk_color_equal*(colora: PGdkColor, colorb: PGdkColor): gboolean{.cdecl,
     dynlib: gdklib, importc: "gdk_color_equal".}
-proc gdk_color_get_type*(): GType{.cdecl, dynlib: gdklib, 
+proc gdk_color_get_type*(): GType{.cdecl, dynlib: gdklib,
                                    importc: "gdk_color_get_type".}
-const 
+const
   GDK_CURSOR_IS_PIXMAP* = - (1)
   GDK_X_CURSOR* = 0
   GDK_ARROW* = 2
@@ -916,20 +915,20 @@ const
   GDK_LAST_CURSOR* = GDK_XTERM + 1
 
 proc GDK_TYPE_CURSOR*(): GType
-proc gdk_cursor_get_type*(): GType{.cdecl, dynlib: gdklib, 
+proc gdk_cursor_get_type*(): GType{.cdecl, dynlib: gdklib,
                                     importc: "gdk_cursor_get_type".}
 proc gdk_cursor_new_for_screen*(screen: PGdkScreen, cursor_type: TGdkCursorType): PGdkCursor{.
     cdecl, dynlib: gdklib, importc: "gdk_cursor_new_for_screen".}
-proc gdk_cursor_new_from_pixmap*(source: PGdkPixmap, mask: PGdkPixmap, 
+proc gdk_cursor_new_from_pixmap*(source: PGdkPixmap, mask: PGdkPixmap,
                                  fg: PGdkColor, bg: PGdkColor, x: gint, y: gint): PGdkCursor{.
     cdecl, dynlib: gdklib, importc: "gdk_cursor_new_from_pixmap".}
-proc gdk_cursor_get_screen*(cursor: PGdkCursor): PGdkScreen{.cdecl, 
+proc gdk_cursor_get_screen*(cursor: PGdkCursor): PGdkScreen{.cdecl,
     dynlib: gdklib, importc: "gdk_cursor_get_screen".}
-proc gdk_cursor_ref*(cursor: PGdkCursor): PGdkCursor{.cdecl, dynlib: gdklib, 
+proc gdk_cursor_ref*(cursor: PGdkCursor): PGdkCursor{.cdecl, dynlib: gdklib,
     importc: "gdk_cursor_ref".}
-proc gdk_cursor_unref*(cursor: PGdkCursor){.cdecl, dynlib: gdklib, 
+proc gdk_cursor_unref*(cursor: PGdkCursor){.cdecl, dynlib: gdklib,
     importc: "gdk_cursor_unref".}
-const 
+const
   GDK_ACTION_DEFAULT* = 1 shl 0
   GDK_ACTION_COPY* = 1 shl 1
   GDK_ACTION_MOVE* = 1 shl 2
@@ -943,45 +942,45 @@ proc GDK_DRAG_CONTEXT_CLASS*(klass: Pointer): PGdkDragContextClass
 proc GDK_IS_DRAG_CONTEXT*(anObject: Pointer): bool
 proc GDK_IS_DRAG_CONTEXT_CLASS*(klass: Pointer): bool
 proc GDK_DRAG_CONTEXT_GET_CLASS*(obj: Pointer): PGdkDragContextClass
-proc gdk_drag_context_get_type*(): GType{.cdecl, dynlib: gdklib, 
+proc gdk_drag_context_get_type*(): GType{.cdecl, dynlib: gdklib,
     importc: "gdk_drag_context_get_type".}
-proc gdk_drag_context_new*(): PGdkDragContext{.cdecl, dynlib: gdklib, 
+proc gdk_drag_context_new*(): PGdkDragContext{.cdecl, dynlib: gdklib,
     importc: "gdk_drag_context_new".}
-proc gdk_drag_status*(context: PGdkDragContext, action: TGdkDragAction, 
-                      time: guint32){.cdecl, dynlib: gdklib, 
+proc gdk_drag_status*(context: PGdkDragContext, action: TGdkDragAction,
+                      time: guint32){.cdecl, dynlib: gdklib,
                                       importc: "gdk_drag_status".}
 proc gdk_drop_reply*(context: PGdkDragContext, ok: gboolean, time: guint32){.
     cdecl, dynlib: gdklib, importc: "gdk_drop_reply".}
 proc gdk_drop_finish*(context: PGdkDragContext, success: gboolean, time: guint32){.
     cdecl, dynlib: gdklib, importc: "gdk_drop_finish".}
-proc gdk_drag_get_selection*(context: PGdkDragContext): TGdkAtom{.cdecl, 
+proc gdk_drag_get_selection*(context: PGdkDragContext): TGdkAtom{.cdecl,
     dynlib: gdklib, importc: "gdk_drag_get_selection".}
 proc gdk_drag_begin*(window: PGdkWindow, targets: PGList): PGdkDragContext{.
     cdecl, dynlib: gdklib, importc: "gdk_drag_begin".}
-proc gdk_drag_get_protocol_for_display*(display: PGdkDisplay, xid: guint32, 
+proc gdk_drag_get_protocol_for_display*(display: PGdkDisplay, xid: guint32,
                                         protocol: PGdkDragProtocol): guint32{.
     cdecl, dynlib: gdklib, importc: "gdk_drag_get_protocol_for_display".}
-proc gdk_drag_find_window*(context: PGdkDragContext, drag_window: PGdkWindow, 
-                           x_root: gint, y_root: gint, w: var PGdkWindow, 
-                           protocol: PGdkDragProtocol){.cdecl, dynlib: gdklib, 
+proc gdk_drag_find_window*(context: PGdkDragContext, drag_window: PGdkWindow,
+                           x_root: gint, y_root: gint, w: var PGdkWindow,
+                           protocol: PGdkDragProtocol){.cdecl, dynlib: gdklib,
     importc: "gdk_drag_find_window".}
-proc gdk_drag_motion*(context: PGdkDragContext, dest_window: PGdkWindow, 
-                      protocol: TGdkDragProtocol, x_root: gint, y_root: gint, 
-                      suggested_action: TGdkDragAction, 
+proc gdk_drag_motion*(context: PGdkDragContext, dest_window: PGdkWindow,
+                      protocol: TGdkDragProtocol, x_root: gint, y_root: gint,
+                      suggested_action: TGdkDragAction,
                       possible_actions: TGdkDragAction, time: guint32): gboolean{.
     cdecl, dynlib: gdklib, importc: "gdk_drag_motion".}
-proc gdk_drag_drop*(context: PGdkDragContext, time: guint32){.cdecl, 
+proc gdk_drag_drop*(context: PGdkDragContext, time: guint32){.cdecl,
     dynlib: gdklib, importc: "gdk_drag_drop".}
-proc gdk_drag_abort*(context: PGdkDragContext, time: guint32){.cdecl, 
+proc gdk_drag_abort*(context: PGdkDragContext, time: guint32){.cdecl,
     dynlib: gdklib, importc: "gdk_drag_abort".}
 proc gdkregion_EXTENTCHECK*(r1, r2: PGdkRegionBox): bool
 proc gdkregion_EXTENTS*(r: PGdkRegionBox, idRect: PGdkRegion)
 proc gdkregion_MEMCHECK*(reg: PGdkRegion, ARect, firstrect: var PGdkRegionBox): bool
-proc gdkregion_CHECK_PREVIOUS*(Reg: PGdkRegion, R: PGdkRegionBox, 
+proc gdkregion_CHECK_PREVIOUS*(Reg: PGdkRegion, R: PGdkRegionBox,
                                Rx1, Ry1, Rx2, Ry2: gint): bool
-proc gdkregion_ADDRECT*(reg: PGdkRegion, r: PGdkRegionBox, 
+proc gdkregion_ADDRECT*(reg: PGdkRegion, r: PGdkRegionBox,
                         rx1, ry1, rx2, ry2: gint)
-proc gdkregion_ADDRECTNOX*(reg: PGdkRegion, r: PGdkRegionBox, 
+proc gdkregion_ADDRECTNOX*(reg: PGdkRegion, r: PGdkRegionBox,
                            rx1, ry1, rx2, ry2: gint)
 proc gdkregion_EMPTY_REGION*(pReg: PGdkRegion): bool
 proc gdkregion_REGION_NOT_EMPTY*(pReg: PGdkRegion): bool
@@ -992,79 +991,79 @@ proc GDK_DRAWABLE_CLASS*(klass: Pointer): PGdkDrawableClass
 proc GDK_IS_DRAWABLE*(anObject: Pointer): bool
 proc GDK_IS_DRAWABLE_CLASS*(klass: Pointer): bool
 proc GDK_DRAWABLE_GET_CLASS*(obj: Pointer): PGdkDrawableClass
-proc gdk_drawable_get_type*(): GType{.cdecl, dynlib: gdklib, 
+proc gdk_drawable_get_type*(): GType{.cdecl, dynlib: gdklib,
                                       importc: "gdk_drawable_get_type".}
 proc gdk_drawable_get_size*(drawable: PGdkDrawable, width: Pgint, height: Pgint){.
     cdecl, dynlib: gdklib, importc: "gdk_drawable_get_size".}
 proc gdk_drawable_set_colormap*(drawable: PGdkDrawable, colormap: PGdkColormap){.
     cdecl, dynlib: gdklib, importc: "gdk_drawable_set_colormap".}
-proc gdk_drawable_get_colormap*(drawable: PGdkDrawable): PGdkColormap{.cdecl, 
+proc gdk_drawable_get_colormap*(drawable: PGdkDrawable): PGdkColormap{.cdecl,
     dynlib: gdklib, importc: "gdk_drawable_get_colormap".}
-proc gdk_drawable_get_visual*(drawable: PGdkDrawable): PGdkVisual{.cdecl, 
+proc gdk_drawable_get_visual*(drawable: PGdkDrawable): PGdkVisual{.cdecl,
     dynlib: gdklib, importc: "gdk_drawable_get_visual".}
-proc gdk_drawable_get_depth*(drawable: PGdkDrawable): gint{.cdecl, 
+proc gdk_drawable_get_depth*(drawable: PGdkDrawable): gint{.cdecl,
     dynlib: gdklib, importc: "gdk_drawable_get_depth".}
-proc gdk_drawable_get_screen*(drawable: PGdkDrawable): PGdkScreen{.cdecl, 
+proc gdk_drawable_get_screen*(drawable: PGdkDrawable): PGdkScreen{.cdecl,
     dynlib: gdklib, importc: "gdk_drawable_get_screen".}
-proc gdk_drawable_get_display*(drawable: PGdkDrawable): PGdkDisplay{.cdecl, 
+proc gdk_drawable_get_display*(drawable: PGdkDrawable): PGdkDisplay{.cdecl,
     dynlib: gdklib, importc: "gdk_drawable_get_display".}
 proc gdk_draw_point*(drawable: PGdkDrawable, gc: PGdkGC, x: gint, y: gint){.
     cdecl, dynlib: gdklib, importc: "gdk_draw_point".}
-proc gdk_draw_line*(drawable: PGdkDrawable, gc: PGdkGC, x1: gint, y1: gint, 
-                    x2: gint, y2: gint){.cdecl, dynlib: gdklib, 
+proc gdk_draw_line*(drawable: PGdkDrawable, gc: PGdkGC, x1: gint, y1: gint,
+                    x2: gint, y2: gint){.cdecl, dynlib: gdklib,
     importc: "gdk_draw_line".}
-proc gdk_draw_rectangle*(drawable: PGdkDrawable, gc: PGdkGC, filled: gint, 
-                         x: gint, y: gint, width: gint, height: gint){.cdecl, 
+proc gdk_draw_rectangle*(drawable: PGdkDrawable, gc: PGdkGC, filled: gint,
+                         x: gint, y: gint, width: gint, height: gint){.cdecl,
     dynlib: gdklib, importc: "gdk_draw_rectangle".}
-proc gdk_draw_arc*(drawable: PGdkDrawable, gc: PGdkGC, filled: gint, x: gint, 
-                   y: gint, width: gint, height: gint, angle1: gint, 
+proc gdk_draw_arc*(drawable: PGdkDrawable, gc: PGdkGC, filled: gint, x: gint,
+                   y: gint, width: gint, height: gint, angle1: gint,
                    angle2: gint){.cdecl, dynlib: gdklib, importc: "gdk_draw_arc".}
-proc gdk_draw_polygon*(drawable: PGdkDrawable, gc: PGdkGC, filled: gint, 
-                       points: PGdkPoint, npoints: gint){.cdecl, dynlib: gdklib, 
+proc gdk_draw_polygon*(drawable: PGdkDrawable, gc: PGdkGC, filled: gint,
+                       points: PGdkPoint, npoints: gint){.cdecl, dynlib: gdklib,
     importc: "gdk_draw_polygon".}
-proc gdk_draw_drawable*(drawable: PGdkDrawable, gc: PGdkGC, src: PGdkDrawable, 
-                        xsrc: gint, ysrc: gint, xdest: gint, ydest: gint, 
-                        width: gint, height: gint){.cdecl, dynlib: gdklib, 
+proc gdk_draw_drawable*(drawable: PGdkDrawable, gc: PGdkGC, src: PGdkDrawable,
+                        xsrc: gint, ysrc: gint, xdest: gint, ydest: gint,
+                        width: gint, height: gint){.cdecl, dynlib: gdklib,
     importc: "gdk_draw_drawable".}
-proc gdk_draw_image*(drawable: PGdkDrawable, gc: PGdkGC, image: PGdkImage, 
-                     xsrc: gint, ysrc: gint, xdest: gint, ydest: gint, 
-                     width: gint, height: gint){.cdecl, dynlib: gdklib, 
+proc gdk_draw_image*(drawable: PGdkDrawable, gc: PGdkGC, image: PGdkImage,
+                     xsrc: gint, ysrc: gint, xdest: gint, ydest: gint,
+                     width: gint, height: gint){.cdecl, dynlib: gdklib,
     importc: "gdk_draw_image".}
-proc gdk_draw_points*(drawable: PGdkDrawable, gc: PGdkGC, points: PGdkPoint, 
-                      npoints: gint){.cdecl, dynlib: gdklib, 
+proc gdk_draw_points*(drawable: PGdkDrawable, gc: PGdkGC, points: PGdkPoint,
+                      npoints: gint){.cdecl, dynlib: gdklib,
                                       importc: "gdk_draw_points".}
-proc gdk_draw_segments*(drawable: PGdkDrawable, gc: PGdkGC, segs: PGdkSegment, 
-                        nsegs: gint){.cdecl, dynlib: gdklib, 
+proc gdk_draw_segments*(drawable: PGdkDrawable, gc: PGdkGC, segs: PGdkSegment,
+                        nsegs: gint){.cdecl, dynlib: gdklib,
                                       importc: "gdk_draw_segments".}
-proc gdk_draw_lines*(drawable: PGdkDrawable, gc: PGdkGC, points: PGdkPoint, 
-                     npoints: gint){.cdecl, dynlib: gdklib, 
+proc gdk_draw_lines*(drawable: PGdkDrawable, gc: PGdkGC, points: PGdkPoint,
+                     npoints: gint){.cdecl, dynlib: gdklib,
                                      importc: "gdk_draw_lines".}
-proc gdk_draw_glyphs*(drawable: PGdkDrawable, gc: PGdkGC, font: PPangoFont, 
-                      x: gint, y: gint, glyphs: PPangoGlyphString){.cdecl, 
+proc gdk_draw_glyphs*(drawable: PGdkDrawable, gc: PGdkGC, font: PPangoFont,
+                      x: gint, y: gint, glyphs: PPangoGlyphString){.cdecl,
     dynlib: gdklib, importc: "gdk_draw_glyphs".}
-proc gdk_draw_layout_line*(drawable: PGdkDrawable, gc: PGdkGC, x: gint, y: gint, 
-                           line: PPangoLayoutLine){.cdecl, dynlib: gdklib, 
+proc gdk_draw_layout_line*(drawable: PGdkDrawable, gc: PGdkGC, x: gint, y: gint,
+                           line: PPangoLayoutLine){.cdecl, dynlib: gdklib,
     importc: "gdk_draw_layout_line".}
-proc gdk_draw_layout*(drawable: PGdkDrawable, gc: PGdkGC, x: gint, y: gint, 
-                      layout: PPangoLayout){.cdecl, dynlib: gdklib, 
+proc gdk_draw_layout*(drawable: PGdkDrawable, gc: PGdkGC, x: gint, y: gint,
+                      layout: PPangoLayout){.cdecl, dynlib: gdklib,
     importc: "gdk_draw_layout".}
-proc gdk_draw_layout_line_with_colors*(drawable: PGdkDrawable, gc: PGdkGC, 
-                                       x: gint, y: gint, line: PPangoLayoutLine, 
-                                       foreground: PGdkColor, 
-                                       background: PGdkColor){.cdecl, 
+proc gdk_draw_layout_line_with_colors*(drawable: PGdkDrawable, gc: PGdkGC,
+                                       x: gint, y: gint, line: PPangoLayoutLine,
+                                       foreground: PGdkColor,
+                                       background: PGdkColor){.cdecl,
     dynlib: gdklib, importc: "gdk_draw_layout_line_with_colors".}
-proc gdk_draw_layout_with_colors*(drawable: PGdkDrawable, gc: PGdkGC, x: gint, 
-                                  y: gint, layout: PPangoLayout, 
+proc gdk_draw_layout_with_colors*(drawable: PGdkDrawable, gc: PGdkGC, x: gint,
+                                  y: gint, layout: PPangoLayout,
                                   foreground: PGdkColor, background: PGdkColor){.
     cdecl, dynlib: gdklib, importc: "gdk_draw_layout_with_colors".}
-proc gdk_drawable_get_image*(drawable: PGdkDrawable, x: gint, y: gint, 
-                             width: gint, height: gint): PGdkImage{.cdecl, 
+proc gdk_drawable_get_image*(drawable: PGdkDrawable, x: gint, y: gint,
+                             width: gint, height: gint): PGdkImage{.cdecl,
     dynlib: gdklib, importc: "gdk_drawable_get_image".}
-proc gdk_drawable_get_clip_region*(drawable: PGdkDrawable): PGdkRegion{.cdecl, 
+proc gdk_drawable_get_clip_region*(drawable: PGdkDrawable): PGdkRegion{.cdecl,
     dynlib: gdklib, importc: "gdk_drawable_get_clip_region".}
 proc gdk_drawable_get_visible_region*(drawable: PGdkDrawable): PGdkRegion{.
     cdecl, dynlib: gdklib, importc: "gdk_drawable_get_visible_region".}
-const 
+const
   GDK_NOTHING* = - (1)
   GDK_DELETE* = 0
   GDK_DESTROY* = 1
@@ -1108,7 +1107,7 @@ const
   GDK_NOTIFY_UNKNOWN* = 5
 
 proc GDK_TYPE_EVENT*(): GType
-const 
+const
   G_PRIORITY_DEFAULT* = 0
   GDK_PRIORITY_EVENTS* = G_PRIORITY_DEFAULT
     #GDK_PRIORITY_REDRAW* = G_PRIORITY_HIGH_IDLE + 20
@@ -1139,96 +1138,96 @@ const
   GDK_WINDOW_STATE_MAXIMIZED* = 1 shl 2
   GDK_WINDOW_STATE_STICKY* = 1 shl 3
 
-proc gdk_event_get_type*(): GType{.cdecl, dynlib: gdklib, 
+proc gdk_event_get_type*(): GType{.cdecl, dynlib: gdklib,
                                    importc: "gdk_event_get_type".}
-proc gdk_events_pending*(): gboolean{.cdecl, dynlib: gdklib, 
+proc gdk_events_pending*(): gboolean{.cdecl, dynlib: gdklib,
                                       importc: "gdk_events_pending".}
-proc gdk_event_get*(): PGdkEvent{.cdecl, dynlib: gdklib, 
+proc gdk_event_get*(): PGdkEvent{.cdecl, dynlib: gdklib,
                                   importc: "gdk_event_get".}
-proc gdk_event_peek*(): PGdkEvent{.cdecl, dynlib: gdklib, 
+proc gdk_event_peek*(): PGdkEvent{.cdecl, dynlib: gdklib,
                                    importc: "gdk_event_peek".}
-proc gdk_event_get_graphics_expose*(window: PGdkWindow): PGdkEvent{.cdecl, 
+proc gdk_event_get_graphics_expose*(window: PGdkWindow): PGdkEvent{.cdecl,
     dynlib: gdklib, importc: "gdk_event_get_graphics_expose".}
-proc gdk_event_put*(event: PGdkEvent){.cdecl, dynlib: gdklib, 
+proc gdk_event_put*(event: PGdkEvent){.cdecl, dynlib: gdklib,
                                        importc: "gdk_event_put".}
-proc gdk_event_copy*(event: PGdkEvent): PGdkEvent{.cdecl, dynlib: gdklib, 
+proc gdk_event_copy*(event: PGdkEvent): PGdkEvent{.cdecl, dynlib: gdklib,
     importc: "gdk_event_copy".}
-proc gdk_event_free*(event: PGdkEvent){.cdecl, dynlib: gdklib, 
+proc gdk_event_free*(event: PGdkEvent){.cdecl, dynlib: gdklib,
                                         importc: "gdk_event_free".}
-proc gdk_event_get_time*(event: PGdkEvent): guint32{.cdecl, dynlib: gdklib, 
+proc gdk_event_get_time*(event: PGdkEvent): guint32{.cdecl, dynlib: gdklib,
     importc: "gdk_event_get_time".}
 proc gdk_event_get_state*(event: PGdkEvent, state: PGdkModifierType): gboolean{.
     cdecl, dynlib: gdklib, importc: "gdk_event_get_state".}
 proc gdk_event_get_coords*(event: PGdkEvent, x_win: Pgdouble, y_win: Pgdouble): gboolean{.
     cdecl, dynlib: gdklib, importc: "gdk_event_get_coords".}
-proc gdk_event_get_root_coords*(event: PGdkEvent, x_root: Pgdouble, 
-                                y_root: Pgdouble): gboolean{.cdecl, 
+proc gdk_event_get_root_coords*(event: PGdkEvent, x_root: Pgdouble,
+                                y_root: Pgdouble): gboolean{.cdecl,
     dynlib: gdklib, importc: "gdk_event_get_root_coords".}
-proc gdk_event_get_axis*(event: PGdkEvent, axis_use: TGdkAxisUse, 
-                         value: Pgdouble): gboolean{.cdecl, dynlib: gdklib, 
+proc gdk_event_get_axis*(event: PGdkEvent, axis_use: TGdkAxisUse,
+                         value: Pgdouble): gboolean{.cdecl, dynlib: gdklib,
     importc: "gdk_event_get_axis".}
-proc gdk_event_handler_set*(func: TGdkEventFunc, data: gpointer, 
-                            notify: TGDestroyNotify){.cdecl, dynlib: gdklib, 
+proc gdk_event_handler_set*(func: TGdkEventFunc, data: gpointer,
+                            notify: TGDestroyNotify){.cdecl, dynlib: gdklib,
     importc: "gdk_event_handler_set".}
-proc gdk_set_show_events*(show_events: gboolean){.cdecl, dynlib: gdklib, 
+proc gdk_set_show_events*(show_events: gboolean){.cdecl, dynlib: gdklib,
     importc: "gdk_set_show_events".}
-proc gdk_get_show_events*(): gboolean{.cdecl, dynlib: gdklib, 
+proc gdk_get_show_events*(): gboolean{.cdecl, dynlib: gdklib,
                                        importc: "gdk_get_show_events".}
 proc GDK_TYPE_FONT*(): GType
-proc gdk_font_get_type*(): GType{.cdecl, dynlib: gdklib, 
+proc gdk_font_get_type*(): GType{.cdecl, dynlib: gdklib,
                                   importc: "gdk_font_get_type".}
 proc gdk_font_load_for_display*(display: PGdkDisplay, font_name: cstring): PGdkFont{.
     cdecl, dynlib: gdklib, importc: "gdk_font_load_for_display".}
 proc gdk_fontset_load_for_display*(display: PGdkDisplay, fontset_name: cstring): PGdkFont{.
     cdecl, dynlib: gdklib, importc: "gdk_fontset_load_for_display".}
-proc gdk_font_from_description_for_display*(display: PGdkDisplay, 
-    font_desc: PPangoFontDescription): PGdkFont{.cdecl, dynlib: gdklib, 
+proc gdk_font_from_description_for_display*(display: PGdkDisplay,
+    font_desc: PPangoFontDescription): PGdkFont{.cdecl, dynlib: gdklib,
     importc: "gdk_font_from_description_for_display".}
-proc gdk_font_ref*(font: PGdkFont): PGdkFont{.cdecl, dynlib: gdklib, 
+proc gdk_font_ref*(font: PGdkFont): PGdkFont{.cdecl, dynlib: gdklib,
     importc: "gdk_font_ref".}
-proc gdk_font_unref*(font: PGdkFont){.cdecl, dynlib: gdklib, 
+proc gdk_font_unref*(font: PGdkFont){.cdecl, dynlib: gdklib,
                                       importc: "gdk_font_unref".}
-proc gdk_font_id*(font: PGdkFont): gint{.cdecl, dynlib: gdklib, 
+proc gdk_font_id*(font: PGdkFont): gint{.cdecl, dynlib: gdklib,
     importc: "gdk_font_id".}
-proc gdk_font_equal*(fonta: PGdkFont, fontb: PGdkFont): gboolean{.cdecl, 
+proc gdk_font_equal*(fonta: PGdkFont, fontb: PGdkFont): gboolean{.cdecl,
     dynlib: gdklib, importc: "gdk_font_equal".}
-proc gdk_string_width*(font: PGdkFont, `string`: cstring): gint{.cdecl, 
+proc gdk_string_width*(font: PGdkFont, `string`: cstring): gint{.cdecl,
     dynlib: gdklib, importc: "gdk_string_width".}
 proc gdk_text_width*(font: PGdkFont, text: cstring, text_length: gint): gint{.
     cdecl, dynlib: gdklib, importc: "gdk_text_width".}
 proc gdk_text_width_wc*(font: PGdkFont, text: PGdkWChar, text_length: gint): gint{.
     cdecl, dynlib: gdklib, importc: "gdk_text_width_wc".}
-proc gdk_char_width*(font: PGdkFont, character: gchar): gint{.cdecl, 
+proc gdk_char_width*(font: PGdkFont, character: gchar): gint{.cdecl,
     dynlib: gdklib, importc: "gdk_char_width".}
-proc gdk_char_width_wc*(font: PGdkFont, character: TGdkWChar): gint{.cdecl, 
+proc gdk_char_width_wc*(font: PGdkFont, character: TGdkWChar): gint{.cdecl,
     dynlib: gdklib, importc: "gdk_char_width_wc".}
-proc gdk_string_measure*(font: PGdkFont, `string`: cstring): gint{.cdecl, 
+proc gdk_string_measure*(font: PGdkFont, `string`: cstring): gint{.cdecl,
     dynlib: gdklib, importc: "gdk_string_measure".}
 proc gdk_text_measure*(font: PGdkFont, text: cstring, text_length: gint): gint{.
     cdecl, dynlib: gdklib, importc: "gdk_text_measure".}
-proc gdk_char_measure*(font: PGdkFont, character: gchar): gint{.cdecl, 
+proc gdk_char_measure*(font: PGdkFont, character: gchar): gint{.cdecl,
     dynlib: gdklib, importc: "gdk_char_measure".}
-proc gdk_string_height*(font: PGdkFont, `string`: cstring): gint{.cdecl, 
+proc gdk_string_height*(font: PGdkFont, `string`: cstring): gint{.cdecl,
     dynlib: gdklib, importc: "gdk_string_height".}
 proc gdk_text_height*(font: PGdkFont, text: cstring, text_length: gint): gint{.
     cdecl, dynlib: gdklib, importc: "gdk_text_height".}
-proc gdk_char_height*(font: PGdkFont, character: gchar): gint{.cdecl, 
+proc gdk_char_height*(font: PGdkFont, character: gchar): gint{.cdecl,
     dynlib: gdklib, importc: "gdk_char_height".}
-proc gdk_text_extents*(font: PGdkFont, text: cstring, text_length: gint, 
-                       lbearing: Pgint, rbearing: Pgint, width: Pgint, 
-                       ascent: Pgint, descent: Pgint){.cdecl, dynlib: gdklib, 
+proc gdk_text_extents*(font: PGdkFont, text: cstring, text_length: gint,
+                       lbearing: Pgint, rbearing: Pgint, width: Pgint,
+                       ascent: Pgint, descent: Pgint){.cdecl, dynlib: gdklib,
     importc: "gdk_text_extents".}
-proc gdk_text_extents_wc*(font: PGdkFont, text: PGdkWChar, text_length: gint, 
-                          lbearing: Pgint, rbearing: Pgint, width: Pgint, 
-                          ascent: Pgint, descent: Pgint){.cdecl, dynlib: gdklib, 
+proc gdk_text_extents_wc*(font: PGdkFont, text: PGdkWChar, text_length: gint,
+                          lbearing: Pgint, rbearing: Pgint, width: Pgint,
+                          ascent: Pgint, descent: Pgint){.cdecl, dynlib: gdklib,
     importc: "gdk_text_extents_wc".}
-proc gdk_string_extents*(font: PGdkFont, `string`: cstring, lbearing: Pgint, 
-                         rbearing: Pgint, width: Pgint, ascent: Pgint, 
-                         descent: Pgint){.cdecl, dynlib: gdklib, 
+proc gdk_string_extents*(font: PGdkFont, `string`: cstring, lbearing: Pgint,
+                         rbearing: Pgint, width: Pgint, ascent: Pgint,
+                         descent: Pgint){.cdecl, dynlib: gdklib,
     importc: "gdk_string_extents".}
-proc gdk_font_get_display*(font: PGdkFont): PGdkDisplay{.cdecl, dynlib: gdklib, 
+proc gdk_font_get_display*(font: PGdkFont): PGdkDisplay{.cdecl, dynlib: gdklib,
     importc: "gdk_font_get_display".}
-const 
+const
   GDK_GC_FOREGROUND* = 1 shl 0
   GDK_GC_BACKGROUND* = 1 shl 1
   GDK_GC_FONT* = 1 shl 2
@@ -1256,65 +1255,65 @@ proc GDK_GC_CLASS*(klass: Pointer): PGdkGCClass
 proc GDK_IS_GC*(anObject: Pointer): bool
 proc GDK_IS_GC_CLASS*(klass: Pointer): bool
 proc GDK_GC_GET_CLASS*(obj: Pointer): PGdkGCClass
-proc gdk_gc_get_type*(): GType{.cdecl, dynlib: gdklib, 
+proc gdk_gc_get_type*(): GType{.cdecl, dynlib: gdklib,
                                 importc: "gdk_gc_get_type".}
-proc gdk_gc_new*(drawable: PGdkDrawable): PGdkGC{.cdecl, dynlib: gdklib, 
+proc gdk_gc_new*(drawable: PGdkDrawable): PGdkGC{.cdecl, dynlib: gdklib,
     importc: "gdk_gc_new".}
-proc gdk_gc_new_with_values*(drawable: PGdkDrawable, values: PGdkGCValues, 
-                             values_mask: TGdkGCValuesMask): PGdkGC{.cdecl, 
+proc gdk_gc_new_with_values*(drawable: PGdkDrawable, values: PGdkGCValues,
+                             values_mask: TGdkGCValuesMask): PGdkGC{.cdecl,
     dynlib: gdklib, importc: "gdk_gc_new_with_values".}
-proc gdk_gc_get_values*(gc: PGdkGC, values: PGdkGCValues){.cdecl, 
+proc gdk_gc_get_values*(gc: PGdkGC, values: PGdkGCValues){.cdecl,
     dynlib: gdklib, importc: "gdk_gc_get_values".}
-proc gdk_gc_set_values*(gc: PGdkGC, values: PGdkGCValues, 
-                        values_mask: TGdkGCValuesMask){.cdecl, dynlib: gdklib, 
+proc gdk_gc_set_values*(gc: PGdkGC, values: PGdkGCValues,
+                        values_mask: TGdkGCValuesMask){.cdecl, dynlib: gdklib,
     importc: "gdk_gc_set_values".}
-proc gdk_gc_set_foreground*(gc: PGdkGC, color: PGdkColor){.cdecl, 
+proc gdk_gc_set_foreground*(gc: PGdkGC, color: PGdkColor){.cdecl,
     dynlib: gdklib, importc: "gdk_gc_set_foreground".}
-proc gdk_gc_set_background*(gc: PGdkGC, color: PGdkColor){.cdecl, 
+proc gdk_gc_set_background*(gc: PGdkGC, color: PGdkColor){.cdecl,
     dynlib: gdklib, importc: "gdk_gc_set_background".}
-proc gdk_gc_set_function*(gc: PGdkGC, `function`: TGdkFunction){.cdecl, 
+proc gdk_gc_set_function*(gc: PGdkGC, `function`: TGdkFunction){.cdecl,
     dynlib: gdklib, importc: "gdk_gc_set_function".}
-proc gdk_gc_set_fill*(gc: PGdkGC, fill: TGdkFill){.cdecl, dynlib: gdklib, 
+proc gdk_gc_set_fill*(gc: PGdkGC, fill: TGdkFill){.cdecl, dynlib: gdklib,
     importc: "gdk_gc_set_fill".}
-proc gdk_gc_set_tile*(gc: PGdkGC, tile: PGdkPixmap){.cdecl, dynlib: gdklib, 
+proc gdk_gc_set_tile*(gc: PGdkGC, tile: PGdkPixmap){.cdecl, dynlib: gdklib,
     importc: "gdk_gc_set_tile".}
-proc gdk_gc_set_stipple*(gc: PGdkGC, stipple: PGdkPixmap){.cdecl, 
+proc gdk_gc_set_stipple*(gc: PGdkGC, stipple: PGdkPixmap){.cdecl,
     dynlib: gdklib, importc: "gdk_gc_set_stipple".}
-proc gdk_gc_set_ts_origin*(gc: PGdkGC, x: gint, y: gint){.cdecl, dynlib: gdklib, 
+proc gdk_gc_set_ts_origin*(gc: PGdkGC, x: gint, y: gint){.cdecl, dynlib: gdklib,
     importc: "gdk_gc_set_ts_origin".}
-proc gdk_gc_set_clip_origin*(gc: PGdkGC, x: gint, y: gint){.cdecl, 
+proc gdk_gc_set_clip_origin*(gc: PGdkGC, x: gint, y: gint){.cdecl,
     dynlib: gdklib, importc: "gdk_gc_set_clip_origin".}
-proc gdk_gc_set_clip_mask*(gc: PGdkGC, mask: PGdkBitmap){.cdecl, dynlib: gdklib, 
+proc gdk_gc_set_clip_mask*(gc: PGdkGC, mask: PGdkBitmap){.cdecl, dynlib: gdklib,
     importc: "gdk_gc_set_clip_mask".}
-proc gdk_gc_set_clip_rectangle*(gc: PGdkGC, rectangle: PGdkRectangle){.cdecl, 
+proc gdk_gc_set_clip_rectangle*(gc: PGdkGC, rectangle: PGdkRectangle){.cdecl,
     dynlib: gdklib, importc: "gdk_gc_set_clip_rectangle".}
-proc gdk_gc_set_clip_region*(gc: PGdkGC, region: PGdkRegion){.cdecl, 
+proc gdk_gc_set_clip_region*(gc: PGdkGC, region: PGdkRegion){.cdecl,
     dynlib: gdklib, importc: "gdk_gc_set_clip_region".}
-proc gdk_gc_set_subwindow*(gc: PGdkGC, mode: TGdkSubwindowMode){.cdecl, 
+proc gdk_gc_set_subwindow*(gc: PGdkGC, mode: TGdkSubwindowMode){.cdecl,
     dynlib: gdklib, importc: "gdk_gc_set_subwindow".}
-proc gdk_gc_set_exposures*(gc: PGdkGC, exposures: gboolean){.cdecl, 
+proc gdk_gc_set_exposures*(gc: PGdkGC, exposures: gboolean){.cdecl,
     dynlib: gdklib, importc: "gdk_gc_set_exposures".}
-proc gdk_gc_set_line_attributes*(gc: PGdkGC, line_width: gint, 
-                                 line_style: TGdkLineStyle, 
-                                 cap_style: TGdkCapStyle, 
-                                 join_style: TGdkJoinStyle){.cdecl, 
+proc gdk_gc_set_line_attributes*(gc: PGdkGC, line_width: gint,
+                                 line_style: TGdkLineStyle,
+                                 cap_style: TGdkCapStyle,
+                                 join_style: TGdkJoinStyle){.cdecl,
     dynlib: gdklib, importc: "gdk_gc_set_line_attributes".}
-proc gdk_gc_set_dashes*(gc: PGdkGC, dash_offset: gint, 
-                        dash_list: openarray[gint8]){.cdecl, dynlib: gdklib, 
+proc gdk_gc_set_dashes*(gc: PGdkGC, dash_offset: gint,
+                        dash_list: openarray[gint8]){.cdecl, dynlib: gdklib,
     importc: "gdk_gc_set_dashes".}
-proc gdk_gc_offset*(gc: PGdkGC, x_offset: gint, y_offset: gint){.cdecl, 
+proc gdk_gc_offset*(gc: PGdkGC, x_offset: gint, y_offset: gint){.cdecl,
     dynlib: gdklib, importc: "gdk_gc_offset".}
-proc gdk_gc_copy*(dst_gc: PGdkGC, src_gc: PGdkGC){.cdecl, dynlib: gdklib, 
+proc gdk_gc_copy*(dst_gc: PGdkGC, src_gc: PGdkGC){.cdecl, dynlib: gdklib,
     importc: "gdk_gc_copy".}
-proc gdk_gc_set_colormap*(gc: PGdkGC, colormap: PGdkColormap){.cdecl, 
+proc gdk_gc_set_colormap*(gc: PGdkGC, colormap: PGdkColormap){.cdecl,
     dynlib: gdklib, importc: "gdk_gc_set_colormap".}
-proc gdk_gc_get_colormap*(gc: PGdkGC): PGdkColormap{.cdecl, dynlib: gdklib, 
+proc gdk_gc_get_colormap*(gc: PGdkGC): PGdkColormap{.cdecl, dynlib: gdklib,
     importc: "gdk_gc_get_colormap".}
-proc gdk_gc_set_rgb_fg_color*(gc: PGdkGC, color: PGdkColor){.cdecl, 
+proc gdk_gc_set_rgb_fg_color*(gc: PGdkGC, color: PGdkColor){.cdecl,
     dynlib: gdklib, importc: "gdk_gc_set_rgb_fg_color".}
-proc gdk_gc_set_rgb_bg_color*(gc: PGdkGC, color: PGdkColor){.cdecl, 
+proc gdk_gc_set_rgb_bg_color*(gc: PGdkGC, color: PGdkColor){.cdecl,
     dynlib: gdklib, importc: "gdk_gc_set_rgb_bg_color".}
-proc gdk_gc_get_screen*(gc: PGdkGC): PGdkScreen{.cdecl, dynlib: gdklib, 
+proc gdk_gc_get_screen*(gc: PGdkGC): PGdkScreen{.cdecl, dynlib: gdklib,
     importc: "gdk_gc_get_screen".}
 proc GDK_TYPE_IMAGE*(): GType
 proc GDK_IMAGE*(anObject: Pointer): PGdkImage
@@ -1322,20 +1321,20 @@ proc GDK_IMAGE_CLASS*(klass: Pointer): PGdkImageClass
 proc GDK_IS_IMAGE*(anObject: Pointer): bool
 proc GDK_IS_IMAGE_CLASS*(klass: Pointer): bool
 proc GDK_IMAGE_GET_CLASS*(obj: Pointer): PGdkImageClass
-proc gdk_image_get_type*(): GType{.cdecl, dynlib: gdklib, 
+proc gdk_image_get_type*(): GType{.cdecl, dynlib: gdklib,
                                    importc: "gdk_image_get_type".}
-proc gdk_image_new*(`type`: TGdkImageType, visual: PGdkVisual, width: gint, 
-                    height: gint): PGdkImage{.cdecl, dynlib: gdklib, 
+proc gdk_image_new*(`type`: TGdkImageType, visual: PGdkVisual, width: gint,
+                    height: gint): PGdkImage{.cdecl, dynlib: gdklib,
     importc: "gdk_image_new".}
 proc gdk_image_put_pixel*(image: PGdkImage, x: gint, y: gint, pixel: guint32){.
     cdecl, dynlib: gdklib, importc: "gdk_image_put_pixel".}
-proc gdk_image_get_pixel*(image: PGdkImage, x: gint, y: gint): guint32{.cdecl, 
+proc gdk_image_get_pixel*(image: PGdkImage, x: gint, y: gint): guint32{.cdecl,
     dynlib: gdklib, importc: "gdk_image_get_pixel".}
-proc gdk_image_set_colormap*(image: PGdkImage, colormap: PGdkColormap){.cdecl, 
+proc gdk_image_set_colormap*(image: PGdkImage, colormap: PGdkColormap){.cdecl,
     dynlib: gdklib, importc: "gdk_image_set_colormap".}
-proc gdk_image_get_colormap*(image: PGdkImage): PGdkColormap{.cdecl, 
+proc gdk_image_get_colormap*(image: PGdkImage): PGdkColormap{.cdecl,
     dynlib: gdklib, importc: "gdk_image_get_colormap".}
-const 
+const
   GDK_AXIS_IGNORE* = 0
   GDK_AXIS_X* = 1
   GDK_AXIS_Y* = 2
@@ -1351,33 +1350,33 @@ proc GDK_DEVICE_CLASS*(klass: Pointer): PGdkDeviceClass
 proc GDK_IS_DEVICE*(anObject: Pointer): bool
 proc GDK_IS_DEVICE_CLASS*(klass: Pointer): bool
 proc GDK_DEVICE_GET_CLASS*(obj: Pointer): PGdkDeviceClass
-proc gdk_device_get_type*(): GType{.cdecl, dynlib: gdklib, 
+proc gdk_device_get_type*(): GType{.cdecl, dynlib: gdklib,
                                     importc: "gdk_device_get_type".}
-proc gdk_device_set_source*(device: PGdkDevice, source: TGdkInputSource){.cdecl, 
+proc gdk_device_set_source*(device: PGdkDevice, source: TGdkInputSource){.cdecl,
     dynlib: gdklib, importc: "gdk_device_set_source".}
 proc gdk_device_set_mode*(device: PGdkDevice, mode: TGdkInputMode): gboolean{.
     cdecl, dynlib: gdklib, importc: "gdk_device_set_mode".}
-proc gdk_device_set_key*(device: PGdkDevice, index: guint, keyval: guint, 
-                         modifiers: TGdkModifierType){.cdecl, dynlib: gdklib, 
+proc gdk_device_set_key*(device: PGdkDevice, index: guint, keyval: guint,
+                         modifiers: TGdkModifierType){.cdecl, dynlib: gdklib,
     importc: "gdk_device_set_key".}
 proc gdk_device_set_axis_use*(device: PGdkDevice, index: guint, use: TGdkAxisUse){.
     cdecl, dynlib: gdklib, importc: "gdk_device_set_axis_use".}
-proc gdk_device_get_state*(device: PGdkDevice, window: PGdkWindow, 
-                           axes: Pgdouble, mask: PGdkModifierType){.cdecl, 
+proc gdk_device_get_state*(device: PGdkDevice, window: PGdkWindow,
+                           axes: Pgdouble, mask: PGdkModifierType){.cdecl,
     dynlib: gdklib, importc: "gdk_device_get_state".}
-proc gdk_device_get_history*(device: PGdkDevice, window: PGdkWindow, 
-                             start: guint32, stop: guint32, 
+proc gdk_device_get_history*(device: PGdkDevice, window: PGdkWindow,
+                             start: guint32, stop: guint32,
                              s: var PPGdkTimeCoord, n_events: Pgint): gboolean{.
     cdecl, dynlib: gdklib, importc: "gdk_device_get_history".}
-proc gdk_device_free_history*(events: PPGdkTimeCoord, n_events: gint){.cdecl, 
+proc gdk_device_free_history*(events: PPGdkTimeCoord, n_events: gint){.cdecl,
     dynlib: gdklib, importc: "gdk_device_free_history".}
-proc gdk_device_get_axis*(device: PGdkDevice, axes: Pgdouble, use: TGdkAxisUse, 
-                          value: Pgdouble): gboolean{.cdecl, dynlib: gdklib, 
+proc gdk_device_get_axis*(device: PGdkDevice, axes: Pgdouble, use: TGdkAxisUse,
+                          value: Pgdouble): gboolean{.cdecl, dynlib: gdklib,
     importc: "gdk_device_get_axis".}
-proc gdk_input_set_extension_events*(window: PGdkWindow, mask: gint, 
-                                     mode: TGdkExtensionMode){.cdecl, 
+proc gdk_input_set_extension_events*(window: PGdkWindow, mask: gint,
+                                     mode: TGdkExtensionMode){.cdecl,
     dynlib: gdklib, importc: "gdk_input_set_extension_events".}
-proc gdk_device_get_core_pointer*(): PGdkDevice{.cdecl, dynlib: gdklib, 
+proc gdk_device_get_core_pointer*(): PGdkDevice{.cdecl, dynlib: gdklib,
     importc: "gdk_device_get_core_pointer".}
 proc GDK_TYPE_KEYMAP*(): GType
 proc GDK_KEYMAP*(anObject: Pointer): PGdkKeymap
@@ -1385,45 +1384,45 @@ proc GDK_KEYMAP_CLASS*(klass: Pointer): PGdkKeymapClass
 proc GDK_IS_KEYMAP*(anObject: Pointer): bool
 proc GDK_IS_KEYMAP_CLASS*(klass: Pointer): bool
 proc GDK_KEYMAP_GET_CLASS*(obj: Pointer): PGdkKeymapClass
-proc gdk_keymap_get_type*(): GType{.cdecl, dynlib: gdklib, 
+proc gdk_keymap_get_type*(): GType{.cdecl, dynlib: gdklib,
                                     importc: "gdk_keymap_get_type".}
-proc gdk_keymap_get_for_display*(display: PGdkDisplay): PGdkKeymap{.cdecl, 
+proc gdk_keymap_get_for_display*(display: PGdkDisplay): PGdkKeymap{.cdecl,
     dynlib: gdklib, importc: "gdk_keymap_get_for_display".}
 proc gdk_keymap_lookup_key*(keymap: PGdkKeymap, key: PGdkKeymapKey): guint{.
     cdecl, dynlib: gdklib, importc: "gdk_keymap_lookup_key".}
-proc gdk_keymap_translate_keyboard_state*(keymap: PGdkKeymap, 
-    hardware_keycode: guint, state: TGdkModifierType, group: gint, 
-    keyval: Pguint, effective_group: Pgint, level: Pgint, 
-    consumed_modifiers: PGdkModifierType): gboolean{.cdecl, dynlib: gdklib, 
+proc gdk_keymap_translate_keyboard_state*(keymap: PGdkKeymap,
+    hardware_keycode: guint, state: TGdkModifierType, group: gint,
+    keyval: Pguint, effective_group: Pgint, level: Pgint,
+    consumed_modifiers: PGdkModifierType): gboolean{.cdecl, dynlib: gdklib,
     importc: "gdk_keymap_translate_keyboard_state".}
-proc gdk_keymap_get_entries_for_keyval*(keymap: PGdkKeymap, keyval: guint, 
+proc gdk_keymap_get_entries_for_keyval*(keymap: PGdkKeymap, keyval: guint,
                                         s: var PGdkKeymapKey, n_keys: Pgint): gboolean{.
     cdecl, dynlib: gdklib, importc: "gdk_keymap_get_entries_for_keyval".}
-proc gdk_keymap_get_entries_for_keycode*(keymap: PGdkKeymap, 
-    hardware_keycode: guint, s: var PGdkKeymapKey, sasdf: var Pguint, 
-    n_entries: Pgint): gboolean{.cdecl, dynlib: gdklib, 
+proc gdk_keymap_get_entries_for_keycode*(keymap: PGdkKeymap,
+    hardware_keycode: guint, s: var PGdkKeymapKey, sasdf: var Pguint,
+    n_entries: Pgint): gboolean{.cdecl, dynlib: gdklib,
                                  importc: "gdk_keymap_get_entries_for_keycode".}
-proc gdk_keymap_get_direction*(keymap: PGdkKeymap): TPangoDirection{.cdecl, 
+proc gdk_keymap_get_direction*(keymap: PGdkKeymap): TPangoDirection{.cdecl,
     dynlib: gdklib, importc: "gdk_keymap_get_direction".}
-proc gdk_keyval_name*(keyval: guint): cstring{.cdecl, dynlib: gdklib, 
+proc gdk_keyval_name*(keyval: guint): cstring{.cdecl, dynlib: gdklib,
     importc: "gdk_keyval_name".}
-proc gdk_keyval_from_name*(keyval_name: cstring): guint{.cdecl, dynlib: gdklib, 
+proc gdk_keyval_from_name*(keyval_name: cstring): guint{.cdecl, dynlib: gdklib,
     importc: "gdk_keyval_from_name".}
 proc gdk_keyval_convert_case*(symbol: guint, lower: Pguint, upper: Pguint){.
     cdecl, dynlib: gdklib, importc: "gdk_keyval_convert_case".}
-proc gdk_keyval_to_upper*(keyval: guint): guint{.cdecl, dynlib: gdklib, 
+proc gdk_keyval_to_upper*(keyval: guint): guint{.cdecl, dynlib: gdklib,
     importc: "gdk_keyval_to_upper".}
-proc gdk_keyval_to_lower*(keyval: guint): guint{.cdecl, dynlib: gdklib, 
+proc gdk_keyval_to_lower*(keyval: guint): guint{.cdecl, dynlib: gdklib,
     importc: "gdk_keyval_to_lower".}
-proc gdk_keyval_is_upper*(keyval: guint): gboolean{.cdecl, dynlib: gdklib, 
+proc gdk_keyval_is_upper*(keyval: guint): gboolean{.cdecl, dynlib: gdklib,
     importc: "gdk_keyval_is_upper".}
-proc gdk_keyval_is_lower*(keyval: guint): gboolean{.cdecl, dynlib: gdklib, 
+proc gdk_keyval_is_lower*(keyval: guint): gboolean{.cdecl, dynlib: gdklib,
     importc: "gdk_keyval_is_lower".}
-proc gdk_keyval_to_unicode*(keyval: guint): guint32{.cdecl, dynlib: gdklib, 
+proc gdk_keyval_to_unicode*(keyval: guint): guint32{.cdecl, dynlib: gdklib,
     importc: "gdk_keyval_to_unicode".}
-proc gdk_unicode_to_keyval*(wc: guint32): guint{.cdecl, dynlib: gdklib, 
+proc gdk_unicode_to_keyval*(wc: guint32): guint{.cdecl, dynlib: gdklib,
     importc: "gdk_unicode_to_keyval".}
-const 
+const
   GDK_KEY_VoidSymbol* = 0x00FFFFFF
   GDK_KEY_BackSpace* = 0x0000FF08
   GDK_KEY_Tab* = 0x0000FF09
@@ -2760,50 +2759,50 @@ const
 
 proc gdk_pango_context_get_for_screen*(screen: PGdkScreen): PPangoContext{.
     cdecl, dynlib: gdklib, importc: "gdk_pango_context_get_for_screen".}
-proc gdk_pango_context_set_colormap*(context: PPangoContext, 
-                                     colormap: PGdkColormap){.cdecl, 
+proc gdk_pango_context_set_colormap*(context: PPangoContext,
+                                     colormap: PGdkColormap){.cdecl,
     dynlib: gdklib, importc: "gdk_pango_context_set_colormap".}
-proc gdk_pango_layout_line_get_clip_region*(line: PPangoLayoutLine, 
+proc gdk_pango_layout_line_get_clip_region*(line: PPangoLayoutLine,
     x_origin: gint, y_origin: gint, index_ranges: Pgint, n_ranges: gint): PGdkRegion{.
     cdecl, dynlib: gdklib, importc: "gdk_pango_layout_line_get_clip_region".}
-proc gdk_pango_layout_get_clip_region*(layout: PPangoLayout, x_origin: gint, 
-                                       y_origin: gint, index_ranges: Pgint, 
-                                       n_ranges: gint): PGdkRegion{.cdecl, 
+proc gdk_pango_layout_get_clip_region*(layout: PPangoLayout, x_origin: gint,
+                                       y_origin: gint, index_ranges: Pgint,
+                                       n_ranges: gint): PGdkRegion{.cdecl,
     dynlib: gdklib, importc: "gdk_pango_layout_get_clip_region".}
-proc gdk_pango_attr_stipple_new*(stipple: PGdkBitmap): PPangoAttribute{.cdecl, 
+proc gdk_pango_attr_stipple_new*(stipple: PGdkBitmap): PPangoAttribute{.cdecl,
     dynlib: gdklib, importc: "gdk_pango_attr_stipple_new".}
-proc gdk_pango_attr_embossed_new*(embossed: gboolean): PPangoAttribute{.cdecl, 
+proc gdk_pango_attr_embossed_new*(embossed: gboolean): PPangoAttribute{.cdecl,
     dynlib: gdklib, importc: "gdk_pango_attr_embossed_new".}
-proc gdk_pixbuf_render_threshold_alpha*(pixbuf: PGdkPixbuf, bitmap: PGdkBitmap, 
-                                        src_x: int32, src_y: int32, 
-                                        dest_x: int32, dest_y: int32, 
-                                        width: int32, height: int32, 
-                                        alpha_threshold: int32){.cdecl, 
+proc gdk_pixbuf_render_threshold_alpha*(pixbuf: PGdkPixbuf, bitmap: PGdkBitmap,
+                                        src_x: int32, src_y: int32,
+                                        dest_x: int32, dest_y: int32,
+                                        width: int32, height: int32,
+                                        alpha_threshold: int32){.cdecl,
     dynlib: gdklib, importc: "gdk_pixbuf_render_threshold_alpha".}
-proc gdk_pixbuf_render_to_drawable*(pixbuf: PGdkPixbuf, drawable: PGdkDrawable, 
-                                    gc: PGdkGC, src_x: int32, src_y: int32, 
-                                    dest_x: int32, dest_y: int32, width: int32, 
-                                    height: int32, dither: TGdkRgbDither, 
-                                    x_dither: int32, y_dither: int32){.cdecl, 
+proc gdk_pixbuf_render_to_drawable*(pixbuf: PGdkPixbuf, drawable: PGdkDrawable,
+                                    gc: PGdkGC, src_x: int32, src_y: int32,
+                                    dest_x: int32, dest_y: int32, width: int32,
+                                    height: int32, dither: TGdkRgbDither,
+                                    x_dither: int32, y_dither: int32){.cdecl,
     dynlib: gdklib, importc: "gdk_pixbuf_render_to_drawable".}
-proc gdk_pixbuf_render_to_drawable_alpha*(pixbuf: PGdkPixbuf, 
-    drawable: PGdkDrawable, src_x: int32, src_y: int32, dest_x: int32, 
-    dest_y: int32, width: int32, height: int32, alpha_mode: TGdkPixbufAlphaMode, 
-    alpha_threshold: int32, dither: TGdkRgbDither, x_dither: int32, 
-    y_dither: int32){.cdecl, dynlib: gdklib, 
+proc gdk_pixbuf_render_to_drawable_alpha*(pixbuf: PGdkPixbuf,
+    drawable: PGdkDrawable, src_x: int32, src_y: int32, dest_x: int32,
+    dest_y: int32, width: int32, height: int32, alpha_mode: TGdkPixbufAlphaMode,
+    alpha_threshold: int32, dither: TGdkRgbDither, x_dither: int32,
+    y_dither: int32){.cdecl, dynlib: gdklib,
                       importc: "gdk_pixbuf_render_to_drawable_alpha".}
-proc gdk_pixbuf_render_pixmap_and_mask_for_colormap*(pixbuf: PGdkPixbuf, 
-    colormap: PGdkColormap, n: var PGdkPixmap, nasdfdsafw4e: var PGdkBitmap, 
+proc gdk_pixbuf_render_pixmap_and_mask_for_colormap*(pixbuf: PGdkPixbuf,
+    colormap: PGdkColormap, n: var PGdkPixmap, nasdfdsafw4e: var PGdkBitmap,
     alpha_threshold: int32){.cdecl, dynlib: gdklib, importc: "gdk_pixbuf_render_pixmap_and_mask_for_colormap".}
-proc gdk_pixbuf_get_from_drawable*(dest: PGdkPixbuf, src: PGdkDrawable, 
-                                   cmap: PGdkColormap, src_x: int32, 
-                                   src_y: int32, dest_x: int32, dest_y: int32, 
+proc gdk_pixbuf_get_from_drawable*(dest: PGdkPixbuf, src: PGdkDrawable,
+                                   cmap: PGdkColormap, src_x: int32,
+                                   src_y: int32, dest_x: int32, dest_y: int32,
                                    width: int32, height: int32): PGdkPixbuf{.
     cdecl, dynlib: gdklib, importc: "gdk_pixbuf_get_from_drawable".}
-proc gdk_pixbuf_get_from_image*(dest: PGdkPixbuf, src: PGdkImage, 
-                                cmap: PGdkColormap, src_x: int32, src_y: int32, 
-                                dest_x: int32, dest_y: int32, width: int32, 
-                                height: int32): PGdkPixbuf{.cdecl, 
+proc gdk_pixbuf_get_from_image*(dest: PGdkPixbuf, src: PGdkImage,
+                                cmap: PGdkColormap, src_x: int32, src_y: int32,
+                                dest_x: int32, dest_y: int32, width: int32,
+                                height: int32): PGdkPixbuf{.cdecl,
     dynlib: gdklib, importc: "gdk_pixbuf_get_from_image".}
 proc GDK_TYPE_PIXMAP*(): GType
 proc GDK_PIXMAP*(anObject: Pointer): PGdkPixmap
@@ -2812,85 +2811,85 @@ proc GDK_IS_PIXMAP*(anObject: Pointer): bool
 proc GDK_IS_PIXMAP_CLASS*(klass: Pointer): bool
 proc GDK_PIXMAP_GET_CLASS*(obj: Pointer): PGdkPixmapObjectClass
 proc GDK_PIXMAP_OBJECT*(anObject: Pointer): PGdkPixmapObject
-proc gdk_pixmap_get_type*(): GType{.cdecl, dynlib: gdklib, 
+proc gdk_pixmap_get_type*(): GType{.cdecl, dynlib: gdklib,
                                     importc: "gdk_pixmap_get_type".}
 proc gdk_pixmap_new*(window: PGdkWindow, width: gint, height: gint, depth: gint): PGdkPixmap{.
     cdecl, dynlib: gdklib, importc: "gdk_pixmap_new".}
-proc gdk_bitmap_create_from_data*(window: PGdkWindow, data: cstring, width: gint, 
-                                  height: gint): PGdkBitmap{.cdecl, 
+proc gdk_bitmap_create_from_data*(window: PGdkWindow, data: cstring, width: gint,
+                                  height: gint): PGdkBitmap{.cdecl,
     dynlib: gdklib, importc: "gdk_bitmap_create_from_data".}
-proc gdk_pixmap_create_from_data*(window: PGdkWindow, data: cstring, width: gint, 
-                                  height: gint, depth: gint, fg: PGdkColor, 
-                                  bg: PGdkColor): PGdkPixmap{.cdecl, 
+proc gdk_pixmap_create_from_data*(window: PGdkWindow, data: cstring, width: gint,
+                                  height: gint, depth: gint, fg: PGdkColor,
+                                  bg: PGdkColor): PGdkPixmap{.cdecl,
     dynlib: gdklib, importc: "gdk_pixmap_create_from_data".}
-proc gdk_pixmap_create_from_xpm*(window: PGdkWindow, k: var PGdkBitmap, 
+proc gdk_pixmap_create_from_xpm*(window: PGdkWindow, k: var PGdkBitmap,
                                  transparent_color: PGdkColor, filename: cstring): PGdkPixmap{.
     cdecl, dynlib: gdklib, importc: "gdk_pixmap_create_from_xpm".}
-proc gdk_pixmap_colormap_create_from_xpm*(window: PGdkWindow, 
-    colormap: PGdkColormap, k: var PGdkBitmap, transparent_color: PGdkColor, 
+proc gdk_pixmap_colormap_create_from_xpm*(window: PGdkWindow,
+    colormap: PGdkColormap, k: var PGdkBitmap, transparent_color: PGdkColor,
     filename: cstring): PGdkPixmap{.cdecl, dynlib: gdklib, importc: "gdk_pixmap_colormap_create_from_xpm".}
-proc gdk_pixmap_create_from_xpm_d*(window: PGdkWindow, k: var PGdkBitmap, 
+proc gdk_pixmap_create_from_xpm_d*(window: PGdkWindow, k: var PGdkBitmap,
                                    transparent_color: PGdkColor, data: PPgchar): PGdkPixmap{.
     cdecl, dynlib: gdklib, importc: "gdk_pixmap_create_from_xpm_d".}
-proc gdk_pixmap_colormap_create_from_xpm_d*(window: PGdkWindow, 
-    colormap: PGdkColormap, k: var PGdkBitmap, transparent_color: PGdkColor, 
+proc gdk_pixmap_colormap_create_from_xpm_d*(window: PGdkWindow,
+    colormap: PGdkColormap, k: var PGdkBitmap, transparent_color: PGdkColor,
     data: PPgchar): PGdkPixmap{.cdecl, dynlib: gdklib, importc: "gdk_pixmap_colormap_create_from_xpm_d".}
-proc gdk_pixmap_foreign_new_for_display*(display: PGdkDisplay, 
-    anid: TGdkNativeWindow): PGdkPixmap{.cdecl, dynlib: gdklib, 
+proc gdk_pixmap_foreign_new_for_display*(display: PGdkDisplay,
+    anid: TGdkNativeWindow): PGdkPixmap{.cdecl, dynlib: gdklib,
     importc: "gdk_pixmap_foreign_new_for_display".}
 proc gdk_pixmap_lookup_for_display*(display: PGdkDisplay, anid: TGdkNativeWindow): PGdkPixmap{.
     cdecl, dynlib: gdklib, importc: "gdk_pixmap_lookup_for_display".}
 proc gdk_atom_intern*(atom_name: cstring, only_if_exists: gboolean): TGdkAtom{.
     cdecl, dynlib: gdklib, importc: "gdk_atom_intern".}
-proc gdk_atom_name*(atom: TGdkAtom): cstring{.cdecl, dynlib: gdklib, 
+proc gdk_atom_name*(atom: TGdkAtom): cstring{.cdecl, dynlib: gdklib,
     importc: "gdk_atom_name".}
-proc gdk_property_get*(window: PGdkWindow, `property`: TGdkAtom, 
-                       `type`: TGdkAtom, offset: gulong, length: gulong, 
-                       pdelete: gint, actual_property_type: PGdkAtom, 
-                       actual_format: Pgint, actual_length: Pgint, 
-                       data: PPguchar): gboolean{.cdecl, dynlib: gdklib, 
+proc gdk_property_get*(window: PGdkWindow, `property`: TGdkAtom,
+                       `type`: TGdkAtom, offset: gulong, length: gulong,
+                       pdelete: gint, actual_property_type: PGdkAtom,
+                       actual_format: Pgint, actual_length: Pgint,
+                       data: PPguchar): gboolean{.cdecl, dynlib: gdklib,
     importc: "gdk_property_get".}
-proc gdk_property_change*(window: PGdkWindow, `property`: TGdkAtom, 
-                          `type`: TGdkAtom, format: gint, mode: TGdkPropMode, 
-                          data: Pguchar, nelements: gint){.cdecl, 
+proc gdk_property_change*(window: PGdkWindow, `property`: TGdkAtom,
+                          `type`: TGdkAtom, format: gint, mode: TGdkPropMode,
+                          data: Pguchar, nelements: gint){.cdecl,
     dynlib: gdklib, importc: "gdk_property_change".}
-proc gdk_property_delete*(window: PGdkWindow, `property`: TGdkAtom){.cdecl, 
+proc gdk_property_delete*(window: PGdkWindow, `property`: TGdkAtom){.cdecl,
     dynlib: gdklib, importc: "gdk_property_delete".}
-proc gdk_text_property_to_text_list_for_display*(display: PGdkDisplay, 
-    encoding: TGdkAtom, format: gint, text: Pguchar, length: gint, 
+proc gdk_text_property_to_text_list_for_display*(display: PGdkDisplay,
+    encoding: TGdkAtom, format: gint, text: Pguchar, length: gint,
     t: var PPgchar): gint{.cdecl, dynlib: gdklib, importc: "gdk_text_property_to_text_list_for_display".}
-proc gdk_text_property_to_utf8_list_for_display*(display: PGdkDisplay, 
-    encoding: TGdkAtom, format: gint, text: Pguchar, length: gint, 
+proc gdk_text_property_to_utf8_list_for_display*(display: PGdkDisplay,
+    encoding: TGdkAtom, format: gint, text: Pguchar, length: gint,
     t: var PPgchar): gint{.cdecl, dynlib: gdklib, importc: "gdk_text_property_to_utf8_list_for_display".}
-proc gdk_utf8_to_string_target*(str: cstring): cstring{.cdecl, dynlib: gdklib, 
+proc gdk_utf8_to_string_target*(str: cstring): cstring{.cdecl, dynlib: gdklib,
     importc: "gdk_utf8_to_string_target".}
-proc gdk_string_to_compound_text_for_display*(display: PGdkDisplay, str: cstring, 
+proc gdk_string_to_compound_text_for_display*(display: PGdkDisplay, str: cstring,
     encoding: PGdkAtom, format: Pgint, ctext: PPguchar, length: Pgint): gint{.
     cdecl, dynlib: gdklib, importc: "gdk_string_to_compound_text_for_display".}
-proc gdk_utf8_to_compound_text_for_display*(display: PGdkDisplay, str: cstring, 
+proc gdk_utf8_to_compound_text_for_display*(display: PGdkDisplay, str: cstring,
     encoding: PGdkAtom, format: Pgint, ctext: PPguchar, length: Pgint): gboolean{.
     cdecl, dynlib: gdklib, importc: "gdk_utf8_to_compound_text_for_display".}
-proc gdk_free_text_list*(list: PPgchar){.cdecl, dynlib: gdklib, 
+proc gdk_free_text_list*(list: PPgchar){.cdecl, dynlib: gdklib,
     importc: "gdk_free_text_list".}
-proc gdk_free_compound_text*(ctext: Pguchar){.cdecl, dynlib: gdklib, 
+proc gdk_free_compound_text*(ctext: Pguchar){.cdecl, dynlib: gdklib,
     importc: "gdk_free_compound_text".}
-proc gdk_region_new*(): PGdkRegion{.cdecl, dynlib: gdklib, 
+proc gdk_region_new*(): PGdkRegion{.cdecl, dynlib: gdklib,
                                     importc: "gdk_region_new".}
-proc gdk_region_polygon*(points: PGdkPoint, npoints: gint, 
-                         fill_rule: TGdkFillRule): PGdkRegion{.cdecl, 
+proc gdk_region_polygon*(points: PGdkPoint, npoints: gint,
+                         fill_rule: TGdkFillRule): PGdkRegion{.cdecl,
     dynlib: gdklib, importc: "gdk_region_polygon".}
-proc gdk_region_copy*(region: PGdkRegion): PGdkRegion{.cdecl, dynlib: gdklib, 
+proc gdk_region_copy*(region: PGdkRegion): PGdkRegion{.cdecl, dynlib: gdklib,
     importc: "gdk_region_copy".}
-proc gdk_region_rectangle*(rectangle: PGdkRectangle): PGdkRegion{.cdecl, 
+proc gdk_region_rectangle*(rectangle: PGdkRectangle): PGdkRegion{.cdecl,
     dynlib: gdklib, importc: "gdk_region_rectangle".}
-proc gdk_region_destroy*(region: PGdkRegion){.cdecl, dynlib: gdklib, 
+proc gdk_region_destroy*(region: PGdkRegion){.cdecl, dynlib: gdklib,
     importc: "gdk_region_destroy".}
 proc gdk_region_get_clipbox*(region: PGdkRegion, rectangle: PGdkRectangle){.
     cdecl, dynlib: gdklib, importc: "gdk_region_get_clipbox".}
-proc gdk_region_get_rectangles*(region: PGdkRegion, s: var PGdkRectangle, 
-                                n_rectangles: Pgint){.cdecl, dynlib: gdklib, 
+proc gdk_region_get_rectangles*(region: PGdkRegion, s: var PGdkRectangle,
+                                n_rectangles: Pgint){.cdecl, dynlib: gdklib,
     importc: "gdk_region_get_rectangles".}
-proc gdk_region_empty*(region: PGdkRegion): gboolean{.cdecl, dynlib: gdklib, 
+proc gdk_region_empty*(region: PGdkRegion): gboolean{.cdecl, dynlib: gdklib,
     importc: "gdk_region_empty".}
 proc gdk_region_equal*(region1: PGdkRegion, region2: PGdkRegion): gboolean{.
     cdecl, dynlib: gdklib, importc: "gdk_region_equal".}
@@ -2898,62 +2897,62 @@ proc gdk_region_point_in*(region: PGdkRegion, x: int32, y: int32): gboolean{.
     cdecl, dynlib: gdklib, importc: "gdk_region_point_in".}
 proc gdk_region_rect_in*(region: PGdkRegion, rect: PGdkRectangle): TGdkOverlapType{.
     cdecl, dynlib: gdklib, importc: "gdk_region_rect_in".}
-proc gdk_region_offset*(region: PGdkRegion, dx: gint, dy: gint){.cdecl, 
+proc gdk_region_offset*(region: PGdkRegion, dx: gint, dy: gint){.cdecl,
     dynlib: gdklib, importc: "gdk_region_offset".}
-proc gdk_region_shrink*(region: PGdkRegion, dx: gint, dy: gint){.cdecl, 
+proc gdk_region_shrink*(region: PGdkRegion, dx: gint, dy: gint){.cdecl,
     dynlib: gdklib, importc: "gdk_region_shrink".}
 proc gdk_region_union_with_rect*(region: PGdkRegion, rect: PGdkRectangle){.
     cdecl, dynlib: gdklib, importc: "gdk_region_union_with_rect".}
-proc gdk_region_intersect*(source1: PGdkRegion, source2: PGdkRegion){.cdecl, 
+proc gdk_region_intersect*(source1: PGdkRegion, source2: PGdkRegion){.cdecl,
     dynlib: gdklib, importc: "gdk_region_intersect".}
-proc gdk_region_union*(source1: PGdkRegion, source2: PGdkRegion){.cdecl, 
+proc gdk_region_union*(source1: PGdkRegion, source2: PGdkRegion){.cdecl,
     dynlib: gdklib, importc: "gdk_region_union".}
-proc gdk_region_subtract*(source1: PGdkRegion, source2: PGdkRegion){.cdecl, 
+proc gdk_region_subtract*(source1: PGdkRegion, source2: PGdkRegion){.cdecl,
     dynlib: gdklib, importc: "gdk_region_subtract".}
-proc gdk_region_xor*(source1: PGdkRegion, source2: PGdkRegion){.cdecl, 
+proc gdk_region_xor*(source1: PGdkRegion, source2: PGdkRegion){.cdecl,
     dynlib: gdklib, importc: "gdk_region_xor".}
-proc gdk_region_spans_intersect_foreach*(region: PGdkRegion, spans: PGdkSpan, 
+proc gdk_region_spans_intersect_foreach*(region: PGdkRegion, spans: PGdkSpan,
     n_spans: int32, sorted: gboolean, `function`: TGdkSpanFunc, data: gpointer){.
     cdecl, dynlib: gdklib, importc: "gdk_region_spans_intersect_foreach".}
-proc gdk_rgb_find_color*(colormap: PGdkColormap, color: PGdkColor){.cdecl, 
+proc gdk_rgb_find_color*(colormap: PGdkColormap, color: PGdkColor){.cdecl,
     dynlib: gdklib, importc: "gdk_rgb_find_color".}
-proc gdk_draw_rgb_image*(drawable: PGdkDrawable, gc: PGdkGC, x: gint, y: gint, 
-                         width: gint, height: gint, dith: TGdkRgbDither, 
-                         rgb_buf: Pguchar, rowstride: gint){.cdecl, 
+proc gdk_draw_rgb_image*(drawable: PGdkDrawable, gc: PGdkGC, x: gint, y: gint,
+                         width: gint, height: gint, dith: TGdkRgbDither,
+                         rgb_buf: Pguchar, rowstride: gint){.cdecl,
     dynlib: gdklib, importc: "gdk_draw_rgb_image".}
-proc gdk_draw_rgb_image_dithalign*(drawable: PGdkDrawable, gc: PGdkGC, x: gint, 
-                                   y: gint, width: gint, height: gint, 
-                                   dith: TGdkRgbDither, rgb_buf: Pguchar, 
+proc gdk_draw_rgb_image_dithalign*(drawable: PGdkDrawable, gc: PGdkGC, x: gint,
+                                   y: gint, width: gint, height: gint,
+                                   dith: TGdkRgbDither, rgb_buf: Pguchar,
                                    rowstride: gint, xdith: gint, ydith: gint){.
     cdecl, dynlib: gdklib, importc: "gdk_draw_rgb_image_dithalign".}
-proc gdk_draw_rgb_32_image*(drawable: PGdkDrawable, gc: PGdkGC, x: gint, 
-                            y: gint, width: gint, height: gint, 
+proc gdk_draw_rgb_32_image*(drawable: PGdkDrawable, gc: PGdkGC, x: gint,
+                            y: gint, width: gint, height: gint,
                             dith: TGdkRgbDither, buf: Pguchar, rowstride: gint){.
     cdecl, dynlib: gdklib, importc: "gdk_draw_rgb_32_image".}
-proc gdk_draw_rgb_32_image_dithalign*(drawable: PGdkDrawable, gc: PGdkGC, 
-                                      x: gint, y: gint, width: gint, 
-                                      height: gint, dith: TGdkRgbDither, 
-                                      buf: Pguchar, rowstride: gint, 
-                                      xdith: gint, ydith: gint){.cdecl, 
+proc gdk_draw_rgb_32_image_dithalign*(drawable: PGdkDrawable, gc: PGdkGC,
+                                      x: gint, y: gint, width: gint,
+                                      height: gint, dith: TGdkRgbDither,
+                                      buf: Pguchar, rowstride: gint,
+                                      xdith: gint, ydith: gint){.cdecl,
     dynlib: gdklib, importc: "gdk_draw_rgb_32_image_dithalign".}
-proc gdk_draw_gray_image*(drawable: PGdkDrawable, gc: PGdkGC, x: gint, y: gint, 
-                          width: gint, height: gint, dith: TGdkRgbDither, 
-                          buf: Pguchar, rowstride: gint){.cdecl, dynlib: gdklib, 
+proc gdk_draw_gray_image*(drawable: PGdkDrawable, gc: PGdkGC, x: gint, y: gint,
+                          width: gint, height: gint, dith: TGdkRgbDither,
+                          buf: Pguchar, rowstride: gint){.cdecl, dynlib: gdklib,
     importc: "gdk_draw_gray_image".}
-proc gdk_draw_indexed_image*(drawable: PGdkDrawable, gc: PGdkGC, x: gint, 
-                             y: gint, width: gint, height: gint, 
-                             dith: TGdkRgbDither, buf: Pguchar, rowstride: gint, 
-                             cmap: PGdkRgbCmap){.cdecl, dynlib: gdklib, 
+proc gdk_draw_indexed_image*(drawable: PGdkDrawable, gc: PGdkGC, x: gint,
+                             y: gint, width: gint, height: gint,
+                             dith: TGdkRgbDither, buf: Pguchar, rowstride: gint,
+                             cmap: PGdkRgbCmap){.cdecl, dynlib: gdklib,
     importc: "gdk_draw_indexed_image".}
-proc gdk_rgb_cmap_new*(colors: Pguint32, n_colors: gint): PGdkRgbCmap{.cdecl, 
+proc gdk_rgb_cmap_new*(colors: Pguint32, n_colors: gint): PGdkRgbCmap{.cdecl,
     dynlib: gdklib, importc: "gdk_rgb_cmap_new".}
-proc gdk_rgb_cmap_free*(cmap: PGdkRgbCmap){.cdecl, dynlib: gdklib, 
+proc gdk_rgb_cmap_free*(cmap: PGdkRgbCmap){.cdecl, dynlib: gdklib,
     importc: "gdk_rgb_cmap_free".}
-proc gdk_rgb_set_verbose*(verbose: gboolean){.cdecl, dynlib: gdklib, 
+proc gdk_rgb_set_verbose*(verbose: gboolean){.cdecl, dynlib: gdklib,
     importc: "gdk_rgb_set_verbose".}
-proc gdk_rgb_set_install*(install: gboolean){.cdecl, dynlib: gdklib, 
+proc gdk_rgb_set_install*(install: gboolean){.cdecl, dynlib: gdklib,
     importc: "gdk_rgb_set_install".}
-proc gdk_rgb_set_min_colors*(min_colors: gint){.cdecl, dynlib: gdklib, 
+proc gdk_rgb_set_min_colors*(min_colors: gint){.cdecl, dynlib: gdklib,
     importc: "gdk_rgb_set_min_colors".}
 proc GDK_TYPE_DISPLAY*(): GType
 proc GDK_DISPLAY_OBJECT*(anObject: pointer): PGdkDisplay
@@ -2961,46 +2960,46 @@ proc GDK_DISPLAY_CLASS*(klass: pointer): PGdkDisplayClass
 proc GDK_IS_DISPLAY*(anObject: pointer): bool
 proc GDK_IS_DISPLAY_CLASS*(klass: pointer): bool
 proc GDK_DISPLAY_GET_CLASS*(obj: pointer): PGdkDisplayClass
-proc gdk_display_open*(display_name: cstring): PGdkDisplay{.cdecl, 
+proc gdk_display_open*(display_name: cstring): PGdkDisplay{.cdecl,
     dynlib: gdklib, importc: "gdk_display_open".}
-proc gdk_display_get_name*(display: PGdkDisplay): cstring{.cdecl, dynlib: gdklib, 
+proc gdk_display_get_name*(display: PGdkDisplay): cstring{.cdecl, dynlib: gdklib,
     importc: "gdk_display_get_name".}
-proc gdk_display_get_n_screens*(display: PGdkDisplay): gint{.cdecl, 
+proc gdk_display_get_n_screens*(display: PGdkDisplay): gint{.cdecl,
     dynlib: gdklib, importc: "gdk_display_get_n_screens".}
 proc gdk_display_get_screen*(display: PGdkDisplay, screen_num: gint): PGdkScreen{.
     cdecl, dynlib: gdklib, importc: "gdk_display_get_screen".}
-proc gdk_display_get_default_screen*(display: PGdkDisplay): PGdkScreen{.cdecl, 
+proc gdk_display_get_default_screen*(display: PGdkDisplay): PGdkScreen{.cdecl,
     dynlib: gdklib, importc: "gdk_display_get_default_screen".}
-proc gdk_display_pointer_ungrab*(display: PGdkDisplay, time: guint32){.cdecl, 
+proc gdk_display_pointer_ungrab*(display: PGdkDisplay, time: guint32){.cdecl,
     dynlib: gdklib, importc: "gdk_display_pointer_ungrab".}
-proc gdk_display_keyboard_ungrab*(display: PGdkDisplay, time: guint32){.cdecl, 
+proc gdk_display_keyboard_ungrab*(display: PGdkDisplay, time: guint32){.cdecl,
     dynlib: gdklib, importc: "gdk_display_keyboard_ungrab".}
-proc gdk_display_pointer_is_grabbed*(display: PGdkDisplay): gboolean{.cdecl, 
+proc gdk_display_pointer_is_grabbed*(display: PGdkDisplay): gboolean{.cdecl,
     dynlib: gdklib, importc: "gdk_display_pointer_is_grabbed".}
-proc gdk_display_beep*(display: PGdkDisplay){.cdecl, dynlib: gdklib, 
+proc gdk_display_beep*(display: PGdkDisplay){.cdecl, dynlib: gdklib,
     importc: "gdk_display_beep".}
-proc gdk_display_sync*(display: PGdkDisplay){.cdecl, dynlib: gdklib, 
+proc gdk_display_sync*(display: PGdkDisplay){.cdecl, dynlib: gdklib,
     importc: "gdk_display_sync".}
-proc gdk_display_close*(display: PGdkDisplay){.cdecl, dynlib: gdklib, 
+proc gdk_display_close*(display: PGdkDisplay){.cdecl, dynlib: gdklib,
     importc: "gdk_display_close".}
-proc gdk_display_list_devices*(display: PGdkDisplay): PGList{.cdecl, 
+proc gdk_display_list_devices*(display: PGdkDisplay): PGList{.cdecl,
     dynlib: gdklib, importc: "gdk_display_list_devices".}
-proc gdk_display_get_event*(display: PGdkDisplay): PGdkEvent{.cdecl, 
+proc gdk_display_get_event*(display: PGdkDisplay): PGdkEvent{.cdecl,
     dynlib: gdklib, importc: "gdk_display_get_event".}
-proc gdk_display_peek_event*(display: PGdkDisplay): PGdkEvent{.cdecl, 
+proc gdk_display_peek_event*(display: PGdkDisplay): PGdkEvent{.cdecl,
     dynlib: gdklib, importc: "gdk_display_peek_event".}
-proc gdk_display_put_event*(display: PGdkDisplay, event: PGdkEvent){.cdecl, 
+proc gdk_display_put_event*(display: PGdkDisplay, event: PGdkEvent){.cdecl,
     dynlib: gdklib, importc: "gdk_display_put_event".}
-proc gdk_display_add_client_message_filter*(display: PGdkDisplay, 
-    message_type: TGdkAtom, func: TGdkFilterFunc, data: gpointer){.cdecl, 
+proc gdk_display_add_client_message_filter*(display: PGdkDisplay,
+    message_type: TGdkAtom, func: TGdkFilterFunc, data: gpointer){.cdecl,
     dynlib: gdklib, importc: "gdk_display_add_client_message_filter".}
 proc gdk_display_set_double_click_time*(display: PGdkDisplay, msec: guint){.
     cdecl, dynlib: gdklib, importc: "gdk_display_set_double_click_time".}
 proc gdk_display_set_sm_client_id*(display: PGdkDisplay, sm_client_id: cstring){.
     cdecl, dynlib: gdklib, importc: "gdk_display_set_sm_client_id".}
-proc gdk_set_default_display*(display: PGdkDisplay){.cdecl, dynlib: gdklib, 
+proc gdk_set_default_display*(display: PGdkDisplay){.cdecl, dynlib: gdklib,
     importc: "gdk_set_default_display".}
-proc gdk_get_default_display*(): PGdkDisplay{.cdecl, dynlib: gdklib, 
+proc gdk_get_default_display*(): PGdkDisplay{.cdecl, dynlib: gdklib,
     importc: "gdk_get_default_display".}
 proc GDK_TYPE_SCREEN*(): GType
 proc GDK_SCREEN*(anObject: Pointer): PGdkScreen
@@ -3008,45 +3007,45 @@ proc GDK_SCREEN_CLASS*(klass: Pointer): PGdkScreenClass
 proc GDK_IS_SCREEN*(anObject: Pointer): bool
 proc GDK_IS_SCREEN_CLASS*(klass: Pointer): bool
 proc GDK_SCREEN_GET_CLASS*(obj: Pointer): PGdkScreenClass
-proc gdk_screen_get_default_colormap*(screen: PGdkScreen): PGdkColormap{.cdecl, 
+proc gdk_screen_get_default_colormap*(screen: PGdkScreen): PGdkColormap{.cdecl,
     dynlib: gdklib, importc: "gdk_screen_get_default_colormap".}
 proc gdk_screen_set_default_colormap*(screen: PGdkScreen, colormap: PGdkColormap){.
     cdecl, dynlib: gdklib, importc: "gdk_screen_set_default_colormap".}
-proc gdk_screen_get_system_colormap*(screen: PGdkScreen): PGdkColormap{.cdecl, 
+proc gdk_screen_get_system_colormap*(screen: PGdkScreen): PGdkColormap{.cdecl,
     dynlib: gdklib, importc: "gdk_screen_get_system_colormap".}
-proc gdk_screen_get_system_visual*(screen: PGdkScreen): PGdkVisual{.cdecl, 
+proc gdk_screen_get_system_visual*(screen: PGdkScreen): PGdkVisual{.cdecl,
     dynlib: gdklib, importc: "gdk_screen_get_system_visual".}
-proc gdk_screen_get_rgb_colormap*(screen: PGdkScreen): PGdkColormap{.cdecl, 
+proc gdk_screen_get_rgb_colormap*(screen: PGdkScreen): PGdkColormap{.cdecl,
     dynlib: gdklib, importc: "gdk_screen_get_rgb_colormap".}
-proc gdk_screen_get_rgb_visual*(screen: PGdkScreen): PGdkVisual{.cdecl, 
+proc gdk_screen_get_rgb_visual*(screen: PGdkScreen): PGdkVisual{.cdecl,
     dynlib: gdklib, importc: "gdk_screen_get_rgb_visual".}
-proc gdk_screen_get_root_window*(screen: PGdkScreen): PGdkWindow{.cdecl, 
+proc gdk_screen_get_root_window*(screen: PGdkScreen): PGdkWindow{.cdecl,
     dynlib: gdklib, importc: "gdk_screen_get_root_window".}
-proc gdk_screen_get_display*(screen: PGdkScreen): PGdkDisplay{.cdecl, 
+proc gdk_screen_get_display*(screen: PGdkScreen): PGdkDisplay{.cdecl,
     dynlib: gdklib, importc: "gdk_screen_get_display".}
-proc gdk_screen_get_number*(screen: PGdkScreen): gint{.cdecl, dynlib: gdklib, 
+proc gdk_screen_get_number*(screen: PGdkScreen): gint{.cdecl, dynlib: gdklib,
     importc: "gdk_screen_get_number".}
-proc gdk_screen_get_window_at_pointer*(screen: PGdkScreen, win_x: Pgint, 
-                                       win_y: Pgint): PGdkWindow{.cdecl, 
+proc gdk_screen_get_window_at_pointer*(screen: PGdkScreen, win_x: Pgint,
+                                       win_y: Pgint): PGdkWindow{.cdecl,
     dynlib: gdklib, importc: "gdk_screen_get_window_at_pointer".}
-proc gdk_screen_get_width*(screen: PGdkScreen): gint{.cdecl, dynlib: gdklib, 
+proc gdk_screen_get_width*(screen: PGdkScreen): gint{.cdecl, dynlib: gdklib,
     importc: "gdk_screen_get_width".}
-proc gdk_screen_get_height*(screen: PGdkScreen): gint{.cdecl, dynlib: gdklib, 
+proc gdk_screen_get_height*(screen: PGdkScreen): gint{.cdecl, dynlib: gdklib,
     importc: "gdk_screen_get_height".}
-proc gdk_screen_get_width_mm*(screen: PGdkScreen): gint{.cdecl, dynlib: gdklib, 
+proc gdk_screen_get_width_mm*(screen: PGdkScreen): gint{.cdecl, dynlib: gdklib,
     importc: "gdk_screen_get_width_mm".}
-proc gdk_screen_get_height_mm*(screen: PGdkScreen): gint{.cdecl, dynlib: gdklib, 
+proc gdk_screen_get_height_mm*(screen: PGdkScreen): gint{.cdecl, dynlib: gdklib,
     importc: "gdk_screen_get_height_mm".}
-proc gdk_screen_close*(screen: PGdkScreen){.cdecl, dynlib: gdklib, 
+proc gdk_screen_close*(screen: PGdkScreen){.cdecl, dynlib: gdklib,
     importc: "gdk_screen_close".}
-proc gdk_screen_list_visuals*(screen: PGdkScreen): PGList{.cdecl, 
+proc gdk_screen_list_visuals*(screen: PGdkScreen): PGList{.cdecl,
     dynlib: gdklib, importc: "gdk_screen_list_visuals".}
-proc gdk_screen_get_toplevel_windows*(screen: PGdkScreen): PGList{.cdecl, 
+proc gdk_screen_get_toplevel_windows*(screen: PGdkScreen): PGList{.cdecl,
     dynlib: gdklib, importc: "gdk_screen_get_toplevel_windows".}
-proc gdk_screen_get_n_monitors*(screen: PGdkScreen): gint{.cdecl, 
+proc gdk_screen_get_n_monitors*(screen: PGdkScreen): gint{.cdecl,
     dynlib: gdklib, importc: "gdk_screen_get_n_monitors".}
-proc gdk_screen_get_monitor_geometry*(screen: PGdkScreen, monitor_num: gint, 
-                                      dest: PGdkRectangle){.cdecl, 
+proc gdk_screen_get_monitor_geometry*(screen: PGdkScreen, monitor_num: gint,
+                                      dest: PGdkRectangle){.cdecl,
     dynlib: gdklib, importc: "gdk_screen_get_monitor_geometry".}
 proc gdk_screen_get_monitor_at_point*(screen: PGdkScreen, x: gint, y: gint): gint{.
     cdecl, dynlib: gdklib, importc: "gdk_screen_get_monitor_at_point".}
@@ -3054,7 +3053,7 @@ proc gdk_screen_get_monitor_at_window*(screen: PGdkScreen, window: PGdkWindow):
     cdecl, dynlib: gdklib, importc: "gdk_screen_get_monitor_at_window".}
 proc gdk_screen_broadcast_client_message*(screen: PGdkScreen, event: PGdkEvent){.
     cdecl, dynlib: gdklib, importc: "gdk_screen_broadcast_client_message".}
-proc gdk_get_default_screen*(): PGdkScreen{.cdecl, dynlib: gdklib, 
+proc gdk_get_default_screen*(): PGdkScreen{.cdecl, dynlib: gdklib,
     importc: "gdk_get_default_screen".}
 proc gdk_screen_get_setting*(screen: PGdkScreen, name: cstring, value: PGValue): gboolean{.
     cdecl, dynlib: gdklib, importc: "gdk_screen_get_setting".}
@@ -3074,22 +3073,22 @@ proc GDK_SELECTION_TYPE_INTEGER*(): TGdkAtom
 proc GDK_SELECTION_TYPE_PIXMAP*(): TGdkAtom
 proc GDK_SELECTION_TYPE_WINDOW*(): TGdkAtom
 proc GDK_SELECTION_TYPE_STRING*(): TGdkAtom
-proc gdk_selection_owner_set_for_display*(display: PGdkDisplay, 
+proc gdk_selection_owner_set_for_display*(display: PGdkDisplay,
     owner: PGdkWindow, selection: TGdkAtom, time: guint32, send_event: gboolean): gboolean{.
     cdecl, dynlib: gdklib, importc: "gdk_selection_owner_set_for_display".}
-proc gdk_selection_owner_get_for_display*(display: PGdkDisplay, 
+proc gdk_selection_owner_get_for_display*(display: PGdkDisplay,
     selection: TGdkAtom): PGdkWindow{.cdecl, dynlib: gdklib, importc: "gdk_selection_owner_get_for_display".}
-proc gdk_selection_convert*(requestor: PGdkWindow, selection: TGdkAtom, 
-                            target: TGdkAtom, time: guint32){.cdecl, 
+proc gdk_selection_convert*(requestor: PGdkWindow, selection: TGdkAtom,
+                            target: TGdkAtom, time: guint32){.cdecl,
     dynlib: gdklib, importc: "gdk_selection_convert".}
-proc gdk_selection_property_get*(requestor: PGdkWindow, data: PPguchar, 
+proc gdk_selection_property_get*(requestor: PGdkWindow, data: PPguchar,
                                  prop_type: PGdkAtom, prop_format: Pgint): gboolean{.
     cdecl, dynlib: gdklib, importc: "gdk_selection_property_get".}
-proc gdk_selection_send_notify_for_display*(display: PGdkDisplay, 
-    requestor: guint32, selection: TGdkAtom, target: TGdkAtom, 
-    `property`: TGdkAtom, time: guint32){.cdecl, dynlib: gdklib, 
+proc gdk_selection_send_notify_for_display*(display: PGdkDisplay,
+    requestor: guint32, selection: TGdkAtom, target: TGdkAtom,
+    `property`: TGdkAtom, time: guint32){.cdecl, dynlib: gdklib,
     importc: "gdk_selection_send_notify_for_display".}
-const 
+const
   GDK_CURRENT_TIME* = 0
   GDK_PARENT_RELATIVE* = 1
   GDK_OK* = 0
@@ -3131,9 +3130,9 @@ proc GDK_VISUAL_CLASS*(klass: Pointer): PGdkVisualClass
 proc GDK_IS_VISUAL*(anObject: Pointer): bool
 proc GDK_IS_VISUAL_CLASS*(klass: Pointer): bool
 proc GDK_VISUAL_GET_CLASS*(obj: Pointer): PGdkVisualClass
-proc gdk_visual_get_type*(): GType{.cdecl, dynlib: gdklib, 
+proc gdk_visual_get_type*(): GType{.cdecl, dynlib: gdklib,
                                     importc: "gdk_visual_get_type".}
-const 
+const
   GDK_WA_TITLE* = 1 shl 1
   GDK_WA_X* = 1 shl 2
   GDK_WA_Y* = 1 shl 3
@@ -3182,776 +3181,776 @@ proc GDK_IS_WINDOW*(anObject: Pointer): bool
 proc GDK_IS_WINDOW_CLASS*(klass: Pointer): bool
 proc GDK_WINDOW_GET_CLASS*(obj: Pointer): PGdkWindowObjectClass
 proc GDK_WINDOW_OBJECT*(anObject: Pointer): PGdkWindowObject
-const 
-  bm_TGdkWindowObject_guffaw_gravity* = 0x00000001
-  bp_TGdkWindowObject_guffaw_gravity* = 0
-  bm_TGdkWindowObject_input_only* = 0x00000002
-  bp_TGdkWindowObject_input_only* = 1
-  bm_TGdkWindowObject_modal_hint* = 0x00000004
-  bp_TGdkWindowObject_modal_hint* = 2
-  bm_TGdkWindowObject_destroyed* = 0x00000018
-  bp_TGdkWindowObject_destroyed* = 3
+const
+  bm_TGdkWindowObject_guffaw_gravity* = 0x00000001'i16
+  bp_TGdkWindowObject_guffaw_gravity* = 0'i16
+  bm_TGdkWindowObject_input_only* = 0x00000002'i16
+  bp_TGdkWindowObject_input_only* = 1'i16
+  bm_TGdkWindowObject_modal_hint* = 0x00000004'i16
+  bp_TGdkWindowObject_modal_hint* = 2'i16
+  bm_TGdkWindowObject_destroyed* = 0x00000018'i16
+  bp_TGdkWindowObject_destroyed* = 3'i16
 
 proc GdkWindowObject_guffaw_gravity*(a: var TGdkWindowObject): guint
-proc GdkWindowObject_set_guffaw_gravity*(a: var TGdkWindowObject, 
+proc GdkWindowObject_set_guffaw_gravity*(a: var TGdkWindowObject,
     `guffaw_gravity`: guint)
 proc GdkWindowObject_input_only*(a: var TGdkWindowObject): guint
-proc GdkWindowObject_set_input_only*(a: var TGdkWindowObject, 
+proc GdkWindowObject_set_input_only*(a: var TGdkWindowObject,
                                      `input_only`: guint)
 proc GdkWindowObject_modal_hint*(a: var TGdkWindowObject): guint
-proc GdkWindowObject_set_modal_hint*(a: var TGdkWindowObject, 
+proc GdkWindowObject_set_modal_hint*(a: var TGdkWindowObject,
                                      `modal_hint`: guint)
 proc GdkWindowObject_destroyed*(a: var TGdkWindowObject): guint
 proc GdkWindowObject_set_destroyed*(a: var TGdkWindowObject, `destroyed`: guint)
-proc gdk_window_object_get_type*(): GType{.cdecl, dynlib: gdklib, 
+proc gdk_window_object_get_type*(): GType{.cdecl, dynlib: gdklib,
     importc: "gdk_window_object_get_type".}
-proc gdk_window_new*(parent: PGdkWindow, attributes: PGdkWindowAttr, 
-                     attributes_mask: gint): PGdkWindow{.cdecl, dynlib: gdklib, 
+proc gdk_window_new*(parent: PGdkWindow, attributes: PGdkWindowAttr,
+                     attributes_mask: gint): PGdkWindow{.cdecl, dynlib: gdklib,
     importc: "gdk_window_new".}
-proc gdk_window_destroy*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_destroy*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_destroy".}
-proc gdk_window_get_window_type*(window: PGdkWindow): TGdkWindowType{.cdecl, 
+proc gdk_window_get_window_type*(window: PGdkWindow): TGdkWindowType{.cdecl,
     dynlib: gdklib, importc: "gdk_window_get_window_type".}
-proc gdk_window_at_pointer*(win_x: Pgint, win_y: Pgint): PGdkWindow{.cdecl, 
+proc gdk_window_at_pointer*(win_x: Pgint, win_y: Pgint): PGdkWindow{.cdecl,
     dynlib: gdklib, importc: "gdk_window_at_pointer".}
-proc gdk_window_show*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_show*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_show".}
-proc gdk_window_hide*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_hide*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_hide".}
-proc gdk_window_withdraw*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_withdraw*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_withdraw".}
-proc gdk_window_show_unraised*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_show_unraised*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_show_unraised".}
-proc gdk_window_move*(window: PGdkWindow, x: gint, y: gint){.cdecl, 
+proc gdk_window_move*(window: PGdkWindow, x: gint, y: gint){.cdecl,
     dynlib: gdklib, importc: "gdk_window_move".}
-proc gdk_window_resize*(window: PGdkWindow, width: gint, height: gint){.cdecl, 
+proc gdk_window_resize*(window: PGdkWindow, width: gint, height: gint){.cdecl,
     dynlib: gdklib, importc: "gdk_window_resize".}
-proc gdk_window_move_resize*(window: PGdkWindow, x: gint, y: gint, width: gint, 
-                             height: gint){.cdecl, dynlib: gdklib, 
+proc gdk_window_move_resize*(window: PGdkWindow, x: gint, y: gint, width: gint,
+                             height: gint){.cdecl, dynlib: gdklib,
     importc: "gdk_window_move_resize".}
-proc gdk_window_reparent*(window: PGdkWindow, new_parent: PGdkWindow, x: gint, 
-                          y: gint){.cdecl, dynlib: gdklib, 
+proc gdk_window_reparent*(window: PGdkWindow, new_parent: PGdkWindow, x: gint,
+                          y: gint){.cdecl, dynlib: gdklib,
                                     importc: "gdk_window_reparent".}
-proc gdk_window_clear*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_clear*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_clear".}
-proc gdk_window_clear_area*(window: PGdkWindow, x: gint, y: gint, width: gint, 
-                            height: gint){.cdecl, dynlib: gdklib, 
+proc gdk_window_clear_area*(window: PGdkWindow, x: gint, y: gint, width: gint,
+                            height: gint){.cdecl, dynlib: gdklib,
     importc: "gdk_window_clear_area".}
-proc gdk_window_clear_area_e*(window: PGdkWindow, x: gint, y: gint, width: gint, 
-                              height: gint){.cdecl, dynlib: gdklib, 
+proc gdk_window_clear_area_e*(window: PGdkWindow, x: gint, y: gint, width: gint,
+                              height: gint){.cdecl, dynlib: gdklib,
     importc: "gdk_window_clear_area_e".}
-proc gdk_window_raise*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_raise*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_raise".}
-proc gdk_window_lower*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_lower*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_lower".}
-proc gdk_window_focus*(window: PGdkWindow, timestamp: guint32){.cdecl, 
+proc gdk_window_focus*(window: PGdkWindow, timestamp: guint32){.cdecl,
     dynlib: gdklib, importc: "gdk_window_focus".}
-proc gdk_window_set_user_data*(window: PGdkWindow, user_data: gpointer){.cdecl, 
+proc gdk_window_set_user_data*(window: PGdkWindow, user_data: gpointer){.cdecl,
     dynlib: gdklib, importc: "gdk_window_set_user_data".}
-proc gdk_window_set_override_redirect*(window: PGdkWindow, 
-                                       override_redirect: gboolean){.cdecl, 
+proc gdk_window_set_override_redirect*(window: PGdkWindow,
+                                       override_redirect: gboolean){.cdecl,
     dynlib: gdklib, importc: "gdk_window_set_override_redirect".}
-proc gdk_window_add_filter*(window: PGdkWindow, `function`: TGdkFilterFunc, 
-                            data: gpointer){.cdecl, dynlib: gdklib, 
+proc gdk_window_add_filter*(window: PGdkWindow, `function`: TGdkFilterFunc,
+                            data: gpointer){.cdecl, dynlib: gdklib,
     importc: "gdk_window_add_filter".}
-proc gdk_window_remove_filter*(window: PGdkWindow, `function`: TGdkFilterFunc, 
-                               data: gpointer){.cdecl, dynlib: gdklib, 
+proc gdk_window_remove_filter*(window: PGdkWindow, `function`: TGdkFilterFunc,
+                               data: gpointer){.cdecl, dynlib: gdklib,
     importc: "gdk_window_remove_filter".}
-proc gdk_window_scroll*(window: PGdkWindow, dx: gint, dy: gint){.cdecl, 
+proc gdk_window_scroll*(window: PGdkWindow, dx: gint, dy: gint){.cdecl,
     dynlib: gdklib, importc: "gdk_window_scroll".}
-proc gdk_window_shape_combine_mask*(window: PGdkWindow, mask: PGdkBitmap, 
-                                    x: gint, y: gint){.cdecl, dynlib: gdklib, 
+proc gdk_window_shape_combine_mask*(window: PGdkWindow, mask: PGdkBitmap,
+                                    x: gint, y: gint){.cdecl, dynlib: gdklib,
     importc: "gdk_window_shape_combine_mask".}
-proc gdk_window_shape_combine_region*(window: PGdkWindow, 
-                                      shape_region: PGdkRegion, offset_x: gint, 
-                                      offset_y: gint){.cdecl, dynlib: gdklib, 
+proc gdk_window_shape_combine_region*(window: PGdkWindow,
+                                      shape_region: PGdkRegion, offset_x: gint,
+                                      offset_y: gint){.cdecl, dynlib: gdklib,
     importc: "gdk_window_shape_combine_region".}
-proc gdk_window_set_child_shapes*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_set_child_shapes*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_set_child_shapes".}
-proc gdk_window_merge_child_shapes*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_merge_child_shapes*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_merge_child_shapes".}
-proc gdk_window_is_visible*(window: PGdkWindow): gboolean{.cdecl, 
+proc gdk_window_is_visible*(window: PGdkWindow): gboolean{.cdecl,
     dynlib: gdklib, importc: "gdk_window_is_visible".}
-proc gdk_window_is_viewable*(window: PGdkWindow): gboolean{.cdecl, 
+proc gdk_window_is_viewable*(window: PGdkWindow): gboolean{.cdecl,
     dynlib: gdklib, importc: "gdk_window_is_viewable".}
-proc gdk_window_get_state*(window: PGdkWindow): TGdkWindowState{.cdecl, 
+proc gdk_window_get_state*(window: PGdkWindow): TGdkWindowState{.cdecl,
     dynlib: gdklib, importc: "gdk_window_get_state".}
 proc gdk_window_set_static_gravities*(window: PGdkWindow, use_static: gboolean): gboolean{.
     cdecl, dynlib: gdklib, importc: "gdk_window_set_static_gravities".}
-proc gdk_window_foreign_new_for_display*(display: PGdkDisplay, 
-    anid: TGdkNativeWindow): PGdkWindow{.cdecl, dynlib: gdklib, 
+proc gdk_window_foreign_new_for_display*(display: PGdkDisplay,
+    anid: TGdkNativeWindow): PGdkWindow{.cdecl, dynlib: gdklib,
     importc: "gdk_window_foreign_new_for_display".}
 proc gdk_window_lookup_for_display*(display: PGdkDisplay, anid: TGdkNativeWindow): PGdkWindow{.
     cdecl, dynlib: gdklib, importc: "gdk_window_lookup_for_display".}
 proc gdk_window_set_type_hint*(window: PGdkWindow, hint: TGdkWindowTypeHint){.
     cdecl, dynlib: gdklib, importc: "gdk_window_set_type_hint".}
-proc gdk_window_set_modal_hint*(window: PGdkWindow, modal: gboolean){.cdecl, 
+proc gdk_window_set_modal_hint*(window: PGdkWindow, modal: gboolean){.cdecl,
     dynlib: gdklib, importc: "gdk_window_set_modal_hint".}
-proc gdk_window_set_geometry_hints*(window: PGdkWindow, geometry: PGdkGeometry, 
-                                    geom_mask: TGdkWindowHints){.cdecl, 
+proc gdk_window_set_geometry_hints*(window: PGdkWindow, geometry: PGdkGeometry,
+                                    geom_mask: TGdkWindowHints){.cdecl,
     dynlib: gdklib, importc: "gdk_window_set_geometry_hints".}
-proc gdk_set_sm_client_id*(sm_client_id: cstring){.cdecl, dynlib: gdklib, 
+proc gdk_set_sm_client_id*(sm_client_id: cstring){.cdecl, dynlib: gdklib,
     importc: "gdk_set_sm_client_id".}
 proc gdk_window_begin_paint_rect*(window: PGdkWindow, rectangle: PGdkRectangle){.
     cdecl, dynlib: gdklib, importc: "gdk_window_begin_paint_rect".}
 proc gdk_window_begin_paint_region*(window: PGdkWindow, region: PGdkRegion){.
     cdecl, dynlib: gdklib, importc: "gdk_window_begin_paint_region".}
-proc gdk_window_end_paint*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_end_paint*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_end_paint".}
-proc gdk_window_set_title*(window: PGdkWindow, title: cstring){.cdecl, 
+proc gdk_window_set_title*(window: PGdkWindow, title: cstring){.cdecl,
     dynlib: gdklib, importc: "gdk_window_set_title".}
-proc gdk_window_set_role*(window: PGdkWindow, role: cstring){.cdecl, 
+proc gdk_window_set_role*(window: PGdkWindow, role: cstring){.cdecl,
     dynlib: gdklib, importc: "gdk_window_set_role".}
 proc gdk_window_set_transient_for*(window: PGdkWindow, parent: PGdkWindow){.
     cdecl, dynlib: gdklib, importc: "gdk_window_set_transient_for".}
-proc gdk_window_set_background*(window: PGdkWindow, color: PGdkColor){.cdecl, 
+proc gdk_window_set_background*(window: PGdkWindow, color: PGdkColor){.cdecl,
     dynlib: gdklib, importc: "gdk_window_set_background".}
-proc gdk_window_set_back_pixmap*(window: PGdkWindow, pixmap: PGdkPixmap, 
-                                 parent_relative: gboolean){.cdecl, 
+proc gdk_window_set_back_pixmap*(window: PGdkWindow, pixmap: PGdkPixmap,
+                                 parent_relative: gboolean){.cdecl,
     dynlib: gdklib, importc: "gdk_window_set_back_pixmap".}
-proc gdk_window_set_cursor*(window: PGdkWindow, cursor: PGdkCursor){.cdecl, 
+proc gdk_window_set_cursor*(window: PGdkWindow, cursor: PGdkCursor){.cdecl,
     dynlib: gdklib, importc: "gdk_window_set_cursor".}
-proc gdk_window_get_user_data*(window: PGdkWindow, data: gpointer){.cdecl, 
+proc gdk_window_get_user_data*(window: PGdkWindow, data: gpointer){.cdecl,
     dynlib: gdklib, importc: "gdk_window_get_user_data".}
-proc gdk_window_get_geometry*(window: PGdkWindow, x: Pgint, y: Pgint, 
-                              width: Pgint, height: Pgint, depth: Pgint){.cdecl, 
+proc gdk_window_get_geometry*(window: PGdkWindow, x: Pgint, y: Pgint,
+                              width: Pgint, height: Pgint, depth: Pgint){.cdecl,
     dynlib: gdklib, importc: "gdk_window_get_geometry".}
-proc gdk_window_get_position*(window: PGdkWindow, x: Pgint, y: Pgint){.cdecl, 
+proc gdk_window_get_position*(window: PGdkWindow, x: Pgint, y: Pgint){.cdecl,
     dynlib: gdklib, importc: "gdk_window_get_position".}
 proc gdk_window_get_origin*(window: PGdkWindow, x: Pgint, y: Pgint): gint{.
     cdecl, dynlib: gdklib, importc: "gdk_window_get_origin".}
-proc gdk_window_get_root_origin*(window: PGdkWindow, x: Pgint, y: Pgint){.cdecl, 
+proc gdk_window_get_root_origin*(window: PGdkWindow, x: Pgint, y: Pgint){.cdecl,
     dynlib: gdklib, importc: "gdk_window_get_root_origin".}
 proc gdk_window_get_frame_extents*(window: PGdkWindow, rect: PGdkRectangle){.
     cdecl, dynlib: gdklib, importc: "gdk_window_get_frame_extents".}
-proc gdk_window_get_pointer*(window: PGdkWindow, x: Pgint, y: Pgint, 
-                             mask: PGdkModifierType): PGdkWindow{.cdecl, 
+proc gdk_window_get_pointer*(window: PGdkWindow, x: Pgint, y: Pgint,
+                             mask: PGdkModifierType): PGdkWindow{.cdecl,
     dynlib: gdklib, importc: "gdk_window_get_pointer".}
-proc gdk_window_get_parent*(window: PGdkWindow): PGdkWindow{.cdecl, 
+proc gdk_window_get_parent*(window: PGdkWindow): PGdkWindow{.cdecl,
     dynlib: gdklib, importc: "gdk_window_get_parent".}
-proc gdk_window_get_toplevel*(window: PGdkWindow): PGdkWindow{.cdecl, 
+proc gdk_window_get_toplevel*(window: PGdkWindow): PGdkWindow{.cdecl,
     dynlib: gdklib, importc: "gdk_window_get_toplevel".}
-proc gdk_window_get_children*(window: PGdkWindow): PGList{.cdecl, 
+proc gdk_window_get_children*(window: PGdkWindow): PGList{.cdecl,
     dynlib: gdklib, importc: "gdk_window_get_children".}
-proc gdk_window_peek_children*(window: PGdkWindow): PGList{.cdecl, 
+proc gdk_window_peek_children*(window: PGdkWindow): PGList{.cdecl,
     dynlib: gdklib, importc: "gdk_window_peek_children".}
-proc gdk_window_get_events*(window: PGdkWindow): TGdkEventMask{.cdecl, 
+proc gdk_window_get_events*(window: PGdkWindow): TGdkEventMask{.cdecl,
     dynlib: gdklib, importc: "gdk_window_get_events".}
 proc gdk_window_set_events*(window: PGdkWindow, event_mask: TGdkEventMask){.
     cdecl, dynlib: gdklib, importc: "gdk_window_set_events".}
-proc gdk_window_set_icon_list*(window: PGdkWindow, pixbufs: PGList){.cdecl, 
+proc gdk_window_set_icon_list*(window: PGdkWindow, pixbufs: PGList){.cdecl,
     dynlib: gdklib, importc: "gdk_window_set_icon_list".}
-proc gdk_window_set_icon*(window: PGdkWindow, icon_window: PGdkWindow, 
-                          pixmap: PGdkPixmap, mask: PGdkBitmap){.cdecl, 
+proc gdk_window_set_icon*(window: PGdkWindow, icon_window: PGdkWindow,
+                          pixmap: PGdkPixmap, mask: PGdkBitmap){.cdecl,
     dynlib: gdklib, importc: "gdk_window_set_icon".}
-proc gdk_window_set_icon_name*(window: PGdkWindow, name: cstring){.cdecl, 
+proc gdk_window_set_icon_name*(window: PGdkWindow, name: cstring){.cdecl,
     dynlib: gdklib, importc: "gdk_window_set_icon_name".}
-proc gdk_window_set_group*(window: PGdkWindow, leader: PGdkWindow){.cdecl, 
+proc gdk_window_set_group*(window: PGdkWindow, leader: PGdkWindow){.cdecl,
     dynlib: gdklib, importc: "gdk_window_set_group".}
-proc gdk_window_set_decorations*(window: PGdkWindow, 
-                                 decorations: TGdkWMDecoration){.cdecl, 
+proc gdk_window_set_decorations*(window: PGdkWindow,
+                                 decorations: TGdkWMDecoration){.cdecl,
     dynlib: gdklib, importc: "gdk_window_set_decorations".}
-proc gdk_window_get_decorations*(window: PGdkWindow, 
+proc gdk_window_get_decorations*(window: PGdkWindow,
                                  decorations: PGdkWMDecoration): gboolean{.
     cdecl, dynlib: gdklib, importc: "gdk_window_get_decorations".}
 proc gdk_window_set_functions*(window: PGdkWindow, functions: TGdkWMFunction){.
     cdecl, dynlib: gdklib, importc: "gdk_window_set_functions".}
-proc gdk_window_iconify*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_iconify*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_iconify".}
-proc gdk_window_deiconify*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_deiconify*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_deiconify".}
-proc gdk_window_stick*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_stick*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_stick".}
-proc gdk_window_unstick*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_unstick*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_unstick".}
-proc gdk_window_maximize*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_maximize*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_maximize".}
-proc gdk_window_unmaximize*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_unmaximize*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_unmaximize".}
-proc gdk_window_register_dnd*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_register_dnd*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_register_dnd".}
-proc gdk_window_begin_resize_drag*(window: PGdkWindow, edge: TGdkWindowEdge, 
-                                   button: gint, root_x: gint, root_y: gint, 
-                                   timestamp: guint32){.cdecl, dynlib: gdklib, 
+proc gdk_window_begin_resize_drag*(window: PGdkWindow, edge: TGdkWindowEdge,
+                                   button: gint, root_x: gint, root_y: gint,
+                                   timestamp: guint32){.cdecl, dynlib: gdklib,
     importc: "gdk_window_begin_resize_drag".}
-proc gdk_window_begin_move_drag*(window: PGdkWindow, button: gint, root_x: gint, 
-                                 root_y: gint, timestamp: guint32){.cdecl, 
+proc gdk_window_begin_move_drag*(window: PGdkWindow, button: gint, root_x: gint,
+                                 root_y: gint, timestamp: guint32){.cdecl,
     dynlib: gdklib, importc: "gdk_window_begin_move_drag".}
-proc gdk_window_invalidate_rect*(window: PGdkWindow, rect: PGdkRectangle, 
-                                 invalidate_children: gboolean){.cdecl, 
+proc gdk_window_invalidate_rect*(window: PGdkWindow, rect: PGdkRectangle,
+                                 invalidate_children: gboolean){.cdecl,
     dynlib: gdklib, importc: "gdk_window_invalidate_rect".}
-proc gdk_window_invalidate_region*(window: PGdkWindow, region: PGdkRegion, 
-                                   invalidate_children: gboolean){.cdecl, 
+proc gdk_window_invalidate_region*(window: PGdkWindow, region: PGdkRegion,
+                                   invalidate_children: gboolean){.cdecl,
     dynlib: gdklib, importc: "gdk_window_invalidate_region".}
-proc gdk_window_invalidate_maybe_recurse*(window: PGdkWindow, 
-    region: PGdkRegion, 
-    child_func: gdk_window_invalidate_maybe_recurse_child_func, 
-    user_data: gpointer){.cdecl, dynlib: gdklib, 
+proc gdk_window_invalidate_maybe_recurse*(window: PGdkWindow,
+    region: PGdkRegion,
+    child_func: gdk_window_invalidate_maybe_recurse_child_func,
+    user_data: gpointer){.cdecl, dynlib: gdklib,
                           importc: "gdk_window_invalidate_maybe_recurse".}
-proc gdk_window_get_update_area*(window: PGdkWindow): PGdkRegion{.cdecl, 
+proc gdk_window_get_update_area*(window: PGdkWindow): PGdkRegion{.cdecl,
     dynlib: gdklib, importc: "gdk_window_get_update_area".}
-proc gdk_window_freeze_updates*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_freeze_updates*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_freeze_updates".}
-proc gdk_window_thaw_updates*(window: PGdkWindow){.cdecl, dynlib: gdklib, 
+proc gdk_window_thaw_updates*(window: PGdkWindow){.cdecl, dynlib: gdklib,
     importc: "gdk_window_thaw_updates".}
 proc gdk_window_process_all_updates*(){.cdecl, dynlib: gdklib, importc: "gdk_window_process_all_updates".}
 proc gdk_window_process_updates*(window: PGdkWindow, update_children: gboolean){.
     cdecl, dynlib: gdklib, importc: "gdk_window_process_updates".}
-proc gdk_window_set_debug_updates*(setting: gboolean){.cdecl, dynlib: gdklib, 
+proc gdk_window_set_debug_updates*(setting: gboolean){.cdecl, dynlib: gdklib,
     importc: "gdk_window_set_debug_updates".}
-proc gdk_window_constrain_size*(geometry: PGdkGeometry, flags: guint, 
-                                width: gint, height: gint, new_width: Pgint, 
-                                new_height: Pgint){.cdecl, dynlib: gdklib, 
+proc gdk_window_constrain_size*(geometry: PGdkGeometry, flags: guint,
+                                width: gint, height: gint, new_width: Pgint,
+                                new_height: Pgint){.cdecl, dynlib: gdklib,
     importc: "gdk_window_constrain_size".}
-proc gdk_window_get_internal_paint_info*(window: PGdkWindow, 
-    e: var PGdkDrawable, x_offset: Pgint, y_offset: Pgint){.cdecl, 
+proc gdk_window_get_internal_paint_info*(window: PGdkWindow,
+    e: var PGdkDrawable, x_offset: Pgint, y_offset: Pgint){.cdecl,
     dynlib: gdklib, importc: "gdk_window_get_internal_paint_info".}
 proc gdk_set_pointer_hooks*(new_hooks: PGdkPointerHooks): PGdkPointerHooks{.
     cdecl, dynlib: gdklib, importc: "gdk_set_pointer_hooks".}
-proc gdk_get_default_root_window*(): PGdkWindow{.cdecl, dynlib: gdklib, 
+proc gdk_get_default_root_window*(): PGdkWindow{.cdecl, dynlib: gdklib,
     importc: "gdk_get_default_root_window".}
-proc gdk_parse_args*(argc: Pgint, v: var PPgchar){.cdecl, dynlib: gdklib, 
+proc gdk_parse_args*(argc: Pgint, v: var PPgchar){.cdecl, dynlib: gdklib,
     importc: "gdk_parse_args".}
-proc gdk_init*(argc: Pgint, v: var PPgchar){.cdecl, dynlib: gdklib, 
+proc gdk_init*(argc: Pgint, v: var PPgchar){.cdecl, dynlib: gdklib,
     importc: "gdk_init".}
-proc gdk_init_check*(argc: Pgint, v: var PPgchar): gboolean{.cdecl, 
+proc gdk_init_check*(argc: Pgint, v: var PPgchar): gboolean{.cdecl,
     dynlib: gdklib, importc: "gdk_init_check".}
-when not defined(GDK_DISABLE_DEPRECATED): 
-  proc gdk_exit(error_code: gint){.cdecl, dynlib: gdklib, importc: "gdk_exit".}
+when not defined(GDK_DISABLE_DEPRECATED):
+  proc gdk_exit*(error_code: gint){.cdecl, dynlib: gdklib, importc: "gdk_exit".}
 proc gdk_set_locale*(): cstring{.cdecl, dynlib: gdklib, importc: "gdk_set_locale".}
-proc gdk_get_program_class*(): cstring{.cdecl, dynlib: gdklib, 
+proc gdk_get_program_class*(): cstring{.cdecl, dynlib: gdklib,
                                         importc: "gdk_get_program_class".}
-proc gdk_set_program_class*(program_class: cstring){.cdecl, dynlib: gdklib, 
+proc gdk_set_program_class*(program_class: cstring){.cdecl, dynlib: gdklib,
     importc: "gdk_set_program_class".}
-proc gdk_error_trap_push*(){.cdecl, dynlib: gdklib, 
+proc gdk_error_trap_push*(){.cdecl, dynlib: gdklib,
                              importc: "gdk_error_trap_push".}
-proc gdk_error_trap_pop*(): gint{.cdecl, dynlib: gdklib, 
+proc gdk_error_trap_pop*(): gint{.cdecl, dynlib: gdklib,
                                   importc: "gdk_error_trap_pop".}
-when not defined(GDK_DISABLE_DEPRECATED): 
-  proc gdk_set_use_xshm(use_xshm: gboolean){.cdecl, dynlib: gdklib, 
+when not defined(GDK_DISABLE_DEPRECATED):
+  proc gdk_set_use_xshm*(use_xshm: gboolean){.cdecl, dynlib: gdklib,
       importc: "gdk_set_use_xshm".}
-  proc gdk_get_use_xshm(): gboolean{.cdecl, dynlib: gdklib, 
+  proc gdk_get_use_xshm*(): gboolean{.cdecl, dynlib: gdklib,
                                      importc: "gdk_get_use_xshm".}
-proc gdk_get_display*(): cstring{.cdecl, dynlib: gdklib, 
+proc gdk_get_display*(): cstring{.cdecl, dynlib: gdklib,
                                  importc: "gdk_get_display".}
-proc gdk_get_display_arg_name*(): cstring{.cdecl, dynlib: gdklib, 
+proc gdk_get_display_arg_name*(): cstring{.cdecl, dynlib: gdklib,
     importc: "gdk_get_display_arg_name".}
-when not defined(GDK_DISABLE_DEPRECATED): 
-  proc gdk_input_add_full(source: gint, condition: TGdkInputCondition, 
-                          `function`: TGdkInputFunction, data: gpointer, 
-                          destroy: TGdkDestroyNotify): gint{.cdecl, 
+when not defined(GDK_DISABLE_DEPRECATED):
+  proc gdk_input_add_full*(source: gint, condition: TGdkInputCondition,
+                          `function`: TGdkInputFunction, data: gpointer,
+                          destroy: TGdkDestroyNotify): gint{.cdecl,
       dynlib: gdklib, importc: "gdk_input_add_full".}
-  proc gdk_input_add(source: gint, condition: TGdkInputCondition, 
+  proc gdk_input_add*(source: gint, condition: TGdkInputCondition,
                      `function`: TGdkInputFunction, data: gpointer): gint{.
       cdecl, dynlib: gdklib, importc: "gdk_input_add".}
-  proc gdk_input_remove(tag: gint){.cdecl, dynlib: gdklib, 
+  proc gdk_input_remove*(tag: gint){.cdecl, dynlib: gdklib,
                                     importc: "gdk_input_remove".}
-proc gdk_pointer_grab*(window: PGdkWindow, owner_events: gboolean, 
-                       event_mask: TGdkEventMask, confine_to: PGdkWindow, 
+proc gdk_pointer_grab*(window: PGdkWindow, owner_events: gboolean,
+                       event_mask: TGdkEventMask, confine_to: PGdkWindow,
                        cursor: PGdkCursor, time: guint32): TGdkGrabStatus{.
     cdecl, dynlib: gdklib, importc: "gdk_pointer_grab".}
-proc gdk_keyboard_grab*(window: PGdkWindow, owner_events: gboolean, 
-                        time: guint32): TGdkGrabStatus{.cdecl, dynlib: gdklib, 
+proc gdk_keyboard_grab*(window: PGdkWindow, owner_events: gboolean,
+                        time: guint32): TGdkGrabStatus{.cdecl, dynlib: gdklib,
     importc: "gdk_keyboard_grab".}
-when not defined(GDK_MULTIHEAD_SAFE): 
-  proc gdk_pointer_ungrab(time: guint32){.cdecl, dynlib: gdklib, 
+when not defined(GDK_MULTIHEAD_SAFE):
+  proc gdk_pointer_ungrab*(time: guint32){.cdecl, dynlib: gdklib,
       importc: "gdk_pointer_ungrab".}
-  proc gdk_keyboard_ungrab(time: guint32){.cdecl, dynlib: gdklib, 
+  proc gdk_keyboard_ungrab*(time: guint32){.cdecl, dynlib: gdklib,
       importc: "gdk_keyboard_ungrab".}
-  proc gdk_pointer_is_grabbed(): gboolean{.cdecl, dynlib: gdklib, 
+  proc gdk_pointer_is_grabbed*(): gboolean{.cdecl, dynlib: gdklib,
       importc: "gdk_pointer_is_grabbed".}
-  proc gdk_screen_width(): gint{.cdecl, dynlib: gdklib, 
+  proc gdk_screen_width*(): gint{.cdecl, dynlib: gdklib,
                                  importc: "gdk_screen_width".}
-  proc gdk_screen_height(): gint{.cdecl, dynlib: gdklib, 
+  proc gdk_screen_height*(): gint{.cdecl, dynlib: gdklib,
                                   importc: "gdk_screen_height".}
-  proc gdk_screen_width_mm(): gint{.cdecl, dynlib: gdklib, 
+  proc gdk_screen_width_mm*(): gint{.cdecl, dynlib: gdklib,
                                     importc: "gdk_screen_width_mm".}
-  proc gdk_screen_height_mm(): gint{.cdecl, dynlib: gdklib, 
+  proc gdk_screen_height_mm*(): gint{.cdecl, dynlib: gdklib,
                                      importc: "gdk_screen_height_mm".}
-  proc gdk_beep(){.cdecl, dynlib: gdklib, importc: "gdk_beep".}
+  proc gdk_beep*(){.cdecl, dynlib: gdklib, importc: "gdk_beep".}
 proc gdk_flush*(){.cdecl, dynlib: gdklib, importc: "gdk_flush".}
-when not defined(GDK_MULTIHEAD_SAFE): 
-  proc gdk_set_double_click_time(msec: guint){.cdecl, dynlib: gdklib, 
+when not defined(GDK_MULTIHEAD_SAFE):
+  proc gdk_set_double_click_time*(msec: guint){.cdecl, dynlib: gdklib,
       importc: "gdk_set_double_click_time".}
-proc gdk_rectangle_intersect*(src1: PGdkRectangle, src2: PGdkRectangle, 
-                              dest: PGdkRectangle): gboolean{.cdecl, 
+proc gdk_rectangle_intersect*(src1: PGdkRectangle, src2: PGdkRectangle,
+                              dest: PGdkRectangle): gboolean{.cdecl,
     dynlib: gdklib, importc: "gdk_rectangle_intersect".}
-proc gdk_rectangle_union*(src1: PGdkRectangle, src2: PGdkRectangle, 
-                          dest: PGdkRectangle){.cdecl, dynlib: gdklib, 
+proc gdk_rectangle_union*(src1: PGdkRectangle, src2: PGdkRectangle,
+                          dest: PGdkRectangle){.cdecl, dynlib: gdklib,
     importc: "gdk_rectangle_union".}
-proc gdk_rectangle_get_type*(): GType{.cdecl, dynlib: gdklib, 
+proc gdk_rectangle_get_type*(): GType{.cdecl, dynlib: gdklib,
                                        importc: "gdk_rectangle_get_type".}
 proc GDK_TYPE_RECTANGLE*(): GType
-proc gdk_wcstombs*(src: PGdkWChar): cstring{.cdecl, dynlib: gdklib, 
+proc gdk_wcstombs*(src: PGdkWChar): cstring{.cdecl, dynlib: gdklib,
     importc: "gdk_wcstombs".}
-proc gdk_mbstowcs*(dest: PGdkWChar, src: cstring, dest_max: gint): gint{.cdecl, 
+proc gdk_mbstowcs*(dest: PGdkWChar, src: cstring, dest_max: gint): gint{.cdecl,
     dynlib: gdklib, importc: "gdk_mbstowcs".}
-when not defined(GDK_MULTIHEAD_SAFE): 
-  proc gdk_event_send_client_message(event: PGdkEvent, xid: guint32): gboolean{.
+when not defined(GDK_MULTIHEAD_SAFE):
+  proc gdk_event_send_client_message*(event: PGdkEvent, xid: guint32): gboolean{.
       cdecl, dynlib: gdklib, importc: "gdk_event_send_client_message".}
-  proc gdk_event_send_clientmessage_toall(event: PGdkEvent){.cdecl, 
+  proc gdk_event_send_clientmessage_toall*(event: PGdkEvent){.cdecl,
       dynlib: gdklib, importc: "gdk_event_send_clientmessage_toall".}
-proc gdk_event_send_client_message_for_display*(display: PGdkDisplay, 
-    event: PGdkEvent, xid: guint32): gboolean{.cdecl, dynlib: gdklib, 
+proc gdk_event_send_client_message_for_display*(display: PGdkDisplay,
+    event: PGdkEvent, xid: guint32): gboolean{.cdecl, dynlib: gdklib,
     importc: "gdk_event_send_client_message_for_display".}
 proc gdk_threads_enter*(){.cdecl, dynlib: gdklib, importc: "gdk_threads_enter".}
 proc gdk_threads_leave*(){.cdecl, dynlib: gdklib, importc: "gdk_threads_leave".}
 proc gdk_threads_init*(){.cdecl, dynlib: gdklib, importc: "gdk_threads_init".}
 
-proc GDK_TYPE_RECTANGLE*(): GType = 
+proc GDK_TYPE_RECTANGLE*(): GType =
   result = gdk_rectangle_get_type()
 
-proc GDK_TYPE_COLORMAP*(): GType = 
+proc GDK_TYPE_COLORMAP*(): GType =
   result = gdk_colormap_get_type()
 
-proc GDK_COLORMAP*(anObject: pointer): PGdkColormap = 
+proc GDK_COLORMAP*(anObject: pointer): PGdkColormap =
   result = cast[PGdkColormap](G_TYPE_CHECK_INSTANCE_CAST(anObject, GDK_TYPE_COLORMAP()))
 
-proc GDK_COLORMAP_CLASS*(klass: pointer): PGdkColormapClass = 
+proc GDK_COLORMAP_CLASS*(klass: pointer): PGdkColormapClass =
   result = cast[PGdkColormapClass](G_TYPE_CHECK_CLASS_CAST(klass, GDK_TYPE_COLORMAP()))
 
-proc GDK_IS_COLORMAP*(anObject: pointer): bool = 
+proc GDK_IS_COLORMAP*(anObject: pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, GDK_TYPE_COLORMAP())
 
-proc GDK_IS_COLORMAP_CLASS*(klass: pointer): bool = 
+proc GDK_IS_COLORMAP_CLASS*(klass: pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, GDK_TYPE_COLORMAP())
 
-proc GDK_COLORMAP_GET_CLASS*(obj: pointer): PGdkColormapClass = 
+proc GDK_COLORMAP_GET_CLASS*(obj: pointer): PGdkColormapClass =
   result = cast[PGdkColormapClass](G_TYPE_INSTANCE_GET_CLASS(obj, GDK_TYPE_COLORMAP()))
 
-proc GDK_TYPE_COLOR*(): GType = 
+proc GDK_TYPE_COLOR*(): GType =
   result = gdk_color_get_type()
 
-proc gdk_cursor_destroy*(cursor: PGdkCursor) = 
+proc gdk_cursor_destroy*(cursor: PGdkCursor) =
   gdk_cursor_unref(cursor)
 
-proc GDK_TYPE_CURSOR*(): GType = 
+proc GDK_TYPE_CURSOR*(): GType =
   result = gdk_cursor_get_type()
 
-proc GDK_TYPE_DRAG_CONTEXT*(): GType = 
+proc GDK_TYPE_DRAG_CONTEXT*(): GType =
   result = gdk_drag_context_get_type()
 
-proc GDK_DRAG_CONTEXT*(anObject: Pointer): PGdkDragContext = 
-  result = cast[PGdkDragContext](G_TYPE_CHECK_INSTANCE_CAST(anObject, 
+proc GDK_DRAG_CONTEXT*(anObject: Pointer): PGdkDragContext =
+  result = cast[PGdkDragContext](G_TYPE_CHECK_INSTANCE_CAST(anObject,
       GDK_TYPE_DRAG_CONTEXT()))
 
-proc GDK_DRAG_CONTEXT_CLASS*(klass: Pointer): PGdkDragContextClass = 
-  result = cast[PGdkDragContextClass](G_TYPE_CHECK_CLASS_CAST(klass, 
+proc GDK_DRAG_CONTEXT_CLASS*(klass: Pointer): PGdkDragContextClass =
+  result = cast[PGdkDragContextClass](G_TYPE_CHECK_CLASS_CAST(klass,
       GDK_TYPE_DRAG_CONTEXT()))
 
-proc GDK_IS_DRAG_CONTEXT*(anObject: Pointer): bool = 
+proc GDK_IS_DRAG_CONTEXT*(anObject: Pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, GDK_TYPE_DRAG_CONTEXT())
 
-proc GDK_IS_DRAG_CONTEXT_CLASS*(klass: Pointer): bool = 
+proc GDK_IS_DRAG_CONTEXT_CLASS*(klass: Pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, GDK_TYPE_DRAG_CONTEXT())
 
-proc GDK_DRAG_CONTEXT_GET_CLASS*(obj: Pointer): PGdkDragContextClass = 
-  result = cast[PGdkDragContextClass](G_TYPE_INSTANCE_GET_CLASS(obj, 
+proc GDK_DRAG_CONTEXT_GET_CLASS*(obj: Pointer): PGdkDragContextClass =
+  result = cast[PGdkDragContextClass](G_TYPE_INSTANCE_GET_CLASS(obj,
       GDK_TYPE_DRAG_CONTEXT()))
 
-proc gdkregion_EXTENTCHECK*(r1, r2: PGdkRegionBox): bool = 
-  result = (int(r1.x2) > r2.x1) and (int(r1.x1) < r2.x2) and
-      (int(r1.y2) > r2.y1) and (int(r1.y1) < r2.y2)
+proc gdkregion_EXTENTCHECK*(r1, r2: PGdkRegionBox): bool =
+  result = ((r1.x2) > r2.x1) and ((r1.x1) < r2.x2) and
+      ((r1.y2) > r2.y1) and ((r1.y1) < r2.y2)
 
-proc gdkregion_EXTENTS*(r: PGdkRegionBox, idRect: PGdkRegion) = 
-  if (int(r.x1) < idRect.extents.x1): 
+proc gdkregion_EXTENTS*(r: PGdkRegionBox, idRect: PGdkRegion) =
+  if ((r.x1) < idRect.extents.x1):
     idRect.extents.x1 = r.x1
-  if int(r.y1) < idRect.extents.y1: 
+  if (r.y1) < idRect.extents.y1:
     idRect.extents.y1 = r.y1
-  if int(r.x2) > idRect.extents.x2: 
+  if (r.x2) > idRect.extents.x2:
     idRect.extents.x2 = r.x2
 
-proc gdkregion_MEMCHECK*(reg: PGdkRegion, ARect, firstrect: var PGdkRegionBox): bool = 
-  nil
+proc gdkregion_MEMCHECK*(reg: PGdkRegion, ARect, firstrect: var PGdkRegionBox): bool =
+  assert(false) # to implement
 
-proc gdkregion_CHECK_PREVIOUS*(Reg: PGdkRegion, R: PGdkRegionBox, 
-                               Rx1, Ry1, Rx2, Ry2: gint): bool = 
-  nil
+proc gdkregion_CHECK_PREVIOUS*(Reg: PGdkRegion, R: PGdkRegionBox,
+                               Rx1, Ry1, Rx2, Ry2: gint): bool =
+  assert(false) # to implement
 
-proc gdkregion_ADDRECT*(reg: PGdkRegion, r: PGdkRegionBox, 
-                        rx1, ry1, rx2, ry2: gint) = 
-  if ((int(rx1) < rx2) and (int(ry1) < ry2) and
-      gdkregion_CHECK_PREVIOUS(reg, r, rx1, ry1, rx2, ry2)): 
+proc gdkregion_ADDRECT*(reg: PGdkRegion, r: PGdkRegionBox,
+                        rx1, ry1, rx2, ry2: gint) =
+  if (((rx1) < rx2) and ((ry1) < ry2) and
+      gdkregion_CHECK_PREVIOUS(reg, r, rx1, ry1, rx2, ry2)):
     r.x1 = rx1
     r.y1 = ry1
     r.x2 = rx2
     r.y2 = ry2
 
-proc gdkregion_ADDRECTNOX*(reg: PGdkRegion, r: PGdkRegionBox, 
-                           rx1, ry1, rx2, ry2: gint) = 
-  if ((int(rx1) < rx2) and (int(ry1) < ry2) and
-      gdkregion_CHECK_PREVIOUS(reg, r, rx1, ry1, rx2, ry2)): 
+proc gdkregion_ADDRECTNOX*(reg: PGdkRegion, r: PGdkRegionBox,
+                           rx1, ry1, rx2, ry2: gint) =
+  if (((rx1) < rx2) and ((ry1) < ry2) and
+      gdkregion_CHECK_PREVIOUS(reg, r, rx1, ry1, rx2, ry2)):
     r.x1 = rx1
     r.y1 = ry1
     r.x2 = rx2
     r.y2 = ry2
     inc(reg . numRects)
 
-proc gdkregion_EMPTY_REGION*(pReg: PGdkRegion): bool = 
-  result = pReg.numRects == 0
+proc gdkregion_EMPTY_REGION*(pReg: PGdkRegion): bool =
+  result = pReg.numRects == 0'i32
 
-proc gdkregion_REGION_NOT_EMPTY*(pReg: PGdkRegion): bool = 
-  result = pReg.numRects != 0
+proc gdkregion_REGION_NOT_EMPTY*(pReg: PGdkRegion): bool =
+  result = pReg.numRects != 0'i32
 
-proc gdkregion_INBOX*(r: TGdkRegionBox, x, y: gint): bool = 
-  result = (((int(r.x2) > x) and (int(r.x1) <= x)) and 
-            (int(r.y2) > y)) and (int(r.y1) <= y)
+proc gdkregion_INBOX*(r: TGdkRegionBox, x, y: gint): bool =
+  result = ((((r.x2) > x) and ((r.x1) <= x)) and
+            ((r.y2) > y)) and ((r.y1) <= y)
 
-proc GDK_TYPE_DRAWABLE*(): GType = 
+proc GDK_TYPE_DRAWABLE*(): GType =
   result = gdk_drawable_get_type()
 
-proc GDK_DRAWABLE*(anObject: Pointer): PGdkDrawable = 
+proc GDK_DRAWABLE*(anObject: Pointer): PGdkDrawable =
   result = cast[PGdkDrawable](G_TYPE_CHECK_INSTANCE_CAST(anObject, GDK_TYPE_DRAWABLE()))
 
-proc GDK_DRAWABLE_CLASS*(klass: Pointer): PGdkDrawableClass = 
+proc GDK_DRAWABLE_CLASS*(klass: Pointer): PGdkDrawableClass =
   result = cast[PGdkDrawableClass](G_TYPE_CHECK_CLASS_CAST(klass, GDK_TYPE_DRAWABLE()))
 
-proc GDK_IS_DRAWABLE*(anObject: Pointer): bool = 
+proc GDK_IS_DRAWABLE*(anObject: Pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, GDK_TYPE_DRAWABLE())
 
-proc GDK_IS_DRAWABLE_CLASS*(klass: Pointer): bool = 
+proc GDK_IS_DRAWABLE_CLASS*(klass: Pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, GDK_TYPE_DRAWABLE())
 
-proc GDK_DRAWABLE_GET_CLASS*(obj: Pointer): PGdkDrawableClass = 
+proc GDK_DRAWABLE_GET_CLASS*(obj: Pointer): PGdkDrawableClass =
   result = cast[PGdkDrawableClass](G_TYPE_INSTANCE_GET_CLASS(obj, GDK_TYPE_DRAWABLE()))
 
-proc gdk_draw_pixmap*(drawable: PGdkDrawable, gc: PGdkGC, src: PGdkDrawable, 
-                      xsrc: gint, ysrc: gint, xdest: gint, ydest: gint, 
-                      width: gint, height: gint) = 
+proc gdk_draw_pixmap*(drawable: PGdkDrawable, gc: PGdkGC, src: PGdkDrawable,
+                      xsrc: gint, ysrc: gint, xdest: gint, ydest: gint,
+                      width: gint, height: gint) =
   gdk_draw_drawable(drawable, gc, src, xsrc, ysrc, xdest, ydest, width, height)
 
-proc gdk_draw_bitmap*(drawable: PGdkDrawable, gc: PGdkGC, src: PGdkDrawable, 
-                      xsrc: gint, ysrc: gint, xdest: gint, ydest: gint, 
-                      width: gint, height: gint) = 
+proc gdk_draw_bitmap*(drawable: PGdkDrawable, gc: PGdkGC, src: PGdkDrawable,
+                      xsrc: gint, ysrc: gint, xdest: gint, ydest: gint,
+                      width: gint, height: gint) =
   gdk_draw_drawable(drawable, gc, src, xsrc, ysrc, xdest, ydest, width, height)
 
-proc GDK_TYPE_EVENT*(): GType = 
+proc GDK_TYPE_EVENT*(): GType =
   result = gdk_event_get_type()
 
-proc GDK_TYPE_FONT*(): GType = 
+proc GDK_TYPE_FONT*(): GType =
   result = gdk_font_get_type()
 
-proc GDK_TYPE_GC*(): GType = 
+proc GDK_TYPE_GC*(): GType =
   result = gdk_gc_get_type()
 
-proc GDK_GC*(anObject: Pointer): PGdkGC = 
+proc GDK_GC*(anObject: Pointer): PGdkGC =
   result = cast[PGdkGC](G_TYPE_CHECK_INSTANCE_CAST(anObject, GDK_TYPE_GC()))
 
-proc GDK_GC_CLASS*(klass: Pointer): PGdkGCClass = 
+proc GDK_GC_CLASS*(klass: Pointer): PGdkGCClass =
   result = cast[PGdkGCClass](G_TYPE_CHECK_CLASS_CAST(klass, GDK_TYPE_GC()))
 
-proc GDK_IS_GC*(anObject: Pointer): bool = 
+proc GDK_IS_GC*(anObject: Pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, GDK_TYPE_GC())
 
-proc GDK_IS_GC_CLASS*(klass: Pointer): bool = 
+proc GDK_IS_GC_CLASS*(klass: Pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, GDK_TYPE_GC())
 
-proc GDK_GC_GET_CLASS*(obj: Pointer): PGdkGCClass = 
+proc GDK_GC_GET_CLASS*(obj: Pointer): PGdkGCClass =
   result = cast[PGdkGCClass](G_TYPE_INSTANCE_GET_CLASS(obj, GDK_TYPE_GC()))
 
-proc gdk_gc_destroy*(gc: PGdkGC) = 
+proc gdk_gc_destroy*(gc: PGdkGC) =
   g_object_unref(G_OBJECT(gc))
 
-proc GDK_TYPE_IMAGE*(): GType = 
+proc GDK_TYPE_IMAGE*(): GType =
   result = gdk_image_get_type()
 
-proc GDK_IMAGE*(anObject: Pointer): PGdkImage = 
+proc GDK_IMAGE*(anObject: Pointer): PGdkImage =
   result = cast[PGdkImage](G_TYPE_CHECK_INSTANCE_CAST(anObject, GDK_TYPE_IMAGE()))
 
-proc GDK_IMAGE_CLASS*(klass: Pointer): PGdkImageClass = 
+proc GDK_IMAGE_CLASS*(klass: Pointer): PGdkImageClass =
   result = cast[PGdkImageClass](G_TYPE_CHECK_CLASS_CAST(klass, GDK_TYPE_IMAGE()))
 
-proc GDK_IS_IMAGE*(anObject: Pointer): bool = 
+proc GDK_IS_IMAGE*(anObject: Pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, GDK_TYPE_IMAGE())
 
-proc GDK_IS_IMAGE_CLASS*(klass: Pointer): bool = 
+proc GDK_IS_IMAGE_CLASS*(klass: Pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, GDK_TYPE_IMAGE())
 
-proc GDK_IMAGE_GET_CLASS*(obj: Pointer): PGdkImageClass = 
+proc GDK_IMAGE_GET_CLASS*(obj: Pointer): PGdkImageClass =
   result = cast[PGdkImageClass](G_TYPE_INSTANCE_GET_CLASS(obj, GDK_TYPE_IMAGE()))
 
-proc gdk_image_destroy*(image: PGdkImage) = 
+proc gdk_image_destroy*(image: PGdkImage) =
   g_object_unref(G_OBJECT(image))
 
-proc GDK_TYPE_DEVICE*(): GType = 
+proc GDK_TYPE_DEVICE*(): GType =
   result = gdk_device_get_type()
 
-proc GDK_DEVICE*(anObject: Pointer): PGdkDevice = 
+proc GDK_DEVICE*(anObject: Pointer): PGdkDevice =
   result = cast[PGdkDevice](G_TYPE_CHECK_INSTANCE_CAST(anObject, GDK_TYPE_DEVICE()))
 
-proc GDK_DEVICE_CLASS*(klass: Pointer): PGdkDeviceClass = 
+proc GDK_DEVICE_CLASS*(klass: Pointer): PGdkDeviceClass =
   result = cast[PGdkDeviceClass](G_TYPE_CHECK_CLASS_CAST(klass, GDK_TYPE_DEVICE()))
 
-proc GDK_IS_DEVICE*(anObject: Pointer): bool = 
+proc GDK_IS_DEVICE*(anObject: Pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, GDK_TYPE_DEVICE())
 
-proc GDK_IS_DEVICE_CLASS*(klass: Pointer): bool = 
+proc GDK_IS_DEVICE_CLASS*(klass: Pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, GDK_TYPE_DEVICE())
 
-proc GDK_DEVICE_GET_CLASS*(obj: Pointer): PGdkDeviceClass = 
+proc GDK_DEVICE_GET_CLASS*(obj: Pointer): PGdkDeviceClass =
   result = cast[PGdkDeviceClass](G_TYPE_INSTANCE_GET_CLASS(obj, GDK_TYPE_DEVICE()))
 
-proc GDK_TYPE_KEYMAP*(): GType = 
+proc GDK_TYPE_KEYMAP*(): GType =
   result = gdk_keymap_get_type()
 
-proc GDK_KEYMAP*(anObject: Pointer): PGdkKeymap = 
+proc GDK_KEYMAP*(anObject: Pointer): PGdkKeymap =
   result = cast[PGdkKeymap](G_TYPE_CHECK_INSTANCE_CAST(anObject, GDK_TYPE_KEYMAP()))
 
-proc GDK_KEYMAP_CLASS*(klass: Pointer): PGdkKeymapClass = 
+proc GDK_KEYMAP_CLASS*(klass: Pointer): PGdkKeymapClass =
   result = cast[PGdkKeymapClass](G_TYPE_CHECK_CLASS_CAST(klass, GDK_TYPE_KEYMAP()))
 
-proc GDK_IS_KEYMAP*(anObject: Pointer): bool = 
+proc GDK_IS_KEYMAP*(anObject: Pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, GDK_TYPE_KEYMAP())
 
-proc GDK_IS_KEYMAP_CLASS*(klass: Pointer): bool = 
+proc GDK_IS_KEYMAP_CLASS*(klass: Pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, GDK_TYPE_KEYMAP())
 
-proc GDK_KEYMAP_GET_CLASS*(obj: Pointer): PGdkKeymapClass = 
+proc GDK_KEYMAP_GET_CLASS*(obj: Pointer): PGdkKeymapClass =
   result = cast[PGdkKeymapClass](G_TYPE_INSTANCE_GET_CLASS(obj, GDK_TYPE_KEYMAP()))
 
-proc GDK_TYPE_PIXMAP*(): GType = 
+proc GDK_TYPE_PIXMAP*(): GType =
   result = gdk_pixmap_get_type()
 
-proc GDK_PIXMAP*(anObject: Pointer): PGdkPixmap = 
+proc GDK_PIXMAP*(anObject: Pointer): PGdkPixmap =
   result = cast[PGdkPixmap](G_TYPE_CHECK_INSTANCE_CAST(anObject, GDK_TYPE_PIXMAP()))
 
-proc GDK_PIXMAP_CLASS*(klass: Pointer): PGdkPixmapObjectClass = 
+proc GDK_PIXMAP_CLASS*(klass: Pointer): PGdkPixmapObjectClass =
   result = cast[PGdkPixmapObjectClass](G_TYPE_CHECK_CLASS_CAST(klass, GDK_TYPE_PIXMAP()))
 
-proc GDK_IS_PIXMAP*(anObject: Pointer): bool = 
+proc GDK_IS_PIXMAP*(anObject: Pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, GDK_TYPE_PIXMAP())
 
-proc GDK_IS_PIXMAP_CLASS*(klass: Pointer): bool = 
+proc GDK_IS_PIXMAP_CLASS*(klass: Pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, GDK_TYPE_PIXMAP())
 
-proc GDK_PIXMAP_GET_CLASS*(obj: Pointer): PGdkPixmapObjectClass = 
+proc GDK_PIXMAP_GET_CLASS*(obj: Pointer): PGdkPixmapObjectClass =
   result = cast[PGdkPixmapObjectClass](G_TYPE_INSTANCE_GET_CLASS(obj, GDK_TYPE_PIXMAP()))
 
-proc GDK_PIXMAP_OBJECT*(anObject: Pointer): PGdkPixmapObject = 
+proc GDK_PIXMAP_OBJECT*(anObject: Pointer): PGdkPixmapObject =
   result = cast[PGdkPixmapObject](GDK_PIXMAP(anObject))
 
-proc gdk_bitmap_ref*(drawable: PGdkDrawable): PGdkDrawable = 
+proc gdk_bitmap_ref*(drawable: PGdkDrawable): PGdkDrawable =
   result = GDK_DRAWABLE(g_object_ref(G_OBJECT(drawable)))
 
-proc gdk_bitmap_unref*(drawable: PGdkDrawable) = 
+proc gdk_bitmap_unref*(drawable: PGdkDrawable) =
   g_object_unref(G_OBJECT(drawable))
 
-proc gdk_pixmap_ref*(drawable: PGdkDrawable): PGdkDrawable = 
+proc gdk_pixmap_ref*(drawable: PGdkDrawable): PGdkDrawable =
   result = GDK_DRAWABLE(g_object_ref(G_OBJECT(drawable)))
 
-proc gdk_pixmap_unref*(drawable: PGdkDrawable) = 
+proc gdk_pixmap_unref*(drawable: PGdkDrawable) =
   g_object_unref(G_OBJECT(drawable))
 
-proc gdk_rgb_get_cmap*(): PGdkColormap = 
+proc gdk_rgb_get_cmap*(): PGdkColormap =
   result = nil #gdk_rgb_get_colormap()
 
-proc GDK_TYPE_DISPLAY*(): GType = 
+proc GDK_TYPE_DISPLAY*(): GType =
   nil
   #result = nil
 
-proc GDK_DISPLAY_OBJECT*(anObject: pointer): PGdkDisplay = 
+proc GDK_DISPLAY_OBJECT*(anObject: pointer): PGdkDisplay =
   result = cast[PGdkDisplay](G_TYPE_CHECK_INSTANCE_CAST(anObject, GDK_TYPE_DISPLAY()))
 
-proc GDK_DISPLAY_CLASS*(klass: pointer): PGdkDisplayClass = 
+proc GDK_DISPLAY_CLASS*(klass: pointer): PGdkDisplayClass =
   result = cast[PGdkDisplayClass](G_TYPE_CHECK_CLASS_CAST(klass, GDK_TYPE_DISPLAY()))
 
-proc GDK_IS_DISPLAY*(anObject: pointer): bool = 
+proc GDK_IS_DISPLAY*(anObject: pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, GDK_TYPE_DISPLAY())
 
-proc GDK_IS_DISPLAY_CLASS*(klass: pointer): bool = 
+proc GDK_IS_DISPLAY_CLASS*(klass: pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, GDK_TYPE_DISPLAY())
 
-proc GDK_DISPLAY_GET_CLASS*(obj: pointer): PGdkDisplayClass = 
+proc GDK_DISPLAY_GET_CLASS*(obj: pointer): PGdkDisplayClass =
   result = cast[PGdkDisplayClass](G_TYPE_INSTANCE_GET_CLASS(obj, GDK_TYPE_DISPLAY()))
 
-proc GDK_TYPE_SCREEN*(): GType = 
+proc GDK_TYPE_SCREEN*(): GType =
   nil
 
-proc GDK_SCREEN*(anObject: Pointer): PGdkScreen = 
+proc GDK_SCREEN*(anObject: Pointer): PGdkScreen =
   result = cast[PGdkScreen](G_TYPE_CHECK_INSTANCE_CAST(anObject, GDK_TYPE_SCREEN()))
 
-proc GDK_SCREEN_CLASS*(klass: Pointer): PGdkScreenClass = 
+proc GDK_SCREEN_CLASS*(klass: Pointer): PGdkScreenClass =
   result = cast[PGdkScreenClass](G_TYPE_CHECK_CLASS_CAST(klass, GDK_TYPE_SCREEN()))
 
-proc GDK_IS_SCREEN*(anObject: Pointer): bool = 
+proc GDK_IS_SCREEN*(anObject: Pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, GDK_TYPE_SCREEN())
 
-proc GDK_IS_SCREEN_CLASS*(klass: Pointer): bool = 
+proc GDK_IS_SCREEN_CLASS*(klass: Pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, GDK_TYPE_SCREEN())
 
-proc GDK_SCREEN_GET_CLASS*(obj: Pointer): PGdkScreenClass = 
+proc GDK_SCREEN_GET_CLASS*(obj: Pointer): PGdkScreenClass =
   result = cast[PGdkScreenClass](G_TYPE_INSTANCE_GET_CLASS(obj, GDK_TYPE_SCREEN()))
 
-proc GDK_SELECTION_PRIMARY*(): TGdkAtom = 
+proc GDK_SELECTION_PRIMARY*(): TGdkAtom =
   result = `GDK_MAKE_ATOM`(1)
 
-proc GDK_SELECTION_SECONDARY*(): TGdkAtom = 
+proc GDK_SELECTION_SECONDARY*(): TGdkAtom =
   result = `GDK_MAKE_ATOM`(2)
 
-proc GDK_SELECTION_CLIPBOARD*(): TGdkAtom = 
+proc GDK_SELECTION_CLIPBOARD*(): TGdkAtom =
   result = `GDK_MAKE_ATOM`(69)
 
-proc GDK_TARGET_BITMAP*(): TGdkAtom = 
+proc GDK_TARGET_BITMAP*(): TGdkAtom =
   result = `GDK_MAKE_ATOM`(5)
 
-proc GDK_TARGET_COLORMAP*(): TGdkAtom = 
+proc GDK_TARGET_COLORMAP*(): TGdkAtom =
   result = `GDK_MAKE_ATOM`(7)
 
-proc GDK_TARGET_DRAWABLE*(): TGdkAtom = 
+proc GDK_TARGET_DRAWABLE*(): TGdkAtom =
   result = `GDK_MAKE_ATOM`(17)
 
-proc GDK_TARGET_PIXMAP*(): TGdkAtom = 
+proc GDK_TARGET_PIXMAP*(): TGdkAtom =
   result = `GDK_MAKE_ATOM`(20)
 
-proc GDK_TARGET_STRING*(): TGdkAtom = 
+proc GDK_TARGET_STRING*(): TGdkAtom =
   result = `GDK_MAKE_ATOM`(31)
 
-proc GDK_SELECTION_TYPE_ATOM*(): TGdkAtom = 
+proc GDK_SELECTION_TYPE_ATOM*(): TGdkAtom =
   result = `GDK_MAKE_ATOM`(4)
 
-proc GDK_SELECTION_TYPE_BITMAP*(): TGdkAtom = 
+proc GDK_SELECTION_TYPE_BITMAP*(): TGdkAtom =
   result = `GDK_MAKE_ATOM`(5)
 
-proc GDK_SELECTION_TYPE_COLORMAP*(): TGdkAtom = 
+proc GDK_SELECTION_TYPE_COLORMAP*(): TGdkAtom =
   result = `GDK_MAKE_ATOM`(7)
 
-proc GDK_SELECTION_TYPE_DRAWABLE*(): TGdkAtom = 
+proc GDK_SELECTION_TYPE_DRAWABLE*(): TGdkAtom =
   result = `GDK_MAKE_ATOM`(17)
 
-proc GDK_SELECTION_TYPE_INTEGER*(): TGdkAtom = 
+proc GDK_SELECTION_TYPE_INTEGER*(): TGdkAtom =
   result = `GDK_MAKE_ATOM`(19)
 
-proc GDK_SELECTION_TYPE_PIXMAP*(): TGdkAtom = 
+proc GDK_SELECTION_TYPE_PIXMAP*(): TGdkAtom =
   result = `GDK_MAKE_ATOM`(20)
 
-proc GDK_SELECTION_TYPE_WINDOW*(): TGdkAtom = 
+proc GDK_SELECTION_TYPE_WINDOW*(): TGdkAtom =
   result = `GDK_MAKE_ATOM`(33)
 
-proc GDK_SELECTION_TYPE_STRING*(): TGdkAtom = 
+proc GDK_SELECTION_TYPE_STRING*(): TGdkAtom =
   result = `GDK_MAKE_ATOM`(31)
 
-proc GDK_ATOM_TO_POINTER*(atom: TGdkAtom): pointer = 
+proc GDK_ATOM_TO_POINTER*(atom: TGdkAtom): pointer =
   result = cast[Pointer](atom)
 
-proc GDK_POINTER_TO_ATOM*(p: Pointer): TGdkAtom = 
+proc GDK_POINTER_TO_ATOM*(p: Pointer): TGdkAtom =
   result = cast[TGdkAtom](p)
 
-proc `GDK_MAKE_ATOM`*(val: guint): TGdkAtom = 
+proc `GDK_MAKE_ATOM`*(val: guint): TGdkAtom =
   result = cast[TGdkAtom](val)
 
-proc GDK_NONE*(): TGdkAtom = 
+proc GDK_NONE*(): TGdkAtom =
   result = `GDK_MAKE_ATOM`(0)
 
-proc GDK_TYPE_VISUAL*(): GType = 
+proc GDK_TYPE_VISUAL*(): GType =
   result = gdk_visual_get_type()
 
-proc GDK_VISUAL*(anObject: Pointer): PGdkVisual = 
+proc GDK_VISUAL*(anObject: Pointer): PGdkVisual =
   result = cast[PGdkVisual](G_TYPE_CHECK_INSTANCE_CAST(anObject, GDK_TYPE_VISUAL()))
 
-proc GDK_VISUAL_CLASS*(klass: Pointer): PGdkVisualClass = 
+proc GDK_VISUAL_CLASS*(klass: Pointer): PGdkVisualClass =
   result = cast[PGdkVisualClass](G_TYPE_CHECK_CLASS_CAST(klass, GDK_TYPE_VISUAL()))
 
-proc GDK_IS_VISUAL*(anObject: Pointer): bool = 
+proc GDK_IS_VISUAL*(anObject: Pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, GDK_TYPE_VISUAL())
 
-proc GDK_IS_VISUAL_CLASS*(klass: Pointer): bool = 
+proc GDK_IS_VISUAL_CLASS*(klass: Pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, GDK_TYPE_VISUAL())
 
-proc GDK_VISUAL_GET_CLASS*(obj: Pointer): PGdkVisualClass = 
+proc GDK_VISUAL_GET_CLASS*(obj: Pointer): PGdkVisualClass =
   result = cast[PGdkVisualClass](G_TYPE_INSTANCE_GET_CLASS(obj, GDK_TYPE_VISUAL()))
 
-proc gdk_visual_ref*(v: PGdkVisual) = 
+proc gdk_visual_ref*(v: PGdkVisual) =
   discard g_object_ref(v)
 
-proc gdk_visual_unref*(v: PGdkVisual) = 
+proc gdk_visual_unref*(v: PGdkVisual) =
   g_object_unref(v)
 
-proc GDK_TYPE_WINDOW*(): GType = 
+proc GDK_TYPE_WINDOW*(): GType =
   result = gdk_window_object_get_type()
 
-proc GDK_WINDOW*(anObject: Pointer): PGdkWindow = 
+proc GDK_WINDOW*(anObject: Pointer): PGdkWindow =
   result = cast[PGdkWindow](G_TYPE_CHECK_INSTANCE_CAST(anObject, GDK_TYPE_WINDOW()))
 
-proc GDK_WINDOW_CLASS*(klass: Pointer): PGdkWindowObjectClass = 
+proc GDK_WINDOW_CLASS*(klass: Pointer): PGdkWindowObjectClass =
   result = cast[PGdkWindowObjectClass](G_TYPE_CHECK_CLASS_CAST(klass, GDK_TYPE_WINDOW()))
 
-proc GDK_IS_WINDOW*(anObject: Pointer): bool = 
+proc GDK_IS_WINDOW*(anObject: Pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, GDK_TYPE_WINDOW())
 
-proc GDK_IS_WINDOW_CLASS*(klass: Pointer): bool = 
+proc GDK_IS_WINDOW_CLASS*(klass: Pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, GDK_TYPE_WINDOW())
 
-proc GDK_WINDOW_GET_CLASS*(obj: Pointer): PGdkWindowObjectClass = 
+proc GDK_WINDOW_GET_CLASS*(obj: Pointer): PGdkWindowObjectClass =
   result = cast[PGdkWindowObjectClass](G_TYPE_INSTANCE_GET_CLASS(obj, GDK_TYPE_WINDOW()))
 
-proc GDK_WINDOW_OBJECT*(anObject: Pointer): PGdkWindowObject = 
+proc GDK_WINDOW_OBJECT*(anObject: Pointer): PGdkWindowObject =
   result = cast[PGdkWindowObject](GDK_WINDOW(anObject))
 
-proc GdkWindowObject_guffaw_gravity*(a: var TGdkWindowObject): guint = 
+proc GdkWindowObject_guffaw_gravity*(a: var TGdkWindowObject): guint =
   result = (a.flag0 and bm_TGdkWindowObject_guffaw_gravity) shr
       bp_TGdkWindowObject_guffaw_gravity
 
-proc GdkWindowObject_set_guffaw_gravity*(a: var TGdkWindowObject, 
-    `guffaw_gravity`: guint) = 
+proc GdkWindowObject_set_guffaw_gravity*(a: var TGdkWindowObject,
+    `guffaw_gravity`: guint) =
   a.flag0 = a.flag0 or
-      ((`guffaw_gravity` shl bp_TGdkWindowObject_guffaw_gravity) and
+      (int16(`guffaw_gravity` shl bp_TGdkWindowObject_guffaw_gravity) and
       bm_TGdkWindowObject_guffaw_gravity)
 
-proc GdkWindowObject_input_only*(a: var TGdkWindowObject): guint = 
+proc GdkWindowObject_input_only*(a: var TGdkWindowObject): guint =
   result = (a.flag0 and bm_TGdkWindowObject_input_only) shr
       bp_TGdkWindowObject_input_only
 
-proc GdkWindowObject_set_input_only*(a: var TGdkWindowObject, 
-                                     `input_only`: guint) = 
+proc GdkWindowObject_set_input_only*(a: var TGdkWindowObject,
+                                     `input_only`: guint) =
   a.flag0 = a.flag0 or
-      ((`input_only` shl bp_TGdkWindowObject_input_only) and
+      (int16(`input_only` shl bp_TGdkWindowObject_input_only) and
       bm_TGdkWindowObject_input_only)
 
-proc GdkWindowObject_modal_hint*(a: var TGdkWindowObject): guint = 
+proc GdkWindowObject_modal_hint*(a: var TGdkWindowObject): guint =
   result = (a.flag0 and bm_TGdkWindowObject_modal_hint) shr
       bp_TGdkWindowObject_modal_hint
 
-proc GdkWindowObject_set_modal_hint*(a: var TGdkWindowObject, 
-                                     `modal_hint`: guint) = 
+proc GdkWindowObject_set_modal_hint*(a: var TGdkWindowObject,
+                                     `modal_hint`: guint) =
   a.flag0 = a.flag0 or
-      ((`modal_hint` shl bp_TGdkWindowObject_modal_hint) and
+      (int16(`modal_hint` shl bp_TGdkWindowObject_modal_hint) and
       bm_TGdkWindowObject_modal_hint)
 
-proc GdkWindowObject_destroyed*(a: var TGdkWindowObject): guint = 
+proc GdkWindowObject_destroyed*(a: var TGdkWindowObject): guint =
   result = (a.flag0 and bm_TGdkWindowObject_destroyed) shr
       bp_TGdkWindowObject_destroyed
 
-proc GdkWindowObject_set_destroyed*(a: var TGdkWindowObject, `destroyed`: guint) = 
+proc GdkWindowObject_set_destroyed*(a: var TGdkWindowObject, `destroyed`: guint) =
   a.flag0 = a.flag0 or
-      ((`destroyed` shl bp_TGdkWindowObject_destroyed) and
+      (int16(`destroyed` shl bp_TGdkWindowObject_destroyed) and
       bm_TGdkWindowObject_destroyed)
 
-proc GDK_ROOT_PARENT*(): PGdkWindow = 
+proc GDK_ROOT_PARENT*(): PGdkWindow =
   result = gdk_get_default_root_window()
 
-proc gdk_window_get_size*(drawable: PGdkDrawable, width: Pgint, height: Pgint) = 
+proc gdk_window_get_size*(drawable: PGdkDrawable, width: Pgint, height: Pgint) =
   gdk_drawable_get_size(drawable, width, height)
 
-proc gdk_window_get_type*(window: PGdkWindow): TGdkWindowType = 
+proc gdk_window_get_type*(window: PGdkWindow): TGdkWindowType =
   result = gdk_window_get_window_type(window)
 
-proc gdk_window_get_colormap*(drawable: PGdkDrawable): PGdkColormap = 
+proc gdk_window_get_colormap*(drawable: PGdkDrawable): PGdkColormap =
   result = gdk_drawable_get_colormap(drawable)
 
-proc gdk_window_set_colormap*(drawable: PGdkDrawable, colormap: PGdkColormap) = 
+proc gdk_window_set_colormap*(drawable: PGdkDrawable, colormap: PGdkColormap) =
   gdk_drawable_set_colormap(drawable, colormap)
 
-proc gdk_window_get_visual*(drawable: PGdkDrawable): PGdkVisual = 
+proc gdk_window_get_visual*(drawable: PGdkDrawable): PGdkVisual =
   result = gdk_drawable_get_visual(drawable)
 
-proc gdk_window_ref*(drawable: PGdkDrawable): PGdkDrawable = 
+proc gdk_window_ref*(drawable: PGdkDrawable): PGdkDrawable =
   result = GDK_DRAWABLE(g_object_ref(G_OBJECT(drawable)))
 
-proc gdk_window_unref*(drawable: PGdkDrawable) = 
+proc gdk_window_unref*(drawable: PGdkDrawable) =
   g_object_unref(G_OBJECT(drawable))
 
-proc gdk_window_copy_area*(drawable: PGdkDrawable, gc: PGdkGC, x, y: gint, 
-                           source_drawable: PGdkDrawable, 
-                           source_x, source_y: gint, width, height: gint) = 
-  gdk_draw_pixmap(drawable, gc, source_drawable, source_x, source_y, x, y, 
+proc gdk_window_copy_area*(drawable: PGdkDrawable, gc: PGdkGC, x, y: gint,
+                           source_drawable: PGdkDrawable,
+                           source_x, source_y: gint, width, height: gint) =
+  gdk_draw_pixmap(drawable, gc, source_drawable, source_x, source_y, x, y,
                   width, height)
diff --git a/lib/base/gtk/gdk2pixbuf.nim b/lib/base/gtk/gdk2pixbuf.nim
index b9ab472c2..bcf9690e8 100644
--- a/lib/base/gtk/gdk2pixbuf.nim
+++ b/lib/base/gtk/gdk2pixbuf.nim
@@ -1,12 +1,11 @@
-import 
+import
   glib2
 
-when defined(win32): 
-  {.define: gdkpixbufwin.}
-  const 
+when defined(win32):
+  const
     gdkpixbuflib = "libgdk_pixbuf-2.0-0.dll"
-elif defined(darwin): 
-  const 
+elif defined(darwin):
+  const
     gdkpixbuflib = "gdk_pixbuf-2.0.0"
   # linklib gtk-x11-2.0
   # linklib gdk-x11-2.0
@@ -15,29 +14,28 @@ elif defined(darwin):
   # linklib gobject-2.0.0
   # linklib gdk_pixbuf-2.0.0
   # linklib atk-1.0.0
-else: 
-  const 
+else:
+  const
     gdkpixbuflib = "libgdk_pixbuf-2.0.so"
-{.define: HasGTK2_4.}
-{.define: HasGTK2_6.}
-type 
+
+type
   PGdkPixbuf* = pointer
   PGdkPixbufAnimation* = pointer
   PGdkPixbufAnimationIter* = pointer
   PGdkPixbufAlphaMode* = ptr TGdkPixbufAlphaMode
-  TGdkPixbufAlphaMode* = enum 
+  TGdkPixbufAlphaMode* = enum
     GDK_PIXBUF_ALPHA_BILEVEL, GDK_PIXBUF_ALPHA_FULL
   PGdkColorspace* = ptr TGdkColorspace
-  TGdkColorspace* = enum 
+  TGdkColorspace* = enum
     GDK_COLORSPACE_RGB
   TGdkPixbufDestroyNotify* = proc (pixels: Pguchar, data: gpointer){.cdecl.}
   PGdkPixbufError* = ptr TGdkPixbufError
-  TGdkPixbufError* = enum 
-    GDK_PIXBUF_ERROR_CORRUPT_IMAGE, GDK_PIXBUF_ERROR_INSUFFICIENT_MEMORY, 
-    GDK_PIXBUF_ERROR_BAD_OPTION, GDK_PIXBUF_ERROR_UNKNOWN_TYPE, 
+  TGdkPixbufError* = enum
+    GDK_PIXBUF_ERROR_CORRUPT_IMAGE, GDK_PIXBUF_ERROR_INSUFFICIENT_MEMORY,
+    GDK_PIXBUF_ERROR_BAD_OPTION, GDK_PIXBUF_ERROR_UNKNOWN_TYPE,
     GDK_PIXBUF_ERROR_UNSUPPORTED_OPERATION, GDK_PIXBUF_ERROR_FAILED
   PGdkInterpType* = ptr TGdkInterpType
-  TGdkInterpType* = enum 
+  TGdkInterpType* = enum
     GDK_INTERP_NEAREST, GDK_INTERP_TILES, GDK_INTERP_BILINEAR, GDK_INTERP_HYPER
 
 proc GDK_TYPE_PIXBUF*(): GType
@@ -50,117 +48,115 @@ proc GDK_TYPE_PIXBUF_ANIMATION_ITER*(): GType
 proc GDK_PIXBUF_ANIMATION_ITER*(anObject: pointer): PGdkPixbufAnimationIter
 proc GDK_IS_PIXBUF_ANIMATION_ITER*(anObject: pointer): bool
 proc GDK_PIXBUF_ERROR*(): TGQuark
-proc gdk_pixbuf_error_quark*(): TGQuark{.cdecl, dynlib: gdkpixbuflib, 
+proc gdk_pixbuf_error_quark*(): TGQuark{.cdecl, dynlib: gdkpixbuflib,
     importc: "gdk_pixbuf_error_quark".}
-proc gdk_pixbuf_get_type*(): GType{.cdecl, dynlib: gdkpixbuflib, 
+proc gdk_pixbuf_get_type*(): GType{.cdecl, dynlib: gdkpixbuflib,
                                     importc: "gdk_pixbuf_get_type".}
-when not defined(GDK_PIXBUF_DISABLE_DEPRECATED): 
-  proc gdk_pixbuf_ref(pixbuf: PGdkPixbuf): PGdkPixbuf{.cdecl, 
+when not defined(GDK_PIXBUF_DISABLE_DEPRECATED):
+  proc gdk_pixbuf_ref*(pixbuf: PGdkPixbuf): PGdkPixbuf{.cdecl,
       dynlib: gdkpixbuflib, importc: "gdk_pixbuf_ref".}
-  proc gdk_pixbuf_unref(pixbuf: PGdkPixbuf){.cdecl, dynlib: gdkpixbuflib, 
+  proc gdk_pixbuf_unref*(pixbuf: PGdkPixbuf){.cdecl, dynlib: gdkpixbuflib,
       importc: "gdk_pixbuf_unref".}
-proc gdk_pixbuf_get_colorspace*(pixbuf: PGdkPixbuf): TGdkColorspace{.cdecl, 
+proc gdk_pixbuf_get_colorspace*(pixbuf: PGdkPixbuf): TGdkColorspace{.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_get_colorspace".}
-proc gdk_pixbuf_get_n_channels*(pixbuf: PGdkPixbuf): int32{.cdecl, 
+proc gdk_pixbuf_get_n_channels*(pixbuf: PGdkPixbuf): int32{.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_get_n_channels".}
-proc gdk_pixbuf_get_has_alpha*(pixbuf: PGdkPixbuf): gboolean{.cdecl, 
+proc gdk_pixbuf_get_has_alpha*(pixbuf: PGdkPixbuf): gboolean{.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_get_has_alpha".}
-proc gdk_pixbuf_get_bits_per_sample*(pixbuf: PGdkPixbuf): int32{.cdecl, 
+proc gdk_pixbuf_get_bits_per_sample*(pixbuf: PGdkPixbuf): int32{.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_get_bits_per_sample".}
-proc gdk_pixbuf_get_pixels*(pixbuf: PGdkPixbuf): Pguchar{.cdecl, 
+proc gdk_pixbuf_get_pixels*(pixbuf: PGdkPixbuf): Pguchar{.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_get_pixels".}
-proc gdk_pixbuf_get_width*(pixbuf: PGdkPixbuf): int32{.cdecl, 
+proc gdk_pixbuf_get_width*(pixbuf: PGdkPixbuf): int32{.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_get_width".}
-proc gdk_pixbuf_get_height*(pixbuf: PGdkPixbuf): int32{.cdecl, 
+proc gdk_pixbuf_get_height*(pixbuf: PGdkPixbuf): int32{.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_get_height".}
-proc gdk_pixbuf_get_rowstride*(pixbuf: PGdkPixbuf): int32{.cdecl, 
+proc gdk_pixbuf_get_rowstride*(pixbuf: PGdkPixbuf): int32{.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_get_rowstride".}
-proc gdk_pixbuf_new*(colorspace: TGdkColorspace, has_alpha: gboolean, 
+proc gdk_pixbuf_new*(colorspace: TGdkColorspace, has_alpha: gboolean,
                      bits_per_sample: int32, width: int32, height: int32): PGdkPixbuf{.
     cdecl, dynlib: gdkpixbuflib, importc: "gdk_pixbuf_new".}
-proc gdk_pixbuf_copy*(pixbuf: PGdkPixbuf): PGdkPixbuf{.cdecl, 
+proc gdk_pixbuf_copy*(pixbuf: PGdkPixbuf): PGdkPixbuf{.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_copy".}
-proc gdk_pixbuf_new_subpixbuf*(src_pixbuf: PGdkPixbuf, src_x: int32, 
+proc gdk_pixbuf_new_subpixbuf*(src_pixbuf: PGdkPixbuf, src_x: int32,
                                src_y: int32, width: int32, height: int32): PGdkPixbuf{.
     cdecl, dynlib: gdkpixbuflib, importc: "gdk_pixbuf_new_subpixbuf".}
 proc gdk_pixbuf_new_from_file*(filename: cstring, error: pointer): PGdkPixbuf{.
     cdecl, dynlib: gdkpixbuflib, importc: "gdk_pixbuf_new_from_file".}
-proc gdk_pixbuf_new_from_data*(data: Pguchar, colorspace: TGdkColorspace, 
-                               has_alpha: gboolean, bits_per_sample: int32, 
-                               width: int32, height: int32, rowstride: int32, 
-                               destroy_fn: TGdkPixbufDestroyNotify, 
-                               destroy_fn_data: gpointer): PGdkPixbuf{.cdecl, 
+proc gdk_pixbuf_new_from_data*(data: Pguchar, colorspace: TGdkColorspace,
+                               has_alpha: gboolean, bits_per_sample: int32,
+                               width: int32, height: int32, rowstride: int32,
+                               destroy_fn: TGdkPixbufDestroyNotify,
+                               destroy_fn_data: gpointer): PGdkPixbuf{.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_new_from_data".}
-proc gdk_pixbuf_new_from_xpm_data*(data: PPchar): PGdkPixbuf{.cdecl, 
+proc gdk_pixbuf_new_from_xpm_data*(data: PPchar): PGdkPixbuf{.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_new_from_xpm_data".}
-proc gdk_pixbuf_new_from_inline*(data_length: gint, a: var guint8, 
+proc gdk_pixbuf_new_from_inline*(data_length: gint, a: var guint8,
                                  copy_pixels: gboolean, error: pointer): PGdkPixbuf{.
     cdecl, dynlib: gdkpixbuflib, importc: "gdk_pixbuf_new_from_inline".}
-when defined(HasGTK2_4): 
-  proc gdk_pixbuf_new_from_file_at_size(filename: cstring, width, height: gint, 
-                                        error: pointer): PGdkPixbuf{.cdecl, 
-      dynlib: gdkpixbuflib, importc: "gdk_pixbuf_new_from_file_at_size".}
-when defined(HasGTK2_6): 
-  proc gdk_pixbuf_new_from_file_at_scale(filename: cstring, width, height: gint, 
-      preserve_aspect_ratio: gboolean, error: pointer): PGdkPixbuf{.cdecl, 
-      dynlib: gdkpixbuflib, importc: "gdk_pixbuf_new_from_file_at_scale".}
-proc gdk_pixbuf_fill*(pixbuf: PGdkPixbuf, pixel: guint32){.cdecl, 
+proc gdk_pixbuf_new_from_file_at_size*(filename: cstring, width, height: gint,
+                                       error: pointer): PGdkPixbuf{.cdecl,
+    dynlib: gdkpixbuflib, importc: "gdk_pixbuf_new_from_file_at_size".}
+proc gdk_pixbuf_new_from_file_at_scale*(filename: cstring, width, height: gint,
+    preserve_aspect_ratio: gboolean, error: pointer): PGdkPixbuf{.cdecl,
+    dynlib: gdkpixbuflib, importc: "gdk_pixbuf_new_from_file_at_scale".}
+proc gdk_pixbuf_fill*(pixbuf: PGdkPixbuf, pixel: guint32){.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_fill".}
-proc gdk_pixbuf_save*(pixbuf: PGdkPixbuf, filename: cstring, `type`: cstring, 
-                      error: pointer): gboolean{.cdecl, varargs, 
+proc gdk_pixbuf_save*(pixbuf: PGdkPixbuf, filename: cstring, `type`: cstring,
+                      error: pointer): gboolean{.cdecl, varargs,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_save".}
-proc gdk_pixbuf_savev*(pixbuf: PGdkPixbuf, filename: cstring, `type`: cstring, 
-                       option_keys: PPchar, option_values: PPchar, 
-                       error: pointer): gboolean{.cdecl, dynlib: gdkpixbuflib, 
+proc gdk_pixbuf_savev*(pixbuf: PGdkPixbuf, filename: cstring, `type`: cstring,
+                       option_keys: PPchar, option_values: PPchar,
+                       error: pointer): gboolean{.cdecl, dynlib: gdkpixbuflib,
     importc: "gdk_pixbuf_savev".}
-proc gdk_pixbuf_add_alpha*(pixbuf: PGdkPixbuf, substitute_color: gboolean, 
-                           r: guchar, g: guchar, b: guchar): PGdkPixbuf{.cdecl, 
+proc gdk_pixbuf_add_alpha*(pixbuf: PGdkPixbuf, substitute_color: gboolean,
+                           r: guchar, g: guchar, b: guchar): PGdkPixbuf{.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_add_alpha".}
-proc gdk_pixbuf_copy_area*(src_pixbuf: PGdkPixbuf, src_x: int32, src_y: int32, 
-                           width: int32, height: int32, dest_pixbuf: PGdkPixbuf, 
-                           dest_x: int32, dest_y: int32){.cdecl, 
+proc gdk_pixbuf_copy_area*(src_pixbuf: PGdkPixbuf, src_x: int32, src_y: int32,
+                           width: int32, height: int32, dest_pixbuf: PGdkPixbuf,
+                           dest_x: int32, dest_y: int32){.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_copy_area".}
-proc gdk_pixbuf_saturate_and_pixelate*(src: PGdkPixbuf, dest: PGdkPixbuf, 
+proc gdk_pixbuf_saturate_and_pixelate*(src: PGdkPixbuf, dest: PGdkPixbuf,
                                        saturation: gfloat, pixelate: gboolean){.
     cdecl, dynlib: gdkpixbuflib, importc: "gdk_pixbuf_saturate_and_pixelate".}
-proc gdk_pixbuf_scale*(src: PGdkPixbuf, dest: PGdkPixbuf, dest_x: int32, 
-                       dest_y: int32, dest_width: int32, dest_height: int32, 
-                       offset_x: float64, offset_y: float64, scale_x: float64, 
-                       scale_y: float64, interp_type: TGdkInterpType){.cdecl, 
+proc gdk_pixbuf_scale*(src: PGdkPixbuf, dest: PGdkPixbuf, dest_x: int32,
+                       dest_y: int32, dest_width: int32, dest_height: int32,
+                       offset_x: float64, offset_y: float64, scale_x: float64,
+                       scale_y: float64, interp_type: TGdkInterpType){.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_scale".}
-proc gdk_pixbuf_composite*(src: PGdkPixbuf, dest: PGdkPixbuf, dest_x: int32, 
-                           dest_y: int32, dest_width: int32, dest_height: int32, 
-                           offset_x: float64, offset_y: float64, 
-                           scale_x: float64, scale_y: float64, 
+proc gdk_pixbuf_composite*(src: PGdkPixbuf, dest: PGdkPixbuf, dest_x: int32,
+                           dest_y: int32, dest_width: int32, dest_height: int32,
+                           offset_x: float64, offset_y: float64,
+                           scale_x: float64, scale_y: float64,
                            interp_type: TGdkInterpType, overall_alpha: int32){.
     cdecl, dynlib: gdkpixbuflib, importc: "gdk_pixbuf_composite".}
-proc gdk_pixbuf_composite_color*(src: PGdkPixbuf, dest: PGdkPixbuf, 
-                                 dest_x: int32, dest_y: int32, 
-                                 dest_width: int32, dest_height: int32, 
-                                 offset_x: float64, offset_y: float64, 
-                                 scale_x: float64, scale_y: float64, 
-                                 interp_type: TGdkInterpType, 
-                                 overall_alpha: int32, check_x: int32, 
-                                 check_y: int32, check_size: int32, 
-                                 color1: guint32, color2: guint32){.cdecl, 
+proc gdk_pixbuf_composite_color*(src: PGdkPixbuf, dest: PGdkPixbuf,
+                                 dest_x: int32, dest_y: int32,
+                                 dest_width: int32, dest_height: int32,
+                                 offset_x: float64, offset_y: float64,
+                                 scale_x: float64, scale_y: float64,
+                                 interp_type: TGdkInterpType,
+                                 overall_alpha: int32, check_x: int32,
+                                 check_y: int32, check_size: int32,
+                                 color1: guint32, color2: guint32){.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_composite_color".}
-proc gdk_pixbuf_scale_simple*(src: PGdkPixbuf, dest_width: int32, 
+proc gdk_pixbuf_scale_simple*(src: PGdkPixbuf, dest_width: int32,
                               dest_height: int32, interp_type: TGdkInterpType): PGdkPixbuf{.
     cdecl, dynlib: gdkpixbuflib, importc: "gdk_pixbuf_scale_simple".}
-proc gdk_pixbuf_composite_color_simple*(src: PGdkPixbuf, dest_width: int32, 
-                                        dest_height: int32, 
-                                        interp_type: TGdkInterpType, 
-                                        overall_alpha: int32, check_size: int32, 
+proc gdk_pixbuf_composite_color_simple*(src: PGdkPixbuf, dest_width: int32,
+                                        dest_height: int32,
+                                        interp_type: TGdkInterpType,
+                                        overall_alpha: int32, check_size: int32,
                                         color1: guint32, color2: guint32): PGdkPixbuf{.
     cdecl, dynlib: gdkpixbuflib, importc: "gdk_pixbuf_composite_color_simple".}
-proc gdk_pixbuf_animation_get_type*(): GType{.cdecl, dynlib: gdkpixbuflib, 
+proc gdk_pixbuf_animation_get_type*(): GType{.cdecl, dynlib: gdkpixbuflib,
     importc: "gdk_pixbuf_animation_get_type".}
 proc gdk_pixbuf_animation_new_from_file*(filename: cstring, error: pointer): PGdkPixbufAnimation{.
     cdecl, dynlib: gdkpixbuflib, importc: "gdk_pixbuf_animation_new_from_file".}
-when not defined(GDK_PIXBUF_DISABLE_DEPRECATED): 
-  proc gdk_pixbuf_animation_ref(animation: PGdkPixbufAnimation): PGdkPixbufAnimation{.
+when not defined(GDK_PIXBUF_DISABLE_DEPRECATED):
+  proc gdk_pixbuf_animation_ref*(animation: PGdkPixbufAnimation): PGdkPixbufAnimation{.
       cdecl, dynlib: gdkpixbuflib, importc: "gdk_pixbuf_animation_ref".}
-  proc gdk_pixbuf_animation_unref(animation: PGdkPixbufAnimation){.cdecl, 
+  proc gdk_pixbuf_animation_unref*(animation: PGdkPixbufAnimation){.cdecl,
       dynlib: gdkpixbuflib, importc: "gdk_pixbuf_animation_unref".}
 proc gdk_pixbuf_animation_get_width*(animation: PGdkPixbufAnimation): int32{.
     cdecl, dynlib: gdkpixbuflib, importc: "gdk_pixbuf_animation_get_width".}
@@ -169,37 +165,37 @@ proc gdk_pixbuf_animation_get_height*(animation: PGdkPixbufAnimation): int32{.
 proc gdk_pixbuf_animation_is_static_image*(animation: PGdkPixbufAnimation): gboolean{.
     cdecl, dynlib: gdkpixbuflib, importc: "gdk_pixbuf_animation_is_static_image".}
 proc gdk_pixbuf_animation_get_static_image*(animation: PGdkPixbufAnimation): PGdkPixbuf{.
-    cdecl, dynlib: gdkpixbuflib, 
+    cdecl, dynlib: gdkpixbuflib,
     importc: "gdk_pixbuf_animation_get_static_image".}
-proc gdk_pixbuf_animation_get_iter*(animation: PGdkPixbufAnimation, 
+proc gdk_pixbuf_animation_get_iter*(animation: PGdkPixbufAnimation,
                                     e: var TGTimeVal): PGdkPixbufAnimationIter{.
     cdecl, dynlib: gdkpixbuflib, importc: "gdk_pixbuf_animation_get_iter".}
-proc gdk_pixbuf_animation_iter_get_type*(): GType{.cdecl, dynlib: gdkpixbuflib, 
+proc gdk_pixbuf_animation_iter_get_type*(): GType{.cdecl, dynlib: gdkpixbuflib,
     importc: "gdk_pixbuf_animation_iter_get_type".}
 proc gdk_pixbuf_animation_iter_get_delay_time*(iter: PGdkPixbufAnimationIter): int32{.
-    cdecl, dynlib: gdkpixbuflib, 
+    cdecl, dynlib: gdkpixbuflib,
     importc: "gdk_pixbuf_animation_iter_get_delay_time".}
 proc gdk_pixbuf_animation_iter_get_pixbuf*(iter: PGdkPixbufAnimationIter): PGdkPixbuf{.
     cdecl, dynlib: gdkpixbuflib, importc: "gdk_pixbuf_animation_iter_get_pixbuf".}
 proc gdk_pixbuf_animation_iter_on_currently_loading_frame*(
-    iter: PGdkPixbufAnimationIter): gboolean{.cdecl, dynlib: gdkpixbuflib, 
+    iter: PGdkPixbufAnimationIter): gboolean{.cdecl, dynlib: gdkpixbuflib,
     importc: "gdk_pixbuf_animation_iter_on_currently_loading_frame".}
-proc gdk_pixbuf_animation_iter_advance*(iter: PGdkPixbufAnimationIter, 
-                                        e: var TGTimeVal): gboolean{.cdecl, 
+proc gdk_pixbuf_animation_iter_advance*(iter: PGdkPixbufAnimationIter,
+                                        e: var TGTimeVal): gboolean{.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_animation_iter_advance".}
-proc gdk_pixbuf_get_option*(pixbuf: PGdkPixbuf, key: cstring): cstring{.cdecl, 
+proc gdk_pixbuf_get_option*(pixbuf: PGdkPixbuf, key: cstring): cstring{.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_get_option".}
-type 
+type
   PGdkPixbufLoader* = ptr TGdkPixbufLoader
-  TGdkPixbufLoader* {.final.} = object 
+  TGdkPixbufLoader* {.final.} = object
     parent_instance*: TGObject
     priv*: gpointer
 
   PGdkPixbufLoaderClass* = ptr TGdkPixbufLoaderClass
-  TGdkPixbufLoaderClass* {.final.} = object 
+  TGdkPixbufLoaderClass* {.final.} = object
     parent_class*: TGObjectClass
     area_prepared*: proc (loader: PGdkPixbufLoader){.cdecl.}
-    area_updated*: proc (loader: PGdkPixbufLoader, x: int32, y: int32, 
+    area_updated*: proc (loader: PGdkPixbufLoader, x: int32, y: int32,
                          width: int32, height: int32){.cdecl.}
     closed*: proc (loader: PGdkPixbufLoader){.cdecl.}
 
@@ -210,70 +206,70 @@ proc GDK_PIXBUF_LOADER_CLASS*(klass: pointer): PGdkPixbufLoaderClass
 proc GDK_IS_PIXBUF_LOADER*(obj: pointer): bool
 proc GDK_IS_PIXBUF_LOADER_CLASS*(klass: pointer): bool
 proc GDK_PIXBUF_LOADER_GET_CLASS*(obj: pointer): PGdkPixbufLoaderClass
-proc gdk_pixbuf_loader_get_type*(): GType{.cdecl, dynlib: gdkpixbuflib, 
+proc gdk_pixbuf_loader_get_type*(): GType{.cdecl, dynlib: gdkpixbuflib,
     importc: "gdk_pixbuf_loader_get_type".}
-proc gdk_pixbuf_loader_new*(): PGdkPixbufLoader{.cdecl, dynlib: gdkpixbuflib, 
+proc gdk_pixbuf_loader_new*(): PGdkPixbufLoader{.cdecl, dynlib: gdkpixbuflib,
     importc: "gdk_pixbuf_loader_new".}
 proc gdk_pixbuf_loader_new_with_type*(image_type: cstring, error: pointer): PGdkPixbufLoader{.
     cdecl, dynlib: gdkpixbuflib, importc: "gdk_pixbuf_loader_new_with_type".}
-proc gdk_pixbuf_loader_write*(loader: PGdkPixbufLoader, buf: Pguchar, 
-                              count: gsize, error: pointer): gboolean{.cdecl, 
+proc gdk_pixbuf_loader_write*(loader: PGdkPixbufLoader, buf: Pguchar,
+                              count: gsize, error: pointer): gboolean{.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_loader_write".}
-proc gdk_pixbuf_loader_get_pixbuf*(loader: PGdkPixbufLoader): PGdkPixbuf{.cdecl, 
+proc gdk_pixbuf_loader_get_pixbuf*(loader: PGdkPixbufLoader): PGdkPixbuf{.cdecl,
     dynlib: gdkpixbuflib, importc: "gdk_pixbuf_loader_get_pixbuf".}
 proc gdk_pixbuf_loader_get_animation*(loader: PGdkPixbufLoader): PGdkPixbufAnimation{.
     cdecl, dynlib: gdkpixbuflib, importc: "gdk_pixbuf_loader_get_animation".}
 proc gdk_pixbuf_loader_close*(loader: PGdkPixbufLoader, error: pointer): gboolean{.
     cdecl, dynlib: gdkpixbuflib, importc: "gdk_pixbuf_loader_close".}
-proc GDK_TYPE_PIXBUF_LOADER*(): GType = 
+proc GDK_TYPE_PIXBUF_LOADER*(): GType =
   result = gdk_pixbuf_loader_get_type()
 
-proc GDK_PIXBUF_LOADER*(obj: pointer): PGdkPixbufLoader = 
-  result = cast[PGdkPixbufLoader](G_TYPE_CHECK_INSTANCE_CAST(obj, 
+proc GDK_PIXBUF_LOADER*(obj: pointer): PGdkPixbufLoader =
+  result = cast[PGdkPixbufLoader](G_TYPE_CHECK_INSTANCE_CAST(obj,
       GDK_TYPE_PIXBUF_LOADER()))
 
-proc GDK_PIXBUF_LOADER_CLASS*(klass: pointer): PGdkPixbufLoaderClass = 
-  result = cast[PGdkPixbufLoaderClass](G_TYPE_CHECK_CLASS_CAST(klass, 
+proc GDK_PIXBUF_LOADER_CLASS*(klass: pointer): PGdkPixbufLoaderClass =
+  result = cast[PGdkPixbufLoaderClass](G_TYPE_CHECK_CLASS_CAST(klass,
       GDK_TYPE_PIXBUF_LOADER()))
 
-proc GDK_IS_PIXBUF_LOADER*(obj: pointer): bool = 
+proc GDK_IS_PIXBUF_LOADER*(obj: pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(obj, GDK_TYPE_PIXBUF_LOADER())
 
-proc GDK_IS_PIXBUF_LOADER_CLASS*(klass: pointer): bool = 
+proc GDK_IS_PIXBUF_LOADER_CLASS*(klass: pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, GDK_TYPE_PIXBUF_LOADER())
 
-proc GDK_PIXBUF_LOADER_GET_CLASS*(obj: pointer): PGdkPixbufLoaderClass = 
-  result = cast[PGdkPixbufLoaderClass](G_TYPE_INSTANCE_GET_CLASS(obj, 
+proc GDK_PIXBUF_LOADER_GET_CLASS*(obj: pointer): PGdkPixbufLoaderClass =
+  result = cast[PGdkPixbufLoaderClass](G_TYPE_INSTANCE_GET_CLASS(obj,
       GDK_TYPE_PIXBUF_LOADER()))
 
-proc GDK_TYPE_PIXBUF*(): GType = 
+proc GDK_TYPE_PIXBUF*(): GType =
   result = gdk_pixbuf_get_type()
 
-proc GDK_PIXBUF*(anObject: pointer): PGdkPixbuf = 
+proc GDK_PIXBUF*(anObject: pointer): PGdkPixbuf =
   result = cast[PGdkPixbuf](G_TYPE_CHECK_INSTANCE_CAST(anObject, GDK_TYPE_PIXBUF()))
 
-proc GDK_IS_PIXBUF*(anObject: pointer): bool = 
+proc GDK_IS_PIXBUF*(anObject: pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, GDK_TYPE_PIXBUF())
 
-proc GDK_TYPE_PIXBUF_ANIMATION*(): GType = 
+proc GDK_TYPE_PIXBUF_ANIMATION*(): GType =
   result = gdk_pixbuf_animation_get_type()
 
-proc GDK_PIXBUF_ANIMATION*(anObject: pointer): PGdkPixbufAnimation = 
-  result = cast[PGdkPixbufAnimation](G_TYPE_CHECK_INSTANCE_CAST(anObject, 
+proc GDK_PIXBUF_ANIMATION*(anObject: pointer): PGdkPixbufAnimation =
+  result = cast[PGdkPixbufAnimation](G_TYPE_CHECK_INSTANCE_CAST(anObject,
       GDK_TYPE_PIXBUF_ANIMATION()))
 
-proc GDK_IS_PIXBUF_ANIMATION*(anObject: pointer): bool = 
+proc GDK_IS_PIXBUF_ANIMATION*(anObject: pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, GDK_TYPE_PIXBUF_ANIMATION())
 
-proc GDK_TYPE_PIXBUF_ANIMATION_ITER*(): GType = 
+proc GDK_TYPE_PIXBUF_ANIMATION_ITER*(): GType =
   result = gdk_pixbuf_animation_iter_get_type()
 
-proc GDK_PIXBUF_ANIMATION_ITER*(anObject: pointer): PGdkPixbufAnimationIter = 
-  result = cast[PGdkPixbufAnimationIter](G_TYPE_CHECK_INSTANCE_CAST(anObject, 
+proc GDK_PIXBUF_ANIMATION_ITER*(anObject: pointer): PGdkPixbufAnimationIter =
+  result = cast[PGdkPixbufAnimationIter](G_TYPE_CHECK_INSTANCE_CAST(anObject,
     GDK_TYPE_PIXBUF_ANIMATION_ITER()))
 
-proc GDK_IS_PIXBUF_ANIMATION_ITER*(anObject: pointer): bool = 
+proc GDK_IS_PIXBUF_ANIMATION_ITER*(anObject: pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, GDK_TYPE_PIXBUF_ANIMATION_ITER())
 
-proc GDK_PIXBUF_ERROR*(): TGQuark = 
+proc GDK_PIXBUF_ERROR*(): TGQuark =
   result = gdk_pixbuf_error_quark()
diff --git a/lib/base/gtk/glib2.nim b/lib/base/gtk/glib2.nim
index c84bc26eb..dfcc586da 100644
--- a/lib/base/gtk/glib2.nim
+++ b/lib/base/gtk/glib2.nim
@@ -1,16 +1,16 @@
 when defined(windows):
-  {.define: gtkwin.}
   const
     gliblib = "libglib-2.0-0.dll"
-    gthreadlib = "libgthread-2.0-0.dll"
     gmodulelib = "libgmodule-2.0-0.dll"
     gobjectlib = "libgobject-2.0-0.dll"
 else:
   const
     gliblib = "libglib-2.0.so"
-    gthreadlib = "libgthread-2.0.so"
     gmodulelib = "libgmodule-2.0.so"
     gobjectlib = "libgobject-2.0.so"
+    
+# gthreadlib = "libgthread-2.0.so"
+
 type
   PGTypePlugin* = pointer
   PGParamSpecPool* = pointer
@@ -19,29 +19,29 @@ type
   PPPgchar* = ptr PPgchar
   PPgchar* = ptr cstring
   gchar* = char
-  Pgshort* = ptr gshort
   gshort* = cshort
-  Pglong* = ptr glong
   glong* = clong
+  gint* = cint
+  gboolean* = bool
+  guchar* = char
+  gushort* = int16
+  gulong* = int
+  guint* = cint
+  gfloat* = cfloat
+  gdouble* = cdouble
+  gpointer* = pointer
+  Pgshort* = ptr gshort
+  Pglong* = ptr glong
   Pgint* = ptr gint
   PPgint* = ptr Pgint
-  gint* = cint
   Pgboolean* = ptr gboolean
-  gboolean* = bool
   Pguchar* = ptr guchar
   PPguchar* = ptr Pguchar
-  guchar* = char
   Pgushort* = ptr gushort
-  gushort* = int16
   Pgulong* = ptr gulong
-  gulong* = int
-  guint* = cint
   Pguint* = ptr guint
-  gfloat* = cfloat
   Pgfloat* = ptr gfloat
-  gdouble* = cdouble
   Pgdouble* = ptr gdouble
-  gpointer* = pointer
   pgpointer* = ptr gpointer
   gconstpointer* = pointer
   PGCompareFunc* = ptr TGCompareFunc
@@ -118,8 +118,8 @@ type
     g_type*: GType
     data*: array[0..1, gdouble]
 
-  PPGData* = ptr PGData
   PGData* = pointer
+  PPGData* = ptr PGData
   PGSList* = ptr TGSList
   PPGSList* = ptr PGSList
   TGSList* {.final.} = object
@@ -132,8 +132,8 @@ type
     next*: PGList
     prev*: PGList
 
-  PGParamFlags* = ptr TGParamFlags
   TGParamFlags* = int32
+  PGParamFlags* = ptr TGParamFlags
   PGParamSpec* = ptr TGParamSpec
   PPGParamSpec* = ptr PGParamSpec
   TGParamSpec* {.final.} = object
@@ -194,7 +194,7 @@ const
   G_TYPE_PARAM* = GType(19 shl G_TYPE_FUNDAMENTAL_SHIFT)
   G_TYPE_OBJECT* = GType(20 shl G_TYPE_FUNDAMENTAL_SHIFT)
 
-proc G_TYPE_MAKE_FUNDAMENTAL*(x: int32): GType
+proc G_TYPE_MAKE_FUNDAMENTAL*(x: int): GType
 const
   G_TYPE_RESERVED_GLIB_FIRST* = 21
   G_TYPE_RESERVED_GLIB_LAST* = 31
@@ -226,8 +226,8 @@ proc G_TYPE_FROM_INSTANCE*(instance: Pointer): GType
 proc G_TYPE_FROM_CLASS*(g_class: Pointer): GType
 proc G_TYPE_FROM_INTERFACE*(g_iface: Pointer): GType
 type
-  PGTypeDebugFlags* = ptr TGTypeDebugFlags
   TGTypeDebugFlags* = int32
+  PGTypeDebugFlags* = ptr TGTypeDebugFlags
 
 const
   G_TYPE_DEBUG_NONE* = 0
@@ -296,8 +296,8 @@ const
   G_TYPE_FLAG_DEEP_DERIVABLE* = 1 shl 3
 
 type
-  PGTypeFlags* = ptr TGTypeFlags
   TGTypeFlags* = int32
+  PGTypeFlags* = ptr TGTypeFlags
 
 const
   G_TYPE_FLAG_ABSTRACT* = 1 shl 4
@@ -562,8 +562,8 @@ proc g_strdup_value_contents*(value: PGValue): cstring{.cdecl,
 proc g_value_set_string_take_ownership*(value: PGValue, v_string: cstring){.
     cdecl, dynlib: gobjectlib, importc: "g_value_set_string_take_ownership".}
 type
-  Pgchararray* = ptr Tgchararray
   Tgchararray* = gchar
+  Pgchararray* = ptr Tgchararray
 
 proc G_TYPE_IS_PARAM*(theType: GType): bool
 proc G_PARAM_SPEC*(pspec: Pointer): PGParamSpec
@@ -692,26 +692,26 @@ proc G_CLOSURE_N_NOTIFIERS*(cl: PGClosure): int32
 proc G_CCLOSURE_SWAP_DATA*(cclosure: PGClosure): int32
 proc G_CALLBACK*(f: pointer): TGCallback
 const
-  bm_TGClosure_ref_count* = 0x00007FFF
-  bp_TGClosure_ref_count* = 0
-  bm_TGClosure_meta_marshal* = 0x00008000
-  bp_TGClosure_meta_marshal* = 15
-  bm_TGClosure_n_guards* = 0x00010000
-  bp_TGClosure_n_guards* = 16
-  bm_TGClosure_n_fnotifiers* = 0x00060000
-  bp_TGClosure_n_fnotifiers* = 17
-  bm_TGClosure_n_inotifiers* = 0x07F80000
-  bp_TGClosure_n_inotifiers* = 19
-  bm_TGClosure_in_inotify* = 0x08000000
-  bp_TGClosure_in_inotify* = 27
-  bm_TGClosure_floating* = 0x10000000
-  bp_TGClosure_floating* = 28
-  bm_TGClosure_derivative_flag* = 0x20000000
-  bp_TGClosure_derivative_flag* = 29
-  bm_TGClosure_in_marshal* = 0x40000000
-  bp_TGClosure_in_marshal* = 30
-  bm_TGClosure_is_invalid* = 0x80000000
-  bp_TGClosure_is_invalid* = 31
+  bm_TGClosure_ref_count* = 0x00007FFF'i32
+  bp_TGClosure_ref_count* = 0'i32
+  bm_TGClosure_meta_marshal* = 0x00008000'i32
+  bp_TGClosure_meta_marshal* = 15'i32
+  bm_TGClosure_n_guards* = 0x00010000'i32
+  bp_TGClosure_n_guards* = 16'i32
+  bm_TGClosure_n_fnotifiers* = 0x00060000'i32
+  bp_TGClosure_n_fnotifiers* = 17'i32
+  bm_TGClosure_n_inotifiers* = 0x07F80000'i32
+  bp_TGClosure_n_inotifiers* = 19'i32
+  bm_TGClosure_in_inotify* = 0x08000000'i32
+  bp_TGClosure_in_inotify* = 27'i32
+  bm_TGClosure_floating* = 0x10000000'i32
+  bp_TGClosure_floating* = 28'i32
+  bm_TGClosure_derivative_flag* = 0x20000000'i32
+  bp_TGClosure_derivative_flag* = 29'i32
+  bm_TGClosure_in_marshal* = 0x40000000'i32
+  bp_TGClosure_in_marshal* = 30'i32
+  bm_TGClosure_is_invalid* = 0x80000000'i32
+  bp_TGClosure_is_invalid* = 31'i32
 
 proc ref_count*(a: var TGClosure): guint
 proc set_ref_count*(a: var TGClosure, ref_count: guint)
@@ -2061,16 +2061,16 @@ type
   TGHookFlagMask* = int
 
 const
-  G_HOOK_FLAG_ACTIVE* = 1 shl 0
-  G_HOOK_FLAG_IN_CALL* = 1 shl 1
-  G_HOOK_FLAG_MASK* = 0x0000000F
+  G_HOOK_FLAG_ACTIVE* = 1'i32 shl 0'i32
+  G_HOOK_FLAG_IN_CALL* = 1'i32 shl 1'i32
+  G_HOOK_FLAG_MASK* = 0x0000000F'i32
 
 const
-  G_HOOK_FLAG_USER_SHIFT* = 4
-  bm_TGHookList_hook_size* = 0x0000FFFF
-  bp_TGHookList_hook_size* = 0
-  bm_TGHookList_is_setup* = 0x00010000
-  bp_TGHookList_is_setup* = 16
+  G_HOOK_FLAG_USER_SHIFT* = 4'i32
+  bm_TGHookList_hook_size* = 0x0000FFFF'i32
+  bp_TGHookList_hook_size* = 0'i32
+  bm_TGHookList_is_setup* = 0x00010000'i32
+  bp_TGHookList_is_setup* = 16'i32
 
 proc TGHookList_hook_size*(a: var TGHookList): guint
 proc TGHookList_set_hook_size*(a: var TGHookList, `hook_size`: guint)
@@ -2502,18 +2502,18 @@ type
 
 
 const
-  bm_TGIOChannel_use_buffer* = 0x00000001
-  bp_TGIOChannel_use_buffer* = 0
-  bm_TGIOChannel_do_encode* = 0x00000002
-  bp_TGIOChannel_do_encode* = 1
-  bm_TGIOChannel_close_on_unref* = 0x00000004
-  bp_TGIOChannel_close_on_unref* = 2
-  bm_TGIOChannel_is_readable* = 0x00000008
-  bp_TGIOChannel_is_readable* = 3
-  bm_TGIOChannel_is_writeable* = 0x00000010
-  bp_TGIOChannel_is_writeable* = 4
-  bm_TGIOChannel_is_seekable* = 0x00000020
-  bp_TGIOChannel_is_seekable* = 5
+  bm_TGIOChannel_use_buffer* = 0x00000001'i16
+  bp_TGIOChannel_use_buffer* = 0'i16
+  bm_TGIOChannel_do_encode* = 0x00000002'i16
+  bp_TGIOChannel_do_encode* = 1'i16
+  bm_TGIOChannel_close_on_unref* = 0x00000004'i16
+  bp_TGIOChannel_close_on_unref* = 2'i16
+  bm_TGIOChannel_is_readable* = 0x00000008'i16
+  bp_TGIOChannel_is_readable* = 3'i16
+  bm_TGIOChannel_is_writeable* = 0x00000010'i16
+  bp_TGIOChannel_is_writeable* = 4'i16
+  bm_TGIOChannel_is_seekable* = 0x00000020'i16
+  bp_TGIOChannel_is_seekable* = 5'i16
 
 proc TGIOChannel_use_buffer*(a: var TGIOChannel): guint
 proc TGIOChannel_set_use_buffer*(a: var TGIOChannel, `use_buffer`: guint)
@@ -3046,48 +3046,48 @@ const
   G_CSET_DIGITS* = "0123456789"
 
 const
-  bm_TGScannerConfig_case_sensitive* = 0x00000001
-  bp_TGScannerConfig_case_sensitive* = 0
-  bm_TGScannerConfig_skip_comment_multi* = 0x00000002
-  bp_TGScannerConfig_skip_comment_multi* = 1
-  bm_TGScannerConfig_skip_comment_single* = 0x00000004
-  bp_TGScannerConfig_skip_comment_single* = 2
-  bm_TGScannerConfig_scan_comment_multi* = 0x00000008
-  bp_TGScannerConfig_scan_comment_multi* = 3
-  bm_TGScannerConfig_scan_identifier* = 0x00000010
-  bp_TGScannerConfig_scan_identifier* = 4
-  bm_TGScannerConfig_scan_identifier_1char* = 0x00000020
-  bp_TGScannerConfig_scan_identifier_1char* = 5
-  bm_TGScannerConfig_scan_identifier_NULL* = 0x00000040
-  bp_TGScannerConfig_scan_identifier_NULL* = 6
-  bm_TGScannerConfig_scan_symbols* = 0x00000080
-  bp_TGScannerConfig_scan_symbols* = 7
-  bm_TGScannerConfig_scan_binary* = 0x00000100
-  bp_TGScannerConfig_scan_binary* = 8
-  bm_TGScannerConfig_scan_octal* = 0x00000200
-  bp_TGScannerConfig_scan_octal* = 9
-  bm_TGScannerConfig_scan_float* = 0x00000400
-  bp_TGScannerConfig_scan_float* = 10
-  bm_TGScannerConfig_scan_hex* = 0x00000800
-  bp_TGScannerConfig_scan_hex* = 11
-  bm_TGScannerConfig_scan_hex_dollar* = 0x00001000
-  bp_TGScannerConfig_scan_hex_dollar* = 12
-  bm_TGScannerConfig_scan_string_sq* = 0x00002000
-  bp_TGScannerConfig_scan_string_sq* = 13
-  bm_TGScannerConfig_scan_string_dq* = 0x00004000
-  bp_TGScannerConfig_scan_string_dq* = 14
-  bm_TGScannerConfig_numbers_2_int* = 0x00008000
-  bp_TGScannerConfig_numbers_2_int* = 15
-  bm_TGScannerConfig_int_2_float* = 0x00010000
-  bp_TGScannerConfig_int_2_float* = 16
-  bm_TGScannerConfig_identifier_2_string* = 0x00020000
-  bp_TGScannerConfig_identifier_2_string* = 17
-  bm_TGScannerConfig_char_2_token* = 0x00040000
-  bp_TGScannerConfig_char_2_token* = 18
-  bm_TGScannerConfig_symbol_2_token* = 0x00080000
-  bp_TGScannerConfig_symbol_2_token* = 19
-  bm_TGScannerConfig_scope_0_fallback* = 0x00100000
-  bp_TGScannerConfig_scope_0_fallback* = 20
+  bm_TGScannerConfig_case_sensitive* = 0x00000001'i32
+  bp_TGScannerConfig_case_sensitive* = 0'i32
+  bm_TGScannerConfig_skip_comment_multi* = 0x00000002'i32
+  bp_TGScannerConfig_skip_comment_multi* = 1'i32
+  bm_TGScannerConfig_skip_comment_single* = 0x00000004'i32
+  bp_TGScannerConfig_skip_comment_single* = 2'i32
+  bm_TGScannerConfig_scan_comment_multi* = 0x00000008'i32
+  bp_TGScannerConfig_scan_comment_multi* = 3'i32
+  bm_TGScannerConfig_scan_identifier* = 0x00000010'i32
+  bp_TGScannerConfig_scan_identifier* = 4'i32
+  bm_TGScannerConfig_scan_identifier_1char* = 0x00000020'i32
+  bp_TGScannerConfig_scan_identifier_1char* = 5'i32
+  bm_TGScannerConfig_scan_identifier_NULL* = 0x00000040'i32
+  bp_TGScannerConfig_scan_identifier_NULL* = 6'i32
+  bm_TGScannerConfig_scan_symbols* = 0x00000080'i32
+  bp_TGScannerConfig_scan_symbols* = 7'i32
+  bm_TGScannerConfig_scan_binary* = 0x00000100'i32
+  bp_TGScannerConfig_scan_binary* = 8'i32
+  bm_TGScannerConfig_scan_octal* = 0x00000200'i32
+  bp_TGScannerConfig_scan_octal* = 9'i32
+  bm_TGScannerConfig_scan_float* = 0x00000400'i32
+  bp_TGScannerConfig_scan_float* = 10'i32
+  bm_TGScannerConfig_scan_hex* = 0x00000800'i32
+  bp_TGScannerConfig_scan_hex* = 11'i32
+  bm_TGScannerConfig_scan_hex_dollar* = 0x00001000'i32
+  bp_TGScannerConfig_scan_hex_dollar* = 12'i32
+  bm_TGScannerConfig_scan_string_sq* = 0x00002000'i32
+  bp_TGScannerConfig_scan_string_sq* = 13'i32
+  bm_TGScannerConfig_scan_string_dq* = 0x00004000'i32
+  bp_TGScannerConfig_scan_string_dq* = 14'i32
+  bm_TGScannerConfig_numbers_2_int* = 0x00008000'i32
+  bp_TGScannerConfig_numbers_2_int* = 15'i32
+  bm_TGScannerConfig_int_2_float* = 0x00010000'i32
+  bp_TGScannerConfig_int_2_float* = 16'i32
+  bm_TGScannerConfig_identifier_2_string* = 0x00020000'i32
+  bp_TGScannerConfig_identifier_2_string* = 17'i32
+  bm_TGScannerConfig_char_2_token* = 0x00040000'i32
+  bp_TGScannerConfig_char_2_token* = 18'i32
+  bm_TGScannerConfig_symbol_2_token* = 0x00080000'i32
+  bp_TGScannerConfig_symbol_2_token* = 19'i32
+  bm_TGScannerConfig_scope_0_fallback* = 0x00100000'i32
+  bp_TGScannerConfig_scope_0_fallback* = 20'i32
 
 proc TGScannerConfig_case_sensitive*(a: var TGScannerConfig): guint
 proc TGScannerConfig_set_case_sensitive*(a: var TGScannerConfig,
@@ -3439,19 +3439,21 @@ proc g_cclosure_marshal_BOOL__FLAGS*(closure: PGClosure, return_value: PGValue,
                                      marshal_data: GPointer){.cdecl,
     dynlib: gliblib, importc: "g_cclosure_marshal_BOOLEAN__FLAGS".}
 proc GUINT16_SWAP_LE_BE_CONSTANT*(val: guint16): guint16 =
-  Result = ((val and 0x000000FF) shl 8) or ((val and 0x0000FF00) shr 8)
+  Result = ((val and 0x00FF'i16) shl 8'i16) or ((val and 0xFF00'i16) shr 8'i16)
 
 proc GUINT32_SWAP_LE_BE_CONSTANT*(val: guint32): guint32 =
-  Result = ((val and 0x000000FF) shl 24) or ((val and 0x0000FF00) shl 8) or
-      ((val and 0x00FF0000) shr 8) or ((val and 0xFF000000) shr 24)
+  Result = ((val and 0x000000FF'i32) shl 24'i32) or ((val and 0x0000FF00'i32) shl 8'i32) or
+      ((val and 0x00FF0000'i32) shr 8'i32) or ((val and 0xFF000000'i32) shr 24'i32)
 
 proc GUINT_TO_POINTER*(i: guint): pointer =
   Result = cast[Pointer](TAddress(i))
 
-type
-  PGArray = pointer
 
 when false:
+
+  type
+    PGArray* = pointer
+
   proc g_array_append_val*(a: PGArray, v: gpointer): PGArray =
     result = g_array_append_vals(a, addr(v), 1)
 
@@ -3678,17 +3680,17 @@ proc G_HOOK_FLAGS*(hook: PGHook): guint =
   result = hook.flags
 
 proc G_HOOK_ACTIVE*(hook: PGHook): bool =
-  result = (hook.flags and G_HOOK_FLAG_ACTIVE) != 0
+  result = (hook.flags and G_HOOK_FLAG_ACTIVE) != 0'i32
 
 proc G_HOOK_IN_CALL*(hook: PGHook): bool =
-  result = (hook.flags and G_HOOK_FLAG_IN_CALL) != 0
+  result = (hook.flags and G_HOOK_FLAG_IN_CALL) != 0'i32
 
 proc G_HOOK_IS_VALID*(hook: PGHook): bool =
   result = (hook.hook_id != 0) and G_HOOK_ACTIVE(hook)
 
 proc G_HOOK_IS_UNLINKED*(hook: PGHook): bool =
   result = (hook.next == nil) and (hook.prev == nil) and
-      (hook.hook_id == 0) and (hook.ref_count == 0)
+      (hook.hook_id == 0) and (hook.ref_count == 0'i32)
 
 proc g_hook_append*(hook_list: PGHookList, hook: PGHook) =
   g_hook_insert_before(hook_list, nil, hook)
@@ -3702,7 +3704,7 @@ proc TGIOChannel_use_buffer*(a: var TGIOChannel): guint =
 
 proc TGIOChannel_set_use_buffer*(a: var TGIOChannel, `use_buffer`: guint) =
   a.flag0 = a.flag0 or
-      ((`use_buffer` shl bp_TGIOChannel_use_buffer) and
+      (int16(`use_buffer` shl bp_TGIOChannel_use_buffer) and
       bm_TGIOChannel_use_buffer)
 
 proc TGIOChannel_do_encode*(a: var TGIOChannel): guint =
@@ -3711,7 +3713,7 @@ proc TGIOChannel_do_encode*(a: var TGIOChannel): guint =
 
 proc TGIOChannel_set_do_encode*(a: var TGIOChannel, `do_encode`: guint) =
   a.flag0 = a.flag0 or
-      ((`do_encode` shl bp_TGIOChannel_do_encode) and
+      (int16(`do_encode` shl bp_TGIOChannel_do_encode) and
       bm_TGIOChannel_do_encode)
 
 proc TGIOChannel_close_on_unref*(a: var TGIOChannel): guint =
@@ -3720,7 +3722,7 @@ proc TGIOChannel_close_on_unref*(a: var TGIOChannel): guint =
 
 proc TGIOChannel_set_close_on_unref*(a: var TGIOChannel, `close_on_unref`: guint) =
   a.flag0 = a.flag0 or
-      ((`close_on_unref` shl bp_TGIOChannel_close_on_unref) and
+      (int16(`close_on_unref` shl bp_TGIOChannel_close_on_unref) and
       bm_TGIOChannel_close_on_unref)
 
 proc TGIOChannel_is_readable*(a: var TGIOChannel): guint =
@@ -3729,7 +3731,7 @@ proc TGIOChannel_is_readable*(a: var TGIOChannel): guint =
 
 proc TGIOChannel_set_is_readable*(a: var TGIOChannel, `is_readable`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_readable` shl bp_TGIOChannel_is_readable) and
+      (int16(`is_readable` shl bp_TGIOChannel_is_readable) and
       bm_TGIOChannel_is_readable)
 
 proc TGIOChannel_is_writeable*(a: var TGIOChannel): guint =
@@ -3738,7 +3740,7 @@ proc TGIOChannel_is_writeable*(a: var TGIOChannel): guint =
 
 proc TGIOChannel_set_is_writeable*(a: var TGIOChannel, `is_writeable`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_writeable` shl bp_TGIOChannel_is_writeable) and
+      (int16(`is_writeable` shl bp_TGIOChannel_is_writeable) and
       bm_TGIOChannel_is_writeable)
 
 proc TGIOChannel_is_seekable*(a: var TGIOChannel): guint =
@@ -3747,7 +3749,7 @@ proc TGIOChannel_is_seekable*(a: var TGIOChannel): guint =
 
 proc TGIOChannel_set_is_seekable*(a: var TGIOChannel, `is_seekable`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_seekable` shl bp_TGIOChannel_is_seekable) and
+      (int16(`is_seekable` shl bp_TGIOChannel_is_seekable) and
       bm_TGIOChannel_is_seekable)
 
 proc g_utf8_next_char*(p: pguchar): pguchar =
@@ -3816,10 +3818,10 @@ proc g_node_first_child*(node: PGNode): PGNode =
     result = nil
 
 proc g_rand_boolean*(rand: PGRand): gboolean =
-  result = ((g_rand_int(rand)) and (1 shl 15)) != 0
+  result = (int(g_rand_int(rand)) and (1 shl 15)) != 0
 
 proc g_random_boolean*(): gboolean =
-  result = (g_random_int() and (1 shl 15)) != 0
+  result = (int(g_random_int()) and (1 shl 15)) != 0
 
 proc TGScannerConfig_case_sensitive*(a: var TGScannerConfig): guint =
   result = (a.flag0 and bm_TGScannerConfig_case_sensitive) shr
@@ -4077,7 +4079,7 @@ when false:
   proc g_strstrip*(str: cstring): cstring =
     result = g_strchomp(g_strchug(str))
 
-proc G_TYPE_MAKE_FUNDAMENTAL*(x: int32): GType =
+proc G_TYPE_MAKE_FUNDAMENTAL*(x: int): GType =
   result = GType(x shl G_TYPE_FUNDAMENTAL_SHIFT)
 
 proc G_TYPE_IS_FUNDAMENTAL*(theType: GType): bool =
@@ -4202,7 +4204,7 @@ proc G_CLOSURE_NEEDS_MARSHAL*(closure: Pointer): bool =
   result = cast[PGClosure](closure).marshal == nil
 
 proc G_CLOSURE_N_NOTIFIERS*(cl: PGClosure): int32 =
-  result = ((meta_marshal(cl) + ((n_guards(cl)) shl 1)) + (n_fnotifiers(cl))) +
+  result = ((meta_marshal(cl) + ((n_guards(cl)) shl 1'i32)) + (n_fnotifiers(cl))) +
       (n_inotifiers(cl))
 
 proc G_CCLOSURE_SWAP_DATA*(cclosure: PGClosure): int32 =
diff --git a/lib/base/gtk/gtk2.nim b/lib/base/gtk/gtk2.nim
index b7cf6e64f..81e09f85d 100644
--- a/lib/base/gtk/gtk2.nim
+++ b/lib/base/gtk/gtk2.nim
@@ -3626,10 +3626,10 @@ const
   GTK_DOUBLE_BUFFERED* = 1 shl 21
 
 const
-  bm_TGtkWidgetAuxInfo_x_set* = 0x00000001
-  bp_TGtkWidgetAuxInfo_x_set* = 0
-  bm_TGtkWidgetAuxInfo_y_set* = 0x00000002
-  bp_TGtkWidgetAuxInfo_y_set* = 1
+  bm_TGtkWidgetAuxInfo_x_set* = 0x00000001'i16
+  bp_TGtkWidgetAuxInfo_x_set* = 0'i16
+  bm_TGtkWidgetAuxInfo_y_set* = 0x00000002'i16
+  bp_TGtkWidgetAuxInfo_y_set* = 1'i16
 
 proc GTK_TYPE_WIDGET*(): GType
 proc GTK_WIDGET*(widget: pointer): PGtkWidget
@@ -3956,8 +3956,8 @@ const
   GTK_ACCEL_VISIBLE* = 1 shl 0
   GTK_ACCEL_LOCKED* = 1 shl 1
   GTK_ACCEL_MASK* = 0x00000007
-  bm_TGtkAccelKey_accel_flags* = 0x0000FFFF
-  bp_TGtkAccelKey_accel_flags* = 0
+  bm_TGtkAccelKey_accel_flags* = 0x0000FFFF'i16
+  bp_TGtkAccelKey_accel_flags* = 0'i16
 
 proc GTK_TYPE_ACCEL_GROUP*(): GType
 proc GTK_ACCEL_GROUP*(anObject: pointer): PGtkAccelGroup
@@ -4021,16 +4021,16 @@ proc gtk_accel_group_reconnect*(accel_group: PGtkAccelGroup,
                                 accel_path_quark: TGQuark){.cdecl,
     dynlib: gtklib, importc: "_gtk_accel_group_reconnect".}
 const
-  bm_TGtkContainer_border_width* = 0x0000FFFF
-  bp_TGtkContainer_border_width* = 0
-  bm_TGtkContainer_need_resize* = 0x00010000
-  bp_TGtkContainer_need_resize* = 16
-  bm_TGtkContainer_resize_mode* = 0x00060000
-  bp_TGtkContainer_resize_mode* = 17
-  bm_TGtkContainer_reallocate_redraws* = 0x00080000
-  bp_TGtkContainer_reallocate_redraws* = 19
-  bm_TGtkContainer_has_focus_chain* = 0x00100000
-  bp_TGtkContainer_has_focus_chain* = 20
+  bm_TGtkContainer_border_width* = 0x0000FFFF'i32
+  bp_TGtkContainer_border_width* = 0'i32
+  bm_TGtkContainer_need_resize* = 0x00010000'i32
+  bp_TGtkContainer_need_resize* = 16'i32
+  bm_TGtkContainer_resize_mode* = 0x00060000'i32
+  bp_TGtkContainer_resize_mode* = 17'i32
+  bm_TGtkContainer_reallocate_redraws* = 0x00080000'i32
+  bp_TGtkContainer_reallocate_redraws* = 19'i32
+  bm_TGtkContainer_has_focus_chain* = 0x00100000'i32
+  bp_TGtkContainer_has_focus_chain* = 20'i32
 
 proc GTK_TYPE_CONTAINER*(): GType
 proc GTK_CONTAINER*(obj: pointer): PGtkContainer
@@ -4147,42 +4147,42 @@ proc gtk_bin_get_type*(): TGtkType{.cdecl, dynlib: gtklib,
 proc gtk_bin_get_child*(bin: PGtkBin): PGtkWidget{.cdecl, dynlib: gtklib,
     importc: "gtk_bin_get_child".}
 const
-  bm_TGtkWindow_allow_shrink* = 0x00000001
-  bp_TGtkWindow_allow_shrink* = 0
-  bm_TGtkWindow_allow_grow* = 0x00000002
-  bp_TGtkWindow_allow_grow* = 1
-  bm_TGtkWindow_configure_notify_received* = 0x00000004
-  bp_TGtkWindow_configure_notify_received* = 2
-  bm_TGtkWindow_need_default_position* = 0x00000008
-  bp_TGtkWindow_need_default_position* = 3
-  bm_TGtkWindow_need_default_size* = 0x00000010
-  bp_TGtkWindow_need_default_size* = 4
-  bm_TGtkWindow_position* = 0x000000E0
-  bp_TGtkWindow_position* = 5
-  bm_TGtkWindow_type* = 0x00000F00
-  bp_TGtkWindow_type* = 8
-  bm_TGtkWindow_has_user_ref_count* = 0x00001000
-  bp_TGtkWindow_has_user_ref_count* = 12
-  bm_TGtkWindow_has_focus* = 0x00002000
-  bp_TGtkWindow_has_focus* = 13
-  bm_TGtkWindow_modal* = 0x00004000
-  bp_TGtkWindow_modal* = 14
-  bm_TGtkWindow_destroy_with_parent* = 0x00008000
-  bp_TGtkWindow_destroy_with_parent* = 15
-  bm_TGtkWindow_has_frame* = 0x00010000
-  bp_TGtkWindow_has_frame* = 16
-  bm_TGtkWindow_iconify_initially* = 0x00020000
-  bp_TGtkWindow_iconify_initially* = 17
-  bm_TGtkWindow_stick_initially* = 0x00040000
-  bp_TGtkWindow_stick_initially* = 18
-  bm_TGtkWindow_maximize_initially* = 0x00080000
-  bp_TGtkWindow_maximize_initially* = 19
-  bm_TGtkWindow_decorated* = 0x00100000
-  bp_TGtkWindow_decorated* = 20
-  bm_TGtkWindow_type_hint* = 0x00E00000
-  bp_TGtkWindow_type_hint* = 21
-  bm_TGtkWindow_gravity* = 0x1F000000
-  bp_TGtkWindow_gravity* = 24
+  bm_TGtkWindow_allow_shrink* = 0x00000001'i32
+  bp_TGtkWindow_allow_shrink* = 0'i32
+  bm_TGtkWindow_allow_grow* = 0x00000002'i32
+  bp_TGtkWindow_allow_grow* = 1'i32
+  bm_TGtkWindow_configure_notify_received* = 0x00000004'i32
+  bp_TGtkWindow_configure_notify_received* = 2'i32
+  bm_TGtkWindow_need_default_position* = 0x00000008'i32
+  bp_TGtkWindow_need_default_position* = 3'i32
+  bm_TGtkWindow_need_default_size* = 0x00000010'i32
+  bp_TGtkWindow_need_default_size* = 4'i32
+  bm_TGtkWindow_position* = 0x000000E0'i32
+  bp_TGtkWindow_position* = 5'i32
+  bm_TGtkWindow_type* = 0x00000F00'i32
+  bp_TGtkWindow_type* = 8'i32
+  bm_TGtkWindow_has_user_ref_count* = 0x00001000'i32
+  bp_TGtkWindow_has_user_ref_count* = 12'i32
+  bm_TGtkWindow_has_focus* = 0x00002000'i32
+  bp_TGtkWindow_has_focus* = 13'i32
+  bm_TGtkWindow_modal* = 0x00004000'i32
+  bp_TGtkWindow_modal* = 14'i32
+  bm_TGtkWindow_destroy_with_parent* = 0x00008000'i32
+  bp_TGtkWindow_destroy_with_parent* = 15'i32
+  bm_TGtkWindow_has_frame* = 0x00010000'i32
+  bp_TGtkWindow_has_frame* = 16'i32
+  bm_TGtkWindow_iconify_initially* = 0x00020000'i32
+  bp_TGtkWindow_iconify_initially* = 17'i32
+  bm_TGtkWindow_stick_initially* = 0x00040000'i32
+  bp_TGtkWindow_stick_initially* = 18'i32
+  bm_TGtkWindow_maximize_initially* = 0x00080000'i32
+  bp_TGtkWindow_maximize_initially* = 19'i32
+  bm_TGtkWindow_decorated* = 0x00100000'i32
+  bp_TGtkWindow_decorated* = 20'i32
+  bm_TGtkWindow_type_hint* = 0x00E00000'i32
+  bp_TGtkWindow_type_hint* = 21'i32
+  bm_TGtkWindow_gravity* = 0x1F000000'i32
+  bp_TGtkWindow_gravity* = 24'i32
 
 proc GTK_TYPE_WINDOW*(): GType
 proc GTK_WINDOW*(obj: pointer): PGtkWindow
@@ -4412,14 +4412,14 @@ proc gtk_window_query_nonaccels*(window: PGtkWindow, accel_key: guint,
                                    accel_mods: TGdkModifierType): gboolean{.
     cdecl, dynlib: gtklib, importc: "_gtk_window_query_nonaccels".}
 const
-  bm_TGtkLabel_jtype* = 0x00000003
-  bp_TGtkLabel_jtype* = 0
-  bm_TGtkLabel_wrap* = 0x00000004
-  bp_TGtkLabel_wrap* = 2
-  bm_TGtkLabel_use_underline* = 0x00000008
-  bp_TGtkLabel_use_underline* = 3
-  bm_TGtkLabel_use_markup* = 0x00000010
-  bp_TGtkLabel_use_markup* = 4
+  bm_TGtkLabel_jtype* = 0x00000003'i16
+  bp_TGtkLabel_jtype* = 0'i16
+  bm_TGtkLabel_wrap* = 0x00000004'i16
+  bp_TGtkLabel_wrap* = 2'i16
+  bm_TGtkLabel_use_underline* = 0x00000008'i16
+  bp_TGtkLabel_use_underline* = 3'i16
+  bm_TGtkLabel_use_markup* = 0x00000010'i16
+  bp_TGtkLabel_use_markup* = 4'i16
 
 proc GTK_TYPE_LABEL*(): GType
 proc GTK_LABEL*(obj: pointer): PGtkLabel
@@ -4498,8 +4498,8 @@ proc gtk_label_get_layout*(`label`: PGtkLabel): PPangoLayout{.cdecl,
 proc gtk_label_get_layout_offsets*(`label`: PGtkLabel, x: Pgint, y: Pgint){.
     cdecl, dynlib: gtklib, importc: "gtk_label_get_layout_offsets".}
 const
-  bm_TGtkAccelLabelClass_latin1_to_char* = 0x00000001
-  bp_TGtkAccelLabelClass_latin1_to_char* = 0
+  bm_TGtkAccelLabelClass_latin1_to_char* = 0x00000001'i16
+  bp_TGtkAccelLabelClass_latin1_to_char* = 0'i16
 
 proc GTK_TYPE_ACCEL_LABEL*(): GType
 proc GTK_ACCEL_LABEL*(obj: pointer): PGtkAccelLabel
@@ -4661,12 +4661,12 @@ proc gtk_arrow_set*(arrow: PGtkArrow, arrow_type: TGtkArrowType,
                     shadow_type: TGtkShadowType){.cdecl, dynlib: gtklib,
     importc: "gtk_arrow_set".}
 const
-  bm_TGtkBindingSet_parsed* = 0x00000001
-  bp_TGtkBindingSet_parsed* = 0
-  bm_TGtkBindingEntry_destroyed* = 0x00000001
-  bp_TGtkBindingEntry_destroyed* = 0
-  bm_TGtkBindingEntry_in_emission* = 0x00000002
-  bp_TGtkBindingEntry_in_emission* = 1
+  bm_TGtkBindingSet_parsed* = 0x00000001'i16
+  bp_TGtkBindingSet_parsed* = 0'i16
+  bm_TGtkBindingEntry_destroyed* = 0x00000001'i16
+  bp_TGtkBindingEntry_destroyed* = 0'i16
+  bm_TGtkBindingEntry_in_emission* = 0x00000002'i16
+  bp_TGtkBindingEntry_in_emission* = 1'i16
 
 proc gtk_binding_entry_add*(binding_set: PGtkBindingSet, keyval: guint,
                             modifiers: TGdkModifierType)
@@ -4709,16 +4709,16 @@ proc gtk_bindings_activate_event*(anObject: PGtkObject, event: PGdkEventKey): gb
 proc gtk_binding_reset_parsed*(){.cdecl, dynlib: gtklib,
                                   importc: "_gtk_binding_reset_parsed".}
 const
-  bm_TGtkBox_homogeneous* = 0x00000001
-  bp_TGtkBox_homogeneous* = 0
-  bm_TGtkBoxChild_expand* = 0x00000001
-  bp_TGtkBoxChild_expand* = 0
-  bm_TGtkBoxChild_fill* = 0x00000002
-  bp_TGtkBoxChild_fill* = 1
-  bm_TGtkBoxChild_pack* = 0x00000004
-  bp_TGtkBoxChild_pack* = 2
-  bm_TGtkBoxChild_is_secondary* = 0x00000008
-  bp_TGtkBoxChild_is_secondary* = 3
+  bm_TGtkBox_homogeneous* = 0x00000001'i16
+  bp_TGtkBox_homogeneous* = 0'i16
+  bm_TGtkBoxChild_expand* = 0x00000001'i16
+  bp_TGtkBoxChild_expand* = 0'i16
+  bm_TGtkBoxChild_fill* = 0x00000002'i16
+  bp_TGtkBoxChild_fill* = 1'i16
+  bm_TGtkBoxChild_pack* = 0x00000004'i16
+  bp_TGtkBoxChild_pack* = 2'i16
+  bm_TGtkBoxChild_is_secondary* = 0x00000008'i16
+  bp_TGtkBoxChild_is_secondary* = 3'i16
 
 proc GTK_TYPE_BOX*(): GType
 proc GTK_BOX*(obj: pointer): PGtkBox
@@ -4790,22 +4790,22 @@ proc gtk_button_box_child_requisition*(widget: PGtkWidget,
     height: var int32){.cdecl, dynlib: gtklib,
                        importc: "_gtk_button_box_child_requisition".}
 const
-  bm_TGtkButton_constructed* = 0x00000001
-  bp_TGtkButton_constructed* = 0
-  bm_TGtkButton_in_button* = 0x00000002
-  bp_TGtkButton_in_button* = 1
-  bm_TGtkButton_button_down* = 0x00000004
-  bp_TGtkButton_button_down* = 2
-  bm_TGtkButton_relief* = 0x00000018
-  bp_TGtkButton_relief* = 3
-  bm_TGtkButton_use_underline* = 0x00000020
-  bp_TGtkButton_use_underline* = 5
-  bm_TGtkButton_use_stock* = 0x00000040
-  bp_TGtkButton_use_stock* = 6
-  bm_TGtkButton_depressed* = 0x00000080
-  bp_TGtkButton_depressed* = 7
-  bm_TGtkButton_depress_on_activate* = 0x00000100
-  bp_TGtkButton_depress_on_activate* = 8
+  bm_TGtkButton_constructed* = 0x00000001'i16
+  bp_TGtkButton_constructed* = 0'i16
+  bm_TGtkButton_in_button* = 0x00000002'i16
+  bp_TGtkButton_in_button* = 1'i16
+  bm_TGtkButton_button_down* = 0x00000004'i16
+  bp_TGtkButton_button_down* = 2'i16
+  bm_TGtkButton_relief* = 0x00000018'i16
+  bp_TGtkButton_relief* = 3'i16
+  bm_TGtkButton_use_underline* = 0x00000020'i16
+  bp_TGtkButton_use_underline* = 5'i16
+  bm_TGtkButton_use_stock* = 0x00000040'i16
+  bp_TGtkButton_use_stock* = 6'i16
+  bm_TGtkButton_depressed* = 0x00000080'i16
+  bp_TGtkButton_depressed* = 7'i16
+  bm_TGtkButton_depress_on_activate* = 0x00000100'i16
+  bp_TGtkButton_depress_on_activate* = 8'i16
 
 proc GTK_TYPE_BUTTON*(): GType
 proc GTK_BUTTON*(obj: pointer): PGtkButton
@@ -4930,16 +4930,16 @@ const
   GTK_CELL_RENDERER_SORTED* = 1 shl 3
 
 const
-  bm_TGtkCellRenderer_mode* = 0x00000003
-  bp_TGtkCellRenderer_mode* = 0
-  bm_TGtkCellRenderer_visible* = 0x00000004
-  bp_TGtkCellRenderer_visible* = 2
-  bm_TGtkCellRenderer_is_expander* = 0x00000008
-  bp_TGtkCellRenderer_is_expander* = 3
-  bm_TGtkCellRenderer_is_expanded* = 0x00000010
-  bp_TGtkCellRenderer_is_expanded* = 4
-  bm_TGtkCellRenderer_cell_background_set* = 0x00000020
-  bp_TGtkCellRenderer_cell_background_set* = 5
+  bm_TGtkCellRenderer_mode* = 0x00000003'i16
+  bp_TGtkCellRenderer_mode* = 0'i16
+  bm_TGtkCellRenderer_visible* = 0x00000004'i16
+  bp_TGtkCellRenderer_visible* = 2'i16
+  bm_TGtkCellRenderer_is_expander* = 0x00000008'i16
+  bp_TGtkCellRenderer_is_expander* = 3'i16
+  bm_TGtkCellRenderer_is_expanded* = 0x00000010'i16
+  bp_TGtkCellRenderer_is_expanded* = 4'i16
+  bm_TGtkCellRenderer_cell_background_set* = 0x00000020'i16
+  bp_TGtkCellRenderer_cell_background_set* = 5'i16
 
 proc GTK_TYPE_CELL_RENDERER*(): GType
 proc GTK_CELL_RENDERER*(obj: pointer): PGtkCellRenderer
@@ -4990,26 +4990,26 @@ proc gtk_cell_renderer_get_fixed_size*(cell: PGtkCellRenderer, width: Pgint,
                                        height: Pgint){.cdecl, dynlib: gtklib,
     importc: "gtk_cell_renderer_get_fixed_size".}
 const
-  bm_TGtkCellRendererText_strikethrough* = 0x00000001
-  bp_TGtkCellRendererText_strikethrough* = 0
-  bm_TGtkCellRendererText_editable* = 0x00000002
-  bp_TGtkCellRendererText_editable* = 1
-  bm_TGtkCellRendererText_scale_set* = 0x00000004
-  bp_TGtkCellRendererText_scale_set* = 2
-  bm_TGtkCellRendererText_foreground_set* = 0x00000008
-  bp_TGtkCellRendererText_foreground_set* = 3
-  bm_TGtkCellRendererText_background_set* = 0x00000010
-  bp_TGtkCellRendererText_background_set* = 4
-  bm_TGtkCellRendererText_underline_set* = 0x00000020
-  bp_TGtkCellRendererText_underline_set* = 5
-  bm_TGtkCellRendererText_rise_set* = 0x00000040
-  bp_TGtkCellRendererText_rise_set* = 6
-  bm_TGtkCellRendererText_strikethrough_set* = 0x00000080
-  bp_TGtkCellRendererText_strikethrough_set* = 7
-  bm_TGtkCellRendererText_editable_set* = 0x00000100
-  bp_TGtkCellRendererText_editable_set* = 8
-  bm_TGtkCellRendererText_calc_fixed_height* = 0x00000200
-  bp_TGtkCellRendererText_calc_fixed_height* = 9
+  bm_TGtkCellRendererText_strikethrough* = 0x00000001'i16
+  bp_TGtkCellRendererText_strikethrough* = 0'i16
+  bm_TGtkCellRendererText_editable* = 0x00000002'i16
+  bp_TGtkCellRendererText_editable* = 1'i16
+  bm_TGtkCellRendererText_scale_set* = 0x00000004'i16
+  bp_TGtkCellRendererText_scale_set* = 2'i16
+  bm_TGtkCellRendererText_foreground_set* = 0x00000008'i16
+  bp_TGtkCellRendererText_foreground_set* = 3'i16
+  bm_TGtkCellRendererText_background_set* = 0x00000010'i16
+  bp_TGtkCellRendererText_background_set* = 4'i16
+  bm_TGtkCellRendererText_underline_set* = 0x00000020'i16
+  bp_TGtkCellRendererText_underline_set* = 5'i16
+  bm_TGtkCellRendererText_rise_set* = 0x00000040'i16
+  bp_TGtkCellRendererText_rise_set* = 6'i16
+  bm_TGtkCellRendererText_strikethrough_set* = 0x00000080'i16
+  bp_TGtkCellRendererText_strikethrough_set* = 7'i16
+  bm_TGtkCellRendererText_editable_set* = 0x00000100'i16
+  bp_TGtkCellRendererText_editable_set* = 8'i16
+  bm_TGtkCellRendererText_calc_fixed_height* = 0x00000200'i16
+  bp_TGtkCellRendererText_calc_fixed_height* = 9'i16
 
 proc GTK_TYPE_CELL_RENDERER_TEXT*(): GType
 proc GTK_CELL_RENDERER_TEXT*(obj: pointer): PGtkCellRendererText
@@ -5047,12 +5047,12 @@ proc gtk_cell_renderer_text_set_fixed_height_from_font*(
     renderer: PGtkCellRendererText, number_of_rows: gint){.cdecl,
     dynlib: gtklib, importc: "gtk_cell_renderer_text_set_fixed_height_from_font".}
 const
-  bm_TGtkCellRendererToggle_active* = 0x00000001
-  bp_TGtkCellRendererToggle_active* = 0
-  bm_TGtkCellRendererToggle_activatable* = 0x00000002
-  bp_TGtkCellRendererToggle_activatable* = 1
-  bm_TGtkCellRendererToggle_radio* = 0x00000004
-  bp_TGtkCellRendererToggle_radio* = 2
+  bm_TGtkCellRendererToggle_active* = 0x00000001'i16
+  bp_TGtkCellRendererToggle_active* = 0'i16
+  bm_TGtkCellRendererToggle_activatable* = 0x00000002'i16
+  bp_TGtkCellRendererToggle_activatable* = 1'i16
+  bm_TGtkCellRendererToggle_radio* = 0x00000004'i16
+  bp_TGtkCellRendererToggle_radio* = 2'i16
 
 proc GTK_TYPE_CELL_RENDERER_TOGGLE*(): GType
 proc GTK_CELL_RENDERER_TOGGLE*(obj: pointer): PGtkCellRendererToggle
@@ -5105,18 +5105,18 @@ proc gtk_item_deselect*(item: PGtkItem){.cdecl, dynlib: gtklib,
 proc gtk_item_toggle*(item: PGtkItem){.cdecl, dynlib: gtklib,
                                        importc: "gtk_item_toggle".}
 const
-  bm_TGtkMenuItem_show_submenu_indicator* = 0x00000001
-  bp_TGtkMenuItem_show_submenu_indicator* = 0
-  bm_TGtkMenuItem_submenu_placement* = 0x00000002
-  bp_TGtkMenuItem_submenu_placement* = 1
-  bm_TGtkMenuItem_submenu_direction* = 0x00000004
-  bp_TGtkMenuItem_submenu_direction* = 2
-  bm_TGtkMenuItem_right_justify* = 0x00000008
-  bp_TGtkMenuItem_right_justify* = 3
-  bm_TGtkMenuItem_timer_from_keypress* = 0x00000010
-  bp_TGtkMenuItem_timer_from_keypress* = 4
-  bm_TGtkMenuItemClass_hide_on_activate* = 0x00000001
-  bp_TGtkMenuItemClass_hide_on_activate* = 0
+  bm_TGtkMenuItem_show_submenu_indicator* = 0x00000001'i16
+  bp_TGtkMenuItem_show_submenu_indicator* = 0'i16
+  bm_TGtkMenuItem_submenu_placement* = 0x00000002'i16
+  bp_TGtkMenuItem_submenu_placement* = 1'i16
+  bm_TGtkMenuItem_submenu_direction* = 0x00000004'i16
+  bp_TGtkMenuItem_submenu_direction* = 2'i16
+  bm_TGtkMenuItem_right_justify* = 0x00000008'i16
+  bp_TGtkMenuItem_right_justify* = 3'i16
+  bm_TGtkMenuItem_timer_from_keypress* = 0x00000010'i16
+  bp_TGtkMenuItem_timer_from_keypress* = 4'i16
+  bm_TGtkMenuItemClass_hide_on_activate* = 0x00000001'i16
+  bp_TGtkMenuItemClass_hide_on_activate* = 0'i16
 
 proc GTK_TYPE_MENU_ITEM*(): GType
 proc GTK_MENU_ITEM*(obj: pointer): PGtkMenuItem
@@ -5176,12 +5176,12 @@ proc gtk_menu_item_refresh_accel_path*(menu_item: PGtkMenuItem,
 proc gtk_menu_item_is_selectable*(menu_item: PGtkWidget): gboolean{.cdecl,
     dynlib: gtklib, importc: "_gtk_menu_item_is_selectable".}
 const
-  bm_TGtkToggleButton_active* = 0x00000001
-  bp_TGtkToggleButton_active* = 0
-  bm_TGtkToggleButton_draw_indicator* = 0x00000002
-  bp_TGtkToggleButton_draw_indicator* = 1
-  bm_TGtkToggleButton_inconsistent* = 0x00000004
-  bp_TGtkToggleButton_inconsistent* = 2
+  bm_TGtkToggleButton_active* = 0x00000001'i16
+  bp_TGtkToggleButton_active* = 0'i16
+  bm_TGtkToggleButton_draw_indicator* = 0x00000002'i16
+  bp_TGtkToggleButton_draw_indicator* = 1'i16
+  bm_TGtkToggleButton_inconsistent* = 0x00000004'i16
+  bp_TGtkToggleButton_inconsistent* = 2'i16
 
 proc GTK_TYPE_TOGGLE_BUTTON*(): GType
 proc GTK_TOGGLE_BUTTON*(obj: pointer): PGtkToggleButton
@@ -5239,12 +5239,12 @@ proc gtk_check_button_get_props*(check_button: PGtkCheckButton,
                                    indicator_spacing: Pgint){.cdecl,
     dynlib: gtklib, importc: "_gtk_check_button_get_props".}
 const
-  bm_TGtkCheckMenuItem_active* = 0x00000001
-  bp_TGtkCheckMenuItem_active* = 0
-  bm_TGtkCheckMenuItem_always_show_toggle* = 0x00000002
-  bp_TGtkCheckMenuItem_always_show_toggle* = 1
-  bm_TGtkCheckMenuItem_inconsistent* = 0x00000004
-  bp_TGtkCheckMenuItem_inconsistent* = 2
+  bm_TGtkCheckMenuItem_active* = 0x00000001'i16
+  bp_TGtkCheckMenuItem_active* = 0'i16
+  bm_TGtkCheckMenuItem_always_show_toggle* = 0x00000002'i16
+  bp_TGtkCheckMenuItem_always_show_toggle* = 1'i16
+  bm_TGtkCheckMenuItem_inconsistent* = 0x00000004'i16
+  bp_TGtkCheckMenuItem_inconsistent* = 2'i16
 
 proc GTK_TYPE_CHECK_MENU_ITEM*(): GType
 proc GTK_CHECK_MENU_ITEM*(obj: pointer): PGtkCheckMenuItem
@@ -5332,22 +5332,22 @@ const
   GTK_BUTTON_EXPANDS* = 1 shl 2
 
 const
-  bm_TGtkCListColumn_visible* = 0x00000001
-  bp_TGtkCListColumn_visible* = 0
-  bm_TGtkCListColumn_width_set* = 0x00000002
-  bp_TGtkCListColumn_width_set* = 1
-  bm_TGtkCListColumn_resizeable* = 0x00000004
-  bp_TGtkCListColumn_resizeable* = 2
-  bm_TGtkCListColumn_auto_resize* = 0x00000008
-  bp_TGtkCListColumn_auto_resize* = 3
-  bm_TGtkCListColumn_button_passive* = 0x00000010
-  bp_TGtkCListColumn_button_passive* = 4
-  bm_TGtkCListRow_fg_set* = 0x00000001
-  bp_TGtkCListRow_fg_set* = 0
-  bm_TGtkCListRow_bg_set* = 0x00000002
-  bp_TGtkCListRow_bg_set* = 1
-  bm_TGtkCListRow_selectable* = 0x00000004
-  bp_TGtkCListRow_selectable* = 2
+  bm_TGtkCListColumn_visible* = 0x00000001'i16
+  bp_TGtkCListColumn_visible* = 0'i16
+  bm_TGtkCListColumn_width_set* = 0x00000002'i16
+  bp_TGtkCListColumn_width_set* = 1'i16
+  bm_TGtkCListColumn_resizeable* = 0x00000004'i16
+  bp_TGtkCListColumn_resizeable* = 2'i16
+  bm_TGtkCListColumn_auto_resize* = 0x00000008'i16
+  bp_TGtkCListColumn_auto_resize* = 3'i16
+  bm_TGtkCListColumn_button_passive* = 0x00000010'i16
+  bp_TGtkCListColumn_button_passive* = 4'i16
+  bm_TGtkCListRow_fg_set* = 0x00000001'i16
+  bp_TGtkCListRow_fg_set* = 0'i16
+  bm_TGtkCListRow_bg_set* = 0x00000002'i16
+  bp_TGtkCListRow_bg_set* = 1'i16
+  bm_TGtkCListRow_selectable* = 0x00000004'i16
+  bp_TGtkCListRow_selectable* = 2'i16
 
 proc GTK_TYPE_CLIST*(): GType
 proc GTK_CLIST*(obj: pointer): PGtkCList
@@ -5677,16 +5677,16 @@ proc gtk_hbox_get_type*(): TGtkType{.cdecl, dynlib: gtklib,
 proc gtk_hbox_new*(homogeneous: gboolean, spacing: gint): PGtkWidget{.cdecl,
     dynlib: gtklib, importc: "gtk_hbox_new".}
 const
-  bm_TGtkCombo_value_in_list* = 0x00000001
-  bp_TGtkCombo_value_in_list* = 0
-  bm_TGtkCombo_ok_if_empty* = 0x00000002
-  bp_TGtkCombo_ok_if_empty* = 1
-  bm_TGtkCombo_case_sensitive* = 0x00000004
-  bp_TGtkCombo_case_sensitive* = 2
-  bm_TGtkCombo_use_arrows* = 0x00000008
-  bp_TGtkCombo_use_arrows* = 3
-  bm_TGtkCombo_use_arrows_always* = 0x00000010
-  bp_TGtkCombo_use_arrows_always* = 4
+  bm_TGtkCombo_value_in_list* = 0x00000001'i16
+  bp_TGtkCombo_value_in_list* = 0'i16
+  bm_TGtkCombo_ok_if_empty* = 0x00000002'i16
+  bp_TGtkCombo_ok_if_empty* = 1'i16
+  bm_TGtkCombo_case_sensitive* = 0x00000004'i16
+  bp_TGtkCombo_case_sensitive* = 2'i16
+  bm_TGtkCombo_use_arrows* = 0x00000008'i16
+  bp_TGtkCombo_use_arrows* = 3'i16
+  bm_TGtkCombo_use_arrows_always* = 0x00000010'i16
+  bp_TGtkCombo_use_arrows_always* = 4'i16
 
 proc GTK_TYPE_COMBO*(): GType
 proc GTK_COMBO*(obj: pointer): PGtkCombo
@@ -5725,16 +5725,16 @@ proc gtk_combo_set_popdown_strings*(combo: PGtkCombo, strings: PGList){.cdecl,
 proc gtk_combo_disable_activate*(combo: PGtkCombo){.cdecl, dynlib: gtklib,
     importc: "gtk_combo_disable_activate".}
 const
-  bm_TGtkCTree_line_style* = 0x00000003
-  bp_TGtkCTree_line_style* = 0
-  bm_TGtkCTree_expander_style* = 0x0000000C
-  bp_TGtkCTree_expander_style* = 2
-  bm_TGtkCTree_show_stub* = 0x00000010
-  bp_TGtkCTree_show_stub* = 4
-  bm_TGtkCTreeRow_is_leaf* = 0x00000001
-  bp_TGtkCTreeRow_is_leaf* = 0
-  bm_TGtkCTreeRow_expanded* = 0x00000002
-  bp_TGtkCTreeRow_expanded* = 1
+  bm_TGtkCTree_line_style* = 0x00000003'i16
+  bp_TGtkCTree_line_style* = 0'i16
+  bm_TGtkCTree_expander_style* = 0x0000000C'i16
+  bp_TGtkCTree_expander_style* = 2'i16
+  bm_TGtkCTree_show_stub* = 0x00000010'i16
+  bp_TGtkCTree_show_stub* = 4'i16
+  bm_TGtkCTreeRow_is_leaf* = 0x00000001'i16
+  bp_TGtkCTreeRow_is_leaf* = 0'i16
+  bm_TGtkCTreeRow_expanded* = 0x00000002'i16
+  bp_TGtkCTreeRow_expanded* = 1'i16
 
 proc GTK_TYPE_CTREE*(): GType
 proc GTK_CTREE*(obj: pointer): PGtkCTree
@@ -6119,20 +6119,20 @@ proc gtk_im_context_delete_surrounding*(context: PGtkIMContext, offset: gint,
                                         n_chars: gint): gboolean{.cdecl,
     dynlib: gtklib, importc: "gtk_im_context_delete_surrounding".}
 const
-  bm_TGtkMenuShell_active* = 0x00000001
-  bp_TGtkMenuShell_active* = 0
-  bm_TGtkMenuShell_have_grab* = 0x00000002
-  bp_TGtkMenuShell_have_grab* = 1
-  bm_TGtkMenuShell_have_xgrab* = 0x00000004
-  bp_TGtkMenuShell_have_xgrab* = 2
-  bm_TGtkMenuShell_ignore_leave* = 0x00000008
-  bp_TGtkMenuShell_ignore_leave* = 3
-  bm_TGtkMenuShell_menu_flag* = 0x00000010
-  bp_TGtkMenuShell_menu_flag* = 4
-  bm_TGtkMenuShell_ignore_enter* = 0x00000020
-  bp_TGtkMenuShell_ignore_enter* = 5
-  bm_TGtkMenuShellClass_submenu_placement* = 0x00000001
-  bp_TGtkMenuShellClass_submenu_placement* = 0
+  bm_TGtkMenuShell_active* = 0x00000001'i16
+  bp_TGtkMenuShell_active* = 0'i16
+  bm_TGtkMenuShell_have_grab* = 0x00000002'i16
+  bp_TGtkMenuShell_have_grab* = 1'i16
+  bm_TGtkMenuShell_have_xgrab* = 0x00000004'i16
+  bp_TGtkMenuShell_have_xgrab* = 2'i16
+  bm_TGtkMenuShell_ignore_leave* = 0x00000008'i16
+  bp_TGtkMenuShell_ignore_leave* = 3'i16
+  bm_TGtkMenuShell_menu_flag* = 0x00000010'i16
+  bp_TGtkMenuShell_menu_flag* = 4'i16
+  bm_TGtkMenuShell_ignore_enter* = 0x00000020'i16
+  bp_TGtkMenuShell_ignore_enter* = 5'i16
+  bm_TGtkMenuShellClass_submenu_placement* = 0x00000001'i16
+  bp_TGtkMenuShellClass_submenu_placement* = 0'i16
 
 proc GTK_TYPE_MENU_SHELL*(): GType
 proc GTK_MENU_SHELL*(obj: pointer): PGtkMenuShell
@@ -6180,22 +6180,22 @@ proc gtk_menu_shell_select_first*(menu_shell: PGtkMenuShell){.cdecl,
 proc gtk_menu_shell_activate*(menu_shell: PGtkMenuShell){.cdecl,
     dynlib: gtklib, importc: "_gtk_menu_shell_activate".}
 const
-  bm_TGtkMenu_needs_destruction_ref_count* = 0x00000001
-  bp_TGtkMenu_needs_destruction_ref_count* = 0
-  bm_TGtkMenu_torn_off* = 0x00000002
-  bp_TGtkMenu_torn_off* = 1
-  bm_TGtkMenu_tearoff_active* = 0x00000004
-  bp_TGtkMenu_tearoff_active* = 2
-  bm_TGtkMenu_scroll_fast* = 0x00000008
-  bp_TGtkMenu_scroll_fast* = 3
-  bm_TGtkMenu_upper_arrow_visible* = 0x00000010
-  bp_TGtkMenu_upper_arrow_visible* = 4
-  bm_TGtkMenu_lower_arrow_visible* = 0x00000020
-  bp_TGtkMenu_lower_arrow_visible* = 5
-  bm_TGtkMenu_upper_arrow_prelight* = 0x00000040
-  bp_TGtkMenu_upper_arrow_prelight* = 6
-  bm_TGtkMenu_lower_arrow_prelight* = 0x00000080
-  bp_TGtkMenu_lower_arrow_prelight* = 7
+  bm_TGtkMenu_needs_destruction_ref_count* = 0x00000001'i16
+  bp_TGtkMenu_needs_destruction_ref_count* = 0'i16
+  bm_TGtkMenu_torn_off* = 0x00000002'i16
+  bp_TGtkMenu_torn_off* = 1'i16
+  bm_TGtkMenu_tearoff_active* = 0x00000004'i16
+  bp_TGtkMenu_tearoff_active* = 2'i16
+  bm_TGtkMenu_scroll_fast* = 0x00000008'i16
+  bp_TGtkMenu_scroll_fast* = 3'i16
+  bm_TGtkMenu_upper_arrow_visible* = 0x00000010'i16
+  bp_TGtkMenu_upper_arrow_visible* = 4'i16
+  bm_TGtkMenu_lower_arrow_visible* = 0x00000020'i16
+  bp_TGtkMenu_lower_arrow_visible* = 5'i16
+  bm_TGtkMenu_upper_arrow_prelight* = 0x00000040'i16
+  bp_TGtkMenu_upper_arrow_prelight* = 6'i16
+  bm_TGtkMenu_lower_arrow_prelight* = 0x00000080'i16
+  bp_TGtkMenu_lower_arrow_prelight* = 7'i16
 
 proc GTK_TYPE_MENU*(): GType
 proc GTK_MENU*(obj: pointer): PGtkMenu
@@ -6261,32 +6261,32 @@ proc gtk_menu_reorder_child*(menu: PGtkMenu, child: PGtkWidget, position: gint){
 proc gtk_menu_set_screen*(menu: PGtkMenu, screen: PGdkScreen){.cdecl,
     dynlib: gtklib, importc: "gtk_menu_set_screen".}
 const
-  bm_TGtkEntry_editable* = 0x00000001
-  bp_TGtkEntry_editable* = 0
-  bm_TGtkEntry_visible* = 0x00000002
-  bp_TGtkEntry_visible* = 1
-  bm_TGtkEntry_overwrite_mode* = 0x00000004
-  bp_TGtkEntry_overwrite_mode* = 2
-  bm_TGtkEntry_in_drag* = 0x00000008
-  bp_TGtkEntry_in_drag* = 3
-  bm_TGtkEntry_cache_includes_preedit* = 0x00000001
-  bp_TGtkEntry_cache_includes_preedit* = 0
-  bm_TGtkEntry_need_im_reset* = 0x00000002
-  bp_TGtkEntry_need_im_reset* = 1
-  bm_TGtkEntry_has_frame* = 0x00000004
-  bp_TGtkEntry_has_frame* = 2
-  bm_TGtkEntry_activates_default* = 0x00000008
-  bp_TGtkEntry_activates_default* = 3
-  bm_TGtkEntry_cursor_visible* = 0x00000010
-  bp_TGtkEntry_cursor_visible* = 4
-  bm_TGtkEntry_in_click* = 0x00000020
-  bp_TGtkEntry_in_click* = 5
-  bm_TGtkEntry_is_cell_renderer* = 0x00000040
-  bp_TGtkEntry_is_cell_renderer* = 6
-  bm_TGtkEntry_editing_canceled* = 0x00000080
-  bp_TGtkEntry_editing_canceled* = 7
-  bm_TGtkEntry_mouse_cursor_obscured* = 0x00000100
-  bp_TGtkEntry_mouse_cursor_obscured* = 8
+  bm_TGtkEntry_editable* = 0x00000001'i16
+  bp_TGtkEntry_editable* = 0'i16
+  bm_TGtkEntry_visible* = 0x00000002'i16
+  bp_TGtkEntry_visible* = 1'i16
+  bm_TGtkEntry_overwrite_mode* = 0x00000004'i16
+  bp_TGtkEntry_overwrite_mode* = 2'i16
+  bm_TGtkEntry_in_drag* = 0x00000008'i16
+  bp_TGtkEntry_in_drag* = 3'i16
+  bm_TGtkEntry_cache_includes_preedit* = 0x00000001'i16
+  bp_TGtkEntry_cache_includes_preedit* = 0'i16
+  bm_TGtkEntry_need_im_reset* = 0x00000002'i16
+  bp_TGtkEntry_need_im_reset* = 1'i16
+  bm_TGtkEntry_has_frame* = 0x00000004'i16
+  bp_TGtkEntry_has_frame* = 2'i16
+  bm_TGtkEntry_activates_default* = 0x00000008'i16
+  bp_TGtkEntry_activates_default* = 3'i16
+  bm_TGtkEntry_cursor_visible* = 0x00000010'i16
+  bp_TGtkEntry_cursor_visible* = 4'i16
+  bm_TGtkEntry_in_click* = 0x00000020'i16
+  bp_TGtkEntry_in_click* = 5'i16
+  bm_TGtkEntry_is_cell_renderer* = 0x00000040'i16
+  bp_TGtkEntry_is_cell_renderer* = 6'i16
+  bm_TGtkEntry_editing_canceled* = 0x00000080'i16
+  bp_TGtkEntry_editing_canceled* = 7'i16
+  bm_TGtkEntry_mouse_cursor_obscured* = 0x00000100'i16
+  bp_TGtkEntry_mouse_cursor_obscured* = 8'i16
 
 proc GTK_TYPE_ENTRY*(): GType
 proc GTK_ENTRY*(obj: pointer): PGtkEntry
@@ -6653,18 +6653,18 @@ proc gtk_gc_get*(depth: gint, colormap: PGdkColormap, values: PGdkGCValues,
 proc gtk_gc_release*(gc: PGdkGC){.cdecl, dynlib: gtklib,
                                   importc: "gtk_gc_release".}
 const
-  bm_TGtkHandleBox_handle_position* = 0x00000003
-  bp_TGtkHandleBox_handle_position* = 0
-  bm_TGtkHandleBox_float_window_mapped* = 0x00000004
-  bp_TGtkHandleBox_float_window_mapped* = 2
-  bm_TGtkHandleBox_child_detached* = 0x00000008
-  bp_TGtkHandleBox_child_detached* = 3
-  bm_TGtkHandleBox_in_drag* = 0x00000010
-  bp_TGtkHandleBox_in_drag* = 4
-  bm_TGtkHandleBox_shrink_on_detach* = 0x00000020
-  bp_TGtkHandleBox_shrink_on_detach* = 5
-  bm_TGtkHandleBox_snap_edge* = 0x000001C0
-  bp_TGtkHandleBox_snap_edge* = 6
+  bm_TGtkHandleBox_handle_position* = 0x00000003'i16
+  bp_TGtkHandleBox_handle_position* = 0'i16
+  bm_TGtkHandleBox_float_window_mapped* = 0x00000004'i16
+  bp_TGtkHandleBox_float_window_mapped* = 2'i16
+  bm_TGtkHandleBox_child_detached* = 0x00000008'i16
+  bp_TGtkHandleBox_child_detached* = 3'i16
+  bm_TGtkHandleBox_in_drag* = 0x00000010'i16
+  bp_TGtkHandleBox_in_drag* = 4'i16
+  bm_TGtkHandleBox_shrink_on_detach* = 0x00000020'i16
+  bp_TGtkHandleBox_shrink_on_detach* = 5'i16
+  bm_TGtkHandleBox_snap_edge* = 0x000001C0'i16
+  bp_TGtkHandleBox_snap_edge* = 6'i16
 
 proc GTK_TYPE_HANDLE_BOX*(): GType
 proc GTK_HANDLE_BOX*(obj: pointer): PGtkHandleBox
@@ -6704,24 +6704,24 @@ proc gtk_handle_box_set_snap_edge*(handle_box: PGtkHandleBox,
 proc gtk_handle_box_get_snap_edge*(handle_box: PGtkHandleBox): TGtkPositionType{.
     cdecl, dynlib: gtklib, importc: "gtk_handle_box_get_snap_edge".}
 const
-  bm_TGtkPaned_position_set* = 0x00000001
-  bp_TGtkPaned_position_set* = 0
-  bm_TGtkPaned_in_drag* = 0x00000002
-  bp_TGtkPaned_in_drag* = 1
-  bm_TGtkPaned_child1_shrink* = 0x00000004
-  bp_TGtkPaned_child1_shrink* = 2
-  bm_TGtkPaned_child1_resize* = 0x00000008
-  bp_TGtkPaned_child1_resize* = 3
-  bm_TGtkPaned_child2_shrink* = 0x00000010
-  bp_TGtkPaned_child2_shrink* = 4
-  bm_TGtkPaned_child2_resize* = 0x00000020
-  bp_TGtkPaned_child2_resize* = 5
-  bm_TGtkPaned_orientation* = 0x00000040
-  bp_TGtkPaned_orientation* = 6
-  bm_TGtkPaned_in_recursion* = 0x00000080
-  bp_TGtkPaned_in_recursion* = 7
-  bm_TGtkPaned_handle_prelit* = 0x00000100
-  bp_TGtkPaned_handle_prelit* = 8
+  bm_TGtkPaned_position_set* = 0x00000001'i16
+  bp_TGtkPaned_position_set* = 0'i16
+  bm_TGtkPaned_in_drag* = 0x00000002'i16
+  bp_TGtkPaned_in_drag* = 1'i16
+  bm_TGtkPaned_child1_shrink* = 0x00000004'i16
+  bp_TGtkPaned_child1_shrink* = 2'i16
+  bm_TGtkPaned_child1_resize* = 0x00000008'i16
+  bp_TGtkPaned_child1_resize* = 3'i16
+  bm_TGtkPaned_child2_shrink* = 0x00000010'i16
+  bp_TGtkPaned_child2_shrink* = 4'i16
+  bm_TGtkPaned_child2_resize* = 0x00000020'i16
+  bp_TGtkPaned_child2_resize* = 5'i16
+  bm_TGtkPaned_orientation* = 0x00000040'i16
+  bp_TGtkPaned_orientation* = 6'i16
+  bm_TGtkPaned_in_recursion* = 0x00000080'i16
+  bp_TGtkPaned_in_recursion* = 7'i16
+  bm_TGtkPaned_handle_prelit* = 0x00000100'i16
+  bp_TGtkPaned_handle_prelit* = 8'i16
 
 proc GTK_TYPE_PANED*(): GType
 proc GTK_PANED*(obj: pointer): PGtkPaned
@@ -6872,8 +6872,8 @@ const
   GTK_RC_BG* = 1 shl 1
   GTK_RC_TEXT* = 1 shl 2
   GTK_RC_BASE* = 1 shl 3
-  bm_TGtkRcStyle_engine_specified* = 0x00000001
-  bp_TGtkRcStyle_engine_specified* = 0
+  bm_TGtkRcStyle_engine_specified* = 0x00000001'i16
+  bp_TGtkRcStyle_engine_specified* = 0'i16
 
 proc GTK_TYPE_RC_STYLE*(): GType
 proc GTK_RC_STYLE_get*(anObject: pointer): PGtkRcStyle
@@ -7101,26 +7101,26 @@ proc gtk_draw_insertion_cursor*(widget: PGtkWidget, drawable: PGdkDrawable,
                                   draw_arrow: gboolean){.cdecl, dynlib: gtklib,
     importc: "_gtk_draw_insertion_cursor".}
 const
-  bm_TGtkRange_inverted* = 0x00000001
-  bp_TGtkRange_inverted* = 0
-  bm_TGtkRange_flippable* = 0x00000002
-  bp_TGtkRange_flippable* = 1
-  bm_TGtkRange_has_stepper_a* = 0x00000004
-  bp_TGtkRange_has_stepper_a* = 2
-  bm_TGtkRange_has_stepper_b* = 0x00000008
-  bp_TGtkRange_has_stepper_b* = 3
-  bm_TGtkRange_has_stepper_c* = 0x00000010
-  bp_TGtkRange_has_stepper_c* = 4
-  bm_TGtkRange_has_stepper_d* = 0x00000020
-  bp_TGtkRange_has_stepper_d* = 5
-  bm_TGtkRange_need_recalc* = 0x00000040
-  bp_TGtkRange_need_recalc* = 6
-  bm_TGtkRange_slider_size_fixed* = 0x00000080
-  bp_TGtkRange_slider_size_fixed* = 7
-  bm_TGtkRange_trough_click_forward* = 0x00000001
-  bp_TGtkRange_trough_click_forward* = 0
-  bm_TGtkRange_update_pending* = 0x00000002
-  bp_TGtkRange_update_pending* = 1
+  bm_TGtkRange_inverted* = 0x00000001'i16
+  bp_TGtkRange_inverted* = 0'i16
+  bm_TGtkRange_flippable* = 0x00000002'i16
+  bp_TGtkRange_flippable* = 1'i16
+  bm_TGtkRange_has_stepper_a* = 0x00000004'i16
+  bp_TGtkRange_has_stepper_a* = 2'i16
+  bm_TGtkRange_has_stepper_b* = 0x00000008'i16
+  bp_TGtkRange_has_stepper_b* = 3'i16
+  bm_TGtkRange_has_stepper_c* = 0x00000010'i16
+  bp_TGtkRange_has_stepper_c* = 4'i16
+  bm_TGtkRange_has_stepper_d* = 0x00000020'i16
+  bp_TGtkRange_has_stepper_d* = 5'i16
+  bm_TGtkRange_need_recalc* = 0x00000040'i16
+  bp_TGtkRange_need_recalc* = 6'i16
+  bm_TGtkRange_slider_size_fixed* = 0x00000080'i16
+  bp_TGtkRange_slider_size_fixed* = 7'i16
+  bm_TGtkRange_trough_click_forward* = 0x00000001'i16
+  bp_TGtkRange_trough_click_forward* = 0'i16
+  bm_TGtkRange_update_pending* = 0x00000002'i16
+  bp_TGtkRange_update_pending* = 1'i16
 
 proc GTK_TYPE_RANGE*(): GType
 proc GTK_RANGE*(obj: pointer): PGtkRange
@@ -7171,10 +7171,10 @@ proc gtk_range_set_value*(range: PGtkRange, value: gdouble){.cdecl,
 proc gtk_range_get_value*(range: PGtkRange): gdouble{.cdecl, dynlib: gtklib,
     importc: "gtk_range_get_value".}
 const
-  bm_TGtkScale_draw_value* = 0x00000001
-  bp_TGtkScale_draw_value* = 0
-  bm_TGtkScale_value_pos* = 0x00000006
-  bp_TGtkScale_value_pos* = 1
+  bm_TGtkScale_draw_value* = 0x00000001'i16
+  bp_TGtkScale_draw_value* = 0'i16
+  bm_TGtkScale_value_pos* = 0x00000006'i16
+  bp_TGtkScale_value_pos* = 1'i16
 
 proc GTK_TYPE_SCALE*(): GType
 proc GTK_SCALE*(obj: pointer): PGtkScale
@@ -7430,8 +7430,8 @@ proc gtk_image_menu_item_set_image*(image_menu_item: PGtkImageMenuItem,
 proc gtk_image_menu_item_get_image*(image_menu_item: PGtkImageMenuItem): PGtkWidget{.
     cdecl, dynlib: gtklib, importc: "gtk_image_menu_item_get_image".}
 const
-  bm_TGtkIMContextSimple_in_hex_sequence* = 0x00000001
-  bp_TGtkIMContextSimple_in_hex_sequence* = 0
+  bm_TGtkIMContextSimple_in_hex_sequence* = 0x00000001'i16
+  bp_TGtkIMContextSimple_in_hex_sequence* = 0'i16
 
 proc GTK_TYPE_IM_CONTEXT_SIMPLE*(): GType
 proc GTK_IM_CONTEXT_SIMPLE*(obj: pointer): PGtkIMContextSimple
@@ -7581,12 +7581,12 @@ proc gtk_layout_set_hadjustment*(layout: PGtkLayout, adjustment: PGtkAdjustment)
 proc gtk_layout_set_vadjustment*(layout: PGtkLayout, adjustment: PGtkAdjustment){.
     cdecl, dynlib: gtklib, importc: "gtk_layout_set_vadjustment".}
 const
-  bm_TGtkList_selection_mode* = 0x00000003
-  bp_TGtkList_selection_mode* = 0
-  bm_TGtkList_drag_selection* = 0x00000004
-  bp_TGtkList_drag_selection* = 2
-  bm_TGtkList_add_mode* = 0x00000008
-  bp_TGtkList_add_mode* = 3
+  bm_TGtkList_selection_mode* = 0x00000003'i16
+  bp_TGtkList_selection_mode* = 0'i16
+  bm_TGtkList_drag_selection* = 0x00000004'i16
+  bp_TGtkList_drag_selection* = 2'i16
+  bm_TGtkList_add_mode* = 0x00000008'i16
+  bp_TGtkList_add_mode* = 3'i16
 
 proc GTK_TYPE_LIST*(): GType
 proc GTK_LIST*(obj: pointer): PGtkList
@@ -7850,8 +7850,8 @@ proc gtk_tree_model_sort_reset_default_sort_func*(
 proc gtk_tree_model_sort_clear_cache*(tree_model_sort: PGtkTreeModelSort){.
     cdecl, dynlib: gtklib, importc: "gtk_tree_model_sort_clear_cache".}
 const
-  bm_TGtkListStore_columns_dirty* = 0x00000001
-  bp_TGtkListStore_columns_dirty* = 0
+  bm_TGtkListStore_columns_dirty* = 0x00000001'i16
+  bp_TGtkListStore_columns_dirty* = 0'i16
 
 proc GTK_TYPE_LIST_STORE*(): GType
 proc GTK_LIST_STORE*(obj: pointer): PGtkListStore
@@ -8007,30 +8007,30 @@ proc GTK_MESSAGE_DIALOG_GET_CLASS*(obj: pointer): PGtkMessageDialogClass
 proc gtk_message_dialog_get_type*(): TGtkType{.cdecl, dynlib: gtklib,
     importc: "gtk_message_dialog_get_type".}
 const
-  bm_TGtkNotebook_show_tabs* = 0x00000001
-  bp_TGtkNotebook_show_tabs* = 0
-  bm_TGtkNotebook_homogeneous* = 0x00000002
-  bp_TGtkNotebook_homogeneous* = 1
-  bm_TGtkNotebook_show_border* = 0x00000004
-  bp_TGtkNotebook_show_border* = 2
-  bm_TGtkNotebook_tab_pos* = 0x00000018
-  bp_TGtkNotebook_tab_pos* = 3
-  bm_TGtkNotebook_scrollable* = 0x00000020
-  bp_TGtkNotebook_scrollable* = 5
-  bm_TGtkNotebook_in_child* = 0x000000C0
-  bp_TGtkNotebook_in_child* = 6
-  bm_TGtkNotebook_click_child* = 0x00000300
-  bp_TGtkNotebook_click_child* = 8
-  bm_TGtkNotebook_button* = 0x00000C00
-  bp_TGtkNotebook_button* = 10
-  bm_TGtkNotebook_need_timer* = 0x00001000
-  bp_TGtkNotebook_need_timer* = 12
-  bm_TGtkNotebook_child_has_focus* = 0x00002000
-  bp_TGtkNotebook_child_has_focus* = 13
-  bm_TGtkNotebook_have_visible_child* = 0x00004000
-  bp_TGtkNotebook_have_visible_child* = 14
-  bm_TGtkNotebook_focus_out* = 0x00008000
-  bp_TGtkNotebook_focus_out* = 15
+  bm_TGtkNotebook_show_tabs* = 0x00000001'i16
+  bp_TGtkNotebook_show_tabs* = 0'i16
+  bm_TGtkNotebook_homogeneous* = 0x00000002'i16
+  bp_TGtkNotebook_homogeneous* = 1'i16
+  bm_TGtkNotebook_show_border* = 0x00000004'i16
+  bp_TGtkNotebook_show_border* = 2'i16
+  bm_TGtkNotebook_tab_pos* = 0x00000018'i16
+  bp_TGtkNotebook_tab_pos* = 3'i16
+  bm_TGtkNotebook_scrollable* = 0x00000020'i16
+  bp_TGtkNotebook_scrollable* = 5'i16
+  bm_TGtkNotebook_in_child* = 0x000000C0'i16
+  bp_TGtkNotebook_in_child* = 6'i16
+  bm_TGtkNotebook_click_child* = 0x00000300'i16
+  bp_TGtkNotebook_click_child* = 8'i16
+  bm_TGtkNotebook_button* = 0x00000C00'i16
+  bp_TGtkNotebook_button* = 10'i16
+  bm_TGtkNotebook_need_timer* = 0x00001000'i16
+  bp_TGtkNotebook_need_timer* = 12'i16
+  bm_TGtkNotebook_child_has_focus* = 0x00002000'i16
+  bp_TGtkNotebook_child_has_focus* = 13'i16
+  bm_TGtkNotebook_have_visible_child* = 0x00004000'i16
+  bp_TGtkNotebook_have_visible_child* = 14'i16
+  bm_TGtkNotebook_focus_out* = 0x00008000'i16
+  bp_TGtkNotebook_focus_out* = 15'i16
 
 proc GTK_TYPE_NOTEBOOK*(): GType
 proc GTK_NOTEBOOK*(obj: pointer): PGtkNotebook
@@ -8152,12 +8152,12 @@ proc gtk_notebook_reorder_child*(notebook: PGtkNotebook, child: PGtkWidget,
                                  position: gint){.cdecl, dynlib: gtklib,
     importc: "gtk_notebook_reorder_child".}
 const
-  bm_TGtkOldEditable_has_selection* = 0x00000001
-  bp_TGtkOldEditable_has_selection* = 0
-  bm_TGtkOldEditable_editable* = 0x00000002
-  bp_TGtkOldEditable_editable* = 1
-  bm_TGtkOldEditable_visible* = 0x00000004
-  bp_TGtkOldEditable_visible* = 2
+  bm_TGtkOldEditable_has_selection* = 0x00000001'i16
+  bp_TGtkOldEditable_has_selection* = 0'i16
+  bm_TGtkOldEditable_editable* = 0x00000002'i16
+  bp_TGtkOldEditable_editable* = 1'i16
+  bm_TGtkOldEditable_visible* = 0x00000004'i16
+  bp_TGtkOldEditable_visible* = 2'i16
 
 proc GTK_TYPE_OLD_EDITABLE*(): GType
 proc GTK_OLD_EDITABLE*(obj: pointer): PGtkOldEditable
@@ -8199,8 +8199,8 @@ proc gtk_option_menu_get_history*(option_menu: PGtkOptionMenu): gint{.cdecl,
 proc gtk_option_menu_set_history*(option_menu: PGtkOptionMenu, index: guint){.
     cdecl, dynlib: gtklib, importc: "gtk_option_menu_set_history".}
 const
-  bm_TGtkPixmap_build_insensitive* = 0x00000001
-  bp_TGtkPixmap_build_insensitive* = 0
+  bm_TGtkPixmap_build_insensitive* = 0x00000001'i16
+  bp_TGtkPixmap_build_insensitive* = 0'i16
 
 proc GTK_TYPE_PIXMAP*(): GType
 proc GTK_PIXMAP*(obj: pointer): PGtkPixmap
@@ -8222,8 +8222,8 @@ proc gtk_pixmap_get*(pixmap: PGtkPixmap, val: var PGdkPixmap,
 proc gtk_pixmap_set_build_insensitive*(pixmap: PGtkPixmap, build: gboolean){.
     cdecl, dynlib: gtklib, importc: "gtk_pixmap_set_build_insensitive".}
 const
-  bm_TGtkPlug_same_app* = 0x00000001
-  bp_TGtkPlug_same_app* = 0
+  bm_TGtkPlug_same_app* = 0x00000001'i16
+  bp_TGtkPlug_same_app* = 0'i16
 
 proc GTK_TYPE_PLUG*(): GType
 proc GTK_PLUG*(obj: pointer): PGtkPlug
@@ -8247,10 +8247,10 @@ proc gtk_plug_add_to_socket*(plug: PGtkPlug, socket: PGtkSocket){.cdecl,
 proc gtk_plug_remove_from_socket*(plug: PGtkPlug, socket: PGtkSocket){.cdecl,
     dynlib: gtklib, importc: "_gtk_plug_remove_from_socket".}
 const
-  bm_TGtkPreview_type* = 0x00000001
-  bp_TGtkPreview_type* = 0
-  bm_TGtkPreview_expand* = 0x00000002
-  bp_TGtkPreview_expand* = 1
+  bm_TGtkPreview_type* = 0x00000001'i16
+  bp_TGtkPreview_type* = 0'i16
+  bm_TGtkPreview_expand* = 0x00000002'i16
+  bp_TGtkPreview_expand* = 1'i16
 
 proc GTK_TYPE_PREVIEW*(): GType
 proc GTK_PREVIEW*(obj: pointer): PGtkPreview
@@ -8293,12 +8293,12 @@ proc gtk_preview_get_info*(): PGtkPreviewInfo{.cdecl, dynlib: gtklib,
     importc: "gtk_preview_get_info".}
 proc gtk_preview_reset*(){.cdecl, dynlib: gtklib, importc: "gtk_preview_reset".}
 const
-  bm_TGtkProgress_show_text* = 0x00000001
-  bp_TGtkProgress_show_text* = 0
-  bm_TGtkProgress_activity_mode* = 0x00000002
-  bp_TGtkProgress_activity_mode* = 1
-  bm_TGtkProgress_use_text_format* = 0x00000004
-  bp_TGtkProgress_use_text_format* = 2
+  bm_TGtkProgress_show_text* = 0x00000001'i16
+  bp_TGtkProgress_show_text* = 0'i16
+  bm_TGtkProgress_activity_mode* = 0x00000002'i16
+  bp_TGtkProgress_activity_mode* = 1'i16
+  bm_TGtkProgress_use_text_format* = 0x00000004'i16
+  bp_TGtkProgress_use_text_format* = 2'i16
 
 proc show_text*(a: var TGtkProgress): guint
 proc set_show_text*(a: var TGtkProgress, `show_text`: guint)
@@ -8307,8 +8307,8 @@ proc set_activity_mode*(a: var TGtkProgress, `activity_mode`: guint)
 proc use_text_format*(a: var TGtkProgress): guint
 proc set_use_text_format*(a: var TGtkProgress, `use_text_format`: guint)
 const
-  bm_TGtkProgressBar_activity_dir* = 0x00000001
-  bp_TGtkProgressBar_activity_dir* = 0
+  bm_TGtkProgressBar_activity_dir* = 0x00000001'i16
+  bp_TGtkProgressBar_activity_dir* = 0'i16
 
 proc GTK_TYPE_PROGRESS_BAR*(): GType
 proc GTK_PROGRESS_BAR*(obj: pointer): PGtkProgressBar
@@ -8385,18 +8385,18 @@ proc gtk_radio_menu_item_set_group*(radio_menu_item: PGtkRadioMenuItem,
                                     group: PGSList){.cdecl, dynlib: gtklib,
     importc: "gtk_radio_menu_item_set_group".}
 const
-  bm_TGtkScrolledWindow_hscrollbar_policy* = 0x00000003
-  bp_TGtkScrolledWindow_hscrollbar_policy* = 0
-  bm_TGtkScrolledWindow_vscrollbar_policy* = 0x0000000C
-  bp_TGtkScrolledWindow_vscrollbar_policy* = 2
-  bm_TGtkScrolledWindow_hscrollbar_visible* = 0x00000010
-  bp_TGtkScrolledWindow_hscrollbar_visible* = 4
-  bm_TGtkScrolledWindow_vscrollbar_visible* = 0x00000020
-  bp_TGtkScrolledWindow_vscrollbar_visible* = 5
-  bm_TGtkScrolledWindow_window_placement* = 0x000000C0
-  bp_TGtkScrolledWindow_window_placement* = 6
-  bm_TGtkScrolledWindow_focus_out* = 0x00000100
-  bp_TGtkScrolledWindow_focus_out* = 8
+  bm_TGtkScrolledWindow_hscrollbar_policy* = 0x00000003'i16
+  bp_TGtkScrolledWindow_hscrollbar_policy* = 0'i16
+  bm_TGtkScrolledWindow_vscrollbar_policy* = 0x0000000C'i16
+  bp_TGtkScrolledWindow_vscrollbar_policy* = 2'i16
+  bm_TGtkScrolledWindow_hscrollbar_visible* = 0x00000010'i16
+  bp_TGtkScrolledWindow_hscrollbar_visible* = 4'i16
+  bm_TGtkScrolledWindow_vscrollbar_visible* = 0x00000020'i16
+  bp_TGtkScrolledWindow_vscrollbar_visible* = 5'i16
+  bm_TGtkScrolledWindow_window_placement* = 0x000000C0'i16
+  bp_TGtkScrolledWindow_window_placement* = 6'i16
+  bm_TGtkScrolledWindow_focus_out* = 0x00000100'i16
+  bp_TGtkScrolledWindow_focus_out* = 8'i16
 
 proc GTK_TYPE_SCROLLED_WINDOW*(): GType
 proc GTK_SCROLLED_WINDOW*(obj: pointer): PGtkScrolledWindow
@@ -8528,10 +8528,10 @@ proc gtk_separator_menu_item_get_type*(): GType{.cdecl, dynlib: gtklib,
 proc gtk_separator_menu_item_new*(): PGtkWidget{.cdecl, dynlib: gtklib,
     importc: "gtk_separator_menu_item_new".}
 const
-  bm_TGtkSizeGroup_have_width* = 0x00000001
-  bp_TGtkSizeGroup_have_width* = 0
-  bm_TGtkSizeGroup_have_height* = 0x00000002
-  bp_TGtkSizeGroup_have_height* = 1
+  bm_TGtkSizeGroup_have_width* = 0x00000001'i16
+  bp_TGtkSizeGroup_have_width* = 0'i16
+  bm_TGtkSizeGroup_have_height* = 0x00000002'i16
+  bp_TGtkSizeGroup_have_height* = 1'i16
 
 proc GTK_TYPE_SIZE_GROUP*(): GType
 proc GTK_SIZE_GROUP*(obj: pointer): PGtkSizeGroup
@@ -8562,16 +8562,16 @@ proc gtk_size_group_compute_requisition*(widget: PGtkWidget,
 proc gtk_size_group_queue_resize*(widget: PGtkWidget){.cdecl, dynlib: gtklib,
     importc: "_gtk_size_group_queue_resize".}
 const
-  bm_TGtkSocket_same_app* = 0x00000001
-  bp_TGtkSocket_same_app* = 0
-  bm_TGtkSocket_focus_in* = 0x00000002
-  bp_TGtkSocket_focus_in* = 1
-  bm_TGtkSocket_have_size* = 0x00000004
-  bp_TGtkSocket_have_size* = 2
-  bm_TGtkSocket_need_map* = 0x00000008
-  bp_TGtkSocket_need_map* = 3
-  bm_TGtkSocket_is_mapped* = 0x00000010
-  bp_TGtkSocket_is_mapped* = 4
+  bm_TGtkSocket_same_app* = 0x00000001'i16
+  bp_TGtkSocket_same_app* = 0'i16
+  bm_TGtkSocket_focus_in* = 0x00000002'i16
+  bp_TGtkSocket_focus_in* = 1'i16
+  bm_TGtkSocket_have_size* = 0x00000004'i16
+  bp_TGtkSocket_have_size* = 2'i16
+  bm_TGtkSocket_need_map* = 0x00000008'i16
+  bp_TGtkSocket_need_map* = 3'i16
+  bm_TGtkSocket_is_mapped* = 0x00000010'i16
+  bp_TGtkSocket_is_mapped* = 4'i16
 
 proc GTK_TYPE_SOCKET*(): GType
 proc GTK_SOCKET*(obj: pointer): PGtkSocket
@@ -8599,24 +8599,24 @@ proc gtk_socket_get_id*(socket: PGtkSocket): TGdkNativeWindow{.cdecl,
     dynlib: gtklib, importc: "gtk_socket_get_id".}
 const
   GTK_INPUT_ERROR* = - (1)
-  bm_TGtkSpinButton_in_child* = 0x00000003
-  bp_TGtkSpinButton_in_child* = 0
-  bm_TGtkSpinButton_click_child* = 0x0000000C
-  bp_TGtkSpinButton_click_child* = 2
-  bm_TGtkSpinButton_button* = 0x00000030
-  bp_TGtkSpinButton_button* = 4
-  bm_TGtkSpinButton_need_timer* = 0x00000040
-  bp_TGtkSpinButton_need_timer* = 6
-  bm_TGtkSpinButton_timer_calls* = 0x00000380
-  bp_TGtkSpinButton_timer_calls* = 7
-  bm_TGtkSpinButton_digits* = 0x000FFC00
-  bp_TGtkSpinButton_digits* = 10
-  bm_TGtkSpinButton_numeric* = 0x00100000
-  bp_TGtkSpinButton_numeric* = 20
-  bm_TGtkSpinButton_wrap* = 0x00200000
-  bp_TGtkSpinButton_wrap* = 21
-  bm_TGtkSpinButton_snap_to_ticks* = 0x00400000
-  bp_TGtkSpinButton_snap_to_ticks* = 22
+  bm_TGtkSpinButton_in_child* = 0x00000003'i32
+  bp_TGtkSpinButton_in_child* = 0'i32
+  bm_TGtkSpinButton_click_child* = 0x0000000C'i32
+  bp_TGtkSpinButton_click_child* = 2'i32
+  bm_TGtkSpinButton_button* = 0x00000030'i32
+  bp_TGtkSpinButton_button* = 4'i32
+  bm_TGtkSpinButton_need_timer* = 0x00000040'i32
+  bp_TGtkSpinButton_need_timer* = 6'i32
+  bm_TGtkSpinButton_timer_calls* = 0x00000380'i32
+  bp_TGtkSpinButton_timer_calls* = 7'i32
+  bm_TGtkSpinButton_digits* = 0x000FFC00'i32
+  bp_TGtkSpinButton_digits* = 10'i32
+  bm_TGtkSpinButton_numeric* = 0x00100000'i32
+  bp_TGtkSpinButton_numeric* = 20'i32
+  bm_TGtkSpinButton_wrap* = 0x00200000'i32
+  bp_TGtkSpinButton_wrap* = 21'i32
+  bm_TGtkSpinButton_snap_to_ticks* = 0x00400000'i32
+  bp_TGtkSpinButton_snap_to_ticks* = 22'i32
 
 proc GTK_TYPE_SPIN_BUTTON*(): GType
 proc GTK_SPIN_BUTTON*(obj: pointer): PGtkSpinButton
@@ -8805,8 +8805,8 @@ proc GTK_IS_STATUSBAR*(obj: pointer): bool
 proc GTK_IS_STATUSBAR_CLASS*(klass: pointer): bool
 proc GTK_STATUSBAR_GET_CLASS*(obj: pointer): PGtkStatusbarClass
 const
-  bm_TGtkStatusbar_has_resize_grip* = 0x00000001
-  bp_TGtkStatusbar_has_resize_grip* = 0
+  bm_TGtkStatusbar_has_resize_grip* = 0x00000001'i16
+  bp_TGtkStatusbar_has_resize_grip* = 0'i16
 
 proc has_resize_grip*(a: var TGtkStatusbar): guint
 proc set_has_resize_grip*(a: var TGtkStatusbar, `has_resize_grip`: guint)
@@ -8831,30 +8831,30 @@ proc gtk_statusbar_set_has_resize_grip*(statusbar: PGtkStatusbar,
 proc gtk_statusbar_get_has_resize_grip*(statusbar: PGtkStatusbar): gboolean{.
     cdecl, dynlib: gtklib, importc: "gtk_statusbar_get_has_resize_grip".}
 const
-  bm_TGtkTable_homogeneous* = 0x00000001
-  bp_TGtkTable_homogeneous* = 0
-  bm_TGtkTableChild_xexpand* = 0x00000001
-  bp_TGtkTableChild_xexpand* = 0
-  bm_TGtkTableChild_yexpand* = 0x00000002
-  bp_TGtkTableChild_yexpand* = 1
-  bm_TGtkTableChild_xshrink* = 0x00000004
-  bp_TGtkTableChild_xshrink* = 2
-  bm_TGtkTableChild_yshrink* = 0x00000008
-  bp_TGtkTableChild_yshrink* = 3
-  bm_TGtkTableChild_xfill* = 0x00000010
-  bp_TGtkTableChild_xfill* = 4
-  bm_TGtkTableChild_yfill* = 0x00000020
-  bp_TGtkTableChild_yfill* = 5
-  bm_TGtkTableRowCol_need_expand* = 0x00000001
-  bp_TGtkTableRowCol_need_expand* = 0
-  bm_TGtkTableRowCol_need_shrink* = 0x00000002
-  bp_TGtkTableRowCol_need_shrink* = 1
-  bm_TGtkTableRowCol_expand* = 0x00000004
-  bp_TGtkTableRowCol_expand* = 2
-  bm_TGtkTableRowCol_shrink* = 0x00000008
-  bp_TGtkTableRowCol_shrink* = 3
-  bm_TGtkTableRowCol_empty* = 0x00000010
-  bp_TGtkTableRowCol_empty* = 4
+  bm_TGtkTable_homogeneous* = 0x00000001'i16
+  bp_TGtkTable_homogeneous* = 0'i16
+  bm_TGtkTableChild_xexpand* = 0x00000001'i16
+  bp_TGtkTableChild_xexpand* = 0'i16
+  bm_TGtkTableChild_yexpand* = 0x00000002'i16
+  bp_TGtkTableChild_yexpand* = 1'i16
+  bm_TGtkTableChild_xshrink* = 0x00000004'i16
+  bp_TGtkTableChild_xshrink* = 2'i16
+  bm_TGtkTableChild_yshrink* = 0x00000008'i16
+  bp_TGtkTableChild_yshrink* = 3'i16
+  bm_TGtkTableChild_xfill* = 0x00000010'i16
+  bp_TGtkTableChild_xfill* = 4'i16
+  bm_TGtkTableChild_yfill* = 0x00000020'i16
+  bp_TGtkTableChild_yfill* = 5'i16
+  bm_TGtkTableRowCol_need_expand* = 0x00000001'i16
+  bp_TGtkTableRowCol_need_expand* = 0'i16
+  bm_TGtkTableRowCol_need_shrink* = 0x00000002'i16
+  bp_TGtkTableRowCol_need_shrink* = 1'i16
+  bm_TGtkTableRowCol_expand* = 0x00000004'i16
+  bp_TGtkTableRowCol_expand* = 2'i16
+  bm_TGtkTableRowCol_shrink* = 0x00000008'i16
+  bp_TGtkTableRowCol_shrink* = 3'i16
+  bm_TGtkTableRowCol_empty* = 0x00000010'i16
+  bp_TGtkTableRowCol_empty* = 4'i16
 
 proc GTK_TYPE_TABLE*(): GType
 proc GTK_TABLE*(obj: pointer): PGtkTable
@@ -8923,8 +8923,8 @@ proc gtk_table_set_homogeneous*(table: PGtkTable, homogeneous: gboolean){.cdecl,
 proc gtk_table_get_homogeneous*(table: PGtkTable): gboolean{.cdecl,
     dynlib: gtklib, importc: "gtk_table_get_homogeneous".}
 const
-  bm_TGtkTearoffMenuItem_torn_off* = 0x00000001
-  bp_TGtkTearoffMenuItem_torn_off* = 0
+  bm_TGtkTearoffMenuItem_torn_off* = 0x00000001'i16
+  bp_TGtkTearoffMenuItem_torn_off* = 0'i16
 
 proc GTK_TYPE_TEAROFF_MENU_ITEM*(): GType
 proc GTK_TEAROFF_MENU_ITEM*(obj: pointer): PGtkTearoffMenuItem
@@ -8939,12 +8939,12 @@ proc gtk_tearoff_menu_item_get_type*(): TGtkType{.cdecl, dynlib: gtklib,
 proc gtk_tearoff_menu_item_new*(): PGtkWidget{.cdecl, dynlib: gtklib,
     importc: "gtk_tearoff_menu_item_new".}
 const
-  bm_TGtkText_line_wrap* = 0x00000001
-  bp_TGtkText_line_wrap* = 0
-  bm_TGtkText_word_wrap* = 0x00000002
-  bp_TGtkText_word_wrap* = 1
-  bm_TGtkText_use_wchar* = 0x00000004
-  bp_TGtkText_use_wchar* = 2
+  bm_TGtkText_line_wrap* = 0x00000001'i16
+  bp_TGtkText_line_wrap* = 0'i16
+  bm_TGtkText_word_wrap* = 0x00000002'i16
+  bp_TGtkText_word_wrap* = 1'i16
+  bm_TGtkText_use_wchar* = 0x00000004'i16
+  bp_TGtkText_use_wchar* = 2'i16
 
 proc GTK_TYPE_TEXT*(): GType
 proc GTK_TEXT*(obj: pointer): PGtkText
@@ -9199,54 +9199,54 @@ proc gtk_text_attributes_ref*(values: PGtkTextAttributes){.cdecl,
 proc gtk_text_attributes_get_type*(): GType{.cdecl, dynlib: gtklib,
     importc: "gtk_text_attributes_get_type".}
 const
-  bm_TGtkTextTag_bg_color_set* = 0x00000001
-  bp_TGtkTextTag_bg_color_set* = 0
-  bm_TGtkTextTag_bg_stipple_set* = 0x00000002
-  bp_TGtkTextTag_bg_stipple_set* = 1
-  bm_TGtkTextTag_fg_color_set* = 0x00000004
-  bp_TGtkTextTag_fg_color_set* = 2
-  bm_TGtkTextTag_scale_set* = 0x00000008
-  bp_TGtkTextTag_scale_set* = 3
-  bm_TGtkTextTag_fg_stipple_set* = 0x00000010
-  bp_TGtkTextTag_fg_stipple_set* = 4
-  bm_TGtkTextTag_justification_set* = 0x00000020
-  bp_TGtkTextTag_justification_set* = 5
-  bm_TGtkTextTag_left_margin_set* = 0x00000040
-  bp_TGtkTextTag_left_margin_set* = 6
-  bm_TGtkTextTag_indent_set* = 0x00000080
-  bp_TGtkTextTag_indent_set* = 7
-  bm_TGtkTextTag_rise_set* = 0x00000100
-  bp_TGtkTextTag_rise_set* = 8
-  bm_TGtkTextTag_strikethrough_set* = 0x00000200
-  bp_TGtkTextTag_strikethrough_set* = 9
-  bm_TGtkTextTag_right_margin_set* = 0x00000400
-  bp_TGtkTextTag_right_margin_set* = 10
-  bm_TGtkTextTag_pixels_above_lines_set* = 0x00000800
-  bp_TGtkTextTag_pixels_above_lines_set* = 11
-  bm_TGtkTextTag_pixels_below_lines_set* = 0x00001000
-  bp_TGtkTextTag_pixels_below_lines_set* = 12
-  bm_TGtkTextTag_pixels_inside_wrap_set* = 0x00002000
-  bp_TGtkTextTag_pixels_inside_wrap_set* = 13
-  bm_TGtkTextTag_tabs_set* = 0x00004000
-  bp_TGtkTextTag_tabs_set* = 14
-  bm_TGtkTextTag_underline_set* = 0x00008000
-  bp_TGtkTextTag_underline_set* = 15
-  bm_TGtkTextTag_wrap_mode_set* = 0x00010000
-  bp_TGtkTextTag_wrap_mode_set* = 16
-  bm_TGtkTextTag_bg_full_height_set* = 0x00020000
-  bp_TGtkTextTag_bg_full_height_set* = 17
-  bm_TGtkTextTag_invisible_set* = 0x00040000
-  bp_TGtkTextTag_invisible_set* = 18
-  bm_TGtkTextTag_editable_set* = 0x00080000
-  bp_TGtkTextTag_editable_set* = 19
-  bm_TGtkTextTag_language_set* = 0x00100000
-  bp_TGtkTextTag_language_set* = 20
-  bm_TGtkTextTag_pad1* = 0x00200000
-  bp_TGtkTextTag_pad1* = 21
-  bm_TGtkTextTag_pad2* = 0x00400000
-  bp_TGtkTextTag_pad2* = 22
-  bm_TGtkTextTag_pad3* = 0x00800000
-  bp_TGtkTextTag_pad3* = 23
+  bm_TGtkTextTag_bg_color_set* = 0x00000001'i32
+  bp_TGtkTextTag_bg_color_set* = 0'i32
+  bm_TGtkTextTag_bg_stipple_set* = 0x00000002'i32
+  bp_TGtkTextTag_bg_stipple_set* = 1'i32
+  bm_TGtkTextTag_fg_color_set* = 0x00000004'i32
+  bp_TGtkTextTag_fg_color_set* = 2'i32
+  bm_TGtkTextTag_scale_set* = 0x00000008'i32
+  bp_TGtkTextTag_scale_set* = 3'i32
+  bm_TGtkTextTag_fg_stipple_set* = 0x00000010'i32
+  bp_TGtkTextTag_fg_stipple_set* = 4'i32
+  bm_TGtkTextTag_justification_set* = 0x00000020'i32
+  bp_TGtkTextTag_justification_set* = 5'i32
+  bm_TGtkTextTag_left_margin_set* = 0x00000040'i32
+  bp_TGtkTextTag_left_margin_set* = 6'i32
+  bm_TGtkTextTag_indent_set* = 0x00000080'i32
+  bp_TGtkTextTag_indent_set* = 7'i32
+  bm_TGtkTextTag_rise_set* = 0x00000100'i32
+  bp_TGtkTextTag_rise_set* = 8'i32
+  bm_TGtkTextTag_strikethrough_set* = 0x00000200'i32
+  bp_TGtkTextTag_strikethrough_set* = 9'i32
+  bm_TGtkTextTag_right_margin_set* = 0x00000400'i32
+  bp_TGtkTextTag_right_margin_set* = 10'i32
+  bm_TGtkTextTag_pixels_above_lines_set* = 0x00000800'i32
+  bp_TGtkTextTag_pixels_above_lines_set* = 11'i32
+  bm_TGtkTextTag_pixels_below_lines_set* = 0x00001000'i32
+  bp_TGtkTextTag_pixels_below_lines_set* = 12'i32
+  bm_TGtkTextTag_pixels_inside_wrap_set* = 0x00002000'i32
+  bp_TGtkTextTag_pixels_inside_wrap_set* = 13'i32
+  bm_TGtkTextTag_tabs_set* = 0x00004000'i32
+  bp_TGtkTextTag_tabs_set* = 14'i32
+  bm_TGtkTextTag_underline_set* = 0x00008000'i32
+  bp_TGtkTextTag_underline_set* = 15'i32
+  bm_TGtkTextTag_wrap_mode_set* = 0x00010000'i32
+  bp_TGtkTextTag_wrap_mode_set* = 16'i32
+  bm_TGtkTextTag_bg_full_height_set* = 0x00020000'i32
+  bp_TGtkTextTag_bg_full_height_set* = 17'i32
+  bm_TGtkTextTag_invisible_set* = 0x00040000'i32
+  bp_TGtkTextTag_invisible_set* = 18'i32
+  bm_TGtkTextTag_editable_set* = 0x00080000'i32
+  bp_TGtkTextTag_editable_set* = 19'i32
+  bm_TGtkTextTag_language_set* = 0x00100000'i32
+  bp_TGtkTextTag_language_set* = 20'i32
+  bm_TGtkTextTag_pad1* = 0x00200000'i32
+  bp_TGtkTextTag_pad1* = 21'i32
+  bm_TGtkTextTag_pad2* = 0x00400000'i32
+  bp_TGtkTextTag_pad2* = 22'i32
+  bm_TGtkTextTag_pad3* = 0x00800000'i32
+  bp_TGtkTextTag_pad3* = 23'i32
 
 proc bg_color_set*(a: var TGtkTextTag): guint
 proc set_bg_color_set*(a: var TGtkTextTag, `bg_color_set`: guint)
@@ -9300,24 +9300,24 @@ proc set_pad2*(a: var TGtkTextTag, `pad2`: guint)
 proc pad3*(a: var TGtkTextTag): guint
 proc set_pad3*(a: var TGtkTextTag, `pad3`: guint)
 const
-  bm_TGtkTextAppearance_underline* = 0x0000000F
-  bp_TGtkTextAppearance_underline* = 0
-  bm_TGtkTextAppearance_strikethrough* = 0x00000010
-  bp_TGtkTextAppearance_strikethrough* = 4
-  bm_TGtkTextAppearance_draw_bg* = 0x00000020
-  bp_TGtkTextAppearance_draw_bg* = 5
-  bm_TGtkTextAppearance_inside_selection* = 0x00000040
-  bp_TGtkTextAppearance_inside_selection* = 6
-  bm_TGtkTextAppearance_is_text* = 0x00000080
-  bp_TGtkTextAppearance_is_text* = 7
-  bm_TGtkTextAppearance_pad1* = 0x00000100
-  bp_TGtkTextAppearance_pad1* = 8
-  bm_TGtkTextAppearance_pad2* = 0x00000200
-  bp_TGtkTextAppearance_pad2* = 9
-  bm_TGtkTextAppearance_pad3* = 0x00000400
-  bp_TGtkTextAppearance_pad3* = 10
-  bm_TGtkTextAppearance_pad4* = 0x00000800
-  bp_TGtkTextAppearance_pad4* = 11
+  bm_TGtkTextAppearance_underline* = 0x0000000F'i16
+  bp_TGtkTextAppearance_underline* = 0'i16
+  bm_TGtkTextAppearance_strikethrough* = 0x00000010'i16
+  bp_TGtkTextAppearance_strikethrough* = 4'i16
+  bm_TGtkTextAppearance_draw_bg* = 0x00000020'i16
+  bp_TGtkTextAppearance_draw_bg* = 5'i16
+  bm_TGtkTextAppearance_inside_selection* = 0x00000040'i16
+  bp_TGtkTextAppearance_inside_selection* = 6'i16
+  bm_TGtkTextAppearance_is_text* = 0x00000080'i16
+  bp_TGtkTextAppearance_is_text* = 7'i16
+  bm_TGtkTextAppearance_pad1* = 0x00000100'i16
+  bp_TGtkTextAppearance_pad1* = 8'i16
+  bm_TGtkTextAppearance_pad2* = 0x00000200'i16
+  bp_TGtkTextAppearance_pad2* = 9'i16
+  bm_TGtkTextAppearance_pad3* = 0x00000400'i16
+  bp_TGtkTextAppearance_pad3* = 10'i16
+  bm_TGtkTextAppearance_pad4* = 0x00000800'i16
+  bp_TGtkTextAppearance_pad4* = 11'i16
 
 proc underline*(a: var TGtkTextAppearance): guint
 proc set_underline*(a: var TGtkTextAppearance, `underline`: guint)
@@ -9338,22 +9338,22 @@ proc set_pad3*(a: var TGtkTextAppearance, `pad3`: guint)
 proc pad4*(a: var TGtkTextAppearance): guint
 proc set_pad4*(a: var TGtkTextAppearance, `pad4`: guint)
 const
-  bm_TGtkTextAttributes_invisible* = 0x00000001
-  bp_TGtkTextAttributes_invisible* = 0
-  bm_TGtkTextAttributes_bg_full_height* = 0x00000002
-  bp_TGtkTextAttributes_bg_full_height* = 1
-  bm_TGtkTextAttributes_editable* = 0x00000004
-  bp_TGtkTextAttributes_editable* = 2
-  bm_TGtkTextAttributes_realized* = 0x00000008
-  bp_TGtkTextAttributes_realized* = 3
-  bm_TGtkTextAttributes_pad1* = 0x00000010
-  bp_TGtkTextAttributes_pad1* = 4
-  bm_TGtkTextAttributes_pad2* = 0x00000020
-  bp_TGtkTextAttributes_pad2* = 5
-  bm_TGtkTextAttributes_pad3* = 0x00000040
-  bp_TGtkTextAttributes_pad3* = 6
-  bm_TGtkTextAttributes_pad4* = 0x00000080
-  bp_TGtkTextAttributes_pad4* = 7
+  bm_TGtkTextAttributes_invisible* = 0x00000001'i16
+  bp_TGtkTextAttributes_invisible* = 0'i16
+  bm_TGtkTextAttributes_bg_full_height* = 0x00000002'i16
+  bp_TGtkTextAttributes_bg_full_height* = 1'i16
+  bm_TGtkTextAttributes_editable* = 0x00000004'i16
+  bp_TGtkTextAttributes_editable* = 2'i16
+  bm_TGtkTextAttributes_realized* = 0x00000008'i16
+  bp_TGtkTextAttributes_realized* = 3'i16
+  bm_TGtkTextAttributes_pad1* = 0x00000010'i16
+  bp_TGtkTextAttributes_pad1* = 4'i16
+  bm_TGtkTextAttributes_pad2* = 0x00000020'i16
+  bp_TGtkTextAttributes_pad2* = 5'i16
+  bm_TGtkTextAttributes_pad3* = 0x00000040'i16
+  bp_TGtkTextAttributes_pad3* = 6'i16
+  bm_TGtkTextAttributes_pad4* = 0x00000080'i16
+  bp_TGtkTextAttributes_pad4* = 7'i16
 
 proc invisible*(a: var TGtkTextAttributes): guint
 proc set_invisible*(a: var TGtkTextAttributes, `invisible`: guint)
@@ -9418,10 +9418,10 @@ proc gtk_text_mark_get_buffer*(mark: PGtkTextMark): PGtkTextBuffer{.cdecl,
 proc gtk_text_mark_get_left_gravity*(mark: PGtkTextMark): gboolean{.cdecl,
     dynlib: gtklib, importc: "gtk_text_mark_get_left_gravity".}
 const
-  bm_TGtkTextMarkBody_visible* = 0x00000001
-  bp_TGtkTextMarkBody_visible* = 0
-  bm_TGtkTextMarkBody_not_deleteable* = 0x00000002
-  bp_TGtkTextMarkBody_not_deleteable* = 1
+  bm_TGtkTextMarkBody_visible* = 0x00000001'i16
+  bp_TGtkTextMarkBody_visible* = 0'i16
+  bm_TGtkTextMarkBody_not_deleteable* = 0x00000002'i16
+  bp_TGtkTextMarkBody_not_deleteable* = 1'i16
 
 proc visible*(a: var TGtkTextMarkBody): guint
 proc set_visible*(a: var TGtkTextMarkBody, `visible`: guint)
@@ -9607,10 +9607,10 @@ proc gtk_text_btree_first_could_contain_tag*(tree: PGtkTextBTree,
 proc gtk_text_btree_last_could_contain_tag*(tree: PGtkTextBTree,
     tag: PGtkTextTag): PGtkTextLine{.cdecl, dynlib: gtklib, importc: "_gtk_text_btree_last_could_contain_tag".}
 const
-  bm_TGtkTextLineData_width* = 0x00FFFFFF
-  bp_TGtkTextLineData_width* = 0
-  bm_TGtkTextLineData_valid* = 0xFF000000
-  bp_TGtkTextLineData_valid* = 24
+  bm_TGtkTextLineData_width* = 0x00FFFFFF'i32
+  bp_TGtkTextLineData_width* = 0'i32
+  bm_TGtkTextLineData_valid* = 0xFF000000'i32
+  bp_TGtkTextLineData_valid* = 24'i32
 
 proc width*(a: PGtkTextLineData): gint
 proc set_width*(a: PGtkTextLineData, NewWidth: gint)
@@ -9694,8 +9694,8 @@ proc gtk_text_btree_notify_will_remove_tag*(tree: PGtkTextBTree,
     tag: PGtkTextTag){.cdecl, dynlib: gtklib,
                        importc: "_gtk_text_btree_notify_will_remove_tag".}
 const
-  bm_TGtkTextBuffer_modified* = 0x00000001
-  bp_TGtkTextBuffer_modified* = 0
+  bm_TGtkTextBuffer_modified* = 0x00000001'i16
+  bp_TGtkTextBuffer_modified* = 0'i16
 
 proc GTK_TYPE_TEXT_BUFFER*(): GType
 proc GTK_TEXT_BUFFER*(obj: pointer): PGtkTextBuffer
@@ -9869,20 +9869,20 @@ proc GTK_IS_TEXT_LAYOUT*(obj: pointer): bool
 proc GTK_IS_TEXT_LAYOUT_CLASS*(klass: pointer): bool
 proc GTK_TEXT_LAYOUT_GET_CLASS*(obj: pointer): PGtkTextLayoutClass
 const
-  bm_TGtkTextLayout_cursor_visible* = 0x00000001
-  bp_TGtkTextLayout_cursor_visible* = 0
-  bm_TGtkTextLayout_cursor_direction* = 0x00000006
-  bp_TGtkTextLayout_cursor_direction* = 1
+  bm_TGtkTextLayout_cursor_visible* = 0x00000001'i16
+  bp_TGtkTextLayout_cursor_visible* = 0'i16
+  bm_TGtkTextLayout_cursor_direction* = 0x00000006'i16
+  bp_TGtkTextLayout_cursor_direction* = 1'i16
 
 proc cursor_visible*(a: var TGtkTextLayout): guint
 proc set_cursor_visible*(a: var TGtkTextLayout, `cursor_visible`: guint)
 proc cursor_direction*(a: var TGtkTextLayout): gint
 proc set_cursor_direction*(a: var TGtkTextLayout, `cursor_direction`: gint)
 const
-  bm_TGtkTextCursorDisplay_is_strong* = 0x00000001
-  bp_TGtkTextCursorDisplay_is_strong* = 0
-  bm_TGtkTextCursorDisplay_is_weak* = 0x00000002
-  bp_TGtkTextCursorDisplay_is_weak* = 1
+  bm_TGtkTextCursorDisplay_is_strong* = 0x00000001'i16
+  bp_TGtkTextCursorDisplay_is_strong* = 0'i16
+  bm_TGtkTextCursorDisplay_is_weak* = 0x00000002'i16
+  bp_TGtkTextCursorDisplay_is_weak* = 1'i16
 
 proc is_strong*(a: var TGtkTextCursorDisplay): guint
 proc set_is_strong*(a: var TGtkTextCursorDisplay, `is_strong`: guint)
@@ -10012,22 +10012,22 @@ proc gtk_text_anchored_child_set_layout*(child: PGtkWidget,
 proc gtk_text_layout_spew*(layout: PGtkTextLayout){.cdecl, dynlib: gtklib,
     importc: "gtk_text_layout_spew".}
 const # GTK_TEXT_VIEW_PRIORITY_VALIDATE* = GDK_PRIORITY_REDRAW + 5
-  bm_TGtkTextView_editable* = 0x00000001
-  bp_TGtkTextView_editable* = 0
-  bm_TGtkTextView_overwrite_mode* = 0x00000002
-  bp_TGtkTextView_overwrite_mode* = 1
-  bm_TGtkTextView_cursor_visible* = 0x00000004
-  bp_TGtkTextView_cursor_visible* = 2
-  bm_TGtkTextView_need_im_reset* = 0x00000008
-  bp_TGtkTextView_need_im_reset* = 3
-  bm_TGtkTextView_just_selected_element* = 0x00000010
-  bp_TGtkTextView_just_selected_element* = 4
-  bm_TGtkTextView_disable_scroll_on_focus* = 0x00000020
-  bp_TGtkTextView_disable_scroll_on_focus* = 5
-  bm_TGtkTextView_onscreen_validated* = 0x00000040
-  bp_TGtkTextView_onscreen_validated* = 6
-  bm_TGtkTextView_mouse_cursor_obscured* = 0x00000080
-  bp_TGtkTextView_mouse_cursor_obscured* = 7
+  bm_TGtkTextView_editable* = 0x00000001'i16
+  bp_TGtkTextView_editable* = 0'i16
+  bm_TGtkTextView_overwrite_mode* = 0x00000002'i16
+  bp_TGtkTextView_overwrite_mode* = 1'i16
+  bm_TGtkTextView_cursor_visible* = 0x00000004'i16
+  bp_TGtkTextView_cursor_visible* = 2'i16
+  bm_TGtkTextView_need_im_reset* = 0x00000008'i16
+  bp_TGtkTextView_need_im_reset* = 3'i16
+  bm_TGtkTextView_just_selected_element* = 0x00000010'i16
+  bp_TGtkTextView_just_selected_element* = 4'i16
+  bm_TGtkTextView_disable_scroll_on_focus* = 0x00000020'i16
+  bp_TGtkTextView_disable_scroll_on_focus* = 5'i16
+  bm_TGtkTextView_onscreen_validated* = 0x00000040'i16
+  bp_TGtkTextView_onscreen_validated* = 6'i16
+  bm_TGtkTextView_mouse_cursor_obscured* = 0x00000080'i16
+  bp_TGtkTextView_mouse_cursor_obscured* = 7'i16
 
 proc GTK_TYPE_TEXT_VIEW*(): GType
 proc GTK_TEXT_VIEW*(obj: pointer): PGtkTextView
@@ -10193,10 +10193,10 @@ proc gtk_text_view_get_tabs*(text_view: PGtkTextView): PPangoTabArray{.cdecl,
 proc gtk_text_view_get_default_attributes*(text_view: PGtkTextView): PGtkTextAttributes{.
     cdecl, dynlib: gtklib, importc: "gtk_text_view_get_default_attributes".}
 const
-  bm_TGtkTipsQuery_emit_always* = 0x00000001
-  bp_TGtkTipsQuery_emit_always* = 0
-  bm_TGtkTipsQuery_in_query* = 0x00000002
-  bp_TGtkTipsQuery_in_query* = 1
+  bm_TGtkTipsQuery_emit_always* = 0x00000001'i16
+  bp_TGtkTipsQuery_emit_always* = 0'i16
+  bm_TGtkTipsQuery_in_query* = 0x00000002'i16
+  bp_TGtkTipsQuery_in_query* = 1'i16
 
 proc GTK_TYPE_TIPS_QUERY*(): GType
 proc GTK_TIPS_QUERY*(obj: pointer): PGtkTipsQuery
@@ -10222,14 +10222,14 @@ proc gtk_tips_query_set_labels*(tips_query: PGtkTipsQuery,
                                 label_inactive: cstring, label_no_tip: cstring){.
     cdecl, dynlib: gtklib, importc: "gtk_tips_query_set_labels".}
 const
-  bm_TGtkTooltips_delay* = 0x3FFFFFFF
-  bp_TGtkTooltips_delay* = 0
-  bm_TGtkTooltips_enabled* = 0x40000000
-  bp_TGtkTooltips_enabled* = 30
-  bm_TGtkTooltips_have_grab* = 0x80000000
-  bp_TGtkTooltips_have_grab* = 31
-  bm_TGtkTooltips_use_sticky_delay* = 0x00000001
-  bp_TGtkTooltips_use_sticky_delay* = 0
+  bm_TGtkTooltips_delay* = 0x3FFFFFFF'i32
+  bp_TGtkTooltips_delay* = 0'i32
+  bm_TGtkTooltips_enabled* = 0x40000000'i32
+  bp_TGtkTooltips_enabled* = 30'i32
+  bm_TGtkTooltips_have_grab* = 0x80000000'i32
+  bp_TGtkTooltips_have_grab* = 31'i32
+  bm_TGtkTooltips_use_sticky_delay* = 0x00000001'i32
+  bp_TGtkTooltips_use_sticky_delay* = 0'i32
 
 proc GTK_TYPE_TOOLTIPS*(): GType
 proc GTK_TOOLTIPS*(obj: pointer): PGtkTooltips
@@ -10263,10 +10263,10 @@ proc gtk_tooltips_force_window*(tooltips: PGtkTooltips){.cdecl, dynlib: gtklib,
 proc gtk_tooltips_toggle_keyboard_mode*(widget: PGtkWidget){.cdecl,
     dynlib: gtklib, importc: "_gtk_tooltips_toggle_keyboard_mode".}
 const
-  bm_TGtkToolbar_style_set* = 0x00000001
-  bp_TGtkToolbar_style_set* = 0
-  bm_TGtkToolbar_icon_size_set* = 0x00000002
-  bp_TGtkToolbar_icon_size_set* = 1
+  bm_TGtkToolbar_style_set* = 0x00000001'i16
+  bp_TGtkToolbar_style_set* = 0'i16
+  bm_TGtkToolbar_icon_size_set* = 0x00000002'i16
+  bp_TGtkToolbar_icon_size_set* = 1'i16
 
 proc GTK_TYPE_TOOLBAR*(): GType
 proc GTK_TOOLBAR*(obj: pointer): PGtkToolbar
@@ -10370,12 +10370,12 @@ proc gtk_toolbar_get_icon_size*(toolbar: PGtkToolbar): TGtkIconSize{.cdecl,
 proc gtk_toolbar_get_tooltips*(toolbar: PGtkToolbar): gboolean{.cdecl,
     dynlib: gtklib, importc: "gtk_toolbar_get_tooltips".}
 const
-  bm_TGtkTree_selection_mode* = 0x00000003
-  bp_TGtkTree_selection_mode* = 0
-  bm_TGtkTree_view_mode* = 0x00000004
-  bp_TGtkTree_view_mode* = 2
-  bm_TGtkTree_view_line* = 0x00000008
-  bp_TGtkTree_view_line* = 3
+  bm_TGtkTree_selection_mode* = 0x00000003'i16
+  bp_TGtkTree_selection_mode* = 0'i16
+  bm_TGtkTree_view_mode* = 0x00000004'i16
+  bp_TGtkTree_view_mode* = 2'i16
+  bm_TGtkTree_view_line* = 0x00000008'i16
+  bp_TGtkTree_view_line* = 3'i16
 
 proc GTK_TYPE_TREE*(): GType
 proc GTK_TREE*(obj: pointer): PGtkTree
@@ -10452,8 +10452,8 @@ proc gtk_tree_set_row_drag_data*(selection_data: PGtkSelectionData,
                                  tree_model: PGtkTreeModel, path: PGtkTreePath): gboolean{.
     cdecl, dynlib: gtklib, importc: "gtk_tree_set_row_drag_data".}
 const
-  bm_TGtkTreeItem_expanded* = 0x00000001
-  bp_TGtkTreeItem_expanded* = 0
+  bm_TGtkTreeItem_expanded* = 0x00000001'i16
+  bp_TGtkTreeItem_expanded* = 0'i16
 
 proc GTK_TYPE_TREE_ITEM*(): GType
 proc GTK_TREE_ITEM*(obj: pointer): PGtkTreeItem
@@ -10535,8 +10535,8 @@ proc gtk_tree_selection_select_range*(selection: PGtkTreeSelection,
                                       end_path: PGtkTreePath){.cdecl,
     dynlib: gtklib, importc: "gtk_tree_selection_select_range".}
 const
-  bm_TGtkTreeStore_columns_dirty* = 0x00000001
-  bp_TGtkTreeStore_columns_dirty* = 0
+  bm_TGtkTreeStore_columns_dirty* = 0x00000001'i16
+  bp_TGtkTreeStore_columns_dirty* = 0'i16
 
 proc GTK_TYPE_TREE_STORE*(): GType
 proc GTK_TREE_STORE*(obj: pointer): PGtkTreeStore
@@ -10582,22 +10582,22 @@ proc gtk_tree_store_iter_depth*(tree_store: PGtkTreeStore, iter: PGtkTreeIter):
 proc gtk_tree_store_clear*(tree_store: PGtkTreeStore){.cdecl, dynlib: gtklib,
     importc: "gtk_tree_store_clear".}
 const
-  bm_TGtkTreeViewColumn_visible* = 0x00000001
-  bp_TGtkTreeViewColumn_visible* = 0
-  bm_TGtkTreeViewColumn_resizable* = 0x00000002
-  bp_TGtkTreeViewColumn_resizable* = 1
-  bm_TGtkTreeViewColumn_clickable* = 0x00000004
-  bp_TGtkTreeViewColumn_clickable* = 2
-  bm_TGtkTreeViewColumn_dirty* = 0x00000008
-  bp_TGtkTreeViewColumn_dirty* = 3
-  bm_TGtkTreeViewColumn_show_sort_indicator* = 0x00000010
-  bp_TGtkTreeViewColumn_show_sort_indicator* = 4
-  bm_TGtkTreeViewColumn_maybe_reordered* = 0x00000020
-  bp_TGtkTreeViewColumn_maybe_reordered* = 5
-  bm_TGtkTreeViewColumn_reorderable* = 0x00000040
-  bp_TGtkTreeViewColumn_reorderable* = 6
-  bm_TGtkTreeViewColumn_use_resized_width* = 0x00000080
-  bp_TGtkTreeViewColumn_use_resized_width* = 7
+  bm_TGtkTreeViewColumn_visible* = 0x00000001'i16
+  bp_TGtkTreeViewColumn_visible* = 0'i16
+  bm_TGtkTreeViewColumn_resizable* = 0x00000002'i16
+  bp_TGtkTreeViewColumn_resizable* = 1'i16
+  bm_TGtkTreeViewColumn_clickable* = 0x00000004'i16
+  bp_TGtkTreeViewColumn_clickable* = 2'i16
+  bm_TGtkTreeViewColumn_dirty* = 0x00000008'i16
+  bp_TGtkTreeViewColumn_dirty* = 3'i16
+  bm_TGtkTreeViewColumn_show_sort_indicator* = 0x00000010'i16
+  bp_TGtkTreeViewColumn_show_sort_indicator* = 4'i16
+  bm_TGtkTreeViewColumn_maybe_reordered* = 0x00000020'i16
+  bp_TGtkTreeViewColumn_maybe_reordered* = 5'i16
+  bm_TGtkTreeViewColumn_reorderable* = 0x00000040'i16
+  bp_TGtkTreeViewColumn_reorderable* = 6'i16
+  bm_TGtkTreeViewColumn_use_resized_width* = 0x00000080'i16
+  bp_TGtkTreeViewColumn_use_resized_width* = 7'i16
 
 proc GTK_TYPE_TREE_VIEW_COLUMN*(): GType
 proc GTK_TREE_VIEW_COLUMN*(obj: pointer): PGtkTreeViewColumn
@@ -10760,10 +10760,10 @@ const
       GTK_RBNODE_COLUMN_INVALID or GTK_RBNODE_DESCENDANTS_INVALID
 
 const
-  bm_TGtkRBNode_flags* = 0x00003FFF
-  bp_TGtkRBNode_flags* = 0
-  bm_TGtkRBNode_parity* = 0x00004000
-  bp_TGtkRBNode_parity* = 14
+  bm_TGtkRBNode_flags* = 0x00003FFF'i16
+  bp_TGtkRBNode_flags* = 0'i16
+  bm_TGtkRBNode_parity* = 0x00004000'i16
+  bp_TGtkRBNode_parity* = 14'i16
 
 proc flags*(a: PGtkRBNode): guint
 proc set_flags*(a: PGtkRBNode, `flags`: guint)
@@ -10850,24 +10850,24 @@ proc TREE_VIEW_COLUMN_REQUESTED_WIDTH*(column: PGtkTreeViewColumn): int32
 proc TREE_VIEW_DRAW_EXPANDERS*(tree_view: PGtkTreeView): bool
 proc TREE_VIEW_COLUMN_DRAG_DEAD_MULTIPLIER*(tree_view: PGtkTreeView): int32
 const
-  bm_TGtkTreeViewPrivate_scroll_to_use_align* = 0x00000001
-  bp_TGtkTreeViewPrivate_scroll_to_use_align* = 0
-  bm_TGtkTreeViewPrivate_fixed_height_check* = 0x00000002
-  bp_TGtkTreeViewPrivate_fixed_height_check* = 1
-  bm_TGtkTreeViewPrivate_reorderable* = 0x00000004
-  bp_TGtkTreeViewPrivate_reorderable* = 2
-  bm_TGtkTreeViewPrivate_header_has_focus* = 0x00000008
-  bp_TGtkTreeViewPrivate_header_has_focus* = 3
-  bm_TGtkTreeViewPrivate_drag_column_window_state* = 0x00000070
-  bp_TGtkTreeViewPrivate_drag_column_window_state* = 4
-  bm_TGtkTreeViewPrivate_has_rules* = 0x00000080
-  bp_TGtkTreeViewPrivate_has_rules* = 7
-  bm_TGtkTreeViewPrivate_mark_rows_col_dirty* = 0x00000100
-  bp_TGtkTreeViewPrivate_mark_rows_col_dirty* = 8
-  bm_TGtkTreeViewPrivate_enable_search* = 0x00000200
-  bp_TGtkTreeViewPrivate_enable_search* = 9
-  bm_TGtkTreeViewPrivate_disable_popdown* = 0x00000400
-  bp_TGtkTreeViewPrivate_disable_popdown* = 10
+  bm_TGtkTreeViewPrivate_scroll_to_use_align* = 0x00000001'i16
+  bp_TGtkTreeViewPrivate_scroll_to_use_align* = 0'i16
+  bm_TGtkTreeViewPrivate_fixed_height_check* = 0x00000002'i16
+  bp_TGtkTreeViewPrivate_fixed_height_check* = 1'i16
+  bm_TGtkTreeViewPrivate_reorderable* = 0x00000004'i16
+  bp_TGtkTreeViewPrivate_reorderable* = 2'i16
+  bm_TGtkTreeViewPrivate_header_has_focus* = 0x00000008'i16
+  bp_TGtkTreeViewPrivate_header_has_focus* = 3'i16
+  bm_TGtkTreeViewPrivate_drag_column_window_state* = 0x00000070'i16
+  bp_TGtkTreeViewPrivate_drag_column_window_state* = 4'i16
+  bm_TGtkTreeViewPrivate_has_rules* = 0x00000080'i16
+  bp_TGtkTreeViewPrivate_has_rules* = 7'i16
+  bm_TGtkTreeViewPrivate_mark_rows_col_dirty* = 0x00000100'i16
+  bp_TGtkTreeViewPrivate_mark_rows_col_dirty* = 8'i16
+  bm_TGtkTreeViewPrivate_enable_search* = 0x00000200'i16
+  bp_TGtkTreeViewPrivate_enable_search* = 9'i16
+  bm_TGtkTreeViewPrivate_disable_popdown* = 0x00000400'i16
+  bp_TGtkTreeViewPrivate_disable_popdown* = 10'i16
 
 proc scroll_to_use_align*(a: var TGtkTreeViewPrivate): guint
 proc set_scroll_to_use_align*(a: var TGtkTreeViewPrivate,
@@ -11259,13 +11259,13 @@ proc GTK_OBJECT_FLAGS*(obj: pointer): guint32 =
   result = (GTK_OBJECT(obj)).flags
 
 proc GTK_OBJECT_FLOATING*(obj: pointer): gboolean =
-  result = ((GTK_OBJECT_FLAGS(obj)) and GTK_FLOATING) != 0
+  result = ((GTK_OBJECT_FLAGS(obj)) and cint(GTK_FLOATING)) != 0'i32
 
 proc GTK_OBJECT_SET_FLAGS*(obj: pointer, flag: guint32) =
-  GTK_OBJECT(obj).flags = GTK_OBJECT(obj).flags or int(flag)
+  GTK_OBJECT(obj).flags = GTK_OBJECT(obj).flags or flag
 
 proc GTK_OBJECT_UNSET_FLAGS*(obj: pointer, flag: guint32) =
-  GTK_OBJECT(obj) . flags = GTK_OBJECT(obj). flags and not int(flag)
+  GTK_OBJECT(obj) . flags = GTK_OBJECT(obj). flags and not (flag)
 
 proc gtk_object_data_try_key*(`string`: cstring): TGQuark =
   result = g_quark_try_string(`string`)
@@ -11458,61 +11458,61 @@ proc GTK_WIDGET_FLAGS*(wid: pointer): guint32 =
   result = GTK_OBJECT_FLAGS(wid)
 
 proc GTK_WIDGET_TOPLEVEL*(wid: pointer): gboolean =
-  result = ((GTK_WIDGET_FLAGS(wid)) and GTK_TOPLEVEL) != 0
+  result = ((GTK_WIDGET_FLAGS(wid)) and cint(GTK_TOPLEVEL)) != 0'i32
 
 proc GTK_WIDGET_NO_WINDOW*(wid: pointer): gboolean =
-  result = ((GTK_WIDGET_FLAGS(wid)) and GTK_NO_WINDOW) != 0
+  result = ((GTK_WIDGET_FLAGS(wid)) and cint(GTK_NO_WINDOW)) != 0'i32
 
 proc GTK_WIDGET_REALIZED*(wid: pointer): gboolean =
-  result = ((GTK_WIDGET_FLAGS(wid)) and GTK_REALIZED) != 0
+  result = ((GTK_WIDGET_FLAGS(wid)) and cint(GTK_REALIZED)) != 0'i32
 
 proc GTK_WIDGET_MAPPED*(wid: pointer): gboolean =
-  result = ((GTK_WIDGET_FLAGS(wid)) and GTK_MAPPED) != 0
+  result = ((GTK_WIDGET_FLAGS(wid)) and cint(GTK_MAPPED)) != 0'i32
 
 proc GTK_WIDGET_VISIBLE*(wid: pointer): gboolean =
-  result = ((GTK_WIDGET_FLAGS(wid)) and GTK_VISIBLE) != 0
+  result = ((GTK_WIDGET_FLAGS(wid)) and cint(GTK_VISIBLE)) != 0'i32
 
 proc GTK_WIDGET_DRAWABLE*(wid: pointer): gboolean =
   result = (GTK_WIDGET_VISIBLE(wid)) and (GTK_WIDGET_MAPPED(wid))
 
 proc GTK_WIDGET_SENSITIVE*(wid: pointer): gboolean =
-  result = ((GTK_WIDGET_FLAGS(wid)) and GTK_SENSITIVE) != 0
+  result = ((GTK_WIDGET_FLAGS(wid)) and cint(GTK_SENSITIVE)) != 0'i32
 
 proc GTK_WIDGET_PARENT_SENSITIVE*(wid: pointer): gboolean =
-  result = ((GTK_WIDGET_FLAGS(wid)) and GTK_PARENT_SENSITIVE) != 0
+  result = ((GTK_WIDGET_FLAGS(wid)) and cint(GTK_PARENT_SENSITIVE)) != 0'i32
 
 proc GTK_WIDGET_IS_SENSITIVE*(wid: pointer): gboolean =
   result = (GTK_WIDGET_SENSITIVE(wid)) and (GTK_WIDGET_PARENT_SENSITIVE(wid))
 
 proc GTK_WIDGET_CAN_FOCUS*(wid: pointer): gboolean =
-  result = ((GTK_WIDGET_FLAGS(wid)) and GTK_CAN_FOCUS) != 0
+  result = ((GTK_WIDGET_FLAGS(wid)) and cint(GTK_CAN_FOCUS)) != 0'i32
 
 proc GTK_WIDGET_HAS_FOCUS*(wid: pointer): gboolean =
-  result = ((GTK_WIDGET_FLAGS(wid)) and GTK_HAS_FOCUS) != 0
+  result = ((GTK_WIDGET_FLAGS(wid)) and cint(GTK_HAS_FOCUS)) != 0'i32
 
 proc GTK_WIDGET_CAN_DEFAULT*(wid: pointer): gboolean =
-  result = ((GTK_WIDGET_FLAGS(wid)) and GTK_CAN_DEFAULT) != 0
+  result = ((GTK_WIDGET_FLAGS(wid)) and cint(GTK_CAN_DEFAULT)) != 0'i32
 
 proc GTK_WIDGET_HAS_DEFAULT*(wid: pointer): gboolean =
-  result = ((GTK_WIDGET_FLAGS(wid)) and GTK_HAS_DEFAULT) != 0
+  result = ((GTK_WIDGET_FLAGS(wid)) and cint(GTK_HAS_DEFAULT)) != 0'i32
 
 proc GTK_WIDGET_HAS_GRAB*(wid: pointer): gboolean =
-  result = ((GTK_WIDGET_FLAGS(wid)) and GTK_HAS_GRAB) != 0
+  result = ((GTK_WIDGET_FLAGS(wid)) and cint(GTK_HAS_GRAB)) != 0'i32
 
 proc GTK_WIDGET_RC_STYLE*(wid: pointer): gboolean =
-  result = ((GTK_WIDGET_FLAGS(wid)) and GTK_RC_STYLE) != 0
+  result = ((GTK_WIDGET_FLAGS(wid)) and cint(GTK_RC_STYLE)) != 0'i32
 
 proc GTK_WIDGET_COMPOSITE_CHILD*(wid: pointer): gboolean =
-  result = ((GTK_WIDGET_FLAGS(wid)) and GTK_COMPOSITE_CHILD) != 0
+  result = ((GTK_WIDGET_FLAGS(wid)) and cint(GTK_COMPOSITE_CHILD)) != 0'i32
 
 proc GTK_WIDGET_APP_PAINTABLE*(wid: pointer): gboolean =
-  result = ((GTK_WIDGET_FLAGS(wid)) and GTK_APP_PAINTABLE) != 0
+  result = ((GTK_WIDGET_FLAGS(wid)) and cint(GTK_APP_PAINTABLE)) != 0'i32
 
 proc GTK_WIDGET_RECEIVES_DEFAULT*(wid: pointer): gboolean =
-  result = ((GTK_WIDGET_FLAGS(wid)) and GTK_RECEIVES_DEFAULT) != 0
+  result = ((GTK_WIDGET_FLAGS(wid)) and cint(GTK_RECEIVES_DEFAULT)) != 0'i32
 
 proc GTK_WIDGET_DOUBLE_BUFFERED*(wid: pointer): gboolean =
-  result = ((GTK_WIDGET_FLAGS(wid)) and GTK_DOUBLE_BUFFERED) != 0
+  result = ((GTK_WIDGET_FLAGS(wid)) and cint(GTK_DOUBLE_BUFFERED)) != 0'i32
 
 proc GTK_TYPE_REQUISITION*(): GType =
   result = gtk_requisition_get_type()
@@ -11523,7 +11523,7 @@ proc x_set*(a: var TGtkWidgetAuxInfo): guint =
 
 proc set_x_set*(a: var TGtkWidgetAuxInfo, `x_set`: guint) =
   a.flag0 = a.flag0 or
-      ((`x_set` shl bp_TGtkWidgetAuxInfo_x_set) and
+      (int16(`x_set` shl bp_TGtkWidgetAuxInfo_x_set) and
       bm_TGtkWidgetAuxInfo_x_set)
 
 proc y_set*(a: var TGtkWidgetAuxInfo): guint =
@@ -11532,7 +11532,7 @@ proc y_set*(a: var TGtkWidgetAuxInfo): guint =
 
 proc set_y_set*(a: var TGtkWidgetAuxInfo, `y_set`: guint) =
   a.flag0 = a.flag0 or
-      ((`y_set` shl bp_TGtkWidgetAuxInfo_y_set) and
+      (int16(`y_set` shl bp_TGtkWidgetAuxInfo_y_set) and
       bm_TGtkWidgetAuxInfo_y_set)
 
 proc gtk_widget_set_visual*(widget, visual: pointer) =
@@ -11554,11 +11554,11 @@ proc gtk_widget_restore_default_style*(widget: pointer) =
   gtk_widget_set_style(cast[PGtkWidget](widget), nil)
 
 proc GTK_WIDGET_SET_FLAGS*(wid: PGtkWidget, flags: TGtkWidgetFlags): TGtkWidgetFlags =
-  cast[pGtkObject](wid).flags = cast[pGtkObject](wid).flags or int(flags)
+  cast[pGtkObject](wid).flags = cast[pGtkObject](wid).flags or (flags)
   result = cast[pGtkObject](wid).flags
 
 proc GTK_WIDGET_UNSET_FLAGS*(wid: PGtkWidget, flags: TGtkWidgetFlags): TGtkWidgetFlags =
-  cast[pGtkObject](wid).flags = cast[pGtkObject](wid).flags and (not int(flags))
+  cast[pGtkObject](wid).flags = cast[pGtkObject](wid).flags and (not (flags))
   result = cast[pGtkObject](wid).flags
 
 proc GTK_TYPE_MISC*(): GType =
@@ -11606,7 +11606,7 @@ proc accel_flags*(a: var TGtkAccelKey): guint =
 
 proc set_accel_flags*(a: var TGtkAccelKey, `accel_flags`: guint) =
   a.flag0 = a.flag0 or
-      ((`accel_flags` shl bp_TGtkAccelKey_accel_flags) and
+      (int16(`accel_flags` shl bp_TGtkAccelKey_accel_flags) and
       bm_TGtkAccelKey_accel_flags)
 
 proc gtk_accel_group_ref*(AccelGroup: PGtkAccelGroup) =
@@ -11635,7 +11635,7 @@ proc GTK_CONTAINER_GET_CLASS*(obj: pointer): PGtkContainerClass =
 
 proc GTK_IS_RESIZE_CONTAINER*(widget: pointer): bool =
   result = (GTK_IS_CONTAINER(widget)) and
-      ((resize_mode(cast[PGtkContainer](widget))) != ord(GTK_RESIZE_PARENT))
+      ((resize_mode(cast[PGtkContainer](widget))) != cint(GTK_RESIZE_PARENT))
 
 proc border_width*(a: var TGtkContainer): guint =
   result = (a.GtkContainer_flag0 and bm_TGtkContainer_border_width) shr
@@ -11918,13 +11918,13 @@ proc jtype*(a: var TGtkLabel): guint =
 
 proc set_jtype*(a: var TGtkLabel, `jtype`: guint) =
   a.GtkLabelflag0 = a.GtkLabelflag0 or
-      ((`jtype` shl bp_TGtkLabel_jtype) and bm_TGtkLabel_jtype)
+      (int16(`jtype` shl bp_TGtkLabel_jtype) and bm_TGtkLabel_jtype)
 
 proc wrap*(a: var TGtkLabel): guint =
   result = (a.GtkLabelflag0 and bm_TGtkLabel_wrap) shr bp_TGtkLabel_wrap
 
 proc set_wrap*(a: var TGtkLabel, `wrap`: guint) =
-  a.GtkLabelflag0 = a.GtkLabelflag0 or ((`wrap` shl bp_TGtkLabel_wrap) and bm_TGtkLabel_wrap)
+  a.GtkLabelflag0 = a.GtkLabelflag0 or (int16(`wrap` shl bp_TGtkLabel_wrap) and bm_TGtkLabel_wrap)
 
 proc use_underline*(a: var TGtkLabel): guint =
   result = (a.GtkLabelflag0 and bm_TGtkLabel_use_underline) shr
@@ -11932,7 +11932,7 @@ proc use_underline*(a: var TGtkLabel): guint =
 
 proc set_use_underline*(a: var TGtkLabel, `use_underline`: guint) =
   a.GtkLabelflag0 = a.GtkLabelflag0 or
-      ((`use_underline` shl bp_TGtkLabel_use_underline) and
+      (int16(`use_underline` shl bp_TGtkLabel_use_underline) and
       bm_TGtkLabel_use_underline)
 
 proc use_markup*(a: var TGtkLabel): guint =
@@ -11940,7 +11940,7 @@ proc use_markup*(a: var TGtkLabel): guint =
 
 proc set_use_markup*(a: var TGtkLabel, `use_markup`: guint) =
   a.GtkLabelflag0 = a.GtkLabelflag0 or
-      ((`use_markup` shl bp_TGtkLabel_use_markup) and bm_TGtkLabel_use_markup)
+      (int16(`use_markup` shl bp_TGtkLabel_use_markup) and bm_TGtkLabel_use_markup)
 
 proc GTK_TYPE_ACCEL_LABEL*(): GType =
   result = gtk_accel_label_get_type()
@@ -11966,7 +11966,7 @@ proc latin1_to_char*(a: var TGtkAccelLabelClass): guint =
 
 proc set_latin1_to_char*(a: var TGtkAccelLabelClass, `latin1_to_char`: guint) =
   a.GtkAccelLabelClassflag0 = a.GtkAccelLabelClassflag0 or
-      ((`latin1_to_char` shl bp_TGtkAccelLabelClass_latin1_to_char) and
+      (int16(`latin1_to_char` shl bp_TGtkAccelLabelClass_latin1_to_char) and
       bm_TGtkAccelLabelClass_latin1_to_char)
 
 proc gtk_accel_label_accelerator_width*(accel_label: PGtkAccelLabel): guint =
@@ -12087,7 +12087,7 @@ proc parsed*(a: var TGtkBindingSet): guint =
 
 proc set_parsed*(a: var TGtkBindingSet, `parsed`: guint) =
   a.flag0 = a.flag0 or
-      ((`parsed` shl bp_TGtkBindingSet_parsed) and bm_TGtkBindingSet_parsed)
+      (int16(`parsed` shl bp_TGtkBindingSet_parsed) and bm_TGtkBindingSet_parsed)
 
 proc destroyed*(a: var TGtkBindingEntry): guint =
   result = (a.flag0 and bm_TGtkBindingEntry_destroyed) shr
@@ -12095,7 +12095,7 @@ proc destroyed*(a: var TGtkBindingEntry): guint =
 
 proc set_destroyed*(a: var TGtkBindingEntry, `destroyed`: guint) =
   a.flag0 = a.flag0 or
-      ((`destroyed` shl bp_TGtkBindingEntry_destroyed) and
+      (int16(`destroyed` shl bp_TGtkBindingEntry_destroyed) and
       bm_TGtkBindingEntry_destroyed)
 
 proc in_emission*(a: var TGtkBindingEntry): guint =
@@ -12104,7 +12104,7 @@ proc in_emission*(a: var TGtkBindingEntry): guint =
 
 proc set_in_emission*(a: var TGtkBindingEntry, `in_emission`: guint) =
   a.flag0 = a.flag0 or
-      ((`in_emission` shl bp_TGtkBindingEntry_in_emission) and
+      (int16(`in_emission` shl bp_TGtkBindingEntry_in_emission) and
       bm_TGtkBindingEntry_in_emission)
 
 proc gtk_binding_entry_add*(binding_set: PGtkBindingSet, keyval: guint,
@@ -12134,28 +12134,28 @@ proc homogeneous*(a: var TGtkBox): guint =
 
 proc set_homogeneous*(a: var TGtkBox, `homogeneous`: guint) =
   a.GtkBoxflag0 = a.GtkBoxflag0 or
-      ((`homogeneous` shl bp_TGtkBox_homogeneous) and bm_TGtkBox_homogeneous)
+      (int16(`homogeneous` shl bp_TGtkBox_homogeneous) and bm_TGtkBox_homogeneous)
 
 proc expand*(a: var TGtkBoxChild): guint =
   result = (a.flag0 and bm_TGtkBoxChild_expand) shr bp_TGtkBoxChild_expand
 
 proc set_expand*(a: var TGtkBoxChild, `expand`: guint) =
   a.flag0 = a.flag0 or
-      ((`expand` shl bp_TGtkBoxChild_expand) and bm_TGtkBoxChild_expand)
+      (int16(`expand` shl bp_TGtkBoxChild_expand) and bm_TGtkBoxChild_expand)
 
 proc fill*(a: var TGtkBoxChild): guint =
   result = (a.flag0 and bm_TGtkBoxChild_fill) shr bp_TGtkBoxChild_fill
 
 proc set_fill*(a: var TGtkBoxChild, `fill`: guint) =
   a.flag0 = a.flag0 or
-      ((`fill` shl bp_TGtkBoxChild_fill) and bm_TGtkBoxChild_fill)
+      (int16(`fill` shl bp_TGtkBoxChild_fill) and bm_TGtkBoxChild_fill)
 
 proc pack*(a: var TGtkBoxChild): guint =
   result = (a.flag0 and bm_TGtkBoxChild_pack) shr bp_TGtkBoxChild_pack
 
 proc set_pack*(a: var TGtkBoxChild, `pack`: guint) =
   a.flag0 = a.flag0 or
-      ((`pack` shl bp_TGtkBoxChild_pack) and bm_TGtkBoxChild_pack)
+      (int16(`pack` shl bp_TGtkBoxChild_pack) and bm_TGtkBoxChild_pack)
 
 proc is_secondary*(a: var TGtkBoxChild): guint =
   result = (a.flag0 and bm_TGtkBoxChild_is_secondary) shr
@@ -12163,7 +12163,7 @@ proc is_secondary*(a: var TGtkBoxChild): guint =
 
 proc set_is_secondary*(a: var TGtkBoxChild, `is_secondary`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_secondary` shl bp_TGtkBoxChild_is_secondary) and
+      (int16(`is_secondary` shl bp_TGtkBoxChild_is_secondary) and
       bm_TGtkBoxChild_is_secondary)
 
 proc GTK_TYPE_BUTTON_BOX*(): GType =
@@ -12214,7 +12214,7 @@ proc constructed*(a: var TGtkButton): guint =
 
 proc set_constructed*(a: var TGtkButton, `constructed`: guint) =
   a.GtkButtonflag0 = a.GtkButtonflag0 or
-      ((`constructed` shl bp_TGtkButton_constructed) and
+      (int16(`constructed` shl bp_TGtkButton_constructed) and
       bm_TGtkButton_constructed)
 
 proc in_button*(a: var TGtkButton): guint =
@@ -12222,7 +12222,7 @@ proc in_button*(a: var TGtkButton): guint =
 
 proc set_in_button*(a: var TGtkButton, `in_button`: guint) =
   a.GtkButtonflag0 = a.GtkButtonflag0 or
-      ((`in_button` shl bp_TGtkButton_in_button) and bm_TGtkButton_in_button)
+      (int16(`in_button` shl bp_TGtkButton_in_button) and bm_TGtkButton_in_button)
 
 proc button_down*(a: var TGtkButton): guint =
   result = (a.GtkButtonflag0 and bm_TGtkButton_button_down) shr
@@ -12230,7 +12230,7 @@ proc button_down*(a: var TGtkButton): guint =
 
 proc set_button_down*(a: var TGtkButton, `button_down`: guint) =
   a.GtkButtonflag0 = a.GtkButtonflag0 or
-      ((`button_down` shl bp_TGtkButton_button_down) and
+      (int16(`button_down` shl bp_TGtkButton_button_down) and
       bm_TGtkButton_button_down)
 
 proc relief*(a: var TGtkButton): guint =
@@ -12238,7 +12238,7 @@ proc relief*(a: var TGtkButton): guint =
 
 proc set_relief*(a: var TGtkButton, `relief`: guint) =
   a.GtkButtonflag0 = a.GtkButtonflag0 or
-      ((`relief` shl bp_TGtkButton_relief) and bm_TGtkButton_relief)
+      (int16(`relief` shl bp_TGtkButton_relief) and bm_TGtkButton_relief)
 
 proc use_underline*(a: var TGtkButton): guint =
   result = (a.GtkButtonflag0 and bm_TGtkButton_use_underline) shr
@@ -12246,7 +12246,7 @@ proc use_underline*(a: var TGtkButton): guint =
 
 proc set_use_underline*(a: var TGtkButton, `use_underline`: guint) =
   a.GtkButtonflag0 = a.GtkButtonflag0 or
-      ((`use_underline` shl bp_TGtkButton_use_underline) and
+      (int16(`use_underline` shl bp_TGtkButton_use_underline) and
       bm_TGtkButton_use_underline)
 
 proc use_stock*(a: var TGtkButton): guint =
@@ -12254,14 +12254,14 @@ proc use_stock*(a: var TGtkButton): guint =
 
 proc set_use_stock*(a: var TGtkButton, `use_stock`: guint) =
   a.GtkButtonflag0 = a.GtkButtonflag0 or
-      ((`use_stock` shl bp_TGtkButton_use_stock) and bm_TGtkButton_use_stock)
+      (int16(`use_stock` shl bp_TGtkButton_use_stock) and bm_TGtkButton_use_stock)
 
 proc depressed*(a: var TGtkButton): guint =
   result = (a.GtkButtonflag0 and bm_TGtkButton_depressed) shr bp_TGtkButton_depressed
 
 proc set_depressed*(a: var TGtkButton, `depressed`: guint) =
   a.GtkButtonflag0 = a.GtkButtonflag0 or
-      ((`depressed` shl bp_TGtkButton_depressed) and bm_TGtkButton_depressed)
+      (int16(`depressed` shl bp_TGtkButton_depressed) and bm_TGtkButton_depressed)
 
 proc depress_on_activate*(a: var TGtkButton): guint =
   result = (a.GtkButtonflag0 and bm_TGtkButton_depress_on_activate) shr
@@ -12269,7 +12269,7 @@ proc depress_on_activate*(a: var TGtkButton): guint =
 
 proc set_depress_on_activate*(a: var TGtkButton, `depress_on_activate`: guint) =
   a.GtkButtonflag0 = a.GtkButtonflag0 or
-      ((`depress_on_activate` shl bp_TGtkButton_depress_on_activate) and
+      (int16(`depress_on_activate` shl bp_TGtkButton_depress_on_activate) and
       bm_TGtkButton_depress_on_activate)
 
 proc GTK_TYPE_CALENDAR*(): GType =
@@ -12333,7 +12333,7 @@ proc mode*(a: var TGtkCellRenderer): guint =
 
 proc set_mode*(a: var TGtkCellRenderer, `mode`: guint) =
   a.GtkCellRendererflag0 = a.GtkCellRendererflag0 or
-      ((`mode` shl bp_TGtkCellRenderer_mode) and bm_TGtkCellRenderer_mode)
+      (int16(`mode` shl bp_TGtkCellRenderer_mode) and bm_TGtkCellRenderer_mode)
 
 proc visible*(a: var TGtkCellRenderer): guint =
   result = (a.GtkCellRendererflag0 and bm_TGtkCellRenderer_visible) shr
@@ -12341,7 +12341,7 @@ proc visible*(a: var TGtkCellRenderer): guint =
 
 proc set_visible*(a: var TGtkCellRenderer, `visible`: guint) =
   a.GtkCellRendererflag0 = a.GtkCellRendererflag0 or
-      ((`visible` shl bp_TGtkCellRenderer_visible) and
+      (int16(`visible` shl bp_TGtkCellRenderer_visible) and
       bm_TGtkCellRenderer_visible)
 
 proc is_expander*(a: var TGtkCellRenderer): guint =
@@ -12350,7 +12350,7 @@ proc is_expander*(a: var TGtkCellRenderer): guint =
 
 proc set_is_expander*(a: var TGtkCellRenderer, `is_expander`: guint) =
   a.GtkCellRendererflag0 = a.GtkCellRendererflag0 or
-      ((`is_expander` shl bp_TGtkCellRenderer_is_expander) and
+      (int16(`is_expander` shl bp_TGtkCellRenderer_is_expander) and
       bm_TGtkCellRenderer_is_expander)
 
 proc is_expanded*(a: var TGtkCellRenderer): guint =
@@ -12359,7 +12359,7 @@ proc is_expanded*(a: var TGtkCellRenderer): guint =
 
 proc set_is_expanded*(a: var TGtkCellRenderer, `is_expanded`: guint) =
   a.GtkCellRendererflag0 = a.GtkCellRendererflag0 or
-      ((`is_expanded` shl bp_TGtkCellRenderer_is_expanded) and
+      (int16(`is_expanded` shl bp_TGtkCellRenderer_is_expanded) and
       bm_TGtkCellRenderer_is_expanded)
 
 proc cell_background_set*(a: var TGtkCellRenderer): guint =
@@ -12369,7 +12369,7 @@ proc cell_background_set*(a: var TGtkCellRenderer): guint =
 proc set_cell_background_set*(a: var TGtkCellRenderer,
                               `cell_background_set`: guint) =
   a.GtkCellRendererflag0 = a.GtkCellRendererflag0 or
-      ((`cell_background_set` shl bp_TGtkCellRenderer_cell_background_set) and
+      (int16(`cell_background_set` shl bp_TGtkCellRenderer_cell_background_set) and
       bm_TGtkCellRenderer_cell_background_set)
 
 proc GTK_TYPE_CELL_RENDERER_TEXT*(): GType =
@@ -12398,7 +12398,7 @@ proc strikethrough*(a: var TGtkCellRendererText): guint =
 
 proc set_strikethrough*(a: var TGtkCellRendererText, `strikethrough`: guint) =
   a.GtkCellRendererTextflag0 = a.GtkCellRendererTextflag0 or
-      ((`strikethrough` shl bp_TGtkCellRendererText_strikethrough) and
+      (int16(`strikethrough` shl bp_TGtkCellRendererText_strikethrough) and
       bm_TGtkCellRendererText_strikethrough)
 
 proc editable*(a: var TGtkCellRendererText): guint =
@@ -12407,7 +12407,7 @@ proc editable*(a: var TGtkCellRendererText): guint =
 
 proc set_editable*(a: var TGtkCellRendererText, `editable`: guint) =
   a.GtkCellRendererTextflag0 = a.GtkCellRendererTextflag0 or
-      ((`editable` shl bp_TGtkCellRendererText_editable) and
+      (int16(`editable` shl bp_TGtkCellRendererText_editable) and
       bm_TGtkCellRendererText_editable)
 
 proc scale_set*(a: var TGtkCellRendererText): guint =
@@ -12416,7 +12416,7 @@ proc scale_set*(a: var TGtkCellRendererText): guint =
 
 proc set_scale_set*(a: var TGtkCellRendererText, `scale_set`: guint) =
   a.GtkCellRendererTextflag0 = a.GtkCellRendererTextflag0 or
-      ((`scale_set` shl bp_TGtkCellRendererText_scale_set) and
+      (int16(`scale_set` shl bp_TGtkCellRendererText_scale_set) and
       bm_TGtkCellRendererText_scale_set)
 
 proc foreground_set*(a: var TGtkCellRendererText): guint =
@@ -12425,7 +12425,7 @@ proc foreground_set*(a: var TGtkCellRendererText): guint =
 
 proc set_foreground_set*(a: var TGtkCellRendererText, `foreground_set`: guint) =
   a.GtkCellRendererTextflag0 = a.GtkCellRendererTextflag0 or
-      ((`foreground_set` shl bp_TGtkCellRendererText_foreground_set) and
+      (int16(`foreground_set` shl bp_TGtkCellRendererText_foreground_set) and
       bm_TGtkCellRendererText_foreground_set)
 
 proc background_set*(a: var TGtkCellRendererText): guint =
@@ -12434,7 +12434,7 @@ proc background_set*(a: var TGtkCellRendererText): guint =
 
 proc set_background_set*(a: var TGtkCellRendererText, `background_set`: guint) =
   a.GtkCellRendererTextflag0 = a.GtkCellRendererTextflag0 or
-      ((`background_set` shl bp_TGtkCellRendererText_background_set) and
+      (int16(`background_set` shl bp_TGtkCellRendererText_background_set) and
       bm_TGtkCellRendererText_background_set)
 
 proc underline_set*(a: var TGtkCellRendererText): guint =
@@ -12443,7 +12443,7 @@ proc underline_set*(a: var TGtkCellRendererText): guint =
 
 proc set_underline_set*(a: var TGtkCellRendererText, `underline_set`: guint) =
   a.GtkCellRendererTextflag0 = a.GtkCellRendererTextflag0 or
-      ((`underline_set` shl bp_TGtkCellRendererText_underline_set) and
+      (int16(`underline_set` shl bp_TGtkCellRendererText_underline_set) and
       bm_TGtkCellRendererText_underline_set)
 
 proc rise_set*(a: var TGtkCellRendererText): guint =
@@ -12452,7 +12452,7 @@ proc rise_set*(a: var TGtkCellRendererText): guint =
 
 proc set_rise_set*(a: var TGtkCellRendererText, `rise_set`: guint) =
   a.GtkCellRendererTextflag0 = a.GtkCellRendererTextflag0 or
-      ((`rise_set` shl bp_TGtkCellRendererText_rise_set) and
+      (int16(`rise_set` shl bp_TGtkCellRendererText_rise_set) and
       bm_TGtkCellRendererText_rise_set)
 
 proc strikethrough_set*(a: var TGtkCellRendererText): guint =
@@ -12462,7 +12462,7 @@ proc strikethrough_set*(a: var TGtkCellRendererText): guint =
 proc set_strikethrough_set*(a: var TGtkCellRendererText,
                             `strikethrough_set`: guint) =
   a.GtkCellRendererTextflag0 = a.GtkCellRendererTextflag0 or
-      ((`strikethrough_set` shl bp_TGtkCellRendererText_strikethrough_set) and
+      (int16(`strikethrough_set` shl bp_TGtkCellRendererText_strikethrough_set) and
       bm_TGtkCellRendererText_strikethrough_set)
 
 proc editable_set*(a: var TGtkCellRendererText): guint =
@@ -12471,7 +12471,7 @@ proc editable_set*(a: var TGtkCellRendererText): guint =
 
 proc set_editable_set*(a: var TGtkCellRendererText, `editable_set`: guint) =
   a.GtkCellRendererTextflag0 = a.GtkCellRendererTextflag0 or
-      ((`editable_set` shl bp_TGtkCellRendererText_editable_set) and
+      (int16(`editable_set` shl bp_TGtkCellRendererText_editable_set) and
       bm_TGtkCellRendererText_editable_set)
 
 proc calc_fixed_height*(a: var TGtkCellRendererText): guint =
@@ -12481,7 +12481,7 @@ proc calc_fixed_height*(a: var TGtkCellRendererText): guint =
 proc set_calc_fixed_height*(a: var TGtkCellRendererText,
                             `calc_fixed_height`: guint) =
   a.GtkCellRendererTextflag0 = a.GtkCellRendererTextflag0 or
-      ((`calc_fixed_height` shl bp_TGtkCellRendererText_calc_fixed_height) and
+      (int16(`calc_fixed_height` shl bp_TGtkCellRendererText_calc_fixed_height) and
       bm_TGtkCellRendererText_calc_fixed_height)
 
 proc GTK_TYPE_CELL_RENDERER_TOGGLE*(): GType =
@@ -12511,7 +12511,7 @@ proc active*(a: var TGtkCellRendererToggle): guint =
 
 proc set_active*(a: var TGtkCellRendererToggle, `active`: guint) =
   a.GtkCellRendererToggleflag0 = a.GtkCellRendererToggleflag0 or
-      ((`active` shl bp_TGtkCellRendererToggle_active) and
+      (int16(`active` shl bp_TGtkCellRendererToggle_active) and
       bm_TGtkCellRendererToggle_active)
 
 proc activatable*(a: var TGtkCellRendererToggle): guint =
@@ -12520,7 +12520,7 @@ proc activatable*(a: var TGtkCellRendererToggle): guint =
 
 proc set_activatable*(a: var TGtkCellRendererToggle, `activatable`: guint) =
   a.GtkCellRendererToggleflag0 = a.GtkCellRendererToggleflag0 or
-      ((`activatable` shl bp_TGtkCellRendererToggle_activatable) and
+      (int16(`activatable` shl bp_TGtkCellRendererToggle_activatable) and
       bm_TGtkCellRendererToggle_activatable)
 
 proc radio*(a: var TGtkCellRendererToggle): guint =
@@ -12529,7 +12529,7 @@ proc radio*(a: var TGtkCellRendererToggle): guint =
 
 proc set_radio*(a: var TGtkCellRendererToggle, `radio`: guint) =
   a.GtkCellRendererToggleflag0 = a.GtkCellRendererToggleflag0 or
-      ((`radio` shl bp_TGtkCellRendererToggle_radio) and
+      (int16(`radio` shl bp_TGtkCellRendererToggle_radio) and
       bm_TGtkCellRendererToggle_radio)
 
 proc GTK_TYPE_CELL_RENDERER_PIXBUF*(): GType =
@@ -12596,7 +12596,7 @@ proc show_submenu_indicator*(a: var TGtkMenuItem): guint =
 proc set_show_submenu_indicator*(a: var TGtkMenuItem,
                                  `show_submenu_indicator`: guint) =
   a.GtkMenuItemflag0 = a.GtkMenuItemflag0 or
-      ((`show_submenu_indicator` shl bp_TGtkMenuItem_show_submenu_indicator) and
+      (int16(`show_submenu_indicator` shl bp_TGtkMenuItem_show_submenu_indicator) and
       bm_TGtkMenuItem_show_submenu_indicator)
 
 proc submenu_placement*(a: var TGtkMenuItem): guint =
@@ -12605,7 +12605,7 @@ proc submenu_placement*(a: var TGtkMenuItem): guint =
 
 proc set_submenu_placement*(a: var TGtkMenuItem, `submenu_placement`: guint) =
   a.GtkMenuItemflag0 = a.GtkMenuItemflag0 or
-      ((`submenu_placement` shl bp_TGtkMenuItem_submenu_placement) and
+      (int16(`submenu_placement` shl bp_TGtkMenuItem_submenu_placement) and
       bm_TGtkMenuItem_submenu_placement)
 
 proc submenu_direction*(a: var TGtkMenuItem): guint =
@@ -12614,7 +12614,7 @@ proc submenu_direction*(a: var TGtkMenuItem): guint =
 
 proc set_submenu_direction*(a: var TGtkMenuItem, `submenu_direction`: guint) =
   a.GtkMenuItemflag0 = a.GtkMenuItemflag0 or
-      ((`submenu_direction` shl bp_TGtkMenuItem_submenu_direction) and
+      (int16(`submenu_direction` shl bp_TGtkMenuItem_submenu_direction) and
       bm_TGtkMenuItem_submenu_direction)
 
 proc right_justify*(a: var TGtkMenuItem): guint =
@@ -12623,7 +12623,7 @@ proc right_justify*(a: var TGtkMenuItem): guint =
 
 proc set_right_justify*(a: var TGtkMenuItem, `right_justify`: guint) =
   a.GtkMenuItemflag0 = a.GtkMenuItemflag0 or
-      ((`right_justify` shl bp_TGtkMenuItem_right_justify) and
+      (int16(`right_justify` shl bp_TGtkMenuItem_right_justify) and
       bm_TGtkMenuItem_right_justify)
 
 proc timer_from_keypress*(a: var TGtkMenuItem): guint =
@@ -12632,7 +12632,7 @@ proc timer_from_keypress*(a: var TGtkMenuItem): guint =
 
 proc set_timer_from_keypress*(a: var TGtkMenuItem, `timer_from_keypress`: guint) =
   a.GtkMenuItemflag0 = a.GtkMenuItemflag0 or
-      ((`timer_from_keypress` shl bp_TGtkMenuItem_timer_from_keypress) and
+      (int16(`timer_from_keypress` shl bp_TGtkMenuItem_timer_from_keypress) and
       bm_TGtkMenuItem_timer_from_keypress)
 
 proc hide_on_activate*(a: var TGtkMenuItemClass): guint =
@@ -12641,7 +12641,7 @@ proc hide_on_activate*(a: var TGtkMenuItemClass): guint =
 
 proc set_hide_on_activate*(a: var TGtkMenuItemClass, `hide_on_activate`: guint) =
   a.GtkMenuItemClassflag0 = a.GtkMenuItemClassflag0 or
-      ((`hide_on_activate` shl bp_TGtkMenuItemClass_hide_on_activate) and
+      (int16(`hide_on_activate` shl bp_TGtkMenuItemClass_hide_on_activate) and
       bm_TGtkMenuItemClass_hide_on_activate)
 
 proc gtk_menu_item_right_justify*(menu_item: PGtkMenuItem) =
@@ -12672,7 +12672,7 @@ proc active*(a: var TGtkToggleButton): guint =
 
 proc set_active*(a: var TGtkToggleButton, `active`: guint) =
   a.GtkToggleButtonflag0 = a.GtkToggleButtonflag0 or
-      ((`active` shl bp_TGtkToggleButton_active) and
+      (int16(`active` shl bp_TGtkToggleButton_active) and
       bm_TGtkToggleButton_active)
 
 proc draw_indicator*(a: var TGtkToggleButton): guint =
@@ -12681,7 +12681,7 @@ proc draw_indicator*(a: var TGtkToggleButton): guint =
 
 proc set_draw_indicator*(a: var TGtkToggleButton, `draw_indicator`: guint) =
   a.GtkToggleButtonflag0 = a.GtkToggleButtonflag0 or
-      ((`draw_indicator` shl bp_TGtkToggleButton_draw_indicator) and
+      (int16(`draw_indicator` shl bp_TGtkToggleButton_draw_indicator) and
       bm_TGtkToggleButton_draw_indicator)
 
 proc inconsistent*(a: var TGtkToggleButton): guint =
@@ -12690,7 +12690,7 @@ proc inconsistent*(a: var TGtkToggleButton): guint =
 
 proc set_inconsistent*(a: var TGtkToggleButton, `inconsistent`: guint) =
   a.GtkToggleButtonflag0 = a.GtkToggleButtonflag0 or
-      ((`inconsistent` shl bp_TGtkToggleButton_inconsistent) and
+      (int16(`inconsistent` shl bp_TGtkToggleButton_inconsistent) and
       bm_TGtkToggleButton_inconsistent)
 
 proc GTK_TYPE_CHECK_BUTTON*(): GType =
@@ -12738,7 +12738,7 @@ proc active*(a: var TGtkCheckMenuItem): guint =
 
 proc set_active*(a: var TGtkCheckMenuItem, `active`: guint) =
   a.GtkCheckMenuItemflag0 = a.GtkCheckMenuItemflag0 or
-      ((`active` shl bp_TGtkCheckMenuItem_active) and
+      (int16(`active` shl bp_TGtkCheckMenuItem_active) and
       bm_TGtkCheckMenuItem_active)
 
 proc always_show_toggle*(a: var TGtkCheckMenuItem): guint =
@@ -12748,7 +12748,7 @@ proc always_show_toggle*(a: var TGtkCheckMenuItem): guint =
 proc set_always_show_toggle*(a: var TGtkCheckMenuItem,
                              `always_show_toggle`: guint) =
   a.GtkCheckMenuItemflag0 = a.GtkCheckMenuItemflag0 or
-      ((`always_show_toggle` shl bp_TGtkCheckMenuItem_always_show_toggle) and
+      (int16(`always_show_toggle` shl bp_TGtkCheckMenuItem_always_show_toggle) and
       bm_TGtkCheckMenuItem_always_show_toggle)
 
 proc inconsistent*(a: var TGtkCheckMenuItem): guint =
@@ -12757,7 +12757,7 @@ proc inconsistent*(a: var TGtkCheckMenuItem): guint =
 
 proc set_inconsistent*(a: var TGtkCheckMenuItem, `inconsistent`: guint) =
   a.GtkCheckMenuItemflag0 = a.GtkCheckMenuItemflag0 or
-      ((`inconsistent` shl bp_TGtkCheckMenuItem_inconsistent) and
+      (int16(`inconsistent` shl bp_TGtkCheckMenuItem_inconsistent) and
       bm_TGtkCheckMenuItem_inconsistent)
 
 proc GTK_TYPE_CLIST*(): GType =
@@ -12779,43 +12779,43 @@ proc GTK_CLIST_GET_CLASS*(obj: pointer): PGtkCListClass =
   result = cast[PGtkCListClass](GTK_CHECK_GET_CLASS(obj, GTK_TYPE_CLIST()))
 
 proc GTK_CLIST_FLAGS*(clist: pointer): guint16 =
-  result = GTK_CLIST(clist).flags
+  result = toU16(GTK_CLIST(clist).flags)
 
 proc GTK_CLIST_SET_FLAG*(clist: PGtkCList, flag: guint16) =
-  clist . flags = GTK_CLIST(clist) . flags or int(flag)
+  clist.flags = GTK_CLIST(clist).flags or (flag)
 
 proc GTK_CLIST_UNSET_FLAG*(clist: PGtkCList, flag: guint16) =
-  clist . flags = GTK_CLIST(clist) . flags and not int(flag)
+  clist.flags = GTK_CLIST(clist).flags and not (flag)
 
 proc GTK_CLIST_IN_DRAG_get*(clist: pointer): bool =
-  result = ((GTK_CLIST_FLAGS(clist)) and GTK_CLIST_IN_DRAG) != 0
+  result = ((GTK_CLIST_FLAGS(clist)) and cint(GTK_CLIST_IN_DRAG)) != 0'i32
 
 proc GTK_CLIST_ROW_HEIGHT_SET_get*(clist: pointer): bool =
-  result = ((GTK_CLIST_FLAGS(clist)) and GTK_CLIST_ROW_HEIGHT_SET) != 0
+  result = ((GTK_CLIST_FLAGS(clist)) and cint(GTK_CLIST_ROW_HEIGHT_SET)) != 0'i32
 
 proc GTK_CLIST_SHOW_TITLES_get*(clist: pointer): bool =
-  result = ((GTK_CLIST_FLAGS(clist)) and GTK_CLIST_SHOW_TITLES) != 0
+  result = ((GTK_CLIST_FLAGS(clist)) and cint(GTK_CLIST_SHOW_TITLES)) != 0'i32
 
 proc GTK_CLIST_ADD_MODE_get*(clist: pointer): bool =
-  result = ((GTK_CLIST_FLAGS(clist)) and GTK_CLIST_ADD_MODE) != 0
+  result = ((GTK_CLIST_FLAGS(clist)) and cint(GTK_CLIST_ADD_MODE)) != 0'i32
 
 proc GTK_CLIST_AUTO_SORT_get*(clist: pointer): bool =
-  result = ((GTK_CLIST_FLAGS(clist)) and GTK_CLIST_AUTO_SORT) != 0
+  result = ((GTK_CLIST_FLAGS(clist)) and cint(GTK_CLIST_AUTO_SORT)) != 0'i32
 
 proc GTK_CLIST_AUTO_RESIZE_BLOCKED_get*(clist: pointer): bool =
-  result = ((GTK_CLIST_FLAGS(clist)) and GTK_CLIST_AUTO_RESIZE_BLOCKED) != 0
+  result = ((GTK_CLIST_FLAGS(clist)) and cint(GTK_CLIST_AUTO_RESIZE_BLOCKED)) != 0'i32
 
 proc GTK_CLIST_REORDERABLE_get*(clist: pointer): bool =
-  result = ((GTK_CLIST_FLAGS(clist)) and GTK_CLIST_REORDERABLE) != 0
+  result = ((GTK_CLIST_FLAGS(clist)) and cint(GTK_CLIST_REORDERABLE)) != 0'i32
 
 proc GTK_CLIST_USE_DRAG_ICONS_get*(clist: pointer): bool =
-  result = ((GTK_CLIST_FLAGS(clist)) and GTK_CLIST_USE_DRAG_ICONS) != 0
+  result = ((GTK_CLIST_FLAGS(clist)) and cint(GTK_CLIST_USE_DRAG_ICONS)) != 0'i32
 
 proc GTK_CLIST_DRAW_DRAG_LINE_get*(clist: pointer): bool =
-  result = ((GTK_CLIST_FLAGS(clist)) and GTK_CLIST_DRAW_DRAG_LINE) != 0
+  result = ((GTK_CLIST_FLAGS(clist)) and cint(GTK_CLIST_DRAW_DRAG_LINE)) != 0'i32
 
 proc GTK_CLIST_DRAW_DRAG_RECT_get*(clist: pointer): bool =
-  result = ((GTK_CLIST_FLAGS(clist)) and GTK_CLIST_DRAW_DRAG_RECT) != 0
+  result = ((GTK_CLIST_FLAGS(clist)) and cint(GTK_CLIST_DRAW_DRAG_RECT)) != 0'i32
 
 proc GTK_CLIST_ROW_get*(`glist_`: PGList): PGtkCListRow =
   result = cast[PGtkCListRow](`glist_` . data)
@@ -12839,7 +12839,7 @@ proc visible*(a: var TGtkCListColumn): guint =
 
 proc set_visible*(a: var TGtkCListColumn, `visible`: guint) =
   a.flag0 = a.flag0 or
-      ((`visible` shl bp_TGtkCListColumn_visible) and
+      (int16(`visible` shl bp_TGtkCListColumn_visible) and
       bm_TGtkCListColumn_visible)
 
 proc width_set*(a: var TGtkCListColumn): guint =
@@ -12848,7 +12848,7 @@ proc width_set*(a: var TGtkCListColumn): guint =
 
 proc set_width_set*(a: var TGtkCListColumn, `width_set`: guint) =
   a.flag0 = a.flag0 or
-      ((`width_set` shl bp_TGtkCListColumn_width_set) and
+      (int16(`width_set` shl bp_TGtkCListColumn_width_set) and
       bm_TGtkCListColumn_width_set)
 
 proc resizeable*(a: var TGtkCListColumn): guint =
@@ -12857,7 +12857,7 @@ proc resizeable*(a: var TGtkCListColumn): guint =
 
 proc set_resizeable*(a: var TGtkCListColumn, `resizeable`: guint) =
   a.flag0 = a.flag0 or
-      ((`resizeable` shl bp_TGtkCListColumn_resizeable) and
+      (int16(`resizeable` shl bp_TGtkCListColumn_resizeable) and
       bm_TGtkCListColumn_resizeable)
 
 proc auto_resize*(a: var TGtkCListColumn): guint =
@@ -12866,7 +12866,7 @@ proc auto_resize*(a: var TGtkCListColumn): guint =
 
 proc set_auto_resize*(a: var TGtkCListColumn, `auto_resize`: guint) =
   a.flag0 = a.flag0 or
-      ((`auto_resize` shl bp_TGtkCListColumn_auto_resize) and
+      (int16(`auto_resize` shl bp_TGtkCListColumn_auto_resize) and
       bm_TGtkCListColumn_auto_resize)
 
 proc button_passive*(a: var TGtkCListColumn): guint =
@@ -12875,7 +12875,7 @@ proc button_passive*(a: var TGtkCListColumn): guint =
 
 proc set_button_passive*(a: var TGtkCListColumn, `button_passive`: guint) =
   a.flag0 = a.flag0 or
-      ((`button_passive` shl bp_TGtkCListColumn_button_passive) and
+      (int16(`button_passive` shl bp_TGtkCListColumn_button_passive) and
       bm_TGtkCListColumn_button_passive)
 
 proc fg_set*(a: var TGtkCListRow): guint =
@@ -12883,14 +12883,14 @@ proc fg_set*(a: var TGtkCListRow): guint =
 
 proc set_fg_set*(a: var TGtkCListRow, `fg_set`: guint) =
   a.flag0 = a.flag0 or
-      ((`fg_set` shl bp_TGtkCListRow_fg_set) and bm_TGtkCListRow_fg_set)
+      (int16(`fg_set` shl bp_TGtkCListRow_fg_set) and bm_TGtkCListRow_fg_set)
 
 proc bg_set*(a: var TGtkCListRow): guint =
   result = (a.flag0 and bm_TGtkCListRow_bg_set) shr bp_TGtkCListRow_bg_set
 
 proc set_bg_set*(a: var TGtkCListRow, `bg_set`: guint) =
   a.flag0 = a.flag0 or
-      ((`bg_set` shl bp_TGtkCListRow_bg_set) and bm_TGtkCListRow_bg_set)
+      (int16(`bg_set` shl bp_TGtkCListRow_bg_set) and bm_TGtkCListRow_bg_set)
 
 proc selectable*(a: var TGtkCListRow): guint =
   result = (a.flag0 and bm_TGtkCListRow_selectable) shr
@@ -12898,7 +12898,7 @@ proc selectable*(a: var TGtkCListRow): guint =
 
 proc set_selectable*(a: var TGtkCListRow, `selectable`: guint) =
   a.flag0 = a.flag0 or
-      ((`selectable` shl bp_TGtkCListRow_selectable) and
+      (int16(`selectable` shl bp_TGtkCListRow_selectable) and
       bm_TGtkCListRow_selectable)
 
 proc GTK_TYPE_DIALOG*(): GType =
@@ -13020,7 +13020,7 @@ proc value_in_list*(a: var TGtkCombo): guint =
 
 proc set_value_in_list*(a: var TGtkCombo, `value_in_list`: guint) =
   a.GtkComboflag0 = a.GtkComboflag0 or
-      ((`value_in_list` shl bp_TGtkCombo_value_in_list) and
+      (int16(`value_in_list` shl bp_TGtkCombo_value_in_list) and
       bm_TGtkCombo_value_in_list)
 
 proc ok_if_empty*(a: var TGtkCombo): guint =
@@ -13029,7 +13029,7 @@ proc ok_if_empty*(a: var TGtkCombo): guint =
 
 proc set_ok_if_empty*(a: var TGtkCombo, `ok_if_empty`: guint) =
   a.GtkComboflag0 = a.GtkComboflag0 or
-      ((`ok_if_empty` shl bp_TGtkCombo_ok_if_empty) and
+      (int16(`ok_if_empty` shl bp_TGtkCombo_ok_if_empty) and
       bm_TGtkCombo_ok_if_empty)
 
 proc case_sensitive*(a: var TGtkCombo): guint =
@@ -13038,7 +13038,7 @@ proc case_sensitive*(a: var TGtkCombo): guint =
 
 proc set_case_sensitive*(a: var TGtkCombo, `case_sensitive`: guint) =
   a.GtkComboflag0 = a.GtkComboflag0 or
-      ((`case_sensitive` shl bp_TGtkCombo_case_sensitive) and
+      (int16(`case_sensitive` shl bp_TGtkCombo_case_sensitive) and
       bm_TGtkCombo_case_sensitive)
 
 proc use_arrows*(a: var TGtkCombo): guint =
@@ -13046,7 +13046,7 @@ proc use_arrows*(a: var TGtkCombo): guint =
 
 proc set_use_arrows*(a: var TGtkCombo, `use_arrows`: guint) =
   a.GtkComboflag0 = a.GtkComboflag0 or
-      ((`use_arrows` shl bp_TGtkCombo_use_arrows) and bm_TGtkCombo_use_arrows)
+      (int16(`use_arrows` shl bp_TGtkCombo_use_arrows) and bm_TGtkCombo_use_arrows)
 
 proc use_arrows_always*(a: var TGtkCombo): guint =
   result = (a.GtkComboflag0 and bm_TGtkCombo_use_arrows_always) shr
@@ -13054,7 +13054,7 @@ proc use_arrows_always*(a: var TGtkCombo): guint =
 
 proc set_use_arrows_always*(a: var TGtkCombo, `use_arrows_always`: guint) =
   a.GtkComboflag0 = a.GtkComboflag0 or
-      ((`use_arrows_always` shl bp_TGtkCombo_use_arrows_always) and
+      (int16(`use_arrows_always` shl bp_TGtkCombo_use_arrows_always) and
       bm_TGtkCombo_use_arrows_always)
 
 proc GTK_TYPE_CTREE*(): GType =
@@ -13098,7 +13098,7 @@ proc line_style*(a: var TGtkCTree): guint =
 
 proc set_line_style*(a: var TGtkCTree, `line_style`: guint) =
   a.GtkCTreeflag0 = a.GtkCTreeflag0 or
-      ((`line_style` shl bp_TGtkCTree_line_style) and bm_TGtkCTree_line_style)
+      (int16(`line_style` shl bp_TGtkCTree_line_style) and bm_TGtkCTree_line_style)
 
 proc expander_style*(a: var TGtkCTree): guint =
   result = (a.GtkCTreeflag0 and bm_TGtkCTree_expander_style) shr
@@ -13106,7 +13106,7 @@ proc expander_style*(a: var TGtkCTree): guint =
 
 proc set_expander_style*(a: var TGtkCTree, `expander_style`: guint) =
   a.GtkCTreeflag0 = a.GtkCTreeflag0 or
-      ((`expander_style` shl bp_TGtkCTree_expander_style) and
+      (int16(`expander_style` shl bp_TGtkCTree_expander_style) and
       bm_TGtkCTree_expander_style)
 
 proc show_stub*(a: var TGtkCTree): guint =
@@ -13114,14 +13114,14 @@ proc show_stub*(a: var TGtkCTree): guint =
 
 proc set_show_stub*(a: var TGtkCTree, `show_stub`: guint) =
   a.GtkCTreeflag0 = a.GtkCTreeflag0 or
-      ((`show_stub` shl bp_TGtkCTree_show_stub) and bm_TGtkCTree_show_stub)
+      (int16(`show_stub` shl bp_TGtkCTree_show_stub) and bm_TGtkCTree_show_stub)
 
 proc is_leaf*(a: var TGtkCTreeRow): guint =
   result = (a.GtkCTreeRow_flag0 and bm_TGtkCTreeRow_is_leaf) shr bp_TGtkCTreeRow_is_leaf
 
 proc set_is_leaf*(a: var TGtkCTreeRow, `is_leaf`: guint) =
   a.GtkCTreeRow_flag0 = a.GtkCTreeRow_flag0 or
-      ((`is_leaf` shl bp_TGtkCTreeRow_is_leaf) and bm_TGtkCTreeRow_is_leaf)
+      (int16(`is_leaf` shl bp_TGtkCTreeRow_is_leaf) and bm_TGtkCTreeRow_is_leaf)
 
 proc expanded*(a: var TGtkCTreeRow): guint =
   result = (a.GtkCTreeRow_flag0 and bm_TGtkCTreeRow_expanded) shr
@@ -13129,7 +13129,7 @@ proc expanded*(a: var TGtkCTreeRow): guint =
 
 proc set_expanded*(a: var TGtkCTreeRow, `expanded`: guint) =
   a.GtkCTreeRow_flag0 = a.GtkCTreeRowflag0 or
-      ((`expanded` shl bp_TGtkCTreeRow_expanded) and bm_TGtkCTreeRow_expanded)
+      (int16(`expanded` shl bp_TGtkCTreeRow_expanded) and bm_TGtkCTreeRow_expanded)
 
 proc gtk_ctree_set_reorderable*(t: pointer, r: bool) =
   gtk_clist_set_reorderable(cast[PGtkCList](t), r)
@@ -13231,7 +13231,7 @@ proc active*(a: var TGtkMenuShell): guint =
 
 proc set_active*(a: var TGtkMenuShell, `active`: guint) =
   a.GtkMenuShellflag0 = a.GtkMenuShellflag0 or
-      ((`active` shl bp_TGtkMenuShell_active) and bm_TGtkMenuShell_active)
+      (int16(`active` shl bp_TGtkMenuShell_active) and bm_TGtkMenuShell_active)
 
 proc have_grab*(a: var TGtkMenuShell): guint =
   result = (a.GtkMenuShellflag0 and bm_TGtkMenuShell_have_grab) shr
@@ -13239,7 +13239,7 @@ proc have_grab*(a: var TGtkMenuShell): guint =
 
 proc set_have_grab*(a: var TGtkMenuShell, `have_grab`: guint) =
   a.GtkMenuShellflag0 = a.GtkMenuShellflag0 or
-      ((`have_grab` shl bp_TGtkMenuShell_have_grab) and
+      (int16(`have_grab` shl bp_TGtkMenuShell_have_grab) and
       bm_TGtkMenuShell_have_grab)
 
 proc have_xgrab*(a: var TGtkMenuShell): guint =
@@ -13248,7 +13248,7 @@ proc have_xgrab*(a: var TGtkMenuShell): guint =
 
 proc set_have_xgrab*(a: var TGtkMenuShell, `have_xgrab`: guint) =
   a.GtkMenuShellflag0 = a.GtkMenuShellflag0 or
-      ((`have_xgrab` shl bp_TGtkMenuShell_have_xgrab) and
+      (int16(`have_xgrab` shl bp_TGtkMenuShell_have_xgrab) and
       bm_TGtkMenuShell_have_xgrab)
 
 proc ignore_leave*(a: var TGtkMenuShell): guint =
@@ -13257,7 +13257,7 @@ proc ignore_leave*(a: var TGtkMenuShell): guint =
 
 proc set_ignore_leave*(a: var TGtkMenuShell, `ignore_leave`: guint) =
   a.GtkMenuShellflag0 = a.GtkMenuShellflag0 or
-      ((`ignore_leave` shl bp_TGtkMenuShell_ignore_leave) and
+      (int16(`ignore_leave` shl bp_TGtkMenuShell_ignore_leave) and
       bm_TGtkMenuShell_ignore_leave)
 
 proc menu_flag*(a: var TGtkMenuShell): guint =
@@ -13266,7 +13266,7 @@ proc menu_flag*(a: var TGtkMenuShell): guint =
 
 proc set_menu_flag*(a: var TGtkMenuShell, `menu_flag`: guint) =
   a.GtkMenuShellflag0 = a.GtkMenuShellflag0 or
-      ((`menu_flag` shl bp_TGtkMenuShell_menu_flag) and
+      (int16(`menu_flag` shl bp_TGtkMenuShell_menu_flag) and
       bm_TGtkMenuShell_menu_flag)
 
 proc ignore_enter*(a: var TGtkMenuShell): guint =
@@ -13275,7 +13275,7 @@ proc ignore_enter*(a: var TGtkMenuShell): guint =
 
 proc set_ignore_enter*(a: var TGtkMenuShell, `ignore_enter`: guint) =
   a.GtkMenuShellflag0 = a.GtkMenuShellflag0 or
-      ((`ignore_enter` shl bp_TGtkMenuShell_ignore_enter) and
+      (int16(`ignore_enter` shl bp_TGtkMenuShell_ignore_enter) and
       bm_TGtkMenuShell_ignore_enter)
 
 proc submenu_placement*(a: var TGtkMenuShellClass): guint =
@@ -13285,7 +13285,7 @@ proc submenu_placement*(a: var TGtkMenuShellClass): guint =
 proc set_submenu_placement*(a: var TGtkMenuShellClass,
                             `submenu_placement`: guint) =
   a.GtkMenuShellClassflag0 = a.GtkMenuShellClassflag0 or
-      ((`submenu_placement` shl bp_TGtkMenuShellClass_submenu_placement) and
+      (int16(`submenu_placement` shl bp_TGtkMenuShellClass_submenu_placement) and
       bm_TGtkMenuShellClass_submenu_placement)
 
 proc GTK_TYPE_MENU*(): GType =
@@ -13313,7 +13313,7 @@ proc needs_destruction_ref_count*(a: var TGtkMenu): guint =
 proc set_needs_destruction_ref_count*(a: var TGtkMenu,
                                       `needs_destruction_ref_count`: guint) =
   a.GtkMenuflag0 = a.GtkMenuflag0 or
-      ((`needs_destruction_ref_count` shl
+      (int16(`needs_destruction_ref_count` shl
       bp_TGtkMenu_needs_destruction_ref_count) and
       bm_TGtkMenu_needs_destruction_ref_count)
 
@@ -13322,7 +13322,7 @@ proc torn_off*(a: var TGtkMenu): guint =
 
 proc set_torn_off*(a: var TGtkMenu, `torn_off`: guint) =
   a.GtkMenuflag0 = a.GtkMenuflag0 or
-      ((`torn_off` shl bp_TGtkMenu_torn_off) and bm_TGtkMenu_torn_off)
+      (int16(`torn_off` shl bp_TGtkMenu_torn_off) and bm_TGtkMenu_torn_off)
 
 proc tearoff_active*(a: var TGtkMenu): guint =
   result = (a.GtkMenuflag0 and bm_TGtkMenu_tearoff_active) shr
@@ -13330,7 +13330,7 @@ proc tearoff_active*(a: var TGtkMenu): guint =
 
 proc set_tearoff_active*(a: var TGtkMenu, `tearoff_active`: guint) =
   a.GtkMenuflag0 = a.GtkMenuflag0 or
-      ((`tearoff_active` shl bp_TGtkMenu_tearoff_active) and
+      (int16(`tearoff_active` shl bp_TGtkMenu_tearoff_active) and
       bm_TGtkMenu_tearoff_active)
 
 proc scroll_fast*(a: var TGtkMenu): guint =
@@ -13338,7 +13338,7 @@ proc scroll_fast*(a: var TGtkMenu): guint =
 
 proc set_scroll_fast*(a: var TGtkMenu, `scroll_fast`: guint) =
   a.GtkMenuflag0 = a.GtkMenuflag0 or
-      ((`scroll_fast` shl bp_TGtkMenu_scroll_fast) and
+      (int16(`scroll_fast` shl bp_TGtkMenu_scroll_fast) and
       bm_TGtkMenu_scroll_fast)
 
 proc upper_arrow_visible*(a: var TGtkMenu): guint =
@@ -13347,7 +13347,7 @@ proc upper_arrow_visible*(a: var TGtkMenu): guint =
 
 proc set_upper_arrow_visible*(a: var TGtkMenu, `upper_arrow_visible`: guint) =
   a.GtkMenuflag0 = a.GtkMenuflag0 or
-      ((`upper_arrow_visible` shl bp_TGtkMenu_upper_arrow_visible) and
+      (int16(`upper_arrow_visible` shl bp_TGtkMenu_upper_arrow_visible) and
       bm_TGtkMenu_upper_arrow_visible)
 
 proc lower_arrow_visible*(a: var TGtkMenu): guint =
@@ -13356,7 +13356,7 @@ proc lower_arrow_visible*(a: var TGtkMenu): guint =
 
 proc set_lower_arrow_visible*(a: var TGtkMenu, `lower_arrow_visible`: guint) =
   a.GtkMenuflag0 = a.GtkMenuflag0 or
-      ((`lower_arrow_visible` shl bp_TGtkMenu_lower_arrow_visible) and
+      (int16(`lower_arrow_visible` shl bp_TGtkMenu_lower_arrow_visible) and
       bm_TGtkMenu_lower_arrow_visible)
 
 proc upper_arrow_prelight*(a: var TGtkMenu): guint =
@@ -13365,7 +13365,7 @@ proc upper_arrow_prelight*(a: var TGtkMenu): guint =
 
 proc set_upper_arrow_prelight*(a: var TGtkMenu, `upper_arrow_prelight`: guint) =
   a.GtkMenuflag0 = a.GtkMenuflag0 or
-      ((`upper_arrow_prelight` shl bp_TGtkMenu_upper_arrow_prelight) and
+      (int16(`upper_arrow_prelight` shl bp_TGtkMenu_upper_arrow_prelight) and
       bm_TGtkMenu_upper_arrow_prelight)
 
 proc lower_arrow_prelight*(a: var TGtkMenu): guint =
@@ -13374,7 +13374,7 @@ proc lower_arrow_prelight*(a: var TGtkMenu): guint =
 
 proc set_lower_arrow_prelight*(a: var TGtkMenu, `lower_arrow_prelight`: guint) =
   a.GtkMenuflag0 = a.GtkMenuflag0 or
-      ((`lower_arrow_prelight` shl bp_TGtkMenu_lower_arrow_prelight) and
+      (int16(`lower_arrow_prelight` shl bp_TGtkMenu_lower_arrow_prelight) and
       bm_TGtkMenu_lower_arrow_prelight)
 
 proc gtk_menu_append*(menu, child: PGtkWidget) =
@@ -13409,14 +13409,14 @@ proc editable*(a: var TGtkEntry): guint =
 
 proc set_editable*(a: var TGtkEntry, `editable`: guint) =
   a.GtkEntryflag0 = a.GtkEntryflag0 or
-      ((`editable` shl bp_TGtkEntry_editable) and bm_TGtkEntry_editable)
+      (int16(`editable` shl bp_TGtkEntry_editable) and bm_TGtkEntry_editable)
 
 proc visible*(a: var TGtkEntry): guint =
   result = (a.GtkEntryflag0 and bm_TGtkEntry_visible) shr bp_TGtkEntry_visible
 
 proc set_visible*(a: var TGtkEntry, `visible`: guint) =
   a.GtkEntryflag0 = a.GtkEntryflag0 or
-      ((`visible` shl bp_TGtkEntry_visible) and bm_TGtkEntry_visible)
+      (int16(`visible` shl bp_TGtkEntry_visible) and bm_TGtkEntry_visible)
 
 proc overwrite_mode*(a: var TGtkEntry): guint =
   result = (a.GtkEntryflag0 and bm_TGtkEntry_overwrite_mode) shr
@@ -13424,7 +13424,7 @@ proc overwrite_mode*(a: var TGtkEntry): guint =
 
 proc set_overwrite_mode*(a: var TGtkEntry, `overwrite_mode`: guint) =
   a.GtkEntryflag0 = a.GtkEntryflag0 or
-      ((`overwrite_mode` shl bp_TGtkEntry_overwrite_mode) and
+      (int16(`overwrite_mode` shl bp_TGtkEntry_overwrite_mode) and
       bm_TGtkEntry_overwrite_mode)
 
 proc in_drag*(a: var TGtkEntry): guint =
@@ -13432,7 +13432,7 @@ proc in_drag*(a: var TGtkEntry): guint =
 
 proc set_in_drag*(a: var TGtkEntry, `in_drag`: guint) =
   a.GtkEntryflag0 = a.GtkEntryflag0 or
-      ((`in_drag` shl bp_TGtkEntry_in_drag) and bm_TGtkEntry_in_drag)
+      (int16(`in_drag` shl bp_TGtkEntry_in_drag) and bm_TGtkEntry_in_drag)
 
 proc cache_includes_preedit*(a: var TGtkEntry): guint =
   result = (a.flag1 and bm_TGtkEntry_cache_includes_preedit) shr
@@ -13441,7 +13441,7 @@ proc cache_includes_preedit*(a: var TGtkEntry): guint =
 proc set_cache_includes_preedit*(a: var TGtkEntry,
                                  `cache_includes_preedit`: guint) =
   a.flag1 = a.flag1 or
-      ((`cache_includes_preedit` shl bp_TGtkEntry_cache_includes_preedit) and
+      (int16(`cache_includes_preedit` shl bp_TGtkEntry_cache_includes_preedit) and
       bm_TGtkEntry_cache_includes_preedit)
 
 proc need_im_reset*(a: var TGtkEntry): guint =
@@ -13450,7 +13450,7 @@ proc need_im_reset*(a: var TGtkEntry): guint =
 
 proc set_need_im_reset*(a: var TGtkEntry, `need_im_reset`: guint) =
   a.flag1 = a.flag1 or
-      ((`need_im_reset` shl bp_TGtkEntry_need_im_reset) and
+      (int16(`need_im_reset` shl bp_TGtkEntry_need_im_reset) and
       bm_TGtkEntry_need_im_reset)
 
 proc has_frame*(a: var TGtkEntry): guint =
@@ -13458,7 +13458,7 @@ proc has_frame*(a: var TGtkEntry): guint =
 
 proc set_has_frame*(a: var TGtkEntry, `has_frame`: guint) =
   a.flag1 = a.flag1 or
-      ((`has_frame` shl bp_TGtkEntry_has_frame) and bm_TGtkEntry_has_frame)
+      (int16(`has_frame` shl bp_TGtkEntry_has_frame) and bm_TGtkEntry_has_frame)
 
 proc activates_default*(a: var TGtkEntry): guint =
   result = (a.flag1 and bm_TGtkEntry_activates_default) shr
@@ -13466,7 +13466,7 @@ proc activates_default*(a: var TGtkEntry): guint =
 
 proc set_activates_default*(a: var TGtkEntry, `activates_default`: guint) =
   a.flag1 = a.flag1 or
-      ((`activates_default` shl bp_TGtkEntry_activates_default) and
+      (int16(`activates_default` shl bp_TGtkEntry_activates_default) and
       bm_TGtkEntry_activates_default)
 
 proc cursor_visible*(a: var TGtkEntry): guint =
@@ -13475,7 +13475,7 @@ proc cursor_visible*(a: var TGtkEntry): guint =
 
 proc set_cursor_visible*(a: var TGtkEntry, `cursor_visible`: guint) =
   a.flag1 = a.flag1 or
-      ((`cursor_visible` shl bp_TGtkEntry_cursor_visible) and
+      (int16(`cursor_visible` shl bp_TGtkEntry_cursor_visible) and
       bm_TGtkEntry_cursor_visible)
 
 proc in_click*(a: var TGtkEntry): guint =
@@ -13483,7 +13483,7 @@ proc in_click*(a: var TGtkEntry): guint =
 
 proc set_in_click*(a: var TGtkEntry, `in_click`: guint) =
   a.flag1 = a.flag1 or
-      ((`in_click` shl bp_TGtkEntry_in_click) and bm_TGtkEntry_in_click)
+      (int16(`in_click` shl bp_TGtkEntry_in_click) and bm_TGtkEntry_in_click)
 
 proc is_cell_renderer*(a: var TGtkEntry): guint =
   result = (a.flag1 and bm_TGtkEntry_is_cell_renderer) shr
@@ -13491,7 +13491,7 @@ proc is_cell_renderer*(a: var TGtkEntry): guint =
 
 proc set_is_cell_renderer*(a: var TGtkEntry, `is_cell_renderer`: guint) =
   a.flag1 = a.flag1 or
-      ((`is_cell_renderer` shl bp_TGtkEntry_is_cell_renderer) and
+      (int16(`is_cell_renderer` shl bp_TGtkEntry_is_cell_renderer) and
       bm_TGtkEntry_is_cell_renderer)
 
 proc editing_canceled*(a: var TGtkEntry): guint =
@@ -13500,7 +13500,7 @@ proc editing_canceled*(a: var TGtkEntry): guint =
 
 proc set_editing_canceled*(a: var TGtkEntry, `editing_canceled`: guint) =
   a.flag1 = a.flag1 or
-      ((`editing_canceled` shl bp_TGtkEntry_editing_canceled) and
+      (int16(`editing_canceled` shl bp_TGtkEntry_editing_canceled) and
       bm_TGtkEntry_editing_canceled)
 
 proc mouse_cursor_obscured*(a: var TGtkEntry): guint =
@@ -13509,7 +13509,7 @@ proc mouse_cursor_obscured*(a: var TGtkEntry): guint =
 
 proc set_mouse_cursor_obscured*(a: var TGtkEntry, `mouse_cursor_obscured`: guint) =
   a.flag1 = a.flag1 or
-      ((`mouse_cursor_obscured` shl bp_TGtkEntry_mouse_cursor_obscured) and
+      (int16(`mouse_cursor_obscured` shl bp_TGtkEntry_mouse_cursor_obscured) and
       bm_TGtkEntry_mouse_cursor_obscured)
 
 proc GTK_TYPE_EVENT_BOX*(): GType =
@@ -13651,7 +13651,7 @@ proc handle_position*(a: var TGtkHandleBox): guint =
 
 proc set_handle_position*(a: var TGtkHandleBox, `handle_position`: guint) =
   a.GtkHandleBoxflag0 = a.GtkHandleBoxflag0 or
-      ((`handle_position` shl bp_TGtkHandleBox_handle_position) and
+      (int16(`handle_position` shl bp_TGtkHandleBox_handle_position) and
       bm_TGtkHandleBox_handle_position)
 
 proc float_window_mapped*(a: var TGtkHandleBox): guint =
@@ -13660,7 +13660,7 @@ proc float_window_mapped*(a: var TGtkHandleBox): guint =
 
 proc set_float_window_mapped*(a: var TGtkHandleBox, `float_window_mapped`: guint) =
   a.GtkHandleBoxflag0 = a.GtkHandleBoxflag0 or
-      ((`float_window_mapped` shl bp_TGtkHandleBox_float_window_mapped) and
+      (int16(`float_window_mapped` shl bp_TGtkHandleBox_float_window_mapped) and
       bm_TGtkHandleBox_float_window_mapped)
 
 proc child_detached*(a: var TGtkHandleBox): guint =
@@ -13669,7 +13669,7 @@ proc child_detached*(a: var TGtkHandleBox): guint =
 
 proc set_child_detached*(a: var TGtkHandleBox, `child_detached`: guint) =
   a.GtkHandleBoxflag0 = a.GtkHandleBoxflag0 or
-      ((`child_detached` shl bp_TGtkHandleBox_child_detached) and
+      (int16(`child_detached` shl bp_TGtkHandleBox_child_detached) and
       bm_TGtkHandleBox_child_detached)
 
 proc in_drag*(a: var TGtkHandleBox): guint =
@@ -13678,7 +13678,7 @@ proc in_drag*(a: var TGtkHandleBox): guint =
 
 proc set_in_drag*(a: var TGtkHandleBox, `in_drag`: guint) =
   a.GtkHandleBoxflag0 = a.GtkHandleBoxflag0 or
-      ((`in_drag` shl bp_TGtkHandleBox_in_drag) and bm_TGtkHandleBox_in_drag)
+      (int16(`in_drag` shl bp_TGtkHandleBox_in_drag) and bm_TGtkHandleBox_in_drag)
 
 proc shrink_on_detach*(a: var TGtkHandleBox): guint =
   result = (a.GtkHandleBoxflag0 and bm_TGtkHandleBox_shrink_on_detach) shr
@@ -13686,7 +13686,7 @@ proc shrink_on_detach*(a: var TGtkHandleBox): guint =
 
 proc set_shrink_on_detach*(a: var TGtkHandleBox, `shrink_on_detach`: guint) =
   a.GtkHandleBoxflag0 = a.GtkHandleBoxflag0 or
-      ((`shrink_on_detach` shl bp_TGtkHandleBox_shrink_on_detach) and
+      (int16(`shrink_on_detach` shl bp_TGtkHandleBox_shrink_on_detach) and
       bm_TGtkHandleBox_shrink_on_detach)
 
 proc snap_edge*(a: var TGtkHandleBox): gint =
@@ -13695,7 +13695,7 @@ proc snap_edge*(a: var TGtkHandleBox): gint =
 
 proc set_snap_edge*(a: var TGtkHandleBox, `snap_edge`: gint) =
   a.GtkHandleBoxflag0 = a.GtkHandleBoxflag0 or
-      ((`snap_edge` shl bp_TGtkHandleBox_snap_edge) and
+      (int16(`snap_edge` shl bp_TGtkHandleBox_snap_edge) and
       bm_TGtkHandleBox_snap_edge)
 
 proc GTK_TYPE_PANED*(): GType =
@@ -13722,7 +13722,7 @@ proc position_set*(a: var TGtkPaned): guint =
 
 proc set_position_set*(a: var TGtkPaned, `position_set`: guint) =
   a.GtkPanedflag0 = a.GtkPanedflag0 or
-      ((`position_set` shl bp_TGtkPaned_position_set) and
+      (int16(`position_set` shl bp_TGtkPaned_position_set) and
       bm_TGtkPaned_position_set)
 
 proc in_drag*(a: var TGtkPaned): guint =
@@ -13730,7 +13730,7 @@ proc in_drag*(a: var TGtkPaned): guint =
 
 proc set_in_drag*(a: var TGtkPaned, `in_drag`: guint) =
   a.GtkPanedflag0 = a.GtkPanedflag0 or
-      ((`in_drag` shl bp_TGtkPaned_in_drag) and bm_TGtkPaned_in_drag)
+      (int16(`in_drag` shl bp_TGtkPaned_in_drag) and bm_TGtkPaned_in_drag)
 
 proc child1_shrink*(a: var TGtkPaned): guint =
   result = (a.GtkPanedflag0 and bm_TGtkPaned_child1_shrink) shr
@@ -13738,7 +13738,7 @@ proc child1_shrink*(a: var TGtkPaned): guint =
 
 proc set_child1_shrink*(a: var TGtkPaned, `child1_shrink`: guint) =
   a.GtkPanedflag0 = a.GtkPanedflag0 or
-      ((`child1_shrink` shl bp_TGtkPaned_child1_shrink) and
+      (int16(`child1_shrink` shl bp_TGtkPaned_child1_shrink) and
       bm_TGtkPaned_child1_shrink)
 
 proc child1_resize*(a: var TGtkPaned): guint =
@@ -13747,7 +13747,7 @@ proc child1_resize*(a: var TGtkPaned): guint =
 
 proc set_child1_resize*(a: var TGtkPaned, `child1_resize`: guint) =
   a.GtkPanedflag0 = a.GtkPanedflag0 or
-      ((`child1_resize` shl bp_TGtkPaned_child1_resize) and
+      (int16(`child1_resize` shl bp_TGtkPaned_child1_resize) and
       bm_TGtkPaned_child1_resize)
 
 proc child2_shrink*(a: var TGtkPaned): guint =
@@ -13756,7 +13756,7 @@ proc child2_shrink*(a: var TGtkPaned): guint =
 
 proc set_child2_shrink*(a: var TGtkPaned, `child2_shrink`: guint) =
   a.GtkPanedflag0 = a.GtkPanedflag0 or
-      ((`child2_shrink` shl bp_TGtkPaned_child2_shrink) and
+      (int16(`child2_shrink` shl bp_TGtkPaned_child2_shrink) and
       bm_TGtkPaned_child2_shrink)
 
 proc child2_resize*(a: var TGtkPaned): guint =
@@ -13765,7 +13765,7 @@ proc child2_resize*(a: var TGtkPaned): guint =
 
 proc set_child2_resize*(a: var TGtkPaned, `child2_resize`: guint) =
   a.GtkPanedflag0 = a.GtkPanedflag0 or
-      ((`child2_resize` shl bp_TGtkPaned_child2_resize) and
+      (int16(`child2_resize` shl bp_TGtkPaned_child2_resize) and
       bm_TGtkPaned_child2_resize)
 
 proc orientation*(a: var TGtkPaned): guint =
@@ -13774,7 +13774,7 @@ proc orientation*(a: var TGtkPaned): guint =
 
 proc set_orientation*(a: var TGtkPaned, `orientation`: guint) =
   a.GtkPanedflag0 = a.GtkPanedflag0 or
-      ((`orientation` shl bp_TGtkPaned_orientation) and
+      (int16(`orientation` shl bp_TGtkPaned_orientation) and
       bm_TGtkPaned_orientation)
 
 proc in_recursion*(a: var TGtkPaned): guint =
@@ -13783,7 +13783,7 @@ proc in_recursion*(a: var TGtkPaned): guint =
 
 proc set_in_recursion*(a: var TGtkPaned, `in_recursion`: guint) =
   a.GtkPanedflag0 = a.GtkPanedflag0 or
-      ((`in_recursion` shl bp_TGtkPaned_in_recursion) and
+      (int16(`in_recursion` shl bp_TGtkPaned_in_recursion) and
       bm_TGtkPaned_in_recursion)
 
 proc handle_prelit*(a: var TGtkPaned): guint =
@@ -13792,14 +13792,14 @@ proc handle_prelit*(a: var TGtkPaned): guint =
 
 proc set_handle_prelit*(a: var TGtkPaned, `handle_prelit`: guint) =
   a.GtkPanedflag0 = a.GtkPanedflag0 or
-      ((`handle_prelit` shl bp_TGtkPaned_handle_prelit) and
+      (int16(`handle_prelit` shl bp_TGtkPaned_handle_prelit) and
       bm_TGtkPaned_handle_prelit)
 
 proc gtk_paned_gutter_size*(p: pointer, s: gint) =
-  if (p != nil) and (s != 0): nil
+  if (p != nil) and (s != 0'i32): nil
 
 proc gtk_paned_set_gutter_size*(p: pointer, s: gint) =
-  if (p != nil) and (s != 0): nil
+  if (p != nil) and (s != 0'i32): nil
 
 proc GTK_TYPE_HBUTTON_BOX*(): GType =
   result = gtk_hbutton_box_get_type()
@@ -13915,7 +13915,7 @@ proc engine_specified*(a: var TGtkRcStyle): guint =
 
 proc set_engine_specified*(a: var TGtkRcStyle, `engine_specified`: guint) =
   a.GtkRcStyleflag0 = a.GtkRcStyleflag0 or
-      ((`engine_specified` shl bp_TGtkRcStyle_engine_specified) and
+      (int16(`engine_specified` shl bp_TGtkRcStyle_engine_specified) and
       bm_TGtkRcStyle_engine_specified)
 
 proc GTK_TYPE_STYLE*(): GType =
@@ -13940,7 +13940,7 @@ proc GTK_TYPE_BORDER*(): GType =
   result = gtk_border_get_type()
 
 proc GTK_STYLE_ATTACHED*(style: pointer): bool =
-  result = ((GTK_STYLE(style)).attach_count) > 0
+  result = ((GTK_STYLE(style)).attach_count) > 0'i32
 
 proc gtk_style_apply_default_pixmap*(style: PGtkStyle, window: PGdkWindow,
                                      state_type: TGtkStateType,
@@ -13972,14 +13972,14 @@ proc inverted*(a: var TGtkRange): guint =
 
 proc set_inverted*(a: var TGtkRange, `inverted`: guint) =
   a.GtkRangeflag0 = a.GtkRangeflag0 or
-      ((`inverted` shl bp_TGtkRange_inverted) and bm_TGtkRange_inverted)
+      (int16(`inverted` shl bp_TGtkRange_inverted) and bm_TGtkRange_inverted)
 
 proc flippable*(a: var TGtkRange): guint =
   result = (a.GtkRangeflag0 and bm_TGtkRange_flippable) shr bp_TGtkRange_flippable
 
 proc set_flippable*(a: var TGtkRange, `flippable`: guint) =
   a.GtkRangeflag0 = a.GtkRangeflag0 or
-      ((`flippable` shl bp_TGtkRange_flippable) and bm_TGtkRange_flippable)
+      (int16(`flippable` shl bp_TGtkRange_flippable) and bm_TGtkRange_flippable)
 
 proc has_stepper_a*(a: var TGtkRange): guint =
   result = (a.GtkRangeflag0 and bm_TGtkRange_has_stepper_a) shr
@@ -13987,7 +13987,7 @@ proc has_stepper_a*(a: var TGtkRange): guint =
 
 proc set_has_stepper_a*(a: var TGtkRange, `has_stepper_a`: guint) =
   a.GtkRangeflag0 = a.GtkRangeflag0 or
-      ((`has_stepper_a` shl bp_TGtkRange_has_stepper_a) and
+      (int16(`has_stepper_a` shl bp_TGtkRange_has_stepper_a) and
       bm_TGtkRange_has_stepper_a)
 
 proc has_stepper_b*(a: var TGtkRange): guint =
@@ -13996,7 +13996,7 @@ proc has_stepper_b*(a: var TGtkRange): guint =
 
 proc set_has_stepper_b*(a: var TGtkRange, `has_stepper_b`: guint) =
   a.GtkRangeflag0 = a.GtkRangeflag0 or
-      ((`has_stepper_b` shl bp_TGtkRange_has_stepper_b) and
+      (int16(`has_stepper_b` shl bp_TGtkRange_has_stepper_b) and
       bm_TGtkRange_has_stepper_b)
 
 proc has_stepper_c*(a: var TGtkRange): guint =
@@ -14005,7 +14005,7 @@ proc has_stepper_c*(a: var TGtkRange): guint =
 
 proc set_has_stepper_c*(a: var TGtkRange, `has_stepper_c`: guint) =
   a.GtkRangeflag0 = a.GtkRangeflag0 or
-      ((`has_stepper_c` shl bp_TGtkRange_has_stepper_c) and
+      (int16(`has_stepper_c` shl bp_TGtkRange_has_stepper_c) and
       bm_TGtkRange_has_stepper_c)
 
 proc has_stepper_d*(a: var TGtkRange): guint =
@@ -14014,7 +14014,7 @@ proc has_stepper_d*(a: var TGtkRange): guint =
 
 proc set_has_stepper_d*(a: var TGtkRange, `has_stepper_d`: guint) =
   a.GtkRangeflag0 = a.GtkRangeflag0 or
-      ((`has_stepper_d` shl bp_TGtkRange_has_stepper_d) and
+      (int16(`has_stepper_d` shl bp_TGtkRange_has_stepper_d) and
       bm_TGtkRange_has_stepper_d)
 
 proc need_recalc*(a: var TGtkRange): guint =
@@ -14023,7 +14023,7 @@ proc need_recalc*(a: var TGtkRange): guint =
 
 proc set_need_recalc*(a: var TGtkRange, `need_recalc`: guint) =
   a.GtkRangeflag0 = a.GtkRangeflag0 or
-      ((`need_recalc` shl bp_TGtkRange_need_recalc) and
+      (int16(`need_recalc` shl bp_TGtkRange_need_recalc) and
       bm_TGtkRange_need_recalc)
 
 proc slider_size_fixed*(a: var TGtkRange): guint =
@@ -14032,7 +14032,7 @@ proc slider_size_fixed*(a: var TGtkRange): guint =
 
 proc set_slider_size_fixed*(a: var TGtkRange, `slider_size_fixed`: guint) =
   a.GtkRangeflag0 = a.GtkRangeflag0 or
-      ((`slider_size_fixed` shl bp_TGtkRange_slider_size_fixed) and
+      (int16(`slider_size_fixed` shl bp_TGtkRange_slider_size_fixed) and
       bm_TGtkRange_slider_size_fixed)
 
 proc trough_click_forward*(a: var TGtkRange): guint =
@@ -14041,7 +14041,7 @@ proc trough_click_forward*(a: var TGtkRange): guint =
 
 proc set_trough_click_forward*(a: var TGtkRange, `trough_click_forward`: guint) =
   a.flag1 = a.flag1 or
-      ((`trough_click_forward` shl bp_TGtkRange_trough_click_forward) and
+      (int16(`trough_click_forward` shl bp_TGtkRange_trough_click_forward) and
       bm_TGtkRange_trough_click_forward)
 
 proc update_pending*(a: var TGtkRange): guint =
@@ -14050,7 +14050,7 @@ proc update_pending*(a: var TGtkRange): guint =
 
 proc set_update_pending*(a: var TGtkRange, `update_pending`: guint) =
   a.flag1 = a.flag1 or
-      ((`update_pending` shl bp_TGtkRange_update_pending) and
+      (int16(`update_pending` shl bp_TGtkRange_update_pending) and
       bm_TGtkRange_update_pending)
 
 proc GTK_TYPE_SCALE*(): GType =
@@ -14076,14 +14076,14 @@ proc draw_value*(a: var TGtkScale): guint =
 
 proc set_draw_value*(a: var TGtkScale, `draw_value`: guint) =
   a.GtkScaleflag0 = a.GtkScaleflag0 or
-      ((`draw_value` shl bp_TGtkScale_draw_value) and bm_TGtkScale_draw_value)
+      (int16(`draw_value` shl bp_TGtkScale_draw_value) and bm_TGtkScale_draw_value)
 
 proc value_pos*(a: var TGtkScale): guint =
   result = (a.GtkScaleflag0 and bm_TGtkScale_value_pos) shr bp_TGtkScale_value_pos
 
 proc set_value_pos*(a: var TGtkScale, `value_pos`: guint) =
   a.GtkScaleflag0 = a.GtkScaleflag0 or
-      ((`value_pos` shl bp_TGtkScale_value_pos) and bm_TGtkScale_value_pos)
+      (int16(`value_pos` shl bp_TGtkScale_value_pos) and bm_TGtkScale_value_pos)
 
 proc GTK_TYPE_HSCALE*(): GType =
   result = gtk_hscale_get_type()
@@ -14265,7 +14265,7 @@ proc in_hex_sequence*(a: var TGtkIMContextSimple): guint =
 
 proc set_in_hex_sequence*(a: var TGtkIMContextSimple, `in_hex_sequence`: guint) =
   a.GtkIMContextSimpleflag0 = a.GtkIMContextSimpleflag0 or
-      ((`in_hex_sequence` shl bp_TGtkIMContextSimple_in_hex_sequence) and
+      (int16(`in_hex_sequence` shl bp_TGtkIMContextSimple_in_hex_sequence) and
       bm_TGtkIMContextSimple_in_hex_sequence)
 
 proc GTK_TYPE_IM_MULTICONTEXT*(): GType =
@@ -14386,7 +14386,7 @@ proc selection_mode*(a: var TGtkList): guint =
 
 proc set_selection_mode*(a: var TGtkList, `selection_mode`: guint) =
   a.GtkListflag0 = a.GtkListflag0 or
-      ((`selection_mode` shl bp_TGtkList_selection_mode) and
+      (int16(`selection_mode` shl bp_TGtkList_selection_mode) and
       bm_TGtkList_selection_mode)
 
 proc drag_selection*(a: var TGtkList): guint =
@@ -14395,7 +14395,7 @@ proc drag_selection*(a: var TGtkList): guint =
 
 proc set_drag_selection*(a: var TGtkList, `drag_selection`: guint) =
   a.GtkListflag0 = a.GtkListflag0 or
-      ((`drag_selection` shl bp_TGtkList_drag_selection) and
+      (int16(`drag_selection` shl bp_TGtkList_drag_selection) and
       bm_TGtkList_drag_selection)
 
 proc add_mode*(a: var TGtkList): guint =
@@ -14403,7 +14403,7 @@ proc add_mode*(a: var TGtkList): guint =
 
 proc set_add_mode*(a: var TGtkList, `add_mode`: guint) =
   a.GtkListflag0 = a.GtkListflag0 or
-      ((`add_mode` shl bp_TGtkList_add_mode) and bm_TGtkList_add_mode)
+      (int16(`add_mode` shl bp_TGtkList_add_mode) and bm_TGtkList_add_mode)
 
 proc gtk_list_item_get_type(): GType {.importc, cdecl, dynlib: gtklib.}
 
@@ -14520,7 +14520,7 @@ proc columns_dirty*(a: var TGtkListStore): guint =
 
 proc set_columns_dirty*(a: var TGtkListStore, `columns_dirty`: guint) =
   a.GtkListStoreflag0 = a.GtkListStoreflag0 or
-      ((`columns_dirty` shl bp_TGtkListStore_columns_dirty) and
+      (int16(`columns_dirty` shl bp_TGtkListStore_columns_dirty) and
       bm_TGtkListStore_columns_dirty)
 
 proc GTK_TYPE_MENU_BAR*(): GType =
@@ -14594,7 +14594,7 @@ proc show_tabs*(a: var TGtkNotebook): guint =
 
 proc set_show_tabs*(a: var TGtkNotebook, `show_tabs`: guint) =
   a.GtkNotebookflag0 = a.GtkNotebookflag0 or
-      ((`show_tabs` shl bp_TGtkNotebook_show_tabs) and
+      (int16(`show_tabs` shl bp_TGtkNotebook_show_tabs) and
       bm_TGtkNotebook_show_tabs)
 
 proc homogeneous*(a: var TGtkNotebook): guint =
@@ -14603,7 +14603,7 @@ proc homogeneous*(a: var TGtkNotebook): guint =
 
 proc set_homogeneous*(a: var TGtkNotebook, `homogeneous`: guint) =
   a.GtkNotebookflag0 = a.GtkNotebookflag0 or
-      ((`homogeneous` shl bp_TGtkNotebook_homogeneous) and
+      (int16(`homogeneous` shl bp_TGtkNotebook_homogeneous) and
       bm_TGtkNotebook_homogeneous)
 
 proc show_border*(a: var TGtkNotebook): guint =
@@ -14612,7 +14612,7 @@ proc show_border*(a: var TGtkNotebook): guint =
 
 proc set_show_border*(a: var TGtkNotebook, `show_border`: guint) =
   a.GtkNotebookflag0 = a.GtkNotebookflag0 or
-      ((`show_border` shl bp_TGtkNotebook_show_border) and
+      (int16(`show_border` shl bp_TGtkNotebook_show_border) and
       bm_TGtkNotebook_show_border)
 
 proc tab_pos*(a: var TGtkNotebook): guint =
@@ -14620,7 +14620,7 @@ proc tab_pos*(a: var TGtkNotebook): guint =
 
 proc set_tab_pos*(a: var TGtkNotebook, `tab_pos`: guint) =
   a.GtkNotebookflag0 = a.GtkNotebookflag0 or
-      ((`tab_pos` shl bp_TGtkNotebook_tab_pos) and bm_TGtkNotebook_tab_pos)
+      (int16(`tab_pos` shl bp_TGtkNotebook_tab_pos) and bm_TGtkNotebook_tab_pos)
 
 proc scrollable*(a: var TGtkNotebook): guint =
   result = (a.GtkNotebookflag0 and bm_TGtkNotebook_scrollable) shr
@@ -14628,7 +14628,7 @@ proc scrollable*(a: var TGtkNotebook): guint =
 
 proc set_scrollable*(a: var TGtkNotebook, `scrollable`: guint) =
   a.GtkNotebookflag0 = a.GtkNotebookflag0 or
-      ((`scrollable` shl bp_TGtkNotebook_scrollable) and
+      (int16(`scrollable` shl bp_TGtkNotebook_scrollable) and
       bm_TGtkNotebook_scrollable)
 
 proc in_child*(a: var TGtkNotebook): guint =
@@ -14637,7 +14637,7 @@ proc in_child*(a: var TGtkNotebook): guint =
 
 proc set_in_child*(a: var TGtkNotebook, `in_child`: guint) =
   a.GtkNotebookflag0 = a.GtkNotebookflag0 or
-      ((`in_child` shl bp_TGtkNotebook_in_child) and bm_TGtkNotebook_in_child)
+      (int16(`in_child` shl bp_TGtkNotebook_in_child) and bm_TGtkNotebook_in_child)
 
 proc click_child*(a: var TGtkNotebook): guint =
   result = (a.GtkNotebookflag0 and bm_TGtkNotebook_click_child) shr
@@ -14645,7 +14645,7 @@ proc click_child*(a: var TGtkNotebook): guint =
 
 proc set_click_child*(a: var TGtkNotebook, `click_child`: guint) =
   a.GtkNotebookflag0 = a.GtkNotebookflag0 or
-      ((`click_child` shl bp_TGtkNotebook_click_child) and
+      (int16(`click_child` shl bp_TGtkNotebook_click_child) and
       bm_TGtkNotebook_click_child)
 
 proc button*(a: var TGtkNotebook): guint =
@@ -14653,7 +14653,7 @@ proc button*(a: var TGtkNotebook): guint =
 
 proc set_button*(a: var TGtkNotebook, `button`: guint) =
   a.GtkNotebookflag0 = a.GtkNotebookflag0 or
-      ((`button` shl bp_TGtkNotebook_button) and bm_TGtkNotebook_button)
+      (int16(`button` shl bp_TGtkNotebook_button) and bm_TGtkNotebook_button)
 
 proc need_timer*(a: var TGtkNotebook): guint =
   result = (a.GtkNotebookflag0 and bm_TGtkNotebook_need_timer) shr
@@ -14661,7 +14661,7 @@ proc need_timer*(a: var TGtkNotebook): guint =
 
 proc set_need_timer*(a: var TGtkNotebook, `need_timer`: guint) =
   a.GtkNotebookflag0 = a.GtkNotebookflag0 or
-      ((`need_timer` shl bp_TGtkNotebook_need_timer) and
+      (int16(`need_timer` shl bp_TGtkNotebook_need_timer) and
       bm_TGtkNotebook_need_timer)
 
 proc child_has_focus*(a: var TGtkNotebook): guint =
@@ -14670,7 +14670,7 @@ proc child_has_focus*(a: var TGtkNotebook): guint =
 
 proc set_child_has_focus*(a: var TGtkNotebook, `child_has_focus`: guint) =
   a.GtkNotebookflag0 = a.GtkNotebookflag0 or
-      ((`child_has_focus` shl bp_TGtkNotebook_child_has_focus) and
+      (int16(`child_has_focus` shl bp_TGtkNotebook_child_has_focus) and
       bm_TGtkNotebook_child_has_focus)
 
 proc have_visible_child*(a: var TGtkNotebook): guint =
@@ -14679,7 +14679,7 @@ proc have_visible_child*(a: var TGtkNotebook): guint =
 
 proc set_have_visible_child*(a: var TGtkNotebook, `have_visible_child`: guint) =
   a.GtkNotebookflag0 = a.GtkNotebookflag0 or
-      ((`have_visible_child` shl bp_TGtkNotebook_have_visible_child) and
+      (int16(`have_visible_child` shl bp_TGtkNotebook_have_visible_child) and
       bm_TGtkNotebook_have_visible_child)
 
 proc focus_out*(a: var TGtkNotebook): guint =
@@ -14688,7 +14688,7 @@ proc focus_out*(a: var TGtkNotebook): guint =
 
 proc set_focus_out*(a: var TGtkNotebook, `focus_out`: guint) =
   a.GtkNotebookflag0 = a.GtkNotebookflag0 or
-      ((`focus_out` shl bp_TGtkNotebook_focus_out) and
+      (int16(`focus_out` shl bp_TGtkNotebook_focus_out) and
       bm_TGtkNotebook_focus_out)
 
 proc GTK_TYPE_OLD_EDITABLE*(): GType =
@@ -14716,7 +14716,7 @@ proc has_selection*(a: var TGtkOldEditable): guint =
 
 proc set_has_selection*(a: var TGtkOldEditable, `has_selection`: guint) =
   a.GtkOldEditableflag0 = a.GtkOldEditableflag0 or
-      ((`has_selection` shl bp_TGtkOldEditable_has_selection) and
+      (int16(`has_selection` shl bp_TGtkOldEditable_has_selection) and
       bm_TGtkOldEditable_has_selection)
 
 proc editable*(a: var TGtkOldEditable): guint =
@@ -14725,7 +14725,7 @@ proc editable*(a: var TGtkOldEditable): guint =
 
 proc set_editable*(a: var TGtkOldEditable, `editable`: guint) =
   a.GtkOldEditableflag0 = a.GtkOldEditableflag0 or
-      ((`editable` shl bp_TGtkOldEditable_editable) and
+      (int16(`editable` shl bp_TGtkOldEditable_editable) and
       bm_TGtkOldEditable_editable)
 
 proc visible*(a: var TGtkOldEditable): guint =
@@ -14734,7 +14734,7 @@ proc visible*(a: var TGtkOldEditable): guint =
 
 proc set_visible*(a: var TGtkOldEditable, `visible`: guint) =
   a.GtkOldEditableflag0 = a.GtkOldEditableflag0 or
-      ((`visible` shl bp_TGtkOldEditable_visible) and
+      (int16(`visible` shl bp_TGtkOldEditable_visible) and
       bm_TGtkOldEditable_visible)
 
 proc GTK_TYPE_OPTION_MENU*(): GType =
@@ -14779,7 +14779,7 @@ proc build_insensitive*(a: var TGtkPixmap): guint =
 
 proc set_build_insensitive*(a: var TGtkPixmap, `build_insensitive`: guint) =
   a.GtkPixmapflag0 = a.GtkPixmapflag0 or
-      ((`build_insensitive` shl bp_TGtkPixmap_build_insensitive) and
+      (int16(`build_insensitive` shl bp_TGtkPixmap_build_insensitive) and
       bm_TGtkPixmap_build_insensitive)
 
 proc GTK_TYPE_PLUG*(): GType =
@@ -14805,7 +14805,7 @@ proc same_app*(a: var TGtkPlug): guint =
 
 proc set_same_app*(a: var TGtkPlug, `same_app`: guint) =
   a.GtkPlugflag0 = a.GtkPlugflag0 or
-      ((`same_app` shl bp_TGtkPlug_same_app) and bm_TGtkPlug_same_app)
+      (int16(`same_app` shl bp_TGtkPlug_same_app) and bm_TGtkPlug_same_app)
 
 proc GTK_TYPE_PREVIEW*(): GType =
   result = gtk_preview_get_type()
@@ -14830,14 +14830,14 @@ proc get_type*(a: var TGtkPreview): guint =
 
 proc set_type*(a: var TGtkPreview, `type`: guint) =
   a.GtkPreviewflag0 = a.GtkPreviewflag0 or
-      ((`type` shl bp_TGtkPreview_type) and bm_TGtkPreview_type)
+      (int16(`type` shl bp_TGtkPreview_type) and bm_TGtkPreview_type)
 
 proc get_expand*(a: var TGtkPreview): guint =
   result = (a.GtkPreviewflag0 and bm_TGtkPreview_expand) shr bp_TGtkPreview_expand
 
 proc set_expand*(a: var TGtkPreview, `expand`: guint) =
   a.GtkPreviewflag0 = a.GtkPreviewflag0 or
-      ((`expand` shl bp_TGtkPreview_expand) and bm_TGtkPreview_expand)
+      (int16(`expand` shl bp_TGtkPreview_expand) and bm_TGtkPreview_expand)
 
 proc gtk_progress_get_type(): GType {.importc, cdecl, dynlib: gtklib.}
 
@@ -14865,7 +14865,7 @@ proc show_text*(a: var TGtkProgress): guint =
 
 proc set_show_text*(a: var TGtkProgress, `show_text`: guint) =
   a.GtkProgressflag0 = a.GtkProgressflag0 or
-      ((`show_text` shl bp_TGtkProgress_show_text) and
+      (int16(`show_text` shl bp_TGtkProgress_show_text) and
       bm_TGtkProgress_show_text)
 
 proc activity_mode*(a: var TGtkProgress): guint =
@@ -14874,7 +14874,7 @@ proc activity_mode*(a: var TGtkProgress): guint =
 
 proc set_activity_mode*(a: var TGtkProgress, `activity_mode`: guint) =
   a.GtkProgressflag0 = a.GtkProgressflag0 or
-      ((`activity_mode` shl bp_TGtkProgress_activity_mode) and
+      (int16(`activity_mode` shl bp_TGtkProgress_activity_mode) and
       bm_TGtkProgress_activity_mode)
 
 proc use_text_format*(a: var TGtkProgress): guint =
@@ -14883,7 +14883,7 @@ proc use_text_format*(a: var TGtkProgress): guint =
 
 proc set_use_text_format*(a: var TGtkProgress, `use_text_format`: guint) =
   a.GtkProgressflag0 = a.GtkProgressflag0 or
-      ((`use_text_format` shl bp_TGtkProgress_use_text_format) and
+      (int16(`use_text_format` shl bp_TGtkProgress_use_text_format) and
       bm_TGtkProgress_use_text_format)
 
 proc GTK_TYPE_PROGRESS_BAR*(): GType =
@@ -14911,7 +14911,7 @@ proc activity_dir*(a: var TGtkProgressBar): guint =
 
 proc set_activity_dir*(a: var TGtkProgressBar, `activity_dir`: guint) =
   a.GtkProgressBarflag0 = a.GtkProgressBarflag0 or
-      ((`activity_dir` shl bp_TGtkProgressBar_activity_dir) and
+      (int16(`activity_dir` shl bp_TGtkProgressBar_activity_dir) and
       bm_TGtkProgressBar_activity_dir)
 
 proc GTK_TYPE_RADIO_BUTTON*(): GType =
@@ -14980,7 +14980,7 @@ proc hscrollbar_policy*(a: var TGtkScrolledWindow): guint =
 proc set_hscrollbar_policy*(a: var TGtkScrolledWindow,
                             `hscrollbar_policy`: guint) =
   a.GtkScrolledWindowflag0 = a.GtkScrolledWindowflag0 or
-      ((`hscrollbar_policy` shl bp_TGtkScrolledWindow_hscrollbar_policy) and
+      (int16(`hscrollbar_policy` shl bp_TGtkScrolledWindow_hscrollbar_policy) and
       bm_TGtkScrolledWindow_hscrollbar_policy)
 
 proc vscrollbar_policy*(a: var TGtkScrolledWindow): guint =
@@ -14990,7 +14990,7 @@ proc vscrollbar_policy*(a: var TGtkScrolledWindow): guint =
 proc set_vscrollbar_policy*(a: var TGtkScrolledWindow,
                             `vscrollbar_policy`: guint) =
   a.GtkScrolledWindowflag0 = a.GtkScrolledWindowflag0 or
-      ((`vscrollbar_policy` shl bp_TGtkScrolledWindow_vscrollbar_policy) and
+      (int16(`vscrollbar_policy` shl bp_TGtkScrolledWindow_vscrollbar_policy) and
       bm_TGtkScrolledWindow_vscrollbar_policy)
 
 proc hscrollbar_visible*(a: var TGtkScrolledWindow): guint =
@@ -15000,7 +15000,7 @@ proc hscrollbar_visible*(a: var TGtkScrolledWindow): guint =
 proc set_hscrollbar_visible*(a: var TGtkScrolledWindow,
                              `hscrollbar_visible`: guint) =
   a.GtkScrolledWindowflag0 = a.GtkScrolledWindowflag0 or
-      ((`hscrollbar_visible` shl bp_TGtkScrolledWindow_hscrollbar_visible) and
+      (int16(`hscrollbar_visible` shl bp_TGtkScrolledWindow_hscrollbar_visible) and
       bm_TGtkScrolledWindow_hscrollbar_visible)
 
 proc vscrollbar_visible*(a: var TGtkScrolledWindow): guint =
@@ -15010,7 +15010,7 @@ proc vscrollbar_visible*(a: var TGtkScrolledWindow): guint =
 proc set_vscrollbar_visible*(a: var TGtkScrolledWindow,
                              `vscrollbar_visible`: guint) =
   a.GtkScrolledWindowflag0 = a.GtkScrolledWindowflag0 or
-      ((`vscrollbar_visible` shl bp_TGtkScrolledWindow_vscrollbar_visible) and
+      int16((`vscrollbar_visible` shl bp_TGtkScrolledWindow_vscrollbar_visible) and
       bm_TGtkScrolledWindow_vscrollbar_visible)
 
 proc window_placement*(a: var TGtkScrolledWindow): guint =
@@ -15019,7 +15019,7 @@ proc window_placement*(a: var TGtkScrolledWindow): guint =
 
 proc set_window_placement*(a: var TGtkScrolledWindow, `window_placement`: guint) =
   a.GtkScrolledWindowflag0 = a.GtkScrolledWindowflag0 or
-      ((`window_placement` shl bp_TGtkScrolledWindow_window_placement) and
+      (int16(`window_placement` shl bp_TGtkScrolledWindow_window_placement) and
       bm_TGtkScrolledWindow_window_placement)
 
 proc focus_out*(a: var TGtkScrolledWindow): guint =
@@ -15028,7 +15028,7 @@ proc focus_out*(a: var TGtkScrolledWindow): guint =
 
 proc set_focus_out*(a: var TGtkScrolledWindow, `focus_out`: guint) =
   a.GtkScrolledWindowflag0 = a.GtkScrolledWindowflag0 or
-      ((`focus_out` shl bp_TGtkScrolledWindow_focus_out) and
+      (int16(`focus_out` shl bp_TGtkScrolledWindow_focus_out) and
       bm_TGtkScrolledWindow_focus_out)
 
 proc GTK_TYPE_SELECTION_DATA*(): GType =
@@ -15062,7 +15062,7 @@ proc gtk_signal_name*(signal_id: guint): cstring =
   result = g_signal_name(signal_id)
 
 proc gtk_signal_emit_stop*(instance: gpointer, signal_id: guint, detail: TGQuark) =
-  if detail != 0: g_signal_stop_emission(instance, signal_id, 0)
+  if detail != 0'i32: g_signal_stop_emission(instance, signal_id, 0)
 
 proc gtk_signal_connect_full*(anObject: PGtkObject, name: cstring,
                          func_: TGtkSignalFunc, unknown1: pointer,
@@ -15138,7 +15138,7 @@ proc gtk_signal_handler_pending_by_func*(anObject: PGtkObject, signal_id: guint,
   t = cast[TGSignalMatchType](G_SIGNAL_MATCH_ID or G_SIGNAL_MATCH_FUNC or
       G_SIGNAL_MATCH_DATA)
   if not may_be_blocked:
-    t = t or cast[int](G_SIGNAL_MATCH_UNBLOCKED)
+    t = t or cast[TGSignalMatchType](G_SIGNAL_MATCH_UNBLOCKED)
   Result = g_signal_handler_find(anObject, t, signal_id, 0, nil, func_,
                                  data) != 0
 
@@ -15166,7 +15166,7 @@ proc have_width*(a: var TGtkSizeGroup): guint =
 
 proc set_have_width*(a: var TGtkSizeGroup, `have_width`: guint) =
   a.GtkSizeGroupflag0 = a.GtkSizeGroupflag0 or
-      ((`have_width` shl bp_TGtkSizeGroup_have_width) and
+      (int16(`have_width` shl bp_TGtkSizeGroup_have_width) and
       bm_TGtkSizeGroup_have_width)
 
 proc have_height*(a: var TGtkSizeGroup): guint =
@@ -15175,7 +15175,7 @@ proc have_height*(a: var TGtkSizeGroup): guint =
 
 proc set_have_height*(a: var TGtkSizeGroup, `have_height`: guint) =
   a.GtkSizeGroupflag0 = a.GtkSizeGroupflag0 or
-      ((`have_height` shl bp_TGtkSizeGroup_have_height) and
+      (int16(`have_height` shl bp_TGtkSizeGroup_have_height) and
       bm_TGtkSizeGroup_have_height)
 
 proc GTK_TYPE_SOCKET*(): GType =
@@ -15201,35 +15201,35 @@ proc same_app*(a: var TGtkSocket): guint =
 
 proc set_same_app*(a: var TGtkSocket, `same_app`: guint) =
   a.GtkSocketflag0 = a.GtkSocketflag0 or
-      ((`same_app` shl bp_TGtkSocket_same_app) and bm_TGtkSocket_same_app)
+      (int16(`same_app` shl bp_TGtkSocket_same_app) and bm_TGtkSocket_same_app)
 
 proc focus_in*(a: var TGtkSocket): guint =
   result = (a.GtkSocketflag0 and bm_TGtkSocket_focus_in) shr bp_TGtkSocket_focus_in
 
 proc set_focus_in*(a: var TGtkSocket, `focus_in`: guint) =
   a.GtkSocketflag0 = a.GtkSocketflag0 or
-      ((`focus_in` shl bp_TGtkSocket_focus_in) and bm_TGtkSocket_focus_in)
+      (int16(`focus_in` shl bp_TGtkSocket_focus_in) and bm_TGtkSocket_focus_in)
 
 proc have_size*(a: var TGtkSocket): guint =
   result = (a.GtkSocketflag0 and bm_TGtkSocket_have_size) shr bp_TGtkSocket_have_size
 
 proc set_have_size*(a: var TGtkSocket, `have_size`: guint) =
   a.GtkSocketflag0 = a.GtkSocketflag0 or
-      ((`have_size` shl bp_TGtkSocket_have_size) and bm_TGtkSocket_have_size)
+      (int16(`have_size` shl bp_TGtkSocket_have_size) and bm_TGtkSocket_have_size)
 
 proc need_map*(a: var TGtkSocket): guint =
   result = (a.GtkSocketflag0 and bm_TGtkSocket_need_map) shr bp_TGtkSocket_need_map
 
 proc set_need_map*(a: var TGtkSocket, `need_map`: guint) =
   a.GtkSocketflag0 = a.GtkSocketflag0 or
-      ((`need_map` shl bp_TGtkSocket_need_map) and bm_TGtkSocket_need_map)
+      (int16(`need_map` shl bp_TGtkSocket_need_map) and bm_TGtkSocket_need_map)
 
 proc is_mapped*(a: var TGtkSocket): guint =
   result = (a.GtkSocketflag0 and bm_TGtkSocket_is_mapped) shr bp_TGtkSocket_is_mapped
 
 proc set_is_mapped*(a: var TGtkSocket, `is_mapped`: guint) =
   a.GtkSocketflag0 = a.GtkSocketflag0 or
-      ((`is_mapped` shl bp_TGtkSocket_is_mapped) and bm_TGtkSocket_is_mapped)
+      (int16(`is_mapped` shl bp_TGtkSocket_is_mapped) and bm_TGtkSocket_is_mapped)
 
 proc GTK_TYPE_SPIN_BUTTON*(): GType =
   result = gtk_spin_button_get_type()
@@ -15350,7 +15350,7 @@ proc has_resize_grip*(a: var TGtkStatusbar): guint =
 
 proc set_has_resize_grip*(a: var TGtkStatusbar, `has_resize_grip`: guint) =
   a.GtkStatusbarflag0 = a.GtkStatusbarflag0 or
-      ((`has_resize_grip` shl bp_TGtkStatusbar_has_resize_grip) and
+      (int16(`has_resize_grip` shl bp_TGtkStatusbar_has_resize_grip) and
       bm_TGtkStatusbar_has_resize_grip)
 
 proc GTK_TYPE_TABLE*(): GType =
@@ -15377,7 +15377,7 @@ proc homogeneous*(a: var TGtkTable): guint =
 
 proc set_homogeneous*(a: var TGtkTable, `homogeneous`: guint) =
   a.GtkTableflag0 = a.GtkTableflag0 or
-      ((`homogeneous` shl bp_TGtkTable_homogeneous) and
+      (int16(`homogeneous` shl bp_TGtkTable_homogeneous) and
       bm_TGtkTable_homogeneous)
 
 proc xexpand*(a: var TGtkTableChild): guint =
@@ -15386,7 +15386,7 @@ proc xexpand*(a: var TGtkTableChild): guint =
 
 proc set_xexpand*(a: var TGtkTableChild, `xexpand`: guint) =
   a.GtkTableChildflag0 = a.GtkTableChildflag0 or
-      ((`xexpand` shl bp_TGtkTableChild_xexpand) and
+      (int16(`xexpand` shl bp_TGtkTableChild_xexpand) and
       bm_TGtkTableChild_xexpand)
 
 proc yexpand*(a: var TGtkTableChild): guint =
@@ -15395,7 +15395,7 @@ proc yexpand*(a: var TGtkTableChild): guint =
 
 proc set_yexpand*(a: var TGtkTableChild, `yexpand`: guint) =
   a.GtkTableChildflag0 = a.GtkTableChildflag0 or
-      ((`yexpand` shl bp_TGtkTableChild_yexpand) and
+      (int16(`yexpand` shl bp_TGtkTableChild_yexpand) and
       bm_TGtkTableChild_yexpand)
 
 proc xshrink*(a: var TGtkTableChild): guint =
@@ -15404,7 +15404,7 @@ proc xshrink*(a: var TGtkTableChild): guint =
 
 proc set_xshrink*(a: var TGtkTableChild, `xshrink`: guint) =
   a.GtkTableChildflag0 = a.GtkTableChildflag0 or
-      ((`xshrink` shl bp_TGtkTableChild_xshrink) and
+      (int16(`xshrink` shl bp_TGtkTableChild_xshrink) and
       bm_TGtkTableChild_xshrink)
 
 proc yshrink*(a: var TGtkTableChild): guint =
@@ -15413,7 +15413,7 @@ proc yshrink*(a: var TGtkTableChild): guint =
 
 proc set_yshrink*(a: var TGtkTableChild, `yshrink`: guint) =
   a.GtkTableChildflag0 = a.GtkTableChildflag0 or
-      ((`yshrink` shl bp_TGtkTableChild_yshrink) and
+      (int16(`yshrink` shl bp_TGtkTableChild_yshrink) and
       bm_TGtkTableChild_yshrink)
 
 proc xfill*(a: var TGtkTableChild): guint =
@@ -15421,14 +15421,14 @@ proc xfill*(a: var TGtkTableChild): guint =
 
 proc set_xfill*(a: var TGtkTableChild, `xfill`: guint) =
   a.GtkTableChildflag0 = a.GtkTableChildflag0 or
-      ((`xfill` shl bp_TGtkTableChild_xfill) and bm_TGtkTableChild_xfill)
+      (int16(`xfill` shl bp_TGtkTableChild_xfill) and bm_TGtkTableChild_xfill)
 
 proc yfill*(a: var TGtkTableChild): guint =
   result = (a.GtkTableChildflag0 and bm_TGtkTableChild_yfill) shr bp_TGtkTableChild_yfill
 
 proc set_yfill*(a: var TGtkTableChild, `yfill`: guint) =
   a.GtkTableChildflag0 = a.GtkTableChildflag0 or
-      ((`yfill` shl bp_TGtkTableChild_yfill) and bm_TGtkTableChild_yfill)
+      (int16(`yfill` shl bp_TGtkTableChild_yfill) and bm_TGtkTableChild_yfill)
 
 proc need_expand*(a: var TGtkTableRowCol): guint =
   result = (a.flag0 and bm_TGtkTableRowCol_need_expand) shr
@@ -15436,7 +15436,7 @@ proc need_expand*(a: var TGtkTableRowCol): guint =
 
 proc set_need_expand*(a: var TGtkTableRowCol, `need_expand`: guint) =
   a.flag0 = a.flag0 or
-      ((`need_expand` shl bp_TGtkTableRowCol_need_expand) and
+      (int16(`need_expand` shl bp_TGtkTableRowCol_need_expand) and
       bm_TGtkTableRowCol_need_expand)
 
 proc need_shrink*(a: var TGtkTableRowCol): guint =
@@ -15445,7 +15445,7 @@ proc need_shrink*(a: var TGtkTableRowCol): guint =
 
 proc set_need_shrink*(a: var TGtkTableRowCol, `need_shrink`: guint) =
   a.flag0 = a.flag0 or
-      ((`need_shrink` shl bp_TGtkTableRowCol_need_shrink) and
+      (int16(`need_shrink` shl bp_TGtkTableRowCol_need_shrink) and
       bm_TGtkTableRowCol_need_shrink)
 
 proc expand*(a: var TGtkTableRowCol): guint =
@@ -15454,7 +15454,7 @@ proc expand*(a: var TGtkTableRowCol): guint =
 
 proc set_expand*(a: var TGtkTableRowCol, `expand`: guint) =
   a.flag0 = a.flag0 or
-      ((`expand` shl bp_TGtkTableRowCol_expand) and bm_TGtkTableRowCol_expand)
+      (int16(`expand` shl bp_TGtkTableRowCol_expand) and bm_TGtkTableRowCol_expand)
 
 proc shrink*(a: var TGtkTableRowCol): guint =
   result = (a.flag0 and bm_TGtkTableRowCol_shrink) shr
@@ -15462,7 +15462,7 @@ proc shrink*(a: var TGtkTableRowCol): guint =
 
 proc set_shrink*(a: var TGtkTableRowCol, `shrink`: guint) =
   a.flag0 = a.flag0 or
-      ((`shrink` shl bp_TGtkTableRowCol_shrink) and bm_TGtkTableRowCol_shrink)
+      (int16(`shrink` shl bp_TGtkTableRowCol_shrink) and bm_TGtkTableRowCol_shrink)
 
 proc empty*(a: var TGtkTableRowCol): guint =
   result = (a.flag0 and bm_TGtkTableRowCol_empty) shr
@@ -15470,7 +15470,7 @@ proc empty*(a: var TGtkTableRowCol): guint =
 
 proc set_empty*(a: var TGtkTableRowCol, `empty`: guint) =
   a.flag0 = a.flag0 or
-      ((`empty` shl bp_TGtkTableRowCol_empty) and bm_TGtkTableRowCol_empty)
+      (int16(`empty` shl bp_TGtkTableRowCol_empty) and bm_TGtkTableRowCol_empty)
 
 proc GTK_TYPE_TEAROFF_MENU_ITEM*(): GType =
   result = gtk_tearoff_menu_item_get_type()
@@ -15497,7 +15497,7 @@ proc torn_off*(a: var TGtkTearoffMenuItem): guint =
 
 proc set_torn_off*(a: var TGtkTearoffMenuItem, `torn_off`: guint) =
   a.GtkTearoffMenuItemflag0 = a.GtkTearoffMenuItemflag0 or
-      ((`torn_off` shl bp_TGtkTearoffMenuItem_torn_off) and
+      (int16(`torn_off` shl bp_TGtkTearoffMenuItem_torn_off) and
       bm_TGtkTearoffMenuItem_torn_off)
 
 proc GTK_TYPE_TEXT*(): GType =
@@ -15523,18 +15523,18 @@ proc line_wrap*(a: PGtkText): guint =
 
 proc set_line_wrap*(a: PGtkText, `line_wrap`: guint) =
   a.GtkTextflag0 = a.GtkTextflag0 or
-      ((`line_wrap` shl bp_TGtkText_line_wrap) and bm_TGtkText_line_wrap)
+      (int16(`line_wrap` shl bp_TGtkText_line_wrap) and bm_TGtkText_line_wrap)
 
 proc word_wrap*(a: PGtkText): guint =
   result = (a . GtkTextflag0 and bm_TGtkText_word_wrap) shr bp_TGtkText_word_wrap
 
 proc set_word_wrap*(a: PGtkText, `word_wrap`: guint) =
   a.GtkTextflag0 = a.GtkTextflag0 or
-      ((`word_wrap` shl bp_TGtkText_word_wrap) and bm_TGtkText_word_wrap)
+      (int16(`word_wrap` shl bp_TGtkText_word_wrap) and bm_TGtkText_word_wrap)
 
 proc use_wchar*(a: PGtkText): gboolean =
   result = ((a.GtkTextflag0 and bm_TGtkText_use_wchar) shr bp_TGtkText_use_wchar) >
-      0
+      0'i16
 
 proc set_use_wchar*(a: PGtkText, `use_wchar`: gboolean) =
   if `use_wchar`:
@@ -15787,7 +15787,7 @@ proc underline*(a: var TGtkTextAppearance): guint =
 
 proc set_underline*(a: var TGtkTextAppearance, `underline`: guint) =
   a.flag0 = a.flag0 or
-      ((`underline` shl bp_TGtkTextAppearance_underline) and
+      (int16(`underline` shl bp_TGtkTextAppearance_underline) and
       bm_TGtkTextAppearance_underline)
 
 proc strikethrough*(a: var TGtkTextAppearance): guint =
@@ -15796,7 +15796,7 @@ proc strikethrough*(a: var TGtkTextAppearance): guint =
 
 proc set_strikethrough*(a: var TGtkTextAppearance, `strikethrough`: guint) =
   a.flag0 = a.flag0 or
-      ((`strikethrough` shl bp_TGtkTextAppearance_strikethrough) and
+      (int16(`strikethrough` shl bp_TGtkTextAppearance_strikethrough) and
       bm_TGtkTextAppearance_strikethrough)
 
 proc draw_bg*(a: var TGtkTextAppearance): guint =
@@ -15805,7 +15805,7 @@ proc draw_bg*(a: var TGtkTextAppearance): guint =
 
 proc set_draw_bg*(a: var TGtkTextAppearance, `draw_bg`: guint) =
   a.flag0 = a.flag0 or
-      ((`draw_bg` shl bp_TGtkTextAppearance_draw_bg) and
+      (int16(`draw_bg` shl bp_TGtkTextAppearance_draw_bg) and
       bm_TGtkTextAppearance_draw_bg)
 
 proc inside_selection*(a: var TGtkTextAppearance): guint =
@@ -15814,7 +15814,7 @@ proc inside_selection*(a: var TGtkTextAppearance): guint =
 
 proc set_inside_selection*(a: var TGtkTextAppearance, `inside_selection`: guint) =
   a.flag0 = a.flag0 or
-      ((`inside_selection` shl bp_TGtkTextAppearance_inside_selection) and
+      (int16(`inside_selection` shl bp_TGtkTextAppearance_inside_selection) and
       bm_TGtkTextAppearance_inside_selection)
 
 proc is_text*(a: var TGtkTextAppearance): guint =
@@ -15823,7 +15823,7 @@ proc is_text*(a: var TGtkTextAppearance): guint =
 
 proc set_is_text*(a: var TGtkTextAppearance, `is_text`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_text` shl bp_TGtkTextAppearance_is_text) and
+      (int16(`is_text` shl bp_TGtkTextAppearance_is_text) and
       bm_TGtkTextAppearance_is_text)
 
 proc pad1*(a: var TGtkTextAppearance): guint =
@@ -15832,7 +15832,7 @@ proc pad1*(a: var TGtkTextAppearance): guint =
 
 proc set_pad1*(a: var TGtkTextAppearance, `pad1`: guint) =
   a.flag0 = a.flag0 or
-      ((`pad1` shl bp_TGtkTextAppearance_pad1) and bm_TGtkTextAppearance_pad1)
+      (int16(`pad1` shl bp_TGtkTextAppearance_pad1) and bm_TGtkTextAppearance_pad1)
 
 proc pad2*(a: var TGtkTextAppearance): guint =
   result = (a.flag0 and bm_TGtkTextAppearance_pad2) shr
@@ -15840,7 +15840,7 @@ proc pad2*(a: var TGtkTextAppearance): guint =
 
 proc set_pad2*(a: var TGtkTextAppearance, `pad2`: guint) =
   a.flag0 = a.flag0 or
-      ((`pad2` shl bp_TGtkTextAppearance_pad2) and bm_TGtkTextAppearance_pad2)
+      (int16(`pad2` shl bp_TGtkTextAppearance_pad2) and bm_TGtkTextAppearance_pad2)
 
 proc pad3*(a: var TGtkTextAppearance): guint =
   result = (a.flag0 and bm_TGtkTextAppearance_pad3) shr
@@ -15848,7 +15848,7 @@ proc pad3*(a: var TGtkTextAppearance): guint =
 
 proc set_pad3*(a: var TGtkTextAppearance, `pad3`: guint) =
   a.flag0 = a.flag0 or
-      ((`pad3` shl bp_TGtkTextAppearance_pad3) and bm_TGtkTextAppearance_pad3)
+      (int16(`pad3` shl bp_TGtkTextAppearance_pad3) and bm_TGtkTextAppearance_pad3)
 
 proc pad4*(a: var TGtkTextAppearance): guint =
   result = (a.flag0 and bm_TGtkTextAppearance_pad4) shr
@@ -15856,7 +15856,7 @@ proc pad4*(a: var TGtkTextAppearance): guint =
 
 proc set_pad4*(a: var TGtkTextAppearance, `pad4`: guint) =
   a.flag0 = a.flag0 or
-      ((`pad4` shl bp_TGtkTextAppearance_pad4) and bm_TGtkTextAppearance_pad4)
+      (int16(`pad4` shl bp_TGtkTextAppearance_pad4) and bm_TGtkTextAppearance_pad4)
 
 proc invisible*(a: var TGtkTextAttributes): guint =
   result = (a.flag0 and bm_TGtkTextAttributes_invisible) shr
@@ -15864,7 +15864,7 @@ proc invisible*(a: var TGtkTextAttributes): guint =
 
 proc set_invisible*(a: var TGtkTextAttributes, `invisible`: guint) =
   a.flag0 = a.flag0 or
-      ((`invisible` shl bp_TGtkTextAttributes_invisible) and
+      (int16(`invisible` shl bp_TGtkTextAttributes_invisible) and
       bm_TGtkTextAttributes_invisible)
 
 proc bg_full_height*(a: var TGtkTextAttributes): guint =
@@ -15873,7 +15873,7 @@ proc bg_full_height*(a: var TGtkTextAttributes): guint =
 
 proc set_bg_full_height*(a: var TGtkTextAttributes, `bg_full_height`: guint) =
   a.flag0 = a.flag0 or
-      ((`bg_full_height` shl bp_TGtkTextAttributes_bg_full_height) and
+      (int16(`bg_full_height` shl bp_TGtkTextAttributes_bg_full_height) and
       bm_TGtkTextAttributes_bg_full_height)
 
 proc editable*(a: var TGtkTextAttributes): guint =
@@ -15882,7 +15882,7 @@ proc editable*(a: var TGtkTextAttributes): guint =
 
 proc set_editable*(a: var TGtkTextAttributes, `editable`: guint) =
   a.flag0 = a.flag0 or
-      ((`editable` shl bp_TGtkTextAttributes_editable) and
+      (int16(`editable` shl bp_TGtkTextAttributes_editable) and
       bm_TGtkTextAttributes_editable)
 
 proc realized*(a: var TGtkTextAttributes): guint =
@@ -15891,7 +15891,7 @@ proc realized*(a: var TGtkTextAttributes): guint =
 
 proc set_realized*(a: var TGtkTextAttributes, `realized`: guint) =
   a.flag0 = a.flag0 or
-      ((`realized` shl bp_TGtkTextAttributes_realized) and
+      (int16(`realized` shl bp_TGtkTextAttributes_realized) and
       bm_TGtkTextAttributes_realized)
 
 proc pad1*(a: var TGtkTextAttributes): guint =
@@ -15900,7 +15900,7 @@ proc pad1*(a: var TGtkTextAttributes): guint =
 
 proc set_pad1*(a: var TGtkTextAttributes, `pad1`: guint) =
   a.flag0 = a.flag0 or
-      ((`pad1` shl bp_TGtkTextAttributes_pad1) and bm_TGtkTextAttributes_pad1)
+      (int16(`pad1` shl bp_TGtkTextAttributes_pad1) and bm_TGtkTextAttributes_pad1)
 
 proc pad2*(a: var TGtkTextAttributes): guint =
   result = (a.flag0 and bm_TGtkTextAttributes_pad2) shr
@@ -15908,7 +15908,7 @@ proc pad2*(a: var TGtkTextAttributes): guint =
 
 proc set_pad2*(a: var TGtkTextAttributes, `pad2`: guint) =
   a.flag0 = a.flag0 or
-      ((`pad2` shl bp_TGtkTextAttributes_pad2) and bm_TGtkTextAttributes_pad2)
+      (int16(`pad2` shl bp_TGtkTextAttributes_pad2) and bm_TGtkTextAttributes_pad2)
 
 proc pad3*(a: var TGtkTextAttributes): guint =
   result = (a.flag0 and bm_TGtkTextAttributes_pad3) shr
@@ -15916,7 +15916,7 @@ proc pad3*(a: var TGtkTextAttributes): guint =
 
 proc set_pad3*(a: var TGtkTextAttributes, `pad3`: guint) =
   a.flag0 = a.flag0 or
-      ((`pad3` shl bp_TGtkTextAttributes_pad3) and bm_TGtkTextAttributes_pad3)
+      (int16(`pad3` shl bp_TGtkTextAttributes_pad3) and bm_TGtkTextAttributes_pad3)
 
 proc pad4*(a: var TGtkTextAttributes): guint =
   result = (a.flag0 and bm_TGtkTextAttributes_pad4) shr
@@ -15924,7 +15924,7 @@ proc pad4*(a: var TGtkTextAttributes): guint =
 
 proc set_pad4*(a: var TGtkTextAttributes, `pad4`: guint) =
   a.flag0 = a.flag0 or
-      ((`pad4` shl bp_TGtkTextAttributes_pad4) and bm_TGtkTextAttributes_pad4)
+      (int16(`pad4` shl bp_TGtkTextAttributes_pad4) and bm_TGtkTextAttributes_pad4)
 
 proc GTK_TYPE_TEXT_TAG_TABLE*(): GType =
   result = gtk_text_tag_table_get_type()
@@ -15970,7 +15970,7 @@ proc visible*(a: var TGtkTextMarkBody): guint =
 
 proc set_visible*(a: var TGtkTextMarkBody, `visible`: guint) =
   a.flag0 = a.flag0 or
-      ((`visible` shl bp_TGtkTextMarkBody_visible) and
+      (int16(`visible` shl bp_TGtkTextMarkBody_visible) and
       bm_TGtkTextMarkBody_visible)
 
 proc not_deleteable*(a: var TGtkTextMarkBody): guint =
@@ -15979,7 +15979,7 @@ proc not_deleteable*(a: var TGtkTextMarkBody): guint =
 
 proc set_not_deleteable*(a: var TGtkTextMarkBody, `not_deleteable`: guint) =
   a.flag0 = a.flag0 or
-      ((`not_deleteable` shl bp_TGtkTextMarkBody_not_deleteable) and
+      (int16(`not_deleteable` shl bp_TGtkTextMarkBody_not_deleteable) and
       bm_TGtkTextMarkBody_not_deleteable)
 
 proc GTK_TYPE_TEXT_CHILD_ANCHOR*(): GType =
@@ -16043,7 +16043,7 @@ proc modified*(a: var TGtkTextBuffer): guint =
 
 proc set_modified*(a: var TGtkTextBuffer, `modified`: guint) =
   a.GtkTextBufferflag0 = a.GtkTextBufferflag0 or
-      ((`modified` shl bp_TGtkTextBuffer_modified) and
+      (int16(`modified` shl bp_TGtkTextBuffer_modified) and
       bm_TGtkTextBuffer_modified)
 
 proc GTK_TYPE_TEXT_LAYOUT*(): GType =
@@ -16072,7 +16072,7 @@ proc cursor_visible*(a: var TGtkTextLayout): guint =
 
 proc set_cursor_visible*(a: var TGtkTextLayout, `cursor_visible`: guint) =
   a.GtkTextLayoutflag0 = a.GtkTextLayoutflag0 or
-      ((`cursor_visible` shl bp_TGtkTextLayout_cursor_visible) and
+      (int16(`cursor_visible` shl bp_TGtkTextLayout_cursor_visible) and
       bm_TGtkTextLayout_cursor_visible)
 
 proc cursor_direction*(a: var TGtkTextLayout): gint =
@@ -16081,7 +16081,7 @@ proc cursor_direction*(a: var TGtkTextLayout): gint =
 
 proc set_cursor_direction*(a: var TGtkTextLayout, `cursor_direction`: gint) =
   a.GtkTextLayoutflag0 = a.GtkTextLayoutflag0 or
-      ((`cursor_direction` shl bp_TGtkTextLayout_cursor_direction) and
+      (int16(`cursor_direction` shl bp_TGtkTextLayout_cursor_direction) and
       bm_TGtkTextLayout_cursor_direction)
 
 proc is_strong*(a: var TGtkTextCursorDisplay): guint =
@@ -16090,7 +16090,7 @@ proc is_strong*(a: var TGtkTextCursorDisplay): guint =
 
 proc set_is_strong*(a: var TGtkTextCursorDisplay, `is_strong`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_strong` shl bp_TGtkTextCursorDisplay_is_strong) and
+      (int16(`is_strong` shl bp_TGtkTextCursorDisplay_is_strong) and
       bm_TGtkTextCursorDisplay_is_strong)
 
 proc is_weak*(a: var TGtkTextCursorDisplay): guint =
@@ -16099,7 +16099,7 @@ proc is_weak*(a: var TGtkTextCursorDisplay): guint =
 
 proc set_is_weak*(a: var TGtkTextCursorDisplay, `is_weak`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_weak` shl bp_TGtkTextCursorDisplay_is_weak) and
+      (int16(`is_weak` shl bp_TGtkTextCursorDisplay_is_weak) and
       bm_TGtkTextCursorDisplay_is_weak)
 
 proc GTK_TYPE_TEXT_VIEW*(): GType =
@@ -16126,7 +16126,7 @@ proc editable*(a: var TGtkTextView): guint =
 
 proc set_editable*(a: var TGtkTextView, `editable`: guint) =
   a.GtkTextViewflag0 = a.GtkTextViewflag0 or
-      ((`editable` shl bp_TGtkTextView_editable) and bm_TGtkTextView_editable)
+      (int16(`editable` shl bp_TGtkTextView_editable) and bm_TGtkTextView_editable)
 
 proc overwrite_mode*(a: var TGtkTextView): guint =
   result = (a.GtkTextViewflag0 and bm_TGtkTextView_overwrite_mode) shr
@@ -16134,7 +16134,7 @@ proc overwrite_mode*(a: var TGtkTextView): guint =
 
 proc set_overwrite_mode*(a: var TGtkTextView, `overwrite_mode`: guint) =
   a.GtkTextViewflag0 = a.GtkTextViewflag0 or
-      ((`overwrite_mode` shl bp_TGtkTextView_overwrite_mode) and
+      (int16(`overwrite_mode` shl bp_TGtkTextView_overwrite_mode) and
       bm_TGtkTextView_overwrite_mode)
 
 proc cursor_visible*(a: var TGtkTextView): guint =
@@ -16143,7 +16143,7 @@ proc cursor_visible*(a: var TGtkTextView): guint =
 
 proc set_cursor_visible*(a: var TGtkTextView, `cursor_visible`: guint) =
   a.GtkTextViewflag0 = a.GtkTextViewflag0 or
-      ((`cursor_visible` shl bp_TGtkTextView_cursor_visible) and
+      (int16(`cursor_visible` shl bp_TGtkTextView_cursor_visible) and
       bm_TGtkTextView_cursor_visible)
 
 proc need_im_reset*(a: var TGtkTextView): guint =
@@ -16152,7 +16152,7 @@ proc need_im_reset*(a: var TGtkTextView): guint =
 
 proc set_need_im_reset*(a: var TGtkTextView, `need_im_reset`: guint) =
   a.GtkTextViewflag0 = a.GtkTextViewflag0 or
-      ((`need_im_reset` shl bp_TGtkTextView_need_im_reset) and
+      (int16(`need_im_reset` shl bp_TGtkTextView_need_im_reset) and
       bm_TGtkTextView_need_im_reset)
 
 proc just_selected_element*(a: var TGtkTextView): guint =
@@ -16162,7 +16162,7 @@ proc just_selected_element*(a: var TGtkTextView): guint =
 proc set_just_selected_element*(a: var TGtkTextView,
                                 `just_selected_element`: guint) =
   a.GtkTextViewflag0 = a.GtkTextViewflag0 or
-      ((`just_selected_element` shl bp_TGtkTextView_just_selected_element) and
+      (int16(`just_selected_element` shl bp_TGtkTextView_just_selected_element) and
       bm_TGtkTextView_just_selected_element)
 
 proc disable_scroll_on_focus*(a: var TGtkTextView): guint =
@@ -16172,7 +16172,7 @@ proc disable_scroll_on_focus*(a: var TGtkTextView): guint =
 proc set_disable_scroll_on_focus*(a: var TGtkTextView,
                                   `disable_scroll_on_focus`: guint) =
   a.GtkTextViewflag0 = a.GtkTextViewflag0 or
-      ((`disable_scroll_on_focus` shl bp_TGtkTextView_disable_scroll_on_focus) and
+      (int16(`disable_scroll_on_focus` shl bp_TGtkTextView_disable_scroll_on_focus) and
       bm_TGtkTextView_disable_scroll_on_focus)
 
 proc onscreen_validated*(a: var TGtkTextView): guint =
@@ -16181,7 +16181,7 @@ proc onscreen_validated*(a: var TGtkTextView): guint =
 
 proc set_onscreen_validated*(a: var TGtkTextView, `onscreen_validated`: guint) =
   a.GtkTextViewflag0 = a.GtkTextViewflag0 or
-      ((`onscreen_validated` shl bp_TGtkTextView_onscreen_validated) and
+      (int16(`onscreen_validated` shl bp_TGtkTextView_onscreen_validated) and
       bm_TGtkTextView_onscreen_validated)
 
 proc mouse_cursor_obscured*(a: var TGtkTextView): guint =
@@ -16191,7 +16191,7 @@ proc mouse_cursor_obscured*(a: var TGtkTextView): guint =
 proc set_mouse_cursor_obscured*(a: var TGtkTextView,
                                 `mouse_cursor_obscured`: guint) =
   a.GtkTextViewflag0 = a.GtkTextViewflag0 or
-      ((`mouse_cursor_obscured` shl bp_TGtkTextView_mouse_cursor_obscured) and
+      (int16(`mouse_cursor_obscured` shl bp_TGtkTextView_mouse_cursor_obscured) and
       bm_TGtkTextView_mouse_cursor_obscured)
 
 proc GTK_TYPE_TIPS_QUERY*(): GType =
@@ -16218,7 +16218,7 @@ proc emit_always*(a: var TGtkTipsQuery): guint =
 
 proc set_emit_always*(a: var TGtkTipsQuery, `emit_always`: guint) =
   a.GtkTipsQueryflag0 = a.GtkTipsQueryflag0 or
-      ((`emit_always` shl bp_TGtkTipsQuery_emit_always) and
+      (int16(`emit_always` shl bp_TGtkTipsQuery_emit_always) and
       bm_TGtkTipsQuery_emit_always)
 
 proc in_query*(a: var TGtkTipsQuery): guint =
@@ -16227,7 +16227,7 @@ proc in_query*(a: var TGtkTipsQuery): guint =
 
 proc set_in_query*(a: var TGtkTipsQuery, `in_query`: guint) =
   a.GtkTipsQueryflag0 = a.GtkTipsQueryflag0 or
-      ((`in_query` shl bp_TGtkTipsQuery_in_query) and
+      (int16(`in_query` shl bp_TGtkTipsQuery_in_query) and
       bm_TGtkTipsQuery_in_query)
 
 proc GTK_TYPE_TOOLTIPS*(): GType =
@@ -16304,7 +16304,7 @@ proc style_set*(a: var TGtkToolbar): guint =
 
 proc set_style_set*(a: var TGtkToolbar, `style_set`: guint) =
   a.GtkToolbarflag0 = a.GtkToolbarflag0 or
-      ((`style_set` shl bp_TGtkToolbar_style_set) and
+      (int16(`style_set` shl bp_TGtkToolbar_style_set) and
       bm_TGtkToolbar_style_set)
 
 proc icon_size_set*(a: var TGtkToolbar): guint =
@@ -16313,7 +16313,7 @@ proc icon_size_set*(a: var TGtkToolbar): guint =
 
 proc set_icon_size_set*(a: var TGtkToolbar, `icon_size_set`: guint) =
   a.GtkToolbarflag0 = a.GtkToolbarflag0 or
-      ((`icon_size_set` shl bp_TGtkToolbar_icon_size_set) and
+      (int16(`icon_size_set` shl bp_TGtkToolbar_icon_size_set) and
       bm_TGtkToolbar_icon_size_set)
 
 proc GTK_TYPE_TREE*(): GType =
@@ -16350,7 +16350,7 @@ proc selection_mode*(a: var TGtkTree): guint =
 
 proc set_selection_mode*(a: var TGtkTree, `selection_mode`: guint) =
   a.GtkTreeflag0 = a.GtkTreeflag0 or
-      ((`selection_mode` shl bp_TGtkTree_selection_mode) and
+      (int16(`selection_mode` shl bp_TGtkTree_selection_mode) and
       bm_TGtkTree_selection_mode)
 
 proc view_mode*(a: var TGtkTree): guint =
@@ -16358,14 +16358,14 @@ proc view_mode*(a: var TGtkTree): guint =
 
 proc set_view_mode*(a: var TGtkTree, `view_mode`: guint) =
   a.GtkTreeflag0 = a.GtkTreeflag0 or
-      ((`view_mode` shl bp_TGtkTree_view_mode) and bm_TGtkTree_view_mode)
+      (int16(`view_mode` shl bp_TGtkTree_view_mode) and bm_TGtkTree_view_mode)
 
 proc view_line*(a: var TGtkTree): guint =
   result = (a.GtkTreeflag0 and bm_TGtkTree_view_line) shr bp_TGtkTree_view_line
 
 proc set_view_line*(a: var TGtkTree, `view_line`: guint) =
   a.GtkTreeflag0 = a.GtkTreeflag0 or
-      ((`view_line` shl bp_TGtkTree_view_line) and bm_TGtkTree_view_line)
+      (int16(`view_line` shl bp_TGtkTree_view_line) and bm_TGtkTree_view_line)
 
 proc GTK_TYPE_TREE_DRAG_SOURCE*(): GType =
   result = gtk_tree_drag_source_get_type()
@@ -16422,7 +16422,7 @@ proc expanded*(a: var TGtkTreeItem): guint =
 
 proc set_expanded*(a: var TGtkTreeItem, `expanded`: guint) =
   a.GtkTreeItemflag0 = a.GtkTreeItemflag0 or
-      ((`expanded` shl bp_TGtkTreeItem_expanded) and bm_TGtkTreeItem_expanded)
+      (int16(`expanded` shl bp_TGtkTreeItem_expanded) and bm_TGtkTreeItem_expanded)
 
 proc GTK_TYPE_TREE_SELECTION*(): GType =
   result = gtk_tree_selection_get_type()
@@ -16468,7 +16468,7 @@ proc columns_dirty*(a: var TGtkTreeStore): guint =
 
 proc set_columns_dirty*(a: var TGtkTreeStore, `columns_dirty`: guint) =
   a.GtkTreeStoreflag0 = a.GtkTreeStoreflag0 or
-      ((`columns_dirty` shl bp_TGtkTreeStore_columns_dirty) and
+      (int16(`columns_dirty` shl bp_TGtkTreeStore_columns_dirty) and
       bm_TGtkTreeStore_columns_dirty)
 
 proc GTK_TYPE_TREE_VIEW_COLUMN*(): GType =
@@ -16497,7 +16497,7 @@ proc visible*(a: var TGtkTreeViewColumn): guint =
 
 proc set_visible*(a: var TGtkTreeViewColumn, `visible`: guint) =
   a.GtkTreeViewColumnflag0 = a.GtkTreeViewColumnflag0 or
-      ((`visible` shl bp_TGtkTreeViewColumn_visible) and
+      (int16(`visible` shl bp_TGtkTreeViewColumn_visible) and
       bm_TGtkTreeViewColumn_visible)
 
 proc resizable*(a: var TGtkTreeViewColumn): guint =
@@ -16506,7 +16506,7 @@ proc resizable*(a: var TGtkTreeViewColumn): guint =
 
 proc set_resizable*(a: var TGtkTreeViewColumn, `resizable`: guint) =
   a.GtkTreeViewColumnflag0 = a.GtkTreeViewColumnflag0 or
-      ((`resizable` shl bp_TGtkTreeViewColumn_resizable) and
+      (int16(`resizable` shl bp_TGtkTreeViewColumn_resizable) and
       bm_TGtkTreeViewColumn_resizable)
 
 proc clickable*(a: var TGtkTreeViewColumn): guint =
@@ -16515,7 +16515,7 @@ proc clickable*(a: var TGtkTreeViewColumn): guint =
 
 proc set_clickable*(a: var TGtkTreeViewColumn, `clickable`: guint) =
   a.GtkTreeViewColumnflag0 = a.GtkTreeViewColumnflag0 or
-      ((`clickable` shl bp_TGtkTreeViewColumn_clickable) and
+      (int16(`clickable` shl bp_TGtkTreeViewColumn_clickable) and
       bm_TGtkTreeViewColumn_clickable)
 
 proc dirty*(a: var TGtkTreeViewColumn): guint =
@@ -16524,7 +16524,7 @@ proc dirty*(a: var TGtkTreeViewColumn): guint =
 
 proc set_dirty*(a: var TGtkTreeViewColumn, `dirty`: guint) =
   a.GtkTreeViewColumnflag0 = a.GtkTreeViewColumnflag0 or
-      ((`dirty` shl bp_TGtkTreeViewColumn_dirty) and
+      (int16(`dirty` shl bp_TGtkTreeViewColumn_dirty) and
       bm_TGtkTreeViewColumn_dirty)
 
 proc show_sort_indicator*(a: var TGtkTreeViewColumn): guint =
@@ -16534,7 +16534,7 @@ proc show_sort_indicator*(a: var TGtkTreeViewColumn): guint =
 proc set_show_sort_indicator*(a: var TGtkTreeViewColumn,
                               `show_sort_indicator`: guint) =
   a.GtkTreeViewColumnflag0 = a.GtkTreeViewColumnflag0 or
-      ((`show_sort_indicator` shl bp_TGtkTreeViewColumn_show_sort_indicator) and
+      (int16(`show_sort_indicator` shl bp_TGtkTreeViewColumn_show_sort_indicator) and
       bm_TGtkTreeViewColumn_show_sort_indicator)
 
 proc maybe_reordered*(a: var TGtkTreeViewColumn): guint =
@@ -16543,7 +16543,7 @@ proc maybe_reordered*(a: var TGtkTreeViewColumn): guint =
 
 proc set_maybe_reordered*(a: var TGtkTreeViewColumn, `maybe_reordered`: guint) =
   a.GtkTreeViewColumnflag0 = a.GtkTreeViewColumnflag0 or
-      ((`maybe_reordered` shl bp_TGtkTreeViewColumn_maybe_reordered) and
+      (int16(`maybe_reordered` shl bp_TGtkTreeViewColumn_maybe_reordered) and
       bm_TGtkTreeViewColumn_maybe_reordered)
 
 proc reorderable*(a: var TGtkTreeViewColumn): guint =
@@ -16552,7 +16552,7 @@ proc reorderable*(a: var TGtkTreeViewColumn): guint =
 
 proc set_reorderable*(a: var TGtkTreeViewColumn, `reorderable`: guint) =
   a.GtkTreeViewColumnflag0 = a.GtkTreeViewColumnflag0 or
-      ((`reorderable` shl bp_TGtkTreeViewColumn_reorderable) and
+      (int16(`reorderable` shl bp_TGtkTreeViewColumn_reorderable) and
       bm_TGtkTreeViewColumn_reorderable)
 
 proc use_resized_width*(a: var TGtkTreeViewColumn): guint =
@@ -16562,7 +16562,7 @@ proc use_resized_width*(a: var TGtkTreeViewColumn): guint =
 proc set_use_resized_width*(a: var TGtkTreeViewColumn,
                             `use_resized_width`: guint) =
   a.GtkTreeViewColumnflag0 = a.GtkTreeViewColumnflag0 or
-      ((`use_resized_width` shl bp_TGtkTreeViewColumn_use_resized_width) and
+      (int16(`use_resized_width` shl bp_TGtkTreeViewColumn_use_resized_width) and
       bm_TGtkTreeViewColumn_use_resized_width)
 
 proc flags*(a: PGtkRBNode): guint =
@@ -16570,19 +16570,19 @@ proc flags*(a: PGtkRBNode): guint =
 
 proc set_flags*(a: PGtkRBNode, `flags`: guint) =
   a . flag0 = a .
-      flag0 or ((`flags` shl bp_TGtkRBNode_flags) and bm_TGtkRBNode_flags)
+      flag0 or (int16(`flags` shl bp_TGtkRBNode_flags) and bm_TGtkRBNode_flags)
 
 proc parity*(a: PGtkRBNode): guint =
   result = (a . flag0 and bm_TGtkRBNode_parity) shr bp_TGtkRBNode_parity
 
 proc set_parity*(a: PGtkRBNode, `parity`: guint) =
   a . flag0 = a .
-      flag0 or ((`parity` shl bp_TGtkRBNode_parity) and bm_TGtkRBNode_parity)
+      flag0 or (int16(`parity` shl bp_TGtkRBNode_parity) and bm_TGtkRBNode_parity)
 
 proc GTK_RBNODE_GET_COLOR*(node_: PGtkRBNode): guint =
   if node_ == nil:
     Result = GTK_RBNODE_BLACK
-  elif (flags(node_) and GTK_RBNODE_RED) == GTK_RBNODE_RED:
+  elif (int(flags(node_)) and GTK_RBNODE_RED) == GTK_RBNODE_RED:
     Result = GTK_RBNODE_RED
   else:
     Result = GTK_RBNODE_BLACK
@@ -16590,8 +16590,8 @@ proc GTK_RBNODE_GET_COLOR*(node_: PGtkRBNode): guint =
 proc GTK_RBNODE_SET_COLOR*(node_: PGtkRBNode, color: guint) =
   if node_ == nil:
     return
-  if ((flags(node_) and int(color)) != color):
-    set_flags(node_, flags(node_) xor (GTK_RBNODE_RED or GTK_RBNODE_BLACK))
+  if ((flags(node_) and (color)) != color):
+    set_flags(node_, flags(node_) xor cint(GTK_RBNODE_RED or GTK_RBNODE_BLACK))
 
 proc GTK_RBNODE_GET_HEIGHT*(node_: PGtkRBNode): gint =
   var if_local1: gint
@@ -16599,19 +16599,19 @@ proc GTK_RBNODE_GET_HEIGHT*(node_: PGtkRBNode): gint =
     if_local1 = node_.children.root.offset
   else:
     if_local1 = 0
-  result = node_.offset - (int(node_.left.offset) + node_.right.offset + if_local1)
+  result = node_.offset - ((node_.left.offset) + node_.right.offset + if_local1)
 
 proc GTK_RBNODE_FLAG_SET*(node_: PGtkRBNode, flag: guint): bool =
-  result = (node_ != nil) and ((flags(node_) and int(flag)) == flag)
+  result = (node_ != nil) and ((flags(node_) and (flag)) == flag)
 
 proc GTK_RBNODE_SET_FLAG*(node_: PGtkRBNode, flag: guint16) =
-  set_flags(node_, int(flag) or flags(node_))
+  set_flags(node_, (flag) or flags(node_))
 
 proc GTK_RBNODE_UNSET_FLAG*(node_: PGtkRBNode, flag: guint16) =
-  set_flags(node_, (not int(flag)) and flags(node_))
+  set_flags(node_, (not (flag)) and flags(node_))
 
 proc GTK_TREE_VIEW_FLAG_SET*(tree_view: PGtkTreeView, flag: guint): bool =
-  result = ((tree_view.priv.flags) and int(flag)) == flag
+  result = ((tree_view.priv.flags) and (flag)) == flag
 
 proc TREE_VIEW_HEADER_HEIGHT*(tree_view: PGtkTreeView): int32 =
   var if_local1: int32
@@ -16623,23 +16623,22 @@ proc TREE_VIEW_HEADER_HEIGHT*(tree_view: PGtkTreeView): int32 =
 
 proc TREE_VIEW_COLUMN_REQUESTED_WIDTH*(column: PGtkTreeViewColumn): int32 =
   var MinWidth, MaxWidth: int
-  if column . min_width != - 1:
-    MinWidth = column . min_width
+  if column.min_width != -1'i32:
+    MinWidth = column.min_width
   else:
-    MinWidth = column . requested_width
-  if column . max_width != - 1:
-    MaxWidth = column . max_width
+    MinWidth = column.requested_width
+  if column.max_width != - 1'i32:
+    MaxWidth = column.max_width
   else:
-    MaxWidth = column . requested_width
-  result = CLAMP(column . requested_width, MinWidth,
-      MaxWidth)
+    MaxWidth = column.requested_width
+  result = CLAMP(column.requested_width, MinWidth, MaxWidth)
 
 proc TREE_VIEW_DRAW_EXPANDERS*(tree_view: PGtkTreeView): bool =
   result = (not (GTK_TREE_VIEW_FLAG_SET(tree_view, GTK_TREE_VIEW_IS_LIST))) and
       (GTK_TREE_VIEW_FLAG_SET(tree_view, GTK_TREE_VIEW_SHOW_EXPANDERS))
 
 proc TREE_VIEW_COLUMN_DRAG_DEAD_MULTIPLIER*(tree_view: PGtkTreeView): int32 =
-  result = 10 * (TREE_VIEW_HEADER_HEIGHT(tree_view))
+  result = 10'i32 * (TREE_VIEW_HEADER_HEIGHT(tree_view))
 
 proc scroll_to_use_align*(a: var TGtkTreeViewPrivate): guint =
   result = (a.flag0 and bm_TGtkTreeViewPrivate_scroll_to_use_align) shr
@@ -16648,7 +16647,7 @@ proc scroll_to_use_align*(a: var TGtkTreeViewPrivate): guint =
 proc set_scroll_to_use_align*(a: var TGtkTreeViewPrivate,
                               `scroll_to_use_align`: guint) =
   a.flag0 = a.flag0 or
-      ((`scroll_to_use_align` shl bp_TGtkTreeViewPrivate_scroll_to_use_align) and
+      (int16(`scroll_to_use_align` shl bp_TGtkTreeViewPrivate_scroll_to_use_align) and
       bm_TGtkTreeViewPrivate_scroll_to_use_align)
 
 proc fixed_height_check*(a: var TGtkTreeViewPrivate): guint =
@@ -16658,7 +16657,7 @@ proc fixed_height_check*(a: var TGtkTreeViewPrivate): guint =
 proc set_fixed_height_check*(a: var TGtkTreeViewPrivate,
                              `fixed_height_check`: guint) =
   a.flag0 = a.flag0 or
-      ((`fixed_height_check` shl bp_TGtkTreeViewPrivate_fixed_height_check) and
+      (int16(`fixed_height_check` shl bp_TGtkTreeViewPrivate_fixed_height_check) and
       bm_TGtkTreeViewPrivate_fixed_height_check)
 
 proc reorderable*(a: var TGtkTreeViewPrivate): guint =
@@ -16667,7 +16666,7 @@ proc reorderable*(a: var TGtkTreeViewPrivate): guint =
 
 proc set_reorderable*(a: var TGtkTreeViewPrivate, `reorderable`: guint) =
   a.flag0 = a.flag0 or
-      ((`reorderable` shl bp_TGtkTreeViewPrivate_reorderable) and
+      (int16(`reorderable` shl bp_TGtkTreeViewPrivate_reorderable) and
       bm_TGtkTreeViewPrivate_reorderable)
 
 proc header_has_focus*(a: var TGtkTreeViewPrivate): guint =
@@ -16676,7 +16675,7 @@ proc header_has_focus*(a: var TGtkTreeViewPrivate): guint =
 
 proc set_header_has_focus*(a: var TGtkTreeViewPrivate, `header_has_focus`: guint) =
   a.flag0 = a.flag0 or
-      ((`header_has_focus` shl bp_TGtkTreeViewPrivate_header_has_focus) and
+      (int16(`header_has_focus` shl bp_TGtkTreeViewPrivate_header_has_focus) and
       bm_TGtkTreeViewPrivate_header_has_focus)
 
 proc drag_column_window_state*(a: var TGtkTreeViewPrivate): guint =
@@ -16686,7 +16685,7 @@ proc drag_column_window_state*(a: var TGtkTreeViewPrivate): guint =
 proc set_drag_column_window_state*(a: var TGtkTreeViewPrivate,
                                    `drag_column_window_state`: guint) =
   a.flag0 = a.flag0 or
-      ((`drag_column_window_state` shl
+      (int16(`drag_column_window_state` shl
       bp_TGtkTreeViewPrivate_drag_column_window_state) and
       bm_TGtkTreeViewPrivate_drag_column_window_state)
 
@@ -16696,7 +16695,7 @@ proc has_rules*(a: var TGtkTreeViewPrivate): guint =
 
 proc set_has_rules*(a: var TGtkTreeViewPrivate, `has_rules`: guint) =
   a.flag0 = a.flag0 or
-      ((`has_rules` shl bp_TGtkTreeViewPrivate_has_rules) and
+      (int16(`has_rules` shl bp_TGtkTreeViewPrivate_has_rules) and
       bm_TGtkTreeViewPrivate_has_rules)
 
 proc mark_rows_col_dirty*(a: var TGtkTreeViewPrivate): guint =
@@ -16706,7 +16705,7 @@ proc mark_rows_col_dirty*(a: var TGtkTreeViewPrivate): guint =
 proc set_mark_rows_col_dirty*(a: var TGtkTreeViewPrivate,
                               `mark_rows_col_dirty`: guint) =
   a.flag0 = a.flag0 or
-      ((`mark_rows_col_dirty` shl bp_TGtkTreeViewPrivate_mark_rows_col_dirty) and
+      (int16(`mark_rows_col_dirty` shl bp_TGtkTreeViewPrivate_mark_rows_col_dirty) and
       bm_TGtkTreeViewPrivate_mark_rows_col_dirty)
 
 proc enable_search*(a: var TGtkTreeViewPrivate): guint =
@@ -16715,7 +16714,7 @@ proc enable_search*(a: var TGtkTreeViewPrivate): guint =
 
 proc set_enable_search*(a: var TGtkTreeViewPrivate, `enable_search`: guint) =
   a.flag0 = a.flag0 or
-      ((`enable_search` shl bp_TGtkTreeViewPrivate_enable_search) and
+      (int16(`enable_search` shl bp_TGtkTreeViewPrivate_enable_search) and
       bm_TGtkTreeViewPrivate_enable_search)
 
 proc disable_popdown*(a: var TGtkTreeViewPrivate): guint =
@@ -16724,14 +16723,14 @@ proc disable_popdown*(a: var TGtkTreeViewPrivate): guint =
 
 proc set_disable_popdown*(a: var TGtkTreeViewPrivate, `disable_popdown`: guint) =
   a.flag0 = a.flag0 or
-      ((`disable_popdown` shl bp_TGtkTreeViewPrivate_disable_popdown) and
+      (int16(`disable_popdown` shl bp_TGtkTreeViewPrivate_disable_popdown) and
       bm_TGtkTreeViewPrivate_disable_popdown)
 
 proc GTK_TREE_VIEW_SET_FLAG*(tree_view: PGtkTreeView, flag: guint) =
-  tree_view . priv . flags = tree_view . priv . flags or int(flag)
+  tree_view . priv . flags = tree_view . priv . flags or (flag)
 
 proc GTK_TREE_VIEW_UNSET_FLAG*(tree_view: PGtkTreeView, flag: guint) =
-  tree_view . priv . flags = tree_view . priv . flags and not int(flag)
+  tree_view . priv . flags = tree_view . priv . flags and not (flag)
 
 proc GTK_TYPE_TREE_VIEW*(): GType =
   result = gtk_tree_view_get_type()
diff --git a/lib/base/gtk/libglade2.nim b/lib/base/gtk/libglade2.nim
index 18e76584b..cc90b0623 100644
--- a/lib/base/gtk/libglade2.nim
+++ b/lib/base/gtk/libglade2.nim
@@ -1,14 +1,13 @@
-import 
+import
   glib2, gtk2
 
-when defined(win32): 
-  {.define: gtkwin.}
-  const 
+when defined(win32):
+  const
     LibGladeLib = "libglade-2.0-0.dll"
-else: 
-  const 
+else:
+  const
     LibGladeLib = "libglade-2.0.so"
-type 
+type
   PLongint* = ptr int32
   PSmallInt* = ptr int16
   PByte* = ptr int8
@@ -17,11 +16,11 @@ type
   PDouble* = ptr float64
 
 proc glade_init*(){.cdecl, dynlib: LibGladeLib, importc: "glade_init".}
-proc glade_require*(TheLibrary: cstring){.cdecl, dynlib: LibGladeLib, 
+proc glade_require*(TheLibrary: cstring){.cdecl, dynlib: LibGladeLib,
     importc: "glade_require".}
-proc glade_provide*(TheLibrary: cstring){.cdecl, dynlib: LibGladeLib, 
+proc glade_provide*(TheLibrary: cstring){.cdecl, dynlib: LibGladeLib,
     importc: "glade_provide".}
-type 
+type
   PGladeXMLPrivate* = pointer
   PGladeXML* = ptr TGladeXML
   TGladeXML* = object of TGObject
@@ -31,9 +30,9 @@ type
   PGladeXMLClass* = ptr TGladeXMLClass
   TGladeXMLClass* = object of TGObjectClass
 
-  TGladeXMLConnectFunc* = proc (handler_name: cstring, anObject: PGObject, 
-                                signal_name: cstring, signal_data: cstring, 
-                                connect_object: PGObject, after: gboolean, 
+  TGladeXMLConnectFunc* = proc (handler_name: cstring, anObject: PGObject,
+                                signal_name: cstring, signal_data: cstring,
+                                connect_object: PGObject, after: gboolean,
                                 user_data: gpointer){.cdecl.}
 
 proc GLADE_TYPE_XML*(): GType
@@ -42,76 +41,76 @@ proc GLADE_XML_CLASS*(klass: pointer): PGladeXMLClass
 proc GLADE_IS_XML*(obj: pointer): gboolean
 proc GLADE_IS_XML_CLASS*(klass: pointer): gboolean
 proc GLADE_XML_GET_CLASS*(obj: pointer): PGladeXMLClass
-proc glade_xml_get_type*(): GType{.cdecl, dynlib: LibGladeLib, 
+proc glade_xml_get_type*(): GType{.cdecl, dynlib: LibGladeLib,
                                    importc: "glade_xml_get_type".}
 proc glade_xml_new*(fname: cstring, root: cstring, domain: cstring): PGladeXML{.
     cdecl, dynlib: LibGladeLib, importc: "glade_xml_new".}
-proc glade_xml_new_from_buffer*(buffer: cstring, size: int32, root: cstring, 
-                                domain: cstring): PGladeXML{.cdecl, 
+proc glade_xml_new_from_buffer*(buffer: cstring, size: int32, root: cstring,
+                                domain: cstring): PGladeXML{.cdecl,
     dynlib: LibGladeLib, importc: "glade_xml_new_from_buffer".}
-proc glade_xml_construct*(self: PGladeXML, fname: cstring, root: cstring, 
-                          domain: cstring): gboolean{.cdecl, 
+proc glade_xml_construct*(self: PGladeXML, fname: cstring, root: cstring,
+                          domain: cstring): gboolean{.cdecl,
     dynlib: LibGladeLib, importc: "glade_xml_construct".}
-proc glade_xml_signal_connect*(self: PGladeXML, handlername: cstring, 
-                               func: TGCallback){.cdecl, dynlib: LibGladeLib, 
+proc glade_xml_signal_connect*(self: PGladeXML, handlername: cstring,
+                               func: TGCallback){.cdecl, dynlib: LibGladeLib,
     importc: "glade_xml_signal_connect".}
-proc glade_xml_signal_connect_data*(self: PGladeXML, handlername: cstring, 
+proc glade_xml_signal_connect_data*(self: PGladeXML, handlername: cstring,
                                     func: TGCallback, user_data: gpointer){.
     cdecl, dynlib: LibGladeLib, importc: "glade_xml_signal_connect_data".}
-proc glade_xml_signal_autoconnect*(self: PGladeXML){.cdecl, dynlib: LibGladeLib, 
+proc glade_xml_signal_autoconnect*(self: PGladeXML){.cdecl, dynlib: LibGladeLib,
     importc: "glade_xml_signal_autoconnect".}
-proc glade_xml_signal_connect_full*(self: PGladeXML, handler_name: cstring, 
-                                    func: TGladeXMLConnectFunc, 
-                                    user_data: gpointer){.cdecl, 
+proc glade_xml_signal_connect_full*(self: PGladeXML, handler_name: cstring,
+                                    func: TGladeXMLConnectFunc,
+                                    user_data: gpointer){.cdecl,
     dynlib: LibGladeLib, importc: "glade_xml_signal_connect_full".}
-proc glade_xml_signal_autoconnect_full*(self: PGladeXML, 
-                                        func: TGladeXMLConnectFunc, 
-                                        user_data: gpointer){.cdecl, 
+proc glade_xml_signal_autoconnect_full*(self: PGladeXML,
+                                        func: TGladeXMLConnectFunc,
+                                        user_data: gpointer){.cdecl,
     dynlib: LibGladeLib, importc: "glade_xml_signal_autoconnect_full".}
-proc glade_xml_get_widget*(self: PGladeXML, name: cstring): PGtkWidget{.cdecl, 
+proc glade_xml_get_widget*(self: PGladeXML, name: cstring): PGtkWidget{.cdecl,
     dynlib: LibGladeLib, importc: "glade_xml_get_widget".}
 proc glade_xml_get_widget_prefix*(self: PGladeXML, name: cstring): PGList{.
     cdecl, dynlib: LibGladeLib, importc: "glade_xml_get_widget_prefix".}
-proc glade_xml_relative_file*(self: PGladeXML, filename: cstring): cstring{.cdecl, 
+proc glade_xml_relative_file*(self: PGladeXML, filename: cstring): cstring{.cdecl,
     dynlib: LibGladeLib, importc: "glade_xml_relative_file".}
-proc glade_get_widget_name*(widget: PGtkWidget): cstring{.cdecl, 
+proc glade_get_widget_name*(widget: PGtkWidget): cstring{.cdecl,
     dynlib: LibGladeLib, importc: "glade_get_widget_name".}
-proc glade_get_widget_tree*(widget: PGtkWidget): PGladeXML{.cdecl, 
+proc glade_get_widget_tree*(widget: PGtkWidget): PGladeXML{.cdecl,
     dynlib: LibGladeLib, importc: "glade_get_widget_tree".}
-type 
+type
   PGladeXMLCustomWidgetHandler* = ptr TGladeXMLCustomWidgetHandler
   TGladeXMLCustomWidgetHandler* = TGtkWidget
 
-proc glade_set_custom_handler*(handler: TGladeXMLCustomWidgetHandler, 
-                               user_data: gpointer){.cdecl, dynlib: LibGladeLib, 
+proc glade_set_custom_handler*(handler: TGladeXMLCustomWidgetHandler,
+                               user_data: gpointer){.cdecl, dynlib: LibGladeLib,
     importc: "glade_set_custom_handler".}
-proc glade_gnome_init*() = 
+proc glade_gnome_init*() =
   glade_init()
 
-proc glade_bonobo_init*() = 
+proc glade_bonobo_init*() =
   glade_init()
 
-proc glade_xml_new_with_domain*(fname: cstring, root: cstring, domain: cstring): PGladeXML = 
+proc glade_xml_new_with_domain*(fname: cstring, root: cstring, domain: cstring): PGladeXML =
   result = glade_xml_new(fname, root, domain)
 
-proc glade_xml_new_from_memory*(buffer: cstring, size: int32, root: cstring, 
-                                domain: cstring): PGladeXML = 
+proc glade_xml_new_from_memory*(buffer: cstring, size: int32, root: cstring,
+                                domain: cstring): PGladeXML =
   result = glade_xml_new_from_buffer(buffer, size, root, domain)
 
-proc GLADE_TYPE_XML*(): GType = 
+proc GLADE_TYPE_XML*(): GType =
   result = glade_xml_get_type()
 
-proc GLADE_XML*(obj: pointer): PGladeXML = 
+proc GLADE_XML*(obj: pointer): PGladeXML =
   result = cast[PGladeXML](G_TYPE_CHECK_INSTANCE_CAST(obj, GLADE_TYPE_XML()))
 
-proc GLADE_XML_CLASS*(klass: pointer): PGladeXMLClass = 
+proc GLADE_XML_CLASS*(klass: pointer): PGladeXMLClass =
   result = cast[PGladeXMLClass](G_TYPE_CHECK_CLASS_CAST(klass, GLADE_TYPE_XML()))
 
-proc GLADE_IS_XML*(obj: pointer): gboolean = 
+proc GLADE_IS_XML*(obj: pointer): gboolean =
   result = G_TYPE_CHECK_INSTANCE_TYPE(obj, GLADE_TYPE_XML())
 
-proc GLADE_IS_XML_CLASS*(klass: pointer): gboolean = 
+proc GLADE_IS_XML_CLASS*(klass: pointer): gboolean =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, GLADE_TYPE_XML())
 
-proc GLADE_XML_GET_CLASS*(obj: pointer): PGladeXMLClass = 
+proc GLADE_XML_GET_CLASS*(obj: pointer): PGladeXMLClass =
   result = cast[PGladeXMLClass](G_TYPE_INSTANCE_GET_CLASS(obj, GLADE_TYPE_XML()))
diff --git a/lib/base/gtk/pango.nim b/lib/base/gtk/pango.nim
index 142ab4aa2..363d02cd6 100644
--- a/lib/base/gtk/pango.nim
+++ b/lib/base/gtk/pango.nim
@@ -1,21 +1,18 @@
-import 
+import
   glib2
 
-{.define: PANGO_ENABLE_ENGINE.}
-{.define: PANGO_ENABLE_BACKEND.}
-when defined(win32): 
-  {.define: pangowin.}
-  const 
+when defined(win32):
+  const
     pangolib* = "libpango-1.0-0.dll"
-else: 
-  const 
+else:
+  const
     pangolib* = "libpango-1.0.so.0"
-type 
+type
   PPangoFont* = pointer
   PPangoFontFamily* = pointer
   PPangoFontset* = pointer
   PPangoFontMetrics* = pointer
-  PPangoFontFace* = pointer 
+  PPangoFontFace* = pointer
   PPangoFontMap* = pointer
   PPangoFontsetClass* = pointer
   PPangoFontFamilyClass* = pointer
@@ -50,18 +47,18 @@ type
   PPangoGlyph* = ptr TPangoGlyph
   TPangoGlyph* = guint32
   PPangoRectangle* = ptr TPangoRectangle
-  TPangoRectangle* {.final.} = object 
+  TPangoRectangle* {.final.} = object
     x*: int32
     y*: int32
     width*: int32
     height*: int32
 
   PPangoDirection* = ptr TPangoDirection
-  TPangoDirection* = enum 
-    PANGO_DIRECTION_LTR, PANGO_DIRECTION_RTL, PANGO_DIRECTION_TTB_LTR, 
+  TPangoDirection* = enum
+    PANGO_DIRECTION_LTR, PANGO_DIRECTION_RTL, PANGO_DIRECTION_TTB_LTR,
     PANGO_DIRECTION_TTB_RTL
   PPangoColor* = ptr TPangoColor
-  TPangoColor* {.final.} = object 
+  TPangoColor* {.final.} = object
     red*: guint16
     green*: guint16
     blue*: guint16
@@ -72,12 +69,12 @@ type
   TPangoUnderline* = int32
   PPangoAttribute* = ptr TPangoAttribute
   PPangoAttrClass* = ptr TPangoAttrClass
-  TPangoAttribute* {.final.} = object 
+  TPangoAttribute* {.final.} = object
     klass*: PPangoAttrClass
     start_index*: int
     end_index*: int
 
-  TPangoAttrClass* {.final.} = object 
+  TPangoAttrClass* {.final.} = object
     `type`*: TPangoAttrType
     copy*: proc (attr: PPangoAttribute): PPangoAttribute{.cdecl.}
     destroy*: proc (attr: PPangoAttribute){.cdecl.}
@@ -85,69 +82,69 @@ type
         cdecl.}
 
   PPangoAttrString* = ptr TPangoAttrString
-  TPangoAttrString* {.final.} = object 
+  TPangoAttrString* {.final.} = object
     attr*: TPangoAttribute
     value*: cstring
 
   PPangoAttrLanguage* = ptr TPangoAttrLanguage
-  TPangoAttrLanguage* {.final.} = object 
+  TPangoAttrLanguage* {.final.} = object
     attr*: TPangoAttribute
     value*: PPangoLanguage
 
   PPangoAttrInt* = ptr TPangoAttrInt
-  TPangoAttrInt* {.final.} = object 
+  TPangoAttrInt* {.final.} = object
     attr*: TPangoAttribute
     value*: int32
 
   PPangoAttrFloat* = ptr TPangoAttrFloat
-  TPangoAttrFloat* {.final.} = object 
+  TPangoAttrFloat* {.final.} = object
     attr*: TPangoAttribute
     value*: gdouble
 
   PPangoAttrColor* = ptr TPangoAttrColor
-  TPangoAttrColor* {.final.} = object 
+  TPangoAttrColor* {.final.} = object
     attr*: TPangoAttribute
     color*: TPangoColor
 
   PPangoAttrShape* = ptr TPangoAttrShape
-  TPangoAttrShape* {.final.} = object 
+  TPangoAttrShape* {.final.} = object
     attr*: TPangoAttribute
     ink_rect*: TPangoRectangle
     logical_rect*: TPangoRectangle
 
   PPangoAttrFontDesc* = ptr TPangoAttrFontDesc
-  TPangoAttrFontDesc* {.final.} = object 
+  TPangoAttrFontDesc* {.final.} = object
     attr*: TPangoAttribute
     desc*: PPangoFontDescription
 
   PPangoLogAttr* = ptr TPangoLogAttr
-  TPangoLogAttr* {.final.} = object 
+  TPangoLogAttr* {.final.} = object
     flag0*: guint16
 
   PPangoCoverageLevel* = ptr TPangoCoverageLevel
-  TPangoCoverageLevel* = enum 
-    PANGO_COVERAGE_NONE, PANGO_COVERAGE_FALLBACK, PANGO_COVERAGE_APPROXIMATE, 
+  TPangoCoverageLevel* = enum
+    PANGO_COVERAGE_NONE, PANGO_COVERAGE_FALLBACK, PANGO_COVERAGE_APPROXIMATE,
     PANGO_COVERAGE_EXACT
   PPangoBlockInfo* = ptr TPangoBlockInfo
-  TPangoBlockInfo* {.final.} = object 
+  TPangoBlockInfo* {.final.} = object
     data*: Pguchar
     level*: TPangoCoverageLevel
 
   PPangoCoverage* = ptr TPangoCoverage
-  TPangoCoverage* {.final.} = object 
+  TPangoCoverage* {.final.} = object
     ref_count*: int
     n_blocks*: int32
     data_size*: int32
     blocks*: PPangoBlockInfo
 
   PPangoEngineRange* = ptr TPangoEngineRange
-  TPangoEngineRange* {.final.} = object 
+  TPangoEngineRange* {.final.} = object
     start*: int32
     theEnd*: int32
     langs*: cstring
 
   PPangoEngineInfo* = ptr TPangoEngineInfo
-  TPangoEngineInfo* {.final.} = object 
+  TPangoEngineInfo* {.final.} = object
     id*: cstring
     engine_type*: cstring
     render_type*: cstring
@@ -155,28 +152,28 @@ type
     n_ranges*: gint
 
   PPangoEngine* = ptr TPangoEngine
-  TPangoEngine* {.final.} = object 
+  TPangoEngine* {.final.} = object
     id*: cstring
     `type`*: cstring
     length*: gint
 
-  TPangoEngineLangScriptBreak* = proc (text: cstring, len: int32, 
-                                       analysis: PPangoAnalysis, 
+  TPangoEngineLangScriptBreak* = proc (text: cstring, len: int32,
+                                       analysis: PPangoAnalysis,
                                        attrs: PPangoLogAttr, attrs_len: int32){.
       cdecl.}
   PPangoEngineLang* = ptr TPangoEngineLang
-  TPangoEngineLang* {.final.} = object 
+  TPangoEngineLang* {.final.} = object
     engine*: TPangoEngine
     script_break*: TPangoEngineLangScriptBreak
 
-  TPangoEngineShapeScript* = proc (font: PPangoFont, text: cstring, 
-                                   length: int32, analysis: PPangoAnalysis, 
+  TPangoEngineShapeScript* = proc (font: PPangoFont, text: cstring,
+                                   length: int32, analysis: PPangoAnalysis,
                                    glyphs: PPangoGlyphString){.cdecl.}
-  TPangoEngineShapeGetCoverage* = proc (font: PPangoFont, 
+  TPangoEngineShapeGetCoverage* = proc (font: PPangoFont,
                                         language: PPangoLanguage): PPangoCoverage{.
       cdecl.}
   PPangoEngineShape* = ptr TPangoEngineShape
-  TPangoEngineShape* {.final.} = object 
+  TPangoEngineShape* {.final.} = object
     engine*: TPangoEngine
     script_shape*: TPangoEngineShapeScript
     get_coverage*: TPangoEngineShapeGetCoverage
@@ -194,28 +191,28 @@ type
   PPangoGlyphUnit* = ptr TPangoGlyphUnit
   TPangoGlyphUnit* = gint32
   PPangoGlyphGeometry* = ptr TPangoGlyphGeometry
-  TPangoGlyphGeometry* {.final.} = object 
+  TPangoGlyphGeometry* {.final.} = object
     width*: TPangoGlyphUnit
     x_offset*: TPangoGlyphUnit
     y_offset*: TPangoGlyphUnit
 
   PPangoGlyphVisAttr* = ptr TPangoGlyphVisAttr
-  TPangoGlyphVisAttr* {.final.} = object 
+  TPangoGlyphVisAttr* {.final.} = object
     flag0*: int16
 
   PPangoGlyphInfo* = ptr TPangoGlyphInfo
-  TPangoGlyphInfo* {.final.} = object 
+  TPangoGlyphInfo* {.final.} = object
     glyph*: TPangoGlyph
     geometry*: TPangoGlyphGeometry
     attr*: TPangoGlyphVisAttr
 
-  TPangoGlyphString* {.final.} = object 
+  TPangoGlyphString* {.final.} = object
     num_glyphs*: gint
     glyphs*: PPangoGlyphInfo
     log_clusters*: Pgint
     space*: gint
 
-  TPangoAnalysis* {.final.} = object 
+  TPangoAnalysis* {.final.} = object
     shape_engine*: PPangoEngineShape
     lang_engine*: PPangoEngineLang
     font*: PPangoFont
@@ -223,35 +220,35 @@ type
     language*: PPangoLanguage
     extra_attrs*: PGSList
 
-  TPangoItem* {.final.} = object 
+  TPangoItem* {.final.} = object
     offset*: gint
     length*: gint
     num_chars*: gint
     analysis*: TPangoAnalysis
 
   PPangoAlignment* = ptr TPangoAlignment
-  TPangoAlignment* = enum 
+  TPangoAlignment* = enum
     PANGO_ALIGN_LEFT, PANGO_ALIGN_CENTER, PANGO_ALIGN_RIGHT
   PPangoWrapMode* = ptr TPangoWrapMode
-  TPangoWrapMode* = enum 
+  TPangoWrapMode* = enum
     PANGO_WRAP_WORD, PANGO_WRAP_CHAR
   PPangoLayoutLine* = ptr TPangoLayoutLine
-  TPangoLayoutLine* {.final.} = object 
+  TPangoLayoutLine* {.final.} = object
     layout*: PPangoLayout
     start_index*: gint
     length*: gint
     runs*: PGSList
 
   PPangoLayoutRun* = ptr TPangoLayoutRun
-  TPangoLayoutRun* {.final.} = object 
+  TPangoLayoutRun* {.final.} = object
     item*: PPangoItem
     glyphs*: PPangoGlyphString
 
   PPangoTabAlign* = ptr TPangoTabAlign
-  TPangoTabAlign* = enum 
+  TPangoTabAlign* = enum
     PANGO_TAB_LEFT
 
-const 
+const
   PANGO_SCALE* = 1024
 
 proc PANGO_PIXELS*(d: int): int
@@ -260,14 +257,14 @@ proc PANGO_DESCENT*(rect: TPangoRectangle): int32
 proc PANGO_LBEARING*(rect: TPangoRectangle): int32
 proc PANGO_RBEARING*(rect: TPangoRectangle): int32
 proc PANGO_TYPE_LANGUAGE*(): GType
-proc pango_language_get_type*(): GType{.cdecl, dynlib: pangolib, 
+proc pango_language_get_type*(): GType{.cdecl, dynlib: pangolib,
                                         importc: "pango_language_get_type".}
-proc pango_language_from_string*(language: cstring): PPangoLanguage{.cdecl, 
+proc pango_language_from_string*(language: cstring): PPangoLanguage{.cdecl,
     dynlib: pangolib, importc: "pango_language_from_string".}
 proc pango_language_to_string*(language: PPangoLanguage): cstring
 proc pango_language_matches*(language: PPangoLanguage, range_list: cstring): gboolean{.
     cdecl, dynlib: pangolib, importc: "pango_language_matches".}
-const 
+const
   PANGO_ATTR_INVALID* = 0
   PANGO_ATTR_LANGUAGE* = 1
   PANGO_ATTR_FAMILY* = 2
@@ -290,40 +287,40 @@ const
   PANGO_UNDERLINE_LOW* = 3
 
 proc PANGO_TYPE_COLOR*(): GType
-proc pango_color_get_type*(): GType{.cdecl, dynlib: pangolib, 
+proc pango_color_get_type*(): GType{.cdecl, dynlib: pangolib,
                                      importc: "pango_color_get_type".}
-proc pango_color_copy*(src: PPangoColor): PPangoColor{.cdecl, dynlib: pangolib, 
+proc pango_color_copy*(src: PPangoColor): PPangoColor{.cdecl, dynlib: pangolib,
     importc: "pango_color_copy".}
-proc pango_color_free*(color: PPangoColor){.cdecl, dynlib: pangolib, 
+proc pango_color_free*(color: PPangoColor){.cdecl, dynlib: pangolib,
     importc: "pango_color_free".}
-proc pango_color_parse*(color: PPangoColor, spec: cstring): gboolean{.cdecl, 
+proc pango_color_parse*(color: PPangoColor, spec: cstring): gboolean{.cdecl,
     dynlib: pangolib, importc: "pango_color_parse".}
 proc PANGO_TYPE_ATTR_LIST*(): GType
-proc pango_attr_type_register*(name: cstring): TPangoAttrType{.cdecl, 
+proc pango_attr_type_register*(name: cstring): TPangoAttrType{.cdecl,
     dynlib: pangolib, importc: "pango_attr_type_register".}
-proc pango_attribute_copy*(attr: PPangoAttribute): PPangoAttribute{.cdecl, 
+proc pango_attribute_copy*(attr: PPangoAttribute): PPangoAttribute{.cdecl,
     dynlib: pangolib, importc: "pango_attribute_copy".}
-proc pango_attribute_destroy*(attr: PPangoAttribute){.cdecl, dynlib: pangolib, 
+proc pango_attribute_destroy*(attr: PPangoAttribute){.cdecl, dynlib: pangolib,
     importc: "pango_attribute_destroy".}
 proc pango_attribute_equal*(attr1: PPangoAttribute, attr2: PPangoAttribute): gboolean{.
     cdecl, dynlib: pangolib, importc: "pango_attribute_equal".}
-proc pango_attr_language_new*(language: PPangoLanguage): PPangoAttribute{.cdecl, 
+proc pango_attr_language_new*(language: PPangoLanguage): PPangoAttribute{.cdecl,
     dynlib: pangolib, importc: "pango_attr_language_new".}
-proc pango_attr_family_new*(family: cstring): PPangoAttribute{.cdecl, 
+proc pango_attr_family_new*(family: cstring): PPangoAttribute{.cdecl,
     dynlib: pangolib, importc: "pango_attr_family_new".}
 proc pango_attr_foreground_new*(red: guint16, green: guint16, blue: guint16): PPangoAttribute{.
     cdecl, dynlib: pangolib, importc: "pango_attr_foreground_new".}
 proc pango_attr_background_new*(red: guint16, green: guint16, blue: guint16): PPangoAttribute{.
     cdecl, dynlib: pangolib, importc: "pango_attr_background_new".}
-proc pango_attr_size_new*(size: int32): PPangoAttribute{.cdecl, 
+proc pango_attr_size_new*(size: int32): PPangoAttribute{.cdecl,
     dynlib: pangolib, importc: "pango_attr_size_new".}
-proc pango_attr_style_new*(style: TPangoStyle): PPangoAttribute{.cdecl, 
+proc pango_attr_style_new*(style: TPangoStyle): PPangoAttribute{.cdecl,
     dynlib: pangolib, importc: "pango_attr_style_new".}
-proc pango_attr_weight_new*(weight: TPangoWeight): PPangoAttribute{.cdecl, 
+proc pango_attr_weight_new*(weight: TPangoWeight): PPangoAttribute{.cdecl,
     dynlib: pangolib, importc: "pango_attr_weight_new".}
-proc pango_attr_variant_new*(variant: TPangoVariant): PPangoAttribute{.cdecl, 
+proc pango_attr_variant_new*(variant: TPangoVariant): PPangoAttribute{.cdecl,
     dynlib: pangolib, importc: "pango_attr_variant_new".}
-proc pango_attr_stretch_new*(stretch: TPangoStretch): PPangoAttribute{.cdecl, 
+proc pango_attr_stretch_new*(stretch: TPangoStretch): PPangoAttribute{.cdecl,
     dynlib: pangolib, importc: "pango_attr_stretch_new".}
 proc pango_attr_font_desc_new*(desc: PPangoFontDescription): PPangoAttribute{.
     cdecl, dynlib: pangolib, importc: "pango_attr_font_desc_new".}
@@ -331,22 +328,22 @@ proc pango_attr_underline_new*(underline: TPangoUnderline): PPangoAttribute{.
     cdecl, dynlib: pangolib, importc: "pango_attr_underline_new".}
 proc pango_attr_strikethrough_new*(strikethrough: gboolean): PPangoAttribute{.
     cdecl, dynlib: pangolib, importc: "pango_attr_strikethrough_new".}
-proc pango_attr_rise_new*(rise: int32): PPangoAttribute{.cdecl, 
+proc pango_attr_rise_new*(rise: int32): PPangoAttribute{.cdecl,
     dynlib: pangolib, importc: "pango_attr_rise_new".}
-proc pango_attr_shape_new*(ink_rect: PPangoRectangle, 
+proc pango_attr_shape_new*(ink_rect: PPangoRectangle,
                            logical_rect: PPangoRectangle): PPangoAttribute{.
     cdecl, dynlib: pangolib, importc: "pango_attr_shape_new".}
-proc pango_attr_scale_new*(scale_factor: gdouble): PPangoAttribute{.cdecl, 
+proc pango_attr_scale_new*(scale_factor: gdouble): PPangoAttribute{.cdecl,
     dynlib: pangolib, importc: "pango_attr_scale_new".}
-proc pango_attr_list_get_type*(): GType{.cdecl, dynlib: pangolib, 
+proc pango_attr_list_get_type*(): GType{.cdecl, dynlib: pangolib,
     importc: "pango_attr_list_get_type".}
-proc pango_attr_list_new*(): PPangoAttrList{.cdecl, dynlib: pangolib, 
+proc pango_attr_list_new*(): PPangoAttrList{.cdecl, dynlib: pangolib,
     importc: "pango_attr_list_new".}
-proc pango_attr_list_ref*(list: PPangoAttrList){.cdecl, dynlib: pangolib, 
+proc pango_attr_list_ref*(list: PPangoAttrList){.cdecl, dynlib: pangolib,
     importc: "pango_attr_list_ref".}
-proc pango_attr_list_unref*(list: PPangoAttrList){.cdecl, dynlib: pangolib, 
+proc pango_attr_list_unref*(list: PPangoAttrList){.cdecl, dynlib: pangolib,
     importc: "pango_attr_list_unref".}
-proc pango_attr_list_copy*(list: PPangoAttrList): PPangoAttrList{.cdecl, 
+proc pango_attr_list_copy*(list: PPangoAttrList): PPangoAttrList{.cdecl,
     dynlib: pangolib, importc: "pango_attr_list_copy".}
 proc pango_attr_list_insert*(list: PPangoAttrList, attr: PPangoAttribute){.
     cdecl, dynlib: pangolib, importc: "pango_attr_list_insert".}
@@ -354,53 +351,53 @@ proc pango_attr_list_insert_before*(list: PPangoAttrList, attr: PPangoAttribute)
     cdecl, dynlib: pangolib, importc: "pango_attr_list_insert_before".}
 proc pango_attr_list_change*(list: PPangoAttrList, attr: PPangoAttribute){.
     cdecl, dynlib: pangolib, importc: "pango_attr_list_change".}
-proc pango_attr_list_splice*(list: PPangoAttrList, other: PPangoAttrList, 
-                             pos: gint, len: gint){.cdecl, dynlib: pangolib, 
+proc pango_attr_list_splice*(list: PPangoAttrList, other: PPangoAttrList,
+                             pos: gint, len: gint){.cdecl, dynlib: pangolib,
     importc: "pango_attr_list_splice".}
 proc pango_attr_list_get_iterator*(list: PPangoAttrList): PPangoAttrIterator{.
     cdecl, dynlib: pangolib, importc: "pango_attr_list_get_iterator".}
-proc pango_attr_iterator_range*(`iterator`: PPangoAttrIterator, start: Pgint, 
-                                theEnd: Pgint){.cdecl, dynlib: pangolib, 
+proc pango_attr_iterator_range*(`iterator`: PPangoAttrIterator, start: Pgint,
+                                theEnd: Pgint){.cdecl, dynlib: pangolib,
     importc: "pango_attr_iterator_range".}
-proc pango_attr_iterator_next*(`iterator`: PPangoAttrIterator): gboolean{.cdecl, 
+proc pango_attr_iterator_next*(`iterator`: PPangoAttrIterator): gboolean{.cdecl,
     dynlib: pangolib, importc: "pango_attr_iterator_next".}
 proc pango_attr_iterator_copy*(`iterator`: PPangoAttrIterator): PPangoAttrIterator{.
     cdecl, dynlib: pangolib, importc: "pango_attr_iterator_copy".}
-proc pango_attr_iterator_destroy*(`iterator`: PPangoAttrIterator){.cdecl, 
+proc pango_attr_iterator_destroy*(`iterator`: PPangoAttrIterator){.cdecl,
     dynlib: pangolib, importc: "pango_attr_iterator_destroy".}
-proc pango_attr_iterator_get*(`iterator`: PPangoAttrIterator, 
-                              `type`: TPangoAttrType): PPangoAttribute{.cdecl, 
+proc pango_attr_iterator_get*(`iterator`: PPangoAttrIterator,
+                              `type`: TPangoAttrType): PPangoAttribute{.cdecl,
     dynlib: pangolib, importc: "pango_attr_iterator_get".}
-proc pango_attr_iterator_get_font*(`iterator`: PPangoAttrIterator, 
-                                   desc: PPangoFontDescription, 
-                                   language: var PPangoLanguage, 
-                                   extra_attrs: PPGSList){.cdecl, 
+proc pango_attr_iterator_get_font*(`iterator`: PPangoAttrIterator,
+                                   desc: PPangoFontDescription,
+                                   language: var PPangoLanguage,
+                                   extra_attrs: PPGSList){.cdecl,
     dynlib: pangolib, importc: "pango_attr_iterator_get_font".}
-proc pango_parse_markup*(markup_text: cstring, length: int32, 
-                         accel_marker: gunichar, attr_list: var PPangoAttrList, 
+proc pango_parse_markup*(markup_text: cstring, length: int32,
+                         accel_marker: gunichar, attr_list: var PPangoAttrList,
                          text: PPchar, accel_char: Pgunichar, error: pointer): gboolean{.
     cdecl, dynlib: pangolib, importc: "pango_parse_markup".}
-const 
-  bm_TPangoLogAttr_is_line_break* = 0x00000001
-  bp_TPangoLogAttr_is_line_break* = 0
-  bm_TPangoLogAttr_is_mandatory_break* = 0x00000002
-  bp_TPangoLogAttr_is_mandatory_break* = 1
-  bm_TPangoLogAttr_is_char_break* = 0x00000004
-  bp_TPangoLogAttr_is_char_break* = 2
-  bm_TPangoLogAttr_is_white* = 0x00000008
-  bp_TPangoLogAttr_is_white* = 3
-  bm_TPangoLogAttr_is_cursor_position* = 0x00000010
-  bp_TPangoLogAttr_is_cursor_position* = 4
-  bm_TPangoLogAttr_is_word_start* = 0x00000020
-  bp_TPangoLogAttr_is_word_start* = 5
-  bm_TPangoLogAttr_is_word_end* = 0x00000040
-  bp_TPangoLogAttr_is_word_end* = 6
-  bm_TPangoLogAttr_is_sentence_boundary* = 0x00000080
-  bp_TPangoLogAttr_is_sentence_boundary* = 7
-  bm_TPangoLogAttr_is_sentence_start* = 0x00000100
-  bp_TPangoLogAttr_is_sentence_start* = 8
-  bm_TPangoLogAttr_is_sentence_end* = 0x00000200
-  bp_TPangoLogAttr_is_sentence_end* = 9
+const
+  bm_TPangoLogAttr_is_line_break* = 0x00000001'i16
+  bp_TPangoLogAttr_is_line_break* = 0'i16
+  bm_TPangoLogAttr_is_mandatory_break* = 0x00000002'i16
+  bp_TPangoLogAttr_is_mandatory_break* = 1'i16
+  bm_TPangoLogAttr_is_char_break* = 0x00000004'i16
+  bp_TPangoLogAttr_is_char_break* = 2'i16
+  bm_TPangoLogAttr_is_white* = 0x00000008'i16
+  bp_TPangoLogAttr_is_white* = 3'i16
+  bm_TPangoLogAttr_is_cursor_position* = 0x00000010'i16
+  bp_TPangoLogAttr_is_cursor_position* = 4'i16
+  bm_TPangoLogAttr_is_word_start* = 0x00000020'i16
+  bp_TPangoLogAttr_is_word_start* = 5'i16
+  bm_TPangoLogAttr_is_word_end* = 0x00000040'i16
+  bp_TPangoLogAttr_is_word_end* = 6'i16
+  bm_TPangoLogAttr_is_sentence_boundary* = 0x00000080'i16
+  bp_TPangoLogAttr_is_sentence_boundary* = 7'i16
+  bm_TPangoLogAttr_is_sentence_start* = 0x00000100'i16
+  bp_TPangoLogAttr_is_sentence_start* = 8'i16
+  bm_TPangoLogAttr_is_sentence_end* = 0x00000200'i16
+  bp_TPangoLogAttr_is_sentence_end* = 9'i16
 
 proc is_line_break*(a: var TPangoLogAttr): guint
 proc set_is_line_break*(a: var TPangoLogAttr, `is_line_break`: guint)
@@ -417,22 +414,22 @@ proc set_is_word_start*(a: var TPangoLogAttr, `is_word_start`: guint)
 proc is_word_end*(a: var TPangoLogAttr): guint
 proc set_is_word_end*(a: var TPangoLogAttr, `is_word_end`: guint)
 proc is_sentence_boundary*(a: var TPangoLogAttr): guint
-proc set_is_sentence_boundary*(a: var TPangoLogAttr, 
+proc set_is_sentence_boundary*(a: var TPangoLogAttr,
                                `is_sentence_boundary`: guint)
 proc is_sentence_start*(a: var TPangoLogAttr): guint
 proc set_is_sentence_start*(a: var TPangoLogAttr, `is_sentence_start`: guint)
 proc is_sentence_end*(a: var TPangoLogAttr): guint
 proc set_is_sentence_end*(a: var TPangoLogAttr, `is_sentence_end`: guint)
-proc pango_break*(text: cstring, length: int32, analysis: PPangoAnalysis, 
-                  attrs: PPangoLogAttr, attrs_len: int32){.cdecl, 
+proc pango_break*(text: cstring, length: int32, analysis: PPangoAnalysis,
+                  attrs: PPangoLogAttr, attrs_len: int32){.cdecl,
     dynlib: pangolib, importc: "pango_break".}
-proc pango_find_paragraph_boundary*(text: cstring, length: gint, 
-                                    paragraph_delimiter_index: Pgint, 
-                                    next_paragraph_start: Pgint){.cdecl, 
+proc pango_find_paragraph_boundary*(text: cstring, length: gint,
+                                    paragraph_delimiter_index: Pgint,
+                                    next_paragraph_start: Pgint){.cdecl,
     dynlib: pangolib, importc: "pango_find_paragraph_boundary".}
-proc pango_get_log_attrs*(text: cstring, length: int32, level: int32, 
-                          language: PPangoLanguage, log_attrs: PPangoLogAttr, 
-                          attrs_len: int32){.cdecl, dynlib: pangolib, 
+proc pango_get_log_attrs*(text: cstring, length: int32, level: int32,
+                          language: PPangoLanguage, log_attrs: PPangoLogAttr,
+                          attrs_len: int32){.cdecl, dynlib: pangolib,
     importc: "pango_get_log_attrs".}
 proc PANGO_TYPE_CONTEXT*(): GType
 proc PANGO_CONTEXT*(anObject: pointer): PPangoContext
@@ -440,71 +437,71 @@ proc PANGO_CONTEXT_CLASS*(klass: pointer): PPangoContextClass
 proc PANGO_IS_CONTEXT*(anObject: pointer): bool
 proc PANGO_IS_CONTEXT_CLASS*(klass: pointer): bool
 proc PANGO_CONTEXT_GET_CLASS*(obj: PPangoContext): PPangoContextClass
-proc pango_context_get_type*(): GType{.cdecl, dynlib: pangolib, 
+proc pango_context_get_type*(): GType{.cdecl, dynlib: pangolib,
                                        importc: "pango_context_get_type".}
-proc pango_context_list_families*(context: PPangoContext, 
-                                  families: openarray[ptr PPangoFontFamily]){.cdecl, 
+proc pango_context_list_families*(context: PPangoContext,
+                                  families: openarray[ptr PPangoFontFamily]){.cdecl,
     dynlib: pangolib, importc: "pango_context_list_families".}
-proc pango_context_load_font*(context: PPangoContext, 
-                              desc: PPangoFontDescription): PPangoFont{.cdecl, 
+proc pango_context_load_font*(context: PPangoContext,
+                              desc: PPangoFontDescription): PPangoFont{.cdecl,
     dynlib: pangolib, importc: "pango_context_load_font".}
-proc pango_context_load_fontset*(context: PPangoContext, 
-                                 desc: PPangoFontDescription, 
+proc pango_context_load_fontset*(context: PPangoContext,
+                                 desc: PPangoFontDescription,
                                  language: PPangoLanguage): PPangoFontset{.
     cdecl, dynlib: pangolib, importc: "pango_context_load_fontset".}
-proc pango_context_get_metrics*(context: PPangoContext, 
-                                desc: PPangoFontDescription, 
+proc pango_context_get_metrics*(context: PPangoContext,
+                                desc: PPangoFontDescription,
                                 language: PPangoLanguage): PPangoFontMetrics{.
     cdecl, dynlib: pangolib, importc: "pango_context_get_metrics".}
-proc pango_context_set_font_description*(context: PPangoContext, 
-    desc: PPangoFontDescription){.cdecl, dynlib: pangolib, 
+proc pango_context_set_font_description*(context: PPangoContext,
+    desc: PPangoFontDescription){.cdecl, dynlib: pangolib,
                                   importc: "pango_context_set_font_description".}
 proc pango_context_get_font_description*(context: PPangoContext): PPangoFontDescription{.
     cdecl, dynlib: pangolib, importc: "pango_context_get_font_description".}
-proc pango_context_get_language*(context: PPangoContext): PPangoLanguage{.cdecl, 
+proc pango_context_get_language*(context: PPangoContext): PPangoLanguage{.cdecl,
     dynlib: pangolib, importc: "pango_context_get_language".}
-proc pango_context_set_language*(context: PPangoContext, 
-                                 language: PPangoLanguage){.cdecl, 
+proc pango_context_set_language*(context: PPangoContext,
+                                 language: PPangoLanguage){.cdecl,
     dynlib: pangolib, importc: "pango_context_set_language".}
-proc pango_context_set_base_dir*(context: PPangoContext, 
-                                 direction: TPangoDirection){.cdecl, 
+proc pango_context_set_base_dir*(context: PPangoContext,
+                                 direction: TPangoDirection){.cdecl,
     dynlib: pangolib, importc: "pango_context_set_base_dir".}
 proc pango_context_get_base_dir*(context: PPangoContext): TPangoDirection{.
     cdecl, dynlib: pangolib, importc: "pango_context_get_base_dir".}
-proc pango_itemize*(context: PPangoContext, text: cstring, start_index: int32, 
-                    length: int32, attrs: PPangoAttrList, 
-                    cached_iter: PPangoAttrIterator): PGList{.cdecl, 
+proc pango_itemize*(context: PPangoContext, text: cstring, start_index: int32,
+                    length: int32, attrs: PPangoAttrList,
+                    cached_iter: PPangoAttrIterator): PGList{.cdecl,
     dynlib: pangolib, importc: "pango_itemize".}
-proc pango_coverage_new*(): PPangoCoverage{.cdecl, dynlib: pangolib, 
+proc pango_coverage_new*(): PPangoCoverage{.cdecl, dynlib: pangolib,
     importc: "pango_coverage_new".}
-proc pango_coverage_ref*(coverage: PPangoCoverage): PPangoCoverage{.cdecl, 
+proc pango_coverage_ref*(coverage: PPangoCoverage): PPangoCoverage{.cdecl,
     dynlib: pangolib, importc: "pango_coverage_ref".}
-proc pango_coverage_unref*(coverage: PPangoCoverage){.cdecl, dynlib: pangolib, 
+proc pango_coverage_unref*(coverage: PPangoCoverage){.cdecl, dynlib: pangolib,
     importc: "pango_coverage_unref".}
-proc pango_coverage_copy*(coverage: PPangoCoverage): PPangoCoverage{.cdecl, 
+proc pango_coverage_copy*(coverage: PPangoCoverage): PPangoCoverage{.cdecl,
     dynlib: pangolib, importc: "pango_coverage_copy".}
 proc pango_coverage_get*(coverage: PPangoCoverage, index: int32): TPangoCoverageLevel{.
     cdecl, dynlib: pangolib, importc: "pango_coverage_get".}
-proc pango_coverage_set*(coverage: PPangoCoverage, index: int32, 
-                         level: TPangoCoverageLevel){.cdecl, dynlib: pangolib, 
+proc pango_coverage_set*(coverage: PPangoCoverage, index: int32,
+                         level: TPangoCoverageLevel){.cdecl, dynlib: pangolib,
     importc: "pango_coverage_set".}
 proc pango_coverage_max*(coverage: PPangoCoverage, other: PPangoCoverage){.
     cdecl, dynlib: pangolib, importc: "pango_coverage_max".}
-proc pango_coverage_to_bytes*(coverage: PPangoCoverage, bytes: PPguchar, 
-                              n_bytes: var int32){.cdecl, dynlib: pangolib, 
+proc pango_coverage_to_bytes*(coverage: PPangoCoverage, bytes: PPguchar,
+                              n_bytes: var int32){.cdecl, dynlib: pangolib,
     importc: "pango_coverage_to_bytes".}
 proc pango_coverage_from_bytes*(bytes: Pguchar, n_bytes: int32): PPangoCoverage{.
     cdecl, dynlib: pangolib, importc: "pango_coverage_from_bytes".}
 proc PANGO_TYPE_FONTSET*(): GType
 proc PANGO_FONTSET*(anObject: pointer): PPangoFontset
 proc PANGO_IS_FONTSET*(anObject: pointer): bool
-proc pango_fontset_get_type*(): GType{.cdecl, dynlib: pangolib, 
+proc pango_fontset_get_type*(): GType{.cdecl, dynlib: pangolib,
                                        importc: "pango_fontset_get_type".}
 proc pango_fontset_get_font*(fontset: PPangoFontset, wc: guint): PPangoFont{.
     cdecl, dynlib: pangolib, importc: "pango_fontset_get_font".}
 proc pango_fontset_get_metrics*(fontset: PPangoFontset): PPangoFontMetrics{.
     cdecl, dynlib: pangolib, importc: "pango_fontset_get_metrics".}
-const 
+const
   PANGO_STYLE_NORMAL* = 0
   PANGO_STYLE_OBLIQUE* = 1
   PANGO_STYLE_ITALIC* = 2
@@ -540,74 +537,74 @@ const
   PANGO_SCALE_XX_LARGE* = 1.728
 
 proc PANGO_TYPE_FONT_DESCRIPTION*(): GType
-proc pango_font_description_get_type*(): GType{.cdecl, dynlib: pangolib, 
+proc pango_font_description_get_type*(): GType{.cdecl, dynlib: pangolib,
     importc: "pango_font_description_get_type".}
-proc pango_font_description_new*(): PPangoFontDescription{.cdecl, 
+proc pango_font_description_new*(): PPangoFontDescription{.cdecl,
     dynlib: pangolib, importc: "pango_font_description_new".}
 proc pango_font_description_copy*(desc: PPangoFontDescription): PPangoFontDescription{.
     cdecl, dynlib: pangolib, importc: "pango_font_description_copy".}
 proc pango_font_description_copy_static*(desc: PPangoFontDescription): PPangoFontDescription{.
     cdecl, dynlib: pangolib, importc: "pango_font_description_copy_static".}
-proc pango_font_description_hash*(desc: PPangoFontDescription): guint{.cdecl, 
+proc pango_font_description_hash*(desc: PPangoFontDescription): guint{.cdecl,
     dynlib: pangolib, importc: "pango_font_description_hash".}
-proc pango_font_description_equal*(desc1: PPangoFontDescription, 
+proc pango_font_description_equal*(desc1: PPangoFontDescription,
                                    desc2: PPangoFontDescription): gboolean{.
     cdecl, dynlib: pangolib, importc: "pango_font_description_equal".}
-proc pango_font_description_free*(desc: PPangoFontDescription){.cdecl, 
+proc pango_font_description_free*(desc: PPangoFontDescription){.cdecl,
     dynlib: pangolib, importc: "pango_font_description_free".}
-proc pango_font_descriptions_free*(descs: var PPangoFontDescription, 
-                                   n_descs: int32){.cdecl, dynlib: pangolib, 
+proc pango_font_descriptions_free*(descs: var PPangoFontDescription,
+                                   n_descs: int32){.cdecl, dynlib: pangolib,
     importc: "pango_font_descriptions_free".}
-proc pango_font_description_set_family*(desc: PPangoFontDescription, 
-                                        family: cstring){.cdecl, 
+proc pango_font_description_set_family*(desc: PPangoFontDescription,
+                                        family: cstring){.cdecl,
     dynlib: pangolib, importc: "pango_font_description_set_family".}
-proc pango_font_description_set_family_static*(desc: PPangoFontDescription, 
-    family: cstring){.cdecl, dynlib: pangolib, 
+proc pango_font_description_set_family_static*(desc: PPangoFontDescription,
+    family: cstring){.cdecl, dynlib: pangolib,
                       importc: "pango_font_description_set_family_static".}
 proc pango_font_description_get_family*(desc: PPangoFontDescription): cstring{.
     cdecl, dynlib: pangolib, importc: "pango_font_description_get_family".}
-proc pango_font_description_set_style*(desc: PPangoFontDescription, 
-                                       style: TPangoStyle){.cdecl, 
+proc pango_font_description_set_style*(desc: PPangoFontDescription,
+                                       style: TPangoStyle){.cdecl,
     dynlib: pangolib, importc: "pango_font_description_set_style".}
 proc pango_font_description_get_style*(desc: PPangoFontDescription): TPangoStyle{.
     cdecl, dynlib: pangolib, importc: "pango_font_description_get_style".}
-proc pango_font_description_set_variant*(desc: PPangoFontDescription, 
-    variant: TPangoVariant){.cdecl, dynlib: pangolib, 
+proc pango_font_description_set_variant*(desc: PPangoFontDescription,
+    variant: TPangoVariant){.cdecl, dynlib: pangolib,
                              importc: "pango_font_description_set_variant".}
 proc pango_font_description_get_variant*(desc: PPangoFontDescription): TPangoVariant{.
     cdecl, dynlib: pangolib, importc: "pango_font_description_get_variant".}
-proc pango_font_description_set_weight*(desc: PPangoFontDescription, 
-                                        weight: TPangoWeight){.cdecl, 
+proc pango_font_description_set_weight*(desc: PPangoFontDescription,
+                                        weight: TPangoWeight){.cdecl,
     dynlib: pangolib, importc: "pango_font_description_set_weight".}
 proc pango_font_description_get_weight*(desc: PPangoFontDescription): TPangoWeight{.
     cdecl, dynlib: pangolib, importc: "pango_font_description_get_weight".}
-proc pango_font_description_set_stretch*(desc: PPangoFontDescription, 
-    stretch: TPangoStretch){.cdecl, dynlib: pangolib, 
+proc pango_font_description_set_stretch*(desc: PPangoFontDescription,
+    stretch: TPangoStretch){.cdecl, dynlib: pangolib,
                              importc: "pango_font_description_set_stretch".}
 proc pango_font_description_get_stretch*(desc: PPangoFontDescription): TPangoStretch{.
     cdecl, dynlib: pangolib, importc: "pango_font_description_get_stretch".}
 proc pango_font_description_set_size*(desc: PPangoFontDescription, size: gint){.
     cdecl, dynlib: pangolib, importc: "pango_font_description_set_size".}
-proc pango_font_description_get_size*(desc: PPangoFontDescription): gint{.cdecl, 
+proc pango_font_description_get_size*(desc: PPangoFontDescription): gint{.cdecl,
     dynlib: pangolib, importc: "pango_font_description_get_size".}
-proc pango_font_description_set_absolute_size*(desc: PPangoFontDescription, 
-    size: float64){.cdecl, dynlib: pangolib, 
+proc pango_font_description_set_absolute_size*(desc: PPangoFontDescription,
+    size: float64){.cdecl, dynlib: pangolib,
                     importc: "pango_font_description_set_absolute_size".}
-proc pango_font_description_get_size_is_absolute*(desc: PPangoFontDescription, 
+proc pango_font_description_get_size_is_absolute*(desc: PPangoFontDescription,
     size: float64): gboolean{.cdecl, dynlib: pangolib, importc: "pango_font_description_get_size_is_absolute".}
 proc pango_font_description_get_set_fields*(desc: PPangoFontDescription): TPangoFontMask{.
     cdecl, dynlib: pangolib, importc: "pango_font_description_get_set_fields".}
-proc pango_font_description_unset_fields*(desc: PPangoFontDescription, 
-    to_unset: TPangoFontMask){.cdecl, dynlib: pangolib, 
+proc pango_font_description_unset_fields*(desc: PPangoFontDescription,
+    to_unset: TPangoFontMask){.cdecl, dynlib: pangolib,
                                importc: "pango_font_description_unset_fields".}
-proc pango_font_description_merge*(desc: PPangoFontDescription, 
-                                   desc_to_merge: PPangoFontDescription, 
-                                   replace_existing: gboolean){.cdecl, 
+proc pango_font_description_merge*(desc: PPangoFontDescription,
+                                   desc_to_merge: PPangoFontDescription,
+                                   replace_existing: gboolean){.cdecl,
     dynlib: pangolib, importc: "pango_font_description_merge".}
-proc pango_font_description_merge_static*(desc: PPangoFontDescription, 
-    desc_to_merge: PPangoFontDescription, replace_existing: gboolean){.cdecl, 
+proc pango_font_description_merge_static*(desc: PPangoFontDescription,
+    desc_to_merge: PPangoFontDescription, replace_existing: gboolean){.cdecl,
     dynlib: pangolib, importc: "pango_font_description_merge_static".}
-proc pango_font_description_better_match*(desc: PPangoFontDescription, 
+proc pango_font_description_better_match*(desc: PPangoFontDescription,
     old_match: PPangoFontDescription, new_match: PPangoFontDescription): gboolean{.
     cdecl, dynlib: pangolib, importc: "pango_font_description_better_match".}
 proc pango_font_description_from_string*(str: cstring): PPangoFontDescription{.
@@ -617,125 +614,125 @@ proc pango_font_description_to_string*(desc: PPangoFontDescription): cstring{.
 proc pango_font_description_to_filename*(desc: PPangoFontDescription): cstring{.
     cdecl, dynlib: pangolib, importc: "pango_font_description_to_filename".}
 proc PANGO_TYPE_FONT_METRICS*(): GType
-proc pango_font_metrics_get_type*(): GType{.cdecl, dynlib: pangolib, 
+proc pango_font_metrics_get_type*(): GType{.cdecl, dynlib: pangolib,
     importc: "pango_font_metrics_get_type".}
 proc pango_font_metrics_ref*(metrics: PPangoFontMetrics): PPangoFontMetrics{.
     cdecl, dynlib: pangolib, importc: "pango_font_metrics_ref".}
-proc pango_font_metrics_unref*(metrics: PPangoFontMetrics){.cdecl, 
+proc pango_font_metrics_unref*(metrics: PPangoFontMetrics){.cdecl,
     dynlib: pangolib, importc: "pango_font_metrics_unref".}
-proc pango_font_metrics_get_ascent*(metrics: PPangoFontMetrics): int32{.cdecl, 
+proc pango_font_metrics_get_ascent*(metrics: PPangoFontMetrics): int32{.cdecl,
     dynlib: pangolib, importc: "pango_font_metrics_get_ascent".}
-proc pango_font_metrics_get_descent*(metrics: PPangoFontMetrics): int32{.cdecl, 
+proc pango_font_metrics_get_descent*(metrics: PPangoFontMetrics): int32{.cdecl,
     dynlib: pangolib, importc: "pango_font_metrics_get_descent".}
 proc pango_font_metrics_get_approximate_char_width*(metrics: PPangoFontMetrics): int32{.
-    cdecl, dynlib: pangolib, 
+    cdecl, dynlib: pangolib,
     importc: "pango_font_metrics_get_approximate_char_width".}
 proc pango_font_metrics_get_approximate_digit_width*(metrics: PPangoFontMetrics): int32{.
-    cdecl, dynlib: pangolib, 
+    cdecl, dynlib: pangolib,
     importc: "pango_font_metrics_get_approximate_digit_width".}
 proc PANGO_TYPE_FONT_FAMILY*(): GType
 proc PANGO_FONT_FAMILY*(anObject: Pointer): PPangoFontFamily
 proc PANGO_IS_FONT_FAMILY*(anObject: Pointer): bool
-proc pango_font_family_get_type*(): GType{.cdecl, dynlib: pangolib, 
+proc pango_font_family_get_type*(): GType{.cdecl, dynlib: pangolib,
     importc: "pango_font_family_get_type".}
-proc pango_font_family_list_faces*(family: PPangoFontFamily, 
+proc pango_font_family_list_faces*(family: PPangoFontFamily,
                                    faces: var openarray[ptr PPangoFontFace]){.
     cdecl, dynlib: pangolib, importc: "pango_font_family_list_faces".}
-proc pango_font_family_get_name*(family: PPangoFontFamily): cstring{.cdecl, 
+proc pango_font_family_get_name*(family: PPangoFontFamily): cstring{.cdecl,
     dynlib: pangolib, importc: "pango_font_family_get_name".}
 proc PANGO_TYPE_FONT_FACE*(): GType
 proc PANGO_FONT_FACE*(anObject: pointer): PPangoFontFace
 proc PANGO_IS_FONT_FACE*(anObject: pointer): bool
-proc pango_font_face_get_type*(): GType{.cdecl, dynlib: pangolib, 
+proc pango_font_face_get_type*(): GType{.cdecl, dynlib: pangolib,
     importc: "pango_font_face_get_type".}
 proc pango_font_face_describe*(face: PPangoFontFace): PPangoFontDescription{.
     cdecl, dynlib: pangolib, importc: "pango_font_face_describe".}
-proc pango_font_face_get_face_name*(face: PPangoFontFace): cstring{.cdecl, 
+proc pango_font_face_get_face_name*(face: PPangoFontFace): cstring{.cdecl,
     dynlib: pangolib, importc: "pango_font_face_get_face_name".}
 proc PANGO_TYPE_FONT*(): GType
 proc PANGO_FONT*(anObject: pointer): PPangoFont
 proc PANGO_IS_FONT*(anObject: pointer): bool
-proc pango_font_get_type*(): GType{.cdecl, dynlib: pangolib, 
+proc pango_font_get_type*(): GType{.cdecl, dynlib: pangolib,
                                     importc: "pango_font_get_type".}
-proc pango_font_describe*(font: PPangoFont): PPangoFontDescription{.cdecl, 
+proc pango_font_describe*(font: PPangoFont): PPangoFontDescription{.cdecl,
     dynlib: pangolib, importc: "pango_font_describe".}
 proc pango_font_get_coverage*(font: PPangoFont, language: PPangoLanguage): PPangoCoverage{.
     cdecl, dynlib: pangolib, importc: "pango_font_get_coverage".}
-proc pango_font_find_shaper*(font: PPangoFont, language: PPangoLanguage, 
-                             ch: guint32): PPangoEngineShape{.cdecl, 
+proc pango_font_find_shaper*(font: PPangoFont, language: PPangoLanguage,
+                             ch: guint32): PPangoEngineShape{.cdecl,
     dynlib: pangolib, importc: "pango_font_find_shaper".}
 proc pango_font_get_metrics*(font: PPangoFont, language: PPangoLanguage): PPangoFontMetrics{.
     cdecl, dynlib: pangolib, importc: "pango_font_get_metrics".}
-proc pango_font_get_glyph_extents*(font: PPangoFont, glyph: TPangoGlyph, 
-                                   ink_rect: PPangoRectangle, 
-                                   logical_rect: PPangoRectangle){.cdecl, 
+proc pango_font_get_glyph_extents*(font: PPangoFont, glyph: TPangoGlyph,
+                                   ink_rect: PPangoRectangle,
+                                   logical_rect: PPangoRectangle){.cdecl,
     dynlib: pangolib, importc: "pango_font_get_glyph_extents".}
 proc PANGO_TYPE_FONT_MAP*(): GType
 proc PANGO_FONT_MAP*(anObject: pointer): PPangoFontMap
 proc PANGO_IS_FONT_MAP*(anObject: pointer): bool
-proc pango_font_map_get_type*(): GType{.cdecl, dynlib: pangolib, 
+proc pango_font_map_get_type*(): GType{.cdecl, dynlib: pangolib,
                                         importc: "pango_font_map_get_type".}
-proc pango_font_map_load_font*(fontmap: PPangoFontMap, context: PPangoContext, 
-                               desc: PPangoFontDescription): PPangoFont{.cdecl, 
+proc pango_font_map_load_font*(fontmap: PPangoFontMap, context: PPangoContext,
+                               desc: PPangoFontDescription): PPangoFont{.cdecl,
     dynlib: pangolib, importc: "pango_font_map_load_font".}
-proc pango_font_map_load_fontset*(fontmap: PPangoFontMap, 
-                                  context: PPangoContext, 
-                                  desc: PPangoFontDescription, 
+proc pango_font_map_load_fontset*(fontmap: PPangoFontMap,
+                                  context: PPangoContext,
+                                  desc: PPangoFontDescription,
                                   language: PPangoLanguage): PPangoFontset{.
     cdecl, dynlib: pangolib, importc: "pango_font_map_load_fontset".}
-proc pango_font_map_list_families*(fontmap: PPangoFontMap, 
-                                   families: var openarray[ptr PPangoFontFamily]){.cdecl, 
+proc pango_font_map_list_families*(fontmap: PPangoFontMap,
+                                   families: var openarray[ptr PPangoFontFamily]){.cdecl,
     dynlib: pangolib, importc: "pango_font_map_list_families".}
-const 
-  bm_TPangoGlyphVisAttr_is_cluster_start* = 0x00000001
-  bp_TPangoGlyphVisAttr_is_cluster_start* = 0
+const
+  bm_TPangoGlyphVisAttr_is_cluster_start* = 0x00000001'i16
+  bp_TPangoGlyphVisAttr_is_cluster_start* = 0'i16
 
 proc is_cluster_start*(a: var TPangoGlyphVisAttr): guint
 proc set_is_cluster_start*(a: var TPangoGlyphVisAttr, `is_cluster_start`: guint)
 proc PANGO_TYPE_GLYPH_STRING*(): GType
-proc pango_glyph_string_new*(): PPangoGlyphString{.cdecl, dynlib: pangolib, 
+proc pango_glyph_string_new*(): PPangoGlyphString{.cdecl, dynlib: pangolib,
     importc: "pango_glyph_string_new".}
 proc pango_glyph_string_set_size*(`string`: PPangoGlyphString, new_len: gint){.
     cdecl, dynlib: pangolib, importc: "pango_glyph_string_set_size".}
-proc pango_glyph_string_get_type*(): GType{.cdecl, dynlib: pangolib, 
+proc pango_glyph_string_get_type*(): GType{.cdecl, dynlib: pangolib,
     importc: "pango_glyph_string_get_type".}
 proc pango_glyph_string_copy*(`string`: PPangoGlyphString): PPangoGlyphString{.
     cdecl, dynlib: pangolib, importc: "pango_glyph_string_copy".}
-proc pango_glyph_string_free*(`string`: PPangoGlyphString){.cdecl, 
+proc pango_glyph_string_free*(`string`: PPangoGlyphString){.cdecl,
     dynlib: pangolib, importc: "pango_glyph_string_free".}
-proc pango_glyph_string_extents*(glyphs: PPangoGlyphString, font: PPangoFont, 
-                                 ink_rect: PPangoRectangle, 
-                                 logical_rect: PPangoRectangle){.cdecl, 
+proc pango_glyph_string_extents*(glyphs: PPangoGlyphString, font: PPangoFont,
+                                 ink_rect: PPangoRectangle,
+                                 logical_rect: PPangoRectangle){.cdecl,
     dynlib: pangolib, importc: "pango_glyph_string_extents".}
-proc pango_glyph_string_extents_range*(glyphs: PPangoGlyphString, start: int32, 
-                                       theEnd: int32, font: PPangoFont, 
-                                       ink_rect: PPangoRectangle, 
-                                       logical_rect: PPangoRectangle){.cdecl, 
+proc pango_glyph_string_extents_range*(glyphs: PPangoGlyphString, start: int32,
+                                       theEnd: int32, font: PPangoFont,
+                                       ink_rect: PPangoRectangle,
+                                       logical_rect: PPangoRectangle){.cdecl,
     dynlib: pangolib, importc: "pango_glyph_string_extents_range".}
-proc pango_glyph_string_get_logical_widths*(glyphs: PPangoGlyphString, 
-    text: cstring, length: int32, embedding_level: int32, 
-    logical_widths: var int32){.cdecl, dynlib: pangolib, 
+proc pango_glyph_string_get_logical_widths*(glyphs: PPangoGlyphString,
+    text: cstring, length: int32, embedding_level: int32,
+    logical_widths: var int32){.cdecl, dynlib: pangolib,
                                importc: "pango_glyph_string_get_logical_widths".}
-proc pango_glyph_string_index_to_x*(glyphs: PPangoGlyphString, text: cstring, 
-                                    length: int32, analysis: PPangoAnalysis, 
-                                    index: int32, trailing: gboolean, 
-                                    x_pos: var int32){.cdecl, dynlib: pangolib, 
+proc pango_glyph_string_index_to_x*(glyphs: PPangoGlyphString, text: cstring,
+                                    length: int32, analysis: PPangoAnalysis,
+                                    index: int32, trailing: gboolean,
+                                    x_pos: var int32){.cdecl, dynlib: pangolib,
     importc: "pango_glyph_string_index_to_x".}
-proc pango_glyph_string_x_to_index*(glyphs: PPangoGlyphString, text: cstring, 
-                                    length: int32, analysis: PPangoAnalysis, 
-                                    x_pos: int32, index, 
-                                    trailing: var int32){.cdecl, 
+proc pango_glyph_string_x_to_index*(glyphs: PPangoGlyphString, text: cstring,
+                                    length: int32, analysis: PPangoAnalysis,
+                                    x_pos: int32, index,
+                                    trailing: var int32){.cdecl,
     dynlib: pangolib, importc: "pango_glyph_string_x_to_index".}
-proc pango_shape*(text: cstring, length: gint, analysis: PPangoAnalysis, 
-                  glyphs: PPangoGlyphString){.cdecl, dynlib: pangolib, 
+proc pango_shape*(text: cstring, length: gint, analysis: PPangoAnalysis,
+                  glyphs: PPangoGlyphString){.cdecl, dynlib: pangolib,
     importc: "pango_shape".}
-proc pango_reorder_items*(logical_items: PGList): PGList{.cdecl, 
+proc pango_reorder_items*(logical_items: PGList): PGList{.cdecl,
     dynlib: pangolib, importc: "pango_reorder_items".}
-proc pango_item_new*(): PPangoItem{.cdecl, dynlib: pangolib, 
+proc pango_item_new*(): PPangoItem{.cdecl, dynlib: pangolib,
                                     importc: "pango_item_new".}
-proc pango_item_copy*(item: PPangoItem): PPangoItem{.cdecl, dynlib: pangolib, 
+proc pango_item_copy*(item: PPangoItem): PPangoItem{.cdecl, dynlib: pangolib,
     importc: "pango_item_copy".}
-proc pango_item_free*(item: PPangoItem){.cdecl, dynlib: pangolib, 
+proc pango_item_free*(item: PPangoItem){.cdecl, dynlib: pangolib,
     importc: "pango_item_free".}
 proc pango_item_split*(orig: PPangoItem, split_index: int32, split_offset: int32): PPangoItem{.
     cdecl, dynlib: pangolib, importc: "pango_item_split".}
@@ -745,465 +742,465 @@ proc PANGO_LAYOUT_CLASS*(klass: pointer): PPangoLayoutClass
 proc PANGO_IS_LAYOUT*(anObject: pointer): bool
 proc PANGO_IS_LAYOUT_CLASS*(klass: pointer): bool
 proc PANGO_LAYOUT_GET_CLASS*(obj: PPangoLayout): PPangoLayoutClass
-proc pango_layout_get_type*(): GType{.cdecl, dynlib: pangolib, 
+proc pango_layout_get_type*(): GType{.cdecl, dynlib: pangolib,
                                       importc: "pango_layout_get_type".}
-proc pango_layout_new*(context: PPangoContext): PPangoLayout{.cdecl, 
+proc pango_layout_new*(context: PPangoContext): PPangoLayout{.cdecl,
     dynlib: pangolib, importc: "pango_layout_new".}
-proc pango_layout_copy*(src: PPangoLayout): PPangoLayout{.cdecl, 
+proc pango_layout_copy*(src: PPangoLayout): PPangoLayout{.cdecl,
     dynlib: pangolib, importc: "pango_layout_copy".}
-proc pango_layout_get_context*(layout: PPangoLayout): PPangoContext{.cdecl, 
+proc pango_layout_get_context*(layout: PPangoLayout): PPangoContext{.cdecl,
     dynlib: pangolib, importc: "pango_layout_get_context".}
 proc pango_layout_set_attributes*(layout: PPangoLayout, attrs: PPangoAttrList){.
     cdecl, dynlib: pangolib, importc: "pango_layout_set_attributes".}
-proc pango_layout_get_attributes*(layout: PPangoLayout): PPangoAttrList{.cdecl, 
+proc pango_layout_get_attributes*(layout: PPangoLayout): PPangoAttrList{.cdecl,
     dynlib: pangolib, importc: "pango_layout_get_attributes".}
 proc pango_layout_set_text*(layout: PPangoLayout, text: cstring, length: int32){.
     cdecl, dynlib: pangolib, importc: "pango_layout_set_text".}
-proc pango_layout_get_text*(layout: PPangoLayout): cstring{.cdecl, 
+proc pango_layout_get_text*(layout: PPangoLayout): cstring{.cdecl,
     dynlib: pangolib, importc: "pango_layout_get_text".}
-proc pango_layout_set_markup*(layout: PPangoLayout, markup: cstring, 
-                              length: int32){.cdecl, dynlib: pangolib, 
+proc pango_layout_set_markup*(layout: PPangoLayout, markup: cstring,
+                              length: int32){.cdecl, dynlib: pangolib,
     importc: "pango_layout_set_markup".}
-proc pango_layout_set_markup_with_accel*(layout: PPangoLayout, markup: cstring, 
-    length: int32, accel_marker: gunichar, accel_char: Pgunichar){.cdecl, 
+proc pango_layout_set_markup_with_accel*(layout: PPangoLayout, markup: cstring,
+    length: int32, accel_marker: gunichar, accel_char: Pgunichar){.cdecl,
     dynlib: pangolib, importc: "pango_layout_set_markup_with_accel".}
-proc pango_layout_set_font_description*(layout: PPangoLayout, 
-                                        desc: PPangoFontDescription){.cdecl, 
+proc pango_layout_set_font_description*(layout: PPangoLayout,
+                                        desc: PPangoFontDescription){.cdecl,
     dynlib: pangolib, importc: "pango_layout_set_font_description".}
-proc pango_layout_set_width*(layout: PPangoLayout, width: int32){.cdecl, 
+proc pango_layout_set_width*(layout: PPangoLayout, width: int32){.cdecl,
     dynlib: pangolib, importc: "pango_layout_set_width".}
-proc pango_layout_get_width*(layout: PPangoLayout): int32{.cdecl, 
+proc pango_layout_get_width*(layout: PPangoLayout): int32{.cdecl,
     dynlib: pangolib, importc: "pango_layout_get_width".}
-proc pango_layout_set_wrap*(layout: PPangoLayout, wrap: TPangoWrapMode){.cdecl, 
+proc pango_layout_set_wrap*(layout: PPangoLayout, wrap: TPangoWrapMode){.cdecl,
     dynlib: pangolib, importc: "pango_layout_set_wrap".}
-proc pango_layout_get_wrap*(layout: PPangoLayout): TPangoWrapMode{.cdecl, 
+proc pango_layout_get_wrap*(layout: PPangoLayout): TPangoWrapMode{.cdecl,
     dynlib: pangolib, importc: "pango_layout_get_wrap".}
-proc pango_layout_set_indent*(layout: PPangoLayout, indent: int32){.cdecl, 
+proc pango_layout_set_indent*(layout: PPangoLayout, indent: int32){.cdecl,
     dynlib: pangolib, importc: "pango_layout_set_indent".}
-proc pango_layout_get_indent*(layout: PPangoLayout): int32{.cdecl, 
+proc pango_layout_get_indent*(layout: PPangoLayout): int32{.cdecl,
     dynlib: pangolib, importc: "pango_layout_get_indent".}
-proc pango_layout_set_spacing*(layout: PPangoLayout, spacing: int32){.cdecl, 
+proc pango_layout_set_spacing*(layout: PPangoLayout, spacing: int32){.cdecl,
     dynlib: pangolib, importc: "pango_layout_set_spacing".}
-proc pango_layout_get_spacing*(layout: PPangoLayout): int32{.cdecl, 
+proc pango_layout_get_spacing*(layout: PPangoLayout): int32{.cdecl,
     dynlib: pangolib, importc: "pango_layout_get_spacing".}
-proc pango_layout_set_justify*(layout: PPangoLayout, justify: gboolean){.cdecl, 
+proc pango_layout_set_justify*(layout: PPangoLayout, justify: gboolean){.cdecl,
     dynlib: pangolib, importc: "pango_layout_set_justify".}
-proc pango_layout_get_justify*(layout: PPangoLayout): gboolean{.cdecl, 
+proc pango_layout_get_justify*(layout: PPangoLayout): gboolean{.cdecl,
     dynlib: pangolib, importc: "pango_layout_get_justify".}
-proc pango_layout_set_alignment*(layout: PPangoLayout, 
-                                 alignment: TPangoAlignment){.cdecl, 
+proc pango_layout_set_alignment*(layout: PPangoLayout,
+                                 alignment: TPangoAlignment){.cdecl,
     dynlib: pangolib, importc: "pango_layout_set_alignment".}
-proc pango_layout_get_alignment*(layout: PPangoLayout): TPangoAlignment{.cdecl, 
+proc pango_layout_get_alignment*(layout: PPangoLayout): TPangoAlignment{.cdecl,
     dynlib: pangolib, importc: "pango_layout_get_alignment".}
-proc pango_layout_set_tabs*(layout: PPangoLayout, tabs: PPangoTabArray){.cdecl, 
+proc pango_layout_set_tabs*(layout: PPangoLayout, tabs: PPangoTabArray){.cdecl,
     dynlib: pangolib, importc: "pango_layout_set_tabs".}
-proc pango_layout_get_tabs*(layout: PPangoLayout): PPangoTabArray{.cdecl, 
+proc pango_layout_get_tabs*(layout: PPangoLayout): PPangoTabArray{.cdecl,
     dynlib: pangolib, importc: "pango_layout_get_tabs".}
-proc pango_layout_set_single_paragraph_mode*(layout: PPangoLayout, 
-    setting: gboolean){.cdecl, dynlib: pangolib, 
+proc pango_layout_set_single_paragraph_mode*(layout: PPangoLayout,
+    setting: gboolean){.cdecl, dynlib: pangolib,
                         importc: "pango_layout_set_single_paragraph_mode".}
 proc pango_layout_get_single_paragraph_mode*(layout: PPangoLayout): gboolean{.
     cdecl, dynlib: pangolib, importc: "pango_layout_get_single_paragraph_mode".}
-proc pango_layout_context_changed*(layout: PPangoLayout){.cdecl, 
+proc pango_layout_context_changed*(layout: PPangoLayout){.cdecl,
     dynlib: pangolib, importc: "pango_layout_context_changed".}
-proc pango_layout_get_log_attrs*(layout: PPangoLayout, attrs: var PPangoLogAttr, 
-                                 n_attrs: Pgint){.cdecl, dynlib: pangolib, 
+proc pango_layout_get_log_attrs*(layout: PPangoLayout, attrs: var PPangoLogAttr,
+                                 n_attrs: Pgint){.cdecl, dynlib: pangolib,
     importc: "pango_layout_get_log_attrs".}
-proc pango_layout_index_to_pos*(layout: PPangoLayout, index: int32, 
-                                pos: PPangoRectangle){.cdecl, dynlib: pangolib, 
+proc pango_layout_index_to_pos*(layout: PPangoLayout, index: int32,
+                                pos: PPangoRectangle){.cdecl, dynlib: pangolib,
     importc: "pango_layout_index_to_pos".}
-proc pango_layout_get_cursor_pos*(layout: PPangoLayout, index: int32, 
-                                  strong_pos: PPangoRectangle, 
-                                  weak_pos: PPangoRectangle){.cdecl, 
+proc pango_layout_get_cursor_pos*(layout: PPangoLayout, index: int32,
+                                  strong_pos: PPangoRectangle,
+                                  weak_pos: PPangoRectangle){.cdecl,
     dynlib: pangolib, importc: "pango_layout_get_cursor_pos".}
-proc pango_layout_move_cursor_visually*(layout: PPangoLayout, strong: gboolean, 
-                                        old_index: int32, old_trailing: int32, 
-                                        direction: int32, new_index, 
-                                        new_trailing: var int32){.cdecl, 
+proc pango_layout_move_cursor_visually*(layout: PPangoLayout, strong: gboolean,
+                                        old_index: int32, old_trailing: int32,
+                                        direction: int32, new_index,
+                                        new_trailing: var int32){.cdecl,
     dynlib: pangolib, importc: "pango_layout_move_cursor_visually".}
-proc pango_layout_xy_to_index*(layout: PPangoLayout, x: int32, y: int32, 
+proc pango_layout_xy_to_index*(layout: PPangoLayout, x: int32, y: int32,
                                index, trailing: var int32): gboolean{.
     cdecl, dynlib: pangolib, importc: "pango_layout_xy_to_index".}
-proc pango_layout_get_extents*(layout: PPangoLayout, ink_rect: PPangoRectangle, 
-                               logical_rect: PPangoRectangle){.cdecl, 
+proc pango_layout_get_extents*(layout: PPangoLayout, ink_rect: PPangoRectangle,
+                               logical_rect: PPangoRectangle){.cdecl,
     dynlib: pangolib, importc: "pango_layout_get_extents".}
-proc pango_layout_get_pixel_extents*(layout: PPangoLayout, 
-                                     ink_rect: PPangoRectangle, 
-                                     logical_rect: PPangoRectangle){.cdecl, 
+proc pango_layout_get_pixel_extents*(layout: PPangoLayout,
+                                     ink_rect: PPangoRectangle,
+                                     logical_rect: PPangoRectangle){.cdecl,
     dynlib: pangolib, importc: "pango_layout_get_pixel_extents".}
-proc pango_layout_get_size*(layout: PPangoLayout, width: var int32, 
-                            height: var int32){.cdecl, dynlib: pangolib, 
+proc pango_layout_get_size*(layout: PPangoLayout, width: var int32,
+                            height: var int32){.cdecl, dynlib: pangolib,
     importc: "pango_layout_get_size".}
-proc pango_layout_get_pixel_size*(layout: PPangoLayout, width: var int32, 
-                                  height: var int32){.cdecl, dynlib: pangolib, 
+proc pango_layout_get_pixel_size*(layout: PPangoLayout, width: var int32,
+                                  height: var int32){.cdecl, dynlib: pangolib,
     importc: "pango_layout_get_pixel_size".}
-proc pango_layout_get_line_count*(layout: PPangoLayout): int32{.cdecl, 
+proc pango_layout_get_line_count*(layout: PPangoLayout): int32{.cdecl,
     dynlib: pangolib, importc: "pango_layout_get_line_count".}
 proc pango_layout_get_line*(layout: PPangoLayout, line: int32): PPangoLayoutLine{.
     cdecl, dynlib: pangolib, importc: "pango_layout_get_line".}
-proc pango_layout_get_lines*(layout: PPangoLayout): PGSList{.cdecl, 
+proc pango_layout_get_lines*(layout: PPangoLayout): PGSList{.cdecl,
     dynlib: pangolib, importc: "pango_layout_get_lines".}
-proc pango_layout_line_ref*(line: PPangoLayoutLine){.cdecl, dynlib: pangolib, 
+proc pango_layout_line_ref*(line: PPangoLayoutLine){.cdecl, dynlib: pangolib,
     importc: "pango_layout_line_ref".}
-proc pango_layout_line_unref*(line: PPangoLayoutLine){.cdecl, dynlib: pangolib, 
+proc pango_layout_line_unref*(line: PPangoLayoutLine){.cdecl, dynlib: pangolib,
     importc: "pango_layout_line_unref".}
-proc pango_layout_line_x_to_index*(line: PPangoLayoutLine, x_pos: int32, 
+proc pango_layout_line_x_to_index*(line: PPangoLayoutLine, x_pos: int32,
                                    index: var int32, trailing: var int32): gboolean{.
     cdecl, dynlib: pangolib, importc: "pango_layout_line_x_to_index".}
-proc pango_layout_line_index_to_x*(line: PPangoLayoutLine, index: int32, 
-                                   trailing: gboolean, x_pos: var int32){.cdecl, 
+proc pango_layout_line_index_to_x*(line: PPangoLayoutLine, index: int32,
+                                   trailing: gboolean, x_pos: var int32){.cdecl,
     dynlib: pangolib, importc: "pango_layout_line_index_to_x".}
-proc pango_layout_line_get_extents*(line: PPangoLayoutLine, 
-                                    ink_rect: PPangoRectangle, 
-                                    logical_rect: PPangoRectangle){.cdecl, 
+proc pango_layout_line_get_extents*(line: PPangoLayoutLine,
+                                    ink_rect: PPangoRectangle,
+                                    logical_rect: PPangoRectangle){.cdecl,
     dynlib: pangolib, importc: "pango_layout_line_get_extents".}
-proc pango_layout_line_get_pixel_extents*(layout_line: PPangoLayoutLine, 
-    ink_rect: PPangoRectangle, logical_rect: PPangoRectangle){.cdecl, 
+proc pango_layout_line_get_pixel_extents*(layout_line: PPangoLayoutLine,
+    ink_rect: PPangoRectangle, logical_rect: PPangoRectangle){.cdecl,
     dynlib: pangolib, importc: "pango_layout_line_get_pixel_extents".}
-proc pango_layout_get_iter*(layout: PPangoLayout): PPangoLayoutIter{.cdecl, 
+proc pango_layout_get_iter*(layout: PPangoLayout): PPangoLayoutIter{.cdecl,
     dynlib: pangolib, importc: "pango_layout_get_iter".}
-proc pango_layout_iter_free*(iter: PPangoLayoutIter){.cdecl, dynlib: pangolib, 
+proc pango_layout_iter_free*(iter: PPangoLayoutIter){.cdecl, dynlib: pangolib,
     importc: "pango_layout_iter_free".}
-proc pango_layout_iter_get_index*(iter: PPangoLayoutIter): int32{.cdecl, 
+proc pango_layout_iter_get_index*(iter: PPangoLayoutIter): int32{.cdecl,
     dynlib: pangolib, importc: "pango_layout_iter_get_index".}
-proc pango_layout_iter_get_run*(iter: PPangoLayoutIter): PPangoLayoutRun{.cdecl, 
+proc pango_layout_iter_get_run*(iter: PPangoLayoutIter): PPangoLayoutRun{.cdecl,
     dynlib: pangolib, importc: "pango_layout_iter_get_run".}
 proc pango_layout_iter_get_line*(iter: PPangoLayoutIter): PPangoLayoutLine{.
     cdecl, dynlib: pangolib, importc: "pango_layout_iter_get_line".}
-proc pango_layout_iter_at_last_line*(iter: PPangoLayoutIter): gboolean{.cdecl, 
+proc pango_layout_iter_at_last_line*(iter: PPangoLayoutIter): gboolean{.cdecl,
     dynlib: pangolib, importc: "pango_layout_iter_at_last_line".}
-proc pango_layout_iter_next_char*(iter: PPangoLayoutIter): gboolean{.cdecl, 
+proc pango_layout_iter_next_char*(iter: PPangoLayoutIter): gboolean{.cdecl,
     dynlib: pangolib, importc: "pango_layout_iter_next_char".}
-proc pango_layout_iter_next_cluster*(iter: PPangoLayoutIter): gboolean{.cdecl, 
+proc pango_layout_iter_next_cluster*(iter: PPangoLayoutIter): gboolean{.cdecl,
     dynlib: pangolib, importc: "pango_layout_iter_next_cluster".}
-proc pango_layout_iter_next_run*(iter: PPangoLayoutIter): gboolean{.cdecl, 
+proc pango_layout_iter_next_run*(iter: PPangoLayoutIter): gboolean{.cdecl,
     dynlib: pangolib, importc: "pango_layout_iter_next_run".}
-proc pango_layout_iter_next_line*(iter: PPangoLayoutIter): gboolean{.cdecl, 
+proc pango_layout_iter_next_line*(iter: PPangoLayoutIter): gboolean{.cdecl,
     dynlib: pangolib, importc: "pango_layout_iter_next_line".}
-proc pango_layout_iter_get_char_extents*(iter: PPangoLayoutIter, 
+proc pango_layout_iter_get_char_extents*(iter: PPangoLayoutIter,
     logical_rect: PPangoRectangle){.cdecl, dynlib: pangolib, importc: "pango_layout_iter_get_char_extents".}
-proc pango_layout_iter_get_cluster_extents*(iter: PPangoLayoutIter, 
-    ink_rect: PPangoRectangle, logical_rect: PPangoRectangle){.cdecl, 
+proc pango_layout_iter_get_cluster_extents*(iter: PPangoLayoutIter,
+    ink_rect: PPangoRectangle, logical_rect: PPangoRectangle){.cdecl,
     dynlib: pangolib, importc: "pango_layout_iter_get_cluster_extents".}
-proc pango_layout_iter_get_run_extents*(iter: PPangoLayoutIter, 
-                                        ink_rect: PPangoRectangle, 
-                                        logical_rect: PPangoRectangle){.cdecl, 
+proc pango_layout_iter_get_run_extents*(iter: PPangoLayoutIter,
+                                        ink_rect: PPangoRectangle,
+                                        logical_rect: PPangoRectangle){.cdecl,
     dynlib: pangolib, importc: "pango_layout_iter_get_run_extents".}
-proc pango_layout_iter_get_line_extents*(iter: PPangoLayoutIter, 
-    ink_rect: PPangoRectangle, logical_rect: PPangoRectangle){.cdecl, 
+proc pango_layout_iter_get_line_extents*(iter: PPangoLayoutIter,
+    ink_rect: PPangoRectangle, logical_rect: PPangoRectangle){.cdecl,
     dynlib: pangolib, importc: "pango_layout_iter_get_line_extents".}
-proc pango_layout_iter_get_line_yrange*(iter: PPangoLayoutIter, y0: var int32, 
-                                        y1: var int32){.cdecl, dynlib: pangolib, 
+proc pango_layout_iter_get_line_yrange*(iter: PPangoLayoutIter, y0: var int32,
+                                        y1: var int32){.cdecl, dynlib: pangolib,
     importc: "pango_layout_iter_get_line_yrange".}
-proc pango_layout_iter_get_layout_extents*(iter: PPangoLayoutIter, 
-    ink_rect: PPangoRectangle, logical_rect: PPangoRectangle){.cdecl, 
+proc pango_layout_iter_get_layout_extents*(iter: PPangoLayoutIter,
+    ink_rect: PPangoRectangle, logical_rect: PPangoRectangle){.cdecl,
     dynlib: pangolib, importc: "pango_layout_iter_get_layout_extents".}
-proc pango_layout_iter_get_baseline*(iter: PPangoLayoutIter): int32{.cdecl, 
+proc pango_layout_iter_get_baseline*(iter: PPangoLayoutIter): int32{.cdecl,
     dynlib: pangolib, importc: "pango_layout_iter_get_baseline".}
 proc PANGO_TYPE_TAB_ARRAY*(): GType
 proc pango_tab_array_new*(initial_size: gint, positions_in_pixels: gboolean): PPangoTabArray{.
     cdecl, dynlib: pangolib, importc: "pango_tab_array_new".}
-proc pango_tab_array_get_type*(): GType{.cdecl, dynlib: pangolib, 
+proc pango_tab_array_get_type*(): GType{.cdecl, dynlib: pangolib,
     importc: "pango_tab_array_get_type".}
-proc pango_tab_array_copy*(src: PPangoTabArray): PPangoTabArray{.cdecl, 
+proc pango_tab_array_copy*(src: PPangoTabArray): PPangoTabArray{.cdecl,
     dynlib: pangolib, importc: "pango_tab_array_copy".}
-proc pango_tab_array_free*(tab_array: PPangoTabArray){.cdecl, dynlib: pangolib, 
+proc pango_tab_array_free*(tab_array: PPangoTabArray){.cdecl, dynlib: pangolib,
     importc: "pango_tab_array_free".}
-proc pango_tab_array_get_size*(tab_array: PPangoTabArray): gint{.cdecl, 
+proc pango_tab_array_get_size*(tab_array: PPangoTabArray): gint{.cdecl,
     dynlib: pangolib, importc: "pango_tab_array_get_size".}
-proc pango_tab_array_resize*(tab_array: PPangoTabArray, new_size: gint){.cdecl, 
+proc pango_tab_array_resize*(tab_array: PPangoTabArray, new_size: gint){.cdecl,
     dynlib: pangolib, importc: "pango_tab_array_resize".}
-proc pango_tab_array_set_tab*(tab_array: PPangoTabArray, tab_index: gint, 
-                              alignment: TPangoTabAlign, location: gint){.cdecl, 
+proc pango_tab_array_set_tab*(tab_array: PPangoTabArray, tab_index: gint,
+                              alignment: TPangoTabAlign, location: gint){.cdecl,
     dynlib: pangolib, importc: "pango_tab_array_set_tab".}
-proc pango_tab_array_get_tab*(tab_array: PPangoTabArray, tab_index: gint, 
+proc pango_tab_array_get_tab*(tab_array: PPangoTabArray, tab_index: gint,
                               alignment: PPangoTabAlign, location: Pgint){.
     cdecl, dynlib: pangolib, importc: "pango_tab_array_get_tab".}
 proc pango_tab_array_get_positions_in_pixels*(tab_array: PPangoTabArray): gboolean{.
     cdecl, dynlib: pangolib, importc: "pango_tab_array_get_positions_in_pixels".}
-proc PANGO_ASCENT*(rect: TPangoRectangle): int32 = 
+proc PANGO_ASCENT*(rect: TPangoRectangle): int32 =
   result = - int(rect.y)
 
-proc PANGO_DESCENT*(rect: TPangoRectangle): int32 = 
+proc PANGO_DESCENT*(rect: TPangoRectangle): int32 =
   result = int(rect.y) + int(rect.height)
 
-proc PANGO_LBEARING*(rect: TPangoRectangle): int32 = 
+proc PANGO_LBEARING*(rect: TPangoRectangle): int32 =
   result = rect.x
 
-proc PANGO_RBEARING*(rect: TPangoRectangle): int32 = 
-  result = int(rect.x) + (rect.width)
+proc PANGO_RBEARING*(rect: TPangoRectangle): int32 =
+  result = (rect.x) + (rect.width)
 
-proc PANGO_TYPE_LANGUAGE*(): GType = 
+proc PANGO_TYPE_LANGUAGE*(): GType =
   result = pango_language_get_type()
 
-proc pango_language_to_string*(language: PPangoLanguage): cstring = 
+proc pango_language_to_string*(language: PPangoLanguage): cstring =
   result = cast[cstring](language)
 
-proc PANGO_PIXELS*(d: int): int = 
-  if d >= 0: 
+proc PANGO_PIXELS*(d: int): int =
+  if d >= 0:
     result = (d + (PANGO_SCALE div 2)) div PANGO_SCALE
-  else: 
+  else:
     result = (d - (PANGO_SCALE div 2)) div PANGO_SCALE
 
-proc PANGO_TYPE_COLOR*(): GType = 
+proc PANGO_TYPE_COLOR*(): GType =
   result = pango_color_get_type()
 
-proc PANGO_TYPE_ATTR_LIST*(): GType = 
+proc PANGO_TYPE_ATTR_LIST*(): GType =
   result = pango_attr_list_get_type()
 
-proc is_line_break*(a: var TPangoLogAttr): guint = 
+proc is_line_break*(a: var TPangoLogAttr): guint =
   result = (a.flag0 and bm_TPangoLogAttr_is_line_break) shr
       bp_TPangoLogAttr_is_line_break
 
-proc set_is_line_break*(a: var TPangoLogAttr, `is_line_break`: guint) = 
+proc set_is_line_break*(a: var TPangoLogAttr, `is_line_break`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_line_break` shl bp_TPangoLogAttr_is_line_break) and
+      (int16(`is_line_break` shl bp_TPangoLogAttr_is_line_break) and
       bm_TPangoLogAttr_is_line_break)
 
-proc is_mandatory_break*(a: var TPangoLogAttr): guint = 
+proc is_mandatory_break*(a: var TPangoLogAttr): guint =
   result = (a.flag0 and bm_TPangoLogAttr_is_mandatory_break) shr
       bp_TPangoLogAttr_is_mandatory_break
 
-proc set_is_mandatory_break*(a: var TPangoLogAttr, `is_mandatory_break`: guint) = 
+proc set_is_mandatory_break*(a: var TPangoLogAttr, `is_mandatory_break`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_mandatory_break` shl bp_TPangoLogAttr_is_mandatory_break) and
+      (int16(`is_mandatory_break` shl bp_TPangoLogAttr_is_mandatory_break) and
       bm_TPangoLogAttr_is_mandatory_break)
 
-proc is_char_break*(a: var TPangoLogAttr): guint = 
+proc is_char_break*(a: var TPangoLogAttr): guint =
   result = (a.flag0 and bm_TPangoLogAttr_is_char_break) shr
       bp_TPangoLogAttr_is_char_break
 
-proc set_is_char_break*(a: var TPangoLogAttr, `is_char_break`: guint) = 
+proc set_is_char_break*(a: var TPangoLogAttr, `is_char_break`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_char_break` shl bp_TPangoLogAttr_is_char_break) and
+      (int16(`is_char_break` shl bp_TPangoLogAttr_is_char_break) and
       bm_TPangoLogAttr_is_char_break)
 
-proc is_white*(a: var TPangoLogAttr): guint = 
+proc is_white*(a: var TPangoLogAttr): guint =
   result = (a.flag0 and bm_TPangoLogAttr_is_white) shr
       bp_TPangoLogAttr_is_white
 
-proc set_is_white*(a: var TPangoLogAttr, `is_white`: guint) = 
+proc set_is_white*(a: var TPangoLogAttr, `is_white`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_white` shl bp_TPangoLogAttr_is_white) and
+      (int16(`is_white` shl bp_TPangoLogAttr_is_white) and
       bm_TPangoLogAttr_is_white)
 
-proc is_cursor_position*(a: var TPangoLogAttr): guint = 
+proc is_cursor_position*(a: var TPangoLogAttr): guint =
   result = (a.flag0 and bm_TPangoLogAttr_is_cursor_position) shr
       bp_TPangoLogAttr_is_cursor_position
 
-proc set_is_cursor_position*(a: var TPangoLogAttr, `is_cursor_position`: guint) = 
+proc set_is_cursor_position*(a: var TPangoLogAttr, `is_cursor_position`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_cursor_position` shl bp_TPangoLogAttr_is_cursor_position) and
+      (int16(`is_cursor_position` shl bp_TPangoLogAttr_is_cursor_position) and
       bm_TPangoLogAttr_is_cursor_position)
 
-proc is_word_start*(a: var TPangoLogAttr): guint = 
+proc is_word_start*(a: var TPangoLogAttr): guint =
   result = (a.flag0 and bm_TPangoLogAttr_is_word_start) shr
       bp_TPangoLogAttr_is_word_start
 
-proc set_is_word_start*(a: var TPangoLogAttr, `is_word_start`: guint) = 
+proc set_is_word_start*(a: var TPangoLogAttr, `is_word_start`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_word_start` shl bp_TPangoLogAttr_is_word_start) and
+      (int16(`is_word_start` shl bp_TPangoLogAttr_is_word_start) and
       bm_TPangoLogAttr_is_word_start)
 
-proc is_word_end*(a: var TPangoLogAttr): guint = 
+proc is_word_end*(a: var TPangoLogAttr): guint =
   result = (a.flag0 and bm_TPangoLogAttr_is_word_end) shr
       bp_TPangoLogAttr_is_word_end
 
-proc set_is_word_end*(a: var TPangoLogAttr, `is_word_end`: guint) = 
+proc set_is_word_end*(a: var TPangoLogAttr, `is_word_end`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_word_end` shl bp_TPangoLogAttr_is_word_end) and
+      (int16(`is_word_end` shl bp_TPangoLogAttr_is_word_end) and
       bm_TPangoLogAttr_is_word_end)
 
-proc is_sentence_boundary*(a: var TPangoLogAttr): guint = 
+proc is_sentence_boundary*(a: var TPangoLogAttr): guint =
   result = (a.flag0 and bm_TPangoLogAttr_is_sentence_boundary) shr
       bp_TPangoLogAttr_is_sentence_boundary
 
-proc set_is_sentence_boundary*(a: var TPangoLogAttr, 
-                               `is_sentence_boundary`: guint) = 
+proc set_is_sentence_boundary*(a: var TPangoLogAttr,
+                               `is_sentence_boundary`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_sentence_boundary` shl bp_TPangoLogAttr_is_sentence_boundary) and
+      (int16(`is_sentence_boundary` shl bp_TPangoLogAttr_is_sentence_boundary) and
       bm_TPangoLogAttr_is_sentence_boundary)
 
-proc is_sentence_start*(a: var TPangoLogAttr): guint = 
+proc is_sentence_start*(a: var TPangoLogAttr): guint =
   result = (a.flag0 and bm_TPangoLogAttr_is_sentence_start) shr
       bp_TPangoLogAttr_is_sentence_start
 
-proc set_is_sentence_start*(a: var TPangoLogAttr, `is_sentence_start`: guint) = 
+proc set_is_sentence_start*(a: var TPangoLogAttr, `is_sentence_start`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_sentence_start` shl bp_TPangoLogAttr_is_sentence_start) and
+      (int16(`is_sentence_start` shl bp_TPangoLogAttr_is_sentence_start) and
       bm_TPangoLogAttr_is_sentence_start)
 
-proc is_sentence_end*(a: var TPangoLogAttr): guint = 
+proc is_sentence_end*(a: var TPangoLogAttr): guint =
   result = (a.flag0 and bm_TPangoLogAttr_is_sentence_end) shr
       bp_TPangoLogAttr_is_sentence_end
 
-proc set_is_sentence_end*(a: var TPangoLogAttr, `is_sentence_end`: guint) = 
+proc set_is_sentence_end*(a: var TPangoLogAttr, `is_sentence_end`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_sentence_end` shl bp_TPangoLogAttr_is_sentence_end) and
+      (int16(`is_sentence_end` shl bp_TPangoLogAttr_is_sentence_end) and
       bm_TPangoLogAttr_is_sentence_end)
 
-proc PANGO_TYPE_CONTEXT*(): GType = 
+proc PANGO_TYPE_CONTEXT*(): GType =
   result = pango_context_get_type()
 
-proc PANGO_CONTEXT*(anObject: pointer): PPangoContext = 
+proc PANGO_CONTEXT*(anObject: pointer): PPangoContext =
   result = cast[PPangoContext](G_TYPE_CHECK_INSTANCE_CAST(anObject, PANGO_TYPE_CONTEXT()))
 
-proc PANGO_CONTEXT_CLASS*(klass: pointer): PPangoContextClass = 
+proc PANGO_CONTEXT_CLASS*(klass: pointer): PPangoContextClass =
   result = cast[PPangoContextClass](G_TYPE_CHECK_CLASS_CAST(klass, PANGO_TYPE_CONTEXT()))
 
-proc PANGO_IS_CONTEXT*(anObject: pointer): bool = 
+proc PANGO_IS_CONTEXT*(anObject: pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, PANGO_TYPE_CONTEXT())
 
-proc PANGO_IS_CONTEXT_CLASS*(klass: pointer): bool = 
+proc PANGO_IS_CONTEXT_CLASS*(klass: pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, PANGO_TYPE_CONTEXT())
 
-proc PANGO_CONTEXT_GET_CLASS*(obj: PPangoContext): PPangoContextClass = 
+proc PANGO_CONTEXT_GET_CLASS*(obj: PPangoContext): PPangoContextClass =
   result = cast[PPangoContextClass](G_TYPE_INSTANCE_GET_CLASS(obj, PANGO_TYPE_CONTEXT()))
 
-proc PANGO_TYPE_FONTSET*(): GType = 
+proc PANGO_TYPE_FONTSET*(): GType =
   result = pango_fontset_get_type()
 
-proc PANGO_FONTSET*(anObject: pointer): PPangoFontset = 
+proc PANGO_FONTSET*(anObject: pointer): PPangoFontset =
   result = cast[PPangoFontset](G_TYPE_CHECK_INSTANCE_CAST(anObject, PANGO_TYPE_FONTSET()))
 
-proc PANGO_IS_FONTSET*(anObject: pointer): bool = 
+proc PANGO_IS_FONTSET*(anObject: pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, PANGO_TYPE_FONTSET())
 
-proc PANGO_FONTSET_CLASS*(klass: pointer): PPangoFontsetClass = 
+proc PANGO_FONTSET_CLASS*(klass: pointer): PPangoFontsetClass =
   result = cast[PPangoFontsetClass](G_TYPE_CHECK_CLASS_CAST(klass, PANGO_TYPE_FONTSET()))
 
-proc PANGO_IS_FONTSET_CLASS*(klass: pointer): bool = 
+proc PANGO_IS_FONTSET_CLASS*(klass: pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, PANGO_TYPE_FONTSET())
 
-proc PANGO_FONTSET_GET_CLASS*(obj: PPangoFontset): PPangoFontsetClass = 
+proc PANGO_FONTSET_GET_CLASS*(obj: PPangoFontset): PPangoFontsetClass =
   result = cast[PPangoFontsetClass](G_TYPE_INSTANCE_GET_CLASS(obj, PANGO_TYPE_FONTSET()))
 
 proc pango_fontset_simple_get_type(): GType {.importc, cdecl, dynlib: pangolib.}
 
-proc PANGO_TYPE_FONTSET_SIMPLE*(): GType = 
+proc PANGO_TYPE_FONTSET_SIMPLE*(): GType =
   result = pango_fontset_simple_get_type()
 
-proc PANGO_FONTSET_SIMPLE*(anObject: pointer): PPangoFontsetSimple = 
-  result = cast[PPangoFontsetSimple](G_TYPE_CHECK_INSTANCE_CAST(anObject, 
+proc PANGO_FONTSET_SIMPLE*(anObject: pointer): PPangoFontsetSimple =
+  result = cast[PPangoFontsetSimple](G_TYPE_CHECK_INSTANCE_CAST(anObject,
       PANGO_TYPE_FONTSET_SIMPLE()))
 
-proc PANGO_IS_FONTSET_SIMPLE*(anObject: pointer): bool = 
+proc PANGO_IS_FONTSET_SIMPLE*(anObject: pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, PANGO_TYPE_FONTSET_SIMPLE())
 
-proc PANGO_TYPE_FONT_DESCRIPTION*(): GType = 
+proc PANGO_TYPE_FONT_DESCRIPTION*(): GType =
   result = pango_font_description_get_type()
 
-proc PANGO_TYPE_FONT_METRICS*(): GType = 
+proc PANGO_TYPE_FONT_METRICS*(): GType =
   result = pango_font_metrics_get_type()
 
-proc PANGO_TYPE_FONT_FAMILY*(): GType = 
+proc PANGO_TYPE_FONT_FAMILY*(): GType =
   result = pango_font_family_get_type()
 
-proc PANGO_FONT_FAMILY*(anObject: pointer): PPangoFontFamily = 
-  result = cast[PPangoFontFamily](G_TYPE_CHECK_INSTANCE_CAST(anObject, 
+proc PANGO_FONT_FAMILY*(anObject: pointer): PPangoFontFamily =
+  result = cast[PPangoFontFamily](G_TYPE_CHECK_INSTANCE_CAST(anObject,
       PANGO_TYPE_FONT_FAMILY()))
 
-proc PANGO_IS_FONT_FAMILY*(anObject: Pointer): bool = 
+proc PANGO_IS_FONT_FAMILY*(anObject: Pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, PANGO_TYPE_FONT_FAMILY())
 
-proc PANGO_FONT_FAMILY_CLASS*(klass: Pointer): PPangoFontFamilyClass = 
-  result = cast[PPangoFontFamilyClass](G_TYPE_CHECK_CLASS_CAST(klass, 
+proc PANGO_FONT_FAMILY_CLASS*(klass: Pointer): PPangoFontFamilyClass =
+  result = cast[PPangoFontFamilyClass](G_TYPE_CHECK_CLASS_CAST(klass,
       PANGO_TYPE_FONT_FAMILY()))
 
-proc PANGO_IS_FONT_FAMILY_CLASS*(klass: Pointer): bool = 
+proc PANGO_IS_FONT_FAMILY_CLASS*(klass: Pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, PANGO_TYPE_FONT_FAMILY())
 
-proc PANGO_FONT_FAMILY_GET_CLASS*(obj: PPangoFontFamily): PPangoFontFamilyClass = 
-  result = cast[PPangoFontFamilyClass](G_TYPE_INSTANCE_GET_CLASS(obj, 
+proc PANGO_FONT_FAMILY_GET_CLASS*(obj: PPangoFontFamily): PPangoFontFamilyClass =
+  result = cast[PPangoFontFamilyClass](G_TYPE_INSTANCE_GET_CLASS(obj,
       PANGO_TYPE_FONT_FAMILY()))
 
-proc PANGO_TYPE_FONT_FACE*(): GType = 
+proc PANGO_TYPE_FONT_FACE*(): GType =
   result = pango_font_face_get_type()
 
-proc PANGO_FONT_FACE*(anObject: Pointer): PPangoFontFace = 
-  result = cast[PPangoFontFace](G_TYPE_CHECK_INSTANCE_CAST(anObject, 
+proc PANGO_FONT_FACE*(anObject: Pointer): PPangoFontFace =
+  result = cast[PPangoFontFace](G_TYPE_CHECK_INSTANCE_CAST(anObject,
       PANGO_TYPE_FONT_FACE()))
 
-proc PANGO_IS_FONT_FACE*(anObject: Pointer): bool = 
+proc PANGO_IS_FONT_FACE*(anObject: Pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, PANGO_TYPE_FONT_FACE())
 
-proc PANGO_FONT_FACE_CLASS*(klass: Pointer): PPangoFontFaceClass = 
-  result = cast[PPangoFontFaceClass](G_TYPE_CHECK_CLASS_CAST(klass, 
+proc PANGO_FONT_FACE_CLASS*(klass: Pointer): PPangoFontFaceClass =
+  result = cast[PPangoFontFaceClass](G_TYPE_CHECK_CLASS_CAST(klass,
       PANGO_TYPE_FONT_FACE()))
 
-proc PANGO_IS_FONT_FACE_CLASS*(klass: Pointer): bool = 
+proc PANGO_IS_FONT_FACE_CLASS*(klass: Pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, PANGO_TYPE_FONT_FACE())
 
-proc PANGO_FONT_FACE_GET_CLASS*(obj: Pointer): PPangoFontFaceClass = 
-  result = cast[PPangoFontFaceClass](G_TYPE_INSTANCE_GET_CLASS(obj, 
+proc PANGO_FONT_FACE_GET_CLASS*(obj: Pointer): PPangoFontFaceClass =
+  result = cast[PPangoFontFaceClass](G_TYPE_INSTANCE_GET_CLASS(obj,
       PANGO_TYPE_FONT_FACE()))
 
-proc PANGO_TYPE_FONT*(): GType = 
+proc PANGO_TYPE_FONT*(): GType =
   result = pango_font_get_type()
 
-proc PANGO_FONT*(anObject: Pointer): PPangoFont = 
+proc PANGO_FONT*(anObject: Pointer): PPangoFont =
   result = cast[PPangoFont](G_TYPE_CHECK_INSTANCE_CAST(anObject, PANGO_TYPE_FONT()))
 
-proc PANGO_IS_FONT*(anObject: Pointer): bool = 
+proc PANGO_IS_FONT*(anObject: Pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, PANGO_TYPE_FONT())
 
-proc PANGO_FONT_CLASS*(klass: Pointer): PPangoFontClass = 
+proc PANGO_FONT_CLASS*(klass: Pointer): PPangoFontClass =
   result = cast[PPangoFontClass](G_TYPE_CHECK_CLASS_CAST(klass, PANGO_TYPE_FONT()))
 
-proc PANGO_IS_FONT_CLASS*(klass: Pointer): bool = 
+proc PANGO_IS_FONT_CLASS*(klass: Pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, PANGO_TYPE_FONT())
 
-proc PANGO_FONT_GET_CLASS*(obj: PPangoFont): PPangoFontClass = 
+proc PANGO_FONT_GET_CLASS*(obj: PPangoFont): PPangoFontClass =
   result = cast[PPangoFontClass](G_TYPE_INSTANCE_GET_CLASS(obj, PANGO_TYPE_FONT()))
 
-proc PANGO_TYPE_FONT_MAP*(): GType = 
+proc PANGO_TYPE_FONT_MAP*(): GType =
   result = pango_font_map_get_type()
 
-proc PANGO_FONT_MAP*(anObject: pointer): PPangoFontmap = 
-  result = cast[PPangoFontmap](G_TYPE_CHECK_INSTANCE_CAST(anObject, 
+proc PANGO_FONT_MAP*(anObject: pointer): PPangoFontmap =
+  result = cast[PPangoFontmap](G_TYPE_CHECK_INSTANCE_CAST(anObject,
       PANGO_TYPE_FONT_MAP()))
 
-proc PANGO_IS_FONT_MAP*(anObject: pointer): bool = 
+proc PANGO_IS_FONT_MAP*(anObject: pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, PANGO_TYPE_FONT_MAP())
 
-proc PANGO_FONT_MAP_CLASS*(klass: pointer): PPangoFontMapClass = 
+proc PANGO_FONT_MAP_CLASS*(klass: pointer): PPangoFontMapClass =
   result = cast[PPangoFontMapClass](G_TYPE_CHECK_CLASS_CAST(klass, PANGO_TYPE_FONT_MAP()))
 
-proc PANGO_IS_FONT_MAP_CLASS*(klass: pointer): bool = 
+proc PANGO_IS_FONT_MAP_CLASS*(klass: pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, PANGO_TYPE_FONT_MAP())
 
-proc PANGO_FONT_MAP_GET_CLASS*(obj: PPangoFontMap): PPangoFontMapClass = 
+proc PANGO_FONT_MAP_GET_CLASS*(obj: PPangoFontMap): PPangoFontMapClass =
   result = cast[PPangoFontMapClass](G_TYPE_INSTANCE_GET_CLASS(obj, PANGO_TYPE_FONT_MAP()))
 
-proc is_cluster_start*(a: var TPangoGlyphVisAttr): guint = 
+proc is_cluster_start*(a: var TPangoGlyphVisAttr): guint =
   result = (a.flag0 and bm_TPangoGlyphVisAttr_is_cluster_start) shr
       bp_TPangoGlyphVisAttr_is_cluster_start
 
-proc set_is_cluster_start*(a: var TPangoGlyphVisAttr, `is_cluster_start`: guint) = 
+proc set_is_cluster_start*(a: var TPangoGlyphVisAttr, `is_cluster_start`: guint) =
   a.flag0 = a.flag0 or
-      ((`is_cluster_start` shl bp_TPangoGlyphVisAttr_is_cluster_start) and
+      (int16(`is_cluster_start` shl bp_TPangoGlyphVisAttr_is_cluster_start) and
       bm_TPangoGlyphVisAttr_is_cluster_start)
 
-proc PANGO_TYPE_GLYPH_STRING*(): GType = 
+proc PANGO_TYPE_GLYPH_STRING*(): GType =
   result = pango_glyph_string_get_type()
 
-proc PANGO_TYPE_LAYOUT*(): GType = 
+proc PANGO_TYPE_LAYOUT*(): GType =
   result = pango_layout_get_type()
 
-proc PANGO_LAYOUT*(anObject: pointer): PPangoLayout = 
+proc PANGO_LAYOUT*(anObject: pointer): PPangoLayout =
   result = cast[PPangoLayout](G_TYPE_CHECK_INSTANCE_CAST(anObject, PANGO_TYPE_LAYOUT()))
 
-proc PANGO_LAYOUT_CLASS*(klass: pointer): PPangoLayoutClass = 
+proc PANGO_LAYOUT_CLASS*(klass: pointer): PPangoLayoutClass =
   result = cast[PPangoLayoutClass](G_TYPE_CHECK_CLASS_CAST(klass, PANGO_TYPE_LAYOUT()))
 
-proc PANGO_IS_LAYOUT*(anObject: pointer): bool = 
+proc PANGO_IS_LAYOUT*(anObject: pointer): bool =
   result = G_TYPE_CHECK_INSTANCE_TYPE(anObject, PANGO_TYPE_LAYOUT())
 
-proc PANGO_IS_LAYOUT_CLASS*(klass: pointer): bool = 
+proc PANGO_IS_LAYOUT_CLASS*(klass: pointer): bool =
   result = G_TYPE_CHECK_CLASS_TYPE(klass, PANGO_TYPE_LAYOUT())
 
-proc PANGO_LAYOUT_GET_CLASS*(obj: PPangoLayout): PPangoLayoutClass = 
+proc PANGO_LAYOUT_GET_CLASS*(obj: PPangoLayout): PPangoLayoutClass =
   result = cast[PPangoLayoutClass](G_TYPE_INSTANCE_GET_CLASS(obj, PANGO_TYPE_LAYOUT()))
 
-proc PANGO_TYPE_TAB_ARRAY*(): GType = 
+proc PANGO_TYPE_TAB_ARRAY*(): GType =
   result = pango_tab_array_get_type()
diff --git a/lib/base/gtk/pangoutils.nim b/lib/base/gtk/pangoutils.nim
index 2c328b59a..6033cca7d 100644
--- a/lib/base/gtk/pangoutils.nim
+++ b/lib/base/gtk/pangoutils.nim
@@ -1,29 +1,28 @@
-import 
+import
   glib2, pango
 
-type 
+type
   pint32* = ptr int32
 
-proc pango_split_file_list*(str: cstring): PPchar{.cdecl, dynlib: pangolib, 
+proc pango_split_file_list*(str: cstring): PPchar{.cdecl, dynlib: pangolib,
     importc: "pango_split_file_list".}
-proc pango_trim_string*(str: cstring): cstring{.cdecl, dynlib: pangolib, 
+proc pango_trim_string*(str: cstring): cstring{.cdecl, dynlib: pangolib,
     importc: "pango_trim_string".}
-proc pango_read_line*(stream: TFile, str: PGString): gint{.cdecl, 
+proc pango_read_line*(stream: TFile, str: PGString): gint{.cdecl,
     dynlib: pangolib, importc: "pango_read_line".}
-proc pango_skip_space*(pos: PPchar): gboolean{.cdecl, dynlib: pangolib, 
+proc pango_skip_space*(pos: PPchar): gboolean{.cdecl, dynlib: pangolib,
     importc: "pango_skip_space".}
-proc pango_scan_word*(pos: PPchar, OutStr: PGString): gboolean{.cdecl, 
+proc pango_scan_word*(pos: PPchar, OutStr: PGString): gboolean{.cdecl,
     dynlib: pangolib, importc: "pango_scan_word".}
-proc pango_scan_string*(pos: PPchar, OutStr: PGString): gboolean{.cdecl, 
+proc pango_scan_string*(pos: PPchar, OutStr: PGString): gboolean{.cdecl,
     dynlib: pangolib, importc: "pango_scan_string".}
-proc pango_scan_int*(pos: PPchar, OutInt: pint32): gboolean{.cdecl, 
+proc pango_scan_int*(pos: PPchar, OutInt: pint32): gboolean{.cdecl,
     dynlib: pangolib, importc: "pango_scan_int".}
-when defined(PANGO_ENABLE_BACKEND): 
-  proc pango_config_key_get(key: cstring): cstring{.cdecl, dynlib: pangolib, 
-      importc: "pango_config_key_get".}
-  proc pango_lookup_aliases(fontname: cstring, families: PPPchar, 
-                            n_families: pint32){.cdecl, dynlib: pangolib, 
-      importc: "pango_lookup_aliases".}
+proc pango_config_key_get(key: cstring): cstring{.cdecl, dynlib: pangolib,
+    importc: "pango_config_key_get".}
+proc pango_lookup_aliases(fontname: cstring, families: PPPchar,
+                          n_families: pint32){.cdecl, dynlib: pangolib,
+    importc: "pango_lookup_aliases".}
 proc pango_parse_style*(str: cstring, style: PPangoStyle, warn: gboolean): gboolean{.
     cdecl, dynlib: pangolib, importc: "pango_parse_style".}
 proc pango_parse_variant*(str: cstring, variant: PPangoVariant, warn: gboolean): gboolean{.
@@ -32,15 +31,14 @@ proc pango_parse_weight*(str: cstring, weight: PPangoWeight, warn: gboolean): gb
     cdecl, dynlib: pangolib, importc: "pango_parse_weight".}
 proc pango_parse_stretch*(str: cstring, stretch: PPangoStretch, warn: gboolean): gboolean{.
     cdecl, dynlib: pangolib, importc: "pango_parse_stretch".}
-when defined(PANGO_ENABLE_BACKEND): 
-  proc pango_get_sysconf_subdirectory(): cstring{.cdecl, dynlib: pangolib, 
-      importc: "pango_get_sysconf_subdirectory".}
-  proc pango_get_lib_subdirectory(): cstring{.cdecl, dynlib: pangolib, 
-      importc: "pango_get_lib_subdirectory".}
-proc pango_log2vis_get_embedding_levels*(str: Pgunichar, len: int32, 
-    pbase_dir: PPangoDirection, embedding_level_list: Pguint8): gboolean{.cdecl, 
+proc pango_get_sysconf_subdirectory(): cstring{.cdecl, dynlib: pangolib,
+    importc: "pango_get_sysconf_subdirectory".}
+proc pango_get_lib_subdirectory(): cstring{.cdecl, dynlib: pangolib,
+    importc: "pango_get_lib_subdirectory".}
+proc pango_log2vis_get_embedding_levels*(str: Pgunichar, len: int32,
+    pbase_dir: PPangoDirection, embedding_level_list: Pguint8): gboolean{.cdecl,
     dynlib: pangolib, importc: "pango_log2vis_get_embedding_levels".}
 proc pango_get_mirror_char*(ch: gunichar, mirrored_ch: Pgunichar): gboolean{.
     cdecl, dynlib: pangolib, importc: "pango_get_mirror_char".}
 proc pango_language_get_sample_string*(language: PPangoLanguage): cstring{.
-    cdecl, dynlib: pangolib, importc: "pango_language_get_sample_string".}
\ No newline at end of file
+    cdecl, dynlib: pangolib, importc: "pango_language_get_sample_string".}
diff --git a/lib/base/lex.nim b/lib/base/lex.nim
deleted file mode 100644
index 34f0c32a8..000000000
--- a/lib/base/lex.nim
+++ /dev/null
@@ -1,73 +0,0 @@
-# Lexer generator for Nimrod
-#   (c) 2008 Andreas Rumpf
-
-# Stress testing for the macro feature
-
-# the syntax that should be supported is:
-
-# template numpostfix = 
-#   '\'' & 'F'|'f'|'i'|'I' & "32"|"64"|"8"|"16"
-# template edigits = 
-#   'e'|'E' & +digits
-# tokens(
-#   tkIdent: +UniIdentStart & *UniIdentRest,
-#   tkHexNumber: '0' & ('x'|'X') & +hexDigits & ?( numpostfix ),
-#   tkOctNumber: '0' & ('c'|'C') & +octDigits & ?( numpostfix ),
-#   tkBinNumber: '0' & ('b'|'B') & +binDigits & ?( numpostfix ),
-#   tkIntNumber: +digits & ?( numpostfix ), 
-#   tkFloatNumber: +digits & ('.' & +digits & ?(edigits) | edigits) & ?(numpostfix),
-#   
-# )
-# actions(
-#   tkIdent: lookup
-# ) 
-# 
-
-#
-#  match inputstream
-#  of +('A'..'Z' | '_' | 'a'..'z') *('A'..'Z' | '_' | 'a'..'z' | '0'..'9') :
-#    
-#    x = inputstream[pos..length]
-#  of '0' 'x' +('0'..'9' | 'a'..'f' | '_' | 'A'..'F') : 
-#    y = ...
-
-const
-  AsciiLetter = {'A'..'Z', 'a'..'z'}
-  uniLetter = AsciiLetter + {'\128'..'\255'}
-  digits = {'0'..'9'}
-  hexDigits = {'0'..'9', 'a'..'f', 'A'..'F'}
-  octDigits = {'0'..'7'}
-  binDigits = {'0'..'1'}
-  AsciiIdentStart = AsciiLetter + {'_'} 
-  AsciiIdentRest = AsciiIdentStart + Digits
-  UniIdentStart = UniLetter + {'_'} 
-  UniIdentRest = UniIdentStart + Digits
-
-# --> if match(s, +AsciiIdentStart & *AsciiIdentRest): 
-
-#  Regular expressions in Nimrod itself!
-#  -------------------------------------
-#  
-#  'a' -- matches the character a
-#  'a'..'z'  -- range operator '-'
-#  'A' | 'B' -- alternative operator |
-#  * 'a' -- prefix * is needed
-#  + 'a' -- prefix + is needed
-#  ? 'a' -- prefix ? is needed
-#  *? prefix is needed
-#  +? prefix is needed
-#  letter  -- character classes with real names!
-#  letters
-#  white
-#  whites
-#  any   -- any character
-#  ()    -- are Nimrod syntax
-#  ! 'a'-'z'
-#  
-#  -- concatentation via proc call:
-#  
-#  re('A' 'Z' *word  )
-
-macro re(n: expr): expr = 
-  
-  result = newCall("magic_re", x)
diff --git a/lib/base/nregex.nim b/lib/base/nregex.nim
deleted file mode 100644
index 77afb8421..000000000
--- a/lib/base/nregex.nim
+++ /dev/null
@@ -1,124 +0,0 @@
-# new implementation of regular expressions
-
-type
-  TRegexKind = enum 
-    regNone,
-    regChar, 
-    regSet,
-    regConc,
-    regAlt,
-    regStar,
-    regPlus,
-    regMN,
-    regNewline
-  
-  TRegex = object of TObject
-    case kind: TRegexKind
-    of regChar: c: char
-    of regSet: s: ref set[char]
-    else: a, b: PRegEx
-    
-  PRegEx* = ref TRegEx
-
-  TRegExFlag* = enum   ## Flags concerning the semantics of regular expressions
-    reCaseInsensitive, ## case insensitive match 
-    reStyleInsensitive ## style insensitive match
-    
-    
-  TRegExFlags* = set[TRegExFlag]
-    ## Flags concerning the semantics of regular expressions
-    
-proc raiseRegex(msg: string) {.noreturn.} = 
-  var e: ref Exception
-  new(e)
-  e.msg = msg
-  raise e
-
-proc compileAux(i: int, s: string, r: PRegEx): int
-    
-proc compileBackslash(i: int, s: string, r: PRegEx): int = 
-  var i = i
-  inc(i)
-  case s[i]
-  of 'A'..'Z': 
-  of 'a'..'z':
-  of '0':
-  of '1'..'9': 
-  
-  else:
-    r.kind = regChar
-    r.c = s[i]
-  inc(i)
-  result = i
-
-proc compileAtom(i: int, s: string, r: PRegEx): int = 
-  var i = i
-  case s[i]
-  of '[':
-    inc(i)
-    var inverse = s[i] == '^'
-    if inverse: inc(i)
-    r.kind = regSet
-    new(r.s)
-    while true: 
-      case s[i]
-      of '\\': i = compileBackslash(i, s, r)
-      of ']': 
-        inc(i)
-        break
-      of '\0': 
-        raiseRegex("']' expected")
-      elif s[i+1] == '-':
-        var x = s[i]
-        inc(i, 2)
-        var y = s[i]
-        inc(i)
-        r.s = r.s + {x..y}
-      else:
-        incl(r.s, s[i])
-        inc(i)
-    if inverse:
-      r.s = {'\0'..'\255'} - r.s
-  of '\\':
-    inc(i)
-    i = compileBackslash(i, s, r)
-  of '.':
-    r.kind = regAny
-    inc(i)
-  of '(': 
-    inc(i)
-    i = compileAux(i, s, r)
-    if s[i] = ')': inc(i)
-    else: raiseRegex("')' expected")
-  of '\0': nil # do nothing
-  else:
-    r.kind = regChar
-    r.c = s[i]
-    inc(i)
-  result = i
-    
-proc compilePostfix(i: int, s: string, r: PRegEx): int = 
-  var i = compileAtom(i, s, r)
-  var a: PRegEx
-  case s[i]
-  of '*':
-  of '+':
-  of '?':
-  else: nil
-
-proc compileAux(i: int, s: string, r: PRegEx): int = 
-  var i = i
-  i = compileAtom(i, s, r)
-  
-  while s[i] != '\0':
-    
-  result = i
-    
-proc compile*(regex: string, flags: TRegExFlags = {}): PRegEx = 
-  ## Compiles the string `regex` that represents a regular expression into 
-  ## an internal data structure that can be used for matching.
-  new(result)
-  var i = compileAux(0, regex, result)
-  if i < len(regex)-1:
-    # not all characters used for the regular expression?
-    raiseRegEx("invalid regular expression")
diff --git a/lib/base/pcre.nim b/lib/base/pcre.nim
index 1023f86f3..ebebd8bd7 100644
--- a/lib/base/pcre.nim
+++ b/lib/base/pcre.nim
@@ -1,296 +1,291 @@
-#

-#

-#            Nimrod's Runtime Library

-#        (c) Copyright 2006 Andreas Rumpf

-#

-#    See the file "copying.txt", included in this

-#    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 Morpork 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

-  Pbyte = ptr byte

-  Pchar = CString

-  PPchar = ptr PChar

-  Pint = ptr cint

-  Ppcre* = ptr TPcre

-  Ppcre_callout_block = ptr tpcre_callout_block

-  Ppcre_extra = ptr Tpcre_extra

-

-#************************************************

-#*       Perl-Compatible Regular Expressions    *

-#************************************************

-#

-#   Modified by Andreas Rumpf for h2pas.

-

-# In its original form, this is the .in file that is transformed by

-# "configure" into pcre.h.

-#

-#           Copyright (c) 1997-2005 University of Cambridge

-#

-# -----------------------------------------------------------------------------

-# Redistribution and use in source and binary forms, with or without

-# modification, are permitted provided that the following conditions are met:

-#

-#    * Redistributions of source code must retain the above copyright notice,

-#      this list of conditions and the following disclaimer.

-#

-#    * Redistributions in binary form must reproduce the above copyright

-#      notice, this list of conditions and the following disclaimer in the

-#      documentation and/or other materials provided with the distribution.

-#

-#    * Neither the name of the University of Cambridge nor the names of its

-#      contributors may be used to endorse or promote products derived from

-#      this software without specific prior written permission.

-#

-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE

-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE

-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR

-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF

-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS

-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN

-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)

-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE

-# POSSIBILITY OF SUCH DAMAGE.

-# -----------------------------------------------------------------------------

-

-# The file pcre.h is build by "configure". Do not edit it; instead

-# make changes to pcre.in.

-

-const

-  PCRE_MAJOR* = 6

-  PCRE_MINOR* = 3

-  PCRE_DATE* = "2005/11/29"

-  # Options

-  PCRE_CASELESS* = 0x00000001

-  PCRE_MULTILINE* = 0x00000002

-  PCRE_DOTALL* = 0x00000004

-  PCRE_EXTENDED* = 0x00000008

-  PCRE_ANCHORED* = 0x00000010

-  PCRE_DOLLAR_ENDONLY* = 0x00000020

-  PCRE_EXTRA* = 0x00000040

-  PCRE_NOTBOL* = 0x00000080

-  PCRE_NOTEOL* = 0x00000100

-  PCRE_UNGREEDY* = 0x00000200

-  PCRE_NOTEMPTY* = 0x00000400

-  PCRE_UTF8* = 0x00000800

-  PCRE_NO_AUTO_CAPTURE* = 0x00001000

-  PCRE_NO_UTF8_CHECK* = 0x00002000

-  PCRE_AUTO_CALLOUT* = 0x00004000

-  PCRE_PARTIAL* = 0x00008000

-  PCRE_DFA_SHORTEST* = 0x00010000

-  PCRE_DFA_RESTART* = 0x00020000

-  PCRE_FIRSTLINE* = 0x00040000

-  # Exec-time and get/set-time error codes

-  PCRE_ERROR_NOMATCH* = -(1)

-  PCRE_ERROR_NULL* = -(2)

-  PCRE_ERROR_BADOPTION* = -(3)

-  PCRE_ERROR_BADMAGIC* = -(4)

-  PCRE_ERROR_UNKNOWN_NODE* = -(5)

-  PCRE_ERROR_NOMEMORY* = -(6)

-  PCRE_ERROR_NOSUBSTRING* = -(7)

-  PCRE_ERROR_MATCHLIMIT* = -(8)

-  # Never used by PCRE itself

-  PCRE_ERROR_CALLOUT* = -(9)

-  PCRE_ERROR_BADUTF8* = -(10)

-  PCRE_ERROR_BADUTF8_OFFSET* = -(11)

-  PCRE_ERROR_PARTIAL* = -(12)

-  PCRE_ERROR_BADPARTIAL* = -(13)

-  PCRE_ERROR_INTERNAL* = -(14)

-  PCRE_ERROR_BADCOUNT* = -(15)

-  PCRE_ERROR_DFA_UITEM* = -(16)

-  PCRE_ERROR_DFA_UCOND* = -(17)

-  PCRE_ERROR_DFA_UMLIMIT* = -(18)

-  PCRE_ERROR_DFA_WSSIZE* = -(19)

-  PCRE_ERROR_DFA_RECURSE* = -(20)

-  # Request types for pcre_fullinfo()

-  PCRE_INFO_OPTIONS* = 0

-  PCRE_INFO_SIZE* = 1

-  PCRE_INFO_CAPTURECOUNT* = 2

-  PCRE_INFO_BACKREFMAX* = 3

-  PCRE_INFO_FIRSTBYTE* = 4

-  # For backwards compatibility

-  PCRE_INFO_FIRSTCHAR* = 4

-  PCRE_INFO_FIRSTTABLE* = 5

-  PCRE_INFO_LASTLITERAL* = 6

-  PCRE_INFO_NAMEENTRYSIZE* = 7

-  PCRE_INFO_NAMECOUNT* = 8

-  PCRE_INFO_NAMETABLE* = 9

-  PCRE_INFO_STUDYSIZE* = 10

-  PCRE_INFO_DEFAULT_TABLES* = 11

-  # Request types for pcre_config()

-  PCRE_CONFIG_UTF8* = 0

-  PCRE_CONFIG_NEWLINE* = 1

-  PCRE_CONFIG_LINK_SIZE* = 2

-  PCRE_CONFIG_POSIX_MALLOC_THRESHOLD* = 3

-  PCRE_CONFIG_MATCH_LIMIT* = 4

-  PCRE_CONFIG_STACKRECURSE* = 5

-  PCRE_CONFIG_UNICODE_PROPERTIES* = 6

-  # Bit flags for the pcre_extra structure

-  PCRE_EXTRA_STUDY_DATA* = 0x0001

-  PCRE_EXTRA_MATCH_LIMIT* = 0x0002

-  PCRE_EXTRA_CALLOUT_DATA* = 0x0004

-  PCRE_EXTRA_TABLES* = 0x0008

-  # Types

-

-type

-  TPcre = record

-  #undefined structure

-

-

-  # The structure for passing additional data to pcre_exec(). This is defined

-  # in such as way as to be extensible. Always add new fields at the end,

-  # in order to remain compatible. 

-  # Bits for which fields are set 

-  # Opaque data from pcre_study()  

-  # Maximum number of calls to match()  

-  # Data passed back in callouts  

-  # Const before type ignored 

-  # Pointer to character tables  

-  Tpcre_extra* {.final.} = object

-    flags: cuint

-    study_data: pointer

-    match_limit: cuint

-    callout_data: pointer

-    tables: ptr byte

-

-  # The structure for passing out data via the pcre_callout_function. We use a

-  # structure so that new fields can be added on the end in future versions,

-  # without changing the API of the function, thereby allowing old clients to

-  # work without modification.  

-  # Identifies version of block  

-  # ------------------------ Version 0 -------------------------------  

-  # Number compiled into pattern  

-  # The offset vector  

-  # Const before type ignored 

-  # The subject being matched  

-  # The length of the subject  

-  # Offset to start of this match attempt  

-  # Where we currently are in the subject  

-  # Max current capture  

-  # Most recently closed capture  

-  # Data passed in with the call  

-  # ------------------- Added for Version 1 --------------------------  

-  # Offset to next item in the pattern  

-  # Length of next item in the pattern  

-  # ------------------------------------------------------------------  

-  TPcre_callout_block* {.final.} = object

-    version: cint

-    callout_number: cint

-    offset_vector: ptr cint

-    subject: ptr char

-    subject_length: cint

-    start_match: cint

-    current_position: cint

-    capture_top: cint

-    capture_last: cint

-    callout_data: pointer

-    pattern_position: cint

-    next_item_length: cint

-

-# Exported PCRE functions  

-

-proc pcre_compile*(para1: Pchar, para2: cint, para3: ptr Pchar,

-                  para4: Pint, para5: Pbyte): Ppcre {.

-                  importc: "pcre_compile", noconv.}

-

-proc pcre_compile2*(para1: Pchar, para2: cint, para3: Pint, para4: PPchar,

-                   para5: Pint, para6: Pbyte): Ppcre {. 

-                   importc: "pcre_compile2", noconv.}

-

-proc pcre_config*(para1: cint, para2: pointer): cint {.

-  importc: "pcre_config", noconv.}

-

-proc pcre_copy_named_substring*(para1: Ppcre, para2: Pchar, para3: Pint,

-                               para4: cint, para5: Pchar, para6: Pchar,

-                               para7: cint): cint {.

-                               importc: "pcre_copy_named_substring", noconv.}

-

-proc pcre_copy_substring*(para1: Pchar, para2: Pint, para3: cint, para4: cint,

-                         para5: Pchar, para6: cint): cint {.

-                         importc: "pcre_copy_substring", noconv.}

-

-proc pcre_dfa_exec*(para1: Ppcre, para2: Ppcre_extra, para3: Pchar,

-                   para4: cint, para5: cint, para6: cint, para7: Pint,

-                   para8: cint, para9: Pint, para10: cint): cint {.

-                   importc: "pcre_dfa_exec", noconv.}

-

-proc pcre_exec*(para1: Ppcre, para2: Ppcre_extra, para3: Pchar,

-               para4: cint, para5: cint, para6: cint, para7: Pint,

-               para8: cint): cint {.importc: "pcre_exec", noconv.}

-

-proc pcre_free_substring*(para1: Pchar) {.

-  importc: "pcre_free_substring", noconv.}

-

-proc pcre_free_substring_list*(para1: PPchar) {.

-  importc: "pcre_free_substring_list", noconv.}

-

-proc pcre_fullinfo*(para1: Ppcre, para2: Ppcre_extra, para3: cint,

-                   para4: pointer): cint {.importc: "pcre_fullinfo", noconv.}

-

-proc pcre_get_named_substring*(para1: Ppcre, para2: Pchar, para3: Pint,

-                              para4: cint, para5: Pchar, para6: PPchar): cint {.

-                              importc: "pcre_get_named_substring", noconv.}

-

-proc pcre_get_stringnumber*(para1: Ppcre, para2: Pchar): cint {.

-  importc: "pcre_get_stringnumber", noconv.}

-

-proc pcre_get_substring*(para1: Pchar, para2: Pint, para3: cint,

-                        para4: cint, para5: PPchar): cint {.

-                        importc: "pcre_get_substring", noconv.}

-

-proc pcre_get_substring_list*(para1: Pchar, para2: Pint, para3: cint,

-                             para4: ptr PPchar): cint {.

-                             importc: "pcre_get_substring_list", noconv.}

-

-proc pcre_info*(para1: Ppcre, para2: Pint, para3: Pint): cint {.

-  importc: "pcre_info", noconv.}

-

-proc pcre_maketables*: ptr byte {.

-  importc: "pcre_maketables", noconv.}

-

-proc pcre_refcount*(para1: Ppcre, para2: cint): cint {.

-  importc: "pcre_refcount", noconv.}

-

-proc pcre_study*(para1: Ppcre, para2: cint,

-                 para3: ptr CString): Ppcre_extra {.importc, noconv.}

-

-proc pcre_version*: CString {.importc: "pcre_version", noconv.}

-

-# Indirection for store get and free functions. These can be set to

-# alternative malloc/free functions if required. Special ones are used in the

-# non-recursive case for "frames". There is also an optional callout function

-# that is triggered by the (?) regex item.

-#

-

-# we use Nimrod's memory manager (but not GC!) for these functions:

-var

-  pcre_malloc {.importc: "pcre_malloc".}: proc (para1: int): pointer {.noconv.}

-  pcre_free {.importc: "pcre_free".}: proc (para1: pointer) {.noconv.}

-  pcre_stack_malloc {.importc: "pcre_stack_malloc".}:

-    proc (para1: int): pointer {.noconv.}

-  pcre_stack_free  {.importc: "pcre_stack_free".}:

-    proc (para1: pointer) {.noconv.}

-  pcre_callout {.importc: "pcre_callout".}:

-    proc (para1: Ppcre_callout_block): cint {.noconv.}

-

-pcre_malloc = system.alloc

-pcre_free = system.dealloc

-pcre_stack_malloc = system.alloc

-pcre_stack_free = system.dealloc

-pcre_callout = nil

+#
+#
+#            Nimrod's Runtime Library
+#        (c) Copyright 2006 Andreas Rumpf
+#
+#    See the file "copying.txt", included in this
+#    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
+  Pbyte = ptr byte
+  PPchar = ptr cstring
+  Pint = ptr cint
+  Ppcre* = ptr TPcre
+  Ppcre_callout_block* = ptr tpcre_callout_block
+  Ppcre_extra* = ptr Tpcre_extra
+  TPcre {.final, pure.} = object
+
+  # The structure for passing additional data to pcre_exec(). This is defined
+  # in such as way as to be extensible.
+  # Bits for which fields are set
+  # Opaque data from pcre_study()
+  # Maximum number of calls to match()
+  # Data passed back in callouts
+  # Const before type ignored
+  # Pointer to character tables
+  Tpcre_extra* {.final, pure.} = object
+    flags: cint
+    study_data: pointer
+    match_limit: cint
+    callout_data: pointer
+    tables: ptr byte
+
+  # The structure for passing out data via the pcre_callout_function. We use a
+  # structure so that new fields can be added on the end in future versions,
+  # without changing the API of the function, thereby allowing old clients to
+  # work without modification.
+  # Identifies version of block
+  # ------------------------ Version 0 -------------------------------
+  # Number compiled into pattern
+  # The offset vector
+  # Const before type ignored
+  # The subject being matched
+  # The length of the subject
+  # Offset to start of this match attempt
+  # Where we currently are in the subject
+  # Max current capture
+  # Most recently closed capture
+  # Data passed in with the call
+  # ------------------- Added for Version 1 --------------------------
+  # Offset to next item in the pattern
+  # Length of next item in the pattern
+  # ------------------------------------------------------------------
+  TPcre_callout_block* {.final, pure.} = object
+    version: cint
+    callout_number: cint
+    offset_vector: ptr cint
+    subject: ptr char
+    subject_length: cint
+    start_match: cint
+    current_position: cint
+    capture_top: cint
+    capture_last: cint
+    callout_data: pointer
+    pattern_position: cint
+    next_item_length: cint
+
+
+#************************************************
+#*       Perl-Compatible Regular Expressions    *
+#************************************************
+#
+#   Modified by Andreas Rumpf for h2pas.
+
+# In its original form, this is the .in file that is transformed by
+# "configure" into pcre.h.
+#
+#           Copyright (c) 1997-2005 University of Cambridge
+#
+# -----------------------------------------------------------------------------
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+#    * Redistributions of source code must retain the above copyright notice,
+#      this list of conditions and the following disclaimer.
+#
+#    * Redistributions in binary form must reproduce the above copyright
+#      notice, this list of conditions and the following disclaimer in the
+#      documentation and/or other materials provided with the distribution.
+#
+#    * Neither the name of the University of Cambridge nor the names of its
+#      contributors may be used to endorse or promote products derived from
+#      this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+# -----------------------------------------------------------------------------
+
+# The file pcre.h is build by "configure". Do not edit it; instead
+# make changes to pcre.in.
+
+const
+  PCRE_MAJOR* = 6
+  PCRE_MINOR* = 3
+  PCRE_DATE* = "2005/11/29"
+  # Options
+  PCRE_CASELESS* = 0x00000001
+  PCRE_MULTILINE* = 0x00000002
+  PCRE_DOTALL* = 0x00000004
+  PCRE_EXTENDED* = 0x00000008
+  PCRE_ANCHORED* = 0x00000010
+  PCRE_DOLLAR_ENDONLY* = 0x00000020
+  PCRE_EXTRA* = 0x00000040
+  PCRE_NOTBOL* = 0x00000080
+  PCRE_NOTEOL* = 0x00000100
+  PCRE_UNGREEDY* = 0x00000200
+  PCRE_NOTEMPTY* = 0x00000400
+  PCRE_UTF8* = 0x00000800
+  PCRE_NO_AUTO_CAPTURE* = 0x00001000
+  PCRE_NO_UTF8_CHECK* = 0x00002000
+  PCRE_AUTO_CALLOUT* = 0x00004000
+  PCRE_PARTIAL* = 0x00008000
+  PCRE_DFA_SHORTEST* = 0x00010000
+  PCRE_DFA_RESTART* = 0x00020000
+  PCRE_FIRSTLINE* = 0x00040000
+  # Exec-time and get/set-time error codes
+  PCRE_ERROR_NOMATCH* = -(1)
+  PCRE_ERROR_NULL* = -(2)
+  PCRE_ERROR_BADOPTION* = -(3)
+  PCRE_ERROR_BADMAGIC* = -(4)
+  PCRE_ERROR_UNKNOWN_NODE* = -(5)
+  PCRE_ERROR_NOMEMORY* = -(6)
+  PCRE_ERROR_NOSUBSTRING* = -(7)
+  PCRE_ERROR_MATCHLIMIT* = -(8)
+  # Never used by PCRE itself
+  PCRE_ERROR_CALLOUT* = -(9)
+  PCRE_ERROR_BADUTF8* = -(10)
+  PCRE_ERROR_BADUTF8_OFFSET* = -(11)
+  PCRE_ERROR_PARTIAL* = -(12)
+  PCRE_ERROR_BADPARTIAL* = -(13)
+  PCRE_ERROR_INTERNAL* = -(14)
+  PCRE_ERROR_BADCOUNT* = -(15)
+  PCRE_ERROR_DFA_UITEM* = -(16)
+  PCRE_ERROR_DFA_UCOND* = -(17)
+  PCRE_ERROR_DFA_UMLIMIT* = -(18)
+  PCRE_ERROR_DFA_WSSIZE* = -(19)
+  PCRE_ERROR_DFA_RECURSE* = -(20)
+  # Request types for pcre_fullinfo()
+  PCRE_INFO_OPTIONS* = 0
+  PCRE_INFO_SIZE* = 1
+  PCRE_INFO_CAPTURECOUNT* = 2
+  PCRE_INFO_BACKREFMAX* = 3
+  PCRE_INFO_FIRSTBYTE* = 4
+  # For backwards compatibility
+  PCRE_INFO_FIRSTCHAR* = 4
+  PCRE_INFO_FIRSTTABLE* = 5
+  PCRE_INFO_LASTLITERAL* = 6
+  PCRE_INFO_NAMEENTRYSIZE* = 7
+  PCRE_INFO_NAMECOUNT* = 8
+  PCRE_INFO_NAMETABLE* = 9
+  PCRE_INFO_STUDYSIZE* = 10
+  PCRE_INFO_DEFAULT_TABLES* = 11
+  # Request types for pcre_config()
+  PCRE_CONFIG_UTF8* = 0
+  PCRE_CONFIG_NEWLINE* = 1
+  PCRE_CONFIG_LINK_SIZE* = 2
+  PCRE_CONFIG_POSIX_MALLOC_THRESHOLD* = 3
+  PCRE_CONFIG_MATCH_LIMIT* = 4
+  PCRE_CONFIG_STACKRECURSE* = 5
+  PCRE_CONFIG_UNICODE_PROPERTIES* = 6
+  # Bit flags for the pcre_extra structure
+  PCRE_EXTRA_STUDY_DATA* = 0x0001
+  PCRE_EXTRA_MATCH_LIMIT* = 0x0002
+  PCRE_EXTRA_CALLOUT_DATA* = 0x0004
+  PCRE_EXTRA_TABLES* = 0x0008
+
+# Exported PCRE functions
+
+proc pcre_compile*(para1: cstring, para2: cint, para3: ptr cstring,
+                  para4: ptr int, para5: Pbyte): Ppcre {.
+                  importc: "pcre_compile", noconv.}
+
+proc pcre_compile2*(para1: cstring, para2: cint, para3: Pint, para4: PPchar,
+                   para5: ptr int, para6: Pbyte): Ppcre {.
+                   importc: "pcre_compile2", noconv.}
+
+proc pcre_config*(para1: cint, para2: pointer): cint {.
+  importc: "pcre_config", noconv.}
+
+proc pcre_copy_named_substring*(para1: Ppcre, para2: cstring, para3: Pint,
+                               para4: cint, para5: cstring, para6: cstring,
+                               para7: cint): cint {.
+                               importc: "pcre_copy_named_substring", noconv.}
+
+proc pcre_copy_substring*(para1: cstring, para2: Pint, para3: cint, para4: cint,
+                         para5: cstring, para6: cint): cint {.
+                         importc: "pcre_copy_substring", noconv.}
+
+proc pcre_dfa_exec*(para1: Ppcre, para2: Ppcre_extra, para3: cstring,
+                   para4: cint, para5: cint, para6: cint, para7: Pint,
+                   para8: cint, para9: Pint, para10: cint): cint {.
+                   importc: "pcre_dfa_exec", noconv.}
+
+proc pcre_exec*(para1: Ppcre, para2: Ppcre_extra, para3: cstring,
+               para4: cint, para5: cint, para6: cint, para7: Pint,
+               para8: cint): cint {.importc: "pcre_exec", noconv.}
+
+proc pcre_free_substring*(para1: cstring) {.
+  importc: "pcre_free_substring", noconv.}
+
+proc pcre_free_substring_list*(para1: PPchar) {.
+  importc: "pcre_free_substring_list", noconv.}
+
+proc pcre_fullinfo*(para1: Ppcre, para2: Ppcre_extra, para3: cint,
+                   para4: pointer): cint {.importc: "pcre_fullinfo", noconv.}
+
+proc pcre_get_named_substring*(para1: Ppcre, para2: cstring, para3: Pint,
+                              para4: cint, para5: cstring, para6: PPchar): cint {.
+                              importc: "pcre_get_named_substring", noconv.}
+
+proc pcre_get_stringnumber*(para1: Ppcre, para2: cstring): cint {.
+  importc: "pcre_get_stringnumber", noconv.}
+
+proc pcre_get_substring*(para1: cstring, para2: Pint, para3: cint,
+                        para4: cint, para5: PPchar): cint {.
+                        importc: "pcre_get_substring", noconv.}
+
+proc pcre_get_substring_list*(para1: cstring, para2: Pint, para3: cint,
+                             para4: ptr PPchar): cint {.
+                             importc: "pcre_get_substring_list", noconv.}
+
+proc pcre_info*(para1: Ppcre, para2: Pint, para3: Pint): cint {.
+  importc: "pcre_info", noconv.}
+
+proc pcre_maketables*: ptr byte {.
+  importc: "pcre_maketables", noconv.}
+
+proc pcre_refcount*(para1: Ppcre, para2: cint): cint {.
+  importc: "pcre_refcount", noconv.}
+
+proc pcre_study*(para1: Ppcre, para2: cint,
+                 para3: ptr CString): Ppcre_extra {.importc, noconv.}
+
+proc pcre_version*: CString {.importc: "pcre_version", noconv.}
+
+# Indirection for store get and free functions. These can be set to
+# alternative malloc/free functions if required. Special ones are used in the
+# non-recursive case for "frames". There is also an optional callout function
+# that is triggered by the (?) regex item.
+#
+
+# we use Nimrod's memory manager (but not GC!) for these functions:
+type
+  TMalloc = proc (para1: int): pointer {.noconv.}
+  TFree = proc (para1: pointer) {.noconv.}
+var
+  pcre_malloc {.importc: "pcre_malloc".}: TMalloc
+  pcre_free {.importc: "pcre_free".}: TFree
+  pcre_stack_malloc {.importc: "pcre_stack_malloc".}: TMalloc
+  pcre_stack_free  {.importc: "pcre_stack_free".}: TFree
+  pcre_callout {.importc: "pcre_callout".}:
+    proc (para1: Ppcre_callout_block): cint {.noconv.}
+
+pcre_malloc = cast[TMalloc](system.alloc)
+pcre_free = cast[TFree](system.dealloc)
+pcre_stack_malloc = cast[TMalloc](system.alloc)
+pcre_stack_free = cast[TFree](system.dealloc)
+pcre_callout = nil
diff --git a/lib/base/regexprs.nim b/lib/base/regexprs.nim
index b9272ca47..9979035b8 100644
--- a/lib/base/regexprs.nim
+++ b/lib/base/regexprs.nim
@@ -1,114 +1,115 @@
-#

-#

-#            Nimrod's Runtime Library

-#        (c) Copyright 2006 Andreas Rumpf

-#

-#    See the file "copying.txt", included in this

-#    distribution, for details about the copyright.

-#

-

-## Regular expression support for Nimrod.

-## Currently this module is implemented by providing a wrapper around the

-## `PRCE (Perl-Compatible Regular Expressions) <http://www.pcre.org>`_

-## C library. This means that your application will depend on the PRCE

-## library's licence when using this module, which should not be a problem

-## though.

-## PRCE's licence follows:

-##

-## .. include:: ../doc/regexprs.txt

-##

-

-# This is not just a convenient wrapper for the pcre library; the

-# API will stay the same if the implementation should change.

-

-import

-  pcre, strutils

-

-type

-  EInvalidRegEx* = object of EInvalidValue

-    ## is raised if the pattern is no valid regular expression.

-

-const

-  MaxSubpatterns* = 10

-    ## defines the maximum number of subpatterns that can be captured.

-    ## More subpatterns cannot be captured!

-

-proc match*(s, pattern: string, substrs: var openarray[string],

-            start: int = 0): bool

-  ## returns ``true`` if ``s`` matches the ``pattern[start..]`` and

-  ## the captured substrings in the array ``substrs``. If it does not

-  ## match, nothing is written into ``substrs`` and ``false`` is

-  ## returned.

-

-proc match*(s, pattern: string, start: int = 0): bool

-  ## returns ``true`` if ``s`` matches the ``pattern`` beginning from ``start``. 

-

-proc matchLen*(s, pattern: string, substrs: var openarray[string],

-               start: int = 0): int

-  ## the same as ``match``, but it returns the length of the match,

-  ## if there is no match, -1 is returned. Note that a match length

-  ## of zero can happen.

-

-proc find*(s, pattern: string, substrs: var openarray[string],

-           start: int = 0): bool

-  ## returns ``true`` if ``pattern`` occurs in ``s`` and the captured

-  ## substrings in the array ``substrs``. If it does not match, nothing

-  ## is written into ``substrs``.

-proc find*(s, pattern: string, start: int = 0): bool

-  ## returns ``true`` if ``pattern`` occurs in ``s``.

-

-

-proc rawCompile(pattern: string, flags: cint): PPcre =

-  var

-    msg: CString

-    offset: cint

-    com = pcreCompile(pattern, flags, addr(msg), addr(offset), nil)

-  if com == nil:

-    var e: ref EInvalidRegEx

-    new(e)

-    e.msg = $msg & "\n" & pattern & "\n" & repeatChar(offset) & "^\n"

-    raise e

-  return com

-

-proc matchOrFind(s: string, pattern: PPcre, substrs: var openarray[string],

-                 start: cint): cint =

-  var

-    rawMatches: array [0..maxSubpatterns * 3 - 1, cint]

-    res = int(pcreExec(pattern, nil, s, length(s), start, 0,

-      cast[pint](addr(rawMatches)), maxSubpatterns * 3))

-  dealloc(pattern)

-  if res < 0: return res

-  for i in 0..res-1:

-    var

-      a = rawMatches[i * 3]

-      b = rawMatches[i * 3 + 1]

-    if a >= 0: substrs[i] = copy(s, a, b)

-    else: substrs[i] = ""

-  return res

-

-proc matchOrFind(s: string, pattern: PPcre, start: cint): cint =

-  var

-    rawMatches: array [0..maxSubpatterns * 3 - 1, cint]

-    res = pcreExec(pattern, nil, s, length(s), start, 0,

-                   cast[pint](addr(rawMatches)), maxSubpatterns * 3)

-  dealloc(pattern)

-  return res

-

-proc match(s, pattern: string, substrs: var openarray[string],

-           start: int = 0): bool =

-  return matchOrFind(s, rawCompile(pattern, PCRE_ANCHORED),

-                     substrs, start) >= 0

-

-proc matchLen(s, pattern: string, substrs: var openarray[string],

-              start: int = 0): int =

-  return matchOrFind(s, rawCompile(pattern, PCRE_ANCHORED), substrs, start)

-

-proc find(s, pattern: string, substrs: var openarray[string],

-          start: int = 0): bool =

-  return matchOrFind(s, rawCompile(pattern, 0), substrs, start) >= 0

-

-proc match(s, pattern: string, start: int = 0): bool =

-  return matchOrFind(s, rawCompile(pattern, PCRE_ANCHORED), start) >= 0

-

-proc find(s, pattern: string, start: int = 0): bool =

-  return matchOrFind(s, rawCompile(pattern, 0), start) >= 0

+#
+#
+#            Nimrod's Runtime Library
+#        (c) Copyright 2006 Andreas Rumpf
+#
+#    See the file "copying.txt", included in this
+#    distribution, for details about the copyright.
+#
+
+## Regular expression support for Nimrod.
+## Currently this module is implemented by providing a wrapper around the
+## `PRCE (Perl-Compatible Regular Expressions) <http://www.pcre.org>`_
+## C library. This means that your application will depend on the PRCE
+## library's licence when using this module, which should not be a problem
+## though.
+## PRCE's licence follows:
+##
+## .. include:: ../doc/regexprs.txt
+##
+
+# This is not just a convenient wrapper for the pcre library; the
+# API will stay the same if the implementation should change.
+
+import
+  pcre, strutils
+
+type
+  EInvalidRegEx* = object of EInvalidValue
+    ## is raised if the pattern is no valid regular expression.
+
+const
+  MaxSubpatterns* = 10
+    ## defines the maximum number of subpatterns that can be captured.
+    ## More subpatterns cannot be captured!
+
+proc match*(s, pattern: string, matches: var openarray[string],
+            start: int = 0): bool
+  ## returns ``true`` if ``s`` matches the ``pattern[start..]`` and
+  ## the captured substrings in the array ``matches``. If it does not
+  ## match, nothing is written into ``matches`` and ``false`` is
+  ## returned.
+
+proc match*(s, pattern: string, start: int = 0): bool
+  ## returns ``true`` if ``s`` matches the ``pattern`` beginning from ``start``.
+
+proc matchLen*(s, pattern: string, matches: var openarray[string],
+               start: int = 0): int
+  ## the same as ``match``, but it returns the length of the match,
+  ## if there is no match, -1 is returned. Note that a match length
+  ## of zero can happen.
+
+proc find*(s, pattern: string, matches: var openarray[string],
+           start: int = 0): bool
+  ## returns ``true`` if ``pattern`` occurs in ``s`` and the captured
+  ## substrings in the array ``matches``. If it does not match, nothing
+  ## is written into ``matches``.
+proc find*(s, pattern: string, start: int = 0): bool
+  ## returns ``true`` if ``pattern`` occurs in ``s``.
+
+
+proc rawCompile(pattern: string, flags: cint): PPcre =
+  var
+    msg: CString
+    offset: int
+    com = pcreCompile(pattern, flags, addr(msg), addr(offset), nil)
+  if com == nil:
+    var e: ref EInvalidRegEx
+    new(e)
+    e.msg = $msg & "\n" & pattern & "\n" & repeatChar(offset) & "^\n"
+    raise e
+  return com
+
+proc matchOrFind(s: string, pattern: PPcre, matches: var openarray[string],
+                 start: cint): cint =
+  var
+    rawMatches: array [0..maxSubpatterns * 3 - 1, cint]
+    res = int(pcreExec(pattern, nil, s, len(s), start, 0,
+      cast[ptr cint](addr(rawMatches)), maxSubpatterns * 3))
+  dealloc(pattern)
+  if res < 0: return res
+  for i in 0..res-1:
+    var
+      a = rawMatches[i * 2]
+      b = rawMatches[i * 2 + 1]
+    if a >= 0'i32: matches[i] = copy(s, a, int(b)-1)
+    else: matches[i] = ""
+  return res
+
+proc matchOrFind(s: string, pattern: PPcre, start: cint): cint =
+  var
+    rawMatches: array [0..maxSubpatterns * 3 - 1, cint]
+    res = pcreExec(pattern, nil, s, len(s), start, 0,
+                   cast[ptr cint](addr(rawMatches)), maxSubpatterns * 3)
+  dealloc(pattern)
+  return res
+
+proc match(s, pattern: string, matches: var openarray[string],
+           start: int = 0): bool =
+  return matchOrFind(s, rawCompile(pattern, PCRE_ANCHORED),
+                     matches, start) >= 0'i32
+
+proc matchLen(s, pattern: string, matches: var openarray[string],
+              start: int = 0): int =
+  return matchOrFind(s, rawCompile(pattern, PCRE_ANCHORED), matches, start)
+
+proc find(s, pattern: string, matches: var openarray[string],
+          start: int = 0): bool =
+  return matchOrFind(s, rawCompile(pattern, PCRE_MULTILINE),
+                     matches, start) >= 0'i32
+
+proc match(s, pattern: string, start: int = 0): bool =
+  return matchOrFind(s, rawCompile(pattern, PCRE_ANCHORED), start) >= 0'i32
+
+proc find(s, pattern: string, start: int = 0): bool =
+  return matchOrFind(s, rawCompile(pattern, PCRE_MULTILINE), start) >= 0'i32
diff --git a/lib/cntbits.nim b/lib/cntbits.nim
index 0218bf4f2..a975f38ae 100644
--- a/lib/cntbits.nim
+++ b/lib/cntbits.nim
@@ -1,20 +1,20 @@
-#

-#

-#            Nimrod's Runtime Library

-#        (c) Copyright 2006 Andreas Rumpf

-#

-#    See the file "copying.txt", included in this

-#    distribution, for details about the copyright.

-#

-

-

-proc population16(a: int): int {.inline.} =

-  var x = a

-  x = ((x and 0xAAAA) shr 1) + (x and 0x5555)

-  x = ((x and 0xCCCC) shr 2) + (x and 0x3333)

-  x = ((x and 0xF0F0) shr 4) + (x and 0x0F0F)

-  x = ((x and 0xFF00) shr 8) + (x and 0x00FF)

-  return x

-

-proc countBits(n: int32): int =

-  result = population16(n and 0xffff) + population16(n shr 16)

+#
+#
+#            Nimrod's Runtime Library
+#        (c) Copyright 2006 Andreas Rumpf
+#
+#    See the file "copying.txt", included in this
+#    distribution, for details about the copyright.
+#
+
+
+proc population16(a: int): int {.inline.} =
+  var x = a
+  x = ((x and 0xAAAA) shr 1) + (x and 0x5555)
+  x = ((x and 0xCCCC) shr 2) + (x and 0x3333)
+  x = ((x and 0xF0F0) shr 4) + (x and 0x0F0F)
+  x = ((x and 0xFF00) shr 8) + (x and 0x00FF)
+  return x
+
+proc countBits(n: int32): int =
+  result = population16(n and 0xffff'i32) + population16(n shr 16'i32)
diff --git a/lib/complex.nim b/lib/complex.nim
index 6f0f568a3..f50ff4bd0 100644
--- a/lib/complex.nim
+++ b/lib/complex.nim
@@ -1,106 +1,106 @@
-#

-#

-#            Nimrod's Runtime Library

-#        (c) Copyright 2006 Andreas Rumpf

-#

-#    See the file "copying.txt", included in this

-#    distribution, for details about the copyright.

-#

-

-

-

-## This module implements complex numbers.

-

-{.push checks:off, line_dir:off, stack_trace:off, debugger:off.}

-# the user does not want to trace a part

-# of the standard library!

-

-import

-  math

-

-type

-  TComplex* = tuple[re, im: float] 

-    ## a complex number, consisting of a real and an imaginary part

-

-proc `==` *(x, y: TComplex): bool =

-  ## Compare two complex numbers `x` and `y` for equality.

-  result = x.re == y.re and x.im == y.im

-

-proc `+` *(x, y: TComplex): TComplex =

-  ## Add two complex numbers.

-  result.re = x.re + y.re

-  result.im = x.im + y.im

-

-proc `-` *(x, y: TComplex): TComplex =

-  ## Subtract two complex numbers.

-  result.re = x.re - y.re

-  result.im = x.im - y.im

-

-proc `-` *(z: TComplex): TComplex =

-  ## Unary minus for complex numbers.

-  result.re = -z.re

-  result.im = -z.im

-

-proc `/` *(x, y: TComplex): TComplex =

-  ## Divide `x` by `y`.

-  var

-    r, den: float

-  if abs(y.re) < abs(y.im):

-    r = y.re / y.im

-    den = y.im + r * y.re

-    result.re = (x.re * r + x.im) / den

-    result.im = (x.im * r - x.re) / den

-  else:

-    r = y.im / y.re

-    den = y.re + r * y.im

-    result.re = (x.re + r * x.im) / den

-    result.im = (x.im - r * x.re) / den

-

-proc `*` *(x, y: TComplex): TComplex =

-  ## Multiply `x` with `y`.

-  result.re = x.re * y.re - x.im * y.im

-  result.im = x.im * y.re + x.re * y.im

-

-proc abs*(z: TComplex): float =

-  ## Return the distance from (0,0) to `z`.

-

-  # optimized by checking special cases (sqrt is expensive)

-  var x, y, temp: float

-

-  x = abs(z.re)

-  y = abs(z.im)

-  if x == 0.0:

-    result = y

-  elif y == 0.0:

-    result = x

-  elif x > y:

-    temp = y / x

-    result = x * sqrt(1.0 + temp * temp)

-  else:

-    temp = x / y

-    result = y * sqrt(1.0 + temp * temp)

-

-proc sqrt*(z: TComplex): TComplex =

-  ## Square root for a complex number `z`.

-  var x, y, w, r: float

-

-  if z.re == 0.0 and z.im == 0.0:

-    result = z

-  else:

-    x = abs(z.re)

-    y = abs(z.im)

-    if x >= y:

-      r = y / x

-      w = sqrt(x) * sqrt(0.5 * (1.0 + sqrt(1.0 + r * r)))

-    else:

-      r = x / y

-      w = sqrt(y) * sqrt(0.5 * (r + sqrt(1.0 + r * r)))

-    if z.re >= 0.0:

-      result.re = w

-      result.im = z.im / (w * 2)

-    else:

-      if z.im >= 0.0: result.im = w

-      else:           result.im = -w

-      result.re = z.im / (c.im + c.im)

-

-{.pop.}

+#
+#
+#            Nimrod's Runtime Library
+#        (c) Copyright 2006 Andreas Rumpf
+#
+#    See the file "copying.txt", included in this
+#    distribution, for details about the copyright.
+#
+
+
+
+## This module implements complex numbers.
+
+{.push checks:off, line_dir:off, stack_trace:off, debugger:off.}
+# the user does not want to trace a part
+# of the standard library!
+
+import
+  math
+
+type
+  TComplex* = tuple[re, im: float] 
+    ## a complex number, consisting of a real and an imaginary part
+
+proc `==` *(x, y: TComplex): bool =
+  ## Compare two complex numbers `x` and `y` for equality.
+  result = x.re == y.re and x.im == y.im
+
+proc `+` *(x, y: TComplex): TComplex =
+  ## Add two complex numbers.
+  result.re = x.re + y.re
+  result.im = x.im + y.im
+
+proc `-` *(x, y: TComplex): TComplex =
+  ## Subtract two complex numbers.
+  result.re = x.re - y.re
+  result.im = x.im - y.im
+
+proc `-` *(z: TComplex): TComplex =
+  ## Unary minus for complex numbers.
+  result.re = -z.re
+  result.im = -z.im
+
+proc `/` *(x, y: TComplex): TComplex =
+  ## Divide `x` by `y`.
+  var
+    r, den: float
+  if abs(y.re) < abs(y.im):
+    r = y.re / y.im
+    den = y.im + r * y.re
+    result.re = (x.re * r + x.im) / den
+    result.im = (x.im * r - x.re) / den
+  else:
+    r = y.im / y.re
+    den = y.re + r * y.im
+    result.re = (x.re + r * x.im) / den
+    result.im = (x.im - r * x.re) / den
+
+proc `*` *(x, y: TComplex): TComplex =
+  ## Multiply `x` with `y`.
+  result.re = x.re * y.re - x.im * y.im
+  result.im = x.im * y.re + x.re * y.im
+
+proc abs*(z: TComplex): float =
+  ## Return the distance from (0,0) to `z`.
+
+  # optimized by checking special cases (sqrt is expensive)
+  var x, y, temp: float
+
+  x = abs(z.re)
+  y = abs(z.im)
+  if x == 0.0:
+    result = y
+  elif y == 0.0:
+    result = x
+  elif x > y:
+    temp = y / x
+    result = x * sqrt(1.0 + temp * temp)
+  else:
+    temp = x / y
+    result = y * sqrt(1.0 + temp * temp)
+
+proc sqrt*(z: TComplex): TComplex =
+  ## Square root for a complex number `z`.
+  var x, y, w, r: float
+
+  if z.re == 0.0 and z.im == 0.0:
+    result = z
+  else:
+    x = abs(z.re)
+    y = abs(z.im)
+    if x >= y:
+      r = y / x
+      w = sqrt(x) * sqrt(0.5 * (1.0 + sqrt(1.0 + r * r)))
+    else:
+      r = x / y
+      w = sqrt(y) * sqrt(0.5 * (r + sqrt(1.0 + r * r)))
+    if z.re >= 0.0:
+      result.re = w
+      result.im = z.im / (w * 2)
+    else:
+      if z.im >= 0.0: result.im = w
+      else:           result.im = -w
+      result.re = z.im / (c.im + c.im)
+
+{.pop.}
diff --git a/lib/contnrs.nim b/lib/contnrs.nim
index c4db5a316..fa993e104 100644
--- a/lib/contnrs.nim
+++ b/lib/contnrs.nim
@@ -1,5 +1,4 @@
 # Container library for Nimrod
-# Implemented with macros, because generics sucks in many ways
 
 # Data structures for now:
 # TTable, TSet, TList
diff --git a/lib/debugger.nim b/lib/debugger.nim
index 03cbb6c0b..f5d526d70 100644
--- a/lib/debugger.nim
+++ b/lib/debugger.nim
@@ -1,500 +1,500 @@
-#

-#

-#            Nimrod's Runtime Library

-#        (c) Copyright 2008 Andreas Rumpf

-#

-#    See the file "copying.txt", included in this

-#    distribution, for details about the copyright.

-#

-

-# This file implements the embedded debugger that can be linked

-# with the application. We should not use dynamic memory here as that

-# would interfere with the GC and trigger ON/OFF errors if the

-# user program corrupts memory. Unfortunately, for dispaying

-# variables we use the system.repr() proc which uses Nimrod

-# strings and thus allocates memory from the heap. Pity, but

-# I do not want to implement repr() twice. We also cannot deactivate

-# the GC here as that might run out of memory too quickly...

-

-type

-  TDbgState = enum

-    dbOff,        # debugger is turned off

-    dbStepInto,   # debugger is in tracing mode

-    dbStepOver,

-    dbSkipCurrent,

-    dbQuiting,    # debugger wants to quit

-    dbBreakpoints # debugger is only interested in breakpoints

-

-  TDbgBreakpoint {.final.} = object

-    low, high: int   # range from low to high; if disabled

-                     # both low and high are set to their negative values

-                     # this makes the check faster and safes memory

-    filename: string

-    name: string     # name of breakpoint

-

-  TVarSlot {.compilerproc, final.} = object # variable slots used for debugger:

-    address: pointer

-    typ: PNimType

-    name: cstring   # for globals this is "module.name"

-

-  PExtendedFrame = ptr TExtendedFrame

-  TExtendedFrame {.final.} = object  # If the debugger is enabled the compiler

-                                     # provides an extended frame. Of course

-                                     # only slots that are

-                                     # needed are allocated and not 10_000,

-                                     # except for the global data description.

-    f: TFrame

-    slots: array[0..10_000, TVarSlot]

-

-var

-  dbgInSignal: bool # wether the debugger is in the signal handler

-  dbgIn: TFile # debugger input stream

-  dbgUser: string = "s" # buffer for user input; first command is ``step_into``

-                        # needs to be global cause we store the last command

-                        # in it

-  dbgState: TDbgState = dbStepInto # state of debugger

-  dbgBP: array[0..127, TDbgBreakpoint] # breakpoints

-  dbgBPlen: int = 0

-

-  dbgSkipToFrame: PFrame # frame to be skipped to

-

-  dbgGlobalData: TExtendedFrame # this reserves much space, but

-                                # for now it is the most practical way

-

-  maxDisplayRecDepth: int = 5 # do not display too much data!

-

-proc findBreakpoint(name: string): int =

-  # returns -1 if not found

-  for i in countdown(dbgBPlen-1, 0):

-    if name == dbgBP[i].name: return i

-  return -1

-

-proc ListBreakPoints() =

-  write(stdout, "*** endb| Breakpoints:\n")

-  for i in 0 .. dbgBPlen-1:

-    write(stdout, dbgBP[i].name & ": " & $abs(dbgBP[i].low) & ".." &

-                  $abs(dbgBP[i].high) & dbgBP[i].filename)

-    if dbgBP[i].low < 0:

-      write(stdout, " [disabled]\n")

-    else:

-      write(stdout, "\n")

-  write(stdout, "***\n")

-

-proc openAppend(filename: string): TFile =

-  if openFile(result, filename, fmAppend):

-    write(result, "----------------------------------------\n")

-

-proc dbgRepr(p: pointer, typ: PNimType): string =

-  var

-    cl: TReprClosure

-  initReprClosure(cl)

-  cl.recDepth = maxDisplayRecDepth

-  # locks for the GC turned out to be a bad idea...

-  # inc(recGcLock)

-  result = ""

-  reprAux(result, p, typ, cl)

-  # dec(recGcLock)

-  deinitReprClosure(cl)

-

-proc writeVariable(stream: TFile, slot: TVarSlot) =

-  write(stream, slot.name)

-  write(stream, " = ")

-  writeln(stream, dbgRepr(slot.address, slot.typ))

-

-proc ListFrame(stream: TFile, f: PExtendedFrame) =

-  write(stream, "*** endb| Frame (" & $f.f.len &  " slots):\n")

-  for i in 0 .. f.f.len-1:

-    writeVariable(stream, f.slots[i])

-  write(stream, "***\n")

-

-proc ListVariables(stream: TFile, f: PExtendedFrame) =

-  write(stream, "*** endb| Frame (" & $f.f.len & " slots):\n")

-  for i in 0 .. f.f.len-1:

-    writeln(stream, f.slots[i].name)

-  write(stream, "***\n")

-

-proc debugOut(msg: cstring) =

-  # the *** *** markers are for easy recognition of debugger

-  # output for external frontends.

-  write(stdout, "*** endb| ")

-  write(stdout, msg)

-  write(stdout, "***\n")

-

-proc dbgFatal(msg: cstring) =

-  debugOut(msg)

-  dbgAborting = True # the debugger wants to abort

-  quit(1)

-

-proc findVariable(frame: PExtendedFrame, varname: cstring): int =

-  for i in 0 .. frame.f.len - 1:

-    if c_strcmp(frame.slots[i].name, varname) == 0: return i

-  return -1

-

-proc dbgShowCurrentProc(dbgFramePointer: PFrame) =

-  if dbgFramePointer != nil:

-    write(stdout, "*** endb| now in proc: ")

-    write(stdout, dbgFramePointer.procname)

-    write(stdout, " ***\n")

-  else:

-    write(stdout, "*** endb| (procedure name not available) ***\n")

-

-proc dbgShowExecutionPoint() =

-  write(stdout, "*** endb| " & $framePtr.filename & "(" & $framePtr.line &

-                ") " & $framePtr.procname & " ***\n")

-

-when defined(windows) or defined(dos) or defined(os2):

-  {.define: FileSystemCaseInsensitive.}

-

-proc fileMatches(c, bp: cstring): bool =

-  # bp = breakpoint filename

-  # c = current filename

-  # we consider it a match if bp is a suffix of c

-  # and the character for the suffix does not exist or

-  # is one of: \  /  :

-  # depending on the OS case does not matter!

-  var blen: int = c_strlen(bp)

-  var clen: int = c_strlen(c)

-  if blen > clen: return false

-  # check for \ /  :

-  if clen-blen-1 >= 0 and c[clen-blen-1] notin {'\\', '/', ':'}:

-    return false

-  var i = 0

-  while i < blen:

-    var x, y: char

-    x = bp[i]

-    y = c[i+clen-blen]

-    when defined(FileSystemCaseInsensitive):

-      if x >= 'A' and x <= 'Z': x = chr(ord(x) - ord('A') + ord('a'))

-      if y >= 'A' and y <= 'Z': y = chr(ord(y) - ord('A') + ord('a'))

-    if x != y: return false

-    inc(i)

-  return true

-

-proc dbgBreakpointReached(line: int): int =

-  for i in 0..dbgBPlen-1:

-    if line >= dbgBP[i].low and line <= dbgBP[i].high and

-        fileMatches(framePtr.filename, dbgBP[i].filename): return i

-  return -1

-

-proc scanAndAppendWord(src: string, a: var string, start: int): int =

-  result = start

-  # skip whitespace:

-  while src[result] in {'\t', ' '}: inc(result)

-  while True:

-    case src[result]

-    of 'a'..'z', '0'..'9': add(a, src[result])

-    of '_': nil # just skip it

-    of 'A'..'Z': add(a, chr(ord(src[result]) - ord('A') + ord('a')))

-    else: break

-    inc(result)

-

-proc scanWord(src: string, a: var string, start: int): int =

-  a = ""

-  result = scanAndAppendWord(src, a, start)

-

-proc scanFilename(src: string, a: var string, start: int): int =

-  result = start

-  a = ""

-  # skip whitespace:

-  while src[result] in {'\t', ' '}: inc(result)

-  while src[result] notin {'\t', ' ', '\0'}:

-    add(a, src[result])

-    inc(result)

-

-proc scanNumber(src: string, a: var int, start: int): int =

-  result = start

-  a = 0

-  while src[result] in {'\t', ' '}: inc(result)

-  while true:

-    case src[result]

-    of '0'..'9': a = a * 10 + ord(src[result]) - ord('0')

-    of '_': nil # skip underscores (nice for long line numbers)

-    else: break

-    inc(result)

-

-proc dbgHelp() =

-  debugOut("""

-list of commands (see the manual for further help):

-              GENERAL

-h, help                 display this help message

-q, quit                 quit the debugger and the program

-<ENTER>                 repeat the previous debugger command

-              EXECUTING

-s, step                 single step, stepping into routine calls

-n, next                 single step, without stepping into routine calls

-f, skipcurrent          continue execution until the current routine finishes

-c, continue             continue execution until the next breakpoint

-i, ignore               continue execution, ignore all breakpoints

-              BREAKPOINTS

-b, break <name> [fromline [toline]] [file]

-                        set a new breakpoint named 'name' for line and file

-                        if line or file are omitted the current one is used

-breakpoints             display the entire breakpoint list

-disable <name>          disable a breakpoint

-enable  <name>          enable a breakpoint

-              DATA DISPLAY

-e, eval <expr>          evaluate the expression <expr>

-o, out <file> <expr>    evaluate <expr> and write it to <file>

-w, where                display the current execution point

-stackframe [file]       display current stack frame [and write it to file]

-u, up                   go up in the call stack

-d, down                 go down in the call stack

-bt, backtrace           display the entire call stack

-l, locals               display available local variables

-g, globals              display available global variables

-maxdisplay <integer>    set the display's recursion maximum

-""")

-

-proc InvalidCommand() =

-  debugOut("[Warning] invalid command ignored (type 'h' for help) ")

-

-proc hasExt(s: string): bool =

-  # returns true if s has a filename extension

-  for i in countdown(len(s)-1, 0):

-    if s[i] == '.': return true

-  return false

-

-proc setBreakPoint(s: string, start: int) =

-  var dbgTemp: string

-  var i = scanWord(s, dbgTemp, start)

-  if i <= start:

-    InvalidCommand()

-    return

-  if dbgBPlen >= high(dbgBP):

-    debugOut("[Warning] no breakpoint could be set; out of breakpoint space ")

-    return

-  var x = dbgBPlen

-  inc(dbgBPlen)

-  dbgBP[x].name = dbgTemp

-  i = scanNumber(s, dbgBP[x].low, i)

-  if dbgBP[x].low == 0:

-    # set to current line:

-    dbgBP[x].low = framePtr.line

-  i = scanNumber(s, dbgBP[x].high, i)

-  if dbgBP[x].high == 0: # set to low:

-    dbgBP[x].high = dbgBP[x].low

-  i = scanFilename(s, dbgTemp, i)

-  if not (dbgTemp.len == 0):

-    if not hasExt(dbgTemp): add(dbgTemp, ".nim")

-    dbgBP[x].filename = dbgTemp

-  else: # use current filename

-    dbgBP[x].filename = $framePtr.filename

-  # skip whitespace:

-  while s[i] in {' ', '\t'}: inc(i)

-  if s[i] != '\0':

-    dec(dbgBPLen) # remove buggy breakpoint

-    InvalidCommand()

-

-proc BreakpointSetEnabled(s: string, start, enabled: int) =

-  var dbgTemp: string

-  var i = scanWord(s, dbgTemp, start)

-  if i <= start:

-    InvalidCommand()

-    return

-  var x = findBreakpoint(dbgTemp)

-  if x < 0: debugOut("[Warning] breakpoint does not exist ")

-  elif enabled * dbgBP[x].low < 0: # signs are different?

-    dbgBP[x].low = -dbgBP[x].low

-    dbgBP[x].high = -dbgBP[x].high

-

-proc dbgEvaluate(stream: TFile, s: string, start: int,

-                 currFrame: PExtendedFrame) =

-  var dbgTemp: string

-  var i = scanWord(s, dbgTemp, start)

-  while s[i] in {' ', '\t'}: inc(i)

-  var f = currFrame

-  if s[i] == '.':

-    inc(i) # skip '.'

-    add(dbgTemp, '.')

-    i = scanAndAppendWord(s, dbgTemp, i)

-    # search for global var:

-    f = addr(dbgGlobalData)

-  if s[i] != '\0':

-    debugOut("[Warning] could not parse expr ")

-    return

-  var j = findVariable(f, dbgTemp)

-  if j < 0:

-    debugOut("[Warning] could not find variable ")

-    return

-  writeVariable(stream, f.slots[j])

-

-proc dbgOut(s: string, start: int, currFrame: PExtendedFrame) =

-  var dbgTemp: string

-  var i = scanFilename(s, dbgTemp, start)

-  if dbgTemp.len == 0:

-    InvalidCommand()

-    return

-  var stream = openAppend(dbgTemp)

-  if stream == nil:

-    debugOut("[Warning] could not open or create file ")

-    return

-  dbgEvaluate(stream, s, i, currFrame)

-  closeFile(stream)

-

-proc dbgStackFrame(s: string, start: int, currFrame: PExtendedFrame) =

-  var dbgTemp: string

-  var i = scanFilename(s, dbgTemp, start)

-  if dbgTemp.len == 0:

-    # just write it to stdout:

-    ListFrame(stdout, currFrame)

-  else:

-    var stream = openAppend(dbgTemp)

-    if stream == nil:

-      debugOut("[Warning] could not open or create file ")

-      return

-    ListFrame(stream, currFrame)

-    closeFile(stream)

-

-proc CommandPrompt() =

-  # if we return from this routine, user code executes again

-  var

-    again: bool = True

-    dbgFramePtr = framePtr # for going down and up the stack

-    dbgDown: int = 0 # how often we did go down

-

-  while again:

-    write(stdout, "*** endb| >>")

-    var tmp = readLine(stdin)

-    if tmp.len > 0: dbgUser = tmp

-    # now look what we have to do:

-    var dbgTemp: string

-    var i = scanWord(dbgUser, dbgTemp, 0)

-    case dbgTemp

-    of "": InvalidCommand()

-    of "s", "step":

-      dbgState = dbStepInto

-      again = false

-    of "n", "next":

-      dbgState = dbStepOver

-      dbgSkipToFrame = framePtr

-      again = false

-    of "f", "skipcurrent":

-      dbgState = dbSkipCurrent

-      dbgSkipToFrame = framePtr.prev

-      again = false

-    of "c", "continue":

-      dbgState = dbBreakpoints

-      again = false

-    of "i", "ignore":

-      dbgState = dbOff

-      again = false

-    of "h", "help":

-      dbgHelp()

-    of "q", "quit":

-      dbgState = dbQuiting

-      dbgAborting = True

-      again = false

-      quit(1) # BUGFIX: quit with error code > 0

-    of "e", "eval":

-      dbgEvaluate(stdout, dbgUser, i, cast[PExtendedFrame](dbgFramePtr))

-    of "o", "out":

-      dbgOut(dbgUser, i, cast[PExtendedFrame](dbgFramePtr))

-    of "stackframe":

-      dbgStackFrame(dbgUser, i, cast[PExtendedFrame](dbgFramePtr))

-    of "w", "where":

-      dbgShowExecutionPoint()

-    of "l", "locals":

-      ListVariables(stdout, cast[PExtendedFrame](dbgFramePtr))

-    of "g", "globals":

-      ListVariables(stdout, addr(dbgGlobalData))

-    of "u", "up":

-      if dbgDown <= 0:

-        debugOut("[Warning] cannot go up any further ")

-      else:

-        dbgFramePtr = framePtr

-        for j in 0 .. dbgDown-2: # BUGFIX

-          dbgFramePtr = dbgFramePtr.prev

-        dec(dbgDown)

-      dbgShowCurrentProc(dbgFramePtr)

-    of "d", "down":

-      if dbgFramePtr != nil:

-        inc(dbgDown)

-        dbgFramePtr = dbgFramePtr.prev

-        dbgShowCurrentProc(dbgFramePtr)

-      else:

-        debugOut("[Warning] cannot go down any further ")

-    of "bt", "backtrace":

-      WriteStackTrace()

-    of "b", "break":

-      setBreakPoint(dbgUser, i)

-    of "breakpoints":

-      ListBreakPoints()

-    of "disable":

-      BreakpointSetEnabled(dbgUser, i, -1)

-    of "enable":

-      BreakpointSetEnabled(dbgUser, i, +1)

-    of "maxdisplay":

-      var parsed: int

-      i = scanNumber(dbgUser, parsed, i)

-      if dbgUser[i-1] in {'0'..'9'}:

-        if parsed == 0: maxDisplayRecDepth = -1

-        else: maxDisplayRecDepth = parsed

-      else:

-        InvalidCommand()

-    else:

-      InvalidCommand()

-

-proc endbStep() =

-  # we get into here if an unhandled exception has been raised

-  # XXX: do not allow the user to run the program any further?

-  # XXX: BUG: the frame is lost here!

-  dbgShowExecutionPoint()

-  CommandPrompt()

-

-proc checkForBreakpoint() =

-  var i = dbgBreakpointReached(framePtr.line)

-  if i >= 0:

-    write(stdout, "*** endb| reached ")

-    write(stdout, dbgBP[i].name)

-    write(stdout, " in ")

-    write(stdout, framePtr.filename)

-    write(stdout, "(")

-    write(stdout, framePtr.line)

-    write(stdout, ") ")

-    write(stdout, framePtr.procname)

-    write(stdout, " ***\n")

-    CommandPrompt()

-

-# interface to the user program:

-

-proc dbgRegisterBreakpoint(line: int,

-                           filename, name: cstring) {.compilerproc.} =

-  var x = dbgBPlen

-  inc(dbgBPlen)

-  dbgBP[x].name = $name

-  dbgBP[x].filename = $filename

-  dbgBP[x].low = line

-  dbgBP[x].high = line

-

-proc dbgRegisterGlobal(name: cstring, address: pointer,

-                       typ: PNimType) {.compilerproc.} =

-  var i = dbgGlobalData.f.len

-  if i >= high(dbgGlobalData.slots):

-    debugOut("[Warning] cannot register global ")

-    return

-  dbgGlobalData.slots[i].name = name

-  dbgGlobalData.slots[i].typ = typ

-  dbgGlobalData.slots[i].address = address

-  inc(dbgGlobalData.f.len)

-

-proc endb(line: int) {.compilerproc.} =

-  # This proc is called before any 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"

-  framePtr.line = line # this is done here for smaller code size!

-  if dbgLineHook != nil: dbgLineHook()

-  case dbgState

-  of dbStepInto:

-    # we really want the command prompt here:

-    dbgShowExecutionPoint()

-    CommandPrompt()

-  of dbSkipCurrent, dbStepOver: # skip current routine

-    if framePtr == dbgSkipToFrame:

-      dbgShowExecutionPoint()

-      CommandPrompt()

-    else: # breakpoints are wanted though (I guess)

-      checkForBreakpoint()

-  of dbBreakpoints: # debugger is only interested in breakpoints

-    checkForBreakpoint()

-  else: nil

+#
+#
+#            Nimrod's Runtime Library
+#        (c) Copyright 2008 Andreas Rumpf
+#
+#    See the file "copying.txt", included in this
+#    distribution, for details about the copyright.
+#
+
+# This file implements the embedded debugger that can be linked
+# with the application. We should not use dynamic memory here as that
+# would interfere with the GC and trigger ON/OFF errors if the
+# user program corrupts memory. Unfortunately, for dispaying
+# variables we use the system.repr() proc which uses Nimrod
+# strings and thus allocates memory from the heap. Pity, but
+# I do not want to implement repr() twice. We also cannot deactivate
+# the GC here as that might run out of memory too quickly...
+
+type
+  TDbgState = enum
+    dbOff,        # debugger is turned off
+    dbStepInto,   # debugger is in tracing mode
+    dbStepOver,
+    dbSkipCurrent,
+    dbQuiting,    # debugger wants to quit
+    dbBreakpoints # debugger is only interested in breakpoints
+
+  TDbgBreakpoint {.final.} = object
+    low, high: int   # range from low to high; if disabled
+                     # both low and high are set to their negative values
+                     # this makes the check faster and safes memory
+    filename: string
+    name: string     # name of breakpoint
+
+  TVarSlot {.compilerproc, final.} = object # variable slots used for debugger:
+    address: pointer
+    typ: PNimType
+    name: cstring   # for globals this is "module.name"
+
+  PExtendedFrame = ptr TExtendedFrame
+  TExtendedFrame {.final.} = object  # If the debugger is enabled the compiler
+                                     # provides an extended frame. Of course
+                                     # only slots that are
+                                     # needed are allocated and not 10_000,
+                                     # except for the global data description.
+    f: TFrame
+    slots: array[0..10_000, TVarSlot]
+
+var
+  dbgInSignal: bool # wether the debugger is in the signal handler
+  dbgIn: TFile # debugger input stream
+  dbgUser: string = "s" # buffer for user input; first command is ``step_into``
+                        # needs to be global cause we store the last command
+                        # in it
+  dbgState: TDbgState = dbStepInto # state of debugger
+  dbgBP: array[0..127, TDbgBreakpoint] # breakpoints
+  dbgBPlen: int = 0
+
+  dbgSkipToFrame: PFrame # frame to be skipped to
+
+  dbgGlobalData: TExtendedFrame # this reserves much space, but
+                                # for now it is the most practical way
+
+  maxDisplayRecDepth: int = 5 # do not display too much data!
+
+proc findBreakpoint(name: string): int =
+  # returns -1 if not found
+  for i in countdown(dbgBPlen-1, 0):
+    if name == dbgBP[i].name: return i
+  return -1
+
+proc ListBreakPoints() =
+  write(stdout, "*** endb| Breakpoints:\n")
+  for i in 0 .. dbgBPlen-1:
+    write(stdout, dbgBP[i].name & ": " & $abs(dbgBP[i].low) & ".." &
+                  $abs(dbgBP[i].high) & dbgBP[i].filename)
+    if dbgBP[i].low < 0:
+      write(stdout, " [disabled]\n")
+    else:
+      write(stdout, "\n")
+  write(stdout, "***\n")
+
+proc openAppend(filename: string): TFile =
+  if openFile(result, filename, fmAppend):
+    write(result, "----------------------------------------\n")
+
+proc dbgRepr(p: pointer, typ: PNimType): string =
+  var
+    cl: TReprClosure
+  initReprClosure(cl)
+  cl.recDepth = maxDisplayRecDepth
+  # locks for the GC turned out to be a bad idea...
+  # inc(recGcLock)
+  result = ""
+  reprAux(result, p, typ, cl)
+  # dec(recGcLock)
+  deinitReprClosure(cl)
+
+proc writeVariable(stream: TFile, slot: TVarSlot) =
+  write(stream, slot.name)
+  write(stream, " = ")
+  writeln(stream, dbgRepr(slot.address, slot.typ))
+
+proc ListFrame(stream: TFile, f: PExtendedFrame) =
+  write(stream, "*** endb| Frame (" & $f.f.len &  " slots):\n")
+  for i in 0 .. f.f.len-1:
+    writeVariable(stream, f.slots[i])
+  write(stream, "***\n")
+
+proc ListVariables(stream: TFile, f: PExtendedFrame) =
+  write(stream, "*** endb| Frame (" & $f.f.len & " slots):\n")
+  for i in 0 .. f.f.len-1:
+    writeln(stream, f.slots[i].name)
+  write(stream, "***\n")
+
+proc debugOut(msg: cstring) =
+  # the *** *** markers are for easy recognition of debugger
+  # output for external frontends.
+  write(stdout, "*** endb| ")
+  write(stdout, msg)
+  write(stdout, "***\n")
+
+proc dbgFatal(msg: cstring) =
+  debugOut(msg)
+  dbgAborting = True # the debugger wants to abort
+  quit(1)
+
+proc findVariable(frame: PExtendedFrame, varname: cstring): int =
+  for i in 0 .. frame.f.len - 1:
+    if c_strcmp(frame.slots[i].name, varname) == 0: return i
+  return -1
+
+proc dbgShowCurrentProc(dbgFramePointer: PFrame) =
+  if dbgFramePointer != nil:
+    write(stdout, "*** endb| now in proc: ")
+    write(stdout, dbgFramePointer.procname)
+    write(stdout, " ***\n")
+  else:
+    write(stdout, "*** endb| (procedure name not available) ***\n")
+
+proc dbgShowExecutionPoint() =
+  write(stdout, "*** endb| " & $framePtr.filename & "(" & $framePtr.line &
+                ") " & $framePtr.procname & " ***\n")
+
+when defined(windows) or defined(dos) or defined(os2):
+  {.define: FileSystemCaseInsensitive.}
+
+proc fileMatches(c, bp: cstring): bool =
+  # bp = breakpoint filename
+  # c = current filename
+  # we consider it a match if bp is a suffix of c
+  # and the character for the suffix does not exist or
+  # is one of: \  /  :
+  # depending on the OS case does not matter!
+  var blen: int = c_strlen(bp)
+  var clen: int = c_strlen(c)
+  if blen > clen: return false
+  # check for \ /  :
+  if clen-blen-1 >= 0 and c[clen-blen-1] notin {'\\', '/', ':'}:
+    return false
+  var i = 0
+  while i < blen:
+    var x, y: char
+    x = bp[i]
+    y = c[i+clen-blen]
+    when defined(FileSystemCaseInsensitive):
+      if x >= 'A' and x <= 'Z': x = chr(ord(x) - ord('A') + ord('a'))
+      if y >= 'A' and y <= 'Z': y = chr(ord(y) - ord('A') + ord('a'))
+    if x != y: return false
+    inc(i)
+  return true
+
+proc dbgBreakpointReached(line: int): int =
+  for i in 0..dbgBPlen-1:
+    if line >= dbgBP[i].low and line <= dbgBP[i].high and
+        fileMatches(framePtr.filename, dbgBP[i].filename): return i
+  return -1
+
+proc scanAndAppendWord(src: string, a: var string, start: int): int =
+  result = start
+  # skip whitespace:
+  while src[result] in {'\t', ' '}: inc(result)
+  while True:
+    case src[result]
+    of 'a'..'z', '0'..'9': add(a, src[result])
+    of '_': nil # just skip it
+    of 'A'..'Z': add(a, chr(ord(src[result]) - ord('A') + ord('a')))
+    else: break
+    inc(result)
+
+proc scanWord(src: string, a: var string, start: int): int =
+  a = ""
+  result = scanAndAppendWord(src, a, start)
+
+proc scanFilename(src: string, a: var string, start: int): int =
+  result = start
+  a = ""
+  # skip whitespace:
+  while src[result] in {'\t', ' '}: inc(result)
+  while src[result] notin {'\t', ' ', '\0'}:
+    add(a, src[result])
+    inc(result)
+
+proc scanNumber(src: string, a: var int, start: int): int =
+  result = start
+  a = 0
+  while src[result] in {'\t', ' '}: inc(result)
+  while true:
+    case src[result]
+    of '0'..'9': a = a * 10 + ord(src[result]) - ord('0')
+    of '_': nil # skip underscores (nice for long line numbers)
+    else: break
+    inc(result)
+
+proc dbgHelp() =
+  debugOut("""
+list of commands (see the manual for further help):
+              GENERAL
+h, help                 display this help message
+q, quit                 quit the debugger and the program
+<ENTER>                 repeat the previous debugger command
+              EXECUTING
+s, step                 single step, stepping into routine calls
+n, next                 single step, without stepping into routine calls
+f, skipcurrent          continue execution until the current routine finishes
+c, continue             continue execution until the next breakpoint
+i, ignore               continue execution, ignore all breakpoints
+              BREAKPOINTS
+b, break <name> [fromline [toline]] [file]
+                        set a new breakpoint named 'name' for line and file
+                        if line or file are omitted the current one is used
+breakpoints             display the entire breakpoint list
+disable <name>          disable a breakpoint
+enable  <name>          enable a breakpoint
+              DATA DISPLAY
+e, eval <expr>          evaluate the expression <expr>
+o, out <file> <expr>    evaluate <expr> and write it to <file>
+w, where                display the current execution point
+stackframe [file]       display current stack frame [and write it to file]
+u, up                   go up in the call stack
+d, down                 go down in the call stack
+bt, backtrace           display the entire call stack
+l, locals               display available local variables
+g, globals              display available global variables
+maxdisplay <integer>    set the display's recursion maximum
+""")
+
+proc InvalidCommand() =
+  debugOut("[Warning] invalid command ignored (type 'h' for help) ")
+
+proc hasExt(s: string): bool =
+  # returns true if s has a filename extension
+  for i in countdown(len(s)-1, 0):
+    if s[i] == '.': return true
+  return false
+
+proc setBreakPoint(s: string, start: int) =
+  var dbgTemp: string
+  var i = scanWord(s, dbgTemp, start)
+  if i <= start:
+    InvalidCommand()
+    return
+  if dbgBPlen >= high(dbgBP):
+    debugOut("[Warning] no breakpoint could be set; out of breakpoint space ")
+    return
+  var x = dbgBPlen
+  inc(dbgBPlen)
+  dbgBP[x].name = dbgTemp
+  i = scanNumber(s, dbgBP[x].low, i)
+  if dbgBP[x].low == 0:
+    # set to current line:
+    dbgBP[x].low = framePtr.line
+  i = scanNumber(s, dbgBP[x].high, i)
+  if dbgBP[x].high == 0: # set to low:
+    dbgBP[x].high = dbgBP[x].low
+  i = scanFilename(s, dbgTemp, i)
+  if not (dbgTemp.len == 0):
+    if not hasExt(dbgTemp): add(dbgTemp, ".nim")
+    dbgBP[x].filename = dbgTemp
+  else: # use current filename
+    dbgBP[x].filename = $framePtr.filename
+  # skip whitespace:
+  while s[i] in {' ', '\t'}: inc(i)
+  if s[i] != '\0':
+    dec(dbgBPLen) # remove buggy breakpoint
+    InvalidCommand()
+
+proc BreakpointSetEnabled(s: string, start, enabled: int) =
+  var dbgTemp: string
+  var i = scanWord(s, dbgTemp, start)
+  if i <= start:
+    InvalidCommand()
+    return
+  var x = findBreakpoint(dbgTemp)
+  if x < 0: debugOut("[Warning] breakpoint does not exist ")
+  elif enabled * dbgBP[x].low < 0: # signs are different?
+    dbgBP[x].low = -dbgBP[x].low
+    dbgBP[x].high = -dbgBP[x].high
+
+proc dbgEvaluate(stream: TFile, s: string, start: int,
+                 currFrame: PExtendedFrame) =
+  var dbgTemp: string
+  var i = scanWord(s, dbgTemp, start)
+  while s[i] in {' ', '\t'}: inc(i)
+  var f = currFrame
+  if s[i] == '.':
+    inc(i) # skip '.'
+    add(dbgTemp, '.')
+    i = scanAndAppendWord(s, dbgTemp, i)
+    # search for global var:
+    f = addr(dbgGlobalData)
+  if s[i] != '\0':
+    debugOut("[Warning] could not parse expr ")
+    return
+  var j = findVariable(f, dbgTemp)
+  if j < 0:
+    debugOut("[Warning] could not find variable ")
+    return
+  writeVariable(stream, f.slots[j])
+
+proc dbgOut(s: string, start: int, currFrame: PExtendedFrame) =
+  var dbgTemp: string
+  var i = scanFilename(s, dbgTemp, start)
+  if dbgTemp.len == 0:
+    InvalidCommand()
+    return
+  var stream = openAppend(dbgTemp)
+  if stream == nil:
+    debugOut("[Warning] could not open or create file ")
+    return
+  dbgEvaluate(stream, s, i, currFrame)
+  closeFile(stream)
+
+proc dbgStackFrame(s: string, start: int, currFrame: PExtendedFrame) =
+  var dbgTemp: string
+  var i = scanFilename(s, dbgTemp, start)
+  if dbgTemp.len == 0:
+    # just write it to stdout:
+    ListFrame(stdout, currFrame)
+  else:
+    var stream = openAppend(dbgTemp)
+    if stream == nil:
+      debugOut("[Warning] could not open or create file ")
+      return
+    ListFrame(stream, currFrame)
+    closeFile(stream)
+
+proc CommandPrompt() =
+  # if we return from this routine, user code executes again
+  var
+    again: bool = True
+    dbgFramePtr = framePtr # for going down and up the stack
+    dbgDown: int = 0 # how often we did go down
+
+  while again:
+    write(stdout, "*** endb| >>")
+    var tmp = readLine(stdin)
+    if tmp.len > 0: dbgUser = tmp
+    # now look what we have to do:
+    var dbgTemp: string
+    var i = scanWord(dbgUser, dbgTemp, 0)
+    case dbgTemp
+    of "": InvalidCommand()
+    of "s", "step":
+      dbgState = dbStepInto
+      again = false
+    of "n", "next":
+      dbgState = dbStepOver
+      dbgSkipToFrame = framePtr
+      again = false
+    of "f", "skipcurrent":
+      dbgState = dbSkipCurrent
+      dbgSkipToFrame = framePtr.prev
+      again = false
+    of "c", "continue":
+      dbgState = dbBreakpoints
+      again = false
+    of "i", "ignore":
+      dbgState = dbOff
+      again = false
+    of "h", "help":
+      dbgHelp()
+    of "q", "quit":
+      dbgState = dbQuiting
+      dbgAborting = True
+      again = false
+      quit(1) # BUGFIX: quit with error code > 0
+    of "e", "eval":
+      dbgEvaluate(stdout, dbgUser, i, cast[PExtendedFrame](dbgFramePtr))
+    of "o", "out":
+      dbgOut(dbgUser, i, cast[PExtendedFrame](dbgFramePtr))
+    of "stackframe":
+      dbgStackFrame(dbgUser, i, cast[PExtendedFrame](dbgFramePtr))
+    of "w", "where":
+      dbgShowExecutionPoint()
+    of "l", "locals":
+      ListVariables(stdout, cast[PExtendedFrame](dbgFramePtr))
+    of "g", "globals":
+      ListVariables(stdout, addr(dbgGlobalData))
+    of "u", "up":
+      if dbgDown <= 0:
+        debugOut("[Warning] cannot go up any further ")
+      else:
+        dbgFramePtr = framePtr
+        for j in 0 .. dbgDown-2: # BUGFIX
+          dbgFramePtr = dbgFramePtr.prev
+        dec(dbgDown)
+      dbgShowCurrentProc(dbgFramePtr)
+    of "d", "down":
+      if dbgFramePtr != nil:
+        inc(dbgDown)
+        dbgFramePtr = dbgFramePtr.prev
+        dbgShowCurrentProc(dbgFramePtr)
+      else:
+        debugOut("[Warning] cannot go down any further ")
+    of "bt", "backtrace":
+      WriteStackTrace()
+    of "b", "break":
+      setBreakPoint(dbgUser, i)
+    of "breakpoints":
+      ListBreakPoints()
+    of "disable":
+      BreakpointSetEnabled(dbgUser, i, -1)
+    of "enable":
+      BreakpointSetEnabled(dbgUser, i, +1)
+    of "maxdisplay":
+      var parsed: int
+      i = scanNumber(dbgUser, parsed, i)
+      if dbgUser[i-1] in {'0'..'9'}:
+        if parsed == 0: maxDisplayRecDepth = -1
+        else: maxDisplayRecDepth = parsed
+      else:
+        InvalidCommand()
+    else:
+      InvalidCommand()
+
+proc endbStep() =
+  # we get into here if an unhandled exception has been raised
+  # XXX: do not allow the user to run the program any further?
+  # XXX: BUG: the frame is lost here!
+  dbgShowExecutionPoint()
+  CommandPrompt()
+
+proc checkForBreakpoint() =
+  var i = dbgBreakpointReached(framePtr.line)
+  if i >= 0:
+    write(stdout, "*** endb| reached ")
+    write(stdout, dbgBP[i].name)
+    write(stdout, " in ")
+    write(stdout, framePtr.filename)
+    write(stdout, "(")
+    write(stdout, framePtr.line)
+    write(stdout, ") ")
+    write(stdout, framePtr.procname)
+    write(stdout, " ***\n")
+    CommandPrompt()
+
+# interface to the user program:
+
+proc dbgRegisterBreakpoint(line: int,
+                           filename, name: cstring) {.compilerproc.} =
+  var x = dbgBPlen
+  inc(dbgBPlen)
+  dbgBP[x].name = $name
+  dbgBP[x].filename = $filename
+  dbgBP[x].low = line
+  dbgBP[x].high = line
+
+proc dbgRegisterGlobal(name: cstring, address: pointer,
+                       typ: PNimType) {.compilerproc.} =
+  var i = dbgGlobalData.f.len
+  if i >= high(dbgGlobalData.slots):
+    debugOut("[Warning] cannot register global ")
+    return
+  dbgGlobalData.slots[i].name = name
+  dbgGlobalData.slots[i].typ = typ
+  dbgGlobalData.slots[i].address = address
+  inc(dbgGlobalData.f.len)
+
+proc endb(line: int) {.compilerproc.} =
+  # This proc is called before any 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"
+  framePtr.line = line # this is done here for smaller code size!
+  if dbgLineHook != nil: dbgLineHook()
+  case dbgState
+  of dbStepInto:
+    # we really want the command prompt here:
+    dbgShowExecutionPoint()
+    CommandPrompt()
+  of dbSkipCurrent, dbStepOver: # skip current routine
+    if framePtr == dbgSkipToFrame:
+      dbgShowExecutionPoint()
+      CommandPrompt()
+    else: # breakpoints are wanted though (I guess)
+      checkForBreakpoint()
+  of dbBreakpoints: # debugger is only interested in breakpoints
+    checkForBreakpoint()
+  else: nil
diff --git a/lib/dlmalloc.c b/lib/dlmalloc.c
index c907da830..2a8b299a1 100644
--- a/lib/dlmalloc.c
+++ b/lib/dlmalloc.c
@@ -1,12 +1,15 @@
+
 #define USE_DL_PREFIX
+#define ASSEMBLY_VERSION
 
+/*
 #define FOOTERS 1
 #define DEBUG 1
-/*
+
 #define ABORT_ON_ASSERT_FAILURE 0
 */
 
-#define ABORT do { printf("abort was called\n"); abort(); } while (0)
+#define ABORT do { /*printf("abort was called\n");*/ abort(); } while (0)
 
 /*
   This is a version (aka dlmalloc) of malloc/free/realloc written by
@@ -2210,7 +2213,7 @@ static size_t traverse_and_check(mstate m);
 #define treebin_at(M,i)     (&((M)->treebins[i]))
 
 /* assign tree index for size S to variable I */
-#if defined(__GNUC__) && defined(i386)
+#if defined(__GNUC__) && defined(i386) && defined(ASSEMBLY_VERSION)
 #define compute_tree_index(S, I)\
 {\
   size_t X = S >> TREEBIN_SHIFT;\
@@ -2275,7 +2278,7 @@ static size_t traverse_and_check(mstate m);
 
 /* index corresponding to given bit */
 
-#if defined(__GNUC__) && defined(i386)
+#if defined(__GNUC__) && defined(i386) && defined(ASSEMBLY_VERSION)
 #define compute_bit2idx(X, I)\
 {\
   unsigned int J;\
diff --git a/lib/dyncalls.nim b/lib/dyncalls.nim
index 78c3fa115..7d7ade26c 100644
--- a/lib/dyncalls.nim
+++ b/lib/dyncalls.nim
@@ -7,25 +7,14 @@
 #    distribution, for details about the copyright.
 #
 
-
-#
 # This file implements the ability to call native procs from libraries.
 # It is not possible to do this in a platform independant way, unfortunately.
 # However, the interface has been designed to take platform differences into
 # account and been ported to all major platforms.
-#
-# interface
 
 type
   EInvalidLibrary = object of EOS
 
-when defined(windows) or defined(dos):
-  {.define: USE_DLL.}
-elif defined(posix):
-  {.define: USE_DLOPEN.}
-elif defined(mac):
-  {.define: USE_DYLD.}
-
 type
   TLibHandle = pointer       # private type
   TProcAddr = pointer        # libary loading and loading of procs:
@@ -37,15 +26,13 @@ proc nimLoadLibrary(path: string): TLibHandle {.compilerproc.}
 proc nimUnloadLibrary(lib: TLibHandle) {.compilerproc.}
 proc nimGetProcAddr(lib: TLibHandle, name: cstring): TProcAddr {.compilerproc.}
 
-#implementation
-
 # this code was inspired from Lua's source code:
 # Lua - An Extensible Extension Language
 # Tecgraf: Computer Graphics Technology Group, PUC-Rio, Brazil
 # http://www.lua.org
 # mailto:info@lua.org
 
-when defined(USE_DLOPEN):
+when defined(posix):
   #
   # =========================================================================
   # This is an implementation based on the dlfcn interface.
@@ -76,7 +63,7 @@ when defined(USE_DLOPEN):
   proc nimGetProcAddr(lib: TLibHandle, name: cstring): TProcAddr =
     result = dlsym(lib, name)
 
-elif defined(USE_DLL):
+elif defined(windows) or defined(dos):
   #
   # =======================================================================
   # Native Windows Implementation
@@ -96,13 +83,13 @@ elif defined(USE_DLL):
 
   proc nimLoadLibrary(path: string): TLibHandle =
     result = cast[TLibHandle](winLoadLibrary(path))
-    if result == nil: 
+    if result == nil:
       raise newException(EInvalidLibrary, "could not load: " & path)
 
   proc nimGetProcAddr(lib: TLibHandle, name: cstring): TProcAddr =
     result = GetProcAddress(cast[THINSTANCE](lib), name)
 
-elif defined(USE_DYLD):
+elif defined(mac):
   #
   # =======================================================================
   # Native Mac OS X / Darwin Implementation
diff --git a/lib/ecmasys.nim b/lib/ecmasys.nim
index 10a6247d4..2bbbd5f79 100644
--- a/lib/ecmasys.nim
+++ b/lib/ecmasys.nim
@@ -15,6 +15,7 @@ proc GC_fullCollect() = nil
 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
diff --git a/lib/excpt.nim b/lib/excpt.nim
index 8adb3d5a9..9c87fab55 100644
--- a/lib/excpt.nim
+++ b/lib/excpt.nim
@@ -171,8 +171,7 @@ var
 
 proc signalHandler(sig: cint) {.exportc: "signalHandler", noconv.} =
   # print stack trace and quit
-  var
-    s = int(sig)
+  var s = sig
   GC_disable()
   setLen(buf, 0)
   rawWriteStackTrace(buf)
@@ -199,7 +198,8 @@ proc registerSignalHandler() =
   c_signal(SIGILL, signalHandler)
   c_signal(SIGBUS, signalHandler)
 
-registerSignalHandler() # call it in initialization section
+when not defined(noSignalHandler):
+  registerSignalHandler() # call it in initialization section
 # for easier debugging of the GC, this memory is only allocated after the
 # signal handlers have been registered
 new(gAssertionFailed)
@@ -256,3 +256,12 @@ proc chckObj(obj, subclass: PNimType) {.compilerproc.} =
 proc chckObjAsgn(a, b: PNimType) {.compilerproc, inline.} =
   if a != b:
     raise newException(EInvalidObjectAssignment, "invalid object assignment")
+
+proc isObj(obj, subclass: PNimType): bool {.compilerproc.} =
+  # checks if obj is of type subclass:
+  var x = obj
+  if x == subclass: return true # optimized fast path
+  while x != subclass:
+    if x == nil: return false
+    x = x.base
+  return true
diff --git a/lib/gc.nim b/lib/gc.nim
index 72a287064..680256a93 100644
--- a/lib/gc.nim
+++ b/lib/gc.nim
@@ -9,20 +9,71 @@
 
 
 #            Garbage Collector
+# Current Features:
+# * incremental
+# * non-recursive
+# * generational
+# * excellent performance
+
+# Future Improvements:
+# * Both dlmalloc and TLSF lack zero-overhead object allocation. Thus, for
+#   small objects we will 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.}
 
-# For a description of the algorithms used here see:
-# intern.html
+# ---------------------------------------------------------------------------
 
-{.define: debugGC.}   # we wish to debug the GC...
+proc getOccupiedMem(): int = return tlsfUsed()
+proc getFreeMem(): int = return tlsfMax() - tlsfUsed()
+proc getTotalMem(): int = return tlsfMax()
 
-#when defined(debugGC):
-#  {.define: logGC.} # define if the GC should log some of its activities
+# ---------------------------------------------------------------------------
 
-{.define: cycleGC.}
+# After several attempts, we now use a novel approach for cycle detection:
+# increments/decrements of the reference counters are enqued into a buffer
+# and not immediately performed. The reason is that increments may introduce
+# new garbage cycles. The cycle detector only scans the changed subgraph. This
+# provides superior performance. Of course only cells that may be part of
+# a cycle are considered. However, reallocation does not work with this scheme!
+# Because the queue may contain references to the old cell.
+# The queue is thread-local storage, so that no synchronization is needed for
+# reference counting.
+
+# With this scheme, the entire heap is never searched and there is no need for
+# the AT.
 
 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
@@ -32,103 +83,107 @@ const
   PageSize = 1 shl PageShift # on 32 bit systems 4096
   CycleIncrease = 2 # is a multiplicative increase
 
-  InitialCycleThreshold = 8*1024*1024 # X MB because cycle checking is slow
-  ZctThreshold = 512  # we collect garbage if the ZCT's size
+  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 needs benchmarking...
-
-when defined(debugGC):
-  const stressGC = False
-else:
-  const stressGC = False
+                      # this seems to be a good value
 
-# things the System module thinks should be available:
-when defined(useDL) or defined(nativeDL):
-  type
-    TMallocInfo {.importc: "struct mallinfo", nodecl, final.} = object
-      arena: cint    # non-mmapped space allocated from system
-      ordblks: cint  # number of free chunks
-      smblks: cint   # number of fastbin blocks
-      hblks: cint    # number of mmapped regions
-      hblkhd: cint   # space in mmapped regions
-      usmblks: cint  # maximum total allocated space
-      fsmblks: cint  # space available in freed fastbin blocks
-      uordblks: cint # total allocated space
-      fordblks: cint # total free space
-      keepcost: cint # top-most, releasable (via malloc_trim) space
-
-when defined(useDL):
-  proc mallinfo: TMallocInfo {.importc: "dlmallinfo", nodecl.}
-elif defined(nativeDL):
-  proc mallinfo: TMallocInfo {.importc: "mallinfo", nodecl.}
-
-when defined(useDL) or defined(nativeDL):
-  proc getOccupiedMem(): int = return mallinfo().uordblks
-  proc getFreeMem(): int = return mallinfo().fordblks
-  proc getTotalMem(): int =
-    var m = mallinfo()
-    return int(m.hblkhd) + int(m.arena)
-else: # not available:
-  proc getOccupiedMem(): int = return -1
-  proc getFreeMem(): int = return -1
-  proc getTotalMem(): int = return -1
+const
+  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
 
-var
-  cycleThreshold: int = InitialCycleThreshold
+  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 (!)
 
-  memUsed: int = 0 # we have to keep track how much we have allocated
+  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
+  rcGray = 0b001  # possible member of a cycle
+  rcWhite = 0b010 # member of a garbage cycle
+  rcPurple = 0b011 # possible root of a cycle
+  rcZct = 0b100  # in ZCT
+  rcRed = 0b101 # Candidate cycle undergoing sigma-computation
+  rcOrange = 0b110 # Candidate cycle awaiting epoch boundary
+  rcShift = 3 # shift by rcShift to get the reference counter
+  colorMask = 0b111
+type
+  TWalkOp = enum
+    waZctDecRef, waPush, waCycleDecRef
 
-  recGcLock: int = 0
-    # we use a lock to prevend the garbage collector to
-    # be triggered in a finalizer; the collector should not call
-    # itself this way! Thus every object allocated by a finalizer
-    # will not trigger a garbage collection. This is wasteful but safe.
-    # This is a lock against recursive garbage collection, not a lock for
-    # threads!
-
-when defined(useDL) and not defined(nativeDL):
-  {.compile: "dlmalloc.c".}
+  TCell {.pure.} = object
+    refcount: int  # the refcount and some flags
+    typ: PNimType
+    when debugGC:
+      filename: cstring
+      line: int
 
-type
+  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
 
-proc asgnRef(dest: ppointer, src: pointer) {.compilerproc.}
-proc unsureAsgnRef(dest: ppointer, src: pointer) {.compilerproc.}
-  # unsureAsgnRef updates the reference counters only if dest is not on the
-  # stack. It is used by the code generator if it cannot decide wether a
-  # reference is in the stack or not (this can happen for out/var parameters).
-proc growObj(old: pointer, newsize: int): pointer {.compilerproc.}
-proc newObj(typ: PNimType, size: int): pointer {.compilerproc.}
-proc newSeq(typ: PNimType, len: int): pointer {.compilerproc.}
-
-# implementation:
-
-when defined(useDL):
-  proc nimSize(p: pointer): int {.
-    importc: "dlmalloc_usable_size", header: "dlmalloc.h".}
-elif defined(nativeDL):
-  proc nimSize(p: pointer): int {.
-    importc: "malloc_usable_size", header: "<malloc.h>".}
+  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
 
-type
-  TWalkOp = enum
-    waNone, waRelease, waZctDecRef, waCycleDecRef, waCycleIncRef, waDebugIncRef
+  PPageDescArray = ptr array[0..1000_000, PPageDesc]
+  TCellSet {.final, pure.} = object
+    counter, max: int
+    head: PPageDesc
+    data: PPageDescArray
 
-  TCollectorData = int
-  TCell {.final.} = object
-    refcount: TCollectorData  # the refcount and bit flags
-    typ: PNimType
-    when stressGC:
-      stackcount: int           # stack counter for debugging
-      drefc: int                # real reference counter for debugging
+  PCellArray = ptr array[0..100_000_000, PCell]
+  TCellSeq {.final, pure.} = object
+    len, cap: int
+    d: PCellArray
 
-  PCell = ptr TCell
+  TGcHeap {.final, pure.} = object # this contains the zero count and
+                                   # non-zero count table
+    mask: TAddress           # mask for fast pointer detection
+    zct: TCellSeq            # the zero count table
+    stackCells: TCellSet     # cells and addresses that look like a cell but
+                             # aren't of the hardware stack
+
+    stackScans: int          # number of performed stack scans (for statistics)
+    cycleCollections: int    # number of performed full collections
+    maxThreshold: int        # max threshold that has been set
+    maxStackSize: int        # max stack size
+    maxStackPages: int       # max number of pages in stack
+    cycleTableSize: int      # max entries in cycle table
+    cycleRoots: TCellSet
+    tempStack: TCellSeq      # temporary stack for recursion elimination
 
 var
   gOutOfMem: ref EOutOfMemory
+  stackBottom: pointer
+  gch: TGcHeap
+  cycleThreshold: int = InitialCycleThreshold
+  recGcLock: int = 0
+    # we use a lock to prevend the garbage collector to be triggered in a
+    # finalizer; the collector should not call itself this way! Thus every
+    # object allocated by a finalizer will not trigger a garbage collection.
+    # This is wasteful but safe. This is a lock against recursive garbage
+    # collection, not a lock for threads!
+
+proc unsureAsgnRef(dest: ppointer, src: pointer) {.compilerproc.}
+  # unsureAsgnRef updates the reference counters only if dest is not on the
+  # stack. It is used by the code generator if it cannot decide wether a
+  # reference is in the stack or not (this can happen for out/var parameters).
+#proc growObj(old: pointer, newsize: int): pointer {.compilerproc.}
+proc newObj(typ: PNimType, size: int): pointer {.compilerproc.}
+proc newSeq(typ: PNimType, len: int): pointer {.compilerproc.}
 
 proc raiseOutOfMem() {.noreturn.} =
   if gOutOfMem == nil:
@@ -145,17 +200,22 @@ proc usrToCell(usr: pointer): PCell {.inline.} =
   # convert pointer to userdata to object (=pointer to refcount)
   result = cast[PCell](cast[TAddress](usr)-%TAddress(sizeof(TCell)))
 
+proc canbeCycleRoot(c: PCell): bool {.inline.} =
+  result = ntfAcyclic notin c.typ.flags
+
 proc extGetCellType(c: pointer): PNimType {.compilerproc.} =
   # used for code generation concerning debugging
   result = usrToCell(c).typ
 
 proc internRefcount(p: pointer): int {.exportc: "getRefcount".} =
   result = int(usrToCell(p).refcount)
-  if result < 0: result = 0
+  if result > 0: result = result shr rcShift
+  else: result = 0
 
 proc gcAlloc(size: int): pointer =
-  result = alloc0(size)
+  result = tlsf_malloc(size)
   if result == nil: raiseOutOfMem()
+  zeroMem(result, size)
 
 proc GC_disable() = inc(recGcLock)
 proc GC_enable() =
@@ -181,95 +241,29 @@ proc nextTry(h, maxHash: int): int {.inline.} =
   # generates each int in range(maxHash) exactly once (see any text on
   # random-number generation for proof).
 
-# ------------------ Any table (AT) -------------
-
-# these values are for DL-malloc known for sure (and other allocators
-# can only be worse):
-when defined(useDL) or not defined(bcc):
-  const MemAlignment = 8 # minimal memory block that can be allocated
-else:
-  const MemAlignment = 4 # Borland's memory manager is terrible!
-
-const
-  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 (!)
-
 # 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 ------------------------------
-# A cellset consists of a hash table of page descriptors. A page
-# descriptor has a bit for every Memalignment'th byte in the page.
-# However, only bits corresponding to addresses that start memory blocks
-# are set.
-# Page descriptors are also linked to a list; the list
-# is used for easy traversing of all page descriptors; this allows a
-# fast iterator.
-# We use a specialized hashing scheme; the formula is :
-# hash = Page bitand max
-# We use linear probing with the formular: (5*h)+1
-# Thus we likely get no collisions at all if the pages are given us
-# sequentially by the operating system!
-type
-  PPageDesc = ptr TPageDesc
-
-  TBitIndex = range[0..UnitsPerPage-1]
-
-  TPageDesc {.final.} = 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.} = object
-    counter, max: int
-    head: PPageDesc
-    data: PPageDescArray
-
-  PCellArray = ptr array[0..100_000_000, PCell]
-  TCellSeq {.final.} = object
-    len, cap: int
-    d: PCellArray
-
-  TSlowSet {.final.} = object  # used for debugging purposes only
-    L: int # current length
-    cap: int # capacity
-    d: PCellArray
-
-  TGcHeap {.final.} = object # this contains the zero count and
-                             # non-zero count table
-    mask: TAddress           # mask for fast pointer detection
-    zct: TCellSeq            # the zero count table
-    at: TCellSet             # a table that contains all references
-    newAT: TCellSet
-    stackCells: TCellSeq     # cells that need to be decremented because they
-                             # are in the hardware stack; a cell may occur
-                             # several times in this data structure
+# ------------------- cell set handling ---------------------------------------
 
-var
-  stackBottom: pointer
-  gch: TGcHeap
+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
-    s.d = cast[PCellArray](realloc(s.d, s.cap * sizeof(PCell)))
+    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 inOperator(s: TCellSeq, c: PCell): bool {.inline.} =
-  for i in 0 .. s.len-1:
-    if s.d[i] == c: return True
-  return False
+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
@@ -289,13 +283,13 @@ proc CellSetDeinit(s: var TCellSet) =
   var it = s.head
   while it != nil:
     var n = it.next
-    dealloc(it)
+    tlsf_free(it)
     it = n
   s.head = nil # play it safe here
-  dealloc(s.data)
+  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:
@@ -313,15 +307,13 @@ proc CellSetRawInsert(t: TCellSet, data: PPageDescArray,
   data[h] = desc
 
 proc CellSetEnlarge(t: var TCellSet) =
-  var
-    n: PPageDescArray
-    oldMax = t.max
+  var oldMax = t.max
   t.max = ((t.max+1)*2)-1
-  n = cast[PPageDescArray](gcAlloc((t.max + 1) * sizeof(PPageDesc)))
+  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])
-  dealloc(t.data)
+  tlsf_free(t.data)
   t.data = n
 
 proc CellSetPut(t: var TCellSet, key: TAddress): PPageDesc =
@@ -345,14 +337,11 @@ proc CellSetPut(t: var TCellSet, key: TAddress): PPageDesc =
   t.head = result
   t.data[h] = result
 
-# ---------- slightly higher level procs ----------------------------------
+# ---------- slightly higher level procs --------------------------------------
 
 proc in_Operator(s: TCellSet, cell: PCell): bool =
-  var
-    u: TAddress
-    t: PPageDesc
-  u = cast[TAddress](cell)
-  t = CellSetGet(s, u shr PageShift)
+  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
@@ -360,21 +349,15 @@ proc in_Operator(s: TCellSet, cell: PCell): bool =
     result = false
 
 proc incl(s: var TCellSet, cell: PCell) =
-  var
-    u: TAddress
-    t: PPageDesc
-  u = cast[TAddress](cell)
-  t = CellSetPut(s, u shr PageShift)
+  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: TAddress
-    t: PPageDesc
-  u = cast[TAddress](cell)
-  t = CellSetGet(s, u shr PageShift)
+  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
@@ -400,97 +383,43 @@ iterator elements(t: TCellSet): PCell {.inline.} =
 
 # --------------- end of Cellset routines -------------------------------------
 
-proc testPageDescs() =
-  var root: TCellSet
-  CellSetInit(root)
-  #var u = 10_000
-  #while u <= 20_000:
-  #  incl(root, cast[PCell](u))
-  #  inc(u, 8)
-
-  incl(root, cast[PCell](0x81cdfb8))
-  for cell in elements(root):
-    c_fprintf(c_stdout, "%p\n", cast[int](cell))
-
-#testPageDescs()
-
-when defined(debugGC):
+when logGC or traceGC:
   proc writeCell(msg: CString, c: PCell) =
-    if c.typ != nil:
-      if c.typ.kind == tyString:
-        c_fprintf(c_stdout, "%s\n", cast[TAddress](cellToUsr(c)) + sizeof(int)*2)
-      c_fprintf(c_stdout, "%s: %p %d\n", msg, c, c.typ.kind)
-    else: c_fprintf(c_stdout, "%s: %p (nil type)\n", msg, c)
-  proc writePtr(msg: CString, p: Pointer) =
-    c_fprintf(c_stdout, "%s: %p\n", msg, p)
-
+    var kind = -1
+    if c.typ != nil: kind = ord(c.typ.kind)
+    when debugGC:
+      c_fprintf(c_stdout, "[GC] %s: %p %d rc=%ld from %s(%ld)\n",
+                msg, c, kind, c.refcount shr rcShift, c.filename, c.line)
+    else:
+      c_fprintf(c_stdout, "[GC] %s: %p %d rc=%ld\n",
+                msg, c, kind, c.refcount shr rcShift)
 
 when traceGC:
   # traceGC is a special switch to enable extensive debugging
   type
     TCellState = enum
       csAllocated, csZctFreed, csCycFreed
-
-  proc cellSetInit(s: var TSlowSet) =
-    s.L = 0
-    s.cap = 4096
-    s.d = cast[PCellArray](gcAlloc(s.cap * sizeof(PCell)))
-
-  proc cellSetDeinit(s: var TSlowSet) =
-    s.L = 0
-    s.cap = 0
-    dealloc(s.d)
-
-  proc incl(s: var TSlowSet, c: PCell) =
-    if s.L >= s.cap:
-      s.cap = s.cap * 3 div 2
-      s.d = cast[PCellArray](realloc(s.d, s.cap * sizeof(PCell)))
-      if s.d == nil: raiseOutOfMem()
-    s.d[s.L] = c
-    inc(s.L)
-
-  proc excl(s: var TSlowSet, c: PCell) =
-    var i = 0
-    while i < s.L:
-      if s.d[i] == c:
-        s.d[i] = s.d[s.L-1]
-        dec(s.L)
-        break
-      inc(i)
-
-  proc inOperator(s: TSlowSet, c: PCell): bool =
-    var i = 0
-    while i < s.L:
-      if s.d[i] == c: return true
-      inc(i)
-
-  iterator elements(s: TSlowSet): PCell =
-    var i = 0
-    while i < s.L:
-      yield s.d[i]
-      inc(i)
-
   var
-    states: array[TCellState, TSlowSet] # TCellSet]
+    states: array[TCellState, TCellSet]
 
   proc traceCell(c: PCell, state: TCellState) =
     case state
     of csAllocated:
       if c in states[csAllocated]:
-        writeCell("attempt to alloc a already allocated cell", c)
+        writeCell("attempt to alloc an already allocated cell", c)
         assert(false)
       excl(states[csCycFreed], c)
       excl(states[csZctFreed], c)
     of csZctFreed:
-      if c notin states[csAllocated]:
-        writeCell("attempt to free a not allocated cell", c)
-        assert(false)
       if c in states[csZctFreed]:
         writeCell("attempt to free zct cell twice", c)
         assert(false)
       if c in states[csCycFreed]:
         writeCell("attempt to free with zct, but already freed with cyc", c)
         assert(false)
+      if c notin states[csAllocated]:
+        writeCell("attempt to free not an allocated cell", c)
+        assert(false)
       excl(states[csAllocated], c)
     of csCycFreed:
       if c notin states[csAllocated]:
@@ -505,17 +434,30 @@ when traceGC:
       excl(states[csAllocated], c)
     incl(states[state], c)
 
+  proc writeLeakage() =
+    var z = 0
+    var y = 0
+    var e = 0
+    for c in elements(states[csAllocated]):
+      inc(e)
+      if c in states[csZctFreed]: inc(z)
+      elif c in states[csCycFreed]: inc(z)
+      else: writeCell("leak", c)
+    cfprintf(cstdout, "Allocations: %ld; ZCT freed: %ld; CYC freed: %ld\n",
+             e, z, y)
+
 template gcTrace(cell, state: expr): stmt =
   when traceGC: traceCell(cell, state)
 
-# -------------------------------------------------------------------------
+# -----------------------------------------------------------------------------
 
 # forward declarations:
-proc collectCT(gch: var TGcHeap)
-proc IsOnStack(p: pointer): bool
+proc updateZCT()
+proc collectCT(gch: var TGcHeap, zctUpdated: bool)
+proc IsOnStack(p: pointer): bool {.noinline.}
 proc forAllChildren(cell: PCell, op: TWalkOp)
-proc collectCycles(gch: var TGcHeap)
-
+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
 
@@ -530,157 +472,86 @@ proc prepareDealloc(cell: PCell) =
     (cast[TFinalizer](cell.typ.finalizer))(cellToUsr(cell))
     dec(recGcLock)
 
-  when defined(nimSize):
-    memUsed = memUsed - nimSize(cell)
-  else:
-    memUsed = memUsed - cell.typ.size
-
-proc checkZCT(): bool =
-  if recGcLock >= 1: return true # prevent endless recursion
-  inc(recGcLock)
-  result = true
-  for i in 0..gch.zct.len-1:
-    var c = gch.zct.d[i]
-    if c.refcount > 0: # should be in the ZCT!
-      writeCell("wrong ZCT entry", c)
-      result = false
-    elif gch.zct.d[-c.refcount] != c:
-      writeCell("wrong ZCT position", c)
-      result = false
-  dec(recGcLock)
-
-proc GC_invariant(): bool =
-  if recGcLock >= 1: return true # prevent endless recursion
-  inc(recGcLock)
-  result = True
-  block checks:
-    if not checkZCT():
-      result = false
-      break checks
-    # set counters back to zero:
-    for c in elements(gch.AT):
-      var t = c.typ
-      if t == nil or t.kind notin {tySequence, tyString, tyRef}:
-        writeCell("corrupt cell?", c)
-        result = false
-        break checks
-      when stressGC: c.drefc = 0
-    for c in elements(gch.AT):
-      forAllChildren(c, waDebugIncRef)
-    when stressGC:
-      for c in elements(gch.AT):
-        var rc = c.refcount
-        if rc < 0: rc = 0
-        if c.drefc > rc + c.stackcount:
-          result = false # failed
-          c_fprintf(c_stdout,
-             "broken cell: %p, refc: %ld, stack: %ld, real: %ld\n",
-             c, c.refcount, c.stackcount, c.drefc)
-          break checks
-  dec(recGcLock)
-
-when stressGC:
-  proc GCdebugHook() =
-    if not GC_invariant():
-      assert(false)
-
-  dbgLineHook = GCdebugHook
-
 proc setStackBottom(theStackBottom: pointer) {.compilerproc.} =
   stackBottom = theStackBottom
 
 proc initGC() =
   when traceGC:
     for i in low(TCellState)..high(TCellState): CellSetInit(states[i])
+  gch.stackScans = 0
+  gch.cycleCollections = 0
+  gch.maxThreshold = 0
+  gch.maxStackSize = 0
+  gch.maxStackPages = 0
+  gch.cycleTableSize = 0
   # init the rt
   init(gch.zct)
-  CellSetInit(gch.at)
-  init(gch.stackCells)
+  init(gch.tempStack)
+  CellSetInit(gch.cycleRoots)
+  CellSetInit(gch.stackCells)
   gch.mask = 0
   new(gOutOfMem) # reserve space for the EOutOfMemory exception here!
-  assert(GC_invariant())
-
-proc decRef(cell: PCell) {.inline.} =
-  assert(cell.refcount > 0) # this should be the case!
-  when stressGC: assert(cell in gch.AT)
-  dec(cell.refcount)
-  if cell.refcount == 0:
-    cell.refcount = -gch.zct.len
-    when stressGC: assert(cell notin gch.zct)
-    add(gch.zct, cell)
-  when stressGC: assert(checkZCT())
-
-proc incRef(cell: PCell) {.inline.} =
-  var rc = cell.refcount
-  if rc <= 0:
-    # remove from zero count table:
-    when stressGC: assert(gch.zct.len > -rc)
-    when stressGC: assert(gch.zct.d[-rc] == cell)
-    gch.zct.d[-rc] = gch.zct.d[gch.zct.len-1]
-    gch.zct.d[-rc].refcount = rc
-    dec(gch.zct.len)
-    cell.refcount = 1
-    when stressGC: assert(checkZCT())
-  else:
-    inc(cell.refcount)
-    when stressGC: assert(checkZCT())
 
-proc asgnRef(dest: ppointer, src: pointer) =
+proc PossibleRoot(gch: var TGcHeap, c: PCell) {.inline.} =
+  if canbeCycleRoot(c): incl(gch.cycleRoots, c)
+
+proc decRef(c: PCell) {.inline.} =
+  when stressGC:
+    if c.refcount <% rcIncrement:
+      writeCell("broken cell", c)
+  assert(c.refcount >% rcIncrement)
+  c.refcount = c.refcount -% rcIncrement
+  if c.refcount <% rcIncrement:
+    addZCT(gch.zct, c)
+  elif canBeCycleRoot(c):
+    possibleRoot(gch, 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)
+
+proc nimGCref(p: pointer) {.compilerproc, inline.} = incRef(usrToCell(p))
+proc nimGCunref(p: pointer) {.compilerproc, inline.} = decRef(usrToCell(p))
+
+proc asgnRef(dest: ppointer, src: pointer) {.compilerproc, inline.} =
   # the code generator calls this proc!
   assert(not isOnStack(dest))
   # BUGFIX: first incRef then decRef!
   if src != nil: incRef(usrToCell(src))
   if dest^ != nil: decRef(usrToCell(dest^))
   dest^ = src
-  when stressGC: assert(GC_invariant())
+
+proc asgnRefNoCycle(dest: ppointer, src: pointer) {.compilerproc, inline.} =
+  # the code generator calls this proc if it is known at compile time that no 
+  # cycle is possible.
+  if src != nil: 
+    var c = usrToCell(src)
+    c.refcount = c.refcount +% rcIncrement
+  if dest^ != nil: 
+    var c = usrToCell(dest^)
+    c.refcount = c.refcount -% rcIncrement
+    if c.refcount <% rcIncrement:
+      addZCT(gch.zct, c)
+  dest^ = src
 
 proc unsureAsgnRef(dest: ppointer, src: pointer) =
   if not IsOnStack(dest):
     if src != nil: incRef(usrToCell(src))
     if dest^ != nil: decRef(usrToCell(dest^))
   dest^ = src
-  when stressGC: assert(GC_invariant())
-
-proc restore(cell: PCell) =
-  if cell notin gch.newAT:
-    incl(gch.newAT, Cell)
-    forAllChildren(cell, waCycleIncRef)
-
-proc doOperation(p: pointer, op: TWalkOp) =
-  if p == nil: return
-  var cell: PCell = usrToCell(p)
-  assert(cell != nil)
-  case op # faster than function pointers because of easy prediction
-  of waNone: assert(false)
-  of waRelease: decRef(cell) # DEAD CODE!
-  of waZctDecRef:
-    decRef(cell)
-  of waCycleDecRef:
-    assert(cell.refcount > 0)
-    dec(cell.refcount)
-  of waCycleIncRef:
-    inc(cell.refcount) # restore proper reference counts!
-    restore(cell)
-  of waDebugIncRef:
-    when stressGC: inc(cell.drefc)
-
-type
-  TByteArray = array[0..1000_0000, byte]
-  PByte = ptr TByteArray
-  PString = ptr string
-
-proc forAllChildrenAux(dest: Pointer, mt: PNimType, op: TWalkOp)
 
 proc getDiscriminant(aa: Pointer, n: ptr TNimNode): int =
   assert(n.kind == nkCase)
-  var d: int32
+  var d: int
   var a = cast[TAddress](aa)
   case n.typ.size
-  of 1: d = toU32(cast[ptr int8](a +% n.offset)^)
-  of 2: d = toU32(cast[ptr int16](a +% n.offset)^)
-  of 4: d = toU32(cast[ptr int32](a +% n.offset)^)
+  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 int(d)
+  return d
 
 proc selectBranch(aa: Pointer, n: ptr TNimNode): ptr TNimNode =
   var discr = getDiscriminant(aa, n)
@@ -692,8 +563,7 @@ proc selectBranch(aa: Pointer, n: ptr TNimNode): ptr TNimNode =
     result = n.sons[n.len]
 
 proc forAllSlotsAux(dest: pointer, n: ptr TNimNode, op: TWalkOp) =
-  var
-    d = cast[TAddress](dest)
+  var d = cast[TAddress](dest)
   case n.kind
   of nkNone: assert(false)
   of nkSlot: forAllChildrenAux(cast[pointer](d +% n.offset), n.typ, op)
@@ -704,35 +574,21 @@ proc forAllSlotsAux(dest: pointer, n: ptr TNimNode, op: TWalkOp) =
     if m != nil: forAllSlotsAux(dest, m, op)
 
 proc forAllChildrenAux(dest: Pointer, mt: PNimType, op: TWalkOp) =
-  const
-    handledTypes = {tyArray, tyArrayConstr, tyOpenArray, tyRef,
-                    tyString, tySequence, tyObject, tyPureObject, tyTuple}
-  var
-    d = cast[TAddress](dest)
+  var d = cast[TAddress](dest)
   if dest == nil: return # nothing to do
-  case mt.Kind
-  of tyArray, tyArrayConstr, tyOpenArray:
-    if mt.base.kind in handledTypes:
+  if ntfNoRefs notin mt.flags:
+    case mt.Kind
+    of tyArray, tyArrayConstr, tyOpenArray:
       for i in 0..(mt.size div mt.base.size)-1:
         forAllChildrenAux(cast[pointer](d +% i *% mt.base.size), mt.base, op)
-  of tyRef, tyString, tySequence: # leaf:
-    doOperation(cast[ppointer](d)^, op)
-  of tyObject, tyTuple, tyPureObject:
-    forAllSlotsAux(dest, mt.node, op)
-  else: nil
+    of tyRef, tyString, tySequence: # leaf:
+      doOperation(cast[ppointer](d)^, op)
+    of tyObject, tyTuple, tyPureObject:
+      forAllSlotsAux(dest, mt.node, op)
+    else: nil
 
 proc forAllChildren(cell: PCell, op: TWalkOp) =
   assert(cell != nil)
-  when defined(debugGC):
-    if cell.typ == nil:
-      writeCell("cell has no type descriptor", cell)
-      when traceGC:
-        if cell notin states[csAllocated]:
-          writeCell("cell has never been allocated!", cell)
-        if cell in states[csCycFreed]:
-          writeCell("cell has been freed by Cyc", cell)
-        if cell in states[csZctFreed]:
-          writeCell("cell has been freed by Zct", cell)
   assert(cell.typ != nil)
   case cell.typ.Kind
   of tyRef: # common case
@@ -740,46 +596,41 @@ proc forAllChildren(cell: PCell, op: TWalkOp) =
   of tySequence:
     var d = cast[TAddress](cellToUsr(cell))
     var s = cast[PGenericSeq](d)
-    if s != nil: # BUGFIX
+    if s != nil:
       for i in 0..s.len-1:
         forAllChildrenAux(cast[pointer](d +% i *% cell.typ.base.size +%
           GenericSeqSize), cell.typ.base, op)
   of tyString: nil
   else: assert(false)
 
-proc checkCollection() {.inline.} =
+proc checkCollection(zctUpdated: bool) {.inline.} =
   # checks if a collection should be done
   if recGcLock == 0:
-    collectCT(gch)
+    collectCT(gch, zctUpdated)
 
 proc newObj(typ: PNimType, size: int): pointer =
   # generates a new object and sets its reference counter to 0
-  var
-    res: PCell
-  when stressGC: assert(checkZCT())
   assert(typ.kind in {tyRef, tyString, tySequence})
+  var zctUpdated = false
+  if gch.zct.len >= ZctThreshold:
+    updateZCT()
+    zctUpdated = true
   # check if we have to collect:
-  checkCollection()
-  res = cast[PCell](Alloc0(size + sizeof(TCell)))
+  checkCollection(zctUpdated)
+  var res = cast[PCell](gcAlloc(size + sizeof(TCell)))
   when stressGC: assert((cast[TAddress](res) and (MemAlignment-1)) == 0)
-  if res == nil: raiseOutOfMem()
-  when defined(nimSize):
-    memUsed = memUsed + nimSize(res)
-  else:
-    memUsed = memUsed + size
-
   # now it is buffered in the ZCT
   res.typ = typ
-  res.refcount = -gch.zct.len
-  add(gch.zct, res)  # its refcount is zero, so add it to the ZCT
-  incl(gch.at, res)  # add it to the any table too
+  when debugGC:
+    if framePtr != nil and framePtr.prev != nil:
+      res.filename = framePtr.prev.filename
+      res.line = framePtr.prev.line
+  res.refcount = rcZct # refcount is zero, but mark it to be in the ZCT
+  add(gch.zct, res) # its refcount is zero, so add it to the ZCT
   gch.mask = gch.mask or cast[TAddress](res)
-  when defined(debugGC):
-    when defined(logGC): writeCell("new cell", res)
+  when logGC: writeCell("new cell", res)
   gcTrace(res, csAllocated)
   result = cellToUsr(res)
-  assert(res.typ == typ)
-  when stressGC: assert(checkZCT())
 
 proc newSeq(typ: PNimType, len: int): pointer =
   # XXX: overflow checks!
@@ -788,96 +639,138 @@ proc newSeq(typ: PNimType, len: int): pointer =
   cast[PGenericSeq](result).space = len
 
 proc growObj(old: pointer, newsize: int): pointer =
-  var
-    res, ol: PCell
-  when stressGC: assert(checkZCT())
-  checkCollection()
-  ol = usrToCell(old)
+  checkCollection(false)
+  var ol = usrToCell(old)
+  assert(ol.typ != nil)
   assert(ol.typ.kind in {tyString, tySequence})
-  when defined(nimSize):
-    memUsed = memUsed - nimSize(ol)
-  else:
-    memUsed = memUsed - ol.size # this is not exact
-                                # pity that we don't know the old size
-  res = cast[PCell](realloc(ol, newsize + sizeof(TCell)))
-  #res = cast[PCell](gcAlloc(newsize + sizeof(TCell)))
-  #copyMem(res, ol, nimSize(ol))
+  var res = cast[PCell](gcAlloc(newsize + sizeof(TCell)))
+  var elemSize = 1
+  if ol.typ.kind != tyString:
+    elemSize = ol.typ.base.size
+  copyMem(res, ol, cast[PGenericSeq](old).len*elemSize +
+          GenericSeqSize + sizeof(TCell))
+
   assert((cast[TAddress](res) and (MemAlignment-1)) == 0)
-  when defined(nimSize):
-    memUsed = memUsed + nimSize(res)
+  assert(res.refcount shr rcShift <=% 1)
+  #if res.refcount <% rcIncrement:
+  #  add(gch.zct, res)
+  #else: # XXX: what to do here?
+  #  decRef(ol)
+  if (ol.refcount and colorMask) == rcZct:
+    var j = gch.zct.len-1
+    var d = gch.zct.d
+    while j >= 0: 
+      if d[j] == ol:
+        d[j] = res
+        break
+      dec(j)
+  if canBeCycleRoot(ol): excl(gch.cycleRoots, ol)
+  gch.mask = gch.mask or cast[TAddress](res)
+  when logGC:
+    writeCell("growObj old cell", ol)
+    writeCell("growObj new cell", res)
+  gcTrace(ol, csZctFreed)
+  gcTrace(res, csAllocated)
+  when reallyDealloc: tlsf_free(ol)
   else:
-    memUsed = memUsed + newsize
-
-  if res != ol:
-    if res == nil: raiseOutOfMem()
-    if res.refcount <= 0:
-      assert(gch.zct.d[-res.refcount] == ol)
-      gch.zct.d[-res.refcount] = res
-    excl(gch.at, ol)
-    incl(gch.at, res)
-    gch.mask = gch.mask or cast[TAddress](res)
-    when defined(logGC):
-      writeCell("growObj old cell", ol)
-      writeCell("growObj new cell", res)
-    gcTrace(ol, csZctFreed)
-    gcTrace(res, csAllocated)
+    assert(ol.typ != nil)
+    zeroMem(ol, sizeof(TCell))
   result = cellToUsr(res)
-  when stressGC: assert(checkZCT())
 
-proc collectCycles(gch: var TGcHeap) =
-  when defined(logGC):
-    c_fprintf(c_stdout, "collecting cycles!\n")
+# ---------------- cycle collector -------------------------------------------
+
+# When collecting cycles, we have to consider the following:
+# * there may still be references in the stack
+# * some cells may still be in the ZCT, because they are referenced from
+#   the stack (!), so their refcounts are zero
+# the ZCT is a subset of stackCells here, so we only need to care
+# for stackcells
+
+proc doOperation(p: pointer, op: TWalkOp) =
+  if p == nil: return
+  var c: PCell = usrToCell(p)
+  assert(c != nil)
+  case op # faster than function pointers because of easy prediction
+  of waZctDecRef:
+    assert(c.refcount >=% rcIncrement)
+    c.refcount = c.refcount -% rcIncrement
+    when logGC: writeCell("decref (from doOperation)", c)
+    if c.refcount <% rcIncrement: addZCT(gch.zct, c)
+  of waPush:
+    add(gch.tempStack, c)
+  of waCycleDecRef:
+    assert(c.refcount >=% rcIncrement)
+    c.refcount = c.refcount -% rcIncrement
 
-  # step 1: pretend that any node is dead
-  for c in elements(gch.at):
+# we now use a much simpler and non-recursive algorithm for cycle removal
+proc collectCycles(gch: var TGcHeap) =
+  var tabSize = 0
+  for c in elements(gch.cycleRoots):
+    inc(tabSize)
+    assert(c.typ != nil)
     forallChildren(c, waCycleDecRef)
-  CellSetInit(gch.newAt)
-  # step 2: restore life cells
-  for c in elements(gch.at):
-    if c.refcount > 0: restore(c)
-  # step 3: free dead cells:
-  for cell in elements(gch.at):
-    if cell.refcount == 0:
-      # We free an object that is part of a cycle here. Its children
-      # may have been freed already. Thus the finalizer could access
-      # garbage. To handle this case properly we need two passes for
-      # freeing here which is too expensive. We just don't call the
-      # finalizer for now. YYY: Any better ideas?
-      prepareDealloc(cell)
-      gcTrace(cell, csCycFreed)
-      when defined(logGC):
-        writeCell("cycle collector dealloc cell", cell)
-      when reallyDealloc: dealloc(cell)
-  CellSetDeinit(gch.at)
-  gch.at = gch.newAt
-
-proc gcMark(gch: var TGcHeap, p: pointer) =
+  gch.cycleTableSize = max(gch.cycleTableSize, tabSize)
+
+  # restore reference counts (a depth-first traversal is needed):
+  var marker, newRoots: TCellSet
+  CellSetInit(marker)
+  CellSetInit(newRoots)
+  for c in elements(gch.cycleRoots):
+    var needsRestore = false
+    if c in gch.stackCells:
+      needsRestore = true
+      incl(newRoots, c)
+      # we need to scan this later again; maybe stack changes
+      # NOTE: adding to ZCT here does NOT work
+    elif c.refcount >=% rcIncrement:
+      needsRestore = true
+    if needsRestore:
+      if c notin marker:
+        incl(marker, c)
+        gch.tempStack.len = 0
+        forAllChildren(c, waPush)
+        while gch.tempStack.len > 0:
+          dec(gch.tempStack.len)
+          var d = gch.tempStack.d[gch.tempStack.len]
+          d.refcount = d.refcount +% rcIncrement
+          if d notin marker and d in gch.cycleRoots:
+            incl(marker, d)
+            forAllChildren(d, waPush)
+  # remove cycles:
+  for c in elements(gch.cycleRoots):
+    if c.refcount <% rcIncrement and c notin gch.stackCells:
+      gch.tempStack.len = 0
+      forAllChildren(c, waPush)
+      while gch.tempStack.len > 0:
+        dec(gch.tempStack.len)
+        var d = gch.tempStack.d[gch.tempStack.len]
+        if d.refcount <% rcIncrement:
+          if d notin gch.cycleRoots: # d is leaf of c and not part of cycle
+            addZCT(gch.zct, d)
+            when logGC: writeCell("add to ZCT (from cycle collector)", d)
+      prepareDealloc(c)
+      gcTrace(c, csCycFreed)
+      when logGC: writeCell("cycle collector dealloc cell", c)
+      when reallyDealloc: tlsf_free(c)
+      else:
+        assert(c.typ != nil)
+        zeroMem(c, sizeof(TCell))
+  CellSetDeinit(gch.cycleRoots)
+  gch.cycleRoots = newRoots
+
+proc gcMark(p: pointer) {.fastcall.} =
   # the addresses are not as objects on the stack, so turn them to objects:
   var cell = usrToCell(p)
   var c = cast[TAddress](cell)
-  if ((c and gch.mask) == c) and cell in gch.at:
-    # is the page that p "points to" in the AT? (All allocated pages are
-    # always in the AT)
-    incRef(cell)
-    when stressGC: inc(cell.stackcount)
-    add(gch.stackCells, cell)
-
-proc unmarkStackAndRegisters(gch: var TGcHeap) =
-  when stressGC: assert(checkZCT())
-  for i in 0 .. gch.stackCells.len-1:
-    var cell = gch.stackCells.d[i]
-    assert(cell.refcount > 0)
-    when stressGC:
-      assert(cell.stackcount > 0)
-      dec(cell.stackcount)
-    decRef(cell)
-  gch.stackCells.len = 0 # reset to zero
-  when stressGC: assert(checkZCT())
+  if ((c and gch.mask) == c) and c >% 1024:
+    # fast check: does it look like a cell?
+    when logGC: cfprintf(cstdout, "in stackcells %p\n", cell)
+    incl(gch.stackCells, cell)  # yes: mark it
 
 # ----------------- stack management --------------------------------------
 #  inspired from Smart Eiffel (c)
 
-proc stackSize(): int =
+proc stackSize(): int {.noinline.} =
   var stackTop: array[0..1, pointer]
   result = abs(cast[int](addr(stackTop[0])) - cast[int](stackBottom))
 
@@ -888,26 +781,24 @@ when defined(sparc): # For SPARC architecture.
       stackTop: array[0..1, pointer]
     result = p >= addr(stackTop[0]) and p <= stackBottom
 
-  proc markStackAndRegisters(gch: var TGcHeap) =
+  proc markStackAndRegisters(gch: var TGcHeap) {.noinline, cdecl.} =
     when defined(sparcv9):
-      asm  " flushw"
+      asm  """"flushw \n" """
     else:
-      asm  " ta      0x3   ! ST_FLUSH_WINDOWS"
+      asm  """"ta      0x3   ! ST_FLUSH_WINDOWS\n" """
 
     var
       max = stackBottom
       sp: PPointer
       stackTop: array[0..1, pointer]
-    stackTop[0] = nil
-    stackTop[1] = nil
     sp = addr(stackTop[0])
     # Addresses decrease as the stack grows.
     while sp <= max:
-      gcMark(gch, sp^)
+      gcMark(sp^)
       sp = cast[ppointer](cast[TAddress](sp) +% sizeof(pointer))
 
 elif defined(ELATE):
-  {.error: "stack marking code has to be written for this architecture".}
+  {.error: "stack marking code is to be written for this architecture".}
 
 elif defined(hppa) or defined(hp9000) or defined(hp9000s300) or
      defined(hp9000s700) or defined(hp9000s800) or defined(hp9000s820):
@@ -921,24 +812,71 @@ elif defined(hppa) or defined(hp9000) or defined(hp9000s300) or
     result = p <= addr(stackTop[0]) and p >= stackBottom
 
   var
-    jmpbufSize {.importc: "sizeof(jmp_buf)".}: int
+    jmpbufSize {.importc: "sizeof(jmp_buf)", nodecl.}: int
       # a little hack to get the size of a TJmpBuf in the generated C code
       # in a platform independant way
 
-  proc markStackAndRegisters(gch: var TGcHeap) =
+  proc markStackAndRegisters(gch: var TGcHeap) {.noinline, cdecl.} =
     var
       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.
-    c_setjmp(registers)   # To fill the C stack with registers.
-    sp = cast[ppointer](cast[TAddress](addr(registers)) +%
-           jmpbufSize -% sizeof(pointer))
-    # sp will traverse the JMP_BUF as well (jmp_buf size is added,
-    # otherwise sp would be below the registers structure).
-    while sp >= max:
-      gcMark(gch, sp^)
-      sp = cast[ppointer](cast[TAddress](sp) -% sizeof(pointer))
+    if c_setjmp(registers) == 0: # To fill the C stack with registers.
+      sp = cast[ppointer](cast[TAddress](addr(registers)) +%
+             jmpbufSize -% sizeof(pointer))
+      # sp will traverse the JMP_BUF as well (jmp_buf size is added,
+      # otherwise sp would be below the registers structure).
+      while sp >= max:
+        gcMark(sp^)
+        sp = cast[ppointer](cast[TAddress](sp) -% sizeof(pointer))
+
+elif defined(I386) and asmVersion:
+  # addresses decrease as the stack grows:
+  proc isOnStack(p: pointer): bool =
+    var
+      stackTop: array [0..1, pointer]
+    result = p >= addr(stackTop[0]) and p <= stackBottom
+
+  proc markStackAndRegisters(gch: var TGcHeap) {.noinline, cdecl.} =
+    # This code should be safe even for aggressive optimizers. The try
+    # statement safes all registers into the safepoint, which we
+    # scan additionally to the stack.
+    type
+      TPtrArray = array[0..0xffffff, pointer]
+    try:
+      var pa = cast[ptr TPtrArray](excHandler)
+      for i in 0 .. sizeof(TSafePoint) - 1:
+        gcMark(pa[i])
+    finally:
+      # iterate over the stack:
+      var max = cast[TAddress](stackBottom)
+      var stackTop{.volatile.}: array [0..15, pointer]
+      var sp {.volatile.} = cast[TAddress](addr(stackTop[0]))
+      while sp <= max:
+        gcMark(cast[ppointer](sp)^)
+        sp = sp +% sizeof(pointer)
+    when false:
+      var counter = 0
+      #mov ebx, OFFSET `stackBottom`
+      #mov ebx, [ebx]
+      asm """
+        pusha
+        mov edi, esp
+        call `getStackBottom`
+        mov ebx, eax
+      L1:
+        cmp edi, ebx
+        ja L2
+        mov eax, [edi]
+        call `gcMark`
+        add edi, 4
+        inc [`counter`]
+        jmp L1
+      L2:
+        popa
+      """
+      cfprintf(cstdout, "stack %ld\n", counter)
 
 else:
   # ---------------------------------------------------------------------------
@@ -949,67 +887,135 @@ else:
       stackTop: array [0..1, pointer]
     result = p >= addr(stackTop[0]) and p <= stackBottom
 
-  proc markStackAndRegisters(gch: var TGcHeap) =
-    var
-      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.
-    c_setjmp(registers)   # To fill the C stack with registers.
-    sp = cast[ppointer](addr(registers))
-    while sp <= max:
-      gcMark(gch, sp^)
-      sp = cast[ppointer](cast[TAddress](sp) +% sizeof(pointer))
+  var
+    gRegisters: C_JmpBuf
+    jmpbufSize {.importc: "sizeof(jmp_buf)", nodecl.}: int
+      # a little hack to get the size of a TJmpBuf in the generated C code
+      # in a platform independant way
+
+  proc markStackAndRegisters(gch: var TGcHeap) {.noinline, cdecl.} =
+    when true:
+      # new version: several C compilers are too smart here
+      var
+        max = cast[TAddress](stackBottom)
+        stackTop: array [0..15, pointer]
+      if c_setjmp(gregisters) == 0'i32: # To fill the C stack with registers.
+        # iterate over the registers:
+        var sp = cast[TAddress](addr(gregisters))
+        while sp < cast[TAddress](addr(gregisters))+%jmpbufSize:
+          gcMark(cast[ppointer](sp)^)
+          sp = sp +% sizeof(pointer)
+        # iterate over the stack:
+        sp = cast[TAddress](addr(stackTop[0]))
+        while sp <= max:
+          gcMark(cast[ppointer](sp)^)
+          sp = sp +% sizeof(pointer)
+      else:
+        c_longjmp(gregisters, 42)
+        # this can never happen, but should trick any compiler that is
+        # not as smart as a human
+    else:
+      var
+        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.
+      if c_setjmp(registers) == 0'i32: # To fill the C stack with registers.
+        sp = cast[ppointer](addr(registers))
+        while sp <= max:
+          gcMark(sp^)
+          sp = cast[ppointer](cast[TAddress](sp) +% sizeof(pointer))
 
 # ----------------------------------------------------------------------------
 # end of non-portable code
 # ----------------------------------------------------------------------------
 
+proc updateZCT() =
+  # We have to make an additional pass over the ZCT unfortunately, because 
+  # the ZCT may be out of date, which means it contains cells with a
+  # refcount > 0. The reason is that ``incRef`` does not bother to remove
+  # the cell from the ZCT as this might be too slow.
+  var j = 0
+  var L = gch.zct.len # because globals make it hard for the optimizer
+  var d = gch.zct.d
+  while j < L:
+    var c = d[j]
+    if c.refcount >=% rcIncrement:
+      when logGC: writeCell("remove from ZCT", c)
+      # remove from ZCT:
+      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
+    else:
+      inc(j)
+  gch.zct.len = L
+
 proc CollectZCT(gch: var TGcHeap) =
-  while gch.zct.len > 0:
-    var c = gch.zct.d[0]
-    assert(c.refcount <= 0)
-    # remove from ZCT:
-    gch.zct.d[0] = gch.zct.d[gch.zct.len-1]
-    gch.zct.d[0].refcount = 0
-    dec(gch.zct.len)
-    # We are about to free the object, call the finalizer BEFORE its
-    # children are deleted as well, because otherwise the finalizer may
-    # access invalid memory. This is done by prepareDealloc():
-    gcTrace(c, csZctFreed)
-    prepareDealloc(c)
-    forAllChildren(c, waZctDecRef)
-    excl(gch.at, c)
-    when defined(logGC):
-      writeCell("zct dealloc cell", c)
-    #when defined(debugGC) and defined(nimSize): zeroMem(c, nimSize(c))
-    when reallyDealloc: dealloc(c)
-
-proc collectCT(gch: var TGcHeap) =
-  when defined(logGC):
-    c_fprintf(c_stdout, "collecting zero count table; stack size: %ld\n",
-              stackSize())
-  when stressGC: assert(checkZCT())
-  if gch.zct.len >= ZctThreshold or memUsed >= cycleThreshold or stressGC:
+  var i = 0
+  while i < gch.zct.len:
+    var c = gch.zct.d[i]
+    assert(c.refcount <% rcIncrement)
+    assert((c.refcount and colorMask) == rcZct)
+    if canBeCycleRoot(c): excl(gch.cycleRoots, c)
+    if c notin gch.stackCells:
+      # remove from ZCT:
+      c.refcount = c.refcount and not colorMask
+      gch.zct.d[i] = gch.zct.d[gch.zct.len-1]
+      # we have a new cell at position i, so don't increment i
+      dec(gch.zct.len)
+      when logGC: writeCell("zct dealloc cell", c)
+      gcTrace(c, csZctFreed)
+      # We are about to free the object, call the finalizer BEFORE its
+      # children are deleted as well, because otherwise the finalizer may
+      # access invalid memory. This is done by prepareDealloc():
+      prepareDealloc(c)
+      forAllChildren(c, waZctDecRef)
+      when reallyDealloc: tlsf_free(c)
+      else:
+        assert(c.typ != nil)
+        zeroMem(c, sizeof(TCell))
+    else:
+      inc(i)
+  when stressGC:
+    for j in 0..gch.zct.len-1: assert(gch.zct.d[j] in gch.stackCells)
+
+proc collectCT(gch: var TGcHeap, zctUpdated: bool) =
+  if gch.zct.len >= ZctThreshold or (cycleGC and
+      getOccupiedMem() >= cycleThreshold) or stressGC:    
+    if not zctUpdated: updateZCT()
+    gch.maxStackSize = max(gch.maxStackSize, stackSize())
+    CellSetInit(gch.stackCells)
     markStackAndRegisters(gch)
-    when stressGC: assert(GC_invariant())
+    gch.maxStackPages = max(gch.maxStackPages, gch.stackCells.counter)
+    inc(gch.stackScans)
     collectZCT(gch)
-    when stressGC: assert(GC_invariant())
-    assert(gch.zct.len == 0)
-    when defined(cycleGC):
-      if memUsed >= cycleThreshold or stressGC:
-        when defined(logGC):
-          c_fprintf(c_stdout, "collecting cycles; memory used: %ld\n", memUsed)
+    when cycleGC:
+      if getOccupiedMem() >= cycleThreshold or stressGC:
         collectCycles(gch)
-        cycleThreshold = max(InitialCycleThreshold, memUsed * cycleIncrease)
-        when defined(logGC):
-          c_fprintf(c_stdout, "now used: %ld; threshold: %ld\n",
-                    memUsed, cycleThreshold)
-    unmarkStackAndRegisters(gch)
-  when stressGC: assert(GC_invariant())
+        collectZCT(gch)
+        inc(gch.cycleCollections)
+        cycleThreshold = max(InitialCycleThreshold, getOccupiedMem() *
+                             cycleIncrease)
+        gch.maxThreshold = max(gch.maxThreshold, cycleThreshold)
+    CellSetDeinit(gch.stackCells)
 
 proc GC_fullCollect() =
   var oldThreshold = cycleThreshold
   cycleThreshold = 0 # forces cycle collection
-  collectCT(gch)
+  collectCT(gch, false)
   cycleThreshold = oldThreshold
+
+proc GC_getStatistics(): string =
+  GC_disable()
+  result = "[GC] total memory: " & $(getTotalMem()) & "\n" &
+           "[GC] occupied memory: " & $(getOccupiedMem()) & "\n" &
+           "[GC] stack scans: " & $gch.stackScans & "\n" &
+           "[GC] stack pages: " & $gch.maxStackPages & "\n" &
+           "[GC] cycle collections: " & $gch.cycleCollections & "\n" &
+           "[GC] max threshold: " & $gch.maxThreshold & "\n" &
+           "[GC] zct capacity: " & $gch.zct.cap & "\n" &
+           "[GC] max cycle table size: " & $gch.cycleTableSize & "\n" &
+           "[GC] max stack size: " & $gch.maxStackSize
+  when traceGC: writeLeakage()
+  GC_enable()
diff --git a/lib/generics.nim b/lib/generics.nim
index 10e55f5bd..1ed7651e1 100644
--- a/lib/generics.nim
+++ b/lib/generics.nim
@@ -104,8 +104,7 @@ const
   growthFactor = 2 # must be power of two
 
 proc init*[TKey, TValue](t: var TTable[TKey, TValue], capacity: natural = 32) =
-  t.d = [] # XXX
-  setLen(t.d, capacity)
+  newSeq(t.d, capacity)
 
 proc len*[TKey, TValue](t: TTable[TKey, TValue]): natural = return t.counter
 
@@ -136,8 +135,8 @@ proc TableRawInsert[TKey, TValue](data: var seq[TPair[TKey, TValue]],
   data[h].val = val
 
 proc TableEnlarge[TKey, TValue](t: var TTable[TKey, TValue]) =
-  var n: seq[TPair[TKey,TValue]] = []
-  setLen(n, len(t.d) * growthFactor) # XXX
+  var n: seq[TPair[TKey,TValue]]
+  newSeq(n, len(t.d) * growthFactor)
   for i in 0..high(t.d):
     if not isNil(t.d[i].key):
       TableRawInsert(n, t.d[i].key, t.d[i].val)
diff --git a/lib/hashes.nim b/lib/hashes.nim
index ed7871008..1593119bd 100644
--- a/lib/hashes.nim
+++ b/lib/hashes.nim
@@ -1,97 +1,97 @@
-#

-#

-#            Nimrod's Runtime Library

-#        (c) Copyright 2008 Andreas Rumpf

-#

-#    See the file "copying.txt", included in this

-#    distribution, for details about the copyright.

-#

-

-## This module implements efficient computations of hash values for diverse

-## Nimrod types.

-

-import 

-  strutils

-

-type 

-  THash* = int ## a hash value; hash tables using these values should 

-               ## always have a size of a power of two and can use the ``and``

-               ## operator instead of ``mod`` for truncation of the hash value.

-

-proc concHash(h: THash, val: int): THash {.inline.} = 

-  result = h +% val

-  result = result +% result shl 10

-  result = result xor (result shr 6)

-

-proc finishHash(h: THash): THash {.inline.} = 

-  result = h +% h shl 3

-  result = result xor (result shr 11)

-  result = result +% result shl 15

-

-proc hashData*(Data: Pointer, Size: int): THash = 

-  ## hashes an array of bytes of size `size`

-  var 

-    h: THash

-    p: cstring

-    i, s: int

-  h = 0

-  p = cast[cstring](Data)

-  i = 0

-  s = size

-  while s > 0: 

-    h = concHash(h, ord(p[i]))

-    Inc(i)

-    Dec(s)

-  result = finishHash(h)

-

-proc hash*(x: Pointer): THash {.inline.} = 

-  ## efficient hashing of pointers

-  result = (cast[THash](x)) shr 3 # skip the alignment

-  

-proc hash*(x: int): THash {.inline.} = 

-  ## efficient hashing of integers

-  result = x

-

-proc hash*(x: int64): THash {.inline.} = 

-  ## efficient hashing of integers

-  result = toU32(x)

-

-proc hash*(x: char): THash {.inline.} = 

-  ## efficient hashing of characters

-  result = ord(x)

-

-proc hash*(x: string): THash = 

-  ## efficient hashing of strings

-  var h: THash

-  h = 0

-  for i in 0..x.len-1: 

-    h = concHash(h, ord(x[i]))

-  result = finishHash(h)

-  

-proc hashIgnoreStyle*(x: string): THash = 

-  ## efficient hashing of strings; style is ignored

-  var 

-    h: THash

-    c: Char

-  h = 0

-  for i in 0..x.len-1: 

-    c = x[i]

-    if c == '_': 

-      continue                # skip _

-    if c in {'A'..'Z'}: 

-      c = chr(ord(c) + (ord('a') - ord('A'))) # toLower()

-    h = concHash(h, ord(c))

-  result = finishHash(h)

-

-proc hashIgnoreCase*(x: string): THash = 

-  ## efficient hashing of strings; case is ignored

-  var 

-    h: THash

-    c: Char

-  h = 0

-  for i in 0..x.len-1: 

-    c = x[i]

-    if c in {'A'..'Z'}: 

-      c = chr(ord(c) + (ord('a') - ord('A'))) # toLower()

-    h = concHash(h, ord(c))

-  result = finishHash(h)

+#
+#
+#            Nimrod's Runtime Library
+#        (c) Copyright 2008 Andreas Rumpf
+#
+#    See the file "copying.txt", included in this
+#    distribution, for details about the copyright.
+#
+
+## This module implements efficient computations of hash values for diverse
+## Nimrod types.
+
+import 
+  strutils
+
+type 
+  THash* = int ## a hash value; hash tables using these values should 
+               ## always have a size of a power of two and can use the ``and``
+               ## operator instead of ``mod`` for truncation of the hash value.
+
+proc concHash(h: THash, val: int): THash {.inline.} = 
+  result = h +% val
+  result = result +% result shl 10
+  result = result xor (result shr 6)
+
+proc finishHash(h: THash): THash {.inline.} = 
+  result = h +% h shl 3
+  result = result xor (result shr 11)
+  result = result +% result shl 15
+
+proc hashData*(Data: Pointer, Size: int): THash = 
+  ## hashes an array of bytes of size `size`
+  var 
+    h: THash
+    p: cstring
+    i, s: int
+  h = 0
+  p = cast[cstring](Data)
+  i = 0
+  s = size
+  while s > 0: 
+    h = concHash(h, ord(p[i]))
+    Inc(i)
+    Dec(s)
+  result = finishHash(h)
+
+proc hash*(x: Pointer): THash {.inline.} = 
+  ## efficient hashing of pointers
+  result = (cast[THash](x)) shr 3 # skip the alignment
+  
+proc hash*(x: int): THash {.inline.} = 
+  ## efficient hashing of integers
+  result = x
+
+proc hash*(x: int64): THash {.inline.} = 
+  ## efficient hashing of integers
+  result = toU32(x)
+
+proc hash*(x: char): THash {.inline.} = 
+  ## efficient hashing of characters
+  result = ord(x)
+
+proc hash*(x: string): THash = 
+  ## efficient hashing of strings
+  var h: THash
+  h = 0
+  for i in 0..x.len-1: 
+    h = concHash(h, ord(x[i]))
+  result = finishHash(h)
+  
+proc hashIgnoreStyle*(x: string): THash = 
+  ## efficient hashing of strings; style is ignored
+  var 
+    h: THash
+    c: Char
+  h = 0
+  for i in 0..x.len-1: 
+    c = x[i]
+    if c == '_': 
+      continue                # skip _
+    if c in {'A'..'Z'}: 
+      c = chr(ord(c) + (ord('a') - ord('A'))) # toLower()
+    h = concHash(h, ord(c))
+  result = finishHash(h)
+
+proc hashIgnoreCase*(x: string): THash = 
+  ## efficient hashing of strings; case is ignored
+  var 
+    h: THash
+    c: Char
+  h = 0
+  for i in 0..x.len-1: 
+    c = x[i]
+    if c in {'A'..'Z'}: 
+      c = chr(ord(c) + (ord('a') - ord('A'))) # toLower()
+    h = concHash(h, ord(c))
+  result = finishHash(h)
diff --git a/lib/hti.nim b/lib/hti.nim
index 563414b26..7639cf6a3 100644
--- a/lib/hti.nim
+++ b/lib/hti.nim
@@ -13,7 +13,7 @@ type # This should be he same as ast.TTypeKind
     tyNone, # 0 
     tyBool, # 1 
     tyChar, # 2
-    tyEmptySet, # 3
+    tyEmpty, # 3
     tyArrayConstr, # 4
     tyNil, # 5
     tyGeneric, # 6
@@ -49,9 +49,13 @@ type # This should be he same as ast.TTypeKind
     len: int
     sons: ptr array [0..0x7fff, ptr TNimNode]
 
+  TNimTypeFlag = enum 
+    ntfNoRefs = 0,     # type contains no tyRef, tySequence, tyString
+    ntfAcyclic = 1     # type cannot form a cycle
   TNimType {.compilerproc, final.} = object
     size: int
     kind: TNimKind
+    flags: set[TNimTypeFlag]
     base: ptr TNimType
     node: ptr TNimNode # valid for tyRecord, tyObject, tyTuple, tyEnum
     finalizer: pointer # the finalizer for the type
diff --git a/lib/int64s.nim b/lib/int64s.nim
index 430514ce3..7a3dbad77 100644
--- a/lib/int64s.nim
+++ b/lib/int64s.nim
@@ -1,71 +1,71 @@
-#

-#

-#            Nimrod's Runtime Library

-#        (c) Copyright 2006 Andreas Rumpf

-#

-#    See the file "copying.txt", included in this

-#    distribution, for details about the copyright.

-#

-

-# 64 bit integers for platforms that don't have those

-

-type

-  IInt64 = tuple[lo, hi: int32]

-

-proc cmpI64(x, y: IInt64): int32 {.compilerproc.} =

-  result = x.hi -% y.hi

-  if result == 0: result = x.lo -% y.lo

-

-proc addI64(x, y: IInt64): IInt64 {.compilerproc.} =

-  result = x

-  result.lo = result.lo +% y.lo

-  result.hi = result.hi +% y.hi

-  if y.lo > 0 and result.lo < y.lo:

-    inc(result.hi)

-  elif y.lo < 0 and result.lo > y.lo:

-    dec(result.hi)

-

-proc subI64(x, y: IInt64): IInt64 {.compilerproc.} =

-  result = x

-  result.lo = result.lo -% y.lo

-  result.hi = result.hi -% y.hi

-  if y.lo > 0 and result.lo < y.lo:

-    inc(result.hi)

-  elif y.lo < 0 and result.lo > y.lo:

-    dec(result.hi)

-

-proc mulI64(x, y: IInt64): IInt64 {.compilerproc.} =

-  result.lo = x.lo *% y.lo

-  result.hi = y.hi *% y.hi

-  if y.lo > 0 and result.lo < y.lo:

-    inc(result.hi)

-  elif y.lo < 0 and result.lo > y.lo:

-    dec(result.hi)

-

-proc divI64(x, y: IInt64): IInt64 {.compilerproc.} =

-  # XXX: to implement

-

-proc modI64(x, y: IInt64): IInt64 {.compilerproc.} =

-  # XXX: to implement

-

-proc bitandI64(x, y: IInt64): IInt64 {.compilerproc.} =

-  result.hi = x.hi and y.hi

-  result.lo = x.lo and y.lo

-

-proc bitorI64(x, y: IInt64): IInt64 {.compilerproc.} =

-  result.hi = x.hi or y.hi

-  result.lo = x.lo or y.lo

-

-proc bitxorI64(x, y: IInt64): IInt64 {.compilerproc.} =

-  result.hi = x.hi xor y.hi

-  result.lo = x.lo xor y.lo

-

-proc bitnotI64(x: IInt64): IInt64 {.compilerproc.} =

-  result.lo = not x.lo

-  result.hi = not x.hi

-

-proc shlI64(x, y: IInt64): IInt64 {.compilerproc.} =

-  # XXX: to implement

-

-proc shrI64(x, y: IInt64): IInt64 {.compilerproc.} =

-  # XXX: to implement

+#
+#
+#            Nimrod's Runtime Library
+#        (c) Copyright 2006 Andreas Rumpf
+#
+#    See the file "copying.txt", included in this
+#    distribution, for details about the copyright.
+#
+
+# 64 bit integers for platforms that don't have those
+
+type
+  IInt64 = tuple[lo, hi: int32]
+
+proc cmpI64(x, y: IInt64): int32 {.compilerproc.} =
+  result = x.hi -% y.hi
+  if result == 0: result = x.lo -% y.lo
+
+proc addI64(x, y: IInt64): IInt64 {.compilerproc.} =
+  result = x
+  result.lo = result.lo +% y.lo
+  result.hi = result.hi +% y.hi
+  if y.lo > 0 and result.lo < y.lo:
+    inc(result.hi)
+  elif y.lo < 0 and result.lo > y.lo:
+    dec(result.hi)
+
+proc subI64(x, y: IInt64): IInt64 {.compilerproc.} =
+  result = x
+  result.lo = result.lo -% y.lo
+  result.hi = result.hi -% y.hi
+  if y.lo > 0 and result.lo < y.lo:
+    inc(result.hi)
+  elif y.lo < 0 and result.lo > y.lo:
+    dec(result.hi)
+
+proc mulI64(x, y: IInt64): IInt64 {.compilerproc.} =
+  result.lo = x.lo *% y.lo
+  result.hi = y.hi *% y.hi
+  if y.lo > 0 and result.lo < y.lo:
+    inc(result.hi)
+  elif y.lo < 0 and result.lo > y.lo:
+    dec(result.hi)
+
+proc divI64(x, y: IInt64): IInt64 {.compilerproc.} =
+  # XXX: to implement
+
+proc modI64(x, y: IInt64): IInt64 {.compilerproc.} =
+  # XXX: to implement
+
+proc bitandI64(x, y: IInt64): IInt64 {.compilerproc.} =
+  result.hi = x.hi and y.hi
+  result.lo = x.lo and y.lo
+
+proc bitorI64(x, y: IInt64): IInt64 {.compilerproc.} =
+  result.hi = x.hi or y.hi
+  result.lo = x.lo or y.lo
+
+proc bitxorI64(x, y: IInt64): IInt64 {.compilerproc.} =
+  result.hi = x.hi xor y.hi
+  result.lo = x.lo xor y.lo
+
+proc bitnotI64(x: IInt64): IInt64 {.compilerproc.} =
+  result.lo = not x.lo
+  result.hi = not x.hi
+
+proc shlI64(x, y: IInt64): IInt64 {.compilerproc.} =
+  # XXX: to implement
+
+proc shrI64(x, y: IInt64): IInt64 {.compilerproc.} =
+  # XXX: to implement
diff --git a/lib/lexbase.nim b/lib/lexbase.nim
index d2522359f..ea9a61821 100644
--- a/lib/lexbase.nim
+++ b/lib/lexbase.nim
@@ -1,186 +1,167 @@
-#

-#

-#           The Nimrod Compiler

-#        (c) Copyright 2008 Andreas Rumpf

-#

-#    See the file "copying.txt", included in this

-#    distribution, for details about the copyright.

-#

-

-## This module implements a base object of a lexer with efficient buffer

-## handling. In fact I believe that this is the most efficient method of

-## buffer handling that exists! Only at line endings checks are necessary

-## if the buffer needs refilling.

-

-import 

-  strutils

-

-const 

-  EndOfFile* = '\0'           ## end of file marker

-                              # A little picture makes everything clear :-)

-                              #  buf:

-                              #  "Example Text\n ha!"   bufLen = 17

-                              #   ^pos = 0     ^ sentinel = 12

-                              #

-  NewLines* = {'\c', '\L'}

-

-type 

-  TBaseLexer* = object of TObject ## the base lexer. Inherit your lexer from

-                                  ## this object.

-    bufpos*: int              ## the current position within the buffer

-    buf*: cstring             ## the buffer itself

-    bufLen*: int              ## length of buffer in characters

-    f*: tfile                 ## the file that is read

-    LineNumber*: int          ## the current line number

-    sentinel: int

-    lineStart: int            # index of last line start in buffer

-    fileOpened: bool

-

-proc initBaseLexer*(L: var TBaseLexer, filename: string, bufLen: int = 8192): bool

-  ## inits the TBaseLexer object with a file to scan

-

-proc initBaseLexerFromBuffer*(L: var TBaseLexer, buffer: string)

-  ## inits the TBaseLexer with a buffer to scan

-

-proc deinitBaseLexer*(L: var TBaseLexer)

-  ## deinitializes the base lexer. This needs to be called to close the file.

-

-proc getCurrentLine*(L: TBaseLexer, marker: bool = true): string

-  ## retrieves the current line. 

-

-proc getColNumber*(L: TBaseLexer, pos: int): int

-  ## retrieves the current column. 

-  

-proc HandleCR*(L: var TBaseLexer, pos: int): int

-  ## Call this if you scanned over '\c' in the buffer; it returns the the

-  ## position to continue the scanning from. `pos` must be the position

-  ## of the '\c'.

-proc HandleLF*(L: var TBaseLexer, pos: int): int

-  ## Call this if you scanned over '\L' in the buffer; it returns the the

-  ## position to continue the scanning from. `pos` must be the position

-  ## of the '\L'.

-  

-# implementation

-

-const 

-  chrSize = sizeof(char)

-

-proc deinitBaseLexer(L: var TBaseLexer) = 

-  dealloc(L.buf)

-  if L.fileOpened: closeFile(L.f)

-  

-proc FillBuffer(L: var TBaseLexer) = 

-  var 

-    charsRead, toCopy, s: int # all are in characters,

-                              # not bytes (in case this

-                              # is not the same)

-    oldBufLen: int

-  # we know here that pos == L.sentinel, but not if this proc

-  # is called the first time by initBaseLexer()

-  assert(L.sentinel < L.bufLen)

-  toCopy = L.BufLen - L.sentinel - 1

-  assert(toCopy >= 0)

-  if toCopy > 0: 

-    MoveMem(L.buf, addr(L.buf[L.sentinel + 1]), toCopy * chrSize) # "moveMem" handles overlapping regions

-  charsRead = ReadBuffer(L.f, addr(L.buf[toCopy]), (L.sentinel + 1) * chrSize) div

-      chrSize

-  s = toCopy + charsRead

-  if charsRead < L.sentinel + 1: 

-    L.buf[s] = EndOfFile      # set end marker

-    L.sentinel = s

-  else: 

-    # compute sentinel:

-    dec(s)                    # BUGFIX (valgrind)

-    while true: 

-      assert(s < L.bufLen)

-      while (s >= 0) and not (L.buf[s] in NewLines): Dec(s)

-      if s >= 0: 

-        # we found an appropriate character for a sentinel:

-        L.sentinel = s

-        break 

-      else: 

-        # rather than to give up here because the line is too long,

-        # double the buffer's size and try again:

-        oldBufLen = L.BufLen

-        L.bufLen = L.BufLen * 2

-        L.buf = cast[cstring](realloc(L.buf, L.bufLen * chrSize))

-        assert(L.bufLen - oldBuflen == oldBufLen)

-        charsRead = ReadBuffer(L.f, addr(L.buf[oldBufLen]), oldBufLen * chrSize) div

-            chrSize

-        if charsRead < oldBufLen: 

-          L.buf[oldBufLen + charsRead] = EndOfFile

-          L.sentinel = oldBufLen + charsRead

-          break 

-        s = L.bufLen - 1

-

-proc fillBaseLexer(L: var TBaseLexer, pos: int): int = 

-  assert(pos <= L.sentinel)

-  if pos < L.sentinel: 

-    result = pos + 1          # nothing to do

-  else: 

-    fillBuffer(L)

-    L.bufpos = 0              # XXX: is this really correct?

-    result = 0

-  L.lineStart = result

-

-proc HandleCR(L: var TBaseLexer, pos: int): int = 

-  assert(L.buf[pos] == '\c')

-  inc(L.linenumber)

-  result = fillBaseLexer(L, pos)

-  if L.buf[result] == '\L': 

-    result = fillBaseLexer(L, result)

-

-proc HandleLF(L: var TBaseLexer, pos: int): int = 

-  assert(L.buf[pos] == '\L')

-  inc(L.linenumber)

-  result = fillBaseLexer(L, pos) #L.lastNL := result-1; // BUGFIX: was: result;

-  

-proc skip_UTF_8_BOM(L: var TBaseLexer) = 

-  if (L.buf[0] == '\xEF') and (L.buf[1] == '\xBB') and (L.buf[2] == '\xBF'): 

-    inc(L.bufpos, 3)

-    inc(L.lineStart, 3)

-

-proc initBaseLexer(L: var TBaseLexer, filename: string, bufLen: int = 8192): bool = 

-  assert(bufLen > 0)

-  L.bufpos = 0

-  L.bufLen = bufLen

-  L.buf = cast[cstring](alloc(bufLen * chrSize))

-  L.sentinel = bufLen - 1

-  L.lineStart = 0

-  L.linenumber = 1            # lines start at 1

-  L.fileOpened = openFile(L.f, filename)

-  result = L.fileOpened

-  if result: 

-    fillBuffer(L)

-    skip_UTF_8_BOM(L)

-

-proc initBaseLexerFromBuffer(L: var TBaseLexer, buffer: string) = 

-  L.bufpos = 0

-  L.bufLen = len(buffer) + 1

-  L.buf = cast[cstring](alloc(L.bufLen * chrSize))

-  L.sentinel = L.bufLen - 1

-  L.lineStart = 0

-  L.linenumber = 1            # lines start at 1

-  L.fileOpened = false

-  if L.bufLen > 0: 

-    copyMem(L.buf, cast[pointer](buffer), L.bufLen)

-    L.buf[L.bufLen - 1] = EndOfFile

-  else: 

-    L.buf[0] = EndOfFile

-  skip_UTF_8_BOM(L)

-

-proc getColNumber(L: TBaseLexer, pos: int): int = 

-  result = pos - L.lineStart

-  assert(result >= 0)

-

-proc getCurrentLine(L: TBaseLexer, marker: bool = true): string = 

-  var i: int

-  result = ""

-  i = L.lineStart

-  while not (L.buf[i] in {'\c', '\L', EndOfFile}): 

-    add(result, L.buf[i])

-    inc(i)

-  add(result, "\n")

-  if marker: 

-    add(result, RepeatChar(getColNumber(L, L.bufpos)) & "^\n")

-  

+#
+#
+#           The Nimrod Compiler
+#        (c) Copyright 2008 Andreas Rumpf
+#
+#    See the file "copying.txt", included in this
+#    distribution, for details about the copyright.
+#
+
+## This module implements a base object of a lexer with efficient buffer
+## handling. Only at line endings checks are necessary if the buffer
+## needs refilling.
+
+import
+  strutils, streams
+
+const
+  EndOfFile* = '\0'           ## end of file marker
+  NewLines* = {'\c', '\L'}
+
+# Buffer handling:
+#  buf:
+#  "Example Text\n ha!"   bufLen = 17
+#   ^pos = 0     ^ sentinel = 12
+#
+
+type
+  TBaseLexer* = object of TObject ## the base lexer. Inherit your lexer from
+                                  ## this object.
+    bufpos*: int              ## the current position within the buffer
+    buf*: cstring             ## the buffer itself
+    bufLen*: int              ## length of buffer in characters
+    input: PStream            ## the input stream
+    LineNumber*: int          ## the current line number
+    sentinel: int
+    lineStart: int            # index of last line start in buffer
+    fileOpened: bool
+
+proc open*(L: var TBaseLexer, input: PStream, bufLen: int = 8192)
+  ## inits the TBaseLexer with a stream to read from
+
+proc close*(L: var TBaseLexer)
+  ## closes the base lexer. This closes `L`'s associated stream too.
+
+proc getCurrentLine*(L: TBaseLexer, marker: bool = true): string
+  ## retrieves the current line.
+
+proc getColNumber*(L: TBaseLexer, pos: int): int
+  ## retrieves the current column.
+
+proc HandleCR*(L: var TBaseLexer, pos: int): int
+  ## Call this if you scanned over '\c' in the buffer; it returns the the
+  ## position to continue the scanning from. `pos` must be the position
+  ## of the '\c'.
+proc HandleLF*(L: var TBaseLexer, pos: int): int
+  ## Call this if you scanned over '\L' in the buffer; it returns the the
+  ## position to continue the scanning from. `pos` must be the position
+  ## of the '\L'.
+
+# implementation
+
+const
+  chrSize = sizeof(char)
+
+proc close(L: var TBaseLexer) =
+  dealloc(L.buf)
+  L.input.close(L.input)
+
+proc FillBuffer(L: var TBaseLexer) =
+  var
+    charsRead, toCopy, s: int # all are in characters,
+                              # not bytes (in case this
+                              # is not the same)
+    oldBufLen: int
+  # we know here that pos == L.sentinel, but not if this proc
+  # is called the first time by initBaseLexer()
+  assert(L.sentinel < L.bufLen)
+  toCopy = L.BufLen - L.sentinel - 1
+  assert(toCopy >= 0)
+  if toCopy > 0:
+    MoveMem(L.buf, addr(L.buf[L.sentinel + 1]), toCopy * chrSize) # "moveMem" handles overlapping regions
+  charsRead = L.input.readData(L.input, addr(L.buf[toCopy]),
+                               (L.sentinel + 1) * chrSize) div chrSize
+  s = toCopy + charsRead
+  if charsRead < L.sentinel + 1:
+    L.buf[s] = EndOfFile      # set end marker
+    L.sentinel = s
+  else:
+    # compute sentinel:
+    dec(s)                    # BUGFIX (valgrind)
+    while true:
+      assert(s < L.bufLen)
+      while (s >= 0) and not (L.buf[s] in NewLines): Dec(s)
+      if s >= 0:
+        # we found an appropriate character for a sentinel:
+        L.sentinel = s
+        break
+      else:
+        # rather than to give up here because the line is too long,
+        # double the buffer's size and try again:
+        oldBufLen = L.BufLen
+        L.bufLen = L.BufLen * 2
+        L.buf = cast[cstring](realloc(L.buf, L.bufLen * chrSize))
+        assert(L.bufLen - oldBuflen == oldBufLen)
+        charsRead = L.input.ReadData(L.input, addr(L.buf[oldBufLen]),
+                                     oldBufLen * chrSize) div chrSize
+        if charsRead < oldBufLen:
+          L.buf[oldBufLen + charsRead] = EndOfFile
+          L.sentinel = oldBufLen + charsRead
+          break
+        s = L.bufLen - 1
+
+proc fillBaseLexer(L: var TBaseLexer, pos: int): int =
+  assert(pos <= L.sentinel)
+  if pos < L.sentinel:
+    result = pos + 1          # nothing to do
+  else:
+    fillBuffer(L)
+    L.bufpos = 0              # XXX: is this really correct?
+    result = 0
+  L.lineStart = result
+
+proc HandleCR(L: var TBaseLexer, pos: int): int =
+  assert(L.buf[pos] == '\c')
+  inc(L.linenumber)
+  result = fillBaseLexer(L, pos)
+  if L.buf[result] == '\L':
+    result = fillBaseLexer(L, result)
+
+proc HandleLF(L: var TBaseLexer, pos: int): int =
+  assert(L.buf[pos] == '\L')
+  inc(L.linenumber)
+  result = fillBaseLexer(L, pos) #L.lastNL := result-1; // BUGFIX: was: result;
+
+proc skip_UTF_8_BOM(L: var TBaseLexer) =
+  if (L.buf[0] == '\xEF') and (L.buf[1] == '\xBB') and (L.buf[2] == '\xBF'):
+    inc(L.bufpos, 3)
+    inc(L.lineStart, 3)
+
+proc open(L: var TBaseLexer, input: PStream, bufLen: int = 8192) =
+  assert(bufLen > 0)
+  assert(input != nil)
+  L.input = input
+  L.bufpos = 0
+  L.bufLen = bufLen
+  L.buf = cast[cstring](alloc(bufLen * chrSize))
+  L.sentinel = bufLen - 1
+  L.lineStart = 0
+  L.linenumber = 1            # lines start at 1
+  fillBuffer(L)
+  skip_UTF_8_BOM(L)
+
+proc getColNumber(L: TBaseLexer, pos: int): int =
+  result = pos - L.lineStart
+  assert(result >= 0)
+
+proc getCurrentLine(L: TBaseLexer, marker: bool = true): string =
+  var i: int
+  result = ""
+  i = L.lineStart
+  while not (L.buf[i] in {'\c', '\L', EndOfFile}):
+    add(result, L.buf[i])
+    inc(i)
+  add(result, "\n")
+  if marker:
+    add(result, RepeatChar(getColNumber(L, L.bufpos)) & "^\n")
+
diff --git a/lib/macros.nim b/lib/macros.nim
index af5e0d17d..809531c4c 100644
--- a/lib/macros.nim
+++ b/lib/macros.nim
@@ -1,176 +1,175 @@
-#
-#
-#            Nimrod's Runtime Library
-#        (c) Copyright 2008 Andreas Rumpf
-#
-#    See the file "copying.txt", included in this
-#    distribution, for details about the copyright.
-#
-
-
-## This module contains the interface to the compiler's abstract syntax tree.
-## Abstract syntax trees should be modified in macros.
-
-#[[[cog
-#def toEnum(name, elems, prefix):
-#  body = ""
-#  counter = 0
-#  for e in elems:
-#    if counter % 4 == 0: p = "\n    "
-#    else: p = ""
-#    body += p + prefix + e[2:] + ', '
-#    counter += 1
-#
-#  return "  TNimrod%s* = enum%s\n  TNim%ss* = set[TNimrod%s]\n" \
-#            % (name, body.rstrip(", "), name, name)
-#
-#enums = eval(file("data/ast.yml").read())
-#cog.out("type\n")
-#i = 0
-#for key, val in enums.iteritems():
-#  if key.endswith("Flag"): continue
-#  cog.out(toEnum(key, val, ["nnk", "nty", "nsk"][i]))
-#  i += 1
-#]]]
-type
-  TNimrodNodeKind* = enum
-    nnkNone, nnkEmpty, nnkIdent, nnkSym, 
-    nnkType, nnkCharLit, nnkIntLit, nnkInt8Lit, 
-    nnkInt16Lit, nnkInt32Lit, nnkInt64Lit, nnkFloatLit, 
-    nnkFloat32Lit, nnkFloat64Lit, nnkStrLit, nnkRStrLit, 
-    nnkTripleStrLit, nnkMetaNode, nnkNilLit, nnkDotCall, 
-    nnkCommand, nnkCall, nnkGenericCall, nnkExplicitTypeListCall, 
-    nnkExprEqExpr, nnkExprColonExpr, nnkIdentDefs, nnkInfix, 
-    nnkPrefix, nnkPostfix, nnkPar, nnkCurly, 
-    nnkBracket, nnkBracketExpr, nnkPragmaExpr, nnkRange, 
-    nnkDotExpr, nnkCheckedFieldExpr, nnkDerefExpr, nnkIfExpr, 
-    nnkElifExpr, nnkElseExpr, nnkLambda, nnkAccQuoted, 
-    nnkHeaderQuoted, nnkTableConstr, nnkQualified, nnkHiddenStdConv, 
-    nnkHiddenSubConv, nnkHiddenCallConv, nnkConv, nnkCast, 
-    nnkAddr, nnkHiddenAddr, nnkHiddenDeref, nnkObjDownConv, 
-    nnkObjUpConv, nnkChckRangeF, nnkChckRange64, nnkChckRange, 
-    nnkStringToCString, nnkCStringToString, nnkPassAsOpenArray, nnkAsgn, 
-    nnkDefaultTypeParam, nnkGenericParams, nnkFormalParams, nnkOfInherit, 
-    nnkModule, nnkProcDef, nnkConverterDef, nnkMacroDef, 
-    nnkTemplateDef, nnkIteratorDef, nnkOfBranch, nnkElifBranch, 
-    nnkExceptBranch, nnkElse, nnkMacroStmt, nnkAsmStmt, 
-    nnkPragma, nnkIfStmt, nnkWhenStmt, nnkForStmt, 
-    nnkWhileStmt, nnkCaseStmt, nnkVarSection, nnkConstSection, 
-    nnkConstDef, nnkTypeSection, nnkTypeDef, nnkYieldStmt, 
-    nnkTryStmt, nnkFinally, nnkRaiseStmt, nnkReturnStmt, 
-    nnkBreakStmt, nnkContinueStmt, nnkBlockStmt, nnkDiscardStmt, 
-    nnkStmtList, nnkImportStmt, nnkFromStmt, nnkImportAs, 
-    nnkIncludeStmt, nnkAccessStmt, nnkCommentStmt, nnkStmtListExpr, 
-    nnkBlockExpr, nnkVm, nnkTypeOfExpr, nnkObjectTy, 
-    nnkTupleTy, nnkRecList, nnkRecCase, nnkRecWhen, 
-    nnkRefTy, nnkPtrTy, nnkVarTy, nnkProcTy, 
-    nnkEnumTy, nnkEnumFieldDef, nnkReturnToken
-  TNimNodeKinds* = set[TNimrodNodeKind]
-  TNimrodTypeKind* = enum
-    ntyNone, ntyBool, ntyChar, ntyEmptySet, 
-    ntyArrayConstr, ntyNil, ntyGeneric, ntyGenericInst, 
-    ntyGenericParam, ntyEnum, ntyAnyEnum, ntyArray, 
-    ntyObject, ntyTuple, ntySet, ntyRange, 
-    ntyPtr, ntyRef, ntyVar, ntySequence, 
-    ntyProc, ntyPointer, ntyOpenArray, ntyString, 
-    ntyCString, ntyForward, ntyInt, ntyInt8, 
-    ntyInt16, ntyInt32, ntyInt64, ntyFloat, 
-    ntyFloat32, ntyFloat64, ntyFloat128
-  TNimTypeKinds* = set[TNimrodTypeKind]
-  TNimrodSymKind* = enum
-    nskUnknownSym, nskConditional, nskDynLib, nskParam, 
-    nskTypeParam, nskTemp, nskType, nskConst, 
-    nskVar, nskProc, nskIterator, nskConverter, 
-    nskMacro, nskTemplate, nskField, nskEnumField, 
-    nskForVar, nskModule, nskLabel
-  TNimSymKinds* = set[TNimrodSymKind]
-#[[[end]]]
-
-type
-  TNimrodNode {.final.} = object   # hidden
-  TNimrodSymbol {.final.} = object # hidden
-  TNimrodType {.final.} = object   # hidden
-  PNimrodType* {.compilerproc.} = ref TNimrodType
-  PNimrodSymbol* {.compilerproc.} = ref TNimrodSymbol
-  PNimrodNode* {.compilerproc.} = ref TNimrodNode
-  expr* = PNimrodNode
-  stmt* = PNimrodNode
-
-# Nodes should be reference counted to make the `copy` operation very fast!
-# However, this is difficult to achieve: modify(n[0][1]) should propagate to
-# its father. How to do this without back references?
-
-proc `[]`* (n: PNimrodNode, i: int): PNimrodNode {.magic: "NChild".}
-proc `[]=`* (n: PNimrodNode, i: int, child: PNimrodNode) {.magic: "NSetChild".}
-  ## provide access to `n`'s children
-
-type
-  TNimrodIdent = object of TObject
-
-converter StrToIdent*(s: string): TNimrodIdent {.magic: "StrToIdent".}
-proc `$`*(i: TNimrodIdent): string {.magic: "IdentToStr".}
-proc `==`* (a, b: TNimrodIdent): bool {.magic: "EqIdent".}
-
-proc len*(n: PNimrodNode): int {.magic: "NLen".}
-
-## 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".}
-proc del*(father: PNimrodNode, idx = 0, n = 1) {.magic: "NDel".}
-proc kind*(n: PNimrodNode): TNimrodNodeKind {.magic: "NKind".}
-
-proc intVal*(n: PNimrodNode): biggestInt {.magic: "NIntVal".}
-proc floatVal*(n: PNimrodNode): biggestFloat {.magic: "NFloatVal".}
-proc symbol*(n: PNimrodNode): PNimrodSymbol {.magic: "NSymbol".}
-proc ident*(n: PNimrodNode): TNimrodIdent {.magic: "NIdent".}
-proc typ*(n: PNimrodNode): PNimrodType {.magic: "NGetType".}
-proc strVal*(n: PNimrodNode): string  {.magic: "NStrVal".}
-
-proc `intVal=`*(n: PNimrodNode, val: biggestInt) {.magic: "NSetIntVal".}
-proc `floatVal=`*(n: PNimrodNode, val: biggestFloat) {.magic: "NSetFloatVal".}
-proc `symbol=`*(n: PNimrodNode, val: PNimrodSymbol) {.magic: "NSetSymbol".}
-proc `ident=`*(n: PNimrodNode, val: TNimrodIdent) {.magic: "NSetIdent".}
-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".}
-proc copyNimNode*(n: PNimrodNode): PNimrodNode {.magic: "NCopyNimNode".}
-proc copyNimTree*(n: PNimrodNode): PNimrodNode {.magic: "NCopyNimTree".}
-
-proc error*(msg: string) {.magic: "NError".}
-proc warning*(msg: string) {.magic: "NWarning".}
-proc hint*(msg: string) {.magic: "NHint".}
-
-proc newStrLitNode*(s: string): PNimrodNode {.nodecl.} = 
-  result = newNimNode(nnkStrLit)
-  result.strVal = s
-
-proc newIntLitNode*(i: biggestInt): PNimrodNode {.nodecl.} = 
-  result = newNimNode(nnkIntLit)
-  result.intVal = i
-
-proc newIntLitNode*(f: biggestFloat): PNimrodNode {.nodecl.} = 
-  result = newNimNode(nnkFloatLit)
-  result.floatVal = f
-
-proc newIdentNode*(i: TNimrodIdent): PNimrodNode {.nodecl.} = 
-  result = newNimNode(nnkIdent)
-  result.ident = i
-
-proc toStrLit*(n: PNimrodNode): PNimrodNode {.nodecl.} = 
-  return newStrLitNode(repr(n))
-
-proc expectKind*(n: PNimrodNode, k: TNimrodNodeKind) {.nodecl.} =
-  if n.kind != k: error("macro expects a node of kind: " & repr(k))
-
-proc expectMinLen*(n: PNimrodNode, min: int) {.nodecl.} =
-  if n.len < min: error("macro expects a node with " & $min & " children")
-
-proc newCall*(theProc: TNimrodIdent,
-              args: openArray[PNimrodNode]): PNimrodNode {.nodecl.} =
-  ## 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)
+#

+#

+#            Nimrod's Runtime Library

+#        (c) Copyright 2008 Andreas Rumpf

+#

+#    See the file "copying.txt", included in this

+#    distribution, for details about the copyright.

+#

+

+

+## This module contains the interface to the compiler's abstract syntax tree.

+## Abstract syntax trees should be modified in macros.

+

+#[[[cog

+#def toEnum(name, elems):

+#  body = ""

+#  counter = 0

+#  for e in elems:

+#    if counter % 4 == 0: p = "\n    "

+#    else: p = ""

+#    body = body + p + 'n' + e + ', '

+#    counter = counter + 1

+#

+#  return ("  TNimrod%s* = enum%s\n  TNim%ss* = set[TNimrod%s]\n" %

+#            (name, body[:-2], name, name))

+#

+#enums = eval(open("data/ast.yml").read())

+#cog.out("type\n")

+#for key, val in enums.items():

+#  if key[-4:] == "Flag": continue

+#  cog.out(toEnum(key, val))

+#]]]

+type

+  TNimrodTypeKind* = enum

+    ntyNone, ntyBool, ntyChar, ntyEmpty, 

+    ntyArrayConstr, ntyNil, ntyGeneric, ntyGenericInst, 

+    ntyGenericParam, ntyEnum, ntyAnyEnum, ntyArray, 

+    ntyObject, ntyTuple, ntySet, ntyRange, 

+    ntyPtr, ntyRef, ntyVar, ntySequence, 

+    ntyProc, ntyPointer, ntyOpenArray, ntyString, 

+    ntyCString, ntyForward, ntyInt, ntyInt8, 

+    ntyInt16, ntyInt32, ntyInt64, ntyFloat, 

+    ntyFloat32, ntyFloat64, ntyFloat128

+  TNimTypeKinds* = set[TNimrodTypeKind]

+  TNimrodSymKind* = enum

+    nskUnknownSym, nskConditional, nskDynLib, nskParam, 

+    nskTypeParam, nskTemp, nskType, nskConst, 

+    nskVar, nskProc, nskIterator, nskConverter, 

+    nskMacro, nskTemplate, nskField, nskEnumField, 

+    nskForVar, nskModule, nskLabel, nskStub

+  TNimSymKinds* = set[TNimrodSymKind]

+  TNimrodNodeKind* = enum

+    nnkNone, nnkEmpty, nnkIdent, nnkSym, 

+    nnkType, nnkCharLit, nnkIntLit, nnkInt8Lit, 

+    nnkInt16Lit, nnkInt32Lit, nnkInt64Lit, nnkFloatLit, 

+    nnkFloat32Lit, nnkFloat64Lit, nnkStrLit, nnkRStrLit, 

+    nnkTripleStrLit, nnkMetaNode, nnkNilLit, nnkDotCall, 

+    nnkCommand, nnkCall, nnkGenericCall, nnkExplicitTypeListCall, 

+    nnkExprEqExpr, nnkExprColonExpr, nnkIdentDefs, nnkInfix, 

+    nnkPrefix, nnkPostfix, nnkPar, nnkCurly, 

+    nnkBracket, nnkBracketExpr, nnkPragmaExpr, nnkRange, 

+    nnkDotExpr, nnkCheckedFieldExpr, nnkDerefExpr, nnkIfExpr, 

+    nnkElifExpr, nnkElseExpr, nnkLambda, nnkAccQuoted, 

+    nnkHeaderQuoted, nnkTableConstr, nnkQualified, nnkHiddenStdConv, 

+    nnkHiddenSubConv, nnkHiddenCallConv, nnkConv, nnkCast, 

+    nnkAddr, nnkHiddenAddr, nnkHiddenDeref, nnkObjDownConv, 

+    nnkObjUpConv, nnkChckRangeF, nnkChckRange64, nnkChckRange, 

+    nnkStringToCString, nnkCStringToString, nnkPassAsOpenArray, nnkAsgn, 

+    nnkDefaultTypeParam, nnkGenericParams, nnkFormalParams, nnkOfInherit, 

+    nnkModule, nnkProcDef, nnkConverterDef, nnkMacroDef, 

+    nnkTemplateDef, nnkIteratorDef, nnkOfBranch, nnkElifBranch, 

+    nnkExceptBranch, nnkElse, nnkMacroStmt, nnkAsmStmt, 

+    nnkPragma, nnkIfStmt, nnkWhenStmt, nnkForStmt, 

+    nnkWhileStmt, nnkCaseStmt, nnkVarSection, nnkConstSection, 

+    nnkConstDef, nnkTypeSection, 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

+  TNimNodeKinds* = set[TNimrodNodeKind]

+#[[[end]]]

+

+type

+  TNimrodNode {.final.} = object   # hidden

+  TNimrodSymbol {.final.} = object # hidden

+  TNimrodType {.final.} = object   # hidden

+  PNimrodType* {.compilerproc.} = ref TNimrodType

+  PNimrodSymbol* {.compilerproc.} = ref TNimrodSymbol

+  PNimrodNode* {.compilerproc.} = ref TNimrodNode

+  expr* = PNimrodNode

+  stmt* = PNimrodNode

+

+# Nodes should be reference counted to make the `copy` operation very fast!

+# However, this is difficult to achieve: modify(n[0][1]) should propagate to

+# its father. How to do this without back references?

+

+proc `[]`* (n: PNimrodNode, i: int): PNimrodNode {.magic: "NChild".}

+proc `[]=`* (n: PNimrodNode, i: int, child: PNimrodNode) {.magic: "NSetChild".}

+  ## provide access to `n`'s children

+

+type

+  TNimrodIdent = object of TObject

+

+converter StrToIdent*(s: string): TNimrodIdent {.magic: "StrToIdent".}

+proc `$`*(i: TNimrodIdent): string {.magic: "IdentToStr".}

+proc `==`* (a, b: TNimrodIdent): bool {.magic: "EqIdent".}

+

+proc len*(n: PNimrodNode): int {.magic: "NLen".}

+

+## 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".}

+proc del*(father: PNimrodNode, idx = 0, n = 1) {.magic: "NDel".}

+proc kind*(n: PNimrodNode): TNimrodNodeKind {.magic: "NKind".}

+

+proc intVal*(n: PNimrodNode): biggestInt {.magic: "NIntVal".}

+proc floatVal*(n: PNimrodNode): biggestFloat {.magic: "NFloatVal".}

+proc symbol*(n: PNimrodNode): PNimrodSymbol {.magic: "NSymbol".}

+proc ident*(n: PNimrodNode): TNimrodIdent {.magic: "NIdent".}

+proc typ*(n: PNimrodNode): PNimrodType {.magic: "NGetType".}

+proc strVal*(n: PNimrodNode): string  {.magic: "NStrVal".}

+

+proc `intVal=`*(n: PNimrodNode, val: biggestInt) {.magic: "NSetIntVal".}

+proc `floatVal=`*(n: PNimrodNode, val: biggestFloat) {.magic: "NSetFloatVal".}

+proc `symbol=`*(n: PNimrodNode, val: PNimrodSymbol) {.magic: "NSetSymbol".}

+proc `ident=`*(n: PNimrodNode, val: TNimrodIdent) {.magic: "NSetIdent".}

+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".}

+proc copyNimNode*(n: PNimrodNode): PNimrodNode {.magic: "NCopyNimNode".}

+proc copyNimTree*(n: PNimrodNode): PNimrodNode {.magic: "NCopyNimTree".}

+

+proc error*(msg: string) {.magic: "NError".}

+proc warning*(msg: string) {.magic: "NWarning".}

+proc hint*(msg: string) {.magic: "NHint".}

+

+proc newStrLitNode*(s: string): PNimrodNode {.compileTime.} =

+  result = newNimNode(nnkStrLit)

+  result.strVal = s

+

+proc newIntLitNode*(i: biggestInt): PNimrodNode {.compileTime.} =

+  result = newNimNode(nnkIntLit)

+  result.intVal = i

+

+proc newIntLitNode*(f: biggestFloat): PNimrodNode {.compileTime.} =

+  result = newNimNode(nnkFloatLit)

+  result.floatVal = f

+

+proc newIdentNode*(i: TNimrodIdent): PNimrodNode {.compileTime.} =

+  result = newNimNode(nnkIdent)

+  result.ident = i

+

+proc toStrLit*(n: PNimrodNode): PNimrodNode {.compileTime.} =

+  return newStrLitNode(repr(n))

+

+proc expectKind*(n: PNimrodNode, k: TNimrodNodeKind) {.compileTime.} =

+  if n.kind != k: error("macro expects a node of kind: " & repr(k))

+

+proc expectMinLen*(n: PNimrodNode, min: int) {.compileTime.} =

+  if n.len < min: error("macro expects a node with " & $min & " 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)

diff --git a/lib/math.nim b/lib/math.nim
index aff5815ce..57c1c7e3d 100644
--- a/lib/math.nim
+++ b/lib/math.nim
@@ -18,6 +18,10 @@
 when defined(Posix): 
   {.passl: "-lm".}
 
+const
+  PI* = 3.1415926535897932384626433 ## the circle constant PI (Ludolph's number)
+  E* = 2.71828182845904523536028747 ## Euler's number
+
 type
   TFloatClass* = enum ## describes the class a floating point value belongs to.
                       ## This is the type that is returned by `classify`.
@@ -35,7 +39,7 @@ proc classify*(x: float): TFloatClass =
     
   # ECMAScript and most C compilers have no classify:
   if x == 0.0:
-    if 1.0/x == 1.0/0.0:
+    if 1.0/x == Inf:
       return fcZero
     else:
       return fcNegZero
@@ -129,7 +133,7 @@ when not defined(ECMAScript):
   proc rand(): cint {.importc: "rand", nodecl.}
     
   proc randomize() = srand(gettime(nil))
-  proc random(max: int): int = return rand() mod max
+  proc random(max: int): int = return int(rand()) mod max
 
 else:  
   proc mathrandom(): float {.importc: "Math.random", nodecl.}
diff --git a/lib/memman.nim b/lib/memman.nim
index 81919389b..e8ebcd61c 100644
--- a/lib/memman.nim
+++ b/lib/memman.nim
@@ -164,7 +164,7 @@ else:
 # the fact that the OS is likely to give us pages with contingous numbers. 
 # A page contains either small fixed size objects of the same size or 
 # variable length objects. An object's size is always aligned at 16 byte
-# boundry. Huge objects are dealt with the TLSF algorithm. 
+# boundary. Huge objects are dealt with the TLSF algorithm. 
 # The design supports iterating over any object in a fast way. 
 
 # A bitset contains any page that starts an allocated page. The page may be
@@ -230,6 +230,7 @@ type
     zct: TCellArray
     stackCells: TCellArray
     smallBlocks: array [PageSize div MemAlign, ptr TPageDesc]
+    freeLists: array [PageSize div MemAlign, ptr TFreeList]
     pages: TPageManager
     usedPages: TPageList
     freePages: TPageList
@@ -237,6 +238,11 @@ type
 # small blocks: 
 proc allocSmall(var h: TGcHeap, size: int): pointer = 
   var s = align(size)
+  var f = h.freeLists[s]
+  if f != nil: 
+    f.prev = f.next # remove from list
+    f.next.prev = f.prev
+    return f
   var p = h.smallBlocks[s]
   if p == nil or p.free == nil:
     p = newSmallBlock(s, p)
diff --git a/lib/nimbase.h b/lib/nimbase.h
index 8d7c287e0..f7e41f2b1 100644
--- a/lib/nimbase.h
+++ b/lib/nimbase.h
@@ -10,6 +10,8 @@
 #ifndef NIMBASE_H
 #define NIMBASE_H
 
+#include  <math.h>
+
 /* calling convention mess ----------------------------------------------- */
 #if defined(__GNUC__) || defined(__LCC__) || defined(__POCC__) \
                       || defined(__TINYC__)
@@ -37,12 +39,16 @@
 
 #if defined(__POCC__)
 #  define NIM_CONST /* PCC is really picky with const modifiers */
+#  undef _MSC_VER /* Yeah, right PCC defines _MSC_VER even if it is
+                     not that compatible. Well done. */
 #elif defined(__cplusplus)
 #  define NIM_CONST /* C++ is picky with const modifiers */
 #else
 #  define NIM_CONST  const
 #endif
 
+#define NIM_THREADVAR __thread
+
 /* --------------- how int64 constants should be declared: ----------- */
 #if defined(__GNUC__) || defined(__LCC__) || \
     defined(__POCC__) || defined(__DMC__)
@@ -51,6 +57,14 @@
 #  define IL64(x) x
 #endif
 
+/* ---------------- casting without correct aliasing rules ----------- */
+
+#if defined(__GNUCC__)
+#  define NIM_CAST(type, ptr) (((union{type __x__;}*)(ptr))->__x__)
+#else
+#  define NIM_CAST(type, ptr) ((type)(ptr))
+#endif
+
 /* ------------------------------------------------------------------- */
 
 #if defined(WIN32) || defined(_WIN32) /* only Windows has this mess... */
@@ -94,6 +108,16 @@
 #define N_CLOSURE_PTR(rettype, name) rettype (*name)
 
 
+#if defined(__GNUC__) || defined(__ICC__)
+#  define N_NOINLINE(rettype, name) rettype __attribute__((noinline)) name
+#elif defined(_MSC_VER)
+#  define N_NOINLINE(rettype, name) __declspec(noinline) rettype name
+#else
+#  define N_NOINLINE(rettype, name) rettype name
+#endif
+
+#define N_NOINLINE_PTR(rettype, name) rettype (*name)
+
 #if defined(__BORLANDC__) || defined(__WATCOMC__) || \
     defined(__POCC__) || defined(_MSC_VER)
 /* these compilers have a fastcall so use it: */
@@ -164,13 +188,10 @@
 #  define  _ISOC99_SOURCE  1
 #  define  __USE_ISOC9X  1
 #  define  __USE_ISOC99  1
-#  include  <math.h>
 
 #elif (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) \
    && !defined(__BORLANDC__) && !defined(__POCC__)
 
-#  include  <math.h>
-
 /*  Win32 doesn't seem to have these functions.
 **  Therefore implement inline versions of these functions here.
 */
@@ -194,8 +215,6 @@ static N_INLINE(long int, lrintf)(float flt) {
 
 #else
 
-#  include <math.h>
-
 #  ifndef lrint
 #    define  lrint(dbl)   ((long int)(dbl))
 #  endif
@@ -214,11 +233,6 @@ static N_INLINE(long int, lrintf)(float flt) {
 #include <signal.h>
 #include <setjmp.h>
 
-#ifndef NAN
-static unsigned long nimNaN[2]={0xffffffff, 0x7fffffff};
-#  define NAN (*(double*) nimNaN)
-#endif
-
 /*
 #ifndef INF
 static unsigned long nimInf[2]={0xffffffff, 0x7fffffff};
@@ -241,8 +255,7 @@ __TINYC__
 #  define HAVE_STDINT_H
 #endif
 
-#if defined(__LCC__) || defined(__GNUC__) || defined(__DMC__) \
- || defined(__POCC__)
+#if defined(__LCC__) || defined(__DMC__) || defined(__POCC__)
 #  define HAVE_STDINT_H
 #endif
 
@@ -328,14 +341,16 @@ static N_INLINE(NI32, float32ToInt32)(float val) {
   return float64ToInt32((double)val);
 }
 
+#define float64ToInt64(x) ((NI64) (x))
+
 #define zeroMem(a, size) memset(a, 0, size)
 #define equalMem(a, b, size) (memcmp(a, b, size) == 0)
 
 #define STRING_LITERAL(name, str, length) \
   static const struct {                   \
-    NI len, space;                        \
+    TGenericSeq Sup;                      \
     NIM_CHAR data[length + 1];            \
-  } name = {length, length, str}
+  } name = {{length, length}, str}
 
 typedef struct TStringDesc* string;
 
@@ -343,7 +358,7 @@ typedef struct TStringDesc* string;
 #if defined(__GNUC__)
 #  define SEQ_DECL_SIZE /* empty is correct! */
 #else
-#  define SEQ_DECL_SIZE  1000000
+#  define SEQ_DECL_SIZE 1000000
 #endif
 
 #define ALLOC_0(size)  calloc(1, size)
@@ -352,6 +367,13 @@ typedef struct TStringDesc* string;
 #define GenericSeqSize sizeof(TGenericSeq)
 #define paramCount() cmdCount
 
+#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__i386__)
+#  ifndef NAN
+static unsigned long nimNaN[2]={0xffffffff, 0x7fffffff};
+#    define NAN (*(double*) nimNaN)
+#  endif
+#endif
+
 #ifndef NAN
 #  define NAN (0.0 / 0.0)
 #endif
@@ -399,6 +421,7 @@ struct NimException {
 };
 #endif
 
+#if 0
 typedef struct TStringDesc {
   NI len;
   NI space;
@@ -410,5 +433,6 @@ typedef struct {
 } TGenericSeq;
 
 typedef TGenericSeq* PGenericSeq;
+#endif
 
 #endif
diff --git a/lib/os.nim b/lib/os.nim
index f07045143..8ec781000 100644
--- a/lib/os.nim
+++ b/lib/os.nim
@@ -7,14 +7,12 @@
 #    distribution, for details about the copyright.
 #
 
-## Basic operating system facilities like retrieving environment variables,
-## reading command line arguments, working with directories, running shell
-## commands, etc. This module is -- like any other basic library --
-## platform independant. However, the ECMAScript target is not supported,
-## as there is no way to perform these operations in ECMAScript portably
-## or at all.
+## This module contains basic operating system facilities like
+## retrieving environment variables, reading command line arguments,
+## working with directories, running shell commands, etc.
+## This module is -- like any other basic library -- platform independant.
 
-{.push debugger:off.}
+{.push debugger: off.}
 
 import
   strutils, times
@@ -28,8 +26,9 @@ template newException(exceptn, message: expr): expr =
     e.msg = message
     e
 
-when defined(windows) or defined(OS2) or defined(DOS):
-  {.define: doslike.} # DOS-like filesystem
+const
+  doslike = defined(windows) or defined(OS2) or defined(DOS)
+    # DOS-like filesystem
 
 when defined(Nimdoc): # only for proper documentation:
   const
@@ -69,6 +68,14 @@ when defined(Nimdoc): # only for proper documentation:
       ## True if the file system is case sensitive, false otherwise. Used by
       ## `cmpPaths` to compare filenames properly.
 
+    ExeExt* = ""
+      ## The file extension of native executables. For example:
+      ## "" on UNIX, "exe" on Windows.
+
+    ScriptExt* = ""
+      ## The file extension of a script file. For example: "" on UNIX,
+      ## "bat" on Windows.
+
 elif defined(macos):
   const
     curdir* = ':'
@@ -77,6 +84,8 @@ elif defined(macos):
     altsep* = dirsep
     pathsep* = ','
     FileSystemCaseSensitive* = false
+    ExeExt* = ""
+    ScriptExt* = ""
 
   #  MacOS paths
   #  ===========
@@ -96,7 +105,7 @@ elif defined(macos):
   #  waterproof. In case of equal names the first volume found will do.
   #  Two colons "::" are the relative path to the parent. Three is to the
   #  grandparent etc.
-elif defined(doslike):
+elif doslike:
   const
     curdir* = '.'
     pardir* = ".."
@@ -104,6 +113,8 @@ elif defined(doslike):
     altsep* = '/'
     pathSep* = ';' # seperator between paths
     FileSystemCaseSensitive* = false
+    ExeExt* = "exe"
+    ScriptExt* = "bat"
 elif defined(PalmOS) or defined(MorphOS):
   const
     dirsep* = '/'
@@ -111,6 +122,8 @@ elif defined(PalmOS) or defined(MorphOS):
     PathSep* = ';'
     pardir* = ".."
     FileSystemCaseSensitive* = false
+    ExeExt* = ""
+    ScriptExt* = ""
 elif defined(RISCOS):
   const
     dirsep* = '.'
@@ -118,6 +131,8 @@ elif defined(RISCOS):
     pardir* = ".." # is this correct?
     pathSep* = ','
     FileSystemCaseSensitive* = true
+    ExeExt* = ""
+    ScriptExt* = ""
 else: # UNIX-like operating system
   const
     curdir* = '.'
@@ -126,6 +141,8 @@ else: # UNIX-like operating system
     altsep* = dirsep
     pathSep* = ':'
     FileSystemCaseSensitive* = true
+    ExeExt* = ""
+    ScriptExt* = ""
 
 const
   ExtSep* = '.'
@@ -133,26 +150,26 @@ const
     ## for example, the '.' in ``os.nim``.
 
 proc getApplicationDir*(): string {.noSideEffect.}
-  ## Gets the directory of the application's executable.
+  ## Returns the directory of the application's executable.
 
 proc getApplicationFilename*(): string {.noSideEffect.}
-  ## Gets the filename of the application's executable.
+  ## Returns the filename of the application's executable.
 
 proc getCurrentDir*(): string {.noSideEffect.}
-  ## Gets the current working directory.
+  ## Returns the current working directory.
 
 proc setCurrentDir*(newDir: string) {.inline.}
   ## Sets the current working directory; `EOS` is raised if
   ## `newDir` cannot been set.
 
 proc getHomeDir*(): string {.noSideEffect.}
-  ## Gets the home directory of the current user.
+  ## Returns the home directory of the current user.
 
 proc getConfigDir*(): string {.noSideEffect.}
-  ## Gets the config directory of the current user for applications.
+  ## Returns the config directory of the current user for applications.
 
 proc expandFilename*(filename: string): string
-  ## Returns the full path of `filename`, "" on error.
+  ## Returns the full path of `filename`, raises EOS in case of an error.
 
 proc ExistsFile*(filename: string): bool
   ## Returns true if the file exists, false otherwise.
@@ -216,13 +233,26 @@ proc SplitFilename*(filename: string, name, extension: var string) {.
   ## It the file has no extension, extention is the empty string.
 
 proc extractDir*(path: string): string {.noSideEffect.}
-  ## Extracts the directory of a given path. This is the `head`
-  ## result of `splitPath`.
+  ## Extracts the directory of a given path. This is almost the
+  ## same as the `head` result of `splitPath`, except that
+  ## ``extractDir("/usr/lib/") == "/usr/lib/"``.
 
 proc extractFilename*(path: string): string {.noSideEffect.}
-  ## Extracts the filename of a given `path`. This the the `tail`
-  ## result of `splitPath`.
-  # XXX: this is not true: /usr/lib/ --> filename should be empty!
+  ## Extracts the filename of a given `path`. This is almost the
+  ## same as the `tail` result of `splitPath`, except that
+  ## ``extractFilename("/usr/lib/") == ""``.
+
+proc extractFileExt*(filename: string): string {.noSideEffect.} =
+  ## Extracts the file extension of a given `filename`. This is the
+  ## same as the `extension` result of `splitFilename`.
+  var dummy: string
+  splitFilename(filename, dummy, result)
+
+proc extractFileTrunk*(filename: string): string {.noSideEffect.} =
+  ## Extracts the file name of a given `filename`. This removes any
+  ## directory information and the file extension.
+  var dummy: string
+  splitFilename(extractFilename(filename), result, dummy)
 
 proc cmpPaths*(pathA, pathB: string): int {.noSideEffect.}
   ## Compares two paths.
@@ -251,28 +281,23 @@ proc ChangeFileExt*(filename, ext: string): string {.noSideEffect.}
   ## filesystems may use a different character. (Although I know
   ## of none such beast.)
 
-# procs dealing with processes:
-proc executeProcess*(command: string): int
-  ## Executes a process.
-  ##
-  ## Command has the form 'program args' where args are the command
-  ## line arguments given to program. The proc returns the error code
-  ## of the process when it has finished. The proc does not return
-  ## until the process has finished.
-
 proc executeShellCommand*(command: string): int
   ## Executes a shell command.
   ##
-  ## The syntax of the command is unspecified and depends on the used
-  ## shell. The proc returns the error code of the shell when it has finished.
+  ## Command has the form 'program args' where args are the command
+  ## line arguments given to program. The proc returns the error code
+  ## of the shell when it has finished. The proc does not return until
+  ## the process has finished. To execute a program without having a
+  ## shell involved, use the `executeProcess` proc of the `osproc`
+  ## module.
 
 # procs operating on a high level for files:
 proc copyFile*(dest, source: string)
-  ## Copies a file from `dest` to `source`. If this fails,
+  ## Copies a file from `source` to `dest`. If this fails,
   ## `EOS` is raised.
 
 proc moveFile*(dest, source: string)
-  ## Moves a file from `dest` to `source`. If this fails, `EOS` is raised.
+  ## Moves a file from `source` to `dest`. If this fails, `EOS` is raised.
 
 proc removeFile*(file: string)
   ## Removes the `file`. If this fails, `EOS` is raised.
@@ -294,10 +319,10 @@ proc existsDir*(dir: string): bool
   ## is returned.
 
 proc getLastModificationTime*(file: string): TTime
-  ## Gets the time of the `file`'s last modification.
+  ## Returns the time of the `file`'s last modification.
 
 proc fileNewer*(a, b: string): bool
-  ## returns true if the file `a` is newer than file `b`, i.e. if `a`'s
+  ## Returns true if the file `a` is newer than file `b`, i.e. if `a`'s
   ## modification time is later than `b`'s.
 
 # procs dealing with environment variables:
@@ -306,7 +331,7 @@ proc putEnv*(key, val: string)
   ## If an error occurs, `EInvalidEnvVar` is raised.
 
 proc getEnv*(key: string): string
-  ## Gets the value of the environment variable named `key`.
+  ## Returns the value of the environment variable named `key`.
   ##
   ## If the variable does not exist, "" is returned. To distinguish
   ## whether a variable exists or it's value is just "", call
@@ -328,6 +353,43 @@ proc paramStr*(i: int): string
   ## `i` should be in the range `1..paramCount()`, else
   ## the `EOutOfIndex` exception is raised.
 
+when defined(windows):
+  proc GetLastError(): int32 {.importc, stdcall, dynlib: "kernel32".}
+  proc FormatMessageA(dwFlags: int32, lpSource: pointer,
+                      dwMessageId, dwLanguageId: int32,
+                      lpBuffer: pointer, nSize: int32,
+                      Arguments: pointer): int32 {.
+                      importc, stdcall, dynlib: "kernel32".}
+  proc LocalFree(p: pointer) {.importc, stdcall, dynlib: "kernel32".}
+
+var errno {.importc, header: "<errno.h>".}: cint ## error variable
+proc strerror(errnum: cint): cstring {.importc, header: "<string.h>".}
+
+proc OSError*(msg: string = "") {.noinline.} =
+  ## raises an EOS exception with the given message ``msg``.
+  ## If ``msg == ""``, the operating system's error flag
+  ## (``errno``) is converted to a readable error message. On Windows
+  ## ``GetLastError`` is checked before ``errno``.
+  ## If no error flag is set, the message ``unknown OS error`` is used.
+  if len(msg) == 0:
+    when defined(Windows):
+      var err = GetLastError()
+      if err != 0'i32:
+        # sigh, why is this is so difficult?
+        var msgbuf: cstring
+        if FormatMessageA(0x00000100 or 0x00001000 or 0x00000200,
+                          nil, err, 0, addr(msgbuf), 0, nil) != 0'i32:
+          var m = $msgbuf
+          if msgbuf != nil:
+            LocalFree(msgbuf)
+          raise newException(EOS, m)
+    if errno != 0'i32:
+      raise newException(EOS, $strerror(errno))
+    else:
+      raise newException(EOS, "unknown OS error")
+  else:
+    raise newException(EOS, msg)
+
 # implementation
 
 proc UnixToNativePath(path: string): string =
@@ -337,7 +399,7 @@ proc UnixToNativePath(path: string): string =
     var start: int
     if path[0] == '/':
       # an absolute path
-      when defined(doslike):
+      when doslike:
         result = r"C:\"
       elif defined(macos):
         result = "" # must not start with ':'
@@ -368,7 +430,7 @@ proc UnixToNativePath(path: string): string =
         add result, dirSep
         inc(i)
       else:
-        add result, $path[i]
+        add result, path[i]
         inc(i)
 
 # interface to C library:
@@ -377,7 +439,8 @@ const
   cunder = if defined(pcc): "_" else: ""
 
 type
-  TStat {.importc: "struct " & cunder & "stat", final.} = object
+  TStat {.importc: "struct " & cunder & "stat",
+          header: "<sys/stat.h>", pure.} = object
     st_dev: int16
     st_ino: int16
     st_mode: int16
@@ -390,60 +453,56 @@ type
     st_mtime: TTime
     st_ctime: TTime
 
-var
-  errno {.importc: "errno", header: "<errno.h>".}: cint
-  EEXIST {.importc: "EEXIST", header: "<errno.h>".}: cint
 
 when defined(unix):
-  const dirHeader = "<sys/stat.h>"
-elif defined(windows):
-  const dirHeader = "<direct.h>"
-else:
-  {.error: "os library not ported to your OS. Please help!".}
-
-
-proc chdir(path: CString): cint {.
-  importc: cunder & "chdir", header: dirHeader.}
+  var
+    EEXIST {.importc: "EEXIST", header: "<errno.h>".}: cint
 
-when defined(unix):
   proc mkdir(dir: CString, theAccess: cint): cint {.
-    importc: "mkdir", header: dirHeader.}
+    importc: "mkdir", header: "<sys/stat.h>".}
   proc realpath(name, resolved: CString): CString {.
     importc: "realpath", header: "<stdlib.h>".}
   proc getcwd(buf: CString, buflen: cint): CString {.
     importc: "getcwd", header: "<unistd.h>".}
-elif defined(windows):
-  proc mkdir(dir: CString): cint {.
-    importc: "mkdir", header: dirHeader.}
-  proc fullpath(buffer, file: CString, size: int): CString {.
-    importc: "_fullpath", header: "<stdlib.h>".}
-  proc getcwd(buf: CString, buflen: cint): CString {.
-    importc: cunder & "getcwd", header: "<direct.h>".}
+  proc chdir(path: CString): cint {.
+    importc: "chdir", header: "<unistd.h>".}
+  proc rmdir(dir: CString): cint {.
+    importc: "rmdir", header: "<unistd.h>".}
 
-  proc CreateDirectory(pathName: cstring, security: Pointer): cint {.
-    importc: "CreateDirectory", header: "<windows.h>".}
-  proc GetLastError(): cint {.importc, header: "<windows.h>".}
+  # is in <stdlib.h>:
+  proc cputenv(env: CString): cint {.importc: "putenv", noDecl.}
+
+elif defined(windows):
+  proc GetCurrentDirectoryA(nBufferLength: int32, lpBuffer: cstring): int32 {.
+    importc, dynlib: "kernel32", stdcall.}
+  proc SetCurrentDirectoryA(lpPathName: cstring): int32 {.
+    importc, dynlib: "kernel32", stdcall.}
+  proc CreateDirectoryA(pathName: cstring, security: Pointer): int32 {.
+    importc: "CreateDirectoryA", dynlib: "kernel32", stdcall.}
+  proc RemoveDirectoryA(lpPathName: cstring): int32 {.
+    importc, dynlib: "kernel32", stdcall.}
+  proc SetEnvironmentVariableA(lpName, lpValue: cstring): int32 {.
+    stdcall, dynlib: "kernel32", importc.}
 else:
   {.error: "os library not ported to your OS. Please help!".}
 
 
-proc rmdir(dir: CString): cint {.
-  importc: cunder & "rmdir", header: "<time.h>".}
-  # rmdir is of course in ``dirHeader``, but we check here to include
-  # time.h which is needed for stat(). stat() needs time.h and
-  # sys/stat.h; we workaround a C library issue here.
 
-proc free(c: cstring) {.importc: "free", nodecl.}
-  # some C procs return a buffer that has to be freed with free(),
-  # so we define it here
-proc strlen(str: CString): int {.importc: "strlen", nodecl.}
+when defined(unix):
+  proc free(c: cstring) {.importc: "free", nodecl.}
+    # some C procs return a buffer that has to be freed with free(),
+    # so we define it here
+  proc strlen(str: CString): int {.importc: "strlen", nodecl.}
 
 proc stat(f: CString, res: var TStat): cint {.
-  importc: cunder & "stat", header: "<sys/stat.h>".}
+  importc: cunder & "stat", header: "<time.h>".}
+  # stat is of course in ``<sys/stat.h>``, but I include
+  # time.h which is needed for stat() too. stat() needs both time.h and
+  # sys/stat.h.
 
 when defined(windows):
-  proc getModuleFilename(handle: int32, buf: CString, size: int32): int32 {.
-    importc: "GetModuleFileName", header: "<windows.h>".}
+  proc GetModuleFileNameA(handle: int32, buf: CString, size: int32): int32 {.
+    importc, dynlib: "kernel32", stdcall.}
 
 proc getLastModificationTime(file: string): TTime =
   var
@@ -452,11 +511,12 @@ proc getLastModificationTime(file: string): TTime =
   return res.st_mtime
 
 proc setCurrentDir(newDir: string) =
-  if chdir(newDir) != 0:
-    raise newException(EOS, "cannot change the working directory to '$1'" %
-      newDir)
+  when defined(Windows):
+    if SetCurrentDirectoryA(newDir) == 0'i32: OSError()
+  else:
+    if chdir(newDir) != 0'i32: OSError()
 
-when defined(linux) or defined(solaris) or defined(bsd):
+when defined(linux) or defined(solaris) or defined(bsd) or defined(aix):
   proc readlink(link, buf: cstring, size: int): int {.
     header: "<unistd.h>", cdecl.}
 
@@ -487,14 +547,14 @@ proc getApplicationFilename(): string =
   # /proc/<pid>/file
   when defined(windows):
     result = newString(256)
-    var len = getModuleFileName(0, result, 256)
+    var len = getModuleFileNameA(0, result, 256)
     setlen(result, int(len))
-  elif defined(linux):
+  elif defined(linux) or defined(aix):
     result = getApplAux("/proc/self/exe")
   elif defined(solaris):
     result = getApplAux("/proc/" & $getpid() & "/path/a.out")
   elif defined(bsd):
-    result = getApplAux("/proc/" & $getpid() & "file")
+    result = getApplAux("/proc/" & $getpid() & "/file")
   elif defined(macosx):
     var size: int32
     getExecPath1(nil, size)
@@ -513,20 +573,22 @@ proc getApplicationFilename(): string =
           var x = joinPath(p, result)
           if ExistsFile(x): return x
 
-{.push warnings: off.}
 proc getApplicationDir(): string =
   var tail: string
   splitPath(getApplicationFilename(), result, tail)
-{.pop.}
 
 proc getCurrentDir(): string =
-  const
-    bufsize = 512 # should be enough
+  const bufsize = 512 # should be enough
   result = newString(bufsize)
-  if getcwd(result, bufsize) != nil:
-    setlen(result, strlen(result))
+  when defined(windows):
+    var L = GetCurrentDirectoryA(bufsize, result)
+    if L == 0'i32: OSError()
+    setLen(result, L)
   else:
-    raise newException(EOS, "getcwd failed")
+    if getcwd(result, bufsize) != nil:
+      setlen(result, strlen(result))
+    else:
+      OSError()
 
 proc JoinPath(head, tail: string): string =
   if len(head) == 0:
@@ -617,46 +679,65 @@ proc AppendFileExt(filename, ext: string): string =
 proc csystem(cmd: CString): cint {.importc: "system", noDecl.}
   # is in <stdlib.h>!
 
-when defined(wcc):
-  # everywhere it is in <stdlib.h>, except for Watcom C ...
-  proc cputenv(env: CString): cint {.importc: "putenv", header: "<process.h>".}
-
-else: # is in <stdlib.h>
-  proc cputenv(env: CString): cint {.importc: cunder & "putenv", noDecl.}
-
 proc cgetenv(env: CString): CString {.importc: "getenv", noDecl.}
 
-#long  _findfirst(char *, struct _finddata_t *);
-#int  _findnext(long, struct _finddata_t *);
-#int  _findclose(long);
 when defined(windows):
+  const
+    FILE_ATTRIBUTE_DIRECTORY = 16
+    MAX_PATH = 260
   type
-    TFindData {.importc: "struct _finddata_t", final.} = object
-      attrib {.importc: "attrib".}: cint
-      time_create {.importc: "time_create".}: cint
-      time_access {.importc: "time_access".}: cint
-      time_write {.importc: "time_write".}: cint
-      size {.importc: "size".}: cint
-      name {.importc: "name".}: array[0..259, char]
-
-  proc findfirst(pathname: CString, f: ptr TFindData): cint {.
-    importc: "_findfirst", header: "<io.h>".}
-  proc findnext(handle: cint, f: ptr TFindData): cint {.
-    importc: "_findnext", header: "<io.h>".}
-  proc findclose(handle: cint) {.importc: "_findclose", header: "<io.h>".}
+    HANDLE = int
+    FILETIME {.pure.} = object
+      dwLowDateTime: int32
+      dwHighDateTime: int32
+    TWIN32_FIND_DATA {.pure.} = object
+      dwFileAttributes: int32
+      ftCreationTime: FILETIME
+      ftLastAccessTime: FILETIME
+      ftLastWriteTime: FILETIME
+      nFileSizeHigh: int32
+      nFileSizeLow: int32
+      dwReserved0: int32
+      dwReserved1: int32
+      cFileName: array[0..(MAX_PATH) - 1, char]
+      cAlternateFileName: array[0..13, char]
+  proc FindFirstFileA(lpFileName: cstring,
+                      lpFindFileData: var TWIN32_FIND_DATA): HANDLE {.
+      stdcall, dynlib: "kernel32", importc: "FindFirstFileA".}
+  proc FindNextFileA(hFindFile: HANDLE,
+                     lpFindFileData: var TWIN32_FIND_DATA): int32 {.
+      stdcall, dynlib: "kernel32", importc: "FindNextFileA".}
+  proc FindClose(hFindFile: HANDLE) {.stdcall, dynlib: "kernel32",
+    importc: "FindClose".}
+
+  proc GetFullPathNameA(lpFileName: cstring, nBufferLength: int32,
+                        lpBuffer: cstring, lpFilePart: var cstring): int32 {.
+                        stdcall, dynlib: "kernel32", importc.}
+  proc GetFileAttributesA(lpFileName: cstring): int32 {.
+                          stdcall, dynlib: "kernel32", importc.}
+
 else:
   type
-    TFindData {.importc: "glob_t", final.} = object
+    TDIR {.importc: "DIR", header: "<dirent.h>", pure.} = object
+    TDirent {.importc: "struct dirent", header: "<dirent.h>", pure.} = object
+      d_name: array [0..255, char]
+
+  proc opendir(dir: cstring): ptr TDIR {.importc, header: "<dirent.h>".}
+  proc closedir(dir: ptr TDIR) {.importc, header: "<dirent.h>".}
+  proc readdir(dir: ptr TDIR): ptr TDirent {.importc, header: "<dirent.h>".}
+
+  type
+    TGlob {.importc: "glob_t", header: "<glob.h>", final, pure.} = object
       gl_pathc: int     # count of paths matched by pattern
-      gl_pathv: ptr array[0..1000_000, CString] # list of matched path names
+      gl_pathv: cstringArray # list of matched path names
       gl_offs: int      # slots to reserve at beginning of gl_pathv
-    PFindData = ptr TFindData
+    PGlob = ptr TGlob
 
   proc glob(pattern: cstring, flags: cint, errfunc: pointer,
-            pglob: PFindData): cint {.
+            pglob: PGlob): cint {.
     importc: "glob", header: "<glob.h>".}
 
-  proc globfree(pglob: PFindData) {.
+  proc globfree(pglob: PGlob) {.
     importc: "globfree", header: "<glob.h>".}
 
 proc sameFile*(path1, path2: string): bool =
@@ -665,132 +746,149 @@ proc sameFile*(path1, path2: string): bool =
   ## Raises an exception if an os.stat() call on either pathname fails.
   when defined(Windows):
     var
-      a, b: TFindData
-    var resA = findfirst(path1, addr(a))
-    var resB = findfirst(path2, addr(b))
+      a, b: TWin32FindData
+    var resA = findfirstFileA(path1, a)
+    var resB = findfirstFileA(path2, b)
     if resA != -1 and resB != -1:
-      result = $a.name == $b.name
+      result = $a.cFileName == $b.cFileName
     else:
-      # work around some ``findfirst`` bugs
+      # work around some ``findfirstFileA`` bugs
       result = cmpPaths(path1, path2) == 0
     if resA != -1: findclose(resA)
     if resB != -1: findclose(resB)
   else:
     var
       a, b: TStat
-    if stat(path1, a) < 0 or stat(path2, b) < 0:
+    if stat(path1, a) < 0'i32 or stat(path2, b) < 0'i32:
       result = cmpPaths(path1, path2) == 0 # be consistent with Windows
     else:
-      result = int(a.st_dev) == b.st_dev and int(a.st_ino) == b.st_ino
+      result = a.st_dev == b.st_dev and a.st_ino == b.st_ino
 
+proc sameFileContent*(path1, path2: string): bool =
+  ## Returns True if both pathname arguments refer to files with identical
+  ## content. Content is compared byte for byte.
+  const
+    bufSize = 8192 # 8K buffer
+  var
+    a, b: TFile
+  if not openFile(a, path1): return false
+  if not openFile(b, path2):
+    closeFile(a)
+    return false
+  var bufA = alloc(bufsize)
+  var bufB = alloc(bufsize)
+  while True:
+    var readA = readBuffer(a, bufA, bufsize)
+    var readB = readBuffer(b, bufB, bufsize)
+    if readA != readB:
+      result = false
+      break
+    if readA == 0:
+      result = true
+      break
+    result = equalMem(bufA, bufB, readA)
+    if not result: break
+    if readA != bufSize: break # end of file
+  dealloc(bufA)
+  dealloc(bufB)
+  closeFile(a)
+  closeFile(b)
+
+# Ansi C has these:
 proc cremove(filename: CString): cint {.importc: "remove", noDecl.}
 proc crename(oldname, newname: CString): cint {.importc: "rename", noDecl.}
 
 when defined(Windows):
-  proc cCopyFile(lpExistingFileName, lpNewFileName: CString,
+  proc CopyFileA(lpExistingFileName, lpNewFileName: CString,
                  bFailIfExists: cint): cint {.
-    importc: "CopyFile", header: "<windows.h>".}
-  #  cMoveFile(lpExistingFileName, lpNewFileName: CString): int
-  #    {.importc: "MoveFile", noDecl, header: "<winbase.h>".}
-  #  cRemoveFile(filename: CString, cmo: int)
-  #    {.importc: "DeleteFile", noDecl, header: "<winbase.h>".}
+    importc, stdcall, dynlib: "kernel32".}
+  proc copyFile(dest, source: string) =
+    if CopyFileA(source, dest, 0'i32) == 0'i32: OSError()
+
 else:
-  # generic version of cCopyFile which works for any platform:
-  proc cCopyFile(lpExistingFileName, lpNewFileName: CString,
-            bFailIfExists: cint): cint =
+  # generic version of copyFile which works for any platform:
+  proc copyFile(dest, source: string) =
     const
       bufSize = 8192 # 8K buffer
     var
-      dest, src: TFile
-    if not openFile(src, $lpExistingFilename): return -1
-    if not openFile(dest, $lpNewFilename, fmWrite):
-      closeFile(src)
-      return -1
+      d, s: TFile
+    if not openFile(s, source): OSError()
+    if not openFile(d, dest, fmWrite):
+      closeFile(s)
+      OSError()
     var
       buf: Pointer = alloc(bufsize)
       bytesread, byteswritten: int
     while True:
-      bytesread = readBuffer(src, buf, bufsize)
-      byteswritten = writeBuffer(dest, buf, bytesread)
+      bytesread = readBuffer(s, buf, bufsize)
+      byteswritten = writeBuffer(d, buf, bytesread)
       if bytesread != bufSize: break
-    if byteswritten == bytesread: result = 0
-    else: result = -1
+      if bytesread != bytesWritten: OSError()
     dealloc(buf)
-    closeFile(src)
-    closeFile(dest)
-
+    closeFile(s)
+    closeFile(d)
 
 proc moveFile(dest, source: string) =
-  if crename(source, dest) != 0:
-    raise newException(EOS, "cannot move file from '$1' to '$2'" %
-      [source, dest])
-
-proc copyFile(dest, source: string) =
-  if cCopyFile(source, dest, 0) != 0:
-    raise newException(EOS, "cannot copy file from '$1' to '$2'" %
-      [source, dest])
+  if crename(source, dest) != 0'i32: OSError()
 
 proc removeFile(file: string) =
-  if cremove(file) != 0:
-    raise newException(EOS, "cannot remove file '$1'" % file)
+  if cremove(file) != 0'i32: OSError()
 
 proc removeDir(dir: string) =
-  if rmdir(dir) != 0:
-    raise newException(EOS, "cannot remove directory '$1'" % dir)
+  when defined(windows):
+    if RemoveDirectoryA(dir) == 0'i32: OSError()
+  else:
+    if rmdir(dir) != 0'i32: OSError()
 
-proc createDir(dir: string) =
+proc rawCreateDir(dir: string) =
   when defined(unix):
-    if mkdir(dir, 0o711) != 0 and int(errno) != EEXIST:
-      raise newException(EOS, "cannot create directory '$1'" % dir)
+    if mkdir(dir, 0o711) != 0'i32 and errno != EEXIST:
+      OSError()
   else:
-    if CreateDirectory(dir, nil) == 0 and GetLastError() != 183:
-      raise newException(EOS, "cannot create directory '$1'" % dir)
-
-proc existsDir(dir: string): bool =
-  var safe = getCurrentDir()
-  # just try to set the current dir to dir; if it works, it must exist:
-  result = chdir(dir) == 0
-  if result:
-    setCurrentDir(safe) # set back to the old working directory
+    if CreateDirectoryA(dir, nil) == 0'i32 and GetLastError() != 183'i32:
+      OSError()
 
-proc executeProcess(command: string): int =
-  return csystem(command) # XXX: do this without shell
+proc createDir(dir: string) =
+  for i in 0.. 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)
 
 var
   envComputed: bool = false
-  environment {.noStatic.}: seq[string] = []
+  environment: seq[string] = @[]
 
 when defined(windows):
   # because we support Windows GUI applications, things get really
   # messy here...
-  proc GetEnvironmentStrings(): Pointer {.
-    importc: "GetEnvironmentStrings", header: "<windows.h>".}
-  proc FreeEnvironmentStrings(env: Pointer) {.
-    importc: "FreeEnvironmentStrings", header: "<windows.h>".}
+  proc GetEnvironmentStringsA*(): cstring {.
+    stdcall, dynlib: "kernel32", importc.}
+  proc FreeEnvironmentStringsA*(para1: cstring): int32 {.
+    stdcall, dynlib: "kernel32", importc.}
+
   proc strEnd(cstr: CString, c = 0): CString {.importc: "strchr", nodecl.}
 
-  proc getEnvVarsC() {.noStatic.} =
+  proc getEnvVarsC() =
     if not envComputed:
       var
-        env = cast[CString](getEnvironmentStrings())
+        env = getEnvironmentStringsA()
         e = env
       if e == nil: return # an error occured
       while True:
         var eend = strEnd(e)
-        add environment, $e
+        add(environment, $e)
         e = cast[CString](cast[TAddress](eend)+1)
         if eend[1] == '\0': break
       envComputed = true
-      FreeEnvironmentStrings(env)
+      discard FreeEnvironmentStringsA(env)
 
 else:
   var
     gEnv {.importc: "gEnv".}: ptr array [0..10_000, CString]
 
-  proc getEnvVarsC() {.noStatic.} =
+  proc getEnvVarsC() =
     # retrieves the variables of char** env of C's main proc
     if not envComputed:
       var
@@ -840,8 +938,12 @@ proc putEnv(key, val: string) =
   else:
     add environment, (key & '=' & val)
     indx = high(environment)
-  if cputenv(environment[indx]) != 0:
-    raise newException(EOS, "attempt to set an invalid environment variable")
+  when defined(unix):
+    if cputenv(environment[indx]) != 0'i32:
+      OSError()
+  else:
+    if SetEnvironmentVariableA(key, val) == 0'i32:
+      OSError()
 
 iterator walkFiles*(pattern: string): string =
   ## Iterate over all the files that match the `pattern`.
@@ -850,34 +952,108 @@ iterator walkFiles*(pattern: string): string =
   ## notation is supported.
   when defined(windows):
     var
-      f: TFindData
+      f: TWin32FindData
       res: int
-    res = findfirst(pattern, addr(f))
+    res = findfirstFileA(pattern, f)
     if res != -1:
       while true:
-        yield $f.name
-        if int(findnext(res, addr(f))) == -1: break
+        if f.cFileName[0] != '.':
+          yield extractDir(pattern) / extractFilename($f.cFileName)
+        if findnextFileA(res, f) == 0'i32: break
       findclose(res)
   else: # here we use glob
     var
-      f: TFindData
+      f: TGlob
       res: int
     f.gl_offs = 0
     f.gl_pathc = 0
     f.gl_pathv = nil
     res = glob(pattern, 0, nil, addr(f))
-    if res != 0: raise newException(EOS, "walkFiles() failed")
-    for i in 0.. f.gl_pathc - 1:
-      assert(f.gl_pathv[i] != nil)
-      yield $f.gl_pathv[i]
+    if res == 0:
+      for i in 0.. f.gl_pathc - 1:
+        assert(f.gl_pathv[i] != nil)
+        yield $f.gl_pathv[i]
     globfree(addr(f))
 
-{.push warnings:off.}
+type
+  TPathComponent* = enum  ## Enumeration specifying a path component.
+    pcFile,               ## path refers to a file
+    pcLinkToFile,         ## path refers to a symbolic link to a file
+    pcDirectory,          ## path refers to a directory
+    pcLinkToDirectory     ## path refers to a symbolic link to a directory
+
+when defined(posix):
+  proc S_ISDIR(m: int16): bool {.importc, header: "<sys/stat.h>".}
+  proc S_ISLNK(m: int16): bool {.importc, header: "<sys/stat.h>".}
+  proc S_ISREG(m: int16): bool {.importc, header: "<sys/stat.h>".}
+
+iterator walkDir*(dir: string): tuple[kind: TPathComponent, path: string] =
+  ## walks over the directory `dir` and yields for each directory or file in
+  ## `dir`. The component type and full path for each item is returned.
+  ## Walking is not recursive.
+  ## Example: Assuming this directory structure::
+  ##   dirA / dirB / fileB1.txt
+  ##        / dirC
+  ##        / fileA1.txt
+  ##        / fileA2.txt
+  ##
+  ## and this code:
+  ##
+  ## .. code-block:: Nimrod
+  ##     for kind, path in walkDir("dirA"):
+  ##       echo(path)
+  ##
+  ## produces this output (though not necessarily in this order!)::
+  ##   dirA/dirB
+  ##   dirA/dirC
+  ##   dirA/fileA1.txt
+  ##   dirA/fileA2.txt
+  when defined(windows):
+    var f: TWIN32_Find_Data
+    var h = findfirstFileA(dir / "*", f)
+    if h != -1:
+      while true:
+        var k = pcFile
+        if f.cFilename[0] != '.':
+          if (int(f.dwFileAttributes) and FILE_ATTRIBUTE_DIRECTORY) != 0:
+            k = pcDirectory
+          yield (k, dir / extractFilename($f.cFilename))
+        if findnextFileA(h, f) == 0'i32: break
+      findclose(h)
+  else:
+    var d = openDir(dir)
+    if d != nil:
+      while true:
+        var x = readDir(d)
+        if x == nil: break
+        var y = $x.d_name
+        if y != "." and y != "..":
+          var s: TStat
+          y = dir / y
+          if stat(y, s) < 0'i32: break
+          var k = pcFile
+          if S_ISDIR(s.st_mode): k = pcDirectory
+          if S_ISLNK(s.st_mode): k = succ(k)
+          yield (k, y)
+      closeDir(d)
+
 proc ExistsFile(filename: string): bool =
-  var
-    res: TStat
-  return stat(filename, res) >= 0
-{.pop.}
+  when defined(windows):
+    var a = GetFileAttributesA(filename)
+    if a != -1:
+      result = (a and FILE_ATTRIBUTE_DIRECTORY) == 0
+  else:
+    var res: TStat
+    return stat(filename, res) >= 0'i32 and S_ISREG(res.st_mode)
+
+proc existsDir(dir: string): bool =
+  when defined(windows):
+    var a = GetFileAttributesA(dir)
+    if a != -1:
+      result = (a and FILE_ATTRIBUTE_DIRECTORY) != 0
+  else:
+    var res: TStat
+    return stat(dir, res) >= 0'i32 and S_ISDIR(res.st_mode)
 
 proc cmpPaths(pathA, pathB: string): int =
   if FileSystemCaseSensitive:
@@ -886,29 +1062,56 @@ proc cmpPaths(pathA, pathB: string): int =
     result = cmpIgnoreCase(pathA, pathB)
 
 proc extractDir(path: string): string =
-  var
-    tail: string
-  splitPath(path, result, tail)
+  if path[path.len-1] in {dirSep, altSep}:
+    result = path
+  else:
+    var tail: string
+    splitPath(path, result, tail)
 
 proc extractFilename(path: string): string =
-  var
-    head: string
-  splitPath(path, head, result)
+  if path[path.len-1] in {dirSep, altSep}:
+    result = ""
+  else:
+    var head: string
+    splitPath(path, head, result)
 
 proc expandFilename(filename: string): string =
   # returns the full path of 'filename'; "" on error
-  var
-    res: CString
-  when defined(unix):
-    res = realpath(filename, nil)
-  else:
-    res = fullpath(nil, filename, 0)
-  if res == nil:
-    result = "" # an error occured
+  when defined(windows):
+    var unused: cstring
+    result = newString(3072)
+    var L = GetFullPathNameA(filename, 3072'i32, result, unused)
+    if L <= 0'i32 or L >= 3072'i32: OSError()
+    setLen(result, L)
   else:
+    var res = realpath(filename, nil)
+    if res == nil: OSError()
     result = $res
     free(res)
 
+proc parseCmdLine*(c: string): seq[string] =
+  ## Splits a command line into several components; components are separated by
+  ## whitespace or are quoted with the ``"`` or ``'`` characters. This proc is
+  ## only occassionally useful, better use the `parseopt` module.
+  result = @[]
+  var i = 0
+  while c[i] != '\0':
+    var a = ""
+    while c[i] >= '\1' and c[i] <= ' ': inc(i) # skip whitespace
+    case c[i]
+    of '\'', '\"':
+      var delim = c[i]
+      inc(i) # skip ' or "
+      while c[i] != '\0' and c[i] != delim:
+        add a, c[i]
+        inc(i)
+      if c[i] != '\0': inc(i)
+    else:
+      while c[i] > ' ':
+        add(a, c[i])
+        inc(i)
+    add(result, a)
+
 when defined(windows):
   proc GetHomeDir(): string = return getEnv("USERPROFILE") & "\\"
   proc GetConfigDir(): string = return getEnv("APPDATA") & "\\"
@@ -918,51 +1121,22 @@ when defined(windows):
   # command line arguments. The way to get them differs. Thus we parse them
   # ourselves. This has the additional benefit that the program's behaviour
   # is always the same -- independent of the used C compiler.
-  proc GetCommandLine(): CString {.
-    importc: "GetCommandLine", header: "<windows.h>".}
+  proc GetCommandLineA(): CString {.importc, stdcall, dynlib: "kernel32".}
 
   var
-    ownArgc: int = -1
-    ownArgv: seq[string] = []
-
-  proc parseCmdLine() =
-    if ownArgc != -1: return # already processed
-    var
-      i = 0
-      j = 0
-      c = getCommandLine()
-    ownArgc = 0
-    while c[i] != '\0':
-      var a = ""
-      while c[i] >= '\1' and c[i] <= ' ': inc(i) # skip whitespace
-      case c[i]
-      of '\'', '\"':
-        var delim = c[i]
-        inc(i) # skip ' or "
-        while c[i] != '\0' and c[i] != delim:
-          add a, c[i]
-          inc(i)
-        if c[i] != '\0': inc(i)
-      else:
-        while c[i] > ' ':
-          add a, c[i]
-          inc(i)
-      add ownArgv, a
-      inc(ownArgc)
+    ownArgv: seq[string]
 
   proc paramStr(i: int): string =
-    parseCmdLine()
-    if i < ownArgc and i >= 0:
-      return ownArgv[i]
-    raise newException(EInvalidIndex, "invalid index")
+    if isNil(ownArgv): ownArgv = parseCmdLine($getCommandLineA())
+    return ownArgv[i]
 
   proc paramCount(): int =
-    parseCmdLine()
-    result = ownArgc-1
+    if isNil(ownArgv): ownArgv = parseCmdLine($getCommandLineA())
+    result = ownArgv.len-1
 
 else:
   proc GetHomeDir(): string = return getEnv("HOME") & "/"
-  proc GetConfigDir(): string = return getEnv("HOME") & "/"
+  proc GetConfigDir(): string = return getEnv("HOME") & "/.config/"
 
   var
     cmdCount {.importc: "cmdCount".}: int
diff --git a/lib/parsecfg.nim b/lib/parsecfg.nim
index 96305349e..a148f3e3a 100644
--- a/lib/parsecfg.nim
+++ b/lib/parsecfg.nim
@@ -25,7 +25,7 @@
 
 
 import 
-  hashes, strutils, lexbase
+  hashes, strutils, lexbase, streams
 
 type 
   TCfgEventKind* = enum ## enumation of all events that may occur when parsing
@@ -37,7 +37,7 @@ type
     
   TCfgEvent* = object of TObject ## describes a parsing event
     case kind*: TCfgEventKind    ## the kind of the event
-    of cfgEof: dummy: string
+    of cfgEof: nil
     of cfgSectionStart: 
       section*: string           ## `section` contains the name of the 
                                  ## parsed section start (syntax: ``[section]``)
@@ -59,21 +59,18 @@ type
     literal: string          # the parsed (string) literal
   
   TParserState = enum 
-    startState, commaState
+    startState # , commaState # not yet used
   TCfgParser* = object of TBaseLexer ## the parser object.
     tok: TToken
     state: TParserState
     filename: string
 
-proc Open*(c: var TCfgParser, filename: string): bool
-  ## initializes the parser, open the file for reading and returns true if
-  ## successful (the file has been found).
-
-proc OpenFromBuffer*(c: var TCfgParser, buf: string)
-  ## initializes the parser with a buffer. This cannot fail.
+proc open*(c: var TCfgParser, input: PStream, filename: string)
+  ## initializes the parser with an input stream. `Filename` is only used
+  ## for nice error messages.
 
 proc close*(c: var TCfgParser)
-  ## closes the parser `c`.
+  ## closes the parser `c` and its associated input stream.
 
 proc next*(c: var TCfgParser): TCfgEvent
   ## retrieves the first/next event. This controls the parser.
@@ -87,6 +84,10 @@ proc getLine*(c: TCfgParser): int
 proc getFilename*(c: TCfgParser): string
   ## get the filename of the file that the parser processes.
 
+proc errorStr*(c: TCfgParser, msg: string): string
+  ## returns a properly formated error message containing current line and
+  ## column information.
+
 
 # implementation
 
@@ -94,24 +95,16 @@ const
   SymChars: TCharSet = {'a'..'z', 'A'..'Z', '0'..'9', '_', '\x80'..'\xFF'} 
   
 proc rawGetTok(c: var TCfgParser, tok: var TToken)
-proc open(c: var TCfgParser, filename: string): bool = 
-  result = initBaseLexer(c, filename)
+proc open(c: var TCfgParser, input: PStream, filename: string) = 
+  lexbase.open(c, input)
   c.filename = filename
   c.state = startState
   c.tok.kind = tkInvalid
   c.tok.literal = ""
-  if result: rawGetTok(c, c.tok)
-  
-proc openFromBuffer(c: var TCfgParser, buf: string) = 
-  initBaseLexerFromBuffer(c, buf)
-  c.filename = "buffer"
-  c.state = startState
-  c.tok.kind = tkInvalid
-  c.tok.literal = ""
   rawGetTok(c, c.tok)
-
+  
 proc close(c: var TCfgParser) = 
-  deinitBaseLexer(c)
+  lexbase.close(c)
 
 proc getColumn(c: TCfgParser): int = 
   result = getColNumber(c, c.bufPos)
@@ -285,6 +278,7 @@ proc rawGetTok(c: var TCfgParser, tok: var TToken) =
   of '=': 
     tok.kind = tkEquals
     inc(c.bufpos)
+    tok.literal = "="
   of '-': 
     inc(c.bufPos)
     if c.buf[c.bufPos] == '-': inc(c.bufPos)
@@ -312,6 +306,7 @@ proc rawGetTok(c: var TCfgParser, tok: var TToken) =
     getString(c, tok, false)
   of lexbase.EndOfFile: 
     tok.kind = tkEof
+    tok.literal = "[EOF]"
   else: getSymbol(c, tok)
   
 proc errorStr(c: TCfgParser, msg: string): string = 
diff --git a/lib/posix/posix.nim b/lib/posix/posix.nim
index 35fe0a0df..38677420d 100644
--- a/lib/posix/posix.nim
+++ b/lib/posix/posix.nim
@@ -1,7 +1,7 @@
 #

 #

 #            Nimrod's Runtime Library

-#        (c) Copyright 2006 Andreas Rumpf

+#        (c) Copyright 2008 Andreas Rumpf

 #

 #    See the file "copying.txt", included in this

 #    distribution, for details about the copyright.

@@ -20,13 +20,17 @@
 ## ALL types are named the same as in the POSIX standard except that they start

 ## with 'T' or 'P' (if they are pointers) and without the '_t' prefix to be

 ## consistent with Nimrod conventions. If an identifier is a Nimrod keyword

-## the `identifier` notation is used.

+## the \`identifier\` notation is used.

 ##

 ## This library relies on the header files of your C compiler. Thus the

 ## resulting C code will just include <XYZ.h> and *not* define the

 ## symbols declared here.

 

 const

+  hasSpawnH = defined(linux)

+  hasAioH = defined(linux)

+

+const

   C_IRUSR* = 0c000400 ## Read by owner.

   C_IWUSR* = 0c000200 ## Write by owner.

   C_IXUSR* = 0c000100 ## Execute by owner.

@@ -55,28 +59,19 @@ const
   MM_NULLACT* = nil

   MM_NULLTAG* = nil

   

-  STDERR_FILENO = 2 ## File number of stderr;

-  STDIN_FILENO = 0 ## File number of stdin;

-  STDOUT_FILENO = 1 ## File number of stdout; 

+  STDERR_FILENO* = 2 ## File number of stderr;

+  STDIN_FILENO* = 0 ## File number of stdin;

+  STDOUT_FILENO* = 1 ## File number of stdout; 

 

 type

-  Taiocb* {.importc: "struct aiocb", header: "<aio.h>", final.} = 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. 

-    aio_sigevent*: TSigEvent  ## Signal number and value. 

-    aio_lio_opcode: cint ## Operation to be performed. 

-

-  TDIR* {.importc: "DIR", header: "<dirent.h>", final.} = object

+  TDIR* {.importc: "DIR", header: "<dirent.h>", final, pure.} = object

     ## A type representing a directory stream. 

 

-  Tdirent* {.importc: "struct dirent", header: "<dirent.h>", final.} = object

+  Tdirent* {.importc: "struct dirent", header: "<dirent.h>", final, pure.} = object

     d_ino*: TIno  ## File serial number.

     d_name*: array [0..255, char] ## Name of entry.

 

-  Tflock* {.importc: "flock", header: "<fcntl>", final.} = object

+  Tflock* {.importc: "flock", header: "<fcntl.h>", final, pure.} = object

     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. 

@@ -84,12 +79,12 @@ type
     l_pid*: TPid   ## Process ID of the process holding the lock; 

                    ## returned with F_GETLK. 

   

-  Tfenv* {.importc: "fenv_t", header: "<fenv.h>", final.} = 

+  Tfenv* {.importc: "fenv_t", header: "<fenv.h>", final, pure.} = 

     object ## Represents the entire floating-point environment. The

            ## floating-point environment refers collectively to any

            ## floating-point status flags and control modes supported

            ## by the implementation.

-  Tfexcept* {.importc: "fexcept_t", header: "<fenv.h>", final.} = 

+  Tfexcept* {.importc: "fexcept_t", header: "<fenv.h>", final, pure.} = 

     object ## Represents the floating-point status flags collectively, 

            ## including any status the implementation associates with the 

            ## flags. A floating-point status flag is a system variable 

@@ -100,25 +95,25 @@ type
            ## whose value may be set by the user to affect the subsequent 

            ## behavior of floating-point arithmetic.

 

-  TFTW* {.importc: "struct FTW", header: "<ftw.h>", final.} = object

+  TFTW* {.importc: "struct FTW", header: "<ftw.h>", final, pure.} = object

     base*: cint

     level*: cint

     

-  TGlob* {.importc: "glob_t", header: "<glob.h>", final.} = object

+  TGlob* {.importc: "glob_t", header: "<glob.h>", final, pure.} = object

     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. 

   

-  TGroup* {.importc: "struct group", header: "<grp.h>", final.} = object

+  TGroup* {.importc: "struct group", header: "<grp.h>", final, pure.} = object

     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. 

 

-  Ticonv* {.importc: "iconv_t", header: "<iconv.h>", final.} = 

+  Ticonv* {.importc: "iconv_t", header: "<iconv.h>", final, pure.} = 

     object ## Identifies the conversion from one codeset to another.

 

-  Tlconv* {.importc: "struct lconv", header: "<locale.h>", final.} = object

+  Tlconv* {.importc: "struct lconv", header: "<locale.h>", final, pure.} = object

     currency_symbol*: cstring

     decimal_point*: cstring

     frac_digits*: char

@@ -144,14 +139,14 @@ type
     p_sign_posn*: char

     thousands_sep*: cstring

 

-  TMqd* {.importc: "mqd_t", header: "<mqueue.h>", final.} = object

-  TMqAttr* {.importc: "struct mq_attr", header: "<mqueue.h>", final.} = object

+  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.} = object

+  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. 

@@ -198,7 +193,7 @@ type
   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.} = object

+  Tutsname* {.importc: "struct utsname", header: "<sys/utsname.h>", final, pure.} = object

     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. 

@@ -207,15 +202,15 @@ type
       machine*: array [0..255, char] ## Name of the hardware type on which the

                                      ## system is running. 

 

-  TSem* {.importc: "sem_t", header: "<semaphore.h>", final.} = object

-  Tipc_perm* {.importc: "struct ipc_perm", header: "<sys/ipc.h>", final.} = object

+  TSem* {.importc: "sem_t", header: "<semaphore.h>", final, pure.} = object

+  Tipc_perm* {.importc: "struct ipc_perm", header: "<sys/ipc.h>", final, pure.} = object

     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. 

   

-  TStat* {.importc: "struct stat", header: "<sys/stat.h>", final.} = object

+  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). 

@@ -239,7 +234,7 @@ type
     st_blocks*: Tblkcnt ## Number of blocks allocated for this object. 

 

   

-  TStatvfs* {.importc: "struct statvfs", header: "<sys/statvfs.h>", final.} = 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. 

@@ -255,10 +250,10 @@ type
     f_namemax*: int ##  Maximum filename length. 

 

   Tposix_typed_mem_info* {.importc: "struct posix_typed_mem_info", 

-                           header: "<sys/mman.h>", final.} = object

+                           header: "<sys/mman.h>", final, pure.} = object

     posix_tmi_length*: int

   

-  Ttm* {.importc: "struct tm", header: "<time.h>", final.} = object

+  Ttm* {.importc: "struct tm", header: "<time.h>", final, pure.} = object

     tm_sec*: cint ## Seconds [0,60]. 

     tm_min*: cint   ## Minutes [0,59]. 

     tm_hour*: cint  ## Hour [0,23]. 

@@ -268,10 +263,10 @@ 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.} = object

+  Ttimespec* {.importc: "struct timespec", header: "<time.h>", final, pure.} = object

     tv_sec*: Ttime ## Seconds. 

     tv_nsec*: int ## Nanoseconds. 

-  titimerspec* {.importc: "struct itimerspec", header: "<time.h>", final.} = object

+  titimerspec* {.importc: "struct itimerspec", header: "<time.h>", final, pure.} = object

     it_interval*: ttimespec ## Timer period. 

     it_value*: ttimespec    ## Timer expiration. 

   

@@ -279,19 +274,19 @@ type
     ## Possibly volatile-qualified integer type of an object that can be 

     ## accessed as an atomic entity, even in the presence of asynchronous

     ## interrupts.

-  Tsigset* {.importc: "sigset_t", header: "<signal.h>", final.} = object

+  Tsigset* {.importc: "sigset_t", header: "<signal.h>", final, pure.} = object

   

-  TsigEvent* {.importc: "struct sigevent", header: "<signal.h>", final.} = object

+  TsigEvent* {.importc: "struct sigevent", header: "<signal.h>", final, pure.} = object

     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_notify_attributes*: ptr Tpthreadattr ## Notification attributes.

 

-  TsigVal* {.importc: "union sigval", header: "<signal.h>", final.} = object

+  TsigVal* {.importc: "union sigval", header: "<signal.h>", final, pure.} = object

     sival_ptr*: pointer ## pointer signal value; 

                         ## integer signal value not defined!

-  TSigaction* {.importc: "struct sigaction", header: "<signal.h>", final.} = object

+  TSigaction* {.importc: "struct sigaction", header: "<signal.h>", final, pure.} = object

     sa_handler*: proc (x: cint) {.noconv.}  ## Pointer to a signal-catching

                                             ## function or one of the macros 

                                             ## SIG_IGN or SIG_DFL. 

@@ -300,16 +295,16 @@ 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.} = object

+  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.} = object

+  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.} = object

+  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 

@@ -324,7 +319,7 @@ type
   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.} = object

+  Tsched_param* {.importc: "struct sched_param", header: "<sched.h>", final, pure.} = object

     sched_priority*: cint

     sched_ss_low_priority*: cint ## Low scheduling priority for 

                                  ## sporadic server. 

@@ -334,15 +329,12 @@ type
     sched_ss_max_repl*: cint    ## Maximum pending replenishments for 

                                 ## sporadic server. 

 

-  Ttimeval* {.importc: "struct timeval", header: "<sys/select.h>", final.} = object

+  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.} = object

- 

-  Tposix_spawnattr* {.importc: "posix_spawnattr_t", header: "<spawn.h>".} = cint

-  Tposix_spawn_file_actions* {.importc: "posix_spawn_file_actions_t", header: "<spawn.h>".} = cint 

-  Tmcontext* {.importc: "mcontext_t", header: "<ucontext.h>", final.} = object

-  Tucontext* {.importc: "ucontext_t", header: "<ucontext.h>", final.} = object

+  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

     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 

@@ -351,35 +343,52 @@ type
     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. 

+      aio_sigevent*: TSigEvent  ## Signal number and value. 

+      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 

 

   

 # Constants as variables:

-var

-  AIO_ALLDONE* {.importc, header: "<aio.h>".}: cint

-    ## A return value indicating that none of the requested operations 

-    ## could be canceled since they are already complete.

-  AIO_CANCELED* {.importc, header: "<aio.h>".}: cint

-    ## A return value indicating that all requested operations have

-    ## been canceled.

-  AIO_NOTCANCELED* {.importc, header: "<aio.h>".}: cint

-    ## A return value indicating that some of the requested operations could 

-    ## not be canceled since they are in progress.

-  LIO_NOP* {.importc, header: "<aio.h>".}: cint

-    ## A lio_listio() element operation option indicating that no transfer is

-    ## requested.

-  LIO_NOWAIT* {.importc, header: "<aio.h>".}: cint

-    ## A lio_listio() synchronization operation indicating that the calling 

-    ## thread is to continue execution while the lio_listio() operation is 

-    ## being performed, and no notification is given when the operation is

-    ## complete.

-  LIO_READ* {.importc, header: "<aio.h>".}: cint

-    ## A lio_listio() element operation option requesting a read.

-  LIO_WAIT* {.importc, header: "<aio.h>".}: cint

-    ## A lio_listio() synchronization operation indicating that the calling 

-    ## thread is to suspend until the lio_listio() operation is complete.

-  LIO_WRITE* {.importc, header: "<aio.h>".}: cint

-    ## A lio_listio() element operation option requesting a write.

+when hasAioH:

+  var

+    AIO_ALLDONE* {.importc, header: "<aio.h>".}: cint

+      ## A return value indicating that none of the requested operations 

+      ## could be canceled since they are already complete.

+    AIO_CANCELED* {.importc, header: "<aio.h>".}: cint

+      ## A return value indicating that all requested operations have

+      ## been canceled.

+    AIO_NOTCANCELED* {.importc, header: "<aio.h>".}: cint

+      ## A return value indicating that some of the requested operations could 

+      ## not be canceled since they are in progress.

+    LIO_NOP* {.importc, header: "<aio.h>".}: cint

+      ## A lio_listio() element operation option indicating that no transfer is

+      ## requested.

+    LIO_NOWAIT* {.importc, header: "<aio.h>".}: cint

+      ## A lio_listio() synchronization operation indicating that the calling 

+      ## thread is to continue execution while the lio_listio() operation is 

+      ## being performed, and no notification is given when the operation is

+      ## complete.

+    LIO_READ* {.importc, header: "<aio.h>".}: cint

+      ## A lio_listio() element operation option requesting a read.

+    LIO_WAIT* {.importc, header: "<aio.h>".}: cint

+      ## A lio_listio() synchronization operation indicating that the calling 

+      ## thread is to suspend until the lio_listio() operation is complete.

+    LIO_WRITE* {.importc, header: "<aio.h>".}: cint

+      ## A lio_listio() element operation option requesting a write.

 

+var

   RTLD_LAZY* {.importc, header: "<dlfcn.h>".}: cint

     ## Relocations are performed at an implementation-defined time.

   RTLD_NOW* {.importc, header: "<dlfcn.h>".}: cint

@@ -1246,23 +1255,30 @@ var
   SCHED_OTHER* {.importc, header: "<sched.h>".}: cint

   FD_SETSIZE* {.importc, header: "<sys/select.h>".}: cint

 

-  POSIX_SPAWN_RESETIDS* {.importc, header: "<spawn.h>".}: cint

-  POSIX_SPAWN_SETPGROUP* {.importc, header: "<spawn.h>".}: cint

-  POSIX_SPAWN_SETSCHEDPARAM* {.importc, header: "<spawn.h>".}: cint

-  POSIX_SPAWN_SETSCHEDULER* {.importc, header: "<spawn.h>".}: cint

-  POSIX_SPAWN_SETSIGDEF* {.importc, header: "<spawn.h>".}: cint

-  POSIX_SPAWN_SETSIGMASK* {.importc, header: "<spawn.h>".}: cint

-

-proc aio_cancel*(a1: cint, a2: ptr Taiocb): cint {.importc, header: "<aio.h>".}

-proc aio_error*(a1: ptr Taiocb): cint {.importc, header: "<aio.h>".}

-proc aio_fsync*(a1: cint, a2: ptr Taiocb): cint {.importc, header: "<aio.h>".}

-proc aio_read*(a1: ptr Taiocb): cint {.importc, header: "<aio.h>".}

-proc aio_return*(a1: ptr Taiocb): int {.importc, header: "<aio.h>".}

-proc aio_suspend*(a1: ptr ptr Taiocb, a2: cint, a3: ptr ttimespec): cint {.

-                 importc, header: "<aio.h>".}

-proc aio_write*(a1: ptr Taiocb): cint {.importc, header: "<aio.h>".}

-proc lio_listio*(a1: cint, a2: ptr ptr Taiocb, a3: cint,

-             a4: ptr Tsigevent): cint {.importc, header: "<aio.h>".}

+  SEEK_SET* {.importc, header: "<unistd.h>".}: cint

+  SEEK_CUR* {.importc, header: "<unistd.h>".}: cint

+  SEEK_END* {.importc, header: "<unistd.h>".}: cint

+

+when hasSpawnh:

+  var

+    POSIX_SPAWN_RESETIDS* {.importc, header: "<spawn.h>".}: cint

+    POSIX_SPAWN_SETPGROUP* {.importc, header: "<spawn.h>".}: cint

+    POSIX_SPAWN_SETSCHEDPARAM* {.importc, header: "<spawn.h>".}: cint

+    POSIX_SPAWN_SETSCHEDULER* {.importc, header: "<spawn.h>".}: cint

+    POSIX_SPAWN_SETSIGDEF* {.importc, header: "<spawn.h>".}: cint

+    POSIX_SPAWN_SETSIGMASK* {.importc, header: "<spawn.h>".}: cint

+

+when hasAioH:

+  proc aio_cancel*(a1: cint, a2: ptr Taiocb): cint {.importc, header: "<aio.h>".}

+  proc aio_error*(a1: ptr Taiocb): cint {.importc, header: "<aio.h>".}

+  proc aio_fsync*(a1: cint, a2: ptr Taiocb): cint {.importc, header: "<aio.h>".}

+  proc aio_read*(a1: ptr Taiocb): cint {.importc, header: "<aio.h>".}

+  proc aio_return*(a1: ptr Taiocb): int {.importc, header: "<aio.h>".}

+  proc aio_suspend*(a1: ptr ptr Taiocb, a2: cint, a3: ptr ttimespec): cint {.

+                   importc, header: "<aio.h>".}

+  proc aio_write*(a1: ptr Taiocb): cint {.importc, header: "<aio.h>".}

+  proc lio_listio*(a1: cint, a2: ptr ptr Taiocb, a3: cint,

+               a4: ptr Tsigevent): cint {.importc, header: "<aio.h>".}

 

 # arpa/inet.h

 proc htonl*(a1: int32): int32 {.importc, header: "<arpa/inet.h>".}

@@ -1371,8 +1387,8 @@ proc mq_unlink*(a1: cstring): cint {.importc, header: "<mqueue.h>".}
 

 proc getpwnam*(a1: cstring): ptr TPasswd {.importc, header: "<pwd.h>".}

 proc getpwuid*(a1: Tuid): ptr TPasswd {.importc, header: "<pwd.h>".}

-proc getpwnam_r(a1: cstring, a2: ptr Tpasswd, a3: cstring, a4: int,

-                a5: ptr ptr Tpasswd): cint {.importc, header: "<pwd.h>".}

+proc getpwnam_r*(a1: cstring, a2: ptr Tpasswd, a3: cstring, a4: int,

+                 a5: ptr ptr Tpasswd): cint {.importc, header: "<pwd.h>".}

 proc getpwuid_r*(a1: Tuid, a2: ptr Tpasswd, a3: cstring,

       a4: int, a5: ptr ptr Tpasswd): cint {.importc, header: "<pwd.h>".}

 proc endpwent*() {.importc, header: "<pwd.h>".}

@@ -1771,46 +1787,47 @@ proc pselect*(a1: cint, a2, a3, a4: var Tfd_set, a5: var ttimespec,
 proc select*(a1: cint, a2, a3, a4: var Tfd_set, a5: var ttimeval): cint {.

              importc, header: "<sys/select.h>".}

 

-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>".}

-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>".}

-proc posix_spawnattr_getsigdefault*(a1: var tposix_spawnattr,

-          a2: var Tsigset): cint {.importc, header: "<spawn.h>".}

-proc posix_spawnattr_getflags*(a1: var tposix_spawnattr,

-          a2: var cshort): cint {.importc, header: "<spawn.h>".}

-proc posix_spawnattr_getpgroup*(a1: var tposix_spawnattr,

-          a2: var tpid): cint {.importc, header: "<spawn.h>".}

-proc posix_spawnattr_getschedparam*(a1: var tposix_spawnattr,

-          a2: var tsched_param): cint {.importc, header: "<spawn.h>".}

-proc posix_spawnattr_getschedpolicy*(a1: var tposix_spawnattr,

-          a2: var cint): cint {.importc, header: "<spawn.h>".}

-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_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_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_setsigmask*(a1: var tposix_spawnattr,

-          a2: var tsigset): cint {.importc, header: "<spawn.h>".}

-proc posix_spawnp*(a1: var tpid, a2: cstring,

-          a3: var tposix_spawn_file_actions,

-          a4: var tposix_spawnattr,

-          a5, a6: cstringArray): cint {.importc, header: "<spawn.h>".}

+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>".}

+  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>".}

+  proc posix_spawnattr_getsigdefault*(a1: var tposix_spawnattr,

+            a2: var Tsigset): cint {.importc, header: "<spawn.h>".}

+  proc posix_spawnattr_getflags*(a1: var tposix_spawnattr,

+            a2: var cshort): cint {.importc, header: "<spawn.h>".}

+  proc posix_spawnattr_getpgroup*(a1: var tposix_spawnattr,

+            a2: var tpid): cint {.importc, header: "<spawn.h>".}

+  proc posix_spawnattr_getschedparam*(a1: var tposix_spawnattr,

+            a2: var tsched_param): cint {.importc, header: "<spawn.h>".}

+  proc posix_spawnattr_getschedpolicy*(a1: var tposix_spawnattr,

+            a2: var cint): cint {.importc, header: "<spawn.h>".}

+  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_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_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_setsigmask*(a1: var tposix_spawnattr,

+            a2: var tsigset): cint {.importc, header: "<spawn.h>".}

+  proc posix_spawnp*(a1: var tpid, a2: cstring,

+            a3: var tposix_spawn_file_actions,

+            a4: var tposix_spawnattr,

+            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>".}

diff --git a/lib/process.nim b/lib/process.nim
deleted file mode 100644
index 8806264b9..000000000
--- a/lib/process.nim
+++ /dev/null
@@ -1,1009 +0,0 @@
-#

-#

-#            Nimrod's Runtime Library

-#        (c) Copyright 2008 Andreas Rumpf

-#

-#    See the file "copying.txt", included in this

-#    distribution, for details about the copyright.

-#

-

-

-interface

-

-type

-  TProcess = opaque

-

-proc

-  open(out p: TProcess, command, workingDir: string,

-

-implementation

-

-

-Uses Classes,

-     pipes,

-     SysUtils;

-

-Type

-  TProcessOption = (poRunSuspended,poWaitOnExit,

-                    poUsePipes,poStderrToOutPut,

-                    poNoConsole,poNewConsole,

-                    poDefaultErrorMode,poNewProcessGroup,

-                    poDebugProcess,poDebugOnlyThisProcess);

-

-  TShowWindowOptions = (swoNone,swoHIDE,swoMaximize,swoMinimize,swoRestore,swoShow,

-                        swoShowDefault,swoShowMaximized,swoShowMinimized,

-                        swoshowMinNOActive,swoShowNA,swoShowNoActivate,swoShowNormal);

-

-  TStartupOption = (suoUseShowWindow,suoUseSize,suoUsePosition,

-                    suoUseCountChars,suoUseFillAttribute);

-

-  TProcessPriority = (ppHigh,ppIdle,ppNormal,ppRealTime);

-

-  TProcessOptions = Set of TPRocessOption;

-  TstartUpoptions = set of TStartupOption;

-

-

-Type

-  TProcess = Class (TComponent)

-  Private

-    FProcessOptions : TProcessOptions;

-    FStartupOptions : TStartupOptions;

-    FProcessID : Integer;

-    FThreadID : Integer;

-    FProcessHandle : Thandle;

-    FThreadHandle : Thandle;

-    FFillAttribute : Cardinal;

-    FApplicationName : string;

-    FConsoleTitle : String;

-    FCommandLine : String;

-    FCurrentDirectory : String;

-    FDeskTop : String;

-    FEnvironment : Tstrings;

-    FExitCode : Cardinal;

-    FShowWindow : TShowWindowOptions;

-    FInherithandles : Boolean;

-    FInputSTream  : TOutputPipeStream;

-    FOutputStream : TInPutPipeStream;

-    FStdErrStream : TInputPipeStream;

-    FRunning : Boolean;

-    FPRocessPriority : TProcessPriority;

-    dwXCountchars,

-    dwXSize,

-    dwYsize,

-    dwx,

-    dwYcountChars,

-    dwy : Cardinal;

-    Procedure FreeStreams;

-    Function  GetExitStatus : Integer;

-    Function  GetRunning : Boolean;

-    Function  GetWindowRect : TRect;

-    Procedure SetWindowRect (Value : TRect);

-    Procedure SetShowWindow (Value : TShowWindowOptions);

-    Procedure SetWindowColumns (Value : Cardinal);

-    Procedure SetWindowHeight (Value : Cardinal);

-    Procedure SetWindowLeft (Value : Cardinal);

-    Procedure SetWindowRows (Value : Cardinal);

-    Procedure SetWindowTop (Value : Cardinal);

-    Procedure SetWindowWidth (Value : Cardinal);

-    Procedure CreateStreams(InHandle,OutHandle,Errhandle : Longint);

-    procedure SetApplicationname(const Value: String);

-    procedure SetProcessOptions(const Value: TProcessOptions);

-    procedure SetActive(const Value: Boolean);

-    procedure SetEnvironment(const Value: TStrings);

-    function  PeekExitStatus: Boolean;

-    procedure CloseProcessHandles;

-  Public

-    Constructor Create (AOwner : TComponent);override;

-    Destructor Destroy; override;

-    Procedure Execute; virtual;

-    Function Resume : Integer; virtual;

-    Function Suspend : Integer; virtual;

-    Function Terminate (AExitCode : Integer): Boolean; virtual;

-    Function WaitOnExit : DWord;

-    Property WindowRect : Trect Read GetWindowRect Write SetWindowRect;

-    Property Handle : THandle Read FProcessHandle;

-    Property ProcessHandle : THandle Read FProcessHandle;

-    Property ThreadHandle : THandle Read FThreadHandle;

-    Property ProcessID : Integer Read FProcessID;

-    Property ThreadID : Integer Read FThreadID;

-    Property Input  : TOutPutPipeStream Read FInPutStream;

-    Property OutPut : TInputPipeStream  Read FOutPutStream;

-    Property StdErr : TinputPipeStream  Read FStdErrStream;

-    Property ExitStatus : Integer Read GetExitStatus;

-    Property InheritHandles : Boolean Read FInheritHandles Write FInheritHandles;

-  Published

-    Property Active : Boolean Read Getrunning Write SetActive;

-    Property ApplicationName : String Read FApplicationname Write SetApplicationname;

-    Property CommandLine : String Read FCommandLine Write FCommandLine;

-    Property ConsoleTitle : String Read FConsoleTitle Write FConsoleTitle;

-    Property CurrentDirectory : String Read FCurrentDirectory Write FCurrentDirectory;

-    Property DeskTop : String Read FDeskTop Write FDeskTop;

-    Property Environment : TStrings Read FEnvironment Write SetEnvironment;

-    Property Options : TProcessOptions Read FProcessOptions Write SetPRocessOptions;

-    Property Priority : TProcessPriority Read FProcessPriority Write FProcessPriority;

-    Property StartUpOptions : TStartUpOptions Read FStartUpOptions Write FStartupOptions;

-    Property Running : Boolean Read GetRunning;

-    Property ShowWindow : TShowWindowOptions Read FShowWindow Write SetShowWindow;

-    Property WindowColumns : Cardinal Read dwXCountchars Write SetWindowColumns;

-    Property WindowHeight : Cardinal Read dwYsize Write SetWindowHeight;

-    Property WindowLeft : Cardinal Read dwx Write SetWindowLeft;

-    Property WindowRows : Cardinal Read dwYcountChars Write SetWindowRows;

-    Property WindowTop : Cardinal Read dwy Write SetWindowTop ;

-    Property WindowWidth : Cardinal Read dwXsize Write SetWindowWidth;

-    Property FillAttribute : Cardinal read FFillAttribute Write FFillAttribute;

-  end;

-

-implementation

-

-{

-  Win32 Process .inc.

-}

-

-uses Windows;

-

-Const

-  PriorityConstants : Array [TProcessPriority] of Cardinal =

-                      (HIGH_PRIORITY_CLASS,IDLE_PRIORITY_CLASS,

-                       NORMAL_PRIORITY_CLASS,REALTIME_PRIORITY_CLASS);

-

-procedure TProcess.CloseProcessHandles;

-begin

-  if (FProcessHandle<>0) then

-    CloseHandle(FProcessHandle);

-  if (FThreadHandle<>0) then

-    CloseHandle(FThreadHandle);

-end;

-

-Function TProcess.PeekExitStatus : Boolean;

-

-begin

-  GetExitCodeProcess(ProcessHandle,FExitCode);

-  Result:=(FExitCode<>Still_Active);

-end;

-

-Function GetStartupFlags (P : TProcess): Cardinal;

-

-begin

-  With P do

-    begin

-    Result:=0;

-    if poUsePipes in FProcessOptions then

-       Result:=Result or Startf_UseStdHandles;

-    if suoUseShowWindow in FStartupOptions then

-      Result:=Result or startf_USESHOWWINDOW;

-    if suoUSESIZE in FStartupOptions then

-      Result:=Result or startf_usesize;

-    if suoUsePosition in FStartupOptions then

-      Result:=Result or startf_USEPOSITION;

-    if suoUSECOUNTCHARS in FStartupoptions then

-      Result:=Result or startf_usecountchars;

-    if suoUsefIllAttribute in FStartupOptions then

-      Result:=Result or startf_USEFILLATTRIBUTE;

-    end;

-end;

-

-Function GetCreationFlags(P : TProcess) : Cardinal;

-

-begin

-  With P do

-    begin

-    Result:=0;

-    if poNoConsole in FProcessOptions then

-      Result:=Result or Detached_Process;

-    if poNewConsole in FProcessOptions then

-      Result:=Result or Create_new_console;

-    if poNewProcessGroup in FProcessOptions then

-      Result:=Result or CREATE_NEW_PROCESS_GROUP;

-    If poRunSuspended in FProcessOptions Then

-      Result:=Result or Create_Suspended;

-    if poDebugProcess in FProcessOptions Then

-      Result:=Result or DEBUG_PROCESS;

-    if poDebugOnlyThisProcess in FProcessOptions Then

-      Result:=Result or DEBUG_ONLY_THIS_PROCESS;

-    if poDefaultErrorMode in FProcessOptions Then

-      Result:=Result or CREATE_DEFAULT_ERROR_MODE;

-    result:=result or PriorityConstants[FProcessPriority];

-    end;

-end;

-

-Function StringsToPChars(List : TStrings): pointer;

-

-var

-  EnvBlock: string;

-  I: Integer;

-

-begin

-  EnvBlock := '';

-  For I:=0 to List.Count-1 do

-    EnvBlock := EnvBlock + List[i] + #0;

-  EnvBlock := EnvBlock + #0;

-  GetMem(Result, Length(EnvBlock));

-  CopyMemory(Result, @EnvBlock[1], Length(EnvBlock));

-end;

-

-Procedure InitProcessAttributes(P : TProcess; Var PA : TSecurityAttributes);

-

-begin

-  FillChar(PA,SizeOf(PA),0);

-  PA.nLength := SizeOf(PA);

-end;

-

-Procedure InitThreadAttributes(P : TProcess; Var TA : TSecurityAttributes);

-

-begin

-  FillChar(TA,SizeOf(TA),0);

-  TA.nLength := SizeOf(TA);

-end;

-

-Procedure InitStartupInfo(P : TProcess; Var SI : STARTUPINFO);

-

-Const

-  SWC : Array [TShowWindowOptions] of Cardinal =

-             (0,SW_HIDE,SW_Maximize,SW_Minimize,SW_Restore,SW_Show,

-             SW_ShowDefault,SW_ShowMaximized,SW_ShowMinimized,

-               SW_showMinNOActive,SW_ShowNA,SW_ShowNoActivate,SW_ShowNormal);

-

-begin

-  FillChar(SI,SizeOf(SI),0);

-  With SI do

-    begin

-    dwFlags:=GetStartupFlags(P);

-    if P.FShowWindow<>swoNone then

-     dwFlags:=dwFlags or Startf_UseShowWindow

-    else

-      dwFlags:=dwFlags and not Startf_UseShowWindow;

-    wShowWindow:=SWC[P.FShowWindow];

-    if (poUsePipes in P.Options) then

-      begin

-      dwFlags:=dwFlags or Startf_UseStdHandles;

-      end;

-    if P.FillAttribute<>0 then

-      begin

-      dwFlags:=dwFlags or Startf_UseFillAttribute;

-      dwFillAttribute:=P.FillAttribute;

-      end;

-     dwXCountChars:=P.WindowColumns;

-     dwYCountChars:=P.WindowRows;

-     dwYsize:=P.WindowHeight;

-     dwXsize:=P.WindowWidth;

-     dwy:=P.WindowTop;

-     dwX:=P.WindowLeft;

-     end;

-end;

-

-Procedure CreatePipes(Var HI,HO,HE : Thandle; Var SI : TStartupInfo; CE : Boolean);

-

-  Procedure DoCreatePipeHandles(Var H1,H2 : THandle);

-

-  Var

-    I,O : Longint;

-

-  begin

-    CreatePipeHandles(I,O);

-    H1:=Thandle(I);

-    H2:=THandle(O);

-  end;

-

-

-

-

-begin

-  DoCreatePipeHandles(SI.hStdInput,HI);

-  DoCreatePipeHandles(HO,Si.hStdOutput);

-  if CE then

-    DoCreatePipeHandles(HE,SI.hStdError)

-  else

-    begin

-    SI.hStdError:=SI.hStdOutput;

-    HE:=HO;

-    end;

-end;

-

-

-Procedure TProcess.Execute;

-

-

-Var

-  PName,PDir,PCommandLine : PChar;

-  FEnv: pointer;

-  FCreationFlags : Cardinal;

-  FProcessAttributes : TSecurityAttributes;

-  FThreadAttributes : TSecurityAttributes;

-  FProcessInformation : TProcessInformation;

-  FStartupInfo : STARTUPINFO;

-  HI,HO,HE : THandle;

-

-begin

-  FInheritHandles:=True;

-  PName:=Nil;

-  PCommandLine:=Nil;

-  PDir:=Nil;

-  If FApplicationName<>'' then

-    PName:=Pchar(FApplicationName);

-  If FCommandLine<>'' then

-    PCommandLine:=Pchar(FCommandLine);

-  If FCurrentDirectory<>'' then

-    PDir:=Pchar(FCurrentDirectory);

-  if FEnvironment.Count<>0 then

-    FEnv:=StringsToPChars(FEnvironment)

-  else

-    FEnv:=Nil;

-  Try

-    FCreationFlags:=GetCreationFlags(Self);

-    InitProcessAttributes(Self,FProcessAttributes);

-    InitThreadAttributes(Self,FThreadAttributes);

-    InitStartupInfo(Self,FStartUpInfo);

-    If poUsePipes in FProcessOptions then

-      CreatePipes(HI,HO,HE,FStartupInfo,Not(poStdErrToOutPut in FProcessOptions));

-    Try

-      If Not CreateProcess (PName,PCommandLine,@FProcessAttributes,@FThreadAttributes,

-                   FInheritHandles,FCreationFlags,FEnv,PDir,FStartupInfo,

-                   fProcessInformation) then

-        Raise Exception.CreateFmt('Failed to execute %s : %d',[FCommandLine,GetLastError]);

-      FProcessHandle:=FProcessInformation.hProcess;

-      FThreadHandle:=FProcessInformation.hThread;

-      FProcessID:=FProcessINformation.dwProcessID;

-    Finally

-      if POUsePipes in FProcessOptions then

-        begin

-        FileClose(FStartupInfo.hStdInput);

-        FileClose(FStartupInfo.hStdOutput);

-        if Not (poStdErrToOutPut in FProcessOptions) then

-          FileClose(FStartupInfo.hStdError);

-        CreateStreams(HI,HO,HE);

-        end;

-    end;

-    FRunning:=True;

-  Finally

-    If FEnv<>Nil then

-      FreeMem(FEnv);

-  end;

-  if not (csDesigning in ComponentState) and // This would hang the IDE !

-     (poWaitOnExit in FProcessOptions) and

-      not (poRunSuspended in FProcessOptions) then

-    WaitOnExit;

-end;

-

-Function TProcess.WaitOnExit : Dword;

-

-begin

-  Result:=WaitForSingleObject (FProcessHandle,Infinite);

-  If Result<>Wait_Failed then

-    GetExitStatus;

-  FRunning:=False;

-end;

-

-Function TProcess.Suspend : Longint;

-

-begin

-  Result:=SuspendThread(ThreadHandle);

-end;

-

-Function TProcess.Resume : LongInt;

-

-begin

-  Result:=ResumeThread(ThreadHandle);

-end;

-

-Function TProcess.Terminate(AExitCode : Integer) : Boolean;

-

-begin

-  Result:=False;

-  If ExitStatus=Still_active then

-    Result:=TerminateProcess(Handle,AexitCode);

-end;

-

-Procedure TProcess.SetShowWindow (Value : TShowWindowOptions);

-

-

-begin

-  FShowWindow:=Value;

-end;

-

-// ---------------------------- end of platform dependant code --------------

-

-{

-  Unix Process .inc.

-}

-

-uses

-   Unix,

-   Baseunix;

-

-

-

-Const

-  PriorityConstants : Array [TProcessPriority] of Integer =

-                      (20,20,0,-20);

-

-Const

-  GeometryOption : String = '-geometry';

-  TitleOption : String ='-title';

-

-

-

-procedure TProcess.CloseProcessHandles;

-

-begin

- // Do nothing. Win32 call.

-end;

-

-Function TProcess.PeekExitStatus : Boolean;

-

-begin

-  Result:=fpWaitPid(Handle,@FExitCode,WNOHANG)=Handle;

-  If Result then

-    FExitCode:=wexitstatus(FExitCode)

-  else

-    FexitCode:=0;

-end;

-

-Type

-  TPCharArray = Array[Word] of pchar;

-  PPCharArray = ^TPcharArray;

-

-Function StringsToPCharList(List : TStrings) : PPChar;

-

-Var

-  I : Integer;

-  S : String;

-

-begin

-  I:=(List.Count)+1;

-  GetMem(Result,I*sizeOf(PChar));

-  PPCharArray(Result)^[List.Count]:=Nil;

-  For I:=0 to List.Count-1 do

-    begin

-    S:=List[i];

-    Result[i]:=StrNew(PChar(S));

-    end;

-end;

-

-Procedure FreePCharList(List : PPChar);

-

-Var

-  I : integer;

-

-begin

-  I:=0;

-  While List[i]<>Nil do

-    begin

-    StrDispose(List[i]);

-    Inc(I);

-    end;

-  FreeMem(List);

-end;

-

-

-Procedure CommandToList(S : String; List : TStrings);

-

-  Function GetNextWord : String;

-

-  Const

-    WhiteSpace = [' ',#8,#10];

-    Literals = ['"',''''];

-

-  Var

-    Wstart,wend : Integer;

-    InLiteral : Boolean;

-    LastLiteral : char;

-

-  begin

-    WStart:=1;

-    While (WStart<=Length(S)) and (S[WStart] in WhiteSpace) do

-      Inc(WStart);

-    WEnd:=WStart;

-    InLiteral:=False;

-    LastLiteral:=#0;

-    While (Wend<=Length(S)) and (Not (S[Wend] in WhiteSpace) or InLiteral) do

-      begin

-      if S[Wend] in Literals then

-        If InLiteral then

-          InLiteral:=Not (S[Wend]=LastLiteral)

-        else

-          begin

-          InLiteral:=True;

-          LastLiteral:=S[Wend];

-          end;

-       inc(wend);

-       end;

-     Result:=Copy(S,WStart,WEnd-WStart);

-     Result:=StringReplace(Result,'"','',[rfReplaceAll]);

-     Result:=StringReplace(Result,'''','',[rfReplaceAll]);

-     While (WEnd<=Length(S)) and (S[Wend] in WhiteSpace) do

-       inc(Wend);

-     Delete(S,1,WEnd-1);

-

-  end;

-

-Var

-  W : String;

-

-begin

-  While Length(S)>0 do

-    begin

-    W:=GetNextWord;

-    If (W<>'') then

-      List.Add(W);

-    end;

-end;

-

-

-Function MakeCommand(P : TProcess) : PPchar;

-

-Const

-  SNoCommandLine = 'Cannot execute empty command-line';

-

-Var

-  Cmd : String;

-  S  : TStringList;

-  G : String;

-

-begin

-  if (P.ApplicationName='') then

-    begin

-    If (P.CommandLine='') then

-      Raise Exception.Create(SNoCommandline);

-    Cmd:=P.CommandLine;

-    end

-  else

-    begin

-    If (P.CommandLine='') then

-      Cmd:=P.ApplicationName

-    else

-      Cmd:=P.CommandLine;

-    end;

-  S:=TStringList.Create;

-  try

-    CommandToList(Cmd,S);

-    if poNewConsole in P.Options then

-      begin

-      S.Insert(0,'-e');

-      If (P.ApplicationName<>'') then

-        begin

-        S.Insert(0,P.ApplicationName);

-        S.Insert(0,'-title');

-        end;

-      if suoUseCountChars in P.StartupOptions then

-        begin

-        S.Insert(0,Format('%dx%d',[P.dwXCountChars,P.dwYCountChars]));

-        S.Insert(0,'-geometry');

-        end;

-      S.Insert(0,'xterm');

-      end;

-    if (P.ApplicationName<>'') then

-      begin

-      S.Add(TitleOption);

-      S.Add(P.ApplicationName);

-      end;

-    G:='';

-    if (suoUseSize in P.StartupOptions) then

-      g:=format('%dx%d',[P.dwXSize,P.dwYsize]);

-    if (suoUsePosition in P.StartupOptions) then

-      g:=g+Format('+%d+%d',[P.dwX,P.dwY]);

-    if G<>'' then

-      begin

-      S.Add(GeometryOption);

-      S.Add(g);

-      end;

-    Result:=StringsToPcharList(S);

-  Finally

-    S.free;

-  end;

-end;

-

-Function GetLastError : Integer;

-

-begin

-  Result:=-1;

-end;

-

-Type

-  TPipeEnd = (peRead,peWrite);

-  TPipePair = Array[TPipeEnd] of Integer;

-

-Procedure CreatePipes(Var HI,HO,HE : TPipePair; CE : Boolean);

-

-  Procedure CreatePair(Var P : TPipePair);

-

-   begin

-    If not CreatePipeHandles(P[peRead],P[peWrite]) then

-      Raise Exception.Create('Failed to create pipes');

-   end;

-

-  Procedure ClosePair(Var P : TPipePair);

-

-  begin

-    if (P[peRead]<>-1) then

-      FileClose(P[peRead]);

-    if (P[peWrite]<>-1) then

-      FileClose(P[peWrite]);

-  end;

-

-begin

-  HO[peRead]:=-1;HO[peWrite]:=-1;

-  HI[peRead]:=-1;HI[peWrite]:=-1;

-  HE[peRead]:=-1;HE[peWrite]:=-1;

-  Try

-    CreatePair(HO);

-    CreatePair(HI);

-    If CE then

-      CreatePair(HE);

-  except

-    ClosePair(HO);

-    ClosePair(HI);

-    If CE then

-      ClosePair(HE);

-    Raise;

-  end;

-end;

-

-Procedure TProcess.Execute;

-

-Var

-  HI,HO,HE : TPipePair;

-  PID      : Longint;

-  FEnv     : PPChar;

-  Argv     : PPChar;

-  fd       : Integer;

-  PName    : String;

-

-begin

-  If (poUsePipes in FProcessOptions) then

-    CreatePipes(HI,HO,HE,Not (poStdErrToOutPut in FProcessOptions));

-  Try

-    if FEnvironment.Count<>0 then

-      FEnv:=StringsToPcharList(FEnvironment)

-    else

-      FEnv:=Nil;

-    Try

-      Argv:=MakeCommand(Self);

-      Try

-        If (Argv<>Nil) and (ArgV[0]<>Nil) then

-          PName:=StrPas(Argv[0])

-        else

-          begin

-          // This should never happen, actually.

-          PName:=ApplicationName;

-          If (PName='') then

-            PName:=CommandLine;

-          end;

-        if (pos('/',PName)<>1) then

-          PName:=FileSearch(Pname,fpgetenv('PATH'));

-        Pid:=fpfork;

-        if Pid<0 then

-          Raise Exception.Create('Failed to Fork process');

-        if (PID>0) then

-          begin

-          // Parent process. Copy process information.

-          FProcessHandle:=PID;

-          FThreadHandle:=PID;

-          FProcessId:=PID;

-          //FThreadId:=PID;

-          end

-        else

-          begin

-          { We're in the child }

-          if (FCurrentDirectory<>'') then

-             ChDir(FCurrentDirectory);

-          if PoUsePipes in Options then

-            begin

-            fpdup2(HI[peRead],0);

-            fpdup2(HO[peWrite],1);

-            if (poStdErrToOutPut in Options) then

-              fpdup2(HO[peWrite],2)

-            else

-              fpdup2(HE[peWrite],2);

-            end

-          else if poNoConsole in Options then

-            begin

-            fd:=FileOpen('/dev/null',fmOpenReadWrite);

-            fpdup2(fd,0);

-            fpdup2(fd,1);

-            fpdup2(fd,2);

-            end;

-          if (poRunSuspended in Options) then

-            sigraise(SIGSTOP);

-          if FEnv<>Nil then

-            fpexecve(PName,Argv,Fenv)

-          else

-            fpexecv(PName,argv);

-          Halt(127);

-          end

-      Finally

-        FreePcharList(Argv);

-      end;

-    Finally

-      If (FEnv<>Nil) then

-        FreePCharList(FEnv);

-    end;

-  Finally

-    if POUsePipes in FProcessOptions then

-      begin

-      FileClose(HO[peWrite]);

-      FileClose(HI[peRead]);

-      if Not (poStdErrToOutPut in FProcessOptions) then

-        FileClose(HE[peWrite]);

-      CreateStreams(HI[peWrite],HO[peRead],HE[peRead]);

-      end;

-  end;

-  FRunning:=True;

-  if not (csDesigning in ComponentState) and // This would hang the IDE !

-     (poWaitOnExit in FProcessOptions) and

-      not (poRunSuspended in FProcessOptions) then

-    WaitOnExit;

-end;

-

-Function TProcess.WaitOnExit : Dword;

-

-begin

-  Result:=fpWaitPid(Handle,@FExitCode,0);

-  If Result=Handle then

-    FExitCode:=WexitStatus(FExitCode);

-  FRunning:=False;

-end;

-

-Function TProcess.Suspend : Longint;

-

-begin

-  If fpkill(Handle,SIGSTOP)<>0 then

-    Result:=-1

-  else

-    Result:=1;

-end;

-

-Function TProcess.Resume : LongInt;

-

-begin

-  If fpKill(Handle,SIGCONT)<>0 then

-    Result:=-1

-  else

-    Result:=0;

-end;

-

-Function TProcess.Terminate(AExitCode : Integer) : Boolean;

-

-begin

-  Result:=False;

-  Result:=fpkill(Handle,SIGTERM)=0;

-  If Result then

-    begin

-    If Running then

-      Result:=fpkill(Handle,SIGKILL)=0;

-    end;

-  GetExitStatus;

-end;

-

-Procedure TProcess.SetShowWindow (Value : TShowWindowOptions);

-

-begin

-  FShowWindow:=Value;

-end;

-

-// ---------------------------------------------------------------------------

-

-

-Constructor TProcess.Create (AOwner : TComponent);

-begin

-  Inherited;

-  FProcessPriority:=ppNormal;

-  FShowWindow:=swoNone;

-  FInheritHandles:=True;

-  FEnvironment:=TStringList.Create;

-end;

-

-Destructor TProcess.Destroy;

-

-begin

-  FEnvironment.Free;

-  FreeStreams;

-  CloseProcessHandles;

-  Inherited Destroy;

-end;

-

-Procedure TProcess.FreeStreams;

-

-  procedure FreeStream(var S: THandleStream);

-

-  begin

-    if (S<>Nil) then

-      begin

-      FileClose(S.Handle);

-      FreeAndNil(S);

-      end;

-  end;

-

-begin

-  If FStdErrStream<>FOutputStream then

-    FreeStream(FStdErrStream);

-  FreeStream(FOutputStream);

-  FreeStream(FInputStream);

-end;

-

-

-Function TProcess.GetExitStatus : Integer;

-

-begin

-  If FRunning then

-    PeekExitStatus;

-  Result:=FExitCode;

-end;

-

-

-Function TProcess.GetRunning : Boolean;

-

-begin

-  IF FRunning then

-    FRunning:=Not PeekExitStatus;

-  Result:=FRunning;

-end;

-

-

-Procedure TProcess.CreateStreams(InHandle,OutHandle,Errhandle : Longint);

-

-begin

-  FreeStreams;

-  FInputStream:=TOutputPipeStream.Create (InHandle);

-  FOutputStream:=TInputPipeStream.Create (OutHandle);

-  if Not (poStdErrToOutPut in FProcessOptions) then

-    FStdErrStream:=TInputPipeStream.Create(ErrHandle);

-end;

-

-

-Procedure TProcess.SetWindowColumns (Value : Cardinal);

-

-begin

-  if Value<>0 then

-    Include(FStartUpOptions,suoUseCountChars);

-  dwXCountChars:=Value;

-end;

-

-

-Procedure TProcess.SetWindowHeight (Value : Cardinal);

-

-begin

-  if Value<>0 then

-    include(FStartUpOptions,suoUsePosition);

-  dwYSize:=Value;

-end;

-

-Procedure TProcess.SetWindowLeft (Value : Cardinal);

-

-begin

-  if Value<>0 then

-    Include(FStartUpOptions,suoUseSize);

-  dwx:=Value;

-end;

-

-Procedure TProcess.SetWindowTop (Value : Cardinal);

-

-begin

-  if Value<>0 then

-    Include(FStartUpOptions,suoUsePosition);

-  dwy:=Value;

-end;

-

-Procedure TProcess.SetWindowWidth (Value : Cardinal);

-begin

-  If (Value<>0) then

-    Include(FStartUpOptions,suoUseSize);

-  dwXSize:=Value;

-end;

-

-Function TProcess.GetWindowRect : TRect;

-begin

-  With Result do

-    begin

-    Left:=dwx;

-    Right:=dwx+dwxSize;

-    Top:=dwy;

-    Bottom:=dwy+dwysize;

-    end;

-end;

-

-Procedure TProcess.SetWindowRect (Value : Trect);

-begin

-  Include(FStartupOptions,suouseSize);

-  Include(FStartupOptions,suoUsePosition);

-  With Value do

-    begin

-    dwx:=Left;

-    dwxSize:=Right-Left;

-    dwy:=Top;

-    dwySize:=Bottom-top;

-    end;

-end;

-

-

-Procedure TProcess.SetWindowRows (Value : Cardinal);

-

-begin

-  if Value<>0 then

-    Include(FStartUpOptions,suoUseCountChars);

-  dwYCountChars:=Value;

-end;

-

-procedure TProcess.SetApplicationname(const Value: String);

-begin

-  FApplicationname := Value;

-  If (csdesigning in ComponentState) and

-     (FCommandLine='') then

-    FCommandLine:=Value;

-end;

-

-procedure TProcess.SetProcessOptions(const Value: TProcessOptions);

-begin

-  FProcessOptions := Value;

-  If poNewConsole in FPRocessOptions then

-    Exclude(FProcessoptions,poNoConsole);

-  if poRunSuspended in FProcessOptions then

-    Exclude(FPRocessoptions,poWaitOnExit);

-end;

-

-procedure TProcess.SetActive(const Value: Boolean);

-begin

-  if (Value<>GetRunning) then

-    If Value then

-      Execute

-    else

-      Terminate(0);

-end;

-

-procedure TProcess.SetEnvironment(const Value: TStrings);

-begin

-  FEnvironment.Assign(Value);

-end;

-

-function CallProcess(const command: string): string;

-const

-  READ_BYTES = 2048;

-// executes the command and returns the program's output

-var

-  M: TMemoryStream;

-  P: TProcess;

-  n: LongInt;

-  BytesRead: LongInt;

-begin

-  // We cannot use poWaitOnExit here since we don't

-  // know the size of the output. On Linux the size of the

-  // output pipe is 2 kB. If the output data is more, we

-  // need to read the data. This isn't possible since we are

-  // waiting. So we get a deadlock here.

-  //

-  // A temp Memorystream is used to buffer the output

-

-  M := TMemoryStream.Create;

-  BytesRead := 0;

-

-  P := TProcess.Create(nil);

-  P.CommandLine := Command;

-  P.Options := [poUsePipes];

-  P.Execute;

-  while P.Running do begin

-    // make sure we have room

-    M.SetSize(BytesRead + READ_BYTES);

-

-    // try reading it

-    n := P.Output.Read((M.Memory + BytesRead)^, READ_BYTES);

-    if n > 0 then

-      Inc(BytesRead, n)

-    else

-      // no data, wait 100 ms

-      Sleep(100)

-  end;

-  // read last part

-  repeat

-    // make sure we have room

-    M.SetSize(BytesRead + READ_BYTES);

-    // try reading it

-    n := P.Output.Read((M.Memory + BytesRead)^, READ_BYTES);

-    if n > 0 then Inc(BytesRead, n)

-  until n <= 0;

-  M.SetSize(BytesRead);

-

-  setLength(result, bytesRead);

-  m.read(result[1], bytesRead);

-  P.Free; M.Free;

-end;

-

-end.

diff --git a/lib/repr.nim b/lib/repr.nim
index 34a2ce2fb..2f29d839d 100644
--- a/lib/repr.nim
+++ b/lib/repr.nim
@@ -85,7 +85,7 @@ proc reprSetAux(result: var string, p: pointer, typ: PNimType) =
   else:
     var a = cast[pbyteArray](p)
     for i in 0 .. typ.size*8-1:
-      if (a[i div 8] and (1 shl (i mod 8))) != 0:
+      if (ze(a[i div 8]) and (1 shl (i mod 8))) != 0:
         if elemCounter > 0: add result, ", "
         addSetElem(result, i+typ.node.len, typ.base)
         inc(elemCounter)
diff --git a/lib/sets.nim b/lib/sets.nim
index 3aeae235c..395a2286c 100644
--- a/lib/sets.nim
+++ b/lib/sets.nim
@@ -24,36 +24,36 @@ include cntbits
 
 proc unionSets(res: var TNimSet, a, b: TNimSet, len: int) {.
     compilerproc, inline.} =
-  for i in countup(0, len-1): res[i] = toU8(ze(a[i]) or ze(b[i]))
+  for i in countup(0, len-1): res[i] = a[i] or b[i]
 
 proc diffSets(res: var TNimSet, a, b: TNimSet, len: int) {.
     compilerproc, inline.} =
-  for i in countup(0, len-1): res[i] = toU8(ze(a[i]) and not ze(b[i]))
+  for i in countup(0, len-1): res[i] = a[i] and not b[i]
 
 proc intersectSets(res: var TNimSet, a, b: TNimSet, len: int) {.
     compilerproc, inline.} =
-  for i in countup(0, len-1): res[i] = toU8(ze(a[i]) and ze(b[i]))
+  for i in countup(0, len-1): res[i] = a[i] and b[i]
 
 proc symdiffSets(res: var TNimSet, a, b: TNimSet, len: int) {.
     compilerproc, inline.} =
-  for i in countup(0, len-1): res[i] = toU8(ze(a[i]) xor ze(b[i]))
+  for i in countup(0, len-1): res[i] = a[i] xor b[i]
 
 proc containsSets(a, b: TNimSet, len: int): bool {.compilerproc, inline.} =
   # s1 <= s2 ?
   for i in countup(0, len-1):
-    if (ze(a[i]) and not ze(b[i])) != 0: return false
+    if (a[i] and not b[i]) != 0'i8: return false
   return true
 
 proc containsSubsets(a, b: TNimSet, len: int): bool {.compilerproc, inline.} =
   # s1 < s2 ?
   result = false # assume they are equal
   for i in countup(0, len-1):
-    if (ze(a[i]) and not ze(b[i])) != 0: return false
-    if ze(a[i]) != ze(b[i]): result = true # they are not equal
+    if (a[i]) and not b[i]) != 0'i32: return false
+    if a[i] != b[i]: result = true # they are not equal
 
 proc equalSets(a, b: TNimSet, len: int): bool {.compilerproc, inline.} =
   for i in countup(0, len-1):
-    if ze(a[i]) != ze(b[i]): return false
+    if a[i] != b[i]: return false
   return true
 
 proc cardSet(s: TNimSet, len: int): int {.compilerproc, inline.} =
@@ -68,7 +68,7 @@ proc inSet(s: TNimSet, elem: int): bool {.compilerproc, inline.} =
   return (s[elem /% WORD_SIZE] and (1 shl (elem %% WORD_SIZE))) != 0
 
 proc inclSets(s: var TNimSet, e: int) {.compilerproc, inline.} =
-  s[e /% WORD_SIZE] = toU8(s[e /% WORD_SIZE] or (1 shl (e %% WORD_SIZE)))
+  s[e /% WORD_SIZE] = s[e /% WORD_SIZE] or toU8(1 shl (e %% WORD_SIZE))
 
 proc inclRange(s: var TNimSet, first, last: int) {.compilerproc.} =
   # not very fast, but it is seldom used
@@ -80,8 +80,8 @@ proc smallInclRange(s: var int, first, last: int) {.compilerproc.} =
     s = s or (1 shl (i %% sizeof(int)*8))
 
 proc exclSets(s: var TNimSet, e: int) {.compilerproc, inline.} =
-  s[e /% WORD_SIZE] = toU8(s[e /% WORD_SIZE] and
-    not (1 shl (e %% WORD_SIZE)))
+  s[e /% WORD_SIZE] = s[e /% WORD_SIZE] and
+    not toU8(1 shl (e %% WORD_SIZE))
 
 proc smallContainsSubsets(a, b: int): bool {.compilerProc, inline.} =
   # not used by new code generator
diff --git a/lib/smallalc.nim b/lib/smallalc.nim
deleted file mode 100644
index b5a99db35..000000000
--- a/lib/smallalc.nim
+++ /dev/null
@@ -1,19 +0,0 @@
-# Handle small allocations efficiently
-# We allocate and manage memory by pages. All objects within a page belong to
-# the same type. Thus, we safe the type field. Minimum requested block is
-# 8 bytes. Alignment is 8 bytes. 
-
-
-type
-  TChunk {.pure.} = object
-    kind: TChunkKind
-    prev, next: ptr TChunk
-    
-  TSmallChunk = object of TChunk # all objects of the same size
-    typ: PNimType
-    free: int
-    data: array [0.., int]
-  
-proc allocSmall(typ: PNimType): pointer =
-  
-  
\ No newline at end of file
diff --git a/lib/strtabs.nim b/lib/strtabs.nim
index dd57fdd17..e6abaee6f 100644
--- a/lib/strtabs.nim
+++ b/lib/strtabs.nim
@@ -11,11 +11,11 @@
 ##  from strings to strings. Supports a case-sensitive, case-insensitive and
 ##  style-insensitive mode. An efficient string substitution operator  ``%``
 ##  for the string table is also provided.
-  
-import 
+
+import
   os, hashes, strutils
 
-type 
+type
   TStringTableMode* = enum    # describes the tables operation mode
     modeCaseSensitive,        # the table is case sensitive
     modeCaseInsensitive,      # the table is case insensitive
@@ -29,16 +29,16 @@ type
 
   PStringTable* = ref TStringTable ## use this type to declare string tables
 
-proc newStringTable*(keyValuePairs: openarray[string], 
+proc newStringTable*(keyValuePairs: openarray[string],
                      mode: TStringTableMode = modeCaseSensitive): PStringTable
   ## creates a new string table with given key value pairs.
   ## Example::
-  ##   var mytab = newStringTable("key1", "val1", "key2", "val2", 
+  ##   var mytab = newStringTable("key1", "val1", "key2", "val2",
   ##                              modeCaseInsensitive)
 
 proc newStringTable*(mode: TStringTableMode = modeCaseSensitive): PStringTable
   ## creates a new string table that is empty.
-                     
+
 proc `[]=`*(t: PStringTable, key, val: string)
   ## puts a (key, value)-pair into `t`.
 
@@ -54,13 +54,13 @@ proc len*(t: PStringTable): int =
   ## returns the number of keys in `t`.
   result = t.counter
 
-iterator pairs*(t: PStringTable): tuple[key, value: string] = 
+iterator pairs*(t: PStringTable): tuple[key, value: string] =
   ## iterates over any (key, value) pair in the table `t`.
   for h in 0..high(t.data):
     if not isNil(t.data[h].key):
       yield (t.data[h].key, t.data[h].val)
 
-type 
+type
   TFormatFlag* = enum         # flags for the `%` operator
     useEnvironment,           # use environment variable if the ``$key``
                               # is not found in the table
@@ -75,136 +75,131 @@ proc `%`*(f: string, t: PStringTable, flags: set[TFormatFlag] = {}): string
 
 # implementation
 
-const 
+const
   growthFactor = 2
   startSize = 64
 
-proc newStringTable(mode: TStringTableMode = modeCaseSensitive): PStringTable = 
+proc newStringTable(mode: TStringTableMode = modeCaseSensitive): PStringTable =
   new(result)
   result.mode = mode
   result.counter = 0
-  result.data = []
-  setlen(result.data, startSize) # XXX
+  newSeq(result.data, startSize)
 
-proc newStringTable(keyValuePairs: openarray[string], 
-                    mode: TStringTableMode = modeCaseSensitive): PStringTable = 
+proc newStringTable(keyValuePairs: openarray[string],
+                    mode: TStringTableMode = modeCaseSensitive): PStringTable =
   result = newStringTable(mode)
   var i = 0
-  while i < high(keyValuePairs): 
+  while i < high(keyValuePairs):
     result[keyValuePairs[i]] = keyValuePairs[i + 1]
     inc(i, 2)
 
-proc myhash(t: PStringTable, key: string): THash = 
+proc myhash(t: PStringTable, key: string): THash =
   case t.mode
   of modeCaseSensitive: result = hashes.hash(key)
   of modeCaseInsensitive: result = hashes.hashIgnoreCase(key)
   of modeStyleInsensitive: result = hashes.hashIgnoreStyle(key)
-  
-proc myCmp(t: PStringTable, a, b: string): bool = 
+
+proc myCmp(t: PStringTable, a, b: string): bool =
   case t.mode
   of modeCaseSensitive: result = cmp(a, b) == 0
   of modeCaseInsensitive: result = cmpIgnoreCase(a, b) == 0
   of modeStyleInsensitive: result = cmpIgnoreStyle(a, b) == 0
-  
-proc mustRehash(length, counter: int): bool = 
+
+proc mustRehash(length, counter: int): bool =
   assert(length > counter)
   result = (length * 2 < counter * 3) or (length - counter < 4)
 
-const 
-  EmptySeq = []
-
-proc nextTry(h, maxHash: THash): THash = 
+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).
-  
-proc RawGet(t: PStringTable, key: string): int = 
+
+proc RawGet(t: PStringTable, key: string): int =
   var h: THash
   h = myhash(t, key) and high(t.data) # start with real hash value
-  while not isNil(t.data[h].key): 
-    if mycmp(t, t.data[h].key, key): 
+  while not isNil(t.data[h].key):
+    if mycmp(t, t.data[h].key, key):
       return h
     h = nextTry(h, high(t.data))
   result = - 1
 
-proc `[]`(t: PStringTable, key: string): string = 
+proc `[]`(t: PStringTable, key: string): string =
   var index: int
   index = RawGet(t, key)
   if index >= 0: result = t.data[index].val
   else: result = ""
-  
-proc hasKey(t: PStringTable, key: string): bool = 
+
+proc hasKey(t: PStringTable, key: string): bool =
   result = rawGet(t, key) >= 0
 
-proc RawInsert(t: PStringTable, data: var TKeyValuePairSeq, key, val: string) = 
+proc RawInsert(t: PStringTable, data: var TKeyValuePairSeq, key, val: string) =
   var h: THash
   h = myhash(t, key) and high(data)
-  while not isNil(data[h].key): 
+  while not isNil(data[h].key):
     h = nextTry(h, high(data))
   data[h].key = key
   data[h].val = val
 
-proc Enlarge(t: PStringTable) = 
+proc Enlarge(t: PStringTable) =
   var n: TKeyValuePairSeq
-  n = emptySeq
-  setlen(n, len(t.data) * growthFactor)
-  for i in countup(0, high(t.data)): 
+  newSeq(n, len(t.data) * growthFactor)
+  for i in countup(0, high(t.data)):
     if not isNil(t.data[i].key): RawInsert(t, n, t.data[i].key, t.data[i].val)
   swap(t.data, n)
 
-proc `[]=`(t: PStringTable, key, val: string) = 
+proc `[]=`(t: PStringTable, key, val: string) =
   var index = RawGet(t, key)
-  if index >= 0: 
+  if index >= 0:
     t.data[index].val = val
-  else: 
+  else:
     if mustRehash(len(t.data), t.counter): Enlarge(t)
     RawInsert(t, t.data, key, val)
     inc(t.counter)
 
-proc RaiseFormatException(s: string) = 
+proc RaiseFormatException(s: string) =
   var e: ref EInvalidValue
   new(e)
   e.msg = "format string: key not found: " & s
   raise e
 
-proc getValue(t: PStringTable, flags: set[TFormatFlag], key: string): string = 
+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 == ""):
     if useKey in flags: result = '$' & key
     elif not (useEmpty in flags): raiseFormatException(key)
-  
-proc `%`(f: string, t: PStringTable, flags: set[TFormatFlag] = {}): string = 
-  const 
+
+proc `%`(f: string, t: PStringTable, flags: set[TFormatFlag] = {}): string =
+  const
     PatternChars = {'a'..'z', 'A'..'Z', '0'..'9', '_', '\x80'..'\xFF'}
-  var 
+  var
     i, j: int
     key: string
   result = ""
   i = strStart
-  while i <= len(f) + strStart - 1: 
-    if f[i] == '$': 
+  while i <= len(f) + strStart - 1:
+    if f[i] == '$':
       case f[i + 1]
-      of '$': 
+      of '$':
         add(result, '$')
         inc(i, 2)
-      of '{': 
+      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)
         i = j + 1
-      of 'a'..'z', 'A'..'Z', '\x80'..'\xFF', '_': 
+      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)
         i = j
-      else: 
+      else:
         add(result, f[i])
         inc(i)
-    else: 
+    else:
       add(result, f[i])
       inc(i)
-  
+
diff --git a/lib/strutils.nim b/lib/strutils.nim
index 039a06251..7e1a329d6 100644
--- a/lib/strutils.nim
+++ b/lib/strutils.nim
@@ -24,6 +24,7 @@ template newException(exceptn, message: expr): expr =
     e.msg = message
     e
 
+
 type
   TCharSet* = set[char] # for compability for Nim
 
@@ -73,6 +74,9 @@ proc findSubStr*(sub: char, s: string, start: int = 0): int {.noSideEffect.}
 proc replaceStr*(s, sub, by: string): string {.noSideEffect.}
   ## Replaces `sub` in `s` by the string `by`.
 
+proc replaceStr*(s: string, sub, by: char): string {.noSideEffect.}
+  ## optimized version for characters.
+
 proc deleteStr*(s: var string, first, last: int)
   ## Deletes in `s` the characters at position `first`..`last`. This modifies
   ## `s` itself, it does not return a copy.
@@ -113,6 +117,43 @@ 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 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::
+  ##
+  ##   for line in lines("\nthis\nis\nan\n\nexample\n"):
+  ##     writeln(stdout, line)
+  ##
+  ## Results in::
+  ##
+  ##   ""
+  ##   "this"
+  ##   "is"
+  ##   "an"
+  ##   ""
+  ##   "example"
+  ##   ""
+  var first = 0
+  var last = 0
+  while true:
+    while s[last] notin {'\0', '\c', '\l'}: inc(last)
+    yield copy(s, first, last-1)
+    # skip newlines:
+    if s[last] == '\l': inc(last)
+    elif s[last] == '\c':
+      inc(last)
+      if s[last] == '\l': inc(last)
+    else: break # was '\0'
+    first = last
+
+proc splitLinesSeq*(s: string): seq[string] {.noSideEffect.} =
+  ## The same as `split`, but is a proc that returns a sequence of substrings.
+  result = @[]
+  for line in splitLines(s): add(result, line)
+
 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.
@@ -159,7 +200,8 @@ proc ParseBiggestInt*(s: string): biggestInt {.noSideEffect.}
 
 proc ParseFloat*(s: string): float {.noSideEffect.}
   ## Parses a decimal floating point value contained in `s`. If `s` is not
-  ## a valid floating point number, `EInvalidValue` is raised.
+  ## a valid floating point number, `EInvalidValue` is raised. ``NAN``,
+  ## ``INF``, ``-INF`` are also supported (case insensitive comparison).
   # XXX: make this biggestfloat.
 
 # the stringify and format operators:
@@ -344,7 +386,7 @@ proc cmpIgnoreStyle(a, b: string): int =
 # ---------- splitting -----------------------------------------------------
 
 proc splitSeq(s: string, seps: set[char]): seq[string] =
-  result = []
+  result = @[]
   for sub in split(s, seps): add result, sub
 
 # ---------------------------------------------------------------------------
@@ -469,6 +511,14 @@ proc replaceStr(s, sub, by: string): string =
   # copy the rest:
   add result, copy(s, i)
 
+proc replaceStr(s: string, sub, by: char): string =
+  result = newString(s.len)
+  var i = 0
+  while i < s.len:
+    if s[i] == sub: result[i] = by
+    else: result[i] = s[i]
+    inc(i)
+
 proc deleteStr(s: var string, first, last: int) =
   # example: "abc___uvwxyz\0"  (___ is to be deleted)
   # --> first == 3, last == 5
@@ -489,7 +539,7 @@ proc toHex(x: BiggestInt, len: int): string =
     shift: BiggestInt
   result = newString(len)
   for j in countdown(len-1, 0):
-    result[j] = HexChars[toU32(x shr shift) and 0xF]
+    result[j] = HexChars[toU32(x shr shift) and 0xF'i32]
     shift = shift + 4
 
 {.push overflowChecks: on.}
@@ -552,6 +602,16 @@ proc ParseFloat(s: string): float =
   elif s[i] == '-':
     sign = -1.0
     inc(i)
+  if s[i] == 'N' or s[i] == 'n':
+    if s[i+1] == 'A' or s[i+1] == 'a':
+      if s[i+2] == 'N' or s[i+2] == 'n':
+        if s[i+3] == '\0': return NaN
+    raise newException(EInvalidValue, "invalid float: " & s)
+  if s[i] == 'I' or s[i] == 'i':
+    if s[i+1] == 'N' or s[i+1] == 'n':
+      if s[i+2] == 'F' or s[i+2] == 'f':
+        if s[i+3] == '\0': return Inf*sign
+    raise newException(EInvalidValue, "invalid float: " & s)
   while s[i] in {'0'..'9'}:
     # Read integer part
     flags = flags or 1
@@ -572,7 +632,7 @@ proc ParseFloat(s: string): float =
     result = result / hd # this complicated way preserves precision
   # Again, read integer and fractional part
   if flags == 0:
-    raise newException(EInvalidValue, "invalid float:" & s)
+    raise newException(EInvalidValue, "invalid float: " & s)
   # Exponent?
   if s[i] in {'e', 'E'}:
     inc(i)
@@ -624,4 +684,113 @@ proc toBin*(x: BiggestInt, len: int): string =
     shift = shift + 1
     mask = mask shl 1
 
+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 ``\'``
+  ## * replaces any ``"`` by ``\"``
+  ## * replaces any other character in the set ``{'\0'..'\31', '\128'..'\255'}``
+  ##   by ``\xHH`` where ``HH`` is its hexadecimal value.
+  ## The procedure has been designed so that its output is usable for many
+  ## different common syntaxes. The resulting string is prefixed with
+  ## ``prefix`` and suffixed with ``suffix``. Both may be empty strings.
+  result = prefix
+  for c in items(s):
+    case c
+    of '\0'..'\31', '\128'..'\255':
+      add(result, '\\')
+      add(result, toHex(ord(c), 2))
+    of '\\': add(result, "\\\\")
+    of '\'': add(result, "\\'")
+    of '\"': add(result, "\\\"")
+    else: add(result, c)
+  add(result, suffix)
+
+proc editDistance*(a, b: string): int =
+  ## returns the edit distance between `s` and `t`. This uses the Levenshtein
+  ## distance algorithm with only a linear memory overhead. This implementation
+  ## is highly optimized!
+  var len1 = a.len
+  var len2 = b.len
+  if len1 > len2:
+    # make `b` the longer string
+    return editDistance(b, a)
+
+  # strip common prefix:
+  var s = 0
+  while a[s] == b[s] and a[s] != '\0':
+    inc(s)
+    dec(len1)
+    dec(len2)
+  # strip common suffix:
+  while len1 > 0 and len2 > 0 and a[s+len1-1] == b[s+len2-1]:
+    dec(len1)
+    dec(len2)
+  # trivial cases:
+  if len1 == 0: return len2
+  if len2 == 0: return len1
+
+  # another special case:
+  if len1 == 1:
+    for j in s..len2-1:
+      if a[s] == b[j]: return len2 - 1
+    return len2
+
+  inc(len1)
+  inc(len2)
+  var half = len1 shr 1
+  # initalize first row:
+  #var row = cast[ptr array[0..high(int) div 8, int]](alloc(len2 * sizeof(int)))
+  var row: seq[int]
+  newSeq(row, len2)
+  var e = s + len2 - 1 # end marker
+  for i in 1..len2 - half - 1: row[i] = i
+  row[0] = len1 - half - 1
+  for i in 1 .. len1 - 1:
+    var char1 = a[i + s - 1]
+    var char2p: int
+    var D, x: int
+    var p: int
+    if i >= len1 - half:
+      # skip the upper triangle:
+      var offset = i - len1 + half
+      char2p = offset
+      p = offset
+      var c3 = row[p] + ord(char1 != b[s + char2p])
+      inc(p)
+      inc(char2p)
+      x = row[p] + 1
+      D = x
+      if x > c3: x = c3
+      row[p] = x
+      inc(p)
+    else:
+      p = 1
+      char2p = 0
+      D = i
+      x = i
+    if i <= half + 1:
+      # skip the lower triangle:
+      e = len2 + i - half - 2
+    # main:
+    while p <= e:
+      dec(D)
+      var c3 = D + ord(char1 != b[char2p + s])
+      inc(char2p)
+      inc(x)
+      if x > c3: x = c3
+      D = row[p] + 1
+      if x > D: x = D
+      row[p] = x
+      inc(p)
+    # lower triangle sentinel:
+    if i <= half:
+      dec(D)
+      var c3 = D + ord(char1 != b[char2p + s])
+      inc(x)
+      if x > c3: x = c3
+      row[p] = x
+  result = row[e]
+  #dealloc(row)
+
 {.pop.}
diff --git a/lib/sysio.nim b/lib/sysio.nim
index 6da47eb20..8887effa8 100644
--- a/lib/sysio.nim
+++ b/lib/sysio.nim
@@ -19,7 +19,7 @@
 proc fputs(c: cstring, f: TFile) {.importc: "fputs", noDecl.}
 proc fgets(c: cstring, n: int, f: TFile): cstring {.importc: "fgets", noDecl.}
 proc fgetc(stream: TFile): int {.importc: "fgetc", nodecl.}
-proc ungetc(c: int, f: TFile) {.importc: "ungetc", nodecl.}
+proc ungetc(c: cint, f: TFile) {.importc: "ungetc", nodecl.}
 proc putc(c: Char, stream: TFile) {.importc: "putc", nodecl.}
 proc fprintf(f: TFile, frmt: CString) {.importc: "fprintf", nodecl, varargs.}
 proc strlen(c: cstring): int {.importc: "strlen", nodecl.}
@@ -33,7 +33,7 @@ var
   IOFBF {.importc: "_IOFBF", nodecl.}: cint
   IONBF {.importc: "_IONBF", nodecl.}: cint
 
-proc rawReadLine(f: TFile, result: var string) {.noStatic.} =
+proc rawReadLine(f: TFile, result: var string) =
   # of course this could be optimized a bit; but IO is slow anyway...
   # and it was difficult to get this CORRECT with Ansi C's methods
   var
@@ -41,13 +41,11 @@ proc rawReadLine(f: TFile, result: var string) {.noStatic.} =
   setLen(result, 0) # reuse the buffer!
   while True:
     c = fgetc(f)
-    if c < 0:
-      result = nil
-      break # EOF
-    if c == 10: break # LF
-    if c == 13:  # CR
+    if c < 0'i32: break # EOF
+    if c == 10'i32: break # LF
+    if c == 13'i32:  # CR
       c = fgetc(f) # is the next char LF?
-      if c != 10: ungetc(c, f) # no, put the character back
+      if c != 10'i32: ungetc(c, f) # no, put the character back
       break
     add result, chr(int(c))
 
@@ -72,7 +70,7 @@ proc readFile(filename: string): string =
 
 proc write(f: TFile, s: string) = fputs(s, f)
 proc write(f: TFile, i: int) = fprintf(f, "%ld", i)
-proc write(f: TFile, b: bool) = 
+proc write(f: TFile, b: bool) =
   if b: write(f, "true")
   else: write(f, "false")
 proc write(f: TFile, r: float) = fprintf(f, "%g", r)
@@ -117,11 +115,18 @@ proc OpenFile(f: var TFile, filename: string,
   result = (p != nil)
   f = cast[TFile](p)
   if bufSize > 0:
-    if setvbuf(f, nil, IOFBF, bufSize) != 0:
+    if setvbuf(f, nil, IOFBF, bufSize) != 0'i32:
       raise newException(EOutOfMemory, "out of memory")
   elif bufSize == 0:
     discard setvbuf(f, nil, IONBF, 0)
 
+proc fdopen(filehandle: TFileHandle, mode: cstring): TFile {.
+  importc: pccHack & "fdopen", header: "<stdio.h>".}
+
+proc openFile(f: var TFile, filehandle: TFileHandle, mode: TFileMode): bool =
+  f = fdopen(filehandle, FormatOpen[mode])
+  result = f != nil
+
 # C routine that is used here:
 proc fread(buf: Pointer, size, n: int, f: TFile): int {.
   importc: "fread", noDecl.}
diff --git a/lib/sysstr.nim b/lib/sysstr.nim
index a3e5ab9f8..921a92ff5 100644
--- a/lib/sysstr.nim
+++ b/lib/sysstr.nim
@@ -16,53 +16,55 @@
 # the programmer may not want
 
 type
-  TStringDesc {.importc, nodecl, final.} = object
-    len, space: int # len and space without counting the terminating zero
-    data: array[0..0, char] # for the '\0' character
+  # len and space without counting the terminating zero:
+  NimStringDesc {.compilerproc, final.} = object of TGenericSeq
+    data: array[0..100_000_000, char] # for the '\0' character
 
-  mstring {.importc: "string".} = ptr TStringDesc
+  NimString = ptr NimStringDesc
 
 # implementation:
 
 proc resize(old: int): int {.inline.} =
-  if old <= 0: return 1
+  if old <= 0: return 4
   elif old < 65536: return old * 2
   else: return old * 3 div 2 # for large arrays * 3/2 is better
 
-proc cmpStrings(a, b: mstring): int {.inline, compilerProc.} =
+proc cmpStrings(a, b: NimString): int {.inline, compilerProc.} =
   if a == b: return 0
   if a == nil: return -1
   if b == nil: return 1
   return c_strcmp(a.data, b.data)
 
-proc eqStrings(a, b: mstring): bool {.inline, compilerProc.} =
+proc eqStrings(a, b: NimString): bool {.inline, compilerProc.} =
   if a == b: return true
   if a == nil or b == nil: return false
   return a.len == b.len and
-    c_memcmp(a.data, b.data, a.len * sizeof(char)) == 0
-
-proc rawNewString(space: int): mstring {.compilerProc.} =
-  result = cast[mstring](newObj(addr(strDesc), sizeof(TStringDesc) + 
-                         space * sizeof(char)))
-  result.len = 0
-  result.space = space
-  result.data[0] = '\0'
-
-proc mnewString(len: int): mstring {.exportc.} =
+    c_memcmp(a.data, b.data, a.len * sizeof(char)) == 0'i32
+
+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
+  result.space = s
+  #result.data[0] = '\0'
+
+proc mnewString(len: int): NimString {.exportc.} =
   result = rawNewString(len)
   result.len = len
-  result.data[len] = '\0'
+  #result.data[len] = '\0'
 
-proc toNimStr(str: CString, len: int): mstring {.compilerProc.} =
+proc toNimStr(str: CString, len: int): NimString {.compilerProc.} =
   result = rawNewString(len)
   result.len = len
   c_memcpy(result.data, str, (len+1) * sizeof(Char))
   result.data[len] = '\0' # IO.readline relies on this!
 
-proc cstrToNimstr(str: CString): mstring {.compilerProc.} =
+proc cstrToNimstr(str: CString): NimString {.compilerProc.} =
   return toNimstr(str, c_strlen(str))
 
-proc copyString(src: mstring): mstring {.compilerProc.} =
+proc copyString(src: NimString): NimString {.compilerProc.} =
   if src == nil: return nil
   result = rawNewString(src.space)
   result.len = src.len
@@ -71,9 +73,7 @@ proc copyString(src: mstring): mstring {.compilerProc.} =
 proc hashString(s: string): int {.compilerproc.} =
   # the compiler needs exactly the same hash function!
   # this used to be used for efficient generation of string case statements
-  var
-    h: int
-  h = 0
+  var h = 0
   for i in 0..Len(s)-1:
     h = h +% Ord(s[i])
     h = h +% h shl 10
@@ -91,8 +91,7 @@ proc hashString(s: string): int {.compilerproc.} =
 #  setLength(var s: string, newlen: int)
 #    {.extern: "setLengthStr", noDecl, noSideEffect.}
 
-
-proc copyStrLast(s: mstring, start, last: int): mstring {.exportc.} =
+proc copyStrLast(s: NimString, start, last: int): NimString {.exportc.} =
   var
     len: int
   if start >= s.len: return mnewString(0) # BUGFIX
@@ -105,15 +104,19 @@ proc copyStrLast(s: mstring, start, last: int): mstring {.exportc.} =
   c_memcpy(result.data, addr(s.data[start]), len * sizeof(Char))
   result.data[len] = '\0'
 
-proc copyStr(s: mstring, start: int): mstring {.exportc.} =
+proc copyStr(s: NimString, start: int): NimString {.exportc.} =
   return copyStrLast(s, start, s.len-1)
 
-proc addChar(s: mstring, c: char): mstring {.compilerProc.} =
+proc addChar(s: NimString, c: char): NimString {.compilerProc.} =
   result = s
   if result.len >= result.space:
     result.space = resize(result.space)
-    result = cast[mstring](growObj(result,
-      sizeof(TStringDesc) + result.space * sizeof(char)))
+    result = cast[NimString](growObj(result,
+      sizeof(TGenericSeq) + (result.space+1) * sizeof(char)))
+    #var space = resize(result.space)
+    #result = rawNewString(space)
+    #copyMem(result, s, s.len * sizeof(char) + sizeof(TGenericSeq))
+    #result.space = space
   result.data[result.len] = c
   result.data[result.len+1] = '\0'
   inc(result.len)
@@ -149,27 +152,28 @@ proc addChar(s: mstring, c: char): mstring {.compilerProc.} =
 #   <generated C code>
 #   s = rawNewString(0);
 
-proc resizeString(dest: mstring, addlen: int): mstring {.compilerproc.} =
+proc resizeString(dest: NimString, addlen: int): NimString {.compilerproc.} =
   if dest.len + addLen + 1 <= dest.space: # BUGFIX: this is horrible!
     result = dest
   else: # slow path:
-    var
-      sp = max(resize(dest.space), dest.len + addLen + 1)
-    result = cast[mstring](growObj(dest, sizeof(TStringDesc) + 
-                           sp * sizeof(Char)))
-    # DO NOT UPDATE LEN YET: dest.len = newLen
+    var sp = max(resize(dest.space), dest.len + addLen + 1)
+    result = cast[NimString](growObj(dest, sizeof(TGenericSeq) +
+                           (sp+1) * sizeof(Char)))
     result.space = sp
+    #result = rawNewString(sp)
+    #copyMem(result, dest, dest.len * sizeof(char) + sizeof(TGenericSeq))
+    # DO NOT UPDATE LEN YET: dest.len = newLen
 
-proc appendString(dest, src: mstring) {.compilerproc, inline.} =
+proc appendString(dest, src: NimString) {.compilerproc, inline.} =
   c_memcpy(addr(dest.data[dest.len]), src.data, (src.len + 1) * sizeof(Char))
   inc(dest.len, src.len)
 
-proc appendChar(dest: mstring, c: char) {.compilerproc, inline.} =
+proc appendChar(dest: NimString, c: char) {.compilerproc, inline.} =
   dest.data[dest.len] = c
   dest.data[dest.len+1] = '\0'
   inc(dest.len)
 
-proc setLengthStr(s: mstring, newLen: int): mstring {.compilerProc.} =
+proc setLengthStr(s: NimString, newLen: int): NimString {.compilerProc.} =
   var n = max(newLen, 0)
   if n <= s.space:
     result = s
@@ -187,37 +191,54 @@ proc incrSeq(seq: PGenericSeq, elemSize: int): PGenericSeq {.compilerProc.} =
   #  add seq x  generates:
   #  seq = incrSeq(seq, sizeof(x));
   #  seq[seq->len-1] = x;
-  result = seq
-  if result.len >= result.space:
-    var
-      s: TAddress
-    result.space = resize(result.space)
-    result = cast[PGenericSeq](growObj(result, elemSize * result.space + 
-                               GenericSeqSize))
-    # set new elements to zero:
-    s = cast[TAddress](result)
-    zeroMem(cast[pointer](s + GenericSeqSize + (result.len * elemSize)),
-      (result.space - result.len) * elemSize)
-    # for i in len .. space-1:
-    #   seq->data[i] = 0
-  inc(result.len)
+  when false:
+    # broken version:
+    result = seq
+    if result.len >= result.space:
+      var s = resize(result.space)
+      result = cast[PGenericSeq](newSeq(extGetCellType(seq), s))
+      genericSeqAssign(result, seq, XXX)
+      #copyMem(result, seq, seq.len * elemSize + GenericSeqSize)
+    inc(result.len)  
+  else:  
+    result = seq
+    if result.len >= result.space:
+      result.space = resize(result.space)
+      result = cast[PGenericSeq](growObj(result, elemSize * result.space +
+                                 GenericSeqSize))
+      # set new elements to zero:
+      #var s = cast[TAddress](result)
+      #zeroMem(cast[pointer](s + GenericSeqSize + (result.len * elemSize)),
+      #  (result.space - result.len) * elemSize)
+      # for i in len .. space-1:
+      #   seq->data[i] = 0
+    inc(result.len)
 
 proc setLengthSeq(seq: PGenericSeq, elemSize, newLen: int): PGenericSeq {.
     compilerProc.} =
-  result = seq
-  if result.space < newLen:
-    var
-      s: TAddress
-    result.space = max(resize(result.space), newLen)
-    result = cast[PGenericSeq](growObj(result, elemSize * result.space + 
-                               GenericSeqSize))
-    # set new elements to zero (needed for GC):
-    s = cast[TAddress](result)
-    zeroMem(cast[pointer](s + GenericSeqSize + (result.len * elemSize)),
-      (result.space - result.len) * elemSize)
-  # Else: We could decref references, if we had type information here :-(
-  #       However, this does not happen often
-  result.len = newLen
+  when false:
+    # broken version:
+    result = seq
+    if result.space < newLen:
+      var s = max(resize(result.space), newLen)
+      result = cast[PGenericSeq](newSeq(extGetCellType(seq), s))
+    result.len = newLen
+  else:
+    result = seq
+    if result.space < newLen:
+      result.space = max(resize(result.space), newLen)
+      result = cast[PGenericSeq](growObj(result, elemSize * result.space +
+                                 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)
+      # and set the memory to nil:
+      zeroMem(cast[pointer](cast[TAddress](result) +% GenericSeqSize +%
+             (newLen*%elemSize)), (result.len-%newLen) *% elemSize)
+    result.len = newLen
 
 # --------------- other string routines ----------------------------------
 proc nimIntToStr(x: int): string {.compilerproc.} =
diff --git a/lib/system.nim b/lib/system.nim
index 285b921f8..97ad7297a 100644
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -19,6 +19,30 @@
 
 {.push hints: off.}
 
+type
+  int* {.magic: Int.} ## default integer type; bitwidth depends on
+                      ## architecture, but is always the same as a pointer
+  int8* {.magic: Int8.} ## signed 8 bit integer type
+  int16* {.magic: Int16.} ## signed 16 bit integer type
+  int32* {.magic: Int32.} ## signed 32 bit integer type
+  int64* {.magic: Int64.} ## signed 64 bit integer type
+  float* {.magic: Float.} ## default floating point type
+  float32* {.magic: Float32.} ## 32 bit floating point type
+  float64* {.magic: Float64.} ## 64 bit floating point type
+type # we need to start a new type section here, so that ``0`` can have a type
+  bool* {.magic: Bool.} = enum ## built-in boolean type
+    false = 0, true = 1
+
+type
+  char* {.magic: Char.} ## built-in 8 bit character type (unsigned)
+  string* {.magic: String.} ## built-in string type
+  cstring* {.magic: Cstring.} ## built-in cstring (*compatible string*) type
+  pointer* {.magic: Pointer.} ## built-in pointer type
+  TAnyEnum {.magic: AnyEnum.}
+
+type
+  `nil` {.magic: "Nil".}
+
 proc defined*[T] (x: T): bool {.magic: "Defined", noSideEffect.}
   ## Special comile-time procedure that checks whether `x` is
   ## defined. `x` has to be an identifier or a qualified identifier.
@@ -30,23 +54,6 @@ proc defined*[T] (x: T): bool {.magic: "Defined", noSideEffect.}
   ##     # provide our own toUpper proc here, because strutils is
   ##     # missing it.
 
-when defined(macosX):
-  {.define: useDL.}
-
-when defined(linux):
-  {.define: useDL.}
-
-when defined(unix):
-  # This may seem strange, but we cannot write "when not defined"
-  # here, because ``not`` has not been defined yet.
-  {.hint: "unix is defined".}
-else:
-  {.define: useDL.}
-  {.hint: "unix is not defined".}
-  # use Doug Lea's memory allocator; you can undefine it if you
-  # know that your system uses this library anyway (smaller code) or if
-  # your malloc() doesn't suck (most systems use it anyway)
-
 # these require compiler magic:
 proc `not` *(x: bool): bool {.magic: "Not", noSideEffect.}
   ## Boolean not; returns true iff ``x == false``.
@@ -98,9 +105,10 @@ type
     ## is an int type ranging from one to the maximum value
     ## of an int. This type is often useful for documentation and debugging.
 
-  TObject* = object ## the root of Nimrod's object hierarchy. Objects should
-                    ## inherit from TObject or one of its descendants. However,
-                    ## objects that have no ancestor are allowed.
+  TObject* {.exportc: "TNimObject".} =
+    object ## the root of Nimrod's object hierarchy. Objects should
+           ## inherit from TObject or one of its descendants. However,
+           ## objects that have no ancestor are allowed.
   PObject* = ref TObject ## reference to TObject
 
   E_Base* {.compilerproc.} = object of TObject ## base exception class;
@@ -206,8 +214,14 @@ proc dec*[T](x: var T, y = 1) {.magic: "Dec".}
   ## exist, ``EOutOfRange`` is raised or a compile time error occurs. This is a
   ## short notation for: ``x = pred(x, y)``.
 
+proc newSeq*[T](s: var seq[T], len: int) {.magic: "NewSeq".}
+  ## creates a new sequence of type ``seq[T]`` with length ``len``.
+  ## This is equivalent to ``s = []; setlen(s, len)``, but more
+  ## efficient since no relocation is needed.
+
 proc len*[T](x: openarray[T]): int {.magic: "LengthOpenArray", noSideEffect.}
 proc len*(x: string): int {.magic: "LengthStr", noSideEffect.}
+proc len*(x: cstring): int {.magic: "LengthStr", noSideEffect.}
 proc len*[I, T](x: array[I, T]): int {.magic: "LengthArray", noSideEffect.}
 proc len*[T](x: seq[T]): int {.magic: "LengthSeq", noSideEffect.}
   ## returns the length of an array, a sequence or a string.
@@ -236,79 +250,241 @@ proc chr*(u: range[0..255]): char {.magic: "Chr", noSideEffect.}
 # --------------------------------------------------------------------------
 # built-in operators
 
+proc ze*(x: int8): int {.magic: "Ze8ToI", noSideEffect.}
+  ## zero extends a smaller integer type to ``int``. This treats `x` as
+  ## unsigned.
+proc ze*(x: int16): int {.magic: "Ze16ToI", noSideEffect.}
+  ## zero extends a smaller integer type to ``int``. This treats `x` as
+  ## unsigned.
+
+proc ze64*(x: int8): int64 {.magic: "Ze8ToI64", noSideEffect.}
+  ## zero extends a smaller integer type to ``int64``. This treats `x` as
+  ## unsigned.
+proc ze64*(x: int16): int64 {.magic: "Ze16ToI64", noSideEffect.}
+  ## zero extends a smaller integer type to ``int64``. This treats `x` as
+  ## unsigned.
+
+proc ze64*(x: int32): int64 {.magic: "Ze32ToI64", noSideEffect.}
+  ## zero extends a smaller integer type to ``int64``. This treats `x` as
+  ## unsigned.
+proc ze64*(x: int): int64 {.magic: "ZeIToI64", noDecl, noSideEffect.}
+  ## zero extends a smaller integer type to ``int64``. This treats `x` as
+  ## unsigned. Does nothing if the size of an ``int`` is the same as ``int64``.
+  ## (This is the case on 64 bit processors.)
+
+proc toU8*(x: int): int8 {.magic: "ToU8", noSideEffect.}
+  ## treats `x` as unsigned and converts it to a byte by taking the last 8 bits
+  ## from `x`.
+proc toU16*(x: int): int16 {.magic: "ToU16", noSideEffect.}
+  ## treats `x` as unsigned and converts it to an ``int16`` by taking the last
+  ## 16 bits from `x`.
+proc toU32*(x: int64): int32 {.magic: "ToU32", noSideEffect.}
+  ## treats `x` as unsigned and converts it to an ``int32`` by taking the
+  ## last 32 bits from `x`.
+
+
 # integer calculations:
 proc `+` *(x: int): int {.magic: "UnaryPlusI", noSideEffect.}
+proc `+` *(x: int8): int8 {.magic: "UnaryPlusI", noSideEffect.}
+proc `+` *(x: int16): int16 {.magic: "UnaryPlusI", noSideEffect.}
+proc `+` *(x: int32): int32 {.magic: "UnaryPlusI", noSideEffect.}
+proc `+` *(x: int64): int64 {.magic: "UnaryPlusI64", noSideEffect.}
   ## Unary `+` operator for an integer. Has no effect.
 
 proc `-` *(x: int): int {.magic: "UnaryMinusI", noSideEffect.}
+proc `-` *(x: int8): int8 {.magic: "UnaryMinusI", noSideEffect.}
+proc `-` *(x: int16): int16 {.magic: "UnaryMinusI", noSideEffect.}
+proc `-` *(x: int32): int32 {.magic: "UnaryMinusI", noSideEffect.}
+proc `-` *(x: int64): int64 {.magic: "UnaryMinusI64", noSideEffect.}
   ## Unary `-` operator for an integer. Negates `x`.
 
 proc `not` *(x: int): int {.magic: "BitnotI", noSideEffect.}
+proc `not` *(x: int8): int8 {.magic: "BitnotI", noSideEffect.}
+proc `not` *(x: int16): int16 {.magic: "BitnotI", noSideEffect.}
+proc `not` *(x: int32): int32 {.magic: "BitnotI", noSideEffect.}
+proc `not` *(x: int64): int64 {.magic: "BitnotI64", noSideEffect.}
   ## computes the `bitwise complement` of the integer `x`.
 
 proc `+` *(x, y: int): int {.magic: "AddI", noSideEffect.}
+proc `+` *(x, y: int8): int8 {.magic: "AddI", noSideEffect.}
+proc `+` *(x, y: int16): int16 {.magic: "AddI", noSideEffect.}
+proc `+` *(x, y: int32): int32 {.magic: "AddI", noSideEffect.}
+proc `+` *(x, y: int64): int64 {.magic: "AddI64", noSideEffect.}
+  ## Binary `+` operator for an integer.
+
 proc `-` *(x, y: int): int {.magic: "SubI", noSideEffect.}
+proc `-` *(x, y: int8): int8 {.magic: "SubI", noSideEffect.}
+proc `-` *(x, y: int16): int16 {.magic: "SubI", noSideEffect.}
+proc `-` *(x, y: int32): int32 {.magic: "SubI", noSideEffect.}
+proc `-` *(x, y: int64): int64 {.magic: "SubI64", noSideEffect.}
+  ## Binary `-` operator for an integer.
+
 proc `*` *(x, y: int): int {.magic: "MulI", noSideEffect.}
+proc `*` *(x, y: int8): int8 {.magic: "MulI", noSideEffect.}
+proc `*` *(x, y: int16): int16 {.magic: "MulI", noSideEffect.}
+proc `*` *(x, y: int32): int32 {.magic: "MulI", noSideEffect.}
+proc `*` *(x, y: int64): int64 {.magic: "MulI64", noSideEffect.}
+  ## Binary `*` operator for an integer.
+
 proc `div` *(x, y: int): int {.magic: "DivI", noSideEffect.}
+proc `div` *(x, y: int8): int8 {.magic: "DivI", noSideEffect.}
+proc `div` *(x, y: int16): int16 {.magic: "DivI", noSideEffect.}
+proc `div` *(x, y: int32): int32 {.magic: "DivI", noSideEffect.}
+proc `div` *(x, y: int64): int64 {.magic: "DivI64", noSideEffect.}
   ## computes the integer division. This is roughly the same as
   ## ``floor(x/y)``.
+
 proc `mod` *(x, y: int): int {.magic: "ModI", noSideEffect.}
+proc `mod` *(x, y: int8): int8 {.magic: "ModI", noSideEffect.}
+proc `mod` *(x, y: int16): int16 {.magic: "ModI", noSideEffect.}
+proc `mod` *(x, y: int32): int32 {.magic: "ModI", noSideEffect.}
+proc `mod` *(x, y: int64): int64 {.magic: "ModI64", noSideEffect.}
   ## computes the integer modulo operation. This is the same as
   ## ``x - (x div y) * y``.
 
 proc `shr` *(x, y: int): int {.magic: "ShrI", noSideEffect.}
+proc `shr` *(x, y: int8): int8 {.magic: "ShrI", noSideEffect.}
+proc `shr` *(x, y: int16): int16 {.magic: "ShrI", noSideEffect.}
+proc `shr` *(x, y: int32): int32 {.magic: "ShrI", noSideEffect.}
+proc `shr` *(x, y: int64): int64 {.magic: "ShrI64", noSideEffect.}
   ## computes the `shift right` operation of `x` and `y`.
+
 proc `shl` *(x, y: int): int {.magic: "ShlI", noSideEffect.}
+proc `shl` *(x, y: int8): int8 {.magic: "ShlI", noSideEffect.}
+proc `shl` *(x, y: int16): int16 {.magic: "ShlI", noSideEffect.}
+proc `shl` *(x, y: int32): int32 {.magic: "ShlI", noSideEffect.}
+proc `shl` *(x, y: int64): int64 {.magic: "ShlI64", noSideEffect.}
   ## computes the `shift left` operation of `x` and `y`.
+
 proc `and` *(x, y: int): int {.magic: "BitandI", noSideEffect.}
+proc `and` *(x, y: int8): int8 {.magic: "BitandI", noSideEffect.}
+proc `and` *(x, y: int16): int16 {.magic: "BitandI", noSideEffect.}
+proc `and` *(x, y: int32): int32 {.magic: "BitandI", noSideEffect.}
+proc `and` *(x, y: int64): int64 {.magic: "BitandI64", noSideEffect.}
   ## computes the `bitwise and` of numbers `x` and `y`.
+
 proc `or` *(x, y: int): int {.magic: "BitorI", noSideEffect.}
+proc `or` *(x, y: int8): int8 {.magic: "BitorI", noSideEffect.}
+proc `or` *(x, y: int16): int16 {.magic: "BitorI", noSideEffect.}
+proc `or` *(x, y: int32): int32 {.magic: "BitorI", noSideEffect.}
+proc `or` *(x, y: int64): int64 {.magic: "BitorI64", noSideEffect.}
   ## computes the `bitwise or` of numbers `x` and `y`.
+
 proc `xor` *(x, y: int): int {.magic: "BitxorI", noSideEffect.}
+proc `xor` *(x, y: int8): int8 {.magic: "BitxorI", noSideEffect.}
+proc `xor` *(x, y: int16): int16 {.magic: "BitxorI", noSideEffect.}
+proc `xor` *(x, y: int32): int32 {.magic: "BitxorI", noSideEffect.}
+proc `xor` *(x, y: int64): int64 {.magic: "BitxorI64", noSideEffect.}
   ## computes the `bitwise xor` of numbers `x` and `y`.
 
 proc `==` *(x, y: int): bool {.magic: "EqI", noSideEffect.}
+proc `==` *(x, y: int8): bool {.magic: "EqI", noSideEffect.}
+proc `==` *(x, y: int16): bool {.magic: "EqI", noSideEffect.}
+proc `==` *(x, y: int32): bool {.magic: "EqI", noSideEffect.}
+proc `==` *(x, y: int64): bool {.magic: "EqI64", noSideEffect.}
+  ## Compares two integers for equality.
+
 proc `<=` *(x, y: int): bool {.magic: "LeI", noSideEffect.}
+proc `<=` *(x, y: int8): bool {.magic: "LeI", noSideEffect.}
+proc `<=` *(x, y: int16): bool {.magic: "LeI", noSideEffect.}
+proc `<=` *(x, y: int32): bool {.magic: "LeI", noSideEffect.}
+proc `<=` *(x, y: int64): bool {.magic: "LeI64", noSideEffect.}
+  ## Returns true iff `x` is less than or equal to `y`.
+
 proc `<`  *(x, y: int): bool {.magic: "LtI", noSideEffect.}
+proc `<`  *(x, y: int8): bool {.magic: "LtI", noSideEffect.}
+proc `<`  *(x, y: int16): bool {.magic: "LtI", noSideEffect.}
+proc `<`  *(x, y: int32): bool {.magic: "LtI", noSideEffect.}
+proc `<`  *(x, y: int64): bool {.magic: "LtI64", noSideEffect.}
+  ## Returns true iff `x` is less than `y`.
+
 proc abs*(x: int): int {.magic: "AbsI", noSideEffect.}
+proc abs*(x: int8): int8 {.magic: "AbsI", noSideEffect.}
+proc abs*(x: int16): int16 {.magic: "AbsI", noSideEffect.}
+proc abs*(x: int32): int32 {.magic: "AbsI", noSideEffect.}
+proc abs*(x: int64): int64 {.magic: "AbsI64", noSideEffect.}
+  ## returns the absolute value of `x`. If `x` is ``low(x)`` (that is
+  ## -MININT for its type), an overflow exception is thrown (if overflow
+  ## checking is turned on).
+
 proc min*(x, y: int): int {.magic: "MinI", noSideEffect.}
+proc min*(x, y: int8): int8 {.magic: "MinI", noSideEffect.}
+proc min*(x, y: int16): int16 {.magic: "MinI", noSideEffect.}
+proc min*(x, y: int32): int32 {.magic: "MinI", noSideEffect.}
+proc min*(x, y: int64): int64 {.magic: "MinI64", noSideEffect.}
+  ## The minimum value of two integers.
+
 proc max*(x, y: int): int {.magic: "MaxI", noSideEffect.}
+proc max*(x, y: int8): int8 {.magic: "MaxI", noSideEffect.}
+proc max*(x, y: int16): int16 {.magic: "MaxI", noSideEffect.}
+proc max*(x, y: int32): int32 {.magic: "MaxI", noSideEffect.}
+proc max*(x, y: int64): int64 {.magic: "MaxI64", noSideEffect.}
+  ## The maximum value of two integers.
 
-proc `+` *(x: int64): int64 {.magic: "UnaryPlusI64", noSideEffect.}
-proc `-` *(x: int64): int64 {.magic: "UnaryMinusI64", noSideEffect.}
-proc `not` *(x: int64): int64 {.magic: "BitnotI64", noSideEffect.}
-  ## computes the `bitwise complement` of the integer `x`.
+proc `+%` *(x, y: int): int {.magic: "AddU", noSideEffect.}
+proc `+%` *(x, y: int8): int8 {.magic: "AddU", noSideEffect.}
+proc `+%` *(x, y: int16): int16 {.magic: "AddU", noSideEffect.}
+proc `+%` *(x, y: int32): int32 {.magic: "AddU", noSideEffect.}
+proc `+%` *(x, y: int64): int64 {.magic: "AddU64", noSideEffect.}
+  ## treats `x` and `y` as unsigned and adds them. The result is truncated to
+  ## fit into the result. This implements modulo arithmetic. No overflow
+  ## errors are possible.
 
-proc `+` *(x, y: int64): int64 {.magic: "AddI64", noSideEffect.}
-  ## Unary `+` operator for an integer. Has no effect.
-proc `-` *(x, y: int64): int64 {.magic: "SubI64", noSideEffect.}
-  ## Unary `-` operator for an int64. Negates `x`.
-proc `*` *(x, y: int64): int64 {.magic: "MulI64", noSideEffect.}
-proc `div` *(x, y: int64): int64 {.magic: "DivI64", noSideEffect.}
-  ## computes the integer division. This is roughly the same as
-  ## ``floor(x/y)``.
-proc `mod` *(x, y: int64): int64 {.magic: "ModI64", noSideEffect.}
-  ## computes the integer modulo operation. This is the same as
-  ## ``x - (x div y) * y``.
-proc `shr` *(x, y: int64): int64 {.magic: "ShrI64", noSideEffect.}
-  ## computes the `shift right` operation of `x` and `y`.
-proc `shl` *(x, y: int64): int64 {.magic: "ShlI64", noSideEffect.}
-  ## computes the `shift left` operation of `x` and `y`.
-proc `and` *(x, y: int64): int64 {.magic: "BitandI64", noSideEffect.}
-  ## computes the `bitwise and` of numbers `x` and `y`.
-proc `or` *(x, y: int64): int64 {.magic: "BitorI64", noSideEffect.}
-  ## computes the `bitwise or` of numbers `x` and `y`.
-proc `xor` *(x, y: int64): int64 {.magic: "BitxorI64", noSideEffect.}
-  ## computes the `bitwise xor` of numbers `x` and `y`.
+proc `-%` *(x, y: int): int {.magic: "SubU", noSideEffect.}
+proc `-%` *(x, y: int8): int8 {.magic: "SubU", noSideEffect.}
+proc `-%` *(x, y: int16): int16 {.magic: "SubU", noSideEffect.}
+proc `-%` *(x, y: int32): int32 {.magic: "SubU", noSideEffect.}
+proc `-%` *(x, y: int64): int64 {.magic: "SubU64", noSideEffect.}
+  ## treats `x` and `y` as unsigned and subtracts them. The result is
+  ## truncated to fit into the result. This implements modulo arithmetic.
+  ## No overflow errors are possible.
 
-proc `==` *(x, y: int64): bool {.magic: "EqI64", noSideEffect.}
-proc `<=` *(x, y: int64): bool {.magic: "LeI64", noSideEffect.}
-proc `<`  *(x, y: int64): bool {.magic: "LtI64", noSideEffect.}
-proc abs*(x: int64): int64 {.magic: "AbsI64", noSideEffect.}
-proc min*(x, y: int64): int64 {.magic: "MinI64", noSideEffect.}
-proc max*(x, y: int64): int64 {.magic: "MaxI64", noSideEffect.}
+proc `*%` *(x, y: int): int {.magic: "MulU", noSideEffect.}
+proc `*%` *(x, y: int8): int8 {.magic: "MulU", noSideEffect.}
+proc `*%` *(x, y: int16): int16 {.magic: "MulU", noSideEffect.}
+proc `*%` *(x, y: int32): int32 {.magic: "MulU", noSideEffect.}
+proc `*%` *(x, y: int64): int64 {.magic: "MulU64", noSideEffect.}
+  ## treats `x` and `y` as unsigned and multiplies them. The result is
+  ## truncated to fit into the result. This implements modulo arithmetic.
+  ## No overflow errors are possible.
+
+proc `/%` *(x, y: int): int {.magic: "DivU", noSideEffect.}
+proc `/%` *(x, y: int8): int8 {.magic: "DivU", noSideEffect.}
+proc `/%` *(x, y: int16): int16 {.magic: "DivU", noSideEffect.}
+proc `/%` *(x, y: int32): int32 {.magic: "DivU", noSideEffect.}
+proc `/%` *(x, y: int64): int64 {.magic: "DivU64", noSideEffect.}
+  ## treats `x` and `y` as unsigned and divides them. The result is
+  ## truncated to fit into the result. This implements modulo arithmetic.
+  ## No overflow errors are possible.
+
+proc `%%` *(x, y: int): int {.magic: "ModU", noSideEffect.}
+proc `%%` *(x, y: int8): int8 {.magic: "ModU", noSideEffect.}
+proc `%%` *(x, y: int16): int16 {.magic: "ModU", noSideEffect.}
+proc `%%` *(x, y: int32): int32 {.magic: "ModU", noSideEffect.}
+proc `%%` *(x, y: int64): int64 {.magic: "ModU64", noSideEffect.}
+  ## treats `x` and `y` as unsigned and compute the modulo of `x` and `y`.
+  ## The result is truncated to fit into the result.
+  ## This implements modulo arithmetic.
+  ## No overflow errors are possible.
 
-# same for floating point:
+proc `<=%` *(x, y: int): bool {.magic: "LeU", noSideEffect.}
+proc `<=%` *(x, y: int8): bool {.magic: "LeU", noSideEffect.}
+proc `<=%` *(x, y: int16): bool {.magic: "LeU", noSideEffect.}
+proc `<=%` *(x, y: int32): bool {.magic: "LeU", noSideEffect.}
+proc `<=%` *(x, y: int64): bool {.magic: "LeU64", noSideEffect.}
+  ## treats `x` and `y` as unsigned and compares them.
+  ## Returns true iff ``unsigned(x) <= unsigned(y)``.
+
+proc `<%` *(x, y: int): bool {.magic: "LtU", noSideEffect.}
+proc `<%` *(x, y: int8): bool {.magic: "LtU", noSideEffect.}
+proc `<%` *(x, y: int16): bool {.magic: "LtU", noSideEffect.}
+proc `<%` *(x, y: int32): bool {.magic: "LtU", noSideEffect.}
+proc `<%` *(x, y: int64): bool {.magic: "LtU64", noSideEffect.}
+  ## treats `x` and `y` as unsigned and compares them.
+  ## Returns true iff ``unsigned(x) < unsigned(y)``.
+
+
+# floating point operations:
 proc `+` *(x: float): float {.magic: "UnaryPlusF64", noSideEffect.}
 proc `-` *(x: float): float {.magic: "UnaryMinusF64", noSideEffect.}
 proc `+` *(x, y: float): float {.magic: "AddF64", noSideEffect.}
@@ -423,11 +599,21 @@ proc cmp*[T](x, y: T): int =
 proc cmp*(x, y: string): int {.noSideEffect.}
   ## Compare proc for strings. More efficient than the generic version.
 
+proc `@` * [IDX, T](a: array[IDX, T]): seq[T] {.
+  magic: "ArrToSeq", nosideeffect.}
+  ## turns an array into a sequence. This most often useful for constructing
+  ## sequences with the array constructor: ``@[1, 2, 3]`` has the type 
+  ## ``seq[int]``, while ``[1, 2, 3]`` has the type ``array[0..2, int]``. 
+
 # concat operator:
-proc `&` * (x: string, y: char): string {.magic: "ConStrStr", noSideEffect.}
-proc `&` * (x: char, y: char): string {.magic: "ConStrStr", noSideEffect.}
-proc `&` * (x, y: string): string {.magic: "ConStrStr", noSideEffect.}
-proc `&` * (x: char, y: string): string {.magic: "ConStrStr", noSideEffect.}
+proc `&` * (x: string, y: char): string {.
+  magic: "ConStrStr", noSideEffect, merge.}
+proc `&` * (x: char, y: char): string {.
+  magic: "ConStrStr", noSideEffect, merge.}
+proc `&` * (x, y: string): string {.
+  magic: "ConStrStr", noSideEffect, merge.}
+proc `&` * (x: char, y: string): string {.
+  magic: "ConStrStr", noSideEffect, merge.}
   ## is the `concatenation operator`. It concatenates `x` and `y`.
 
 proc add * (x: var string, y: char) {.magic: "AppendStrCh".}
@@ -466,7 +652,7 @@ proc repr*[T](x: T): string {.magic: "Repr", noSideEffect.}
 type
   TAddress* = int
     ## is the signed integer type that should be used for converting
-    ## pointers to integer addresses.
+    ## pointers to integer addresses for readability.
 
 type
   BiggestInt* = int64
@@ -500,7 +686,7 @@ type # these work for most platforms:
     ## This is the same as the type ``long double`` in *C*.
     ## This C type is not supported by Nimrod's code generator
 
-  cstringArray* {.importc: "char**", nodecl.} = array [0..50_000, cstring]
+  cstringArray* {.importc: "char**", nodecl.} = ptr array [0..50_000, cstring]
     ## This is the same as the type ``char**`` in *C*.
 
   TEndian* = enum ## is a type describing the endianness of a processor.
@@ -512,50 +698,49 @@ type # these work for most platforms:
   PInt32* = ptr Int32 ## an alias for ``ptr int32``
 
 const
-  QuitSuccess* = 0
-    ## is the value that should be passed to ``quit`` to indicate
-    ## success.
-
-  QuitFailure* = 1
-    ## is the value that should be passed to ``quit`` to indicate
-    ## failure.
+  isMainModule* {.magic: "IsMainModule".}: bool = false
+    ## is true only when accessed in the main module. This works thanks to
+    ## compiler magic. It is useful to embed testing code in a module.
 
   CompileDate* {.magic: "CompileDate"}: string = "0000-00-00"
     ## is the date of compilation as a string of the form
-    ## ``YYYY-MM-DD``.
+    ## ``YYYY-MM-DD``. This works thanks to compiler magic.
 
   CompileTime* {.magic: "CompileTime"}: string = "00:00:00"
     ## is the time of compilation as a string of the form
-    ## ``HH:MM:SS``.
+    ## ``HH:MM:SS``. This works thanks to compiler magic.
 
   NimrodVersion* {.magic: "NimrodVersion"}: string = "0.0.0"
     ## is the version of Nimrod as a string.
+    ## This works thanks to compiler magic.
 
   NimrodMajor* {.magic: "NimrodMajor"}: int = 0
     ## is the major number of Nimrod's version.
+    ## This works thanks to compiler magic.
 
   NimrodMinor* {.magic: "NimrodMinor"}: int = 0
     ## is the minor number of Nimrod's version.
+    ## This works thanks to compiler magic.
 
   NimrodPatch* {.magic: "NimrodPatch"}: int = 0
     ## is the patch number of Nimrod's version.
+    ## This works thanks to compiler magic.
 
   cpuEndian* {.magic: "CpuEndian"}: TEndian = littleEndian
-    ## is the endianness of the target CPU. This is a valuable information
-    ## for low-level code only.
-
+    ## is the endianness of the target CPU. This is a valuable piece of
+    ## information for low-level code only. This works thanks to compiler magic.
 
 proc toFloat*(i: int): float {.
   magic: "ToFloat", noSideEffect, importc: "toFloat".}
   ## converts an integer `i` into a ``float``. If the conversion
-  ## fails, `EInvalidValue` is raised. Note that on most platforms the
-  ## conversion cannot fail, however.
+  ## fails, `EInvalidValue` is raised. However, on most platforms the
+  ## conversion cannot fail.
 
 proc toBiggestFloat*(i: biggestint): biggestfloat {.
   magic: "ToBiggestFloat", noSideEffect, importc: "toBiggestFloat".}
   ## converts an biggestint `i` into a ``biggestfloat``. If the conversion
-  ## fails, `EInvalidValue` is raised. Note that on most platforms the
-  ## conversion cannot fail, however.
+  ## fails, `EInvalidValue` is raised. However, on most platforms the
+  ## conversion cannot fail.
 
 proc toInt*(f: float): int {.
   magic: "ToInt", noSideEffect, importc: "toInt".}
@@ -569,15 +754,6 @@ proc toBiggestInt*(f: biggestfloat): biggestint {.
   ## rounds `f` if it does not contain an integer value. If the conversion
   ## fails (because `f` is infinite for example), `EInvalidValue` is raised.
 
-proc quit*(errorcode: int = QuitSuccess) {.
-  magic: "Exit", importc: "exit", noDecl, noReturn.}
-  ## stops the program immediately; before stopping the program the
-  ## "quit procedures" are called in the opposite order they were added
-  ## with ``addQuitProc``. ``quit`` never returns and ignores any
-  ## exception that may have been raised by the quit procedures.
-  ## It does *not* call the garbage collector to free all the memory,
-  ## unless a quit procedure calls ``GC_collect``.
-
 proc addQuitProc*(QuitProc: proc {.noconv.}) {.importc: "atexit", nodecl.}
   ## adds/registers a quit procedure. Each call to ``addQuitProc``
   ## registers another quit procedure. Up to 30 procedures can be
@@ -636,33 +812,29 @@ proc equalMem*(a, b: Pointer, size: int): bool {.
   ## *unsafe*.
 
 const
-  mallocHeader = if defined(useDL): "dlmalloc.h" else: "<stdlib.h>"
+  mallocHeader = "<stdlib.h>"
 
 proc alloc*(size: int): pointer {.
-  importc: if defined(useDL): "dlmalloc" else: "malloc",
-  header: mallocHeader, noconv.}
+  importc: "malloc", header: mallocHeader, noconv.}
   ## allocates a new memory block with at least ``size`` bytes. The
   ## block has to be freed with ``realloc(block, 0)`` or
   ## ``dealloc(block)``. The block is not initialized, so reading
   ## from it before writing to it is undefined behaviour!
 proc alloc0*(size: int): pointer {.
-  importc: if defined(useDL): "DL_ALLOC_0" else: "ALLOC_0",
-  header: mallocHeader, noconv.}
+  importc: "ALLOC_0", header: mallocHeader, noconv.}
   ## allocates a new memory block with at least ``size`` bytes. The
   ## block has to be freed with ``realloc(block, 0)`` or
   ## ``dealloc(block)``. The block is initialized with all bytes
   ## containing zero, so it is somewhat safer than ``alloc``.
 proc realloc*(p: Pointer, newsize: int): pointer {.
-  importc: if defined(useDL): "dlrealloc" else: "realloc",
-  header: mallocHeader, noconv.}
+  importc: "realloc", header: mallocHeader, noconv.}
   ## grows or shrinks a given memory block. If p is **nil** then a new
   ## memory block is returned. In either way the block has at least
   ## ``newsize`` bytes. If ``newsize == 0`` and p is not **nil**
   ## ``realloc`` calls ``dealloc(p)``. In other cases the block has to
   ## be freed with ``dealloc``.
 proc dealloc*(p: Pointer) {.
-  importc: if defined(useDL): "dlfree" else: "free",
-  header: mallocHeader, noconv.}
+  importc: "free", header: mallocHeader, noconv.}
   ## frees the memory allocated with ``alloc``, ``alloc0`` or
   ## ``realloc``. This procedure is dangerous! If one forgets to
   ## free the memory a leak occurs; if one tries to access freed
@@ -687,79 +859,6 @@ proc swap*[T](a, b: var T) {.magic: "Swap".}
   ## swaps the values `a` and `b`. This is often more efficient than
   ## ``tmp = a; a = b; b = tmp``. Particularly useful for sorting algorithms.
 
-proc ze*(x: int8): int {.magic: "Ze8ToI", noSideEffect.}
-  ## zero extends a smaller integer type to ``int``. This treats `x` as
-  ## unsigned.
-proc ze*(x: int16): int {.magic: "Ze16ToI", noSideEffect.}
-  ## zero extends a smaller integer type to ``int``. This treats `x` as
-  ## unsigned.
-
-proc ze64*(x: int8): int64 {.magic: "Ze8ToI64", noSideEffect.}
-  ## zero extends a smaller integer type to ``int64``. This treats `x` as
-  ## unsigned.
-proc ze64*(x: int16): int64 {.magic: "Ze16ToI64", noSideEffect.}
-  ## zero extends a smaller integer type to ``int64``. This treats `x` as
-  ## unsigned.
-
-proc ze64*(x: int32): int64 {.magic: "Ze32ToI64", noSideEffect.}
-  ## zero extends a smaller integer type to ``int64``. This treats `x` as
-  ## unsigned.
-proc ze64*(x: int): int64 {.magic: "ZeIToI64", noDecl, noSideEffect.}
-  ## zero extends a smaller integer type to ``int64``. This treats `x` as
-  ## unsigned. Does nothing if the size of an ``int`` is the same as ``int64``.
-  ## (This is the case on 64 bit processors.)
-
-proc toU8*(x: int): int8 {.magic: "ToU8", noSideEffect.}
-  ## treats `x` as unsigned and converts it to a byte by taking the last 8 bits
-  ## from `x`.
-proc toU16*(x: int): int16 {.magic: "ToU16", noSideEffect.}
-  ## treats `x` as unsigned and converts it to an ``int16`` by taking the last
-  ## 16 bits from `x`.
-proc toU32*(x: int64): int32 {.magic: "ToU32", noSideEffect.}
-  ## treats `x` as unsigned and converts it to an ``int32`` by taking the
-  ## last 32 bits from `x`.
-
-proc `+%` *(x, y: int): int {.magic: "AddU", noSideEffect.}
-proc `+%` *(x, y: int64): int64 {.magic: "AddU64", noSideEffect.}
-  ## treats `x` and `y` as unsigned and adds them. The result is truncated to
-  ## fit into the result. This implements modulo arithmetic. No overflow
-  ## errors are possible.
-
-proc `-%` *(x, y: int): int {.magic: "SubU", noSideEffect.}
-proc `-%` *(x, y: int64): int64 {.magic: "SubU64", noSideEffect.}
-  ## treats `x` and `y` as unsigned and subtracts them. The result is
-  ## truncated to fit into the result. This implements modulo arithmetic.
-  ## No overflow errors are possible.
-
-proc `*%` *(x, y: int): int {.magic: "MulU", noSideEffect.}
-proc `*%` *(x, y: int64): int64 {.magic: "MulU64", noSideEffect.}
-  ## treats `x` and `y` as unsigned and multiplies them. The result is
-  ## truncated to fit into the result. This implements modulo arithmetic.
-  ## No overflow errors are possible.
-
-proc `/%` *(x, y: int): int {.magic: "DivU", noSideEffect.}
-proc `/%` *(x, y: int64): int64 {.magic: "DivU64", noSideEffect.}
-  ## treats `x` and `y` as unsigned and divides them. The result is
-  ## truncated to fit into the result. This implements modulo arithmetic.
-  ## No overflow errors are possible.
-
-proc `%%` *(x, y: int): int {.magic: "ModU", noSideEffect.}
-proc `%%` *(x, y: int64): int64 {.magic: "ModU64", noSideEffect.}
-  ## treats `x` and `y` as unsigned and compute the modulo of `x` and `y`.
-  ## The result is truncated to fit into the result.
-  ## This implements modulo arithmetic.
-  ## No overflow errors are possible.
-
-proc `<=%` *(x, y: int): bool {.magic: "LeU", noSideEffect.}
-proc `<=%` *(x, y: int64): bool {.magic: "LeU64", noSideEffect.}
-  ## treats `x` and `y` as unsigned and compares them.
-  ## Returns true iff ``unsigned(x) <= unsigned(y)``.
-
-proc `<%` *(x, y: int): bool {.magic: "LtU", noSideEffect.}
-proc `<%` *(x, y: int64): bool {.magic: "LtU64", noSideEffect.}
-  ## treats `x` and `y` as unsigned and compares them.
-  ## Returns true iff ``unsigned(x) < unsigned(y)``.
-
 template `>=%` *(x, y: expr): expr = y <=% x
   ## treats `x` and `y` as unsigned and compares them.
   ## Returns true iff ``unsigned(x) >= unsigned(y)``.
@@ -803,17 +902,19 @@ proc getRefcount*[T](x: ref T): int {.importc: "getRefcount".}
   ## value is implementation-dependant.
 
 #proc writeStackTrace() {.export: "writeStackTrace".}
-proc getCurrentExceptionMsg*(): string {.exportc.}
-  ## retrieves the error message that was attached to the current
-  ## exception; if there is none, "" is returned.
+
+when not defined(NimrodVM):
+  proc getCurrentExceptionMsg*(): string {.exportc.}
+    ## retrieves the error message that was attached to the current
+    ## exception; if there is none, "" is returned.
 
 # new constants:
 const
-  inf* {.magic: "Inf".} = 0.0
+  inf* {.magic: "Inf".} = 1.0 / 0.0
     ## contains the IEEE floating point value of positive infinity.
-  neginf* {.magic: "NegInf".} = 0.0
+  neginf* {.magic: "NegInf".} = -inf
     ## contains the IEEE floating point value of negative infinity.
-  nan* {.magic: "NaN".} = 0.0
+  nan* {.magic: "NaN".} = 0.0 / 0.0
     ## contains an IEEE floating point value of *Not A Number*. Note
     ## that you cannot compare a floating point value to this value
     ## and expect a reasonable result - use the `classify` procedure
@@ -826,20 +927,16 @@ var
     ## Only code compiled with the ``debugger:on`` switch calls this hook.
 
 # GC interface:
-when defined(Unix) and not defined(macosX) and not defined(linux):
-  # BUGFIX for macosX
-  {.define: nativeDL.}
 
-when defined(useDL) or defined(nativeDL):
-  proc getOccupiedMem*(): int
-    ## returns the number of bytes that are owned by the process and hold data.
+proc getOccupiedMem*(): int
+  ## returns the number of bytes that are owned by the process and hold data.
 
-  proc getFreeMem*(): int
-    ## returns the number of bytes that are owned by the process, but do not
-    ## hold any meaningful data.
+proc getFreeMem*(): int
+  ## returns the number of bytes that are owned by the process, but do not
+  ## hold any meaningful data.
 
-  proc getTotalMem*(): int
-    ## returns the number of bytes that are owned by the process.
+proc getTotalMem*(): int
+  ## returns the number of bytes that are owned by the process.
 
 
 iterator countdown*[T](a, b: T, step = 1): T {.inline.} =
@@ -906,7 +1003,6 @@ iterator items*(a: cstring): char {.inline.} =
     yield a[i]
     inc(i)
 
-
 proc isNil*[T](x: seq[T]): bool {.noSideEffect, magic: "IsNil".}
 proc isNil*[T](x: ref T): bool {.noSideEffect, magic: "IsNil".}
 proc isNil*(x: string): bool {.noSideEffect, magic: "IsNil".}
@@ -922,23 +1018,20 @@ proc isNil*(x: cstring): bool {.noSideEffect, magic: "IsNil".}
                  # once in the system module.
 
 proc `&` *[T](x, y: seq[T]): seq[T] {.noSideEffect.} =
-  result = []
-  setLen(result, x.len + y.len)
+  newSeq(result, x.len + y.len)
   for i in 0..x.len-1:
     result[i] = x[i]
   for i in 0..y.len-1:
     result[i] = y[i]
 
 proc `&` *[T](x: seq[T], y: T): seq[T] {.noSideEffect.} =
-  result = []
-  setLen(x.len + 1)
+  newSeq(result, x.len + 1)
   for i in 0..x.len-1:
     result[i] = x[i]
   result[x.len] = y
 
 proc `&` *[T](x: T, y: seq[T]): seq[T] {.noSideEffect.} =
-  result = []
-  setLen(y.len + 1)
+  newSeq(result, y.len + 1)
   for i in 0..y.len-1:
     result[i] = y[i]
   result[y.len] = x
@@ -946,24 +1039,35 @@ proc `&` *[T](x: T, y: seq[T]): seq[T] {.noSideEffect.} =
 proc `&` *[T](x, y: T): seq[T] {.noSideEffect.} =
   return [x, y]
 
-when not defined(ECMAScript): # XXX make this local procs
-  proc seqToPtr*[T](x: seq[T]): pointer {.inline, nosideeffect.} =
-    result = cast[pointer](x)
-else:
-  proc seqToPtr*[T](x: seq[T]): pointer {.pure, nosideeffect.} =
-    asm """return `x`"""
-
-proc `==` *[T](x, y: seq[T]): bool {.noSideEffect.} =
-  ## Generic equals operator for sequences: relies on a equals operator for
-  ## the element type `T`.
-  if seqToPtr(x) == seqToPtr(y):
-    result = true
-  elif seqToPtr(x) == nil or seqToPtr(y) == nil:
-    result = false
-  elif x.len == y.len:
-    for i in 0..x.len-1:
-      if x[i] != y[i]: return false
-    result = true
+when not defined(NimrodVM):
+  when not defined(ECMAScript):
+    # XXX make this local procs
+    proc seqToPtr*[T](x: seq[T]): pointer {.inline, nosideeffect.} =
+      result = cast[pointer](x)
+  else:
+    proc seqToPtr*[T](x: seq[T]): pointer {.pure, nosideeffect.} =
+      asm """return `x`"""
+  
+  proc `==` *[T](x, y: seq[T]): bool {.noSideEffect.} =
+    ## Generic equals operator for sequences: relies on a equals operator for
+    ## the element type `T`.
+    if seqToPtr(x) == seqToPtr(y):
+      result = true
+    elif seqToPtr(x) == nil or seqToPtr(y) == nil:
+      result = false
+    elif x.len == y.len:
+      for i in 0..x.len-1:
+        if x[i] != y[i]: return false
+      result = true
+
+proc find*[T, S](a: T, item: S): int {.inline.} =
+  ## Returns the first index of `item` in `a` or -1 if not found. This requires
+  ## appropriate `==` and `items` procs to work.
+  result = 0
+  for i in items(a):
+    if i == item: return
+    inc(result)
+  result = -1
 
 # ----------------- FPU ------------------------------------------------------
 
@@ -985,7 +1089,7 @@ proc GC_enable*()
 
 proc GC_fullCollect*()
   ## forces a full garbage collection pass.
-  ## Ordinary code does not need to call this.
+  ## Ordinary code does not need to call this (and should not).
 
 type
   TGC_Strategy* = enum ## the strategy the GC should use for the application
@@ -1005,12 +1109,28 @@ proc GC_disableMarkAndSweep*()
   ## does not create cycles. Thus the mark and sweep phase can be deactivated
   ## and activated separately from the rest of the GC.
 
-
-{.push checks: off, line_dir: off, debugger: off,
-  assertions: on.}  # obviously we cannot generate checking operations here :-)
-                    # because it would yield into an endless recursion
-                    # however, stack-traces are available for most parts
-                    # of the code
+proc GC_getStatistics*(): string
+  ## returns an informative string about the GC's activity. This may be useful
+  ## for tweaking.
+  
+proc GC_ref*[T](x: ref T) {.magic: "GCref".}
+proc GC_ref*[T](x: seq[T]) {.magic: "GCref".}
+proc GC_ref*(x: string) {.magic: "GCref".}
+  ## marks the object `x` as referenced, so that it will not be freed until
+  ## it is unmarked via `GC_unref`. If called n-times for the same object `x`,
+  ## n calls to `GC_unref` are needed to unmark `x`. 
+  
+proc GC_unref*[T](x: ref T) {.magic: "GCunref".}
+proc GC_unref*[T](x: seq[T]) {.magic: "GCunref".}
+proc GC_unref*(x: string) {.magic: "GCunref".}
+  ## see the documentation of `GC_ref`.
+
+
+{.push checks: off, line_dir: off, debugger: off.}  
+# obviously we cannot generate checking operations here :-)
+# because it would yield into an endless recursion
+# however, stack-traces are available for most parts
+# of the code
 
 proc echo*[Ty](x: Ty) {.inline.}
   ## equivalent to ``writeln(stdout, x); flush(stdout)``. BUT: This is
@@ -1025,7 +1145,29 @@ template newException(exceptn, message: expr): expr =
     e.msg = message
     e
 
-when not defined(EcmaScript):
+const
+  QuitSuccess* = 0
+    ## is the value that should be passed to ``quit`` to indicate
+    ## success.
+
+  QuitFailure* = 1
+    ## is the value that should be passed to ``quit`` to indicate
+    ## failure.
+
+proc quit*(errorcode: int = QuitSuccess) {.
+  magic: "Exit", importc: "exit", noDecl, noReturn.}
+  ## stops the program immediately; before stopping the program the
+  ## "quit procedures" are called in the opposite order they were added
+  ## with ``addQuitProc``. ``quit`` never returns and ignores any
+  ## exception that may have been raised by the quit procedures.
+  ## It does *not* call the garbage collector to free all the memory,
+  ## unless a quit procedure calls ``GC_collect``.
+
+when not defined(EcmaScript) and not defined(NimrodVM): 
+  proc quit*(errormsg: string) {.noReturn.}
+    ## a shorthand for ``echo(errormsg); quit(quitFailure)``.
+
+when not defined(EcmaScript) and not defined(NimrodVM):
 
   include hti
 
@@ -1036,6 +1178,7 @@ when not defined(EcmaScript):
 
   strDesc.size = sizeof(string)
   strDesc.kind = tyString
+  strDesc.flags = {ntfAcyclic}
   initGC() # BUGFIX: need to be called here!
 
   {.push stack_trace: off.}
@@ -1043,12 +1186,12 @@ when not defined(EcmaScript):
   include ansi_c
 
   proc cmp(x, y: string): int =
-    return c_strcmp(x, y)
+    return int(c_strcmp(x, y))
 
+  const pccHack = if defined(pcc): "_" else: "" # Hack for PCC
   when defined(windows):
     # work-around C's sucking abstraction:
     # BUGFIX: stdin and stdout should be binary files!
-    const pccHack = if defined(pcc): "_" else: "" # Hack for PCC
     proc setmode(handle, mode: int) {.importc: pccHack & "setmode",
                                       header: "<io.h>".}
     proc fileno(f: C_TextFileStar): int {.importc: pccHack & "fileno",
@@ -1082,6 +1225,9 @@ when not defined(EcmaScript):
       fmAppend                  ## Open the file for writing only; append data
                                 ## at the end.
 
+    TFileHandle* = cint ## type that represents an OS file handle; this is
+                        ## useful for low-level file access
+
   # text file handling:
   var
     stdin* {.importc: "stdin", noDecl.}: TFile   ## The standard input stream.
@@ -1106,6 +1252,12 @@ when not defined(EcmaScript):
     ## that the programmer needs to provide an appropriate error message anyway
     ## (yes, even in scripts).
 
+  proc OpenFile*(f: var TFile, filehandle: TFileHandle,
+                 mode: TFileMode = fmRead): Bool
+    ## Creates a ``TFile`` from a `filehandle` with given `mode`.
+    ##
+    ## Default mode is readonly. Returns true iff the file could be opened.
+
   proc CloseFile*(f: TFile) {.importc: "fclose", nodecl.}
     ## Closes the file.
   proc EndOfFile*(f: TFile): Bool
@@ -1201,6 +1353,15 @@ when not defined(EcmaScript):
       yield res
     CloseFile(f)
 
+  proc fileHandle*(f: TFile): TFileHandle {.importc: "fileno",
+                                            header: "<stdio.h>"}
+    ## returns the OS file handle of the file ``f``. This is only useful for
+    ## platform specific programming.
+
+  proc quit(errormsg: string) =
+    echo(errormsg)
+    quit(quitFailure)
+
   # ----------------------------------------------------------------------------
 
   include excpt
@@ -1211,10 +1372,10 @@ when not defined(EcmaScript):
 
   # sequence type declarations here because the GC needs them too:
   type
-    TGenericSeq {.importc, nodecl, final.} = object
+    TGenericSeq {.compilerproc, pure.} = object
       len, space: int
 
-    PGenericSeq {.importc, nodecl.} = ptr TGenericSeq
+    PGenericSeq {.exportc.} = ptr TGenericSeq
 
   const
     GenericSeqSize = (2 * sizeof(int))
@@ -1235,10 +1396,32 @@ when not defined(EcmaScript):
   {.push stack_trace: off.}
   when defined(endb):
     include debugger
+
+  when defined(profiler):
+    include profiler
   {.pop.} # stacktrace
 
-else:
+elif defined(ecmaScript):
   include ecmasys
+elif defined(NimrodVM):
+  # Stubs for the GC interface:
+  proc GC_disable() = nil
+  proc GC_enable() = nil
+  proc GC_fullCollect() = nil
+  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 echo[Ty](x: Ty) = nil
+  
+  proc cmp(x, y: string): int =
+    if x == y: return 0
+    if x < y: return -1
+    return 1
 
 include macros
 
diff --git a/lib/times.nim b/lib/times.nim
index 93524f568..774c9930c 100644
--- a/lib/times.nim
+++ b/lib/times.nim
@@ -23,8 +23,8 @@ type
   TWeekDay* = enum ## represents a weekday
     dMon, dTue, dWed, dThu, dFri, dSat, dSun
 
-  TTime* {.importc: "time_t", final.} = object ## abstract type that 
-                                               ## represents a time
+  TTime* {.importc: "time_t", header: "<time.h>", final.} = object ## abstract type that 
+                                                                   ## represents a time
     when defined(ECMAScript):
       getDay: proc (): int
       getFullYear: proc (): int
@@ -96,11 +96,9 @@ proc TimeInfoToTime*(timeInfo: TTimeInfo): TTime
   ## them from the other information in the broken-down time structure.
 
 proc `$` *(timeInfo: TTimeInfo): string
-  ## converts a `TTimeInfo` object to a
-  ## string representation.
+  ## converts a `TTimeInfo` object to a string representation.
 proc `$` *(time: TTime): string
-  ## converts a calendar time to a
-  ## string representation.
+  ## converts a calendar time to a string representation.
 
 proc getDateStr*(): string
   ## gets the current date as a string of the format
@@ -111,6 +109,14 @@ proc getClockStr*(): string
 proc `-` *(a, b: TTime): int64
   ## computes the difference of two calendar times. Result is in seconds.
 
+proc `<` * (a, b: TTime): bool = 
+  ## returns true iff ``a < b``, that is iff a happened before b.
+  result = a - b < 0
+  
+proc `<=` * (a, b: TTime): bool = 
+  ## returns true iff ``a <= b``.
+  result = a - b <= 0
+
 proc getStartMilsecs*(): int
   ## get the miliseconds from the start of the program
 
@@ -162,7 +168,7 @@ when not defined(ECMAScript):
     result.hour = int(tm.hour)
     result.monthday = int(tm.monthday)
     result.month = TMonth(tm.month)
-    result.year = tm.year + 1900
+    result.year = tm.year + 1900'i32
     result.weekday = weekDays[int(tm.weekDay)]
     result.yearday = int(tm.yearday)
   
@@ -180,8 +186,7 @@ when not defined(ECMAScript):
     result.isdst = -1
   
   proc `-` (a, b: TTime): int64 =
-    return toInt(difftime(a, b)) # XXX: toBiggestInt is needed here, but
-                                 # Nim does not support it!
+    return toBiggestInt(difftime(a, b))
   
   proc getStartMilsecs(): int = return clock() div (clocksPerSec div 1000)
   proc getTime(): TTime = return timec(nil)
@@ -202,12 +207,23 @@ when not defined(ECMAScript):
     # because the header of mktime is broken in my version of libc
     return mktime(timeInfoToTM(cTimeInfo))
     
+  proc toStringTillNL(p: cstring): string = 
+    result = ""
+    var i = 0
+    while p[i] != '\0' and p[i] != '\10' and p[i] != '\13': 
+      add(result, p[i])
+      inc(i)
+    return result
+    
   proc `$`(timeInfo: TTimeInfo): string =
-    return $asctime(timeInfoToTM(timeInfo))
+    # BUGFIX: asctime returns a newline at the end!
+    var p = asctime(timeInfoToTM(timeInfo))
+    result = toStringTillNL(p)
   
   proc `$`(time: TTime): string =
+    # BUGFIX: ctime returns a newline at the end!
     var a = time
-    return $ctime(addr(a))
+    return toStringTillNL(ctime(addr(a)))
 
 else:
   proc getTime(): TTime {.importc: "new Date", nodecl.}
diff --git a/lib/unicode.nim b/lib/unicode.nim
index 6829ede50..de3b80c94 100644
--- a/lib/unicode.nim
+++ b/lib/unicode.nim
@@ -1,7 +1,7 @@
 #
 #
 #            Nimrod's Runtime Library
-#        (c) Copyright 2006 Andreas Rumpf
+#        (c) Copyright 2008 Andreas Rumpf
 #
 #    See the file "copying.txt", included in this
 #    distribution, for details about the copyright.
@@ -9,7 +9,7 @@
 
 type
   TUniChar* = int32 ## type that can hold any Unicode character
-  TUniChar16* = int16 ##
+  TUniChar16* = int16 ## 16 bit Unicode character
   
 template ones(n) = ((1 shl n)-1)
 
diff --git a/lib/windows/windows.nim b/lib/windows/windows.nim
index ab87bbd98..d14f56d12 100644
--- a/lib/windows/windows.nim
+++ b/lib/windows/windows.nim
@@ -23,7 +23,7 @@ type
   SHORT* = int16
   WINT* = int32
   LONG* = int32
-  DWORD* = int
+  DWORD* = int32
   PINTEGER* = ptr int32
   PBOOL* = ptr WINBOOL
   LONGLONG* = int64
@@ -39,9 +39,9 @@ type
   ULONG_PTR* = TAddress
   DWORDLONG* = int64          # was unsigned long
   PDWORDLONG* = ptr DWORDLONG
-  HANDLE* = int32
+  HANDLE* = int
   THandle* = HANDLE
-  HRESULT* = int32
+  HRESULT* = int
   PHRESULT* = ptr HRESULT
   HACCEL* = HANDLE
   HBITMAP* = HANDLE
@@ -5030,10 +5030,9 @@ const
                               # added manually PM, TREEITEM is not defined in the C headers
 
 type
-  TREEITEM* {.final.} = object
-  HTREEITEM* = ptr TREEITEM
-  TTREEITEM* = TREEITEM
-  PTREEITEM* = ptr TREEITEM   # was #define dname def_expr
+  TTREEITEM* {.final, pure.} = object
+  HTREEITEM* = ptr TTREEITEM
+  PTREEITEM* = ptr TTREEITEM
 
 proc TVI_ROOT*(): HTREEITEM
   # was #define dname def_expr
@@ -6481,31 +6480,27 @@ type                          # WARNING
                               #      va_list is just a dummy record
                               #      MvdV: Nevertheless it should be a pointer type, not a record
   va_list* = cstring
-  ABC* {.final.} = object
+  TABC* {.final, pure.} = object
     abcA*: int32
     abcB*: UINT
     abcC*: int32
 
-  LPABC* = ptr ABC
-  TABC* = ABC
-  PABC* = ptr ABC
-  ABCFLOAT* {.final.} = object
+  LPABC* = ptr TABC
+  PABC* = ptr TABC
+  TABCFLOAT* {.final, pure.} = object
     abcfA*: float32
     abcfB*: float32
     abcfC*: float32
+  LPABCFLOAT* = ptr TABCFLOAT
+  PABCFLOAT* = ptr TABCFLOAT
 
-  LPABCFLOAT* = ptr ABCFLOAT
-  TABCFLOAT* = ABCFLOAT
-  PABCFLOAT* = ptr ABCFLOAT
-  ACCEL* {.final.} = object
+  TACCEL* {.final, pure.} = object
     fVirt*: int8
     key*: int16
     cmd*: int16
-
-  LPACCEL* = ptr ACCEL
-  TACCEL* = ACCEL
-  PACCEL* = ptr ACCEL
-  ACE_HEADER* {.final.} = object
+  LPACCEL* = ptr TACCEL
+  PACCEL* = ptr TACCEL
+  ACE_HEADER* {.final, pure.} = object
     AceType*: int8
     AceFlags*: int8
     AceSize*: int16
@@ -6514,27 +6509,27 @@ type                          # WARNING
   PACE_HEADER* = ptr ACE_HEADER
   ACCESS_MASK* = DWORD
   REGSAM* = ACCESS_MASK
-  ACCESS_ALLOWED_ACE* {.final.} = object
+  ACCESS_ALLOWED_ACE* {.final, pure.} = object
     Header*: ACE_HEADER
     Mask*: ACCESS_MASK
     SidStart*: DWORD
 
   TACCESS_ALLOWED_ACE* = ACCESS_ALLOWED_ACE
   PACCESS_ALLOWED_ACE* = ptr ACCESS_ALLOWED_ACE
-  ACCESS_DENIED_ACE* {.final.} = object
+  ACCESS_DENIED_ACE* {.final, pure.} = object
     Header*: ACE_HEADER
     Mask*: ACCESS_MASK
     SidStart*: DWORD
 
   TACCESS_DENIED_ACE* = ACCESS_DENIED_ACE
-  ACCESSTIMEOUT* {.final.} = object
+  ACCESSTIMEOUT* {.final, pure.} = object
     cbSize*: UINT
     dwFlags*: DWORD
     iTimeOutMSec*: DWORD
 
   TACCESSTIMEOUT* = ACCESSTIMEOUT
   PACCESSTIMEOUT* = ptr ACCESSTIMEOUT
-  ACL* {.final.} = object
+  ACL* {.final, pure.} = object
     AclRevision*: int8
     Sbz1*: int8
     AclSize*: int16
@@ -6543,23 +6538,23 @@ type                          # WARNING
 
   PACL* = ptr ACL
   TACL* = ACL
-  TACL_REVISION_INFORMATION* {.final.} = object
+  TACL_REVISION_INFORMATION* {.final, pure.} = object
     AclRevision*: DWORD
   PACLREVISIONINFORMATION* = ptr TACL_REVISION_INFORMATION
 
-  TACL_SIZE_INFORMATION* {.final.} = object
+  TACL_SIZE_INFORMATION* {.final, pure.} = object
     AceCount*: DWORD
     AclBytesInUse*: DWORD
     AclBytesFree*: DWORD
   PACLSIZEINFORMATION* = ptr TACL_SIZE_INFORMATION
-  ACTION_HEADER* {.final.} = object
+  ACTION_HEADER* {.final, pure.} = object
     transport_id*: ULONG
     action_code*: USHORT
     reserved*: USHORT
 
   TACTIONHEADER* = ACTION_HEADER
   PACTIONHEADER* = ptr ACTION_HEADER
-  ADAPTER_STATUS* {.final.} = object
+  ADAPTER_STATUS* {.final, pure.} = object
     adapter_address*: array[0..5, UCHAR]
     rev_major*: UCHAR
     reserved0*: UCHAR
@@ -6590,33 +6585,33 @@ type                          # WARNING
 
   TADAPTERSTATUS* = ADAPTER_STATUS
   PADAPTERSTATUS* = ptr ADAPTER_STATUS
-  ADDJOB_INFO_1* {.final.} = object
+  ADDJOB_INFO_1* {.final, pure.} = object
     Path*: LPTSTR
     JobId*: DWORD
 
   TADDJOB_INFO_1* = ADDJOB_INFO_1
   PADDJOB_INFO_1* = ptr ADDJOB_INFO_1
-  ANIMATIONINFO* {.final.} = object
+  ANIMATIONINFO* {.final, pure.} = object
     cbSize*: UINT
     iMinAnimate*: int32
 
   LPANIMATIONINFO* = ptr ANIMATIONINFO
   TANIMATIONINFO* = ANIMATIONINFO
   PANIMATIONINFO* = ptr ANIMATIONINFO
-  POINT* {.final.} = object
+  POINT* {.final, pure.} = object
     x*: LONG
     y*: LONG
 
   LPPOINT* = ptr POINT
   TPOINT* = POINT
   PPOINT* = ptr POINT
-  RECT* {.final.} = object
+  RECT* {.final, pure.} = object
     TopLeft*, BottomRight*: TPoint
 
   LPRECT* = ptr RECT
   TRECT* = RECT
   PRECT* = ptr RECT
-  RECTL* {.final.} = object
+  RECTL* {.final, pure.} = object
     left*: LONG
     top*: LONG
     right*: LONG
@@ -6624,7 +6619,7 @@ type                          # WARNING
 
   TRECTL* = RECTL
   PRECTL* = ptr RECTL
-  APPBARDATA* {.final.} = object
+  APPBARDATA* {.final, pure.} = object
     cbSize*: DWORD
     hWnd*: HWND
     uCallbackMessage*: UINT
@@ -6634,7 +6629,7 @@ type                          # WARNING
 
   TAppBarData* = APPBARDATA
   PAppBarData* = ptr APPBARDATA
-  BITMAP* {.final.} = object
+  BITMAP* {.final, pure.} = object
     bmType*: LONG
     bmWidth*: LONG
     bmHeight*: LONG
@@ -6646,9 +6641,8 @@ type                          # WARNING
   PBITMAP* = ptr BITMAP
   NPBITMAP* = ptr BITMAP
   LPBITMAP* = ptr BITMAP
-  tagBITMAP* = BITMAP
   TBITMAP* = BITMAP
-  BITMAPCOREHEADER* {.final.} = object
+  BITMAPCOREHEADER* {.final, pure.} = object
     bcSize*: DWORD
     bcWidth*: int16
     bcHeight*: int16
@@ -6657,14 +6651,14 @@ type                          # WARNING
 
   TBITMAPCOREHEADER* = BITMAPCOREHEADER
   PBITMAPCOREHEADER* = ptr BITMAPCOREHEADER
-  RGBTRIPLE* {.final.} = object
+  RGBTRIPLE* {.final, pure.} = object
     rgbtBlue*: int8
     rgbtGreen*: int8
     rgbtRed*: int8
 
   TRGBTRIPLE* = RGBTRIPLE
   PRGBTRIPLE* = ptr RGBTRIPLE
-  BITMAPCOREINFO* {.final.} = object
+  BITMAPCOREINFO* {.final, pure.} = object
     bmciHeader*: BITMAPCOREHEADER
     bmciColors*: array[0..0, RGBTRIPLE]
 
@@ -6674,7 +6668,7 @@ type                          # WARNING
                                     #  WORD    bfReserved1;
                                     #  WORD    bfReserved2;
                                     # in declarator_list
-  BITMAPINFOHEADER* {.final.} = object
+  BITMAPINFOHEADER* {.final, pure.} = object
     biSize*: DWORD
     biWidth*: LONG
     biHeight*: LONG
@@ -6690,16 +6684,15 @@ type                          # WARNING
   LPBITMAPINFOHEADER* = ptr BITMAPINFOHEADER
   TBITMAPINFOHEADER* = BITMAPINFOHEADER
   PBITMAPINFOHEADER* = ptr BITMAPINFOHEADER
-  RGBQUAD* {.final.} = object
+  RGBQUAD* {.final, pure.} = object
     rgbBlue*: int8
     rgbGreen*: int8
     rgbRed*: int8
     rgbReserved*: int8
 
-  tagRGBQUAD* = RGBQUAD
   TRGBQUAD* = RGBQUAD
   PRGBQUAD* = ptr RGBQUAD
-  BITMAPINFO* {.final.} = object
+  BITMAPINFO* {.final, pure.} = object
     bmiHeader*: BITMAPINFOHEADER
     bmiColors*: array[0..0, RGBQUAD]
 
@@ -6710,25 +6703,23 @@ type                          # WARNING
   LPFXPT2DOT30* = ptr FXPT2DOT30
   TPFXPT2DOT30* = FXPT2DOT30
   PPFXPT2DOT30* = ptr FXPT2DOT30
-  CIEXYZ* {.final.} = object
+  CIEXYZ* {.final, pure.} = object
     ciexyzX*: FXPT2DOT30
     ciexyzY*: FXPT2DOT30
     ciexyzZ*: FXPT2DOT30
 
-  tagCIEXYZ* = CIEXYZ
   LPCIEXYZ* = ptr CIEXYZ
   TPCIEXYZ* = CIEXYZ
   PCIEXYZ* = ptr CIEXYZ
-  CIEXYZTRIPLE* {.final.} = object
+  CIEXYZTRIPLE* {.final, pure.} = object
     ciexyzRed*: CIEXYZ
     ciexyzGreen*: CIEXYZ
     ciexyzBlue*: CIEXYZ
 
-  tagCIEXYZTRIPLE* = CIEXYZTRIPLE
   LPCIEXYZTRIPLE* = ptr CIEXYZTRIPLE
   TCIEXYZTRIPLE* = CIEXYZTRIPLE
   PCIEXYZTRIPLE* = ptr CIEXYZTRIPLE
-  BITMAPV4HEADER* {.final.} = object
+  BITMAPV4HEADER* {.final, pure.} = object
     bV4Size*: DWORD
     bV4Width*: LONG
     bV4Height*: LONG
@@ -6753,20 +6744,20 @@ type                          # WARNING
   LPBITMAPV4HEADER* = ptr BITMAPV4HEADER
   TBITMAPV4HEADER* = BITMAPV4HEADER
   PBITMAPV4HEADER* = ptr BITMAPV4HEADER
-  BITMAPFILEHEADER* {.final.} = object
+  BITMAPFILEHEADER* {.final, pure.} = object
     bfType*: int16
     bfSize*: DWord
     bfReserved1*: int16
     bfReserved2*: int16
     bfOffBits*: DWord
 
-  BLOB* {.final.} = object
+  BLOB* {.final, pure.} = object
     cbSize*: ULONG
     pBlobData*: ptr int8
 
   TBLOB* = BLOB
   PBLOB* = ptr BLOB
-  SHITEMID* {.final.} = object
+  SHITEMID* {.final, pure.} = object
     cb*: USHORT
     abID*: array[0..0, int8]
 
@@ -6774,14 +6765,14 @@ type                          # WARNING
   LPCSHITEMID* = ptr SHITEMID
   TSHITEMID* = SHITEMID
   PSHITEMID* = ptr SHITEMID
-  ITEMIDLIST* {.final.} = object
+  ITEMIDLIST* {.final, pure.} = object
     mkid*: SHITEMID
 
   LPITEMIDLIST* = ptr ITEMIDLIST
   LPCITEMIDLIST* = ptr ITEMIDLIST
   TITEMIDLIST* = ITEMIDLIST
   PITEMIDLIST* = ptr ITEMIDLIST
-  BROWSEINFO* {.final.} = object
+  BROWSEINFO* {.final, pure.} = object
     hwndOwner*: HWND
     pidlRoot*: LPCITEMIDLIST
     pszDisplayName*: LPSTR
@@ -6794,14 +6785,14 @@ type                          # WARNING
   LPBROWSEINFO* = ptr BROWSEINFO
   Tbrowseinfo* = BROWSEINFO
   PBROWSEINFO* = ptr BROWSEINFO
-  FILETIME* {.final.} = object
+  FILETIME* {.final, pure.} = object
     dwLowDateTime*: DWORD
     dwHighDateTime*: DWORD
 
   LPFILETIME* = ptr FILETIME
   TFILETIME* = FILETIME
   PFILETIME* = ptr FILETIME
-  BY_HANDLE_FILE_INFORMATION* {.final.} = object
+  BY_HANDLE_FILE_INFORMATION* {.final, pure.} = object
     dwFileAttributes*: DWORD
     ftCreationTime*: FILETIME
     ftLastAccessTime*: FILETIME
@@ -6816,34 +6807,34 @@ type                          # WARNING
   LPBY_HANDLE_FILE_INFORMATION* = ptr BY_HANDLE_FILE_INFORMATION
   TBYHANDLEFILEINFORMATION* = BY_HANDLE_FILE_INFORMATION
   PBYHANDLEFILEINFORMATION* = ptr BY_HANDLE_FILE_INFORMATION
-  FIXED* {.final.} = object
+  FIXED* {.final, pure.} = object
     fract*: int16
     value*: SHORT
 
   TFIXED* = FIXED
   PFIXED* = ptr FIXED
-  POINTFX* {.final.} = object
+  POINTFX* {.final, pure.} = object
     x*: FIXED
     y*: FIXED
 
   TPOINTFX* = POINTFX
   PPOINTFX* = ptr POINTFX
-  POINTL* {.final.} = object
+  POINTL* {.final, pure.} = object
     x*: LONG
     y*: LONG
 
   TPOINTL* = POINTL
   PPOINTL* = ptr POINTL
-  TSmallPoint* {.final.} = object
+  TSmallPoint* {.final, pure.} = object
     X*, Y*: SHORT
 
-  POINTS* {.final.} = object
+  POINTS* {.final, pure.} = object
     x*: SHORT
     y*: SHORT
 
   TPOINTS* = POINTS
   PPOINTS* = ptr POINTS
-  CANDIDATEFORM* {.final.} = object
+  CANDIDATEFORM* {.final, pure.} = object
     dwIndex*: DWORD
     dwStyle*: DWORD
     ptCurrentPos*: POINT
@@ -6852,7 +6843,7 @@ type                          # WARNING
   LPCANDIDATEFORM* = ptr CANDIDATEFORM
   TCANDIDATEFORM* = CANDIDATEFORM
   PCANDIDATEFORM* = ptr CANDIDATEFORM
-  CANDIDATELIST* {.final.} = object
+  CANDIDATELIST* {.final, pure.} = object
     dwSize*: DWORD
     dwStyle*: DWORD
     dwCount*: DWORD
@@ -6864,7 +6855,7 @@ type                          # WARNING
   LPCANDIDATELIST* = ptr CANDIDATELIST
   TCANDIDATELIST* = CANDIDATELIST
   PCANDIDATELIST* = ptr CANDIDATELIST
-  CREATESTRUCT* {.final.} = object
+  CREATESTRUCT* {.final, pure.} = object
     lpCreateParams*: LPVOID
     hInstance*: HINST
     hMenu*: HMENU
@@ -6881,25 +6872,25 @@ type                          # WARNING
   LPCREATESTRUCT* = ptr CREATESTRUCT
   TCREATESTRUCT* = CREATESTRUCT
   PCREATESTRUCT* = ptr CREATESTRUCT
-  CBT_CREATEWND* {.final.} = object
+  CBT_CREATEWND* {.final, pure.} = object
     lpcs*: LPCREATESTRUCT
     hwndInsertAfter*: HWND
 
   TCBT_CREATEWND* = CBT_CREATEWND
   PCBT_CREATEWND* = ptr CBT_CREATEWND
-  CBTACTIVATESTRUCT* {.final.} = object
+  CBTACTIVATESTRUCT* {.final, pure.} = object
     fMouse*: WINBOOL
     hWndActive*: HWND
 
   TCBTACTIVATESTRUCT* = CBTACTIVATESTRUCT
   PCBTACTIVATESTRUCT* = ptr CBTACTIVATESTRUCT
-  CHAR_INFO* {.final.} = object
+  CHAR_INFO* {.final, pure.} = object
     UnicodeChar*: WCHAR
     Attributes*: int16        # other union part: AsciiChar : CHAR
 
   TCHAR_INFO* = CHAR_INFO
   PCHAR_INFO* = ptr CHAR_INFO
-  CHARFORMAT* {.final.} = object
+  CHARFORMAT* {.final, pure.} = object
     cbSize*: UINT
     dwMask*: DWORD
     dwEffects*: DWORD
@@ -6912,27 +6903,26 @@ type                          # WARNING
 
   Tcharformat* = CHARFORMAT
   Pcharformat* = ptr CHARFORMAT
-  CHARRANGE* {.final.} = object
+  CHARRANGE* {.final, pure.} = object
     cpMin*: LONG
     cpMax*: LONG
 
   Tcharrange* = CHARRANGE
   Pcharrange* = ptr CHARRANGE
-  CHARSET* {.final.} = object
+  CHARSET* {.final, pure.} = object
     aflBlock*: array[0..2, DWORD]
     flLang*: DWORD
 
   TCHARSET* = CHARSET
   PCHARSET* = ptr CHARSET
-  FONTSIGNATURE* {.final.} = object
+  FONTSIGNATURE* {.final, pure.} = object
     fsUsb*: array[0..3, DWORD]
     fsCsb*: array[0..1, DWORD]
 
   LPFONTSIGNATURE* = ptr FONTSIGNATURE
-  tagFONTSIGNATURE* = FONTSIGNATURE
   TFONTSIGNATURE* = FONTSIGNATURE
   PFONTSIGNATURE* = ptr FONTSIGNATURE
-  CHARSETINFO* {.final.} = object
+  CHARSETINFO* {.final, pure.} = object
     ciCharset*: UINT
     ciACP*: UINT
     fs*: FONTSIGNATURE
@@ -6940,7 +6930,7 @@ type                          # WARNING
   LPCHARSETINFO* = ptr CHARSETINFO
   TCHARSETINFO* = CHARSETINFO
   PCHARSETINFO* = ptr CHARSETINFO #CHOOSECOLOR = record confilcts with function ChooseColor
-  TCHOOSECOLOR* {.final.} = object
+  TCHOOSECOLOR* {.final, pure.} = object
     lStructSize*: DWORD
     hwndOwner*: HWND
     hInstance*: HWND
@@ -6953,7 +6943,7 @@ type                          # WARNING
 
   LPCHOOSECOLOR* = ptr TCHOOSECOLOR
   PCHOOSECOLOR* = ptr TCHOOSECOLOR
-  LOGFONT* {.final.} = object
+  LOGFONT* {.final, pure.} = object
     lfHeight*: LONG
     lfWidth*: LONG
     lfEscapement*: LONG
@@ -6974,7 +6964,7 @@ type                          # WARNING
   TLOGFONTA* = LOGFONT
   PLOGFONT* = ptr LOGFONT
   PLOGFONTA* = PLOGFONT
-  LOGFONTW* {.final.} = object
+  LOGFONTW* {.final, pure.} = object
     lfHeight*: LONG
     lfWidth*: LONG
     lfEscapement*: LONG
@@ -6994,7 +6984,7 @@ type                          # WARNING
   NPLOGFONTW* = ptr LOGFONTW
   TLogFontW* = LOGFONTW
   PLogFontW* = ptr TLogFontW
-  TCHOOSEFONT* {.final.} = object
+  TCHOOSEFONT* {.final, pure.} = object
     lStructSize*: DWORD
     hwndOwner*: HWND
     hDC*: HDC
@@ -7014,22 +7004,21 @@ type                          # WARNING
 
   LPCHOOSEFONT* = ptr TCHOOSEFONT
   PCHOOSEFONT* = ptr TCHOOSEFONT
-  CIDA* {.final.} = object
+  CIDA* {.final, pure.} = object
     cidl*: UINT
     aoffset*: array[0..0, UINT]
 
   LPIDA* = ptr CIDA
   TIDA* = CIDA
   PIDA* = ptr CIDA
-  CLIENTCREATESTRUCT* {.final.} = object
+  CLIENTCREATESTRUCT* {.final, pure.} = object
     hWindowMenu*: HANDLE
     idFirstChild*: UINT
 
   LPCLIENTCREATESTRUCT* = ptr CLIENTCREATESTRUCT
-  tagCLIENTCREATESTRUCT* = CLIENTCREATESTRUCT
   TCLIENTCREATESTRUCT* = CLIENTCREATESTRUCT
   PCLIENTCREATESTRUCT* = ptr CLIENTCREATESTRUCT
-  CMINVOKECOMMANDINFO* {.final.} = object
+  CMINVOKECOMMANDINFO* {.final, pure.} = object
     cbSize*: DWORD
     fMask*: DWORD
     hwnd*: HWND
@@ -7043,7 +7032,7 @@ type                          # WARNING
   LPCMINVOKECOMMANDINFO* = ptr CMINVOKECOMMANDINFO
   TCMInvokeCommandInfo* = CMINVOKECOMMANDINFO
   PCMInvokeCommandInfo* = ptr CMINVOKECOMMANDINFO
-  COLORADJUSTMENT* {.final.} = object
+  COLORADJUSTMENT* {.final, pure.} = object
     caSize*: int16
     caFlags*: int16
     caIlluminantIndex*: int16
@@ -7058,17 +7047,16 @@ type                          # WARNING
     caRedGreenTint*: SHORT
 
   LPCOLORADJUSTMENT* = ptr COLORADJUSTMENT
-  tagCOLORADJUSTMENT* = COLORADJUSTMENT
   TCOLORADJUSTMENT* = COLORADJUSTMENT
   PCOLORADJUSTMENT* = ptr COLORADJUSTMENT
-  COLORMAP* {.final.} = object
+  COLORMAP* {.final, pure.} = object
     `from`*: COLORREF
     `to`*: COLORREF          # XXX!
 
   LPCOLORMAP* = ptr COLORMAP
   TCOLORMAP* = COLORMAP
   PCOLORMAP* = ptr COLORMAP
-  DCB* {.final.} = object
+  DCB* {.final, pure.} = object
     DCBlength*: DWORD
     BaudRate*: DWORD
     flags*: DWORD
@@ -7148,7 +7136,7 @@ proc set_fAbortOnError*(a: var DCB, fAbortOnError: DWORD)
 proc fDummy2*(a: var DCB): DWORD
 proc set_fDummy2*(a: var DCB, fDummy2: DWORD)
 type
-  COMMCONFIG* {.final.} = object
+  COMMCONFIG* {.final, pure.} = object
     dwSize*: DWORD
     wVersion*: int16
     wReserved*: int16
@@ -7161,7 +7149,7 @@ type
   LPCOMMCONFIG* = ptr COMMCONFIG
   TCOMMCONFIG* = COMMCONFIG
   PCOMMCONFIG* = ptr COMMCONFIG
-  COMMPROP* {.final.} = object
+  COMMPROP* {.final, pure.} = object
     wPacketLength*: int16
     wPacketVersion*: int16
     dwServiceMask*: DWORD
@@ -7184,7 +7172,7 @@ type
   LPCOMMPROP* = ptr COMMPROP
   TCOMMPROP* = COMMPROP
   PCOMMPROP* = ptr COMMPROP
-  COMMTIMEOUTS* {.final.} = object
+  COMMTIMEOUTS* {.final, pure.} = object
     ReadIntervalTimeout*: DWORD
     ReadTotalTimeoutMultiplier*: DWORD
     ReadTotalTimeoutConstant*: DWORD
@@ -7194,7 +7182,7 @@ type
   LPCOMMTIMEOUTS* = ptr COMMTIMEOUTS
   TCOMMTIMEOUTS* = COMMTIMEOUTS
   PCOMMTIMEOUTS* = ptr COMMTIMEOUTS
-  COMPAREITEMSTRUCT* {.final.} = object
+  COMPAREITEMSTRUCT* {.final, pure.} = object
     CtlType*: UINT
     CtlID*: UINT
     hwndItem*: HWND
@@ -7203,17 +7191,16 @@ type
     itemID2*: UINT
     itemData2*: ULONG_PTR
 
-  tagCOMPAREITEMSTRUCT* = COMPAREITEMSTRUCT
   TCOMPAREITEMSTRUCT* = COMPAREITEMSTRUCT
   PCOMPAREITEMSTRUCT* = ptr COMPAREITEMSTRUCT
-  COMPCOLOR* {.final.} = object
+  COMPCOLOR* {.final, pure.} = object
     crText*: COLORREF
     crBackground*: COLORREF
     dwEffects*: DWORD
 
   TCOMPCOLOR* = COMPCOLOR
   PCOMPCOLOR* = ptr COMPCOLOR
-  COMPOSITIONFORM* {.final.} = object
+  COMPOSITIONFORM* {.final, pure.} = object
     dwStyle*: DWORD
     ptCurrentPos*: POINT
     rcArea*: RECT
@@ -7222,7 +7209,7 @@ type
   TCOMPOSITIONFORM* = COMPOSITIONFORM
   PCOMPOSITIONFORM* = ptr COMPOSITIONFORM #     TComStatFlags = set of (fCtsHold, fDsrHold, fRlsdHold , fXoffHold ,
                                           #                    fXoffSent , fEof ,  fTxim  , fReserved);
-  COMSTAT* {.final.} = object
+  COMSTAT* {.final, pure.} = object
     flag0*: DWORD             # can't use tcomstatflags, set packing issues
                               # and conflicts with macro's
     cbInQue*: DWORD
@@ -7268,20 +7255,20 @@ proc set_fTxim*(a: var COMSTAT, fTxim: DWORD)
 proc fReserved*(a: var COMSTAT): DWORD
 proc set_fReserved*(a: var COMSTAT, fReserved: DWORD)
 type
-  CONSOLE_CURSOR_INFO* {.final.} = object
+  CONSOLE_CURSOR_INFO* {.final, pure.} = object
     dwSize*: DWORD
     bVisible*: WINBOOL
 
   PCONSOLE_CURSOR_INFO* = ptr CONSOLE_CURSOR_INFO
   TCONSOLECURSORINFO* = CONSOLE_CURSOR_INFO
   TCURSORINFO* = CONSOLE_CURSOR_INFO
-  COORD* {.final.} = object
+  COORD* {.final, pure.} = object
     X*: SHORT
     Y*: SHORT
 
   TCOORD* = COORD
   PCOORD* = ptr COORD
-  SMALL_RECT* {.final.} = object
+  SMALL_RECT* {.final, pure.} = object
     Left*: SHORT
     Top*: SHORT
     Right*: SHORT
@@ -7289,7 +7276,7 @@ type
 
   TSMALL_RECT* = SMALL_RECT
   PSMALL_RECT* = ptr SMALL_RECT
-  CONSOLE_SCREEN_BUFFER_INFO* {.final.} = object
+  CONSOLE_SCREEN_BUFFER_INFO* {.final, pure.} = object
     dwSize*: COORD
     dwCursorPosition*: COORD
     wAttributes*: int16
@@ -7301,7 +7288,7 @@ type
 
 when defined(i386):
   type
-    FLOATING_SAVE_AREA* {.final.} = object
+    FLOATING_SAVE_AREA* {.final, pure.} = object
       ControlWord*: DWORD
       StatusWord*: DWORD
       TagWord*: DWORD
@@ -7314,7 +7301,7 @@ when defined(i386):
 
     TFLOATINGSAVEAREA* = FLOATING_SAVE_AREA
     PFLOATINGSAVEAREA* = ptr FLOATING_SAVE_AREA
-    CONTEXT* {.final.} = object
+    CONTEXT* {.final, pure.} = object
       ContextFlags*: DWORD
       Dr0*: DWORD
       Dr1*: DWORD
@@ -7345,7 +7332,7 @@ when defined(x86_64):
   # Define 128-bit 16-byte aligned xmm register type.
   #
   type
-    M128A* {.final.} = object
+    M128A* {.final, pure.} = object
       Low*: ULONGLONG
       High*: LONGLONG
 
@@ -7355,7 +7342,7 @@ when defined(x86_64):
                      #
                      #typedef struct _XMM_SAVE_AREA32 {
   type
-    XMM_SAVE_AREA32* {.final.} = object
+    XMM_SAVE_AREA32* {.final, pure.} = object
       ControlWord*: int16
       StatusWord*: int16
       TagWord*: int8
@@ -7378,7 +7365,7 @@ when defined(x86_64):
   const
     LEGACY_SAVE_AREA_LENGTH* = sizeof(XMM_SAVE_AREA32)
   type
-    CONTEXT* {.final.} = object
+    CONTEXT* {.final, pure.} = object
       P1Home*: DWORD64
       P2Home*: DWORD64
       P3Home*: DWORD64
@@ -7465,7 +7452,7 @@ when defined(powerpc32):
   # Debug Status Register
   # Debug Control Register
   type
-    CONTEXT* {.final.} = object
+    CONTEXT* {.final, pure.} = object
       Fpr0*: float64
       Fpr1*: float64
       Fpr2*: float64
@@ -7554,13 +7541,13 @@ type
   PCONTEXT* = ptr CONTEXT
 
 type
-  LIST_ENTRY* {.final.} = object
+  LIST_ENTRY* {.final, pure.} = object
     Flink*: ptr LIST_ENTRY
     Blink*: ptr LIST_ENTRY
 
   TLISTENTRY* = LIST_ENTRY
   PLISTENTRY* = ptr LIST_ENTRY
-  CRITICAL_SECTION_DEBUG* {.final.} = object
+  CRITICAL_SECTION_DEBUG* {.final, pure.} = object
     `type`*: int16
     CreatorBackTraceIndex*: int16
     CriticalSection*: ptr TCRITICAL_SECTION
@@ -7570,7 +7557,7 @@ type
     Depth*: DWORD
     OwnerBackTrace*: array[0..4, PVOID]
 
-  TRTL_CRITICAL_SECTION* {.final.} = object
+  TRTL_CRITICAL_SECTION* {.final, pure.} = object
     DebugInfo*: ptr CRITICAL_SECTION_DEBUG
     LockCount*: int32
     RecursionCount*: int32
@@ -7586,7 +7573,7 @@ type
   TCRITICAL_SECTION* = TRTLCriticalSection
   PCRITICAL_SECTION* = PRTLCriticalSection
   LPCRITICAL_SECTION* = PRTLCriticalSection
-  SECURITY_QUALITY_OF_SERVICE* {.final.} = object
+  SECURITY_QUALITY_OF_SERVICE* {.final, pure.} = object
     len*: DWORD
     ImpersonationLevel*: SECURITY_IMPERSONATION_LEVEL
     ContextTrackingMode*: WINBOOL
@@ -7594,7 +7581,7 @@ type
 
   PSECURITY_QUALITY_OF_SERVICE* = ptr SECURITY_QUALITY_OF_SERVICE
   TSECURITYQUALITYOFSERVICE* = SECURITY_QUALITY_OF_SERVICE
-  CONVCONTEXT* {.final.} = object
+  CONVCONTEXT* {.final, pure.} = object
     cb*: UINT
     wFlags*: UINT
     wCountryID*: UINT
@@ -7605,7 +7592,7 @@ type
 
   TCONVCONTEXT* = CONVCONTEXT
   PCONVCONTEXT* = ptr CONVCONTEXT
-  CONVINFO* {.final.} = object
+  CONVINFO* {.final, pure.} = object
     cb*: DWORD
     hUser*: DWORD
     hConvPartner*: HCONV
@@ -7623,18 +7610,16 @@ type
     hwnd*: HWND
     hwndPartner*: HWND
 
-  tagCONVINFO* = CONVINFO
   TCONVINFO* = CONVINFO
   PCONVINFO* = ptr CONVINFO
-  COPYDATASTRUCT* {.final.} = object
+  COPYDATASTRUCT* {.final, pure.} = object
     dwData*: DWORD
     cbData*: DWORD
     lpData*: PVOID
 
-  tagCOPYDATASTRUCT* = COPYDATASTRUCT
   TCOPYDATASTRUCT* = COPYDATASTRUCT
   PCOPYDATASTRUCT* = ptr COPYDATASTRUCT
-  CPINFO* {.final.} = object
+  CPINFO* {.final, pure.} = object
     MaxCharSize*: UINT
     DefaultChar*: array[0..(MAX_DEFAULTCHAR) - 1, int8]
     LeadByte*: array[0..(MAX_LEADBYTES) - 1, int8]
@@ -7642,16 +7627,15 @@ type
   LPCPINFO* = ptr CPINFO
   Tcpinfo* = CPINFO
   Pcpinfo* = ptr CPINFO
-  CPLINFO* {.final.} = object
+  CPLINFO* {.final, pure.} = object
     idIcon*: int32
     idName*: int32
     idInfo*: int32
     lData*: LONG
 
-  tagCPLINFO* = CPLINFO
   TCPLINFO* = CPLINFO
   PCPLINFO* = ptr CPLINFO
-  CREATE_PROCESS_DEBUG_INFO* {.final.} = object
+  CREATE_PROCESS_DEBUG_INFO* {.final, pure.} = object
     hFile*: HANDLE
     hProcess*: HANDLE
     hThread*: HANDLE
@@ -7665,7 +7649,7 @@ type
 
   TCREATEPROCESSDEBUGINFO* = CREATE_PROCESS_DEBUG_INFO
   PCREATEPROCESSDEBUGINFO* = ptr CREATE_PROCESS_DEBUG_INFO
-  CREATE_THREAD_DEBUG_INFO* {.final.} = object
+  CREATE_THREAD_DEBUG_INFO* {.final, pure.} = object
     hThread*: HANDLE
     lpThreadLocalBase*: LPVOID
     lpStartAddress*: LPTHREAD_START_ROUTINE
@@ -7686,7 +7670,7 @@ type
                                                          #    INT             iProtocol;
                                                          #  } CSADDR_INFO;
                                                          #
-  CURRENCYFMT* {.final.} = object
+  CURRENCYFMT* {.final, pure.} = object
     NumDigits*: UINT
     LeadingZero*: UINT
     Grouping*: UINT
@@ -7698,7 +7682,7 @@ type
 
   Tcurrencyfmt* = CURRENCYFMT
   Pcurrencyfmt* = ptr CURRENCYFMT
-  CURSORSHAPE* {.final.} = object
+  CURSORSHAPE* {.final, pure.} = object
     xHotSpot*: int32
     yHotSpot*: int32
     cx*: int32
@@ -7710,7 +7694,7 @@ type
   LPCURSORSHAPE* = ptr CURSORSHAPE
   TCURSORSHAPE* = CURSORSHAPE
   PCURSORSHAPE* = ptr CURSORSHAPE
-  CWPRETSTRUCT* {.final.} = object
+  CWPRETSTRUCT* {.final, pure.} = object
     lResult*: LRESULT
     lParam*: LPARAM
     wParam*: WPARAM
@@ -7719,7 +7703,7 @@ type
 
   TCWPRETSTRUCT* = CWPRETSTRUCT
   PCWPRETSTRUCT* = ptr CWPRETSTRUCT
-  CWPSTRUCT* {.final.} = object
+  CWPSTRUCT* {.final, pure.} = object
     lParam*: LPARAM
     wParam*: WPARAM
     message*: UINT
@@ -7727,26 +7711,26 @@ type
 
   TCWPSTRUCT* = CWPSTRUCT
   PCWPSTRUCT* = ptr CWPSTRUCT
-  DATATYPES_INFO_1* {.final.} = object
+  DATATYPES_INFO_1* {.final, pure.} = object
     pName*: LPTSTR
 
   TDATATYPESINFO1* = DATATYPES_INFO_1
   PDATATYPESINFO1* = ptr DATATYPES_INFO_1
-  DDEACK* {.final.} = object
+  DDEACK* {.final, pure.} = object
     flag0*: int16
 
   TDDEACK* = DDEACK
   PDDEACK* = ptr DDEACK
 
 const
-  bm_DDEACK_bAppReturnCode* = 0x000000FF
-  bp_DDEACK_bAppReturnCode* = 0
-  bm_DDEACK_reserved* = 0x00003F00
-  bp_DDEACK_reserved* = 8
-  bm_DDEACK_fBusy* = 0x00004000
-  bp_DDEACK_fBusy* = 14
-  bm_DDEACK_fAck* = 0x00008000
-  bp_DDEACK_fAck* = 15
+  bm_DDEACK_bAppReturnCode* = 0x000000FF'i16
+  bp_DDEACK_bAppReturnCode* = 0'i16
+  bm_DDEACK_reserved* = 0x00003F00'i16
+  bp_DDEACK_reserved* = 8'i16
+  bm_DDEACK_fBusy* = 0x00004000'i16
+  bp_DDEACK_fBusy* = 14'i16
+  bm_DDEACK_fAck* = 0x00008000'i16
+  bp_DDEACK_fAck* = 15'i16
 
 proc bAppReturnCode*(a: var DDEACK): int16
 proc set_bAppReturnCode*(a: var DDEACK, bAppReturnCode: int16)
@@ -7757,7 +7741,7 @@ proc set_fBusy*(a: var DDEACK, fBusy: int16)
 proc fAck*(a: var DDEACK): int16
 proc set_fAck*(a: var DDEACK, fAck: int16)
 type
-  DDEADVISE* {.final.} = object
+  DDEADVISE* {.final, pure.} = object
     flag0*: int16
     cfFormat*: SHORT
 
@@ -7765,12 +7749,12 @@ type
   PDDEADVISE* = ptr DDEADVISE
 
 const
-  bm_DDEADVISE_reserved* = 0x00003FFF
-  bp_DDEADVISE_reserved* = 0
-  bm_DDEADVISE_fDeferUpd* = 0x00004000
-  bp_DDEADVISE_fDeferUpd* = 14
-  bm_DDEADVISE_fAckReq* = 0x00008000
-  bp_DDEADVISE_fAckReq* = 15
+  bm_DDEADVISE_reserved* = 0x00003FFF'i16
+  bp_DDEADVISE_reserved* = 0'i16
+  bm_DDEADVISE_fDeferUpd* = 0x00004000'i16
+  bp_DDEADVISE_fDeferUpd* = 14'i16
+  bm_DDEADVISE_fAckReq* = 0x00008000'i16
+  bp_DDEADVISE_fAckReq* = 15'i16
 
 proc reserved*(a: var DDEADVISE): int16
 proc set_reserved*(a: var DDEADVISE, reserved: int16)
@@ -7779,7 +7763,7 @@ proc set_fDeferUpd*(a: var DDEADVISE, fDeferUpd: int16)
 proc fAckReq*(a: var DDEADVISE): int16
 proc set_fAckReq*(a: var DDEADVISE, fAckReq: int16)
 type
-  DDEDATA* {.final.} = object
+  DDEDATA* {.final, pure.} = object
     flag0*: int16
     cfFormat*: SHORT
     Value*: array[0..0, int8]
@@ -7787,16 +7771,16 @@ type
   PDDEDATA* = ptr DDEDATA
 
 const
-  bm_DDEDATA_unused* = 0x00000FFF
-  bp_DDEDATA_unused* = 0
-  bm_DDEDATA_fResponse* = 0x00001000
-  bp_DDEDATA_fResponse* = 12
-  bm_DDEDATA_fRelease* = 0x00002000
-  bp_DDEDATA_fRelease* = 13
-  bm_DDEDATA_reserved* = 0x00004000
-  bp_DDEDATA_reserved* = 14
-  bm_DDEDATA_fAckReq* = 0x00008000
-  bp_DDEDATA_fAckReq* = 15
+  bm_DDEDATA_unused* = 0x00000FFF'i16
+  bp_DDEDATA_unused* = 0'i16
+  bm_DDEDATA_fResponse* = 0x00001000'i16
+  bp_DDEDATA_fResponse* = 12'i16
+  bm_DDEDATA_fRelease* = 0x00002000'i16
+  bp_DDEDATA_fRelease* = 13'i16
+  bm_DDEDATA_reserved* = 0x00004000'i16
+  bp_DDEDATA_reserved* = 14'i16
+  bm_DDEDATA_fAckReq* = 0x00008000'i16
+  bp_DDEDATA_fAckReq* = 15'i16
 
 proc unused*(a: var DDEDATA): int16
 proc set_unused*(a: var DDEDATA, unused: int16)
@@ -7809,7 +7793,7 @@ proc set_reserved*(a: var DDEDATA, reserved: int16)
 proc fAckReq*(a: var DDEDATA): int16
 proc set_fAckReq*(a: var DDEDATA, fAckReq: int16)
 type
-  DDELN* {.final.} = object
+  DDELN* {.final, pure.} = object
     flag0*: int16
     cfFormat*: SHORT
 
@@ -7817,14 +7801,14 @@ type
   PDDELN* = ptr DDELN
 
 const
-  bm_DDELN_unused* = 0x00001FFF
-  bp_DDELN_unused* = 0
-  bm_DDELN_fRelease* = 0x00002000
-  bp_DDELN_fRelease* = 13
-  bm_DDELN_fDeferUpd* = 0x00004000
-  bp_DDELN_fDeferUpd* = 14
-  bm_DDELN_fAckReq* = 0x00008000
-  bp_DDELN_fAckReq* = 15
+  bm_DDELN_unused* = 0x00001FFF'i16
+  bp_DDELN_unused* = 0'i16
+  bm_DDELN_fRelease* = 0x00002000'i16
+  bp_DDELN_fRelease* = 13'i16
+  bm_DDELN_fDeferUpd* = 0x00004000'i16
+  bp_DDELN_fDeferUpd* = 14'i16
+  bm_DDELN_fAckReq* = 0x00008000'i16
+  bp_DDELN_fAckReq* = 15'i16
 
 proc unused*(a: var DDELN): int16
 proc set_unused*(a: var DDELN, unused: int16)
@@ -7835,7 +7819,7 @@ proc set_fDeferUpd*(a: var DDELN, fDeferUpd: int16)
 proc fAckReq*(a: var DDELN): int16
 proc set_fAckReq*(a: var DDELN, fAckReq: int16)
 type
-  DDEML_MSG_HOOK_DATA* {.final.} = object
+  DDEML_MSG_HOOK_DATA* {.final, pure.} = object
     uiLo*: UINT
     uiHi*: UINT
     cbData*: DWORD
@@ -7843,7 +7827,7 @@ type
 
   TDDEMLMSGHOOKDATA* = DDEML_MSG_HOOK_DATA
   PDDEMLMSGHOOKDATA* = ptr DDEML_MSG_HOOK_DATA
-  DDEPOKE* {.final.} = object
+  DDEPOKE* {.final, pure.} = object
     flag0*: int16
     cfFormat*: SHORT
     Value*: array[0..0, int8]
@@ -7852,12 +7836,12 @@ type
   PDDEPOKE* = ptr DDEPOKE
 
 const
-  bm_DDEPOKE_unused* = 0x00001FFF
-  bp_DDEPOKE_unused* = 0
-  bm_DDEPOKE_fRelease* = 0x00002000
-  bp_DDEPOKE_fRelease* = 13
-  bm_DDEPOKE_fReserved* = 0x0000C000
-  bp_DDEPOKE_fReserved* = 14
+  bm_DDEPOKE_unused* = 0x00001FFF'i16
+  bp_DDEPOKE_unused* = 0'i16
+  bm_DDEPOKE_fRelease* = 0x00002000'i16
+  bp_DDEPOKE_fRelease* = 13'i16
+  bm_DDEPOKE_fReserved* = 0x0000C000'i16
+  bp_DDEPOKE_fReserved* = 14'i16
 
 proc unused*(a: var DDEPOKE): int16
 proc set_unused*(a: var DDEPOKE, unused: int16)
@@ -7866,7 +7850,7 @@ proc set_fRelease*(a: var DDEPOKE, fRelease: int16)
 proc fReserved*(a: var DDEPOKE): int16
 proc set_fReserved*(a: var DDEPOKE, fReserved: int16)
 type
-  DDEUP* {.final.} = object
+  DDEUP* {.final, pure.} = object
     flag0*: int16
     cfFormat*: SHORT
     rgb*: array[0..0, int8]
@@ -7875,16 +7859,16 @@ type
   PDDEUP* = ptr DDEUP
 
 const
-  bm_DDEUP_unused* = 0x00000FFF
-  bp_DDEUP_unused* = 0
-  bm_DDEUP_fAck* = 0x00001000
-  bp_DDEUP_fAck* = 12
-  bm_DDEUP_fRelease* = 0x00002000
-  bp_DDEUP_fRelease* = 13
-  bm_DDEUP_fReserved* = 0x00004000
-  bp_DDEUP_fReserved* = 14
-  bm_DDEUP_fAckReq* = 0x00008000
-  bp_DDEUP_fAckReq* = 15
+  bm_DDEUP_unused* = 0x00000FFF'i16
+  bp_DDEUP_unused* = 0'i16
+  bm_DDEUP_fAck* = 0x00001000'i16
+  bp_DDEUP_fAck* = 12'i16
+  bm_DDEUP_fRelease* = 0x00002000'i16
+  bp_DDEUP_fRelease* = 13'i16
+  bm_DDEUP_fReserved* = 0x00004000'i16
+  bp_DDEUP_fReserved* = 14'i16
+  bm_DDEUP_fAckReq* = 0x00008000'i16
+  bp_DDEUP_fAckReq* = 15'i16
 
 proc unused*(a: var DDEUP): int16
 proc set_unused*(a: var DDEUP, unused: int16)
@@ -7897,7 +7881,7 @@ proc set_fReserved*(a: var DDEUP, fReserved: int16)
 proc fAckReq*(a: var DDEUP): int16
 proc set_fAckReq*(a: var DDEUP, fAckReq: int16)
 type
-  EXCEPTION_RECORD* {.final.} = object
+  EXCEPTION_RECORD* {.final, pure.} = object
     ExceptionCode*: DWORD
     ExceptionFlags*: DWORD
     ExceptionRecord*: ptr EXCEPTION_RECORD
@@ -7908,13 +7892,13 @@ type
 
   PEXCEPTION_RECORD* = ptr EXCEPTION_RECORD
   TEXCEPTIONRECORD* = EXCEPTION_RECORD
-  EXCEPTION_DEBUG_INFO* {.final.} = object
+  EXCEPTION_DEBUG_INFO* {.final, pure.} = object
     ExceptionRecord*: EXCEPTION_RECORD
     dwFirstChance*: DWORD
 
   PEXCEPTION_DEBUG_INFO* = ptr EXCEPTION_DEBUG_INFO
   TEXCEPTIONDEBUGINFO* = EXCEPTION_DEBUG_INFO
-  EXCEPTION_RECORD32* {.final.} = object
+  EXCEPTION_RECORD32* {.final, pure.} = object
     ExceptionCode*: DWORD
     ExceptionFlags*: DWORD
     ExceptionRecord*: DWORD
@@ -7924,13 +7908,13 @@ type
 
   PEXCEPTION_RECORD32* = ptr EXCEPTION_RECORD32
   TExceptionRecord32* = EXCEPTION_RECORD32
-  EXCEPTION_DEBUG_INFO32* {.final.} = object
+  EXCEPTION_DEBUG_INFO32* {.final, pure.} = object
     ExceptionRecord*: EXCEPTION_RECORD32
     dwFirstChance*: DWORD
 
   PEXCEPTION_DEBUG_INFO32* = ptr EXCEPTION_DEBUG_INFO32
   TExceptionDebugInfo32* = EXCEPTION_DEBUG_INFO32
-  EXCEPTION_RECORD64* {.final.} = object
+  EXCEPTION_RECORD64* {.final, pure.} = object
     ExceptionCode*: DWORD
     ExceptionFlags*: DWORD
     ExceptionRecord*: DWORD64
@@ -7941,23 +7925,23 @@ type
 
   PEXCEPTION_RECORD64* = ptr EXCEPTION_RECORD64
   TExceptionRecord64* = EXCEPTION_RECORD64
-  EXCEPTION_DEBUG_INFO64* {.final.} = object
+  EXCEPTION_DEBUG_INFO64* {.final, pure.} = object
     ExceptionRecord*: EXCEPTION_RECORD64
     dwFirstChance*: DWORD
 
   PEXCEPTION_DEBUG_INFO64* = ptr EXCEPTION_DEBUG_INFO64
   TExceptionDebugInfo64* = EXCEPTION_DEBUG_INFO64
-  EXIT_PROCESS_DEBUG_INFO* {.final.} = object
+  EXIT_PROCESS_DEBUG_INFO* {.final, pure.} = object
     dwExitCode*: DWORD
 
   TEXITPROCESSDEBUGINFO* = EXIT_PROCESS_DEBUG_INFO
   PEXITPROCESSDEBUGINFO* = ptr EXIT_PROCESS_DEBUG_INFO
-  EXIT_THREAD_DEBUG_INFO* {.final.} = object
+  EXIT_THREAD_DEBUG_INFO* {.final, pure.} = object
     dwExitCode*: DWORD
 
   TEXITTHREADDEBUGINFO* = EXIT_THREAD_DEBUG_INFO
   PEXITTHREADDEBUGINFO* = ptr EXIT_THREAD_DEBUG_INFO
-  LOAD_DLL_DEBUG_INFO* {.final.} = object
+  LOAD_DLL_DEBUG_INFO* {.final, pure.} = object
     hFile*: HANDLE
     lpBaseOfDll*: LPVOID
     dwDebugInfoFileOffset*: DWORD
@@ -7967,25 +7951,25 @@ type
 
   TLOADDLLDEBUGINFO* = LOAD_DLL_DEBUG_INFO
   PLOADDLLDEBUGINFO* = ptr LOAD_DLL_DEBUG_INFO
-  UNLOAD_DLL_DEBUG_INFO* {.final.} = object
+  UNLOAD_DLL_DEBUG_INFO* {.final, pure.} = object
     lpBaseOfDll*: LPVOID
 
   TUNLOADDLLDEBUGINFO* = UNLOAD_DLL_DEBUG_INFO
   PUNLOADDLLDEBUGINFO* = ptr UNLOAD_DLL_DEBUG_INFO
-  OUTPUT_DEBUG_STRING_INFO* {.final.} = object
+  OUTPUT_DEBUG_STRING_INFO* {.final, pure.} = object
     lpDebugStringData*: LPSTR
     fUnicode*: int16
     nDebugStringLength*: int16
 
   TOUTPUTDEBUGSTRINGINFO* = OUTPUT_DEBUG_STRING_INFO
   POUTPUTDEBUGSTRINGINFO* = ptr OUTPUT_DEBUG_STRING_INFO
-  RIP_INFO* {.final.} = object
+  RIP_INFO* {.final, pure.} = object
     dwError*: DWORD
     dwType*: DWORD
 
   TRIPINFO* = RIP_INFO
   PRIPINFO* = ptr RIP_INFO
-  DEBUG_EVENT* {.final.} = object
+  DEBUG_EVENT* {.final, pure.} = object
     dwDebugEventCode*: DWORD
     dwProcessId*: DWORD
     dwThreadId*: DWORD
@@ -8004,7 +7988,7 @@ type
   LPDEBUG_EVENT* = ptr DEBUG_EVENT
   TDEBUGEVENT* = DEBUG_EVENT
   PDEBUGEVENT* = ptr DEBUG_EVENT
-  DEBUGHOOKINFO* {.final.} = object
+  DEBUGHOOKINFO* {.final, pure.} = object
     idThread*: DWORD
     idThreadInstaller*: DWORD
     lParam*: LPARAM
@@ -8013,7 +7997,7 @@ type
 
   TDEBUGHOOKINFO* = DEBUGHOOKINFO
   PDEBUGHOOKINFO* = ptr DEBUGHOOKINFO
-  DELETEITEMSTRUCT* {.final.} = object
+  DELETEITEMSTRUCT* {.final, pure.} = object
     CtlType*: UINT
     CtlID*: UINT
     itemID*: UINT
@@ -8022,14 +8006,14 @@ type
 
   TDELETEITEMSTRUCT* = DELETEITEMSTRUCT
   PDELETEITEMSTRUCT* = ptr DELETEITEMSTRUCT
-  DEV_BROADCAST_HDR* {.final.} = object
+  DEV_BROADCAST_HDR* {.final, pure.} = object
     dbch_size*: ULONG
     dbch_devicetype*: ULONG
     dbch_reserved*: ULONG
 
   PDEV_BROADCAST_HDR* = ptr DEV_BROADCAST_HDR
   TDEVBROADCASTHDR* = DEV_BROADCAST_HDR
-  DEV_BROADCAST_OEM* {.final.} = object
+  DEV_BROADCAST_OEM* {.final, pure.} = object
     dbco_size*: ULONG
     dbco_devicetype*: ULONG
     dbco_reserved*: ULONG
@@ -8038,7 +8022,7 @@ type
 
   PDEV_BROADCAST_OEM* = ptr DEV_BROADCAST_OEM
   TDEVBROADCASTOEM* = DEV_BROADCAST_OEM
-  DEV_BROADCAST_PORT* {.final.} = object
+  DEV_BROADCAST_PORT* {.final, pure.} = object
     dbcp_size*: ULONG
     dbcp_devicetype*: ULONG
     dbcp_reserved*: ULONG
@@ -8046,14 +8030,14 @@ type
 
   PDEV_BROADCAST_PORT* = ptr DEV_BROADCAST_PORT
   TDEVBROADCASTPORT* = DEV_BROADCAST_PORT
-  DEV_BROADCAST_USERDEFINED* {.final.} = object
+  DEV_BROADCAST_USERDEFINED* {.final, pure.} = object
     dbud_dbh*: DEV_BROADCAST_HDR
     dbud_szName*: array[0..0, char]
     dbud_rgbUserDefined*: array[0..0, int8]
 
   TDEVBROADCASTUSERDEFINED* = DEV_BROADCAST_USERDEFINED
   PDEVBROADCASTUSERDEFINED* = ptr DEV_BROADCAST_USERDEFINED
-  DEV_BROADCAST_VOLUME* {.final.} = object
+  DEV_BROADCAST_VOLUME* {.final, pure.} = object
     dbcv_size*: ULONG
     dbcv_devicetype*: ULONG
     dbcv_reserved*: ULONG
@@ -8062,7 +8046,7 @@ type
 
   PDEV_BROADCAST_VOLUME* = ptr DEV_BROADCAST_VOLUME
   TDEVBROADCASTVOLUME* = DEV_BROADCAST_VOLUME
-  DEVMODE* {.final.} = object
+  DEVMODE* {.final, pure.} = object
     dmDeviceName*: array[0..(CCHDEVICENAME) - 1, BCHAR]
     dmSpecVersion*: int16
     dmDriverVersion*: int16
@@ -8107,7 +8091,7 @@ type
   PDeviceMode* = LPDEVMODE
   TDEVMODE* = DEVMODE
   PDEVMODE* = LPDEVMODE
-  devmodeW* {.final.} = object
+  devmodeW* {.final, pure.} = object
     dmDeviceName*: array[0..CCHDEVICENAME - 1, WCHAR]
     dmSpecVersion*: int16
     dmDriverVersion*: int16
@@ -8149,24 +8133,22 @@ type
   PDeviceModeW* = LPDEVMODEW
   TDEVMODEW* = DEVMODEW
   PDEVMODEW* = LPDEVMODEW
-  DEVNAMES* {.final.} = object
+  DEVNAMES* {.final, pure.} = object
     wDriverOffset*: int16
     wDeviceOffset*: int16
     wOutputOffset*: int16
     wDefault*: int16
 
   LPDEVNAMES* = ptr DEVNAMES
-  tagDEVNAMES* = DEVNAMES
   TDEVNAMES* = DEVNAMES
   PDEVNAMES* = ptr DEVNAMES
-  DIBSECTION* {.final.} = object
+  DIBSECTION* {.final, pure.} = object
     dsBm*: BITMAP
     dsBmih*: BITMAPINFOHEADER
     dsBitfields*: array[0..2, DWORD]
     dshSection*: HANDLE
     dsOffset*: DWORD
 
-  tagDIBSECTION* = DIBSECTION
   TDIBSECTION* = DIBSECTION
   PDIBSECTION* = ptr DIBSECTION #
                                 #     LARGE_INTEGER = record
@@ -8187,7 +8169,7 @@ type
   TLargeInteger* = Int64
   PULARGE_INTEGER* = ptr ULARGE_INTEGER
   TULargeInteger* = int64
-  DISK_GEOMETRY* {.final.} = object
+  DISK_GEOMETRY* {.final, pure.} = object
     Cylinders*: LARGE_INTEGER
     MediaType*: MEDIA_TYPE
     TracksPerCylinder*: DWORD
@@ -8196,7 +8178,7 @@ type
 
   TDISKGEOMETRY* = DISK_GEOMETRY
   PDISKGEOMETRY* = ptr DISK_GEOMETRY
-  DISK_PERFORMANCE* {.final.} = object
+  DISK_PERFORMANCE* {.final, pure.} = object
     BytesRead*: LARGE_INTEGER
     BytesWritten*: LARGE_INTEGER
     ReadTime*: LARGE_INTEGER
@@ -8207,7 +8189,7 @@ type
 
   TDISKPERFORMANCE* = DISK_PERFORMANCE
   PDISKPERFORMANCE* = ptr DISK_PERFORMANCE
-  DLGITEMTEMPLATE* {.final.} = object
+  DLGITEMTEMPLATE* {.final, pure.} = object
     style*: DWORD
     dwExtendedStyle*: DWORD
     x*: int16
@@ -8219,7 +8201,7 @@ type
   LPDLGITEMTEMPLATE* = ptr DLGITEMTEMPLATE
   TDLGITEMTEMPLATE* = DLGITEMTEMPLATE
   PDLGITEMTEMPLATE* = ptr DLGITEMTEMPLATE
-  DLGTEMPLATE* {.final.} = object
+  DLGTEMPLATE* {.final, pure.} = object
     style*: DWORD
     dwExtendedStyle*: DWORD
     cdit*: int16
@@ -8232,14 +8214,14 @@ type
   LPCDLGTEMPLATE* = ptr DLGTEMPLATE
   TDLGTEMPLATE* = DLGTEMPLATE
   PDLGTEMPLATE* = ptr DLGTEMPLATE
-  DOC_INFO_1* {.final.} = object
+  DOC_INFO_1* {.final, pure.} = object
     pDocName*: LPTSTR
     pOutputFile*: LPTSTR
     pDatatype*: LPTSTR
 
   TDOCINFO1* = DOC_INFO_1
   PDOCINFO1* = ptr DOC_INFO_1
-  DOC_INFO_2* {.final.} = object
+  DOC_INFO_2* {.final, pure.} = object
     pDocName*: LPTSTR
     pOutputFile*: LPTSTR
     pDatatype*: LPTSTR
@@ -8248,7 +8230,7 @@ type
 
   TDOCINFO2* = DOC_INFO_2
   PDOCINFO2* = ptr DOC_INFO_2
-  DOCINFO* {.final.} = object
+  DOCINFO* {.final, pure.} = object
     cbSize*: int32
     lpszDocName*: LPCTSTR
     lpszOutput*: LPCTSTR
@@ -8258,7 +8240,7 @@ type
   TDOCINFO* = DOCINFO
   TDOCINFOA* = DOCINFO
   PDOCINFO* = ptr DOCINFO
-  DRAGLISTINFO* {.final.} = object
+  DRAGLISTINFO* {.final, pure.} = object
     uNotification*: UINT
     hWnd*: HWND
     ptCursor*: POINT
@@ -8266,7 +8248,7 @@ type
   LPDRAGLISTINFO* = ptr DRAGLISTINFO
   TDRAGLISTINFO* = DRAGLISTINFO
   PDRAGLISTINFO* = ptr DRAGLISTINFO
-  DRAWITEMSTRUCT* {.final.} = object
+  DRAWITEMSTRUCT* {.final, pure.} = object
     CtlType*: UINT
     CtlID*: UINT
     itemID*: UINT
@@ -8278,10 +8260,9 @@ type
     itemData*: ULONG_PTR
 
   LPDRAWITEMSTRUCT* = ptr DRAWITEMSTRUCT
-  tagDRAWITEMSTRUCT* = DRAWITEMSTRUCT
   TDRAWITEMSTRUCT* = DRAWITEMSTRUCT
   PDRAWITEMSTRUCT* = ptr DRAWITEMSTRUCT
-  DRAWTEXTPARAMS* {.final.} = object
+  DRAWTEXTPARAMS* {.final, pure.} = object
     cbSize*: UINT
     iTabLength*: int32
     iLeftMargin*: int32
@@ -8291,7 +8272,7 @@ type
   LPDRAWTEXTPARAMS* = ptr DRAWTEXTPARAMS
   TDRAWTEXTPARAMS* = DRAWTEXTPARAMS
   PDRAWTEXTPARAMS* = ptr DRAWTEXTPARAMS
-  PARTITION_INFORMATION* {.final.} = object
+  PARTITION_INFORMATION* {.final, pure.} = object
     PartitionType*: int8
     BootIndicator*: bool
     RecognizedPartition*: bool
@@ -8302,19 +8283,19 @@ type
 
   TPARTITIONINFORMATION* = PARTITION_INFORMATION
   PPARTITIONINFORMATION* = ptr PARTITION_INFORMATION
-  DRIVE_LAYOUT_INFORMATION* {.final.} = object
+  DRIVE_LAYOUT_INFORMATION* {.final, pure.} = object
     PartitionCount*: DWORD
     Signature*: DWORD
     PartitionEntry*: array[0..0, PARTITION_INFORMATION]
 
   TDRIVELAYOUTINFORMATION* = DRIVE_LAYOUT_INFORMATION
   PDRIVELAYOUTINFORMATION* = ptr DRIVE_LAYOUT_INFORMATION
-  DRIVER_INFO_1* {.final.} = object
+  DRIVER_INFO_1* {.final, pure.} = object
     pName*: LPTSTR
 
   TDRIVERINFO1* = DRIVER_INFO_1
   PDRIVERINFO1* = ptr DRIVER_INFO_1
-  DRIVER_INFO_2* {.final.} = object
+  DRIVER_INFO_2* {.final, pure.} = object
     cVersion*: DWORD
     pName*: LPTSTR
     pEnvironment*: LPTSTR
@@ -8324,7 +8305,7 @@ type
 
   TDRIVERINFO2* = DRIVER_INFO_2
   PDRIVERINFO2* = ptr DRIVER_INFO_2
-  DRIVER_INFO_3* {.final.} = object
+  DRIVER_INFO_3* {.final, pure.} = object
     cVersion*: DWORD
     pName*: LPTSTR
     pEnvironment*: LPTSTR
@@ -8338,37 +8319,34 @@ type
 
   TDRIVERINFO3* = DRIVER_INFO_3
   PDRIVERINFO3* = ptr DRIVER_INFO_3
-  EDITSTREAM* {.final.} = object
+  EDITSTREAM* {.final, pure.} = object
     dwCookie*: DWORD
     dwError*: DWORD
     pfnCallback*: EDITSTREAMCALLBACK
 
   Teditstream* = EDITSTREAM
   Peditstream* = ptr EDITSTREAM
-  EMR* {.final.} = object
+  EMR* {.final, pure.} = object
     iType*: DWORD
     nSize*: DWORD
 
-  tagEMR* = EMR
   TEMR* = EMR
   PEMR* = ptr EMR
-  EMRANGLEARC* {.final.} = object
+  EMRANGLEARC* {.final, pure.} = object
     emr*: EMR
     ptlCenter*: POINTL
     nRadius*: DWORD
     eStartAngle*: float32
     eSweepAngle*: float32
 
-  tagEMRANGLEARC* = EMRANGLEARC
   TEMRANGLEARC* = EMRANGLEARC
   PEMRANGLEARC* = ptr EMRANGLEARC
-  EMRARC* {.final.} = object
+  EMRARC* {.final, pure.} = object
     emr*: EMR
     rclBox*: RECTL
     ptlStart*: POINTL
     ptlEnd*: POINTL
 
-  tagEMRARC* = EMRARC
   TEMRARC* = EMRARC
   PEMRARC* = ptr EMRARC
   EMRARCTO* = EMRARC
@@ -8380,7 +8358,7 @@ type
   EMRPIE* = EMRARC
   TEMRPIE* = EMRARC
   PEMRPIE* = ptr EMRARC
-  XFORM* {.final.} = object
+  XFORM* {.final, pure.} = object
     eM11*: float32
     eM12*: float32
     eM21*: float32
@@ -8391,7 +8369,7 @@ type
   LPXFORM* = ptr XFORM
   TXFORM* = XFORM
   PXFORM* = ptr XFORM
-  EMRBITBLT* {.final.} = object
+  EMRBITBLT* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
     xDest*: LONG
@@ -8408,28 +8386,25 @@ type
     offBitsSrc*: DWORD
     cbBitsSrc*: DWORD
 
-  tagEMRBITBLT* = EMRBITBLT
   TEMRBITBLT* = EMRBITBLT
   PEMRBITBLT* = ptr EMRBITBLT
-  LOGBRUSH* {.final.} = object
+  LOGBRUSH* {.final, pure.} = object
     lbStyle*: UINT
     lbColor*: COLORREF
     lbHatch*: LONG
 
-  tagLOGBRUSH* = LOGBRUSH
   TLOGBRUSH* = LOGBRUSH
   PLOGBRUSH* = ptr LOGBRUSH
-  EMRCREATEBRUSHINDIRECT* {.final.} = object
+  EMRCREATEBRUSHINDIRECT* {.final, pure.} = object
     emr*: EMR
     ihBrush*: DWORD
     lb*: LOGBRUSH
 
-  tagEMRCREATEBRUSHINDIRECT* = EMRCREATEBRUSHINDIRECT
   TEMRCREATEBRUSHINDIRECT* = EMRCREATEBRUSHINDIRECT
   PEMRCREATEBRUSHINDIRECT* = ptr EMRCREATEBRUSHINDIRECT
   LCSCSTYPE* = LONG
   LCSGAMUTMATCH* = LONG
-  LOGCOLORSPACE* {.final.} = object
+  LOGCOLORSPACE* {.final, pure.} = object
     lcsSignature*: DWORD
     lcsVersion*: DWORD
     lcsSize*: DWORD
@@ -8442,19 +8417,17 @@ type
     lcsFilename*: array[0..(MAX_PATH) - 1, TCHAR]
 
   LPLOGCOLORSPACE* = ptr LOGCOLORSPACE
-  tagLOGCOLORSPACE* = LOGCOLORSPACE
   TLOGCOLORSPACE* = LOGCOLORSPACE
   TLOGCOLORSPACEA* = LOGCOLORSPACE
   PLOGCOLORSPACE* = ptr LOGCOLORSPACE
-  EMRCREATECOLORSPACE* {.final.} = object
+  EMRCREATECOLORSPACE* {.final, pure.} = object
     emr*: EMR
     ihCS*: DWORD
     lcs*: LOGCOLORSPACE
 
-  tagEMRCREATECOLORSPACE* = EMRCREATECOLORSPACE
   TEMRCREATECOLORSPACE* = EMRCREATECOLORSPACE
   PEMRCREATECOLORSPACE* = ptr EMRCREATECOLORSPACE
-  EMRCREATEDIBPATTERNBRUSHPT* {.final.} = object
+  EMRCREATEDIBPATTERNBRUSHPT* {.final, pure.} = object
     emr*: EMR
     ihBrush*: DWORD
     iUsage*: DWORD
@@ -8463,10 +8436,9 @@ type
     offBits*: DWORD
     cbBits*: DWORD
 
-  tagEMRCREATEDIBPATTERNBRUSHPT* = EMRCREATEDIBPATTERNBRUSHPT
   TEMRCREATEDIBPATTERNBRUSHPT* = EMRCREATEDIBPATTERNBRUSHPT
   PEMRCREATEDIBPATTERNBRUSHPT* = EMRCREATEDIBPATTERNBRUSHPT
-  EMRCREATEMONOBRUSH* {.final.} = object
+  EMRCREATEMONOBRUSH* {.final, pure.} = object
     emr*: EMR
     ihBrush*: DWORD
     iUsage*: DWORD
@@ -8475,82 +8447,73 @@ type
     offBits*: DWORD
     cbBits*: DWORD
 
-  tagEMRCREATEMONOBRUSH* = EMRCREATEMONOBRUSH
   TEMRCREATEMONOBRUSH* = EMRCREATEMONOBRUSH
   PEMRCREATEMONOBRUSH* = ptr EMRCREATEMONOBRUSH
-  PALETTEENTRY* {.final.} = object
+  PALETTEENTRY* {.final, pure.} = object
     peRed*: int8
     peGreen*: int8
     peBlue*: int8
     peFlags*: int8
 
   LPPALETTEENTRY* = ptr PALETTEENTRY
-  tagPALETTEENTRY* = PALETTEENTRY
   TPALETTEENTRY* = PALETTEENTRY
   PPALETTEENTRY* = ptr PALETTEENTRY
-  LOGPALETTE* {.final.} = object
+  LOGPALETTE* {.final, pure.} = object
     palVersion*: int16
     palNumEntries*: int16
     palPalEntry*: array[0..0, PALETTEENTRY]
 
   LPLOGPALETTE* = ptr LOGPALETTE
-  tagLOGPALETTE* = LOGPALETTE
   TLOGPALETTE* = LOGPALETTE
   PLOGPALETTE* = ptr LOGPALETTE
-  EMRCREATEPALETTE* {.final.} = object
+  EMRCREATEPALETTE* {.final, pure.} = object
     emr*: EMR
     ihPal*: DWORD
     lgpl*: LOGPALETTE
 
-  tagEMRCREATEPALETTE* = EMRCREATEPALETTE
   TEMRCREATEPALETTE* = EMRCREATEPALETTE
   PEMRCREATEPALETTE* = ptr EMRCREATEPALETTE
-  LOGPEN* {.final.} = object
+  LOGPEN* {.final, pure.} = object
     lopnStyle*: UINT
     lopnWidth*: POINT
     lopnColor*: COLORREF
 
-  tagLOGPEN* = LOGPEN
   TLOGPEN* = LOGPEN
   PLOGPEN* = ptr LOGPEN
-  EMRCREATEPEN* {.final.} = object
+  EMRCREATEPEN* {.final, pure.} = object
     emr*: EMR
     ihPen*: DWORD
     lopn*: LOGPEN
 
-  tagEMRCREATEPEN* = EMRCREATEPEN
   TEMRCREATEPEN* = EMRCREATEPEN
   PEMRCREATEPEN* = ptr EMRCREATEPEN
-  EMRELLIPSE* {.final.} = object
+  EMRELLIPSE* {.final, pure.} = object
     emr*: EMR
     rclBox*: RECTL
 
-  tagEMRELLIPSE* = EMRELLIPSE
   TEMRELLIPSE* = EMRELLIPSE
   PEMRELLIPSE* = ptr EMRELLIPSE
   EMRRECTANGLE* = EMRELLIPSE
   TEMRRECTANGLE* = EMRELLIPSE
   PEMRRECTANGLE* = ptr EMRELLIPSE
-  EMREOF* {.final.} = object
+  EMREOF* {.final, pure.} = object
     emr*: EMR
     nPalEntries*: DWORD
     offPalEntries*: DWORD
     nSizeLast*: DWORD
 
-  tagEMREOF* = EMREOF
   TEMREOF* = EMREOF
   PEMREOF* = ptr EMREOF
-  EMREXCLUDECLIPRECT* {.final.} = object
+  EMREXCLUDECLIPRECT* {.final, pure.} = object
     emr*: EMR
     rclClip*: RECTL
 
-  tagEMREXCLUDECLIPRECT* = EMREXCLUDECLIPRECT
   TEMREXCLUDECLIPRECT* = EMREXCLUDECLIPRECT
   PEMREXCLUDECLIPRECT* = ptr EMREXCLUDECLIPRECT
   EMRINTERSECTCLIPRECT* = EMREXCLUDECLIPRECT
   TEMRINTERSECTCLIPRECT* = EMREXCLUDECLIPRECT
   PEMRINTERSECTCLIPRECT* = ptr EMREXCLUDECLIPRECT
-  PANOSE* {.final.} = object
+  PANOSE* {.final, pure.} = object
     bFamilyType*: int8
     bSerifStyle*: int8
     bWeight*: int8
@@ -8562,10 +8525,9 @@ type
     bMidline*: int8
     bXHeight*: int8
 
-  tagPANOSE* = PANOSE
   TPANOSE* = PANOSE
   PPANOSE* = ptr PANOSE
-  EXTLOGFONT* {.final.} = object
+  EXTLOGFONT* {.final, pure.} = object
     elfLogFont*: LOGFONT
     elfFullName*: array[0..(LF_FULLFACESIZE) - 1, BCHAR]
     elfStyle*: array[0..(LF_FACESIZE) - 1, BCHAR]
@@ -8577,18 +8539,16 @@ type
     elfCulture*: DWORD
     elfPanose*: PANOSE
 
-  tagEXTLOGFONT* = EXTLOGFONT
   TEXTLOGFONT* = EXTLOGFONT
   PEXTLOGFONT* = ptr EXTLOGFONT
-  EMREXTCREATEFONTINDIRECTW* {.final.} = object
+  EMREXTCREATEFONTINDIRECTW* {.final, pure.} = object
     emr*: EMR
     ihFont*: DWORD
     elfw*: EXTLOGFONT
 
-  tagEMREXTCREATEFONTINDIRECTW* = EMREXTCREATEFONTINDIRECTW
   TEMREXTCREATEFONTINDIRECTW* = EMREXTCREATEFONTINDIRECTW
   PEMREXTCREATEFONTINDIRECTW* = ptr EMREXTCREATEFONTINDIRECTW
-  EXTLOGPEN* {.final.} = object
+  EXTLOGPEN* {.final, pure.} = object
     elpPenStyle*: UINT
     elpWidth*: UINT
     elpBrushStyle*: UINT
@@ -8597,10 +8557,9 @@ type
     elpNumEntries*: DWORD
     elpStyleEntry*: array[0..0, DWORD]
 
-  tagEXTLOGPEN* = EXTLOGPEN
   TEXTLOGPEN* = EXTLOGPEN
   PEXTLOGPEN* = ptr EXTLOGPEN
-  EMREXTCREATEPEN* {.final.} = object
+  EMREXTCREATEPEN* {.final, pure.} = object
     emr*: EMR
     ihPen*: DWORD
     offBmi*: DWORD
@@ -8609,28 +8568,25 @@ type
     cbBits*: DWORD
     elp*: EXTLOGPEN
 
-  tagEMREXTCREATEPEN* = EMREXTCREATEPEN
   TEMREXTCREATEPEN* = EMREXTCREATEPEN
   PEMREXTCREATEPEN* = ptr EMREXTCREATEPEN
-  EMREXTFLOODFILL* {.final.} = object
+  EMREXTFLOODFILL* {.final, pure.} = object
     emr*: EMR
     ptlStart*: POINTL
     crColor*: COLORREF
     iMode*: DWORD
 
-  tagEMREXTFLOODFILL* = EMREXTFLOODFILL
   TEMREXTFLOODFILL* = EMREXTFLOODFILL
   PEMREXTFLOODFILL* = ptr EMREXTFLOODFILL
-  EMREXTSELECTCLIPRGN* {.final.} = object
+  EMREXTSELECTCLIPRGN* {.final, pure.} = object
     emr*: EMR
     cbRgnData*: DWORD
     iMode*: DWORD
     RgnData*: array[0..0, int8]
 
-  tagEMREXTSELECTCLIPRGN* = EMREXTSELECTCLIPRGN
   TEMREXTSELECTCLIPRGN* = EMREXTSELECTCLIPRGN
   PEMREXTSELECTCLIPRGN* = ptr EMREXTSELECTCLIPRGN
-  EMRTEXT* {.final.} = object
+  EMRTEXT* {.final, pure.} = object
     ptlReference*: POINTL
     nChars*: DWORD
     offString*: DWORD
@@ -8638,10 +8594,9 @@ type
     rcl*: RECTL
     offDx*: DWORD
 
-  tagEMRTEXT* = EMRTEXT
   TEMRTEXT* = EMRTEXT
   PEMRTEXT* = ptr EMRTEXT
-  EMREXTTEXTOUTA* {.final.} = object
+  EMREXTTEXTOUTA* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
     iGraphicsMode*: DWORD
@@ -8649,17 +8604,15 @@ type
     eyScale*: float32
     emrtext*: EMRTEXT
 
-  tagEMREXTTEXTOUTA* = EMREXTTEXTOUTA
   TEMREXTTEXTOUTA* = EMREXTTEXTOUTA
   PEMREXTTEXTOUTA* = ptr EMREXTTEXTOUTA
   EMREXTTEXTOUTW* = EMREXTTEXTOUTA
   TEMREXTTEXTOUTW* = EMREXTTEXTOUTA
   PEMREXTTEXTOUTW* = ptr EMREXTTEXTOUTA
-  EMRFILLPATH* {.final.} = object
+  EMRFILLPATH* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
 
-  tagEMRFILLPATH* = EMRFILLPATH
   TEMRFILLPATH* = EMRFILLPATH
   PEMRFILLPATH* = ptr EMRFILLPATH
   EMRSTROKEANDFILLPATH* = EMRFILLPATH
@@ -8668,38 +8621,35 @@ type
   EMRSTROKEPATH* = EMRFILLPATH
   TEMRSTROKEPATH* = EMRFILLPATH
   PEMRSTROKEPATH* = ptr EMRFILLPATH
-  EMRFILLRGN* {.final.} = object
+  EMRFILLRGN* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
     cbRgnData*: DWORD
     ihBrush*: DWORD
     RgnData*: array[0..0, int8]
 
-  tagEMRFILLRGN* = EMRFILLRGN
   TEMRFILLRGN* = EMRFILLRGN
   PEMRFILLRGN* = ptr EMRFILLRGN
-  EMRFORMAT* {.final.} = object
+  EMRFORMAT* {.final, pure.} = object
     dSignature*: DWORD
     nVersion*: DWORD
     cbData*: DWORD
     offData*: DWORD
 
-  tagEMRFORMAT* = EMRFORMAT
   TEMRFORMAT* = EMRFORMAT
   PEMRFORMAT* = ptr EMRFORMAT
-  SIZE* {.final.} = object
+  SIZE* {.final, pure.} = object
     cx*: LONG
     cy*: LONG
 
   LPSIZE* = ptr SIZE
-  tagSIZE* = SIZE
   TSIZE* = SIZE
   PSIZE* = ptr SIZE
   SIZEL* = SIZE
   TSIZEL* = SIZE
   PSIZEL* = ptr SIZE
   LPSIZEL* = ptr SIZE
-  EMRFRAMERGN* {.final.} = object
+  EMRFRAMERGN* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
     cbRgnData*: DWORD
@@ -8707,40 +8657,36 @@ type
     szlStroke*: SIZEL
     RgnData*: array[0..0, int8]
 
-  tagEMRFRAMERGN* = EMRFRAMERGN
   TEMRFRAMERGN* = EMRFRAMERGN
   PEMRFRAMERGN* = ptr EMRFRAMERGN
-  EMRGDICOMMENT* {.final.} = object
+  EMRGDICOMMENT* {.final, pure.} = object
     emr*: EMR
     cbData*: DWORD
     Data*: array[0..0, int8]
 
-  tagEMRGDICOMMENT* = EMRGDICOMMENT
   TEMRGDICOMMENT* = EMRGDICOMMENT
   PEMRGDICOMMENT* = ptr EMRGDICOMMENT
-  EMRINVERTRGN* {.final.} = object
+  EMRINVERTRGN* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
     cbRgnData*: DWORD
     RgnData*: array[0..0, int8]
 
-  tagEMRINVERTRGN* = EMRINVERTRGN
   TEMRINVERTRGN* = EMRINVERTRGN
   PEMRINVERTRGN* = ptr EMRINVERTRGN
   EMRPAINTRGN* = EMRINVERTRGN
   TEMRPAINTRGN* = EMRINVERTRGN
   PEMRPAINTRGN* = ptr EMRINVERTRGN
-  EMRLINETO* {.final.} = object
+  EMRLINETO* {.final, pure.} = object
     emr*: EMR
     ptl*: POINTL
 
-  tagEMRLINETO* = EMRLINETO
   TEMRLINETO* = EMRLINETO
   PEMRLINETO* = ptr EMRLINETO
   EMRMOVETOEX* = EMRLINETO
   TEMRMOVETOEX* = EMRLINETO
   PEMRMOVETOEX* = ptr EMRLINETO
-  EMRMASKBLT* {.final.} = object
+  EMRMASKBLT* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
     xDest*: LONG
@@ -8765,25 +8711,22 @@ type
     offBitsMask*: DWORD
     cbBitsMask*: DWORD
 
-  tagEMRMASKBLT* = EMRMASKBLT
   TEMRMASKBLT* = EMRMASKBLT
   PEMRMASKBLT* = ptr EMRMASKBLT
-  EMRMODIFYWORLDTRANSFORM* {.final.} = object
+  EMRMODIFYWORLDTRANSFORM* {.final, pure.} = object
     emr*: EMR
     xform*: XFORM
     iMode*: DWORD
 
-  tagEMRMODIFYWORLDTRANSFORM* = EMRMODIFYWORLDTRANSFORM
   TEMRMODIFYWORLDTRANSFORM* = EMRMODIFYWORLDTRANSFORM
   PEMRMODIFYWORLDTRANSFORM* = EMRMODIFYWORLDTRANSFORM
-  EMROFFSETCLIPRGN* {.final.} = object
+  EMROFFSETCLIPRGN* {.final, pure.} = object
     emr*: EMR
     ptlOffset*: POINTL
 
-  tagEMROFFSETCLIPRGN* = EMROFFSETCLIPRGN
   TEMROFFSETCLIPRGN* = EMROFFSETCLIPRGN
   PEMROFFSETCLIPRGN* = ptr EMROFFSETCLIPRGN
-  EMRPLGBLT* {.final.} = object
+  EMRPLGBLT* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
     aptlDest*: array[0..2, POINTL]
@@ -8806,36 +8749,32 @@ type
     offBitsMask*: DWORD
     cbBitsMask*: DWORD
 
-  tagEMRPLGBLT* = EMRPLGBLT
   TEMRPLGBLT* = EMRPLGBLT
   PEMRPLGBLT* = ptr EMRPLGBLT
-  EMRPOLYDRAW* {.final.} = object
+  EMRPOLYDRAW* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
     cptl*: DWORD
     aptl*: array[0..0, POINTL]
     abTypes*: array[0..0, int8]
 
-  tagEMRPOLYDRAW* = EMRPOLYDRAW
   TEMRPOLYDRAW* = EMRPOLYDRAW
   PEMRPOLYDRAW* = ptr EMRPOLYDRAW
-  EMRPOLYDRAW16* {.final.} = object
+  EMRPOLYDRAW16* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
     cpts*: DWORD
     apts*: array[0..0, POINTS]
     abTypes*: array[0..0, int8]
 
-  tagEMRPOLYDRAW16* = EMRPOLYDRAW16
   TEMRPOLYDRAW16* = EMRPOLYDRAW16
   PEMRPOLYDRAW16* = ptr EMRPOLYDRAW16
-  EMRPOLYLINE* {.final.} = object
+  EMRPOLYLINE* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
     cptl*: DWORD
     aptl*: array[0..0, POINTL]
 
-  tagEMRPOLYLINE* = EMRPOLYLINE
   TEMRPOLYLINE* = EMRPOLYLINE
   PEMRPOLYLINE* = ptr EMRPOLYLINE
   EMRPOLYBEZIER* = EMRPOLYLINE
@@ -8850,13 +8789,12 @@ type
   EMRPOLYLINETO* = EMRPOLYLINE
   TEMRPOLYLINETO* = EMRPOLYLINE
   PEMRPOLYLINETO* = ptr EMRPOLYLINE
-  EMRPOLYLINE16* {.final.} = object
+  EMRPOLYLINE16* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
     cpts*: DWORD
     apts*: array[0..0, POINTL]
 
-  tagEMRPOLYLINE16* = EMRPOLYLINE16
   TEMRPOLYLINE16* = EMRPOLYLINE16
   PEMRPOLYLINE16* = ptr EMRPOLYLINE16
   EMRPOLYBEZIER16* = EMRPOLYLINE16
@@ -8871,7 +8809,7 @@ type
   EMRPOLYLINETO16* = EMRPOLYLINE16
   TEMRPOLYLINETO16* = EMRPOLYLINE16
   PEMRPOLYLINETO16* = ptr EMRPOLYLINE16
-  EMRPOLYPOLYLINE* {.final.} = object
+  EMRPOLYPOLYLINE* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
     nPolys*: DWORD
@@ -8879,13 +8817,12 @@ type
     aPolyCounts*: array[0..0, DWORD]
     aptl*: array[0..0, POINTL]
 
-  tagEMRPOLYPOLYLINE* = EMRPOLYPOLYLINE
   TEMRPOLYPOLYLINE* = EMRPOLYPOLYLINE
   PEMRPOLYPOLYLINE* = ptr EMRPOLYPOLYLINE
   EMRPOLYPOLYGON* = EMRPOLYPOLYLINE
   TEMRPOLYPOLYGON* = EMRPOLYPOLYLINE
   PEMRPOLYPOLYGON* = ptr EMRPOLYPOLYLINE
-  EMRPOLYPOLYLINE16* {.final.} = object
+  EMRPOLYPOLYLINE16* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
     nPolys*: DWORD
@@ -8893,13 +8830,12 @@ type
     aPolyCounts*: array[0..0, DWORD]
     apts*: array[0..0, POINTS]
 
-  tagEMRPOLYPOLYLINE16* = EMRPOLYPOLYLINE16
   TEMRPOLYPOLYLINE16* = EMRPOLYPOLYLINE16
   PEMRPOLYPOLYLINE16* = ptr EMRPOLYPOLYLINE16
   EMRPOLYPOLYGON16* = EMRPOLYPOLYLINE16
   TEMRPOLYPOLYGON16* = EMRPOLYPOLYLINE16
   PEMRPOLYPOLYGON16* = ptr EMRPOLYPOLYLINE16
-  EMRPOLYTEXTOUTA* {.final.} = object
+  EMRPOLYTEXTOUTA* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
     iGraphicsMode*: DWORD
@@ -8908,100 +8844,89 @@ type
     cStrings*: LONG
     aemrtext*: array[0..0, EMRTEXT]
 
-  tagEMRPOLYTEXTOUTA* = EMRPOLYTEXTOUTA
   TEMRPOLYTEXTOUTA* = EMRPOLYTEXTOUTA
   PEMRPOLYTEXTOUTA* = ptr EMRPOLYTEXTOUTA
   EMRPOLYTEXTOUTW* = EMRPOLYTEXTOUTA
   TEMRPOLYTEXTOUTW* = EMRPOLYTEXTOUTA
   PEMRPOLYTEXTOUTW* = ptr EMRPOLYTEXTOUTA
-  EMRRESIZEPALETTE* {.final.} = object
+  EMRRESIZEPALETTE* {.final, pure.} = object
     emr*: EMR
     ihPal*: DWORD
     cEntries*: DWORD
 
-  tagEMRRESIZEPALETTE* = EMRRESIZEPALETTE
   TEMRRESIZEPALETTE* = EMRRESIZEPALETTE
   PEMRRESIZEPALETTE* = ptr EMRRESIZEPALETTE
-  EMRRESTOREDC* {.final.} = object
+  EMRRESTOREDC* {.final, pure.} = object
     emr*: EMR
     iRelative*: LONG
 
-  tagEMRRESTOREDC* = EMRRESTOREDC
   TEMRRESTOREDC* = EMRRESTOREDC
   PEMRRESTOREDC* = ptr EMRRESTOREDC
-  EMRROUNDRECT* {.final.} = object
+  EMRROUNDRECT* {.final, pure.} = object
     emr*: EMR
     rclBox*: RECTL
     szlCorner*: SIZEL
 
-  tagEMRROUNDRECT* = EMRROUNDRECT
   TEMRROUNDRECT* = EMRROUNDRECT
   PEMRROUNDRECT* = ptr EMRROUNDRECT
-  EMRSCALEVIEWPORTEXTEX* {.final.} = object
+  EMRSCALEVIEWPORTEXTEX* {.final, pure.} = object
     emr*: EMR
     xNum*: LONG
     xDenom*: LONG
     yNum*: LONG
     yDenom*: LONG
 
-  tagEMRSCALEVIEWPORTEXTEX* = EMRSCALEVIEWPORTEXTEX
   TEMRSCALEVIEWPORTEXTEX* = EMRSCALEVIEWPORTEXTEX
   PEMRSCALEVIEWPORTEXTEX* = ptr EMRSCALEVIEWPORTEXTEX
   EMRSCALEWINDOWEXTEX* = EMRSCALEVIEWPORTEXTEX
   TEMRSCALEWINDOWEXTEX* = EMRSCALEVIEWPORTEXTEX
   PEMRSCALEWINDOWEXTEX* = ptr EMRSCALEVIEWPORTEXTEX
-  EMRSELECTCOLORSPACE* {.final.} = object
+  EMRSELECTCOLORSPACE* {.final, pure.} = object
     emr*: EMR
     ihCS*: DWORD
 
-  tagEMRSELECTCOLORSPACE* = EMRSELECTCOLORSPACE
   TEMRSELECTCOLORSPACE* = EMRSELECTCOLORSPACE
   PEMRSELECTCOLORSPACE* = ptr EMRSELECTCOLORSPACE
   EMRDELETECOLORSPACE* = EMRSELECTCOLORSPACE
   TEMRDELETECOLORSPACE* = EMRSELECTCOLORSPACE
   PEMRDELETECOLORSPACE* = ptr EMRSELECTCOLORSPACE
-  EMRSELECTOBJECT* {.final.} = object
+  EMRSELECTOBJECT* {.final, pure.} = object
     emr*: EMR
     ihObject*: DWORD
 
-  tagEMRSELECTOBJECT* = EMRSELECTOBJECT
   TEMRSELECTOBJECT* = EMRSELECTOBJECT
   PEMRSELECTOBJECT* = ptr EMRSELECTOBJECT
   EMRDELETEOBJECT* = EMRSELECTOBJECT
   TEMRDELETEOBJECT* = EMRSELECTOBJECT
   PEMRDELETEOBJECT* = ptr EMRSELECTOBJECT
-  EMRSELECTPALETTE* {.final.} = object
+  EMRSELECTPALETTE* {.final, pure.} = object
     emr*: EMR
     ihPal*: DWORD
 
-  tagEMRSELECTPALETTE* = EMRSELECTPALETTE
   TEMRSELECTPALETTE* = EMRSELECTPALETTE
   PEMRSELECTPALETTE* = ptr EMRSELECTPALETTE
-  EMRSETARCDIRECTION* {.final.} = object
+  EMRSETARCDIRECTION* {.final, pure.} = object
     emr*: EMR
     iArcDirection*: DWORD
 
-  tagEMRSETARCDIRECTION* = EMRSETARCDIRECTION
   TEMRSETARCDIRECTION* = EMRSETARCDIRECTION
   PEMRSETARCDIRECTION* = ptr EMRSETARCDIRECTION
-  EMRSETBKCOLOR* {.final.} = object
+  EMRSETBKCOLOR* {.final, pure.} = object
     emr*: EMR
     crColor*: COLORREF
 
-  tagEMRSETTEXTCOLOR* = EMRSETBKCOLOR
   TEMRSETBKCOLOR* = EMRSETBKCOLOR
   PEMRSETBKCOLOR* = ptr EMRSETBKCOLOR
   EMRSETTEXTCOLOR* = EMRSETBKCOLOR
   TEMRSETTEXTCOLOR* = EMRSETBKCOLOR
   PEMRSETTEXTCOLOR* = ptr EMRSETBKCOLOR
-  EMRSETCOLORADJUSTMENT* {.final.} = object
+  EMRSETCOLORADJUSTMENT* {.final, pure.} = object
     emr*: EMR
     ColorAdjustment*: COLORADJUSTMENT
 
-  tagEMRSETCOLORADJUSTMENT* = EMRSETCOLORADJUSTMENT
   TEMRSETCOLORADJUSTMENT* = EMRSETCOLORADJUSTMENT
   PEMRSETCOLORADJUSTMENT* = ptr EMRSETCOLORADJUSTMENT
-  EMRSETDIBITSTODEVICE* {.final.} = object
+  EMRSETDIBITSTODEVICE* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
     xDest*: LONG
@@ -9018,56 +8943,49 @@ type
     iStartScan*: DWORD
     cScans*: DWORD
 
-  tagEMRSETDIBITSTODEVICE* = EMRSETDIBITSTODEVICE
   TEMRSETDIBITSTODEVICE* = EMRSETDIBITSTODEVICE
   PEMRSETDIBITSTODEVICE* = ptr EMRSETDIBITSTODEVICE
-  EMRSETMAPPERFLAGS* {.final.} = object
+  EMRSETMAPPERFLAGS* {.final, pure.} = object
     emr*: EMR
     dwFlags*: DWORD
 
-  tagEMRSETMAPPERFLAGS* = EMRSETMAPPERFLAGS
   TEMRSETMAPPERFLAGS* = EMRSETMAPPERFLAGS
   PEMRSETMAPPERFLAGS* = ptr EMRSETMAPPERFLAGS
-  EMRSETMITERLIMIT* {.final.} = object
+  EMRSETMITERLIMIT* {.final, pure.} = object
     emr*: EMR
     eMiterLimit*: float32
 
-  tagEMRSETMITERLIMIT* = EMRSETMITERLIMIT
   TEMRSETMITERLIMIT* = EMRSETMITERLIMIT
   PEMRSETMITERLIMIT* = ptr EMRSETMITERLIMIT
-  EMRSETPALETTEENTRIES* {.final.} = object
+  EMRSETPALETTEENTRIES* {.final, pure.} = object
     emr*: EMR
     ihPal*: DWORD
     iStart*: DWORD
     cEntries*: DWORD
     aPalEntries*: array[0..0, PALETTEENTRY]
 
-  tagEMRSETPALETTEENTRIES* = EMRSETPALETTEENTRIES
   TEMRSETPALETTEENTRIES* = EMRSETPALETTEENTRIES
   PEMRSETPALETTEENTRIES* = ptr EMRSETPALETTEENTRIES
-  EMRSETPIXELV* {.final.} = object
+  EMRSETPIXELV* {.final, pure.} = object
     emr*: EMR
     ptlPixel*: POINTL
     crColor*: COLORREF
 
-  tagEMRSETPIXELV* = EMRSETPIXELV
   TEMRSETPIXELV* = EMRSETPIXELV
   PEMRSETPIXELV* = ptr EMRSETPIXELV
-  EMRSETVIEWPORTEXTEX* {.final.} = object
+  EMRSETVIEWPORTEXTEX* {.final, pure.} = object
     emr*: EMR
     szlExtent*: SIZEL
 
-  tagEMRSETVIEWPORTEXTEX* = EMRSETVIEWPORTEXTEX
   TEMRSETVIEWPORTEXTEX* = EMRSETVIEWPORTEXTEX
   PEMRSETVIEWPORTEXTEX* = ptr EMRSETVIEWPORTEXTEX
   EMRSETWINDOWEXTEX* = EMRSETVIEWPORTEXTEX
   TEMRSETWINDOWEXTEX* = EMRSETVIEWPORTEXTEX
   PEMRSETWINDOWEXTEX* = ptr EMRSETVIEWPORTEXTEX
-  EMRSETVIEWPORTORGEX* {.final.} = object
+  EMRSETVIEWPORTORGEX* {.final, pure.} = object
     emr*: EMR
     ptlOrigin*: POINTL
 
-  tagEMRSETVIEWPORTORGEX* = EMRSETVIEWPORTORGEX
   TEMRSETVIEWPORTORGEX* = EMRSETVIEWPORTORGEX
   PEMRSETVIEWPORTORGEX* = ptr EMRSETVIEWPORTORGEX
   EMRSETWINDOWORGEX* = EMRSETVIEWPORTORGEX
@@ -9076,14 +8994,13 @@ type
   EMRSETBRUSHORGEX* = EMRSETVIEWPORTORGEX
   TEMRSETBRUSHORGEX* = EMRSETVIEWPORTORGEX
   PEMRSETBRUSHORGEX* = ptr EMRSETVIEWPORTORGEX
-  EMRSETWORLDTRANSFORM* {.final.} = object
+  EMRSETWORLDTRANSFORM* {.final, pure.} = object
     emr*: EMR
     xform*: XFORM
 
-  tagEMRSETWORLDTRANSFORM* = EMRSETWORLDTRANSFORM
   TEMRSETWORLDTRANSFORM* = EMRSETWORLDTRANSFORM
   PEMRSETWORLDTRANSFORM* = ptr EMRSETWORLDTRANSFORM
-  EMRSTRETCHBLT* {.final.} = object
+  EMRSTRETCHBLT* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
     xDest*: LONG
@@ -9103,10 +9020,9 @@ type
     cxSrc*: LONG
     cySrc*: LONG
 
-  tagEMRSTRETCHBLT* = EMRSTRETCHBLT
   TEMRSTRETCHBLT* = EMRSTRETCHBLT
   PEMRSTRETCHBLT* = ptr EMRSTRETCHBLT
-  EMRSTRETCHDIBITS* {.final.} = object
+  EMRSTRETCHDIBITS* {.final, pure.} = object
     emr*: EMR
     rclBounds*: RECTL
     xDest*: LONG
@@ -9124,15 +9040,13 @@ type
     cxDest*: LONG
     cyDest*: LONG
 
-  tagEMRSTRETCHDIBITS* = EMRSTRETCHDIBITS
   TEMRSTRETCHDIBITS* = EMRSTRETCHDIBITS
   PEMRSTRETCHDIBITS* = ptr EMRSTRETCHDIBITS
-  EMRABORTPATH* {.final.} = object
+  EMRABORTPATH* {.final, pure.} = object
     emr*: EMR
 
   TEMRABORTPATH* = EMRABORTPATH
   PEMRABORTPATH* = ptr EMRABORTPATH
-  tagABORTPATH* = EMRABORTPATH
   TABORTPATH* = EMRABORTPATH
   EMRBEGINPATH* = EMRABORTPATH
   TEMRBEGINPATH* = EMRABORTPATH
@@ -9158,11 +9072,10 @@ type
   EMRREALIZEPALETTE* = EMRABORTPATH
   TEMRREALIZEPALETTE* = EMRABORTPATH
   PEMRREALIZEPALETTE* = ptr EMRABORTPATH
-  EMRSELECTCLIPPATH* {.final.} = object
+  EMRSELECTCLIPPATH* {.final, pure.} = object
     emr*: EMR
     iMode*: DWORD
 
-  tagEMRSELECTCLIPPATH* = EMRSELECTCLIPPATH
   TEMRSELECTCLIPPATH* = EMRSELECTCLIPPATH
   PEMRSELECTCLIPPATH* = ptr EMRSELECTCLIPPATH
   EMRSETBKMODE* = EMRSELECTCLIPPATH
@@ -9186,41 +9099,40 @@ type
   EMRENABLEICM* = EMRSELECTCLIPPATH
   TEMRENABLEICM* = EMRSELECTCLIPPATH
   PEMRENABLEICM* = ptr EMRSELECTCLIPPATH
-  NMHDR* {.final.} = object
+  NMHDR* {.final, pure.} = object
     hwndFrom*: HWND
     idFrom*: UINT
     code*: UINT
 
-  tagNMHDR* = NMHDR
   TNMHDR* = NMHDR
   PNMHDR* = ptr NMHDR
-  TENCORRECTTEXT* {.final.} = object
+  TENCORRECTTEXT* {.final, pure.} = object
     nmhdr*: NMHDR
     chrg*: CHARRANGE
     seltyp*: int16
 
   Pencorrecttext* = ptr TENCORRECTTEXT
-  TENDROPFILES* {.final.} = object
+  TENDROPFILES* {.final, pure.} = object
     nmhdr*: NMHDR
     hDrop*: HANDLE
     cp*: LONG
     fProtected*: WINBOOL
 
   Pendropfiles* = ptr TENDROPFILES
-  TENSAVECLIPBOARD* {.final.} = object
+  TENSAVECLIPBOARD* {.final, pure.} = object
     nmhdr*: NMHDR
     cObjectCount*: LONG
     cch*: LONG
 
   PENSAVECLIPBOARD* = ptr TENSAVECLIPBOARD
-  TENOLEOPFAILED* {.final.} = object
+  TENOLEOPFAILED* {.final, pure.} = object
     nmhdr*: NMHDR
     iob*: LONG
     lOper*: LONG
     hr*: HRESULT
 
   PENOLEOPFAILED* = ptr TENOLEOPFAILED
-  TENHMETAHEADER* {.final.} = object
+  TENHMETAHEADER* {.final, pure.} = object
     iType*: DWORD
     nSize*: DWORD
     rclBounds*: RECTL
@@ -9239,14 +9151,14 @@ type
 
   LPENHMETAHEADER* = ptr TENHMETAHEADER
   PENHMETAHEADER* = ptr TENHMETAHEADER
-  TENHMETARECORD* {.final.} = object
+  TENHMETARECORD* {.final, pure.} = object
     iType*: DWORD
     nSize*: DWORD
     dParm*: array[0..0, DWORD]
 
   LPENHMETARECORD* = ptr TENHMETARECORD
   PENHMETARECORD* = ptr TENHMETARECORD
-  TENPROTECTED* {.final.} = object
+  TENPROTECTED* {.final, pure.} = object
     nmhdr*: NMHDR
     msg*: UINT
     wParam*: WPARAM
@@ -9254,7 +9166,7 @@ type
     chrg*: CHARRANGE
 
   Penprotected* = ptr TENPROTECTED
-  SERVICE_STATUS* {.final.} = object
+  SERVICE_STATUS* {.final, pure.} = object
     dwServiceType*: DWORD
     dwCurrentState*: DWORD
     dwControlsAccepted*: DWORD
@@ -9266,7 +9178,7 @@ type
   LPSERVICE_STATUS* = ptr SERVICE_STATUS
   TSERVICESTATUS* = SERVICE_STATUS
   PSERVICESTATUS* = ptr SERVICE_STATUS
-  ENUM_SERVICE_STATUS* {.final.} = object
+  ENUM_SERVICE_STATUS* {.final, pure.} = object
     lpServiceName*: LPTSTR
     lpDisplayName*: LPTSTR
     ServiceStatus*: SERVICE_STATUS
@@ -9274,20 +9186,19 @@ type
   LPENUM_SERVICE_STATUS* = ptr ENUM_SERVICE_STATUS
   TENUMSERVICESTATUS* = ENUM_SERVICE_STATUS
   PENUMSERVICESTATUS* = ptr ENUM_SERVICE_STATUS
-  ENUMLOGFONT* {.final.} = object
+  ENUMLOGFONT* {.final, pure.} = object
     elfLogFont*: LOGFONT
     elfFullName*: array[0..(LF_FULLFACESIZE) - 1, BCHAR]
     elfStyle*: array[0..(LF_FACESIZE) - 1, BCHAR]
 
   TENUMLOGFONT* = ENUMLOGFONT
   PENUMLOGFONT* = ptr ENUMLOGFONT
-  ENUMLOGFONTEX* {.final.} = object
+  ENUMLOGFONTEX* {.final, pure.} = object
     elfLogFont*: LOGFONT
     elfFullName*: array[0..(LF_FULLFACESIZE) - 1, BCHAR]
     elfStyle*: array[0..(LF_FACESIZE) - 1, BCHAR]
     elfScript*: array[0..(LF_FACESIZE) - 1, BCHAR]
 
-  tagENUMLOGFONTEX* = ENUMLOGFONTEX
   TENUMLOGFONTEX* = ENUMLOGFONTEX
   PENUMLOGFONTEX* = ptr ENUMLOGFONTEX #
                                       #    Then follow:
@@ -9300,7 +9211,7 @@ type
                                       #    CHAR  Pad[]
                                       #    DWORD Length;
                                       #
-  EVENTLOGRECORD* {.final.} = object
+  EVENTLOGRECORD* {.final, pure.} = object
     len*: DWORD
     Reserved*: DWORD
     RecordNumber*: DWORD
@@ -9320,24 +9231,23 @@ type
 
   TEVENTLOGRECORD* = EVENTLOGRECORD
   PEVENTLOGRECORD* = ptr EVENTLOGRECORD
-  EVENTMSG* {.final.} = object
+  EVENTMSG* {.final, pure.} = object
     message*: UINT
     paramL*: UINT
     paramH*: UINT
     time*: DWORD
     hwnd*: HWND
 
-  tagEVENTMSG* = EVENTMSG
   TEVENTMSG* = EVENTMSG
   PEVENTMSG* = ptr EVENTMSG
-  EXCEPTION_POINTERS* {.final.} = object
+  EXCEPTION_POINTERS* {.final, pure.} = object
     ExceptionRecord*: PEXCEPTION_RECORD
     ContextRecord*: PCONTEXT
 
   LPEXCEPTION_POINTERS* = ptr EXCEPTION_POINTERS
   PEXCEPTION_POINTERS* = ptr EXCEPTION_POINTERS
   TEXCEPTIONPOINTERS* = EXCEPTION_POINTERS
-  EXT_BUTTON* {.final.} = object
+  EXT_BUTTON* {.final, pure.} = object
     idCommand*: int16
     idsHelp*: int16
     fsStyle*: int16
@@ -9345,7 +9255,7 @@ type
   LPEXT_BUTTON* = ptr EXT_BUTTON
   TEXTBUTTON* = EXT_BUTTON
   PEXTBUTTON* = ptr EXT_BUTTON
-  FILTERKEYS* {.final.} = object
+  FILTERKEYS* {.final, pure.} = object
     cbSize*: UINT
     dwFlags*: DWORD
     iWaitMSec*: DWORD
@@ -9355,7 +9265,7 @@ type
 
   TFILTERKEYS* = FILTERKEYS
   PFILTERKEYS* = ptr FILTERKEYS
-  FIND_NAME_BUFFER* {.final.} = object
+  FIND_NAME_BUFFER* {.final, pure.} = object
     len*: UCHAR
     access_control*: UCHAR
     frame_control*: UCHAR
@@ -9365,14 +9275,14 @@ type
 
   TFINDNAMEBUFFER* = FIND_NAME_BUFFER
   PFINDNAMEBUFFER* = ptr FIND_NAME_BUFFER
-  FIND_NAME_HEADER* {.final.} = object
+  FIND_NAME_HEADER* {.final, pure.} = object
     node_count*: int16
     reserved*: UCHAR
     unique_group*: UCHAR
 
   TFINDNAMEHEADER* = FIND_NAME_HEADER
   PFINDNAMEHEADER* = ptr FIND_NAME_HEADER
-  FINDREPLACE* {.final.} = object
+  FINDREPLACE* {.final, pure.} = object
     lStructSize*: DWORD
     hwndOwner*: HWND
     hInstance*: HINST
@@ -9388,19 +9298,19 @@ type
   LPFINDREPLACE* = ptr FINDREPLACE
   TFINDREPLACE* = FINDREPLACE
   PFINDREPLACE* = ptr FINDREPLACE #FINDTEXT = record conflicts with FindText function
-  TFINDTEXT* {.final.} = object
+  TFINDTEXT* {.final, pure.} = object
     chrg*: CHARRANGE
     lpstrText*: LPSTR
 
   Pfindtext* = ptr TFINDTEXT
-  FINDTEXTEX* {.final.} = object
+  FINDTEXTEX* {.final, pure.} = object
     chrg*: CHARRANGE
     lpstrText*: LPSTR
     chrgText*: CHARRANGE
 
   Tfindtextex* = FINDTEXTEX
   Pfindtextex* = ptr FINDTEXTEX
-  FMS_GETDRIVEINFO* {.final.} = object
+  FMS_GETDRIVEINFO* {.final, pure.} = object
     dwTotalSpace*: DWORD
     dwFreeSpace*: DWORD
     szPath*: array[0..259, TCHAR]
@@ -9409,7 +9319,7 @@ type
 
   TFMSGETDRIVEINFO* = FMS_GETDRIVEINFO
   PFMSGETDRIVEINFO* = ptr FMS_GETDRIVEINFO
-  FMS_GETFILESEL* {.final.} = object
+  FMS_GETFILESEL* {.final, pure.} = object
     ftTime*: FILETIME
     dwSize*: DWORD
     bAttr*: int8
@@ -9417,7 +9327,7 @@ type
 
   TFMSGETFILESEL* = FMS_GETFILESEL
   PFMSGETFILESEL* = ptr FMS_GETFILESEL
-  FMS_LOAD* {.final.} = object
+  FMS_LOAD* {.final, pure.} = object
     dwSize*: DWORD
     szMenuName*: array[0..(MENU_TEXT_LEN) - 1, TCHAR]
     hMenu*: HMENU
@@ -9425,7 +9335,7 @@ type
 
   TFMSLOAD* = FMS_LOAD
   PFMSLOAD* = ptr FMS_LOAD
-  FMS_TOOLBARLOAD* {.final.} = object
+  FMS_TOOLBARLOAD* {.final, pure.} = object
     dwSize*: DWORD
     lpButtons*: LPEXT_BUTTON
     cButtons*: int16
@@ -9435,12 +9345,12 @@ type
 
   TFMSTOOLBARLOAD* = FMS_TOOLBARLOAD
   PFMSTOOLBARLOAD* = ptr FMS_TOOLBARLOAD
-  FOCUS_EVENT_RECORD* {.final.} = object
+  FOCUS_EVENT_RECORD* {.final, pure.} = object
     bSetFocus*: WINBOOL
 
   TFOCUSEVENTRECORD* = FOCUS_EVENT_RECORD
   PFOCUSEVENTRECORD* = ptr FOCUS_EVENT_RECORD
-  FORM_INFO_1* {.final.} = object
+  FORM_INFO_1* {.final, pure.} = object
     Flags*: DWORD
     pName*: LPTSTR
     Size*: SIZEL
@@ -9448,7 +9358,7 @@ type
 
   TFORMINFO1* = FORM_INFO_1
   PFORMINFO1* = ptr FORM_INFO_1
-  FORMAT_PARAMETERS* {.final.} = object
+  FORMAT_PARAMETERS* {.final, pure.} = object
     MediaType*: MEDIA_TYPE
     StartCylinderNumber*: DWORD
     EndCylinderNumber*: DWORD
@@ -9457,7 +9367,7 @@ type
 
   TFORMATPARAMETERS* = FORMAT_PARAMETERS
   PFORMATPARAMETERS* = ptr FORMAT_PARAMETERS
-  FORMATRANGE* {.final.} = object
+  FORMATRANGE* {.final, pure.} = object
     hdc*: HDC
     hdcTarget*: HDC
     rc*: RECT
@@ -9466,7 +9376,7 @@ type
 
   Tformatrange* = FORMATRANGE
   Pformatrange* = ptr FORMATRANGE
-  GCP_RESULTS* {.final.} = object
+  GCP_RESULTS* {.final, pure.} = object
     lStructSize*: DWORD
     lpOutString*: LPTSTR
     lpOrder*: ptr UINT
@@ -9478,10 +9388,9 @@ type
     nMaxFit*: UINT
 
   LPGCP_RESULTS* = ptr GCP_RESULTS
-  tagGCP_RESULTS* = GCP_RESULTS
   TGCPRESULTS* = GCP_RESULTS
   PGCPRESULTS* = ptr GCP_RESULTS
-  GENERIC_MAPPING* {.final.} = object
+  GENERIC_MAPPING* {.final, pure.} = object
     GenericRead*: ACCESS_MASK
     GenericWrite*: ACCESS_MASK
     GenericExecute*: ACCESS_MASK
@@ -9489,7 +9398,7 @@ type
 
   PGENERIC_MAPPING* = ptr GENERIC_MAPPING
   TGENERICMAPPING* = GENERIC_MAPPING
-  GLYPHMETRICS* {.final.} = object
+  GLYPHMETRICS* {.final, pure.} = object
     gmBlackBoxX*: UINT
     gmBlackBoxY*: UINT
     gmptGlyphOrigin*: POINT
@@ -9499,20 +9408,19 @@ type
   LPGLYPHMETRICS* = ptr GLYPHMETRICS
   TGLYPHMETRICS* = GLYPHMETRICS
   PGLYPHMETRICS* = ptr GLYPHMETRICS
-  HANDLETABLE* {.final.} = object
+  HANDLETABLE* {.final, pure.} = object
     objectHandle*: array[0..0, HGDIOBJ]
 
-  tagHANDLETABLE* = HANDLETABLE
   THANDLETABLE* = HANDLETABLE
   LPHANDLETABLE* = ptr HANDLETABLE
-  HD_HITTESTINFO* {.final.} = object
+  HD_HITTESTINFO* {.final, pure.} = object
     pt*: POINT
     flags*: UINT
     iItem*: int32
 
   THDHITTESTINFO* = HD_HITTESTINFO
   PHDHITTESTINFO* = ptr HD_HITTESTINFO
-  HD_ITEM* {.final.} = object
+  HD_ITEM* {.final, pure.} = object
     mask*: UINT
     cxy*: int32
     pszText*: LPTSTR
@@ -9523,7 +9431,7 @@ type
 
   THDITEM* = HD_ITEM
   PHDITEM* = ptr HD_ITEM
-  WINDOWPOS* {.final.} = object
+  WINDOWPOS* {.final, pure.} = object
     hwnd*: HWND
     hwndInsertAfter*: HWND
     x*: int32
@@ -9535,13 +9443,13 @@ type
   LPWINDOWPOS* = ptr WINDOWPOS
   TWINDOWPOS* = WINDOWPOS
   PWINDOWPOS* = ptr WINDOWPOS
-  HD_LAYOUT* {.final.} = object
+  HD_LAYOUT* {.final, pure.} = object
     prc*: ptr RECT
     pwpos*: ptr WINDOWPOS
 
   THDLAYOUT* = HD_LAYOUT
   PHDLAYOUT* = ptr HD_LAYOUT
-  HD_NOTIFY* {.final.} = object
+  HD_NOTIFY* {.final, pure.} = object
     hdr*: NMHDR
     iItem*: int32
     iButton*: int32
@@ -9549,7 +9457,7 @@ type
 
   THDNOTIFY* = HD_NOTIFY
   PHDNOTIFY* = ptr HD_NOTIFY
-  HELPINFO* {.final.} = object
+  HELPINFO* {.final, pure.} = object
     cbSize*: UINT
     iContextType*: int32
     iCtrlId*: int32
@@ -9558,10 +9466,9 @@ type
     MousePos*: POINT
 
   LPHELPINFO* = ptr HELPINFO
-  tagHELPINFO* = HELPINFO
   THELPINFO* = HELPINFO
   PHELPINFO* = ptr HELPINFO
-  HELPWININFO* {.final.} = object
+  HELPWININFO* {.final, pure.} = object
     wStructSize*: int32
     x*: int32
     y*: int32
@@ -9572,23 +9479,21 @@ type
 
   THELPWININFO* = HELPWININFO
   PHELPWININFO* = ptr HELPWININFO
-  HIGHCONTRAST* {.final.} = object
+  HIGHCONTRAST* {.final, pure.} = object
     cbSize*: UINT
     dwFlags*: DWORD
     lpszDefaultScheme*: LPTSTR
 
   LPHIGHCONTRAST* = ptr HIGHCONTRAST
-  tagHIGHCONTRAST* = HIGHCONTRAST
   THIGHCONTRAST* = HIGHCONTRAST
   PHIGHCONTRAST* = ptr HIGHCONTRAST
-  HSZPAIR* {.final.} = object
+  HSZPAIR* {.final, pure.} = object
     hszSvc*: HSZ
     hszTopic*: HSZ
 
-  tagHSZPAIR* = HSZPAIR
   THSZPAIR* = HSZPAIR
   PHSZPAIR* = ptr HSZPAIR
-  ICONINFO* {.final.} = object
+  ICONINFO* {.final, pure.} = object
     fIcon*: WINBOOL
     xHotspot*: DWORD
     yHotspot*: DWORD
@@ -9597,7 +9502,7 @@ type
 
   TICONINFO* = ICONINFO
   PICONINFO* = ptr ICONINFO
-  ICONMETRICS* {.final.} = object
+  ICONMETRICS* {.final, pure.} = object
     cbSize*: UINT
     iHorzSpacing*: int32
     iVertSpacing*: int32
@@ -9605,10 +9510,9 @@ type
     lfFont*: LOGFONT
 
   LPICONMETRICS* = ptr ICONMETRICS
-  tagICONMETRICS* = ICONMETRICS
   TICONMETRICS* = ICONMETRICS
   PICONMETRICS* = ptr ICONMETRICS
-  IMAGEINFO* {.final.} = object
+  IMAGEINFO* {.final, pure.} = object
     hbmImage*: HBITMAP
     hbmMask*: HBITMAP
     Unused1*: int32
@@ -9617,7 +9521,7 @@ type
 
   TIMAGEINFO* = IMAGEINFO
   PIMAGEINFO* = ptr IMAGEINFO
-  KEY_EVENT_RECORD* {.final.} = object
+  KEY_EVENT_RECORD* {.final, pure.} = object
     bKeyDown*: WINBOOL
     wRepeatCount*: int16
     wVirtualKeyCode*: int16
@@ -9627,7 +9531,7 @@ type
 
   TKEYEVENTRECORD* = KEY_EVENT_RECORD
   PKEYEVENTRECORD* = ptr KEY_EVENT_RECORD
-  MOUSE_EVENT_RECORD* {.final.} = object
+  MOUSE_EVENT_RECORD* {.final, pure.} = object
     dwMousePosition*: COORD
     dwButtonState*: DWORD
     dwControlKeyState*: DWORD
@@ -9635,17 +9539,17 @@ type
 
   TMOUSEEVENTRECORD* = MOUSE_EVENT_RECORD
   PMOUSEEVENTRECORD* = ptr MOUSE_EVENT_RECORD
-  WINDOW_BUFFER_SIZE_RECORD* {.final.} = object
+  WINDOW_BUFFER_SIZE_RECORD* {.final, pure.} = object
     dwSize*: COORD
 
   TWINDOWBUFFERSIZERECORD* = WINDOW_BUFFER_SIZE_RECORD
   PWINDOWBUFFERSIZERECORD* = ptr WINDOW_BUFFER_SIZE_RECORD
-  MENU_EVENT_RECORD* {.final.} = object
+  MENU_EVENT_RECORD* {.final, pure.} = object
     dwCommandId*: UINT
 
   PMENU_EVENT_RECORD* = ptr MENU_EVENT_RECORD
   TMENUEVENTRECORD* = MENU_EVENT_RECORD
-  INPUT_RECORD* {.final.} = object
+  INPUT_RECORD* {.final, pure.} = object
     EventType*: int16
     Reserved*: int16
     event*: array[0..5, DWORD] #Event : record case longint of
@@ -9658,7 +9562,7 @@ type
 
   PINPUT_RECORD* = ptr INPUT_RECORD
   TINPUTRECORD* = INPUT_RECORD
-  SYSTEMTIME* {.final.} = object
+  SYSTEMTIME* {.final, pure.} = object
     wYear*: int16
     wMonth*: int16
     wDayOfWeek*: int16
@@ -9671,7 +9575,7 @@ type
   LPSYSTEMTIME* = ptr SYSTEMTIME
   TSYSTEMTIME* = SYSTEMTIME
   PSYSTEMTIME* = ptr SYSTEMTIME
-  JOB_INFO_1* {.final.} = object
+  JOB_INFO_1* {.final, pure.} = object
     JobId*: DWORD
     pPrinterName*: LPTSTR
     pMachineName*: LPTSTR
@@ -9688,13 +9592,13 @@ type
 
   TJOBINFO1* = JOB_INFO_1
   PJOBINFO1* = ptr JOB_INFO_1
-  SID_IDENTIFIER_AUTHORITY* {.final.} = object
+  SID_IDENTIFIER_AUTHORITY* {.final, pure.} = object
     Value*: array[0..5, int8]
 
   LPSID_IDENTIFIER_AUTHORITY* = ptr SID_IDENTIFIER_AUTHORITY
   PSID_IDENTIFIER_AUTHORITY* = ptr SID_IDENTIFIER_AUTHORITY
   TSIDIDENTIFIERAUTHORITY* = SID_IDENTIFIER_AUTHORITY
-  SID* {.final.} = object
+  SID* {.final, pure.} = object
     Revision*: int8
     SubAuthorityCount*: int8
     IdentifierAuthority*: SID_IDENTIFIER_AUTHORITY
@@ -9705,7 +9609,7 @@ type
   SECURITY_DESCRIPTOR_CONTROL* = int16
   PSECURITY_DESCRIPTOR_CONTROL* = ptr SECURITY_DESCRIPTOR_CONTROL
   TSECURITYDESCRIPTORCONTROL* = SECURITY_DESCRIPTOR_CONTROL
-  SECURITY_DESCRIPTOR* {.final.} = object
+  SECURITY_DESCRIPTOR* {.final, pure.} = object
     Revision*: int8
     Sbz1*: int8
     Control*: SECURITY_DESCRIPTOR_CONTROL
@@ -9716,7 +9620,7 @@ type
 
   PSECURITY_DESCRIPTOR* = ptr SECURITY_DESCRIPTOR
   TSECURITYDESCRIPTOR* = SECURITY_DESCRIPTOR
-  JOB_INFO_2* {.final.} = object
+  JOB_INFO_2* {.final, pure.} = object
     JobId*: DWORD
     pPrinterName*: LPTSTR
     pMachineName*: LPTSTR
@@ -9743,7 +9647,7 @@ type
 
   TJOBINFO2* = JOB_INFO_2
   PJOBINFO2* = ptr JOB_INFO_2
-  KERNINGPAIR* {.final.} = object
+  KERNINGPAIR* {.final, pure.} = object
     wFirst*: int16
     wSecond*: int16
     iKernAmount*: int32
@@ -9751,13 +9655,13 @@ type
   LPKERNINGPAIR* = ptr KERNINGPAIR
   TKERNINGPAIR* = KERNINGPAIR
   PKERNINGPAIR* = ptr KERNINGPAIR
-  LANA_ENUM* {.final.} = object
+  LANA_ENUM* {.final, pure.} = object
     len*: UCHAR
     lana*: array[0..(MAX_LANA) - 1, UCHAR]
 
   TLANAENUM* = LANA_ENUM
   PLANAENUM* = ptr LANA_ENUM
-  LDT_ENTRY* {.final.} = object
+  LDT_ENTRY* {.final, pure.} = object
     LimitLow*: int16
     BaseLow*: int16
     BaseMid*: int8
@@ -9792,20 +9696,19 @@ const
   bp_LDT_ENTRY_BaseHi* = 24
 
 type
-  LOCALESIGNATURE* {.final.} = object
+  LOCALESIGNATURE* {.final, pure.} = object
     lsUsb*: array[0..3, DWORD]
     lsCsbDefault*: array[0..1, DWORD]
     lsCsbSupported*: array[0..1, DWORD]
 
-  tagLOCALESIGNATURE* = LOCALESIGNATURE
   TLOCALESIGNATURE* = LOCALESIGNATURE
   PLOCALESIGNATURE* = ptr LOCALESIGNATURE
-  LOCALGROUP_MEMBERS_INFO_0* {.final.} = object
+  LOCALGROUP_MEMBERS_INFO_0* {.final, pure.} = object
     lgrmi0_sid*: PSID
 
   TLOCALGROUPMEMBERSINFO0* = LOCALGROUP_MEMBERS_INFO_0
   PLOCALGROUPMEMBERSINFO0* = ptr LOCALGROUP_MEMBERS_INFO_0
-  LOCALGROUP_MEMBERS_INFO_3* {.final.} = object
+  LOCALGROUP_MEMBERS_INFO_3* {.final, pure.} = object
     lgrmi3_domainandname*: LPWSTR
 
   TLOCALGROUPMEMBERSINFO3* = LOCALGROUP_MEMBERS_INFO_3
@@ -9817,7 +9720,7 @@ type
   LUID* = TlargeInteger
   TLUID* = LUID
   PLUID* = ptr LUID
-  LUID_AND_ATTRIBUTES* {.final.} = object
+  LUID_AND_ATTRIBUTES* {.final, pure.} = object
     Luid*: LUID
     Attributes*: DWORD
 
@@ -9826,7 +9729,7 @@ type
   LUID_AND_ATTRIBUTES_ARRAY* = array[0..(ANYSIZE_ARRAY) - 1, LUID_AND_ATTRIBUTES]
   PLUID_AND_ATTRIBUTES_ARRAY* = ptr LUID_AND_ATTRIBUTES_ARRAY
   TLUIDANDATTRIBUTESARRAY* = LUID_AND_ATTRIBUTES_ARRAY
-  LV_COLUMN* {.final.} = object
+  LV_COLUMN* {.final, pure.} = object
     mask*: UINT
     fmt*: int32
     cx*: int32
@@ -9836,7 +9739,7 @@ type
 
   TLVCOLUMN* = LV_COLUMN
   PLVCOLUMN* = ptr LV_COLUMN
-  LV_ITEM* {.final.} = object
+  LV_ITEM* {.final, pure.} = object
     mask*: UINT
     iItem*: int32
     iSubItem*: int32
@@ -9849,14 +9752,13 @@ type
 
   TLVITEM* = LV_ITEM
   PLVITEM* = ptr LV_ITEM
-  LV_DISPINFO* {.final.} = object
+  LV_DISPINFO* {.final, pure.} = object
     hdr*: NMHDR
     item*: LV_ITEM
 
-  tagLV_DISPINFO* = LV_DISPINFO
   TLVDISPINFO* = LV_DISPINFO
   PLVDISPINFO* = ptr LV_DISPINFO
-  LV_FINDINFO* {.final.} = object
+  LV_FINDINFO* {.final, pure.} = object
     flags*: UINT
     psz*: LPCTSTR
     lParam*: LPARAM
@@ -9865,22 +9767,21 @@ type
 
   TLVFINDINFO* = LV_FINDINFO
   PLVFINDINFO* = ptr LV_FINDINFO
-  LV_HITTESTINFO* {.final.} = object
+  LV_HITTESTINFO* {.final, pure.} = object
     pt*: POINT
     flags*: UINT
     iItem*: int32
 
   TLVHITTESTINFO* = LV_HITTESTINFO
   PLVHITTESTINFO* = ptr LV_HITTESTINFO
-  LV_KEYDOWN* {.final.} = object
+  LV_KEYDOWN* {.final, pure.} = object
     hdr*: NMHDR
     wVKey*: int16
     flags*: UINT
 
-  tagLV_KEYDOWN* = LV_KEYDOWN
   TLVKEYDOWN* = LV_KEYDOWN
   PLVKEYDOWN* = ptr LV_KEYDOWN
-  MAT2* {.final.} = object
+  MAT2* {.final, pure.} = object
     eM11*: FIXED
     eM12*: FIXED
     eM21*: FIXED
@@ -9888,7 +9789,7 @@ type
 
   TMAT2* = MAT2
   PMAT2* = ptr MAT2
-  MDICREATESTRUCT* {.final.} = object
+  MDICREATESTRUCT* {.final, pure.} = object
     szClass*: LPCTSTR
     szTitle*: LPCTSTR
     hOwner*: HANDLE
@@ -9900,10 +9801,9 @@ type
     lParam*: LPARAM
 
   LPMDICREATESTRUCT* = ptr MDICREATESTRUCT
-  tagMDICREATESTRUCT* = MDICREATESTRUCT
   TMDICREATESTRUCT* = MDICREATESTRUCT
   PMDICREATESTRUCT* = ptr MDICREATESTRUCT
-  MEASUREITEMSTRUCT* {.final.} = object
+  MEASUREITEMSTRUCT* {.final, pure.} = object
     CtlType*: UINT
     CtlID*: UINT
     itemID*: UINT
@@ -9912,10 +9812,9 @@ type
     itemData*: ULONG_PTR
 
   LPMEASUREITEMSTRUCT* = ptr MEASUREITEMSTRUCT
-  tagMEASUREITEMSTRUCT* = MEASUREITEMSTRUCT
   TMEASUREITEMSTRUCT* = MEASUREITEMSTRUCT
   PMEASUREITEMSTRUCT* = ptr MEASUREITEMSTRUCT
-  MEMORY_BASIC_INFORMATION* {.final.} = object
+  MEMORY_BASIC_INFORMATION* {.final, pure.} = object
     BaseAddress*: PVOID
     AllocationBase*: PVOID
     AllocationProtect*: DWORD
@@ -9926,7 +9825,7 @@ type
 
   PMEMORY_BASIC_INFORMATION* = ptr MEMORY_BASIC_INFORMATION
   TMEMORYBASICINFORMATION* = MEMORY_BASIC_INFORMATION
-  MEMORYSTATUS* {.final.} = object
+  MEMORYSTATUS* {.final, pure.} = object
     dwLength*: DWORD
     dwMemoryLoad*: DWORD
     dwTotalPhys*: int
@@ -9936,7 +9835,7 @@ type
     dwTotalVirtual*: int
     dwAvailVirtual*: int
 
-  TGUID* {.final.} = object
+  TGUID* {.final, pure.} = object
     D1*: int32
     D2*: int16
     D3*: int16
@@ -9945,14 +9844,14 @@ type
   LPMEMORYSTATUS* = ptr MEMORYSTATUS
   TMEMORYSTATUS* = MEMORYSTATUS
   PMEMORYSTATUS* = ptr MEMORYSTATUS
-  MENUEX_TEMPLATE_HEADER* {.final.} = object
+  MENUEX_TEMPLATE_HEADER* {.final, pure.} = object
     wVersion*: int16
     wOffset*: int16
     dwHelpId*: DWORD
 
   TMENUXTEMPLATEHEADER* = MENUEX_TEMPLATE_HEADER
   PMENUXTEMPLATEHEADER* = ptr MENUEX_TEMPLATE_HEADER
-  MENUEX_TEMPLATE_ITEM* {.final.} = object
+  MENUEX_TEMPLATE_ITEM* {.final, pure.} = object
     dwType*: DWORD
     dwState*: DWORD
     uId*: UINT
@@ -9962,7 +9861,7 @@ type
 
   TMENUEXTEMPLATEITEM* = MENUEX_TEMPLATE_ITEM
   PMENUEXTEMPLATEITEM* = ptr MENUEX_TEMPLATE_ITEM
-  MENUINFO* {.final.} = object
+  MENUINFO* {.final, pure.} = object
     cbSize*: DWORD
     fMask*: DWORD
     dwStyle*: DWORD
@@ -9973,10 +9872,9 @@ type
 
   LPMENUINFO* = ptr MENUINFO
   LPCMENUINFO* = ptr MENUINFO
-  tagMENUINFO* = MENUINFO
   TMENUINFO* = MENUINFO
   PMENUINFO* = ptr MENUINFO
-  MENUITEMINFO* {.final.} = object
+  MENUITEMINFO* {.final, pure.} = object
     cbSize*: UINT
     fMask*: UINT
     fType*: UINT
@@ -9992,38 +9890,36 @@ type
 
   LPMENUITEMINFO* = ptr MENUITEMINFO
   LPCMENUITEMINFO* = ptr MENUITEMINFO
-  tagMENUITEMINFO* = MENUITEMINFO
   TMENUITEMINFO* = MENUITEMINFO
   TMENUITEMINFOA* = MENUITEMINFO
   PMENUITEMINFO* = ptr MENUITEMINFO
-  MENUITEMTEMPLATE* {.final.} = object
+  MENUITEMTEMPLATE* {.final, pure.} = object
     mtOption*: int16
     mtID*: int16
     mtString*: array[0..0, WCHAR]
 
   TMENUITEMTEMPLATE* = MENUITEMTEMPLATE
   PMENUITEMTEMPLATE* = ptr MENUITEMTEMPLATE
-  MENUITEMTEMPLATEHEADER* {.final.} = object
+  MENUITEMTEMPLATEHEADER* {.final, pure.} = object
     versionNumber*: int16
     offset*: int16
 
   TMENUITEMTEMPLATEHEADER* = MENUITEMTEMPLATEHEADER
   PMENUITEMTEMPLATEHEADER* = ptr MENUITEMTEMPLATEHEADER
-  MENUTEMPLATE* {.final.} = object
+  MENUTEMPLATE* {.final, pure.} = object
   LPMENUTEMPLATE* = ptr MENUTEMPLATE
   TMENUTEMPLATE* = MENUTEMPLATE
   PMENUTEMPLATE* = ptr MENUTEMPLATE
-  METAFILEPICT* {.final.} = object
+  METAFILEPICT* {.final, pure.} = object
     mm*: LONG
     xExt*: LONG
     yExt*: LONG
     hMF*: HMETAFILE
 
   LPMETAFILEPICT* = ptr METAFILEPICT
-  tagMETAFILEPICT* = METAFILEPICT
   TMETAFILEPICT* = METAFILEPICT
   PMETAFILEPICT* = ptr METAFILEPICT
-  METAHEADER* {.final.} = object
+  METAHEADER* {.final, pure.} = object
     mtType*: int16
     mtHeaderSize*: int16
     mtVersion*: int16
@@ -10032,19 +9928,17 @@ type
     mtMaxRecord*: DWORD
     mtNoParameters*: int16
 
-  tagMETAHEADER* = METAHEADER
   TMETAHEADER* = METAHEADER
   PMETAHEADER* = ptr METAHEADER
-  METARECORD* {.final.} = object
+  METARECORD* {.final, pure.} = object
     rdSize*: DWORD
     rdFunction*: int16
     rdParm*: array[0..0, int16]
 
   LPMETARECORD* = ptr METARECORD
-  tagMETARECORD* = METARECORD
   TMETARECORD* = METARECORD
   PMETARECORD* = ptr METARECORD
-  MINIMIZEDMETRICS* {.final.} = object
+  MINIMIZEDMETRICS* {.final, pure.} = object
     cbSize*: UINT
     iWidth*: int32
     iHorzGap*: int32
@@ -10052,20 +9946,18 @@ type
     iArrange*: int32
 
   LPMINIMIZEDMETRICS* = ptr MINIMIZEDMETRICS
-  tagMINIMIZEDMETRICS* = MINIMIZEDMETRICS
   TMINIMIZEDMETRICS* = MINIMIZEDMETRICS
   PMINIMIZEDMETRICS* = ptr MINIMIZEDMETRICS
-  MINMAXINFO* {.final.} = object
+  MINMAXINFO* {.final, pure.} = object
     ptReserved*: POINT
     ptMaxSize*: POINT
     ptMaxPosition*: POINT
     ptMinTrackSize*: POINT
     ptMaxTrackSize*: POINT
 
-  tagMINMAXINFO* = MINMAXINFO
   TMINMAXINFO* = MINMAXINFO
   PMINMAXINFO* = ptr MINMAXINFO
-  MODEMDEVCAPS* {.final.} = object
+  MODEMDEVCAPS* {.final, pure.} = object
     dwActualSize*: DWORD
     dwRequiredSize*: DWORD
     dwDevSpecificOffset*: DWORD
@@ -10090,8 +9982,7 @@ type
   LPMODEMDEVCAPS* = ptr MODEMDEVCAPS
   TMODEMDEVCAPS* = MODEMDEVCAPS
   PMODEMDEVCAPS* = ptr MODEMDEVCAPS
-  modemdevcaps_tag* = MODEMDEVCAPS
-  MODEMSETTINGS* {.final.} = object
+  MODEMSETTINGS* {.final, pure.} = object
     dwActualSize*: DWORD
     dwRequiredSize*: DWORD
     dwDevSpecificOffset*: DWORD
@@ -10108,8 +9999,7 @@ type
   LPMODEMSETTINGS* = ptr MODEMSETTINGS
   TMODEMSETTINGS* = MODEMSETTINGS
   PMODEMSETTINGS* = ptr MODEMSETTINGS
-  modemsettings_tag* = MODEMSETTINGS
-  MONCBSTRUCT* {.final.} = object
+  MONCBSTRUCT* {.final, pure.} = object
     cb*: UINT
     dwTime*: DWORD
     hTask*: HANDLE
@@ -10126,10 +10016,9 @@ type
     cbData*: DWORD
     Data*: array[0..7, DWORD]
 
-  tagMONCBSTRUCT* = MONCBSTRUCT
   TMONCBSTRUCT* = MONCBSTRUCT
   PMONCBSTRUCT* = ptr MONCBSTRUCT
-  MONCONVSTRUCT* {.final.} = object
+  MONCONVSTRUCT* {.final, pure.} = object
     cb*: UINT
     fConnect*: WINBOOL
     dwTime*: DWORD
@@ -10139,19 +10028,17 @@ type
     hConvClient*: HCONV
     hConvServer*: HCONV
 
-  tagMONCONVSTRUCT* = MONCONVSTRUCT
   TMONCONVSTRUCT* = MONCONVSTRUCT
   PMONCONVSTRUCT* = ptr MONCONVSTRUCT
-  MONERRSTRUCT* {.final.} = object
+  MONERRSTRUCT* {.final, pure.} = object
     cb*: UINT
     wLastError*: UINT
     dwTime*: DWORD
     hTask*: HANDLE
 
-  tagMONERRSTRUCT* = MONERRSTRUCT
   TMONERRSTRUCT* = MONERRSTRUCT
   PMONERRSTRUCT* = ptr MONERRSTRUCT
-  MONHSZSTRUCT* {.final.} = object
+  MONHSZSTRUCT* {.final, pure.} = object
     cb*: UINT
     fsAction*: WINBOOL
     dwTime*: DWORD
@@ -10159,22 +10046,21 @@ type
     hTask*: HANDLE
     str*: array[0..0, TCHAR]
 
-  tagMONHSZSTRUCT* = MONHSZSTRUCT
   TMONHSZSTRUCT* = MONHSZSTRUCT
   PMONHSZSTRUCT* = ptr MONHSZSTRUCT
-  MONITOR_INFO_1* {.final.} = object
+  MONITOR_INFO_1* {.final, pure.} = object
     pName*: LPTSTR
 
   TMONITORINFO1* = MONITOR_INFO_1
   PMONITORINFO1* = ptr MONITOR_INFO_1
-  MONITOR_INFO_2* {.final.} = object
+  MONITOR_INFO_2* {.final, pure.} = object
     pName*: LPTSTR
     pEnvironment*: LPTSTR
     pDLLName*: LPTSTR
 
   TMONITORINFO2* = MONITOR_INFO_2
   PMONITORINFO2* = ptr MONITOR_INFO_2
-  MONLINKSTRUCT* {.final.} = object
+  MONLINKSTRUCT* {.final, pure.} = object
     cb*: UINT
     dwTime*: DWORD
     hTask*: HANDLE
@@ -10188,10 +10074,9 @@ type
     hConvServer*: HCONV
     hConvClient*: HCONV
 
-  tagMONLINKSTRUCT* = MONLINKSTRUCT
   TMONLINKSTRUCT* = MONLINKSTRUCT
   PMONLINKSTRUCT* = ptr MONLINKSTRUCT
-  MONMSGSTRUCT* {.final.} = object
+  MONMSGSTRUCT* {.final, pure.} = object
     cb*: UINT
     hwndTo*: HWND
     dwTime*: DWORD
@@ -10201,20 +10086,18 @@ type
     lParam*: LPARAM
     dmhd*: DDEML_MSG_HOOK_DATA
 
-  tagMONMSGSTRUCT* = MONMSGSTRUCT
   TMONMSGSTRUCT* = MONMSGSTRUCT
   PMONMSGSTRUCT* = ptr MONMSGSTRUCT
-  MOUSEHOOKSTRUCT* {.final.} = object
+  MOUSEHOOKSTRUCT* {.final, pure.} = object
     pt*: POINT
     hwnd*: HWND
     wHitTestCode*: UINT
     dwExtraInfo*: DWORD
 
   LPMOUSEHOOKSTRUCT* = ptr MOUSEHOOKSTRUCT
-  tagMOUSEHOOKSTRUCT* = MOUSEHOOKSTRUCT
   TMOUSEHOOKSTRUCT* = MOUSEHOOKSTRUCT
   PMOUSEHOOKSTRUCT* = ptr MOUSEHOOKSTRUCT
-  MOUSEKEYS* {.final.} = object
+  MOUSEKEYS* {.final, pure.} = object
     cbSize*: DWORD
     dwFlags*: DWORD
     iMaxSpeed*: DWORD
@@ -10227,7 +10110,7 @@ type
   PMOUSEKEYS* = ptr MOUSEKEYS
   MSGBOXCALLBACK* = proc (lpHelpInfo: LPHELPINFO){.stdcall.}
   TMSGBOXCALLBACK* = MSGBOXCALLBACK
-  MSGBOXPARAMS* {.final.} = object
+  MSGBOXPARAMS* {.final, pure.} = object
     cbSize*: UINT
     hwndOwner*: HWND
     hInstance*: HINST
@@ -10243,7 +10126,7 @@ type
   TMSGBOXPARAMS* = MSGBOXPARAMS
   TMSGBOXPARAMSA* = MSGBOXPARAMS
   PMSGBOXPARAMS* = ptr MSGBOXPARAMS
-  MSGFILTER* {.final.} = object
+  MSGFILTER* {.final, pure.} = object
     nmhdr*: NMHDR
     msg*: UINT
     wParam*: WPARAM
@@ -10251,15 +10134,14 @@ type
 
   Tmsgfilter* = MSGFILTER
   Pmsgfilter* = ptr MSGFILTER
-  MULTIKEYHELP* {.final.} = object
+  MULTIKEYHELP* {.final, pure.} = object
     mkSize*: DWORD
     mkKeylist*: TCHAR
     szKeyphrase*: array[0..0, TCHAR]
 
-  tagMULTIKEYHELP* = MULTIKEYHELP
   TMULTIKEYHELP* = MULTIKEYHELP
   PMULTIKEYHELP* = ptr MULTIKEYHELP
-  NAME_BUFFER* {.final.} = object
+  NAME_BUFFER* {.final, pure.} = object
     name*: array[0..(NCBNAMSZ) - 1, UCHAR]
     name_num*: UCHAR
     name_flags*: UCHAR
@@ -10267,7 +10149,7 @@ type
   TNAMEBUFFER* = NAME_BUFFER
   PNAMEBUFFER* = ptr NAME_BUFFER
   p_NCB* = ptr NCB
-  NCB* {.final.} = object
+  NCB* {.final, pure.} = object
     ncb_command*: UCHAR
     ncb_retcode*: UCHAR
     ncb_lsn*: UCHAR
@@ -10285,13 +10167,13 @@ type
     ncb_event*: HANDLE
 
   TNCB* = NCB
-  NCCALCSIZE_PARAMS* {.final.} = object
+  NCCALCSIZE_PARAMS* {.final, pure.} = object
     rgrc*: array[0..2, RECT]
     lppos*: PWINDOWPOS
 
   TNCCALCSIZEPARAMS* = NCCALCSIZE_PARAMS
   PNCCALCSIZEPARAMS* = ptr NCCALCSIZE_PARAMS
-  NDDESHAREINFO* {.final.} = object
+  NDDESHAREINFO* {.final, pure.} = object
     lRevision*: LONG
     lpszShareName*: LPTSTR
     lShareType*: LONG
@@ -10306,7 +10188,7 @@ type
 
   TNDDESHAREINFO* = NDDESHAREINFO
   PNDDESHAREINFO* = ptr NDDESHAREINFO
-  NETRESOURCE* {.final.} = object
+  NETRESOURCE* {.final, pure.} = object
     dwScope*: DWORD
     dwType*: DWORD
     dwDisplayType*: DWORD
@@ -10321,7 +10203,7 @@ type
   TNETRESOURCEA* = NETRESOURCE
   PNETRESOURCE* = ptr NETRESOURCE
   PNETRESOURCEA* = ptr NETRESOURCE
-  NEWCPLINFO* {.final.} = object
+  NEWCPLINFO* {.final, pure.} = object
     dwSize*: DWORD
     dwFlags*: DWORD
     dwHelpContext*: DWORD
@@ -10331,10 +10213,9 @@ type
     szInfo*: array[0..63, TCHAR]
     szHelpFile*: array[0..127, TCHAR]
 
-  tagNEWCPLINFO* = NEWCPLINFO
   TNEWCPLINFO* = NEWCPLINFO
   PNEWCPLINFO* = ptr NEWCPLINFO
-  NEWTEXTMETRIC* {.final.} = object
+  NEWTEXTMETRIC* {.final, pure.} = object
     tmHeight*: LONG
     tmAscent*: LONG
     tmDescent*: LONG
@@ -10360,17 +10241,15 @@ type
     ntmCellHeight*: UINT
     ntmAvgWidth*: UINT
 
-  tagNEWTEXTMETRIC* = NEWTEXTMETRIC
   TNEWTEXTMETRIC* = NEWTEXTMETRIC
   PNEWTEXTMETRIC* = ptr NEWTEXTMETRIC
-  NEWTEXTMETRICEX* {.final.} = object
+  NEWTEXTMETRICEX* {.final, pure.} = object
     ntmentm*: NEWTEXTMETRIC
     ntmeFontSignature*: FONTSIGNATURE
 
-  tagNEWTEXTMETRICEX* = NEWTEXTMETRICEX
   TNEWTEXTMETRICEX* = NEWTEXTMETRICEX
   PNEWTEXTMETRICEX* = ptr NEWTEXTMETRICEX
-  NM_LISTVIEW* {.final.} = object
+  NM_LISTVIEW* {.final, pure.} = object
     hdr*: NMHDR
     iItem*: int32
     iSubItem*: int32
@@ -10380,10 +10259,9 @@ type
     ptAction*: POINT
     lParam*: LPARAM
 
-  tagNM_LISTVIEW* = NM_LISTVIEW
   TNMLISTVIEW* = NM_LISTVIEW
   PNMLISTVIEW* = ptr NM_LISTVIEW
-  TV_ITEM* {.final.} = object
+  TV_ITEM* {.final, pure.} = object
     mask*: UINT
     hItem*: HTREEITEM
     state*: UINT
@@ -10398,7 +10276,7 @@ type
   LPTV_ITEM* = ptr TV_ITEM
   TTVITEM* = TV_ITEM
   PTVITEM* = ptr TV_ITEM
-  NM_TREEVIEW* {.final.} = object
+  NM_TREEVIEW* {.final, pure.} = object
     hdr*: NMHDR
     action*: UINT
     itemOld*: TV_ITEM
@@ -10408,14 +10286,14 @@ type
   LPNM_TREEVIEW* = ptr NM_TREEVIEW
   TNMTREEVIEW* = NM_TREEVIEW
   PNMTREEVIEW* = ptr NM_TREEVIEW
-  NM_UPDOWNW* {.final.} = object
+  NM_UPDOWNW* {.final, pure.} = object
     hdr*: NMHDR
     iPos*: int32
     iDelta*: int32
 
   TNMUPDOWN* = NM_UPDOWNW
   PNMUPDOWN* = ptr NM_UPDOWNW
-  NONCLIENTMETRICS* {.final.} = object
+  NONCLIENTMETRICS* {.final, pure.} = object
     cbSize*: UINT
     iBorderWidth*: int32
     iScrollWidth*: int32
@@ -10433,10 +10311,9 @@ type
     lfMessageFont*: LOGFONT
 
   LPNONCLIENTMETRICS* = ptr NONCLIENTMETRICS
-  tagNONCLIENTMETRICS* = NONCLIENTMETRICS
   TNONCLIENTMETRICS* = NONCLIENTMETRICS
   PNONCLIENTMETRICS* = ptr NONCLIENTMETRICS
-  SERVICE_ADDRESS* {.final.} = object
+  SERVICE_ADDRESS* {.final, pure.} = object
     dwAddressType*: DWORD
     dwAddressFlags*: DWORD
     dwAddressLength*: DWORD
@@ -10446,7 +10323,7 @@ type
 
   TSERVICEADDRESS* = SERVICE_ADDRESS
   PSERVICEADDRESS* = ptr SERVICE_ADDRESS
-  SERVICE_ADDRESSES* {.final.} = object
+  SERVICE_ADDRESSES* {.final, pure.} = object
     dwAddressCount*: DWORD
     Addresses*: array[0..0, SERVICE_ADDRESS]
 
@@ -10459,7 +10336,7 @@ type
   LPCLSID* = ptr CLSID
   TCLSID* = CLSID
   PCLSID* = ptr CLSID
-  SERVICE_INFO* {.final.} = object
+  SERVICE_INFO* {.final, pure.} = object
     lpServiceType*: LPGUID
     lpServiceName*: LPTSTR
     lpComment*: LPTSTR
@@ -10473,13 +10350,13 @@ type
 
   TSERVICEINFO* = SERVICE_INFO
   PSERVICEINFO* = ptr SERVICE_INFO
-  NS_SERVICE_INFO* {.final.} = object
+  NS_SERVICE_INFO* {.final, pure.} = object
     dwNameSpace*: DWORD
     ServiceInfo*: SERVICE_INFO
 
   TNSSERVICEINFO* = NS_SERVICE_INFO
   PNSSERVICEINFO* = ptr NS_SERVICE_INFO
-  NUMBERFMT* {.final.} = object
+  NUMBERFMT* {.final, pure.} = object
     NumDigits*: UINT
     LeadingZero*: UINT
     Grouping*: UINT
@@ -10489,7 +10366,7 @@ type
 
   Tnumberfmt* = NUMBERFMT
   Pnumberfmt* = ptr NUMBERFMT
-  OFSTRUCT* {.final.} = object
+  OFSTRUCT* {.final, pure.} = object
     cBytes*: int8
     fFixedDisk*: int8
     nErrCode*: int16
@@ -10500,7 +10377,7 @@ type
   LPOFSTRUCT* = ptr OFSTRUCT
   TOFSTRUCT* = OFSTRUCT
   POFSTRUCT* = ptr OFSTRUCT
-  OPENFILENAME_NT4* {.final.} = object
+  OPENFILENAME_NT4* {.final, pure.} = object
     lStructSize*: DWORD
     hwndOwner*: HWND
     hInstance*: HINST
@@ -10525,7 +10402,7 @@ type
   LPOPENFILENAME_NT4* = ptr OPENFILENAME_NT4
   TOPENFILENAME_NT4* = OPENFILENAME_NT4
   POPENFILENAME_NT4* = ptr OPENFILENAME_NT4
-  TOPENFILENAME* {.final.} = object
+  TOPENFILENAME* {.final, pure.} = object
     lStructSize*: DWORD
     hwndOwner*: HWND
     hInstance*: HINST
@@ -10554,7 +10431,7 @@ type
   POPENFILENAME* = ptr TOPENFILENAME
   OFN* = TOPENFILENAME
   POFN* = ptr TOPENFILENAME
-  OFNOTIFY* {.final.} = object
+  OFNOTIFY* {.final, pure.} = object
     hdr*: NMHDR
     lpOFN*: LPOPENFILENAME
     pszFile*: LPTSTR
@@ -10562,7 +10439,7 @@ type
   LPOFNOTIFY* = ptr OFNOTIFY
   TOFNOTIFY* = OFNOTIFY
   POFNOTIFY* = ptr OFNOTIFY
-  OSVERSIONINFO* {.final.} = object
+  OSVERSIONINFO* {.final, pure.} = object
     dwOSVersionInfoSize*: DWORD
     dwMajorVersion*: DWORD
     dwMinorVersion*: DWORD
@@ -10573,7 +10450,7 @@ type
   LPOSVERSIONINFO* = ptr OSVERSIONINFO
   TOSVERSIONINFO* = OSVERSIONINFO
   POSVERSIONINFO* = ptr OSVERSIONINFO
-  OSVERSIONINFOW* {.final.} = object
+  OSVERSIONINFOW* {.final, pure.} = object
     dwOSVersionInfoSize*: DWORD
     dwMajorVersion*: DWORD
     dwMinorVersion*: DWORD
@@ -10584,7 +10461,7 @@ type
   LPOSVERSIONINFOW* = ptr OSVERSIONINFOW
   TOSVERSIONINFOW* = OSVERSIONINFOW
   POSVERSIONINFOW* = ptr OSVERSIONINFOW
-  TEXTMETRIC* {.final.} = object
+  TEXTMETRIC* {.final, pure.} = object
     tmHeight*: LONG
     tmAscent*: LONG
     tmDescent*: LONG
@@ -10607,10 +10484,9 @@ type
     tmCharSet*: int8
 
   LPTEXTMETRIC* = ptr TEXTMETRIC
-  tagTEXTMETRIC* = TEXTMETRIC
   TTEXTMETRIC* = TEXTMETRIC
   PTEXTMETRIC* = ptr TEXTMETRIC
-  TEXTMETRICW* {.final.} = object
+  TEXTMETRICW* {.final, pure.} = object
     tmHeight*: LONG
     tmAscent*: LONG
     tmDescent*: LONG
@@ -10633,10 +10509,9 @@ type
     tmCharSet*: int8
 
   LPTEXTMETRICW* = ptr TEXTMETRICW
-  tagTEXTMETRICW* = TEXTMETRICW
   TTEXTMETRICW* = TEXTMETRICW
   PTEXTMETRICW* = ptr TEXTMETRICW
-  OUTLINETEXTMETRIC* {.final.} = object
+  OUTLINETEXTMETRIC* {.final, pure.} = object
     otmSize*: UINT
     otmTextMetrics*: TEXTMETRIC
     otmFiller*: int8
@@ -10673,7 +10548,7 @@ type
   LPOUTLINETEXTMETRIC* = ptr OUTLINETEXTMETRIC
   TOUTLINETEXTMETRIC* = OUTLINETEXTMETRIC
   POUTLINETEXTMETRIC* = ptr OUTLINETEXTMETRIC
-  OVERLAPPED* {.final.} = object
+  OVERLAPPED* {.final, pure.} = object
     Internal*: DWORD
     InternalHigh*: DWORD
     Offset*: DWORD
@@ -10683,7 +10558,7 @@ type
   LPOVERLAPPED* = ptr OVERLAPPED
   TOVERLAPPED* = OVERLAPPED
   POVERLAPPED* = ptr OVERLAPPED #PAGESETUPDLG = record conflicts with function PageSetupDlg
-  TPAGESETUPDLG* {.final.} = object
+  TPAGESETUPDLG* {.final, pure.} = object
     lStructSize*: DWORD
     hwndOwner*: HWND
     hDevMode*: HGLOBAL
@@ -10701,10 +10576,9 @@ type
 
   LPPAGESETUPDLG* = ptr TPAGESETUPDLG
   PPAGESETUPDLG* = ptr TPAGESETUPDLG
-  tagPSD* = TPAGESETUPDLG
   TPSD* = TPAGESETUPDLG
   PPSD* = ptr TPAGESETUPDLG
-  PAINTSTRUCT* {.final.} = object
+  PAINTSTRUCT* {.final, pure.} = object
     hdc*: HDC
     fErase*: WINBOOL
     rcPaint*: RECT
@@ -10713,10 +10587,9 @@ type
     rgbReserved*: array[0..31, int8]
 
   LPPAINTSTRUCT* = ptr PAINTSTRUCT
-  tagPAINTSTRUCT* = PAINTSTRUCT
   TPAINTSTRUCT* = PAINTSTRUCT
   PPAINTSTRUCT* = ptr PAINTSTRUCT
-  PARAFORMAT* {.final.} = object
+  PARAFORMAT* {.final, pure.} = object
     cbSize*: UINT
     dwMask*: DWORD
     wNumbering*: int16
@@ -10730,12 +10603,12 @@ type
 
   Tparaformat* = PARAFORMAT
   Pparaformat* = ptr PARAFORMAT
-  PERF_COUNTER_BLOCK* {.final.} = object
+  PERF_COUNTER_BLOCK* {.final, pure.} = object
     ByteLength*: DWORD
 
   TPERFCOUNTERBLOCK* = PERF_COUNTER_BLOCK
   PPERFCOUNTERBLOCK* = ptr PERF_COUNTER_BLOCK
-  PERF_COUNTER_DEFINITION* {.final.} = object
+  PERF_COUNTER_DEFINITION* {.final, pure.} = object
     ByteLength*: DWORD
     CounterNameTitleIndex*: DWORD
     CounterNameTitle*: LPWSTR
@@ -10749,7 +10622,7 @@ type
 
   TPERFCOUNTERDEFINITION* = PERF_COUNTER_DEFINITION
   PPERFCOUNTERDEFINITION* = ptr PERF_COUNTER_DEFINITION
-  PERF_DATA_BLOCK* {.final.} = object
+  PERF_DATA_BLOCK* {.final, pure.} = object
     Signature*: array[0..3, WCHAR]
     LittleEndian*: DWORD
     Version*: DWORD
@@ -10767,7 +10640,7 @@ type
 
   TPERFDATABLOCK* = PERF_DATA_BLOCK
   PPERFDATABLOCK* = ptr PERF_DATA_BLOCK
-  PERF_INSTANCE_DEFINITION* {.final.} = object
+  PERF_INSTANCE_DEFINITION* {.final, pure.} = object
     ByteLength*: DWORD
     ParentObjectTitleIndex*: DWORD
     ParentObjectInstance*: DWORD
@@ -10777,7 +10650,7 @@ type
 
   TPERFINSTANCEDEFINITION* = PERF_INSTANCE_DEFINITION
   PPERFINSTANCEDEFINITION* = PERF_INSTANCE_DEFINITION
-  PERF_OBJECT_TYPE* {.final.} = object
+  PERF_OBJECT_TYPE* {.final, pure.} = object
     TotalByteLength*: DWORD
     DefinitionLength*: DWORD
     HeaderLength*: DWORD
@@ -10795,7 +10668,7 @@ type
 
   TPERFOBJECTTYPE* = PERF_OBJECT_TYPE
   PPERFOBJECTTYPE* = ptr PERF_OBJECT_TYPE
-  POLYTEXT* {.final.} = object
+  POLYTEXT* {.final, pure.} = object
     x*: int32
     y*: int32
     n*: UINT
@@ -10806,12 +10679,12 @@ type
 
   TPOLYTEXT* = POLYTEXT
   PPOLYTEXT* = ptr POLYTEXT
-  PORT_INFO_1* {.final.} = object
+  PORT_INFO_1* {.final, pure.} = object
     pName*: LPTSTR
 
   TPORTINFO1* = PORT_INFO_1
   PPORTINFO1* = ptr PORT_INFO_1
-  PORT_INFO_2* {.final.} = object
+  PORT_INFO_2* {.final, pure.} = object
     pPortName*: LPSTR
     pMonitorName*: LPSTR
     pDescription*: LPSTR
@@ -10820,12 +10693,12 @@ type
 
   TPORTINFO2* = PORT_INFO_2
   PPORTINFO2* = ptr PORT_INFO_2
-  PREVENT_MEDIA_REMOVAL* {.final.} = object
+  PREVENT_MEDIA_REMOVAL* {.final, pure.} = object
     PreventMediaRemoval*: bool
 
   TPREVENTMEDIAREMOVAL* = PREVENT_MEDIA_REMOVAL
   PPREVENTMEDIAREMOVAL* = ptr PREVENT_MEDIA_REMOVAL #PRINTDLG = record conflicts with PrintDlg function
-  TPRINTDLG* {.final.} = object
+  TPRINTDLG* {.final, pure.} = object
     lStructSize*: DWORD
     hwndOwner*: HWND
     hDevMode*: HANDLE
@@ -10848,17 +10721,16 @@ type
 
   LPPRINTDLG* = ptr TPRINTDLG
   PPRINTDLG* = ptr TPRINTDLG
-  tagPD* = TPRINTDLG
   TPD* = TPRINTDLG
   PPD* = ptr TPRINTDLG
-  PRINTER_DEFAULTS* {.final.} = object
+  PRINTER_DEFAULTS* {.final, pure.} = object
     pDatatype*: LPTSTR
     pDevMode*: LPDEVMODE
     DesiredAccess*: ACCESS_MASK
 
   TPRINTERDEFAULTS* = PRINTER_DEFAULTS
   PPRINTERDEFAULTS* = ptr PRINTER_DEFAULTS
-  PRINTER_INFO_1* {.final.} = object
+  PRINTER_INFO_1* {.final, pure.} = object
     Flags*: DWORD
     pDescription*: LPTSTR
     pName*: LPTSTR
@@ -10867,7 +10739,7 @@ type
   LPPRINTER_INFO_1* = ptr PRINTER_INFO_1
   PPRINTER_INFO_1* = ptr PRINTER_INFO_1
   TPRINTERINFO1* = PRINTER_INFO_1
-  PRINTER_INFO_2* {.final.} = object
+  PRINTER_INFO_2* {.final, pure.} = object
     pServerName*: LPTSTR
     pPrinterName*: LPTSTR
     pShareName*: LPTSTR
@@ -10892,19 +10764,19 @@ type
 
   TPRINTERINFO2* = PRINTER_INFO_2
   PPRINTERINFO2* = ptr PRINTER_INFO_2
-  PRINTER_INFO_3* {.final.} = object
+  PRINTER_INFO_3* {.final, pure.} = object
     pSecurityDescriptor*: PSECURITY_DESCRIPTOR
 
   TPRINTERINFO3* = PRINTER_INFO_3
   PPRINTERINFO3* = ptr PRINTER_INFO_3
-  PRINTER_INFO_4* {.final.} = object
+  PRINTER_INFO_4* {.final, pure.} = object
     pPrinterName*: LPTSTR
     pServerName*: LPTSTR
     Attributes*: DWORD
 
   TPRINTERINFO4* = PRINTER_INFO_4
   PPRINTERINFO4* = ptr PRINTER_INFO_4
-  PRINTER_INFO_5* {.final.} = object
+  PRINTER_INFO_5* {.final, pure.} = object
     pPrinterName*: LPTSTR
     pPortName*: LPTSTR
     Attributes*: DWORD
@@ -10913,7 +10785,7 @@ type
 
   TPRINTERINFO5* = PRINTER_INFO_5
   PPRINTERINFO5* = ptr PRINTER_INFO_5
-  PRINTER_NOTIFY_INFO_DATA* {.final.} = object
+  PRINTER_NOTIFY_INFO_DATA* {.final, pure.} = object
     `type`*: int16
     Field*: int16
     Reserved*: DWORD
@@ -10923,7 +10795,7 @@ type
 
   TPRINTERNOTIFYINFODATA* = PRINTER_NOTIFY_INFO_DATA
   PPRINTERNOTIFYINFODATA* = ptr PRINTER_NOTIFY_INFO_DATA
-  PRINTER_NOTIFY_INFO* {.final.} = object
+  PRINTER_NOTIFY_INFO* {.final, pure.} = object
     Version*: DWORD
     Flags*: DWORD
     Count*: DWORD
@@ -10931,7 +10803,7 @@ type
 
   TPRINTERNOTIFYINFO* = PRINTER_NOTIFY_INFO
   PPRINTERNOTIFYINFO* = ptr PRINTER_NOTIFY_INFO
-  PRINTER_NOTIFY_OPTIONS_TYPE* {.final.} = object
+  PRINTER_NOTIFY_OPTIONS_TYPE* {.final, pure.} = object
     `type`*: int16
     Reserved0*: int16
     Reserved1*: DWORD
@@ -10941,7 +10813,7 @@ type
 
   PPRINTER_NOTIFY_OPTIONS_TYPE* = ptr PRINTER_NOTIFY_OPTIONS_TYPE
   TPRINTERNOTIFYOPTIONSTYPE* = PRINTER_NOTIFY_OPTIONS_TYPE
-  PRINTER_NOTIFY_OPTIONS* {.final.} = object
+  PRINTER_NOTIFY_OPTIONS* {.final, pure.} = object
     Version*: DWORD
     Flags*: DWORD
     Count*: DWORD
@@ -10949,12 +10821,12 @@ type
 
   TPRINTERNOTIFYOPTIONS* = PRINTER_NOTIFY_OPTIONS
   PPRINTERNOTIFYOPTIONS* = ptr PRINTER_NOTIFY_OPTIONS
-  PRINTPROCESSOR_INFO_1* {.final.} = object
+  PRINTPROCESSOR_INFO_1* {.final, pure.} = object
     pName*: LPTSTR
 
   TPRINTPROCESSORINFO1* = PRINTPROCESSOR_INFO_1
   PPRINTPROCESSORINFO1* = ptr PRINTPROCESSOR_INFO_1
-  PRIVILEGE_SET* {.final.} = object
+  PRIVILEGE_SET* {.final, pure.} = object
     PrivilegeCount*: DWORD
     Control*: DWORD
     Privilege*: array[0..(ANYSIZE_ARRAY) - 1, LUID_AND_ATTRIBUTES]
@@ -10962,7 +10834,7 @@ type
   LPPRIVILEGE_SET* = ptr PRIVILEGE_SET
   PPRIVILEGE_SET* = ptr PRIVILEGE_SET
   TPRIVILEGESET* = PRIVILEGE_SET
-  PROCESS_HEAPENTRY* {.final.} = object
+  PROCESS_HEAPENTRY* {.final, pure.} = object
     lpData*: PVOID
     cbData*: DWORD
     cbOverhead*: int8
@@ -10977,7 +10849,7 @@ type
   LPPROCESS_HEAP_ENTRY* = ptr PROCESS_HEAPENTRY
   TPROCESSHEAPENTRY* = PROCESS_HEAPENTRY
   PPROCESSHEAPENTRY* = ptr PROCESS_HEAPENTRY
-  PROCESS_INFORMATION* {.final.} = object
+  PROCESS_INFORMATION* {.final, pure.} = object
     hProcess*: HANDLE
     hThread*: HANDLE
     dwProcessId*: DWORD
@@ -10989,7 +10861,7 @@ type
   LPFNPSPCALLBACK* = proc (para1: HWND, para2: UINT, para3: LPVOID): UINT{.
       stdcall.}
   TFNPSPCALLBACK* = LPFNPSPCALLBACK
-  PROPSHEETPAGE* {.final.} = object
+  PROPSHEETPAGE* {.final, pure.} = object
     dwSize*: DWORD
     dwFlags*: DWORD
     hInstance*: HINST
@@ -11004,10 +10876,10 @@ type
   LPCPROPSHEETPAGE* = ptr PROPSHEETPAGE
   TPROPSHEETPAGE* = PROPSHEETPAGE
   PPROPSHEETPAGE* = ptr PROPSHEETPAGE
-  emptyrecord* {.final.} = object
+  emptyrecord* {.final, pure.} = object
   lpemptyrecord* = ptr emptyrecord
   HPROPSHEETPAGE* = ptr emptyrecord
-  PROPSHEETHEADER* {.final.} = object
+  PROPSHEETHEADER* {.final, pure.} = object
     dwSize*: DWORD
     dwFlags*: DWORD
     hwndParent*: HWND
@@ -11032,7 +10904,7 @@ type
   LPFNADDPROPSHEETPAGES* = proc (para1: LPVOID, para2: LPFNADDPROPSHEETPAGE,
                                  para3: LPARAM): WINBOOL{.stdcall.}
   TFNADDPROPSHEETPAGES* = LPFNADDPROPSHEETPAGES
-  PROTOCOL_INFO* {.final.} = object
+  PROTOCOL_INFO* {.final, pure.} = object
     dwServiceFlags*: DWORD
     iAddressFamily*: WINT
     iMaxSockAddr*: WINT
@@ -11044,27 +10916,27 @@ type
 
   TPROTOCOLINFO* = PROTOCOL_INFO
   PPROTOCOLINFO* = ptr PROTOCOL_INFO
-  PROVIDOR_INFO_1* {.final.} = object
+  PROVIDOR_INFO_1* {.final, pure.} = object
     pName*: LPTSTR
     pEnvironment*: LPTSTR
     pDLLName*: LPTSTR
 
   TPROVIDORINFO1* = PROVIDOR_INFO_1
   PPROVIDORINFO1* = ptr PROVIDOR_INFO_1
-  PSHNOTIFY* {.final.} = object
+  PSHNOTIFY* {.final, pure.} = object
     hdr*: NMHDR
     lParam*: LPARAM
 
   LPPSHNOTIFY* = ptr PSHNOTIFY
   TPSHNOTIFY* = PSHNOTIFY
   PPSHNOTIFY* = ptr PSHNOTIFY
-  PUNCTUATION* {.final.} = object
+  PUNCTUATION* {.final, pure.} = object
     iSize*: UINT
     szPunctuation*: LPSTR
 
   Tpunctuation* = PUNCTUATION
   Ppunctuation* = ptr PUNCTUATION
-  TQUERY_SERVICE_CONFIG* {.final.} = object
+  TQUERY_SERVICE_CONFIG* {.final, pure.} = object
     dwServiceType*: DWORD
     dwStartType*: DWORD
     dwErrorControl*: DWORD
@@ -11077,14 +10949,14 @@ type
 
   LPQUERY_SERVICE_CONFIG* = ptr TQUERY_SERVICE_CONFIG
   PQUERYSERVICECONFIG* = ptr TQUERY_SERVICE_CONFIG
-  TQUERY_SERVICE_LOCK_STATUS* {.final.} = object
+  TQUERY_SERVICE_LOCK_STATUS* {.final, pure.} = object
     fIsLocked*: DWORD
     lpLockOwner*: LPTSTR
     dwLockDuration*: DWORD
 
   LPQUERY_SERVICE_LOCK_STATUS* = ptr TQUERY_SERVICE_LOCK_STATUS
   PQUERYSERVICELOCKSTATUS* = ptr TQUERY_SERVICE_LOCK_STATUS
-  RASAMB* {.final.} = object
+  RASAMB* {.final, pure.} = object
     dwSize*: DWORD
     dwError*: DWORD
     szNetBiosError*: array[0..(NETBIOS_NAME_LEN + 1) - 1, TCHAR]
@@ -11092,7 +10964,7 @@ type
 
   TRASAMB* = RASAMB
   PRASAMB* = ptr RASAMB
-  RASCONN* {.final.} = object
+  RASCONN* {.final, pure.} = object
     dwSize*: DWORD
     hrasconn*: HRASCONN
     szEntryName*: array[0..(RAS_MaxEntryName + 1) - 1, TCHAR]
@@ -11101,7 +10973,7 @@ type
 
   TRASCONN* = RASCONN
   PRASCONN* = ptr RASCONN
-  RASCONNSTATUS* {.final.} = object
+  RASCONNSTATUS* {.final, pure.} = object
     dwSize*: DWORD
     rasconnstate*: RASCONNSTATE
     dwError*: DWORD
@@ -11110,7 +10982,7 @@ type
 
   TRASCONNSTATUS* = RASCONNSTATUS
   PRASCONNSTATUS* = ptr RASCONNSTATUS
-  RASDIALEXTENSIONS* {.final.} = object
+  RASDIALEXTENSIONS* {.final, pure.} = object
     dwSize*: DWORD
     dwfOptions*: DWORD
     hwndParent*: HWND
@@ -11118,7 +10990,7 @@ type
 
   TRASDIALEXTENSIONS* = RASDIALEXTENSIONS
   PRASDIALEXTENSIONS* = ptr RASDIALEXTENSIONS
-  RASDIALPARAMS* {.final.} = object
+  RASDIALPARAMS* {.final, pure.} = object
     dwSize*: DWORD
     szEntryName*: array[0..(RAS_MaxEntryName + 1) - 1, TCHAR]
     szPhoneNumber*: array[0..(RAS_MaxPhoneNumber + 1) - 1, TCHAR]
@@ -11129,27 +11001,27 @@ type
 
   TRASDIALPARAMS* = RASDIALPARAMS
   PRASDIALPARAMS* = ptr RASDIALPARAMS
-  RASENTRYNAME* {.final.} = object
+  RASENTRYNAME* {.final, pure.} = object
     dwSize*: DWORD
     szEntryName*: array[0..(RAS_MaxEntryName + 1) - 1, TCHAR]
 
   TRASENTRYNAME* = RASENTRYNAME
   PRASENTRYNAME* = ptr RASENTRYNAME
-  RASPPPIP* {.final.} = object
+  RASPPPIP* {.final, pure.} = object
     dwSize*: DWORD
     dwError*: DWORD
     szIpAddress*: array[0..(RAS_MaxIpAddress + 1) - 1, TCHAR]
 
   TRASPPPIP* = RASPPPIP
   PRASPPPIP* = ptr RASPPPIP
-  RASPPPIPX* {.final.} = object
+  RASPPPIPX* {.final, pure.} = object
     dwSize*: DWORD
     dwError*: DWORD
     szIpxAddress*: array[0..(RAS_MaxIpxAddress + 1) - 1, TCHAR]
 
   TRASPPPIPX* = RASPPPIPX
   PRASPPPIPX* = ptr RASPPPIPX
-  RASPPPNBF* {.final.} = object
+  RASPPPNBF* {.final, pure.} = object
     dwSize*: DWORD
     dwError*: DWORD
     dwNetBiosError*: DWORD
@@ -11159,7 +11031,7 @@ type
 
   TRASPPPNBF* = RASPPPNBF
   PRASPPPNBF* = ptr RASPPPNBF
-  RASTERIZER_STATUS* {.final.} = object
+  RASTERIZER_STATUS* {.final, pure.} = object
     nSize*: short
     wFlags*: short
     nLanguageID*: short
@@ -11167,14 +11039,14 @@ type
   LPRASTERIZER_STATUS* = ptr RASTERIZER_STATUS
   TRASTERIZERSTATUS* = RASTERIZER_STATUS
   PRASTERIZERSTATUS* = ptr RASTERIZER_STATUS
-  REASSIGN_BLOCKS* {.final.} = object
+  REASSIGN_BLOCKS* {.final, pure.} = object
     Reserved*: int16
     Count*: int16
     BlockNumber*: array[0..0, DWORD]
 
   TREASSIGNBLOCKS* = REASSIGN_BLOCKS
   PREASSIGNBLOCKS* = ptr REASSIGN_BLOCKS
-  REMOTE_NAME_INFO* {.final.} = object
+  REMOTE_NAME_INFO* {.final, pure.} = object
     lpUniversalName*: LPTSTR
     lpConnectionName*: LPTSTR
     lpRemainingPath*: LPTSTR
@@ -11195,19 +11067,19 @@ type
                                           #    DWORD  dwUser;
                                           #  } REOBJECT;
                                           #
-  REPASTESPECIAL* {.final.} = object
+  REPASTESPECIAL* {.final, pure.} = object
     dwAspect*: DWORD
     dwParam*: DWORD
 
   Trepastespecial* = REPASTESPECIAL
   Prepastespecial* = ptr REPASTESPECIAL
-  REQRESIZE* {.final.} = object
+  REQRESIZE* {.final, pure.} = object
     nmhdr*: NMHDR
     rc*: RECT
 
   Treqresize* = REQRESIZE
   Preqresize* = ptr REQRESIZE
-  RGNDATAHEADER* {.final.} = object
+  RGNDATAHEADER* {.final, pure.} = object
     dwSize*: DWORD
     iType*: DWORD
     nCount*: DWORD
@@ -11216,14 +11088,14 @@ type
 
   TRGNDATAHEADER* = RGNDATAHEADER
   PRGNDATAHEADER* = ptr RGNDATAHEADER
-  RGNDATA* {.final.} = object
+  RGNDATA* {.final, pure.} = object
     rdh*: RGNDATAHEADER
     Buffer*: array[0..0, char]
 
   LPRGNDATA* = ptr RGNDATA
   TRGNDATA* = RGNDATA
   PRGNDATA* = ptr RGNDATA
-  SCROLLINFO* {.final.} = object
+  SCROLLINFO* {.final, pure.} = object
     cbSize*: UINT
     fMask*: UINT
     nMin*: int32
@@ -11236,7 +11108,7 @@ type
   LPCSCROLLINFO* = ptr SCROLLINFO
   TSCROLLINFO* = SCROLLINFO
   PSCROLLINFO* = ptr SCROLLINFO
-  SECURITY_ATTRIBUTES* {.final.} = object
+  SECURITY_ATTRIBUTES* {.final, pure.} = object
     nLength*: DWORD
     lpSecurityDescriptor*: LPVOID
     bInheritHandle*: WINBOOL
@@ -11247,14 +11119,14 @@ type
   SECURITY_INFORMATION* = DWORD
   PSECURITY_INFORMATION* = ptr SECURITY_INFORMATION
   TSECURITYINFORMATION* = SECURITY_INFORMATION
-  SELCHANGE* {.final.} = object
+  SELCHANGE* {.final, pure.} = object
     nmhdr*: NMHDR
     chrg*: CHARRANGE
     seltyp*: int16
 
   Tselchange* = SELCHANGE
   Pselchange* = ptr SELCHANGE
-  SERIALKEYS* {.final.} = object
+  SERIALKEYS* {.final, pure.} = object
     cbSize*: DWORD
     dwFlags*: DWORD
     lpszActivePort*: LPSTR
@@ -11265,14 +11137,14 @@ type
   LPSERIALKEYS* = ptr SERIALKEYS
   TSERIALKEYS* = SERIALKEYS
   PSERIALKEYS* = ptr SERIALKEYS
-  SERVICE_TABLE_ENTRY* {.final.} = object
+  SERVICE_TABLE_ENTRY* {.final, pure.} = object
     lpServiceName*: LPTSTR
     lpServiceProc*: LPSERVICE_MAIN_FUNCTION
 
   LPSERVICE_TABLE_ENTRY* = ptr SERVICE_TABLE_ENTRY
   TSERVICETABLEENTRY* = SERVICE_TABLE_ENTRY
   PSERVICETABLEENTRY* = ptr SERVICE_TABLE_ENTRY
-  SERVICE_TYPE_VALUE_ABS* {.final.} = object
+  SERVICE_TYPE_VALUE_ABS* {.final, pure.} = object
     dwNameSpace*: DWORD
     dwValueType*: DWORD
     dwValueSize*: DWORD
@@ -11281,14 +11153,14 @@ type
 
   TSERVICETYPEVALUEABS* = SERVICE_TYPE_VALUE_ABS
   PSERVICETYPEVALUEABS* = ptr SERVICE_TYPE_VALUE_ABS
-  SERVICE_TYPE_INFO_ABS* {.final.} = object
+  SERVICE_TYPE_INFO_ABS* {.final, pure.} = object
     lpTypeName*: LPTSTR
     dwValueCount*: DWORD
     Values*: array[0..0, SERVICE_TYPE_VALUE_ABS]
 
   TSERVICETYPEINFOABS* = SERVICE_TYPE_INFO_ABS
   PSERVICETYPEINFOABS* = ptr SERVICE_TYPE_INFO_ABS
-  SESSION_BUFFER* {.final.} = object
+  SESSION_BUFFER* {.final, pure.} = object
     lsn*: UCHAR
     state*: UCHAR
     local_name*: array[0..(NCBNAMSZ) - 1, UCHAR]
@@ -11298,7 +11170,7 @@ type
 
   TSESSIONBUFFER* = SESSION_BUFFER
   PSESSIONBUFFER* = ptr SESSION_BUFFER
-  SESSION_HEADER* {.final.} = object
+  SESSION_HEADER* {.final, pure.} = object
     sess_name*: UCHAR
     num_sess*: UCHAR
     rcv_dg_outstanding*: UCHAR
@@ -11306,7 +11178,7 @@ type
 
   TSESSIONHEADER* = SESSION_HEADER
   PSESSIONHEADER* = ptr SESSION_HEADER
-  SET_PARTITION_INFORMATION* {.final.} = object
+  SET_PARTITION_INFORMATION* {.final, pure.} = object
     PartitionType*: int8
 
   TSETPARTITIONINFORMATION* = SET_PARTITION_INFORMATION
@@ -11314,7 +11186,7 @@ type
   SHCONTF* = enum
     SHCONTF_FOLDERS = 32, SHCONTF_NONFOLDERS = 64, SHCONTF_INCLUDEHIDDEN = 128
   TSHCONTF* = SHCONTF
-  SHFILEINFO* {.final.} = object
+  SHFILEINFO* {.final, pure.} = object
     hIcon*: HICON
     iIcon*: int32
     dwAttributes*: DWORD
@@ -11326,7 +11198,7 @@ type
   FILEOP_FLAGS* = int16
   TFILEOPFLAGS* = FILEOP_FLAGS
   PFILEOPFLAGS* = ptr FILEOP_FLAGS
-  SHFILEOPSTRUCT* {.final.} = object
+  SHFILEOPSTRUCT* {.final, pure.} = object
     hwnd*: HWND
     wFunc*: UINT
     pFrom*: LPCSTR
@@ -11341,9 +11213,8 @@ type
   PSHFILEOPSTRUCT* = ptr SHFILEOPSTRUCT
   SHGNO* = enum
     SHGDN_NORMAL = 0, SHGDN_INFOLDER = 1, SHGDN_FORPARSING = 0x00008000
-  tagSHGDN* = SHGNO
   TSHGDN* = SHGNO
-  SHNAMEMAPPING* {.final.} = object
+  SHNAMEMAPPING* {.final, pure.} = object
     pszOldPath*: LPSTR
     pszNewPath*: LPSTR
     cchOldPath*: int32
@@ -11352,7 +11223,7 @@ type
   LPSHNAMEMAPPING* = ptr SHNAMEMAPPING
   TSHNAMEMAPPING* = SHNAMEMAPPING
   PSHNAMEMAPPING* = ptr SHNAMEMAPPING
-  SID_AND_ATTRIBUTES* {.final.} = object
+  SID_AND_ATTRIBUTES* {.final, pure.} = object
     Sid*: PSID
     Attributes*: DWORD
 
@@ -11361,12 +11232,12 @@ type
   SID_AND_ATTRIBUTES_ARRAY* = array[0..(ANYSIZE_ARRAY) - 1, SID_AND_ATTRIBUTES]
   PSID_AND_ATTRIBUTES_ARRAY* = ptr SID_AND_ATTRIBUTES_ARRAY
   TSIDANDATTRIBUTESARRAY* = SID_AND_ATTRIBUTES_ARRAY
-  SINGLE_LIST_ENTRY* {.final.} = object
+  SINGLE_LIST_ENTRY* {.final, pure.} = object
     Next*: ptr SINGLE_LIST_ENTRY
 
   TSINGLELISTENTRY* = SINGLE_LIST_ENTRY
   PSINGLELISTENTRY* = ptr SINGLE_LIST_ENTRY
-  SOUNDSENTRY* {.final.} = object
+  SOUNDSENTRY* {.final, pure.} = object
     cbSize*: UINT
     dwFlags*: DWORD
     iFSTextEffect*: DWORD
@@ -11381,10 +11252,9 @@ type
     iWindowsEffectOrdinal*: DWORD
 
   LPSOUNDSENTRY* = ptr SOUNDSENTRY
-  tagSOUNDSENTRY* = SOUNDSENTRY
   TSOUNDSENTRY* = SOUNDSENTRY
   PSOUNDSENTRY* = ptr SOUNDSENTRY
-  STARTUPINFO* {.final.} = object
+  STARTUPINFO* {.final, pure.} = object
     cb*: DWORD
     lpReserved*: LPTSTR
     lpDesktop*: LPTSTR
@@ -11407,42 +11277,42 @@ type
   LPSTARTUPINFO* = ptr STARTUPINFO
   TSTARTUPINFO* = STARTUPINFO
   PSTARTUPINFO* = ptr STARTUPINFO
-  STICKYKEYS* {.final.} = object
+  STICKYKEYS* {.final, pure.} = object
     cbSize*: DWORD
     dwFlags*: DWORD
 
   LPSTICKYKEYS* = ptr STICKYKEYS
   TSTICKYKEYS* = STICKYKEYS
   PSTICKYKEYS* = ptr STICKYKEYS
-  STRRET* {.final.} = object
+  STRRET* {.final, pure.} = object
     uType*: UINT
     cStr*: array[0..(MAX_PATH) - 1, char]
 
   LPSTRRET* = ptr STRRET
   TSTRRET* = STRRET
   PSTRRET* = ptr STRRET
-  STYLEBUF* {.final.} = object
+  STYLEBUF* {.final, pure.} = object
     dwStyle*: DWORD
     szDescription*: array[0..31, CHAR]
 
   LPSTYLEBUF* = ptr STYLEBUF
   TSTYLEBUF* = STYLEBUF
   PSTYLEBUF* = ptr STYLEBUF
-  STYLESTRUCT* {.final.} = object
+  STYLESTRUCT* {.final, pure.} = object
     styleOld*: DWORD
     styleNew*: DWORD
 
   LPSTYLESTRUCT* = ptr STYLESTRUCT
   TSTYLESTRUCT* = STYLESTRUCT
   PSTYLESTRUCT* = ptr STYLESTRUCT
-  SYSTEM_AUDIT_ACE* {.final.} = object
+  SYSTEM_AUDIT_ACE* {.final, pure.} = object
     Header*: ACE_HEADER
     Mask*: ACCESS_MASK
     SidStart*: DWORD
 
   TSYSTEMAUDITACE* = SYSTEM_AUDIT_ACE
   PSYSTEMAUDITACE* = ptr SYSTEM_AUDIT_ACE
-  SYSTEM_INFO* {.final.} = object
+  SYSTEM_INFO* {.final, pure.} = object
     dwOemId*: DWORD
     dwPageSize*: DWORD
     lpMinimumApplicationAddress*: LPVOID
@@ -11457,7 +11327,7 @@ type
   LPSYSTEM_INFO* = ptr SYSTEM_INFO
   TSYSTEMINFO* = SYSTEM_INFO
   PSYSTEMINFO* = ptr SYSTEM_INFO
-  SYSTEM_POWER_STATUS* {.final.} = object
+  SYSTEM_POWER_STATUS* {.final, pure.} = object
     ACLineStatus*: int8
     BatteryFlag*: int8
     BatteryLifePercent*: int8
@@ -11468,12 +11338,12 @@ type
   TSYSTEMPOWERSTATUS* = SYSTEM_POWER_STATUS
   PSYSTEMPOWERSTATUS* = ptr SYSTEM_POWER_STATUS
   LPSYSTEM_POWER_STATUS* = ptr emptyrecord
-  TAPE_ERASE* {.final.} = object
+  TAPE_ERASE* {.final, pure.} = object
     `type`*: ULONG
 
   TTAPEERASE* = TAPE_ERASE
   PTAPEERASE* = ptr TAPE_ERASE
-  TAPE_GET_DRIVE_PARAMETERS* {.final.} = object
+  TAPE_GET_DRIVE_PARAMETERS* {.final, pure.} = object
     ECC*: bool
     Compression*: bool
     DataPadding*: bool
@@ -11488,7 +11358,7 @@ type
 
   TTAPEGETDRIVEPARAMETERS* = TAPE_GET_DRIVE_PARAMETERS
   PTAPEGETDRIVEPARAMETERS* = ptr TAPE_GET_DRIVE_PARAMETERS
-  TAPE_GET_MEDIA_PARAMETERS* {.final.} = object
+  TAPE_GET_MEDIA_PARAMETERS* {.final, pure.} = object
     Capacity*: LARGE_INTEGER
     Remaining*: LARGE_INTEGER
     BlockSize*: DWORD
@@ -11497,7 +11367,7 @@ type
 
   TTAPEGETMEDIAPARAMETERS* = TAPE_GET_MEDIA_PARAMETERS
   PTAPEGETMEDIAPARAMETERS* = ptr TAPE_GET_MEDIA_PARAMETERS
-  TAPE_GET_POSITION* {.final.} = object
+  TAPE_GET_POSITION* {.final, pure.} = object
     `type`*: ULONG
     Partition*: ULONG
     OffsetLow*: ULONG
@@ -11505,12 +11375,12 @@ type
 
   TTAPEGETPOSITION* = TAPE_GET_POSITION
   PTAPEGETPOSITION* = ptr TAPE_GET_POSITION
-  TAPE_PREPARE* {.final.} = object
+  TAPE_PREPARE* {.final, pure.} = object
     Operation*: ULONG
 
   TTAPEPREPARE* = TAPE_PREPARE
   PTAPEPREPARE* = ptr TAPE_PREPARE
-  TAPE_SET_DRIVE_PARAMETERS* {.final.} = object
+  TAPE_SET_DRIVE_PARAMETERS* {.final, pure.} = object
     ECC*: bool
     Compression*: bool
     DataPadding*: bool
@@ -11519,12 +11389,12 @@ type
 
   TTAPESETDRIVEPARAMETERS* = TAPE_SET_DRIVE_PARAMETERS
   PTAPESETDRIVEPARAMETERS* = ptr TAPE_SET_DRIVE_PARAMETERS
-  TAPE_SET_MEDIA_PARAMETERS* {.final.} = object
+  TAPE_SET_MEDIA_PARAMETERS* {.final, pure.} = object
     BlockSize*: ULONG
 
   TTAPESETMEDIAPARAMETERS* = TAPE_SET_MEDIA_PARAMETERS
   PTAPESETMEDIAPARAMETERS* = ptr TAPE_SET_MEDIA_PARAMETERS
-  TAPE_SET_POSITION* {.final.} = object
+  TAPE_SET_POSITION* {.final, pure.} = object
     `Method`*: ULONG
     Partition*: ULONG
     OffsetLow*: ULONG
@@ -11532,19 +11402,19 @@ type
 
   TTAPESETPOSITION* = TAPE_SET_POSITION
   PTAPESETPOSITION* = ptr TAPE_SET_POSITION
-  TAPE_WRITE_MARKS* {.final.} = object
+  TAPE_WRITE_MARKS* {.final, pure.} = object
     `type`*: ULONG
     Count*: ULONG
 
   TTAPEWRITEMARKS* = TAPE_WRITE_MARKS
   PTAPEWRITEMARKS* = ptr TAPE_WRITE_MARKS
-  TTBADDBITMAP* {.final.} = object
+  TTBADDBITMAP* {.final, pure.} = object
     hInst*: HINST
     nID*: UINT
 
   LPTBADDBITMAP* = ptr TTBADDBITMAP
   PTBADDBITMAP* = ptr TTBADDBITMAP
-  TBBUTTON* {.final.} = object
+  TBBUTTON* {.final, pure.} = object
     iBitmap*: int32
     idCommand*: int32
     fsState*: int8
@@ -11556,7 +11426,7 @@ type
   LPCTBBUTTON* = ptr TBBUTTON
   TTBBUTTON* = TBBUTTON
   PTBBUTTON* = ptr TBBUTTON
-  TBNOTIFY* {.final.} = object
+  TBNOTIFY* {.final, pure.} = object
     hdr*: NMHDR
     iItem*: int32
     tbButton*: TBBUTTON
@@ -11566,20 +11436,20 @@ type
   LPTBNOTIFY* = ptr TBNOTIFY
   TTBNOTIFY* = TBNOTIFY
   PTBNOTIFY* = ptr TBNOTIFY
-  TBSAVEPARAMS* {.final.} = object
+  TBSAVEPARAMS* {.final, pure.} = object
     hkr*: HKEY
     pszSubKey*: LPCTSTR
     pszValueName*: LPCTSTR
 
   TTBSAVEPARAMS* = TBSAVEPARAMS
   PTBSAVEPARAMS* = ptr TBSAVEPARAMS
-  TC_HITTESTINFO* {.final.} = object
+  TC_HITTESTINFO* {.final, pure.} = object
     pt*: POINT
     flags*: UINT
 
   TTCHITTESTINFO* = TC_HITTESTINFO
   PTCHITTESTINFO* = ptr TC_HITTESTINFO
-  TC_ITEM* {.final.} = object
+  TC_ITEM* {.final, pure.} = object
     mask*: UINT
     lpReserved1*: UINT
     lpReserved2*: UINT
@@ -11590,7 +11460,7 @@ type
 
   TTCITEM* = TC_ITEM
   PTCITEM* = ptr TC_ITEM
-  TC_ITEMHEADER* {.final.} = object
+  TC_ITEMHEADER* {.final, pure.} = object
     mask*: UINT
     lpReserved1*: UINT
     lpReserved2*: UINT
@@ -11600,20 +11470,20 @@ type
 
   TTCITEMHEADER* = TC_ITEMHEADER
   PTCITEMHEADER* = ptr TC_ITEMHEADER
-  TC_KEYDOWN* {.final.} = object
+  TC_KEYDOWN* {.final, pure.} = object
     hdr*: NMHDR
     wVKey*: int16
     flags*: UINT
 
   TTCKEYDOWN* = TC_KEYDOWN
   PTCKEYDOWN* = ptr TC_KEYDOWN
-  TEXTRANGE* {.final.} = object
+  TEXTRANGE* {.final, pure.} = object
     chrg*: CHARRANGE
     lpstrText*: LPSTR
 
   Ttextrange* = TEXTRANGE
   Ptextrange* = ptr TEXTRANGE
-  TIME_ZONE_INFORMATION* {.final.} = object
+  TIME_ZONE_INFORMATION* {.final, pure.} = object
     Bias*: LONG
     StandardName*: array[0..31, WCHAR]
     StandardDate*: SYSTEMTIME
@@ -11625,18 +11495,18 @@ type
   LPTIME_ZONE_INFORMATION* = ptr TIME_ZONE_INFORMATION
   TTIMEZONEINFORMATION* = TIME_ZONE_INFORMATION
   PTIMEZONEINFORMATION* = ptr TIME_ZONE_INFORMATION
-  TOGGLEKEYS* {.final.} = object
+  TOGGLEKEYS* {.final, pure.} = object
     cbSize*: DWORD
     dwFlags*: DWORD
 
   TTOGGLEKEYS* = TOGGLEKEYS
   PTOGGLEKEYS* = ptr TOGGLEKEYS
-  TTOKEN_SOURCE* {.final.} = object
+  TTOKEN_SOURCE* {.final, pure.} = object
     SourceName*: array[0..7, CHAR]
     SourceIdentifier*: LUID
 
   PTOKENSOURCE* = ptr TTOKEN_SOURCE
-  TOKEN_CONTROL* {.final.} = object
+  TOKEN_CONTROL* {.final, pure.} = object
     TokenId*: LUID
     AuthenticationId*: LUID
     ModifiedId*: LUID
@@ -11644,31 +11514,31 @@ type
 
   TTOKENCONTROL* = TOKEN_CONTROL
   PTOKENCONTROL* = ptr TOKEN_CONTROL
-  TTOKEN_DEFAULT_DACL* {.final.} = object
+  TTOKEN_DEFAULT_DACL* {.final, pure.} = object
     DefaultDacl*: PACL
 
   PTOKENDEFAULTDACL* = ptr TTOKEN_DEFAULT_DACL
-  TTOKEN_GROUPS* {.final.} = object
+  TTOKEN_GROUPS* {.final, pure.} = object
     GroupCount*: DWORD
     Groups*: array[0..(ANYSIZE_ARRAY) - 1, SID_AND_ATTRIBUTES]
 
   LPTOKEN_GROUPS* = ptr TTOKEN_GROUPS
   PTOKENGROUPS* = ptr TTOKEN_GROUPS
-  TTOKEN_OWNER* {.final.} = object
+  TTOKEN_OWNER* {.final, pure.} = object
     Owner*: PSID
 
   PTOKENOWNER* = ptr TTOKEN_OWNER
-  TTOKEN_PRIMARY_GROUP* {.final.} = object
+  TTOKEN_PRIMARY_GROUP* {.final, pure.} = object
     PrimaryGroup*: PSID
 
   PTOKENPRIMARYGROUP* = ptr TTOKEN_PRIMARY_GROUP
-  TTOKEN_PRIVILEGES* {.final.} = object
+  TTOKEN_PRIVILEGES* {.final, pure.} = object
     PrivilegeCount*: DWORD
     Privileges*: array[0..(ANYSIZE_ARRAY) - 1, LUID_AND_ATTRIBUTES]
 
   PTOKEN_PRIVILEGES* = ptr TTOKEN_PRIVILEGES
   LPTOKEN_PRIVILEGES* = ptr TTOKEN_PRIVILEGES
-  TTOKEN_STATISTICS* {.final.} = object
+  TTOKEN_STATISTICS* {.final, pure.} = object
     TokenId*: LUID
     AuthenticationId*: LUID
     ExpirationTime*: LARGE_INTEGER
@@ -11681,11 +11551,11 @@ type
     ModifiedId*: LUID
 
   PTOKENSTATISTICS* = ptr TTOKEN_STATISTICS
-  TTOKEN_USER* {.final.} = object
+  TTOKEN_USER* {.final, pure.} = object
     User*: SID_AND_ATTRIBUTES
 
   PTOKENUSER* = ptr TTOKEN_USER
-  TOOLINFO* {.final.} = object
+  TOOLINFO* {.final, pure.} = object
     cbSize*: UINT
     uFlags*: UINT
     hwnd*: HWND
@@ -11697,7 +11567,7 @@ type
   LPTOOLINFO* = ptr TOOLINFO
   TTOOLINFO* = TOOLINFO
   PTOOLINFO* = ptr TOOLINFO
-  TOOLTIPTEXT* {.final.} = object
+  TOOLTIPTEXT* {.final, pure.} = object
     hdr*: NMHDR
     lpszText*: LPTSTR
     szText*: array[0..79, char]
@@ -11707,15 +11577,14 @@ type
   LPTOOLTIPTEXT* = ptr TOOLTIPTEXT
   TTOOLTIPTEXT* = TOOLTIPTEXT
   PTOOLTIPTEXT* = ptr TOOLTIPTEXT
-  TPMPARAMS* {.final.} = object
+  TPMPARAMS* {.final, pure.} = object
     cbSize*: UINT
     rcExclude*: RECT
 
   LPTPMPARAMS* = ptr TPMPARAMS
-  tagTPMPARAMS* = TPMPARAMS
   TTPMPARAMS* = TPMPARAMS
   PTPMPARAMS* = ptr TPMPARAMS
-  TRANSMIT_FILE_BUFFERS* {.final.} = object
+  TRANSMIT_FILE_BUFFERS* {.final, pure.} = object
     Head*: PVOID
     HeadLength*: DWORD
     Tail*: PVOID
@@ -11723,7 +11592,7 @@ type
 
   TTRANSMITFILEBUFFERS* = TRANSMIT_FILE_BUFFERS
   PTRANSMITFILEBUFFERS* = ptr TRANSMIT_FILE_BUFFERS
-  TTHITTESTINFO* {.final.} = object
+  TTHITTESTINFO* {.final, pure.} = object
     hwnd*: HWND
     pt*: POINT
     ti*: TOOLINFO
@@ -11731,7 +11600,7 @@ type
   LPHITTESTINFO* = ptr TTHITTESTINFO
   TTTHITTESTINFO* = TTHITTESTINFO
   PTTHITTESTINFO* = ptr TTHITTESTINFO
-  TTPOLYCURVE* {.final.} = object
+  TTPOLYCURVE* {.final, pure.} = object
     wType*: int16
     cpfx*: int16
     apfx*: array[0..0, POINTFX]
@@ -11739,7 +11608,7 @@ type
   LPTTPOLYCURVE* = ptr TTPOLYCURVE
   TTTPOLYCURVE* = TTPOLYCURVE
   PTTPOLYCURVE* = ptr TTPOLYCURVE
-  TTPOLYGONHEADER* {.final.} = object
+  TTPOLYGONHEADER* {.final, pure.} = object
     cb*: DWORD
     dwType*: DWORD
     pfxStart*: POINTFX
@@ -11747,13 +11616,13 @@ type
   LPTTPOLYGONHEADER* = ptr TTPOLYGONHEADER
   TTTPOLYGONHEADER* = TTPOLYGONHEADER
   PTTPOLYGONHEADER* = ptr TTPOLYGONHEADER
-  TV_DISPINFO* {.final.} = object
+  TV_DISPINFO* {.final, pure.} = object
     hdr*: NMHDR
     item*: TV_ITEM
 
   TTVDISPINFO* = TV_DISPINFO
   PTVDISPINFO* = ptr TV_DISPINFO
-  TV_HITTESTINFO* {.final.} = object
+  TV_HITTESTINFO* {.final, pure.} = object
     pt*: POINT
     flags*: UINT
     hItem*: HTREEITEM
@@ -11761,7 +11630,7 @@ type
   LPTV_HITTESTINFO* = ptr TV_HITTESTINFO
   TTVHITTESTINFO* = TV_HITTESTINFO
   PTVHITTESTINFO* = ptr TV_HITTESTINFO
-  TV_INSERTSTRUCT* {.final.} = object
+  TV_INSERTSTRUCT* {.final, pure.} = object
     hParent*: HTREEITEM
     hInsertAfter*: HTREEITEM
     item*: TV_ITEM
@@ -11769,14 +11638,14 @@ type
   LPTV_INSERTSTRUCT* = ptr TV_INSERTSTRUCT
   TTVINSERTSTRUCT* = TV_INSERTSTRUCT
   PTVINSERTSTRUCT* = ptr TV_INSERTSTRUCT
-  TV_KEYDOWN* {.final.} = object
+  TV_KEYDOWN* {.final, pure.} = object
     hdr*: NMHDR
     wVKey*: int16
     flags*: UINT
 
   TTVKEYDOWN* = TV_KEYDOWN
   PTVKEYDOWN* = ptr TV_KEYDOWN
-  TV_SORTCB* {.final.} = object
+  TV_SORTCB* {.final, pure.} = object
     hParent*: HTREEITEM
     lpfnCompare*: PFNTVCOMPARE
     lParam*: LPARAM
@@ -11784,26 +11653,25 @@ type
   LPTV_SORTCB* = ptr TV_SORTCB
   TTVSORTCB* = TV_SORTCB
   PTVSORTCB* = ptr TV_SORTCB
-  UDACCEL* {.final.} = object
+  UDACCEL* {.final, pure.} = object
     nSec*: UINT
     nInc*: UINT
 
   TUDACCEL* = UDACCEL
   PUDACCEL* = ptr UDACCEL
-  UNIVERSAL_NAME_INFO* {.final.} = object
+  UNIVERSAL_NAME_INFO* {.final, pure.} = object
     lpUniversalName*: LPTSTR
 
   TUNIVERSALNAMEINFO* = UNIVERSAL_NAME_INFO
   PUNIVERSALNAMEINFO* = ptr UNIVERSAL_NAME_INFO
-  USEROBJECTFLAGS* {.final.} = object
+  USEROBJECTFLAGS* {.final, pure.} = object
     fInherit*: WINBOOL
     fReserved*: WINBOOL
     dwFlags*: DWORD
 
-  tagUSEROBJECTFLAGS* = USEROBJECTFLAGS
   TUSEROBJECTFLAGS* = USEROBJECTFLAGS
   PUSEROBJECTFLAGS* = ptr USEROBJECTFLAGS
-  VALENT* {.final.} = object
+  VALENT* {.final, pure.} = object
     ve_valuename*: LPTSTR
     ve_valuelen*: DWORD
     ve_valueptr*: DWORD
@@ -11814,13 +11682,13 @@ type
   value_ent* = VALENT
   Tvalue_ent* = VALENT
   Pvalue_ent* = ptr VALENT
-  VERIFY_INFORMATION* {.final.} = object
+  VERIFY_INFORMATION* {.final, pure.} = object
     StartingOffset*: LARGE_INTEGER
     len*: DWORD
 
   TVERIFYINFORMATION* = VERIFY_INFORMATION
   PVERIFYINFORMATION* = ptr VERIFY_INFORMATION
-  VS_FIXEDFILEINFO* {.final.} = object
+  VS_FIXEDFILEINFO* {.final, pure.} = object
     dwSignature*: DWORD
     dwStrucVersion*: DWORD
     dwFileVersionMS*: DWORD
@@ -11837,7 +11705,7 @@ type
 
   TVSFIXEDFILEINFO* = VS_FIXEDFILEINFO
   PVSFIXEDFILEINFO* = ptr VS_FIXEDFILEINFO
-  WIN32_FIND_DATA* {.final.} = object
+  WIN32_FIND_DATA* {.final, pure.} = object
     dwFileAttributes*: DWORD
     ftCreationTime*: FILETIME
     ftLastAccessTime*: FILETIME
@@ -11853,7 +11721,7 @@ type
   PWIN32_FIND_DATA* = ptr WIN32_FIND_DATA
   TWIN32FINDDATA* = WIN32_FIND_DATA
   TWIN32FINDDATAA* = WIN32_FIND_DATA
-  WIN32_FIND_DATAW* {.final.} = object
+  WIN32_FIND_DATAW* {.final, pure.} = object
     dwFileAttributes*: DWORD
     ftCreationTime*: FILETIME
     ftLastAccessTime*: FILETIME
@@ -11868,7 +11736,7 @@ type
   LPWIN32_FIND_DATAW* = ptr WIN32_FIND_DATAW
   PWIN32_FIND_DATAW* = ptr WIN32_FIND_DATAW
   TWIN32FINDDATAW* = WIN32_FIND_DATAW
-  WIN32_STREAM_ID* {.final.} = object
+  WIN32_STREAM_ID* {.final, pure.} = object
     dwStreamId*: DWORD
     dwStreamAttributes*: DWORD
     Size*: LARGE_INTEGER
@@ -11877,7 +11745,7 @@ type
 
   TWIN32STREAMID* = WIN32_STREAM_ID
   PWIN32STREAMID* = ptr WIN32_STREAM_ID
-  WINDOWPLACEMENT* {.final.} = object
+  WINDOWPLACEMENT* {.final, pure.} = object
     len*: UINT
     flags*: UINT
     showCmd*: UINT
@@ -11887,7 +11755,7 @@ type
 
   TWINDOWPLACEMENT* = WINDOWPLACEMENT
   PWINDOWPLACEMENT* = ptr WINDOWPLACEMENT
-  WNDCLASS* {.final.} = object
+  WNDCLASS* {.final, pure.} = object
     style*: UINT
     lpfnWndProc*: WNDPROC
     cbClsExtra*: int32
@@ -11903,7 +11771,7 @@ type
   TWNDCLASS* = WNDCLASS
   TWNDCLASSA* = WNDCLASS
   PWNDCLASS* = ptr WNDCLASS
-  WNDCLASSW* {.final.} = object
+  WNDCLASSW* {.final, pure.} = object
     style*: UINT
     lpfnWndProc*: WNDPROC
     cbClsExtra*: int32
@@ -11918,7 +11786,7 @@ type
   LPWNDCLASSW* = ptr WNDCLASSW
   TWNDCLASSW* = WNDCLASSW
   PWNDCLASSW* = ptr WNDCLASSW
-  WNDCLASSEX* {.final.} = object
+  WNDCLASSEX* {.final, pure.} = object
     cbSize*: UINT
     style*: UINT
     lpfnWndProc*: WNDPROC
@@ -11936,7 +11804,7 @@ type
   TWNDCLASSEX* = WNDCLASSEX
   TWNDCLASSEXA* = WNDCLASSEX
   PWNDCLASSEX* = ptr WNDCLASSEX
-  WNDCLASSEXW* {.final.} = object
+  WNDCLASSEXW* {.final, pure.} = object
     cbSize*: UINT
     style*: UINT
     lpfnWndProc*: WNDPROC
@@ -11953,7 +11821,7 @@ type
   LPWNDCLASSEXW* = ptr WNDCLASSEXW
   TWNDCLASSEXW* = WNDCLASSEXW
   PWNDCLASSEXW* = ptr WNDCLASSEXW
-  CONNECTDLGSTRUCT* {.final.} = object
+  CONNECTDLGSTRUCT* {.final, pure.} = object
     cbStructure*: DWORD
     hwndOwner*: HWND
     lpConnRes*: LPNETRESOURCE
@@ -11963,7 +11831,7 @@ type
   LPCONNECTDLGSTRUCT* = ptr CONNECTDLGSTRUCT
   TCONNECTDLGSTRUCT* = CONNECTDLGSTRUCT
   PCONNECTDLGSTRUCT* = ptr CONNECTDLGSTRUCT
-  DISCDLGSTRUCT* {.final.} = object
+  DISCDLGSTRUCT* {.final, pure.} = object
     cbStructure*: DWORD
     hwndOwner*: HWND
     lpLocalName*: LPTSTR
@@ -11974,7 +11842,7 @@ type
   TDISCDLGSTRUCT* = DISCDLGSTRUCT
   TDISCDLGSTRUCTA* = DISCDLGSTRUCT
   PDISCDLGSTRUCT* = ptr DISCDLGSTRUCT
-  NETINFOSTRUCT* {.final.} = object
+  NETINFOSTRUCT* {.final, pure.} = object
     cbStructure*: DWORD
     dwProviderVersion*: DWORD
     dwStatus*: DWORD
@@ -11987,7 +11855,7 @@ type
   LPNETINFOSTRUCT* = ptr NETINFOSTRUCT
   TNETINFOSTRUCT* = NETINFOSTRUCT
   PNETINFOSTRUCT* = ptr NETINFOSTRUCT
-  NETCONNECTINFOSTRUCT* {.final.} = object
+  NETCONNECTINFOSTRUCT* {.final, pure.} = object
     cbStructure*: DWORD
     dwFlags*: DWORD
     dwSpeed*: DWORD
@@ -12009,13 +11877,13 @@ type
                           para3: int32, para4: LPARAM): int32{.stdcall.}
   LPOVERLAPPED_COMPLETION_ROUTINE* = proc (para1: DWORD, para2: DWORD,
       para3: LPOVERLAPPED){.stdcall.} # Structures for the extensions to OpenGL
-  POINTFLOAT* {.final.} = object
+  POINTFLOAT* {.final, pure.} = object
     x*: float32
     y*: float32
 
   TPOINTFLOAT* = POINTFLOAT
   PPOINTFLOAT* = ptr POINTFLOAT
-  GLYPHMETRICSFLOAT* {.final.} = object
+  GLYPHMETRICSFLOAT* {.final, pure.} = object
     gmfBlackBoxX*: float32
     gmfBlackBoxY*: float32
     gmfptGlyphOrigin*: POINTFLOAT
@@ -12025,7 +11893,7 @@ type
   LPGLYPHMETRICSFLOAT* = ptr GLYPHMETRICSFLOAT
   TGLYPHMETRICSFLOAT* = GLYPHMETRICSFLOAT
   PGLYPHMETRICSFLOAT* = ptr GLYPHMETRICSFLOAT
-  LAYERPLANEDESCRIPTOR* {.final.} = object
+  LAYERPLANEDESCRIPTOR* {.final, pure.} = object
     nSize*: int16
     nVersion*: int16
     dwFlags*: DWORD
@@ -12052,10 +11920,9 @@ type
     crTransparent*: COLORREF
 
   LPLAYERPLANEDESCRIPTOR* = ptr LAYERPLANEDESCRIPTOR
-  tagLAYERPLANEDESCRIPTOR* = LAYERPLANEDESCRIPTOR
   TLAYERPLANEDESCRIPTOR* = LAYERPLANEDESCRIPTOR
   PLAYERPLANEDESCRIPTOR* = ptr LAYERPLANEDESCRIPTOR
-  PIXELFORMATDESCRIPTOR* {.final.} = object
+  PIXELFORMATDESCRIPTOR* {.final, pure.} = object
     nSize*: int16
     nVersion*: int16
     dwFlags*: DWORD
@@ -12084,10 +11951,9 @@ type
     dwDamageMask*: DWORD
 
   LPPIXELFORMATDESCRIPTOR* = ptr PIXELFORMATDESCRIPTOR
-  tagPIXELFORMATDESCRIPTOR* = PIXELFORMATDESCRIPTOR
   TPIXELFORMATDESCRIPTOR* = PIXELFORMATDESCRIPTOR
   PPIXELFORMATDESCRIPTOR* = ptr PIXELFORMATDESCRIPTOR
-  USER_INFO_2* {.final.} = object
+  USER_INFO_2* {.final, pure.} = object
     usri2_name*: LPWSTR
     usri2_password*: LPWSTR
     usri2_password_age*: DWORD
@@ -12116,13 +11982,13 @@ type
   PUSER_INFO_2* = ptr USER_INFO_2
   LPUSER_INFO_2* = ptr USER_INFO_2
   TUSERINFO2* = USER_INFO_2
-  USER_INFO_0* {.final.} = object
+  USER_INFO_0* {.final, pure.} = object
     usri0_name*: LPWSTR
 
   PUSER_INFO_0* = ptr USER_INFO_0
   LPUSER_INFO_0* = ptr USER_INFO_0
   TUSERINFO0* = USER_INFO_0
-  USER_INFO_3* {.final.} = object
+  USER_INFO_3* {.final, pure.} = object
     usri3_name*: LPWSTR
     usri3_password*: LPWSTR
     usri3_password_age*: DWORD
@@ -12156,7 +12022,7 @@ type
   PUSER_INFO_3* = ptr USER_INFO_3
   LPUSER_INFO_3* = ptr USER_INFO_3
   TUSERINFO3* = USER_INFO_3
-  GROUP_INFO_2* {.final.} = object
+  GROUP_INFO_2* {.final, pure.} = object
     grpi2_name*: LPWSTR
     grpi2_comment*: LPWSTR
     grpi2_group_id*: DWORD
@@ -12164,13 +12030,13 @@ type
 
   PGROUP_INFO_2* = ptr GROUP_INFO_2
   TGROUPINFO2* = GROUP_INFO_2
-  LOCALGROUP_INFO_0* {.final.} = object
+  LOCALGROUP_INFO_0* {.final, pure.} = object
     lgrpi0_name*: LPWSTR
 
   PLOCALGROUP_INFO_0* = ptr LOCALGROUP_INFO_0
   LPLOCALGROUP_INFO_0* = ptr LOCALGROUP_INFO_0
   TLOCALGROUPINFO0* = LOCALGROUP_INFO_0
-  IMAGE_DOS_HEADER* {.final.} = object
+  IMAGE_DOS_HEADER* {.final, pure.} = object
     e_magic*: int16
     e_cblp*: int16
     e_cp*: int16
@@ -12193,7 +12059,7 @@ type
 
   PIMAGE_DOS_HEADER* = ptr IMAGE_DOS_HEADER
   TIMAGEDOSHEADER* = IMAGE_DOS_HEADER
-  NOTIFYICONDATAA* {.final.} = object
+  NOTIFYICONDATAA* {.final, pure.} = object
     cbSize*: DWORD
     Wnd*: HWND
     uID*: UINT
@@ -12203,7 +12069,7 @@ type
     szTip*: array[0..63, Char]
 
   NOTIFYICONDATA* = NOTIFYICONDATAA
-  NOTIFYICONDATAW* {.final.} = object
+  NOTIFYICONDATAW* {.final, pure.} = object
     cbSize*: DWORD
     Wnd*: HWND
     uID*: UINT
@@ -12224,7 +12090,7 @@ type
 
 type
   PWaveFormatEx* = ptr TWaveFormatEx
-  TWaveFormatEx* {.final.} = object
+  TWaveFormatEx* {.final, pure.} = object
     wFormatTag*: int16        # format type
     nChannels*: int16         # number of channels (i.e. mono, stereo, etc.)
     nSamplesPerSec*: DWORD    # sample rate
@@ -12233,7 +12099,7 @@ type
     wBitsPerSample*: int16    # number of bits per sample of mono data
     cbSize*: int16            # the count in bytes of the size of
 
-  WIN32_FILE_ATTRIBUTE_DATA* {.final.} = object
+  WIN32_FILE_ATTRIBUTE_DATA* {.final, pure.} = object
     dwFileAttributes*: DWORD
     ftCreationTime*: FILETIME
     ftLastAccessTime*: FILETIME
@@ -12244,7 +12110,7 @@ type
   LPWIN32_FILE_ATTRIBUTE_DATA* = ptr WIN32_FILE_ATTRIBUTE_DATA
   TWIN32FILEATTRIBUTEDATA* = WIN32_FILE_ATTRIBUTE_DATA
   PWIN32FILEATTRIBUTEDATA* = ptr WIN32_FILE_ATTRIBUTE_DATA # TrackMouseEvent. NT or higher only.
-  TTrackMouseEvent* {.final.} = object
+  TTrackMouseEvent* {.final, pure.} = object
     cbSize*: DWORD
     dwFlags*: DWORD
     hwndTrack*: HWND
@@ -13317,7 +13183,7 @@ else:
     HALFPARAM* = int16
     HALFPARAMBOOL* = WORDBOOL
 type
-  MSG* {.final.} = object
+  MSG* {.final, pure.} = object
     hwnd*: HWND
     message*: UINT
     wParam*: WPARAM
@@ -13326,24 +13192,23 @@ type
     pt*: POINT
 
   LPMSG* = ptr MSG
-  tagMSG* = MSG
   TMSG* = MSG
   PMSG* = ptr MSG
   PMessage* = ptr TMessage
-  TMessage* {.final.} = object          #fields according to ICS
+  TMessage* {.final, pure.} = object          #fields according to ICS
     msg*: UINT
     wParam*: WPARAM
     lParam*: LPARAM
     Result*: LRESULT
 
-  TWMSize* {.final.} = object
+  TWMSize* {.final, pure.} = object
     Msg*: UINT
     SizeType*: WPARAM
     Width*: HALFPARAM
     Height*: HALFPARAM
     Result*: LRESULT
 
-  TWMNoParams* {.final.} = object
+  TWMNoParams* {.final, pure.} = object
     Msg*: UINT
     Unused*: array[0..3, HALFPARAM]
     Result*: LRESULT
@@ -13353,7 +13218,7 @@ type
   TWMDestroy* = TWMNoParams
   TWMClose* = TWMNoParams
   TWMQueryUIState* = TWMNoParams
-  TWMUIState* {.final.} = object
+  TWMUIState* {.final, pure.} = object
     Msg*: UINT
     Action*: int16
     Flags*: int16
@@ -13361,7 +13226,7 @@ type
 
   TWMChangeUIState* = TWMUIState
   TWMUpdateUIState* = TWMUIState
-  TWMKey* {.final.} = object
+  TWMKey* {.final, pure.} = object
     Msg*: UINT
     CharCode*: int16
     Unused*: int16
@@ -13374,7 +13239,7 @@ type
   TWMSysChar* = TWMKey
   TWMSysKeyDown* = TWMKey
   TWMSysKeyUp* = TWMKey
-  TWMMenuChar* {.final.} = object
+  TWMMenuChar* {.final, pure.} = object
     Msg*: UINT
     User*: Char
     MenuFlag*: int16
@@ -13386,7 +13251,7 @@ type
   TWMGetFont* = TWMNoParams
   TWMSysColorChange* = TWMNoParams
   TWMQueryDragIcon* = TWMNoParams
-  TWMScroll* {.final.} = object
+  TWMScroll* {.final, pure.} = object
     Msg*: UINT
     ScrollCode*: HALFPARAM
     Pos*: HALFPARAM
@@ -13395,59 +13260,59 @@ type
 
   TWMHScroll* = TWMScroll
   TWMVScroll* = TWMScroll
-  TWMGetText* {.final.} = object
+  TWMGetText* {.final, pure.} = object
     Msg*: UINT
     TextMax*: LPARAM
     Text*: cstring
     Result*: LRESULT
 
   TWMGetTextLength* = TWMNoParams
-  TWMKillFocus* {.final.} = object
+  TWMKillFocus* {.final, pure.} = object
     Msg*: UINT
     FocusedWnd*: HWND
     UnUsed*: WPARAM
     Result*: LRESULT
 
-  TWMSetCursor* {.final.} = object
+  TWMSetCursor* {.final, pure.} = object
     Msg*: UINT
     CursorWnd*: HWND
     HitTest*: HALFPARAM
     MouseMsg*: HALFPARAM
     Result*: LRESULT
 
-  TWMSetFocus* {.final.} = object
+  TWMSetFocus* {.final, pure.} = object
     Msg*: UINT
     FocusedWnd*: HWND
     Unused*: WPARAM
     Result*: LRESULT
 
-  TWMSetFont* {.final.} = object
+  TWMSetFont* {.final, pure.} = object
     Msg*: UINT
     Font*: HFONT
     Redraw*: HALFPARAMBOOL
     Unused*: HALFPARAM
     Result*: LRESULT
 
-  TWMShowWindow* {.final.} = object
+  TWMShowWindow* {.final, pure.} = object
     Msg*: UINT
     Show*: HALFPARAMBOOL
     Unused*: HALFPARAM
     Status*: WPARAM
     Result*: LRESULT
 
-  TWMEraseBkgnd* {.final.} = object
+  TWMEraseBkgnd* {.final, pure.} = object
     Msg*: UINT
     DC*: HDC
     Unused*: LPARAM
     Result*: LRESULT
 
-  TWMNCHitTest* {.final.} = object
+  TWMNCHitTest* {.final, pure.} = object
     Msg*: UINT
     Unused*: int32
     Pos*: TSmallPoint
     Result*: LRESULT
 
-  TWMMouse* {.final.} = object
+  TWMMouse* {.final, pure.} = object
     Msg*: UINT
     Keys*: int32
     Pos*: TSmallPoint
@@ -13459,14 +13324,14 @@ type
   TWMMButtonDblClk* = TWMMouse
   TWMMButtonDown* = TWMMouse
   TWMMButtonUp* = TWMMouse
-  TWMMouseWheel* {.final.} = object
+  TWMMouseWheel* {.final, pure.} = object
     Msg*: UINT
     Keys*: int16
     WheelDelta*: int16
     Pos*: TSmallPoint
     Result*: LRESULT
 
-  TWMNCHitMessage* {.final.} = object
+  TWMNCHitMessage* {.final, pure.} = object
     Msg*: UINT
     HitTest*: int32
     XCursor*: int16
@@ -13484,51 +13349,51 @@ type
   TWMRButtonDown* = TWMMouse
   TWMRButtonUp* = TWMMouse
   TWMMouseMove* = TWMMouse
-  TWMPaint* {.final.} = object
+  TWMPaint* {.final, pure.} = object
     Msg*: UINT
     DC*: HDC
     Unused*: int32
     Result*: LRESULT
 
-  TWMCommand* {.final.} = object
+  TWMCommand* {.final, pure.} = object
     Msg*: UINT
     ItemID*: int16
     NotifyCode*: int16
     Ctl*: HWND
     Result*: LRESULT
 
-  TWMNotify* {.final.} = object
+  TWMNotify* {.final, pure.} = object
     Msg*: UINT
     IDCtrl*: int32
     NMHdr*: PNMHdr
     Result*: LRESULT
 
-  TWMPrint* {.final.} = object
+  TWMPrint* {.final, pure.} = object
     Msg*: UINT
     DC*: HDC
     Flags*: int
     Result*: LRESULT
 
   TWMPrintClient* = TWMPrint
-  TWMWinIniChange* {.final.} = object
+  TWMWinIniChange* {.final, pure.} = object
     Msg*: UINT
     Unused*: int
     Section*: cstring
     Result*: LRESULT
 
-  TWMContextMenu* {.final.} = object
+  TWMContextMenu* {.final, pure.} = object
     Msg*: UINT
     hWnd*: HWND
     Pos*: TSmallPoint
     Result*: LRESULT
 
-  TWMNCCalcSize* {.final.} = object
+  TWMNCCalcSize* {.final, pure.} = object
     Msg*: UINT
     CalcValidRects*: WINBOOL
     CalcSize_Params*: PNCCalcSizeParams
     Result*: LRESULT
 
-  TWMCharToItem* {.final.} = object
+  TWMCharToItem* {.final, pure.} = object
     Msg*: UINT
     Key*: int16
     CaretPos*: int16
@@ -13537,7 +13402,7 @@ type
 
   TWMVKeyToItem* = TWMCharToItem
   TMyEventRange = range[0'i16..16000'i16]
-  TWMParentNotify* {.final.} = object
+  TWMParentNotify* {.final, pure.} = object
     Msg*: UINT
     case Event*: TMyEventRange
     of TMyEventRange(WM_CREATE), TMyEventRange(WM_DESTROY):
@@ -13556,7 +13421,7 @@ type
         Value2*: int32
         Result*: LRESULT
 
-  TWMSysCommand* {.final.} = object
+  TWMSysCommand* {.final, pure.} = object
     Msg*: UINT
     CmdType*: int32
     XPos*: int16
@@ -13574,13 +13439,13 @@ type
   #  else: # of SC_KEYMENU:
   #      Key*: int16
 
-  TWMMove* {.final.} = object
+  TWMMove* {.final, pure.} = object
     Msg*: UINT
     Unused*: int
     Pos*: TSmallPoint
     Result*: LRESULT
 
-  TWMWindowPosMsg* {.final.} = object
+  TWMWindowPosMsg* {.final, pure.} = object
     Msg*: UINT
     Unused*: int
     WindowPos*: PWindowPos
@@ -13588,101 +13453,101 @@ type
 
   TWMWindowPosChanged* = TWMWindowPosMsg
   TWMWindowPosChanging* = TWMWindowPosMsg
-  TWMCompareItem* {.final.} = object
+  TWMCompareItem* {.final, pure.} = object
     Msg*: UINT
     Ctl*: HWnd
     CompareItemStruct*: PCompareItemStruct
     Result*: LRESULT
 
-  TWMDeleteItem* {.final.} = object
+  TWMDeleteItem* {.final, pure.} = object
     Msg*: UINT
     Ctl*: HWND
     DeleteItemStruct*: PDeleteItemStruct
     Result*: LRESULT
 
-  TWMDrawItem* {.final.} = object
+  TWMDrawItem* {.final, pure.} = object
     Msg*: UINT
     Ctl*: HWND
     DrawItemStruct*: PDrawItemStruct
     Result*: LRESULT
 
-  TWMMeasureItem* {.final.} = object
+  TWMMeasureItem* {.final, pure.} = object
     Msg*: UINT
     IDCtl*: HWnd
     MeasureItemStruct*: PMeasureItemStruct
     Result*: LRESULT
 
-  TWMNCCreate* {.final.} = object
+  TWMNCCreate* {.final, pure.} = object
     Msg*: UINT
     Unused*: int
     CreateStruct*: PCreateStruct
     Result*: LRESULT
 
-  TWMInitMenuPopup* {.final.} = object
+  TWMInitMenuPopup* {.final, pure.} = object
     Msg*: UINT
     MenuPopup*: HMENU
     Pos*: int16
     SystemMenu*: WordBool
     Result*: LRESULT
 
-  TWMMenuSelect* {.final.} = object
+  TWMMenuSelect* {.final, pure.} = object
     Msg*: UINT
     IDItem*: int16
     MenuFlag*: int16
     Menu*: HMENU
     Result*: LRESULT
 
-  TWMActivate* {.final.} = object
+  TWMActivate* {.final, pure.} = object
     Msg*: UINT
     Active*: int16
     Minimized*: WordBool
     ActiveWindow*: HWND
     Result*: LRESULT
 
-  TWMQueryEndSession* {.final.} = object
+  TWMQueryEndSession* {.final, pure.} = object
     Msg*: UINT
     Source*: int32
     Unused*: int32
     Result*: LRESULT
 
-  TWMMDIActivate* {.final.} = object
+  TWMMDIActivate* {.final, pure.} = object
     Msg*: UINT
     DeactiveWnd*: HWND
     ActiveWnd*: HWND
     Result*: LRESULT
 
-  TWMNextDlgCtl* {.final.} = object
+  TWMNextDlgCtl* {.final, pure.} = object
     Msg*: UINT
     CtlFocus*: int32
     Handle*: WordBool
     Unused*: int16
     Result*: LRESULT
 
-  TWMHelp* {.final.} = object
+  TWMHelp* {.final, pure.} = object
     Msg*: UINT
     Unused*: int
     HelpInfo*: PHelpInfo
     Result*: LRESULT
 
-  TWMGetMinMaxInfo* {.final.} = object
+  TWMGetMinMaxInfo* {.final, pure.} = object
     Msg*: UINT
     Unused*: int
     MinMaxInfo*: PMinMaxInfo
     Result*: LRESULT
 
-  TWMSettingChange* {.final.} = object
+  TWMSettingChange* {.final, pure.} = object
     Msg*: UINT
     Flag*: int
     Section*: cstring
     Result*: LRESULT
 
-  TWMCreate* {.final.} = object
+  TWMCreate* {.final, pure.} = object
     Msg*: UINT
     Unused*: int
     CreateStruct*: PCreateStruct
     Result*: LRESULT
 
-  TWMCtlColor* {.final.} = object
+  TWMCtlColor* {.final, pure.} = object
     Msg*: UINT
     ChildDC*: HDC
     ChildWnd*: HWND
@@ -13695,38 +13560,38 @@ type
   TWMCtlColorMsgbox* = TWMCtlColor
   TWMCtlColorDlg* = TWMCtlColor
   TWMCtlColorEdit* = TWMCtlColor
-  TWMInitDialog* {.final.} = object
+  TWMInitDialog* {.final, pure.} = object
     Msg*: UINT
     Focus*: HWND
     InitParam*: int32
     Result*: LRESULT
 
-  TWMNCPaint* {.final.} = object
+  TWMNCPaint* {.final, pure.} = object
     Msg*: UINT
     RGN*: HRGN
     Unused*: int32
     Result*: LRESULT
 
-  TWMSetText* {.final.} = object
+  TWMSetText* {.final, pure.} = object
     Msg*: UINT
     Unused*: int32
     Text*: cstring
     Result*: LRESULT
 
-  TWMSizeClipboard* {.final.} = object
+  TWMSizeClipboard* {.final, pure.} = object
     Msg*: UINT
     Viewer*: HWND
     RC*: THandle
     Result*: LRESULT
 
-  TWMSpoolerStatus* {.final.} = object
+  TWMSpoolerStatus* {.final, pure.} = object
     Msg*: UINT
     JobStatus*: LPARAM
     JobsLeft*: WPARAM
     Unused*: WPARAM
     Result*: LRESULT
 
-  TWMStyleChange* {.final.} = object
+  TWMStyleChange* {.final, pure.} = object
     Msg*: UINT
     StyleType*: LPARAM
     StyleStruct*: PStyleStruct
@@ -13734,54 +13599,54 @@ type
 
   TWMStyleChanged* = TWMStyleChange
   TWMStyleChanging* = TWMStyleChange
-  TWMSysDeadChar* {.final.} = object
+  TWMSysDeadChar* {.final, pure.} = object
     Msg*: UINT
     CharCode*: WPARAM
     Unused*: WPARAM
     KeyData*: LPARAM
     Result*: LRESULT
 
-  TWMSystemError* {.final.} = object
+  TWMSystemError* {.final, pure.} = object
     Msg*: UINT
     ErrSpec*: WPARAM
     Unused*: LPARAM
     Result*: LRESULT
 
   TWMTimeChange* = TWMNoParams
-  TWMTimer* {.final.} = object
+  TWMTimer* {.final, pure.} = object
     Msg*: UINT
     TimerID*: LPARAM
     TimerProc*: TFarProc
     Result*: LRESULT
 
   TWMUndo* = TWMNoParams
-  TWMVScrollClipboard* {.final.} = object
+  TWMVScrollClipboard* {.final, pure.} = object
     Msg*: UINT
     Viewer*: HWND
     ScollCode*: WPARAM
     ThumbPos*: WPARAM
     Result*: LRESULT
 
-  TWMDisplayChange* {.final.} = object
+  TWMDisplayChange* {.final, pure.} = object
     Msg*: UINT
     BitsPerPixel*: int
     Width*: WPARAM
     Height*: WPARAM
     Result*: LRESULT
 
-  TWMDropFiles* {.final.} = object
+  TWMDropFiles* {.final, pure.} = object
     Msg*: UINT
     Drop*: THANDLE
     Unused*: LPARAM
     Result*: LRESULT
 
-  TWMEnable* {.final.} = object
+  TWMEnable* {.final, pure.} = object
     Msg*: int
     Enabled*: WINBOOL
     Unused*: int32
     Result*: int32
 
-  TWMMouseActivate* {.final.} = object
+  TWMMouseActivate* {.final, pure.} = object
     Msg*: int
     TopLevel*: HWND
     HitTestCode*: int16
@@ -20686,7 +20551,7 @@ type
   TFNFiberStartRoutine* = FARPROC
   TFNHookProc* = HOOKPROC
   PObjectTypeList* = ptr TObjectTypeList
-  OBJECT_TYPE_LIST* {.final.} = object
+  OBJECT_TYPE_LIST* {.final, pure.} = object
     Level*: int16
     Sbz*: int16
     ObjectType*: PGUID
@@ -20694,14 +20559,14 @@ type
   TObjectTypeList* = OBJECT_TYPE_LIST
   AUDIT_EVENT_TYPE* = DWORD
   PBlendFunction* = ptr TBlendFunction
-  BLENDFUNCTION* {.final.} = object
+  BLENDFUNCTION* {.final, pure.} = object
     BlendOp*: int8
     BlendFlags*: int8
     SourceConstantAlpha*: int8
     AlphaFormat*: int8
 
   TBlendFunction* = BLENDFUNCTION
-  WIN_CERTIFICATE* {.final.} = object
+  WIN_CERTIFICATE* {.final, pure.} = object
     dwLength*: DWord
     wRevision*: int16
     wCertificateType*: int16
@@ -20709,7 +20574,7 @@ type
 
   TWinCertificate* = WIN_CERTIFICATE
   PWinCertificate* = ptr TWinCertificate
-  TMaxLogPalette* {.final.} = object
+  TMaxLogPalette* {.final, pure.} = object
     palVersion*: int16
     palNumEntries*: int16
     palPalEntry*: array[int8, TPaletteEntry]
@@ -22549,79 +22414,78 @@ proc AnsiLowerBuff*(lpsz: LPSTR, cchLength: DWORD): DWORD{.stdcall,
 # argument types are unknown
 
 proc GetBValue(rgb: int32): int8 =
-  result = int8(rgb shr 16)
+  result = toU8(rgb shr 16'i32)
 
 proc GetGValue(rgb: int32): int8 =
-  result = int8((int16(rgb)) shr 8)
+  result = toU8(rgb shr 8'i32)
 
 proc GetRValue(rgb: int32): int8 =
-  result = int8(rgb)
+  result = toU8(rgb)
 
 proc RGB(r, g, b: int32): DWORD =
-  result = DWORD(((DWORD(int8(r))) or ((DWORD(int16(g))) shl 8)) or
-      ((DWORD(int8(b))) shl 16))
+  result = toU8(r) or toU8(g shl 8'i32) or toU8(b shl 16'i32)
 
 proc HIBYTE(w: int32): int8 =
-  result = int8(((int16(w)) shr 8) and 0x000000FF)
+  result = toU8(w shr 8'i32 and 0x000000FF'i32)
 
 proc HIWORD(L: int32): int16 =
-  result = int16(((DWORD(L)) shr 16) and 0x0000FFFF)
+  result = toU16(L shr 16'i32 and 0x0000FFFF'i32)
 
 proc LOBYTE(w: int32): int8 =
-  result = int8(w)
+  result = toU8(w)
 
 proc LOWORD(L: int32): int16 =
-  result = int16(L)
+  result = toU16(L)
 
 proc MAKELONG(a, b: int32): LONG =
-  result = LONG((int16(a)) or ((DWORD(int16(b))) shl 16))
+  result = a and 0x0000ffff'i32 or b shl 16'i32
 
 proc MAKEWORD(a, b: int32): int16 =
-  result = int16((int8(a)) or ((int16(int8(b))) shl 8))
+  result = toU16(a and 0xff'i32) or toU16(b shl 8'i32)
 
 proc SEXT_HIWORD(L: int32): int32 =
   # return type might be wrong
-  result = (int32(L)) shr 16
+  result = HIWORD(L)
 
 proc ZEXT_HIWORD(L: int32): int32 =
   # return type might be wrong
-  result = (int(L)) shr 16
+  result = ze(HIWORD(L))
 
 proc SEXT_LOWORD(L: int32): int32 =
-  result = int32(SHORT(L))
+  result = LOWORD(L)
 
 proc INDEXTOOVERLAYMASK(i: int32): int32 =
   # return type might be wrong
-  result = i shl 8
+  result = i shl 8'i32
 
 proc INDEXTOSTATEIMAGEMASK(i: int32): int32 =
   # return type might be wrong
-  result = i shl 12
+  result = i shl 12'i32
 
 proc MAKEINTATOM(i: int32): LPTSTR =
-  result = cast[LPTSTR](cast[ULONG_PTR](int16(i)))
+  result = cast[LPTSTR](cast[ULONG_PTR](ToU16(i)))
 
 proc MAKELANGID(p, s: int32): int32 =
   # return type might be wrong
-  result = ((int16(s)) shl 10) or (int16(p))
+  result = toU16(s) shl 10'i16 or toU16(p)
 
 proc PRIMARYLANGID(lgid: int32): int16 =
   # PRIMARYLANGID:=WORD(lgid(@($3ff)));
   #         h2pas error here corrected by hand PM
-  result = int16(lgid) and (0x000003FF)
+  result = toU16(lgid) and 0x000003FF'i16
 
 proc SUBLANGID(lgid: int32): int32 =
   # return type might be wrong
-  result = (int16(lgid)) shr 10
+  result = toU16(lgid) shr 10'i16
 
 proc LANGIDFROMLCID(lcid: int32): int16 =
-  result = int16(lcid)
+  result = toU16(lcid)
 
 proc SORTIDFROMLCID(lcid: int32): int16 =
-  result = int16(((DWORD(lcid)) and 0x000FFFFF) shr 16)
+  result = toU16((lcid and 0x000FFFFF'i32) shr 16'i32)
 
 proc MAKELCID(lgid, srtid: int32): DWORD =
-  result = DWORD(((DWORD(int16(srtid))) shl 16) or (DWORD(int16(lgid))))
+  result = toU32(srtid shl 16'i32 or lgid and 0xffff'i32)
 
 proc MAKELPARAM(L, h: int32): LPARAM =
   result = LPARAM(MAKELONG(L, h))
@@ -22630,7 +22494,7 @@ proc MAKELRESULT(L, h: int32): LRESULT =
   result = LRESULT(MAKELONG(L, h))
 
 proc MAKEROP4(fore, back: int32): DWORD =
-  result = DWORD((DWORD(back shl 8) and 0xFF000000) or DWORD(fore))
+  result = back shl 8'i32 and 0xFF000000'i32 or fore
 
 proc MAKEWPARAM(L, h: int32): WPARAM =
   result = WPARAM(MAKELONG(L, h))
@@ -22642,14 +22506,14 @@ proc GET_Y_LPARAM(lp: Windows.LParam): int32 =
   result = int16(HIWORD(lp))
 
 proc PALETTEINDEX(i: int32): COLORREF =
-  result = COLORREF(0x01000000 or (DWORD(int16(i))))
+  result = COLORREF(0x01000000'i32 or i and 0xffff'i32)
 
 proc PALETTERGB(r, g, b: int32): int32 =
   # return type might be wrong
   result = 0x02000000 or (RGB(r, g, b))
 
 proc UNICODE_NULL(): WCHAR =
-  result = 0
+  result = 0'i16
 
 proc IDC_ARROW(): LPTSTR =
   # return type might be wrong
@@ -22865,7 +22729,7 @@ proc GET_WM_HSCROLL_POS(w, L: int32): int32 =
 
 proc GET_WM_MDIACTIVATE_FACTIVATE(h, a, b: int32): int32 =
   # return type might be wrong
-  result = int32(int(b) == LONG(h))
+  result = ord(b == h)
 
 proc GET_WM_MDIACTIVATE_HWNDACTIVATE(a, b: int32): HWND =
   result = HWND(b)
@@ -23839,71 +23703,71 @@ proc InternalGetLargestConsoleWindowSize(hConsoleOutput: HANDLE): DWord{.
 proc GetLargestConsoleWindowSize(hConsoleOutput: HANDLE): COORD =
   var res: dword
   res = InternalGetLargestConsoleWindowSize(hConsoleOutput)
-  result.y = res and 0x0000ffff # XXX: correct?
-  result.x = res shr 16
+  result.y = toU16(res and 0x0000ffff) # XXX: correct?
+  result.x = toU16(res shr 16)
 
 proc Succeeded(Status: HRESULT): WINBOOL =
-  result = (Status and 0x80000000)
+  result = (Status and 0x80000000'i32)
 
 proc Failed(Status: HRESULT): WINBOOL =
-  result = (Status and 0x80000000)
+  result = (Status and 0x80000000'i32)
 
 proc IsError(Status: HRESULT): WINBOOL =
-  result = ord((Status shr 31) == SEVERITY_ERROR)
+  result = ord((int(Status) shr 31) == SEVERITY_ERROR)
 
 proc HResultCode(hr: HRESULT): int32 =
-  result = hr and 0x0000FFFF
+  result = hr and 0x0000FFFF'i32
 
 proc HResultFacility(hr: HRESULT): int32 =
-  result = (hr shr 16) and 0x00001FFF
+  result = (hr shr 16'i32) and 0x00001FFF'i32
 
 proc HResultSeverity(hr: HRESULT): int32 =
-  result = (hr shr 31) and 0x00000001
+  result = (hr shr 31'i32) and 0x00000001'i32
 
 proc MakeResult(p1, p2, mask: int32): HRESULT =
-  result = (p1 shl 31) or (p2 shl 16) or mask
+  result = (p1 shl 31'i32) or (p2 shl 16'i32) or mask
 
 proc HResultFromWin32(x: int32): HRESULT =
   result = x
-  if result != 0:
-    result = ((result and 0x0000FFFF) or (FACILITY_WIN32 shl 16) or
-        0x80000000)
+  if result != 0'i32:
+    result = ((result and 0x0000FFFF'i32) or (int32(FACILITY_WIN32) shl 16'i32) or
+        0x80000000'i32)
 
 proc HResultFromNT(x: int32): HRESULT =
-  result = x or FACILITY_NT_BIT
+  result = x or int32(FACILITY_NT_BIT)
 
 proc MAKELANGID(PrimaryLang, SubLang: USHORT): int16 =
-  result = (SubLang shl 10) or PrimaryLang
+  result = (SubLang shl 10'i16) or PrimaryLang
 
 proc PRIMARYLANGID(LangId: int16): int16 =
-  result = LangId and 0x000003FF
+  result = LangId and 0x000003FF'i16
 
 proc SUBLANGID(LangId: int16): int16 =
-  result = LangId shr 10
+  result = LangId shr 10'i16
 
 proc MAKELCID(LangId, SortId: int16): DWORD =
-  result = (DWORD(SortId) shl 16) or DWORD(LangId)
+  result = toU32((ze(SortId) shl 16) or ze(LangId))
 
 proc MAKESORTLCID(LangId, SortId, SortVersion: int16): DWORD =
-  result = MAKELCID(LangId, SortId) or (SortVersion shl 20)
+  result = MAKELCID(LangId, SortId) or int(SortVersion shl 20'i32)
 
 proc LANGIDFROMLCID(LocaleId: LCID): int16 =
-  result = int16(LocaleId)
+  result = toU16(LocaleId)
 
 proc SORTIDFROMLCID(LocaleId: LCID): int16 =
-  result = int16((DWORD(LocaleId) shr 16) and 0x0000000F)
+  result = toU16((DWORD(LocaleId) shr 16) and 0x0000000F)
 
 proc SORTVERSIONFROMLCID(LocaleId: LCID): int16 =
-  result = int16((DWORD(LocaleId) shr 20) and 0x0000000F)
+  result = toU16((DWORD(LocaleId) shr 20) and 0x0000000F)
 
 proc LANG_SYSTEM_DEFAULT(): int16 =
-  result = MAKELANGID(int16(LANG_NEUTRAL), SUBLANG_SYS_DEFAULT)
+  result = toU16(MAKELANGID(toU16(LANG_NEUTRAL), SUBLANG_SYS_DEFAULT))
 
 proc LANG_USER_DEFAULT(): int16 =
-  result = MAKELANGID(int16(LANG_NEUTRAL), SUBLANG_DEFAULT)
+  result = toU16(MAKELANGID(toU16(LANG_NEUTRAL), SUBLANG_DEFAULT))
 
 proc LOCALE_NEUTRAL(): DWORD =
-  result = MAKELCID(MAKELANGID(int16(LANG_NEUTRAL), SUBLANG_NEUTRAL), SORT_DEFAULT)
+  result = MAKELCID(MAKELANGID(toU16(LANG_NEUTRAL), SUBLANG_NEUTRAL), SORT_DEFAULT)
 
 proc LOCALE_INVARIANT(): DWORD =
-  result = MAKELCID(MAKELANGID(int16(LANG_INVARIANT), SUBLANG_NEUTRAL), SORT_DEFAULT)
+  result = MAKELCID(MAKELANGID(toU16(LANG_INVARIANT), SUBLANG_NEUTRAL), SORT_DEFAULT)