summary refs log tree commit diff stats
path: root/lib/base/devel/python.pas
diff options
context:
space:
mode:
Diffstat (limited to 'lib/base/devel/python.pas')
-rw-r--r--lib/base/devel/python.pas2205
1 files changed, 0 insertions, 2205 deletions
diff --git a/lib/base/devel/python.pas b/lib/base/devel/python.pas
deleted file mode 100644
index 587ec6dc9..000000000
--- a/lib/base/devel/python.pas
+++ /dev/null
@@ -1,2205 +0,0 @@
-{

-    Light-weight binding for the Python interpreter

-       (c) 2008 Andreas Rumpf 

-    Based on 'PythonEngine' module by Dr. Dietmar Budelsky

-

-}

-

-(**************************************************************************)

-(*                                                                        *)

-(* Module:  Unit 'PythonEngine'     Copyright (c) 1997                    *)

-(*                                                                        *)

-(* Version: 3.0                     Dr. Dietmar Budelsky                  *)

-(* Sub-Version: 0.25                dbudelsky@web.de                      *)

-(*                                  Germany                               *)

-(*                                                                        *)

-(*                                  Morgan Martinet                       *)

-(*                                  4721 rue Brebeuf                      *)

-(*                                  H2J 3L2 MONTREAL (QC)                 *)

-(*                                  CANADA                                *)

-(*                                  e-mail: mmm@free.fr                   *)

-(*                                                                        *)

-(*  look our page at: http://www.multimania.com/marat                     *)

-(**************************************************************************)

-(*  Functionality:  Delphi Components that provide an interface to the    *)

-(*                  Python language (see python.txt for more infos on     *)

-(*                  Python itself).                                       *)

-(*                                                                        *)

-(**************************************************************************)

-(*  Contributors:                                                         *)

-(*      Grzegorz Makarewicz (mak@mikroplan.com.pl)                        *)

-(*      Andrew Robinson (andy@hps1.demon.co.uk)                           *)

-(*      Mark Watts(mark_watts@hotmail.com)                                *)

-(*      Olivier Deckmyn (olivier.deckmyn@mail.dotcom.fr)                  *)

-(*      Sigve Tjora (public@tjora.no)                                     *)

-(*      Mark Derricutt (mark@talios.com)                                  *)

-(*      Igor E. Poteryaev (jah@mail.ru)                                   *)

-(*      Yuri Filimonov (fil65@mail.ru)                                    *)

-(*      Stefan Hoffmeister (Stefan.Hoffmeister@Econos.de)                 *)

-(**************************************************************************)

-(* This source code is distributed with no WARRANTY, for no reason or use.*)

-(* Everyone is allowed to use and change this code free for his own tasks *)

-(* and projects, as long as this header and its copyright text is intact. *)

-(* For changed versions of this code, which are public distributed the    *)

-(* following additional conditions have to be fullfilled:                 *)

-(* 1) The header has to contain a comment on the change and the author of *)

-(*    it.                                                                 *)

-(* 2) A copy of the changed source has to be sent to the above E-Mail     *)

-(*    address or my then valid address, if this is possible to the        *)

-(*    author.                                                             *)

-(* The second condition has the target to maintain an up to date central  *)

-(* version of the component. If this condition is not acceptable for      *)

-(* confidential or legal reasons, everyone is free to derive a component  *)

-(* or to generate a diff file to my or other original sources.            *)

-(* Dr. Dietmar Budelsky, 1997-11-17                                       *)

-(**************************************************************************)

-unit python;

-

-interface

-

-uses

-  dyncalls;

-

-{$ifdef windows}

-const

-  DllName = 'python24.dll';

-{$else}

-const

-  DllName = 'libpython2.4.so'; // for UNIX systems

-{$endif}

-

-const

-  PYT_METHOD_BUFFER_INCREASE = 10;

-  PYT_MEMBER_BUFFER_INCREASE = 10;

-  PYT_GETSET_BUFFER_INCREASE = 10;

-

-  METH_VARARGS  = $0001;

-  METH_KEYWORDS = $0002;

-

-  // Masks for the co_flags field of PyCodeObject

-  CO_OPTIMIZED   = $0001;

-  CO_NEWLOCALS   = $0002;

-  CO_VARARGS     = $0004;

-  CO_VARKEYWORDS = $0008;

-

-type

-  // Rich comparison opcodes introduced in version 2.1

-  TRichComparisonOpcode = (pyLT, pyLE, pyEQ, pyNE, pyGT, pyGE);

-const

-{Type flags (tp_flags) introduced in version 2.0

-

-These flags are used to extend the type structure in a backwards-compatible

-fashion. Extensions can use the flags to indicate (and test) when a given

-type structure contains a new feature. The Python core will use these when

-introducing new functionality between major revisions (to avoid mid-version

-changes in the PYTHON_API_VERSION).

-

-Arbitration of the flag bit positions will need to be coordinated among

-all extension writers who publically release their extensions (this will

-be fewer than you might expect!)..

-

-Python 1.5.2 introduced the bf_getcharbuffer slot into PyBufferProcs.

-

-Type definitions should use Py_TPFLAGS_DEFAULT for their tp_flags value.

-

-Code can use PyType_HasFeature(type_ob, flag_value) to test whether the

-given type object has a specified feature.

-}

-

-// PyBufferProcs contains bf_getcharbuffer

-  Py_TPFLAGS_HAVE_GETCHARBUFFER = (1 shl 0);

-

-// PySequenceMethods contains sq_contains

-  Py_TPFLAGS_HAVE_SEQUENCE_IN = (1 shl 1);

-

-// Objects which participate in garbage collection (see objimp.h)

-  Py_TPFLAGS_GC = (1 shl 2);

-

-// PySequenceMethods and PyNumberMethods contain in-place operators

-  Py_TPFLAGS_HAVE_INPLACEOPS = (1 shl 3);

-

-// PyNumberMethods do their own coercion */

-  Py_TPFLAGS_CHECKTYPES = (1 shl 4);

-

-  Py_TPFLAGS_HAVE_RICHCOMPARE = (1 shl 5);

-

-// Objects which are weakly referencable if their tp_weaklistoffset is >0

-// XXX Should this have the same value as Py_TPFLAGS_HAVE_RICHCOMPARE?

-// These both indicate a feature that appeared in the same alpha release.

-

-  Py_TPFLAGS_HAVE_WEAKREFS = (1 shl 6);

-

-// tp_iter is defined

-  Py_TPFLAGS_HAVE_ITER = (1 shl 7);

-

-// New members introduced by Python 2.2 exist

-  Py_TPFLAGS_HAVE_CLASS = (1 shl 8);

-

-// Set if the type object is dynamically allocated

-  Py_TPFLAGS_HEAPTYPE = (1 shl 9);

-

-// Set if the type allows subclassing

-  Py_TPFLAGS_BASETYPE = (1 shl 10);

-

-// Set if the type is 'ready' -- fully initialized

-  Py_TPFLAGS_READY = (1 shl 12);

-

-// Set while the type is being 'readied', to prevent recursive ready calls

-  Py_TPFLAGS_READYING = (1 shl 13);

-

-// Objects support garbage collection (see objimp.h)

-  Py_TPFLAGS_HAVE_GC = (1 shl 14);

-

-  Py_TPFLAGS_DEFAULT  =      Py_TPFLAGS_HAVE_GETCHARBUFFER

-                             or Py_TPFLAGS_HAVE_SEQUENCE_IN

-                             or Py_TPFLAGS_HAVE_INPLACEOPS

-                             or Py_TPFLAGS_HAVE_RICHCOMPARE

-                             or Py_TPFLAGS_HAVE_WEAKREFS

-                             or Py_TPFLAGS_HAVE_ITER

-                             or Py_TPFLAGS_HAVE_CLASS;

-

-// See function PyType_HasFeature below for testing the flags.

-

-// Delphi equivalent used by TPythonType

-type

-  TPFlag = (tpfHaveGetCharBuffer, tpfHaveSequenceIn, tpfGC, tpfHaveInplaceOps,

-            tpfCheckTypes, tpfHaveRichCompare, tpfHaveWeakRefs,

-            tpfHaveIter, tpfHaveClass, tpfHeapType, tpfBaseType, tpfReady, 

-            tpfReadying, tpfHaveGC

-           );

-  TPFlags = set of TPFlag;

-const

-  TPFLAGS_DEFAULT = [tpfHaveGetCharBuffer, tpfHaveSequenceIn, tpfHaveInplaceOps,

-                     tpfHaveRichCompare, tpfHaveWeakRefs, tpfHaveIter, 

-                     tpfHaveClass];

-//-------  Python opcodes  ----------//

-Const

-   single_input                 = 256;

-   file_input                   = 257;

-   eval_input                   = 258;

-   funcdef                      = 259;

-   parameters                   = 260;

-   varargslist                  = 261;

-   fpdef                        = 262;

-   fplist                       = 263;

-   stmt                         = 264;

-   simple_stmt                  = 265;

-   small_stmt                   = 266;

-   expr_stmt                    = 267;

-   augassign                    = 268;

-   print_stmt                   = 269;

-   del_stmt                     = 270;

-   pass_stmt                    = 271;

-   flow_stmt                    = 272;

-   break_stmt                   = 273;

-   continue_stmt                = 274;

-   return_stmt                  = 275;

-   raise_stmt                   = 276;

-   import_stmt                  = 277;

-   import_as_name               = 278;

-   dotted_as_name               = 279;

-   dotted_name                  = 280;

-   global_stmt                  = 281;

-   exec_stmt                    = 282;

-   assert_stmt                  = 283;

-   compound_stmt                = 284;

-   if_stmt                      = 285;

-   while_stmt                   = 286;

-   for_stmt                     = 287;

-   try_stmt                     = 288;

-   except_clause                = 289;

-   suite                        = 290;

-   test                         = 291;

-   and_test                     = 291;

-   not_test                     = 293;

-   comparison                   = 294;

-   comp_op                      = 295;

-   expr                         = 296;

-   xor_expr                     = 297;

-   and_expr                     = 298;

-   shift_expr                   = 299;

-   arith_expr                   = 300;

-   term                         = 301;

-   factor                       = 302;

-   power                        = 303;

-   atom                         = 304;

-   listmaker                    = 305;

-   lambdef                      = 306;

-   trailer                      = 307;

-   subscriptlist                = 308;

-   subscript                    = 309;

-   sliceop                      = 310;

-   exprlist                     = 311;

-   testlist                     = 312;

-   dictmaker                    = 313;

-   classdef                     = 314;

-   arglist                      = 315;

-   argument                     = 316;

-   list_iter                    = 317;

-   list_for                     = 318;

-   list_if                      = 319;

-

-const

-  T_SHORT                       = 0;

-  T_INT                         = 1;

-  T_LONG                        = 2;

-  T_FLOAT                       = 3;

-  T_DOUBLE                      = 4;

-  T_STRING                      = 5;

-  T_OBJECT                      = 6;

-  T_CHAR                        = 7;	// 1-character string

-  T_BYTE                        = 8;	// 8-bit signed int

-  T_UBYTE                       = 9;

-  T_USHORT                      = 10;

-  T_UINT                        = 11;

-  T_ULONG                       = 12;

-

-// Added by Jack: strings contained in the structure

-  T_STRING_INPLACE= 13;

-

-  T_OBJECT_EX                   = 16;{ Like T_OBJECT, but raises AttributeError

-                                        when the value is NULL, instead of

-                                        converting to None. }

-

-// Flags

-  READONLY                      = 1;

-  RO                            = READONLY;		// Shorthand 

-  READ_RESTRICTED               = 2;

-  WRITE_RESTRICTED              = 4;

-  RESTRICTED                    = (READ_RESTRICTED or WRITE_RESTRICTED);

-type

-  TPyMemberType = (mtShort, mtInt, mtLong, mtFloat, mtDouble, mtString, 

-                   mtObject, mtChar, mtByte, mtUByte, mtUShort, mtUInt, 

-                   mtULong, mtStringInplace, mtObjectEx);

-  TPyMemberFlag = (mfDefault, mfReadOnly, mfReadRestricted, mfWriteRestricted, mfRestricted);

-

-//#######################################################

-//##                                                   ##

-//##    Global declarations, nothing Python specific   ##

-//##                                                   ##

-//#######################################################

-

-type

-  TPChar  = array[0..16000] of PChar;

-  PPChar  = ^TPChar;

-  PInt	   = ^Integer;

-  PDouble = ^Double;

-  PFloat  = ^Real;

-  PLong   = ^LongInt;

-  PShort  = ^ShortInt;

-  PString = ^PChar;

-

-//#######################################################

-//##                                                   ##

-//##            Python specific interface              ##

-//##                                                   ##

-//#######################################################

-

-type

-  PP_frozen	    = ^Pfrozen;

-  P_frozen	    = ^Tfrozen;

-  PPyObject	    = ^PyObject;

-  PPPyObject	    = ^PPyObject;

-  PPPPyObject	    = ^PPPyObject;

-  PPyIntObject	    = ^PyIntObject;

-  PPyTypeObject     = ^PyTypeObject;

-  PPySliceObject    = ^PySliceObject;

-

-  TPyCFunction       = function (self, args: PPyObject): PPyObject; cdecl;

-

-  Tunaryfunc         = function (ob1: PPyObject): PPyObject; cdecl;

-  Tbinaryfunc        = function (ob1,ob2: PPyObject): PPyObject; cdecl;

-  Tternaryfunc       = function (ob1,ob2,ob3: PPyObject): PPyObject; cdecl;

-  Tinquiry           = function (ob1: PPyObject): integer; cdecl;

-  Tcoercion          = function (ob1,ob2: PPPyObject): integer; cdecl;

-  Tintargfunc        = function (ob1: PPyObject; i: integer): PPyObject; cdecl;

-  Tintintargfunc     = function (ob1: PPyObject; i1, i2: integer):

-                                PPyObject; cdecl;

-  Tintobjargproc     = function (ob1: PPyObject; i: integer; ob2: PPyObject):

-                                integer; cdecl;

-  Tintintobjargproc  = function (ob1: PPyObject; i1, i2: integer;

-                                ob2: PPyObject): integer; cdecl;

-  Tobjobjargproc     = function (ob1,ob2,ob3: PPyObject): integer; cdecl;

-

-  Tpydestructor      = procedure (ob: PPyObject); cdecl;

-  Tprintfunc         = function (ob: PPyObject; var f: file; i: integer): integer; cdecl;

-  Tgetattrfunc       = function (ob1: PPyObject; name: PChar): PPyObject; cdecl;

-  Tsetattrfunc       = function (ob1: PPyObject; name: PChar; ob2: PPyObject): integer; cdecl;

-  Tcmpfunc           = function (ob1, ob2: PPyObject): integer; cdecl;

-  Treprfunc          = function (ob: PPyObject): PPyObject; cdecl;

-  Thashfunc          = function (ob: PPyObject): LongInt; cdecl;

-  Tgetattrofunc      = function (ob1, ob2: PPyObject): PPyObject; cdecl;

-  Tsetattrofunc      = function (ob1, ob2, ob3: PPyObject): integer; cdecl;

-

-/// jah 29-sep-2000: updated for python 2.0

-///                   added from object.h

-  Tgetreadbufferproc = function (ob1: PPyObject; i: integer; ptr: Pointer): integer; cdecl;

-  Tgetwritebufferproc= function (ob1: PPyObject; i: integer; ptr: Pointer): integer; cdecl;

-  Tgetsegcountproc   = function (ob1: PPyObject; i: integer): integer; cdecl;

-  Tgetcharbufferproc = function (ob1: PPyObject; i: integer; const pstr: PChar): integer; cdecl;

-  Tobjobjproc        = function (ob1, ob2: PPyObject): integer; cdecl;

-  Tvisitproc         = function (ob1: PPyObject; ptr: Pointer): integer; cdecl;

-  Ttraverseproc      = function (ob1: PPyObject; proc: visitproc; ptr: Pointer): integer; cdecl;

-

-  Trichcmpfunc       = function (ob1, ob2: PPyObject; i: Integer): PPyObject; cdecl;

-  Tgetiterfunc       = function (ob1: PPyObject): PPyObject; cdecl;

-  Titernextfunc      = function (ob1: PPyObject): PPyObject; cdecl;

-  Tdescrgetfunc      = function (ob1, ob2, ob3: PPyObject): PPyObject; cdecl;

-  Tdescrsetfunc      = function (ob1, ob2, ob3: PPyObject): Integer; cdecl;

-  Tinitproc          = function (self, args, kwds: PPyObject): Integer; cdecl;

-  Tnewfunc           = function (subtype: PPyTypeObject; args, kwds: PPyObject): PPyObject; cdecl;

-  Tallocfunc         = function (self: PPyTypeObject; nitems: integer): PPyObject; cdecl;

-

-  TPyNumberMethods = record

-     nb_add: Tbinaryfunc;

-     nb_substract: Tbinaryfunc;

-     nb_multiply: Tbinaryfunc;

-     nb_divide: Tbinaryfunc;

-     nb_remainder: Tbinaryfunc;

-     nb_divmod: Tbinaryfunc;

-     nb_power: Tternaryfunc;

-     nb_negative: Tunaryfunc;

-     nb_positive: Tunaryfunc;

-     nb_absolute: Tunaryfunc;

-     nb_nonzero: Tinquiry;

-     nb_invert: Tunaryfunc;

-     nb_lshift: Tbinaryfunc;

-     nb_rshift: Tbinaryfunc;

-     nb_and: Tbinaryfunc;

-     nb_xor: Tbinaryfunc;

-     nb_or: Tbinaryfunc;

-     nb_coerce: Tcoercion;

-     nb_int: Tunaryfunc;

-     nb_long: Tunaryfunc;

-     nb_float: Tunaryfunc;

-     nb_oct: Tunaryfunc;

-     nb_hex: Tunaryfunc;

-/// jah 29-sep-2000: updated for python 2.0

-///                   added from .h

-     nb_inplace_add: Tbinaryfunc;

-     nb_inplace_subtract: Tbinaryfunc;

-     nb_inplace_multiply: Tbinaryfunc;

-     nb_inplace_divide: Tbinaryfunc;

-     nb_inplace_remainder: Tbinaryfunc;

-     nb_inplace_power: Tternaryfunc;

-     nb_inplace_lshift: Tbinaryfunc;

-     nb_inplace_rshift: Tbinaryfunc;

-     nb_inplace_and: Tbinaryfunc;

-     nb_inplace_xor: Tbinaryfunc;

-     nb_inplace_or: Tbinaryfunc;

-     // Added in release 2.2

-     // The following require the Py_TPFLAGS_HAVE_CLASS flag

-     nb_floor_divide:         Tbinaryfunc;

-     nb_true_divide:          Tbinaryfunc;

-     nb_inplace_floor_divide: Tbinaryfunc;

-     nb_inplace_true_divide:  Tbinaryfunc;

-  end;

-  PPyNumberMethods = ^TPyNumberMethods;

-

-  TPySequenceMethods = record

-     sq_length: Tinquiry;

-     sq_concat: Tbinaryfunc;

-     sq_repeat: Tintargfunc;

-     sq_item: Tintargfunc;

-     sq_slice: Tintintargfunc;

-     sq_ass_item: Tintobjargproc;

-     sq_ass_slice: Tintintobjargproc;

-/// jah 29-sep-2000: updated for python 2.0

-///                   added from .h

-     sq_contains: Tobjobjproc;

-     sq_inplace_concat: Tbinaryfunc;

-     sq_inplace_repeat: Tintargfunc;

-  end;

-  PPySequenceMethods = ^TPySequenceMethods;

-

-  TPyMappingMethods = record

-     mp_length	: Tinquiry;

-     mp_subscript: Tbinaryfunc;

-     mp_ass_subscript: Tobjobjargproc;

-  end;

-  PPyMappingMethods = ^PyMappingMethods;

-

-/// jah 29-sep-2000: updated for python 2.0

-///                   added from .h

-  TPyBufferProcs = record

-     bf_getreadbuffer: Tgetreadbufferproc;

-     bf_getwritebuffer: Tgetwritebufferproc;

-     bf_getsegcount: Tgetsegcountproc;

-     bf_getcharbuffer: Tgetcharbufferproc;

-  end;

-  PPyBufferProcs = ^TPyBufferProcs;

-

-  TPy_complex =  record

-     real: double;

-     imag: double;

-  end;

-

-  TPyObject = record

-    ob_refcnt: Integer;

-    ob_type:   PPyTypeObject;

-  end;

-

-  TPyIntObject = object(TPyObject)

-    ob_ival: LongInt;

-  end;

-

-  PByte = ^Byte;

-  Tfrozen = packed record

-     name: PChar;

-     code: PByte;

-     size: Integer;

-  end;

-

-  TPySliceObject = object(TPyObject)

-    start, stop, step:  PPyObject;

-  end;

-

-  PPyMethodDef = ^TPyMethodDef;

-  TPyMethodDef  = record

-     ml_name:  PChar;

-     ml_meth:  TPyCFunction;

-     ml_flags: Integer;

-     ml_doc:   PChar;

-  end;

-

-  // structmember.h

-  PPyMemberDef = ^TPyMemberDef;

-  TPyMemberDef = record

-    name: PChar;

-    theType: integer;

-    offset: integer;

-    flags: integer;

-    doc: PChar;

-  end;

-

-  // descrobject.h

-

-  // Descriptors

-

-  Tgetter = function (obj: PPyObject; context: Pointer): PPyObject; cdecl;

-  Tsetter = function (obj, value: PPyObject; context: Pointer): integer; cdecl;

-

-  PPyGetSetDef = ^TPyGetSetDef;

-  TPyGetSetDef = record

-    name: PChar;

-    get: Tgetter;

-    set_: Tsetter;

-    doc: PChar;

-    closure: Pointer;

-  end;

-

-  Twrapperfunc = function (self, args: PPyObject; wrapped: Pointer): PPyObject; cdecl;

-

-  pwrapperbase = ^Twrapperbase;

-  Twrapperbase = record

-    name: PChar;

-    wrapper: Twrapperfunc;

-    doc: PChar;

-  end;

-

-  // Various kinds of descriptor objects

-

-  {#define PyDescr_COMMON \

-          PyObject_HEAD \

-          PyTypeObject *d_type; \

-          PyObject *d_name

-  }

-

-  PPyDescrObject = ^TPyDescrObject;

-  TPyDescrObject = object(TPyObject)

-    d_type: PPyTypeObject;

-    d_name: PPyObject;

-  end;

-

-  PPyMethodDescrObject = ^TPyMethodDescrObject;

-  TPyMethodDescrObject = object(TPyDescrObject)

-    d_method: PPyMethodDef;

-  end;

-

-  PPyMemberDescrObject = ^TPyMemberDescrObject;

-  TPyMemberDescrObject = object(TPyDescrObject)

-    d_member: PPyMemberDef;

-  end;

-

-  PPyGetSetDescrObject = ^TPyGetSetDescrObject;

-  TPyGetSetDescrObject = object(TPyDescrObject)

-    d_getset: PPyGetSetDef;

-  end;

-

-  PPyWrapperDescrObject = ^TPyWrapperDescrObject;

-  TPyWrapperDescrObject = object(TPyDescrObject)

-    d_base: pwrapperbase;

-    d_wrapped: Pointer; // This can be any function pointer

-  end;

-

-  // object.h

-  TPyTypeObject = object(TPyObject)

-    ob_size:        Integer; // Number of items in variable part

-    tp_name:        PChar;   // For printing

-    tp_basicsize, tp_itemsize: Integer; // For allocation

-

-    // Methods to implement standard operations

-

-    tp_dealloc:     Tpydestructor;

-    tp_print:       Tprintfunc;

-    tp_getattr:     Tgetattrfunc;

-    tp_setattr:     Tsetattrfunc;

-    tp_compare:     Tcmpfunc;

-    tp_repr:        Treprfunc;

-

-    // Method suites for standard classes

-

-    tp_as_number:   PPyNumberMethods;

-    tp_as_sequence: PPySequenceMethods;

-    tp_as_mapping:  PPyMappingMethods;

-

-    // More standard operations (here for binary compatibility)

-

-    tp_hash:        Thashfunc;

-    tp_call:        Tternaryfunc;

-    tp_str:         Treprfunc;

-    tp_getattro:    Tgetattrofunc;

-    tp_setattro:    Tsetattrofunc;

-

-/// jah 29-sep-2000: updated for python 2.0

-

-    // Functions to access object as input/output buffer

-    tp_as_buffer:   PPyBufferProcs;

-    // Flags to define presence of optional/expanded features

-    tp_flags:       LongInt;

-

-    tp_doc:         PChar; // Documentation string

-

-    // call function for all accessible objects

-    tp_traverse:    Ttraverseproc;

-

-    // delete references to contained objects

-    tp_clear:       Tinquiry;

-    // rich comparisons

-    tp_richcompare: Trichcmpfunc;

-

-    // weak reference enabler

-    tp_weaklistoffset: Longint;

-    // Iterators

-    tp_iter: Tgetiterfunc;

-    tp_iternext: Titernextfunc;

-

-    // Attribute descriptor and subclassing stuff

-    tp_methods: PPyMethodDef;

-    tp_members: PPyMemberDef;

-    tp_getset: PPyGetSetDef;

-    tp_base: PPyTypeObject;

-    tp_dict: PPyObject;

-    tp_descr_get: Tdescrgetfunc;

-    tp_descr_set: Tdescrsetfunc;

-    tp_dictoffset: longint;

-    tp_init: Tinitproc;

-    tp_alloc: Tallocfunc;

-    tp_new: Tnewfunc;

-    tp_free: Tpydestructor; // Low-level free-memory routine

-    tp_is_gc: Tinquiry; // For PyObject_IS_GC

-    tp_bases: PPyObject;

-    tp_mro: PPyObject; // method resolution order

-    tp_cache: PPyObject;

-    tp_subclasses: PPyObject;

-    tp_weaklist: PPyObject;

-    //More spares

-    tp_xxx7:        pointer;

-    tp_xxx8:        pointer;

-  end;

-

-  PPyMethodChain = ^TPyMethodChain;

-  TPyMethodChain = record

-    methods: PPyMethodDef;

-    link:    PPyMethodChain;

-  end;

-

-  PPyClassObject = ^TPyClassObject;

-  TPyClassObject = object(TPyObject)

-    cl_bases: PPyObject;      // A tuple of class objects

-    cl_dict: PPyObject;       // A dictionary

-    cl_name: PPyObject;       // A string

-    // The following three are functions or NULL

-    cl_getattr: PPyObject;

-    cl_setattr: PPyObject;

-    cl_delattr: PPyObject;

-  end;

-

-  PPyInstanceObject = ^TPyInstanceObject;

-  TPyInstanceObject = object(TPyObject)

-    in_class: PPyClassObject;      // The class object

-    in_dict: PPyObject;           // A dictionary

-  end;

-

-{ Instance method objects are used for two purposes:

-   (a) as bound instance methods (returned by instancename.methodname)

-   (b) as unbound methods (returned by ClassName.methodname)

-   In case (b), im_self is NULL

-}

-

-  PPyMethodObject = ^TPyMethodObject;

-  TPyMethodObject = object(TPyObject)

-    im_func: PPyObject;      // The function implementing the method

-    im_self: PPyObject;      // The instance it is bound to, or NULL

-    im_class: PPyObject;      // The class that defined the method

-  end;

-

-  // Bytecode object, compile.h

-  PPyCodeObject = ^TPyCodeObject;

-  TPyCodeObject = object(TPyObject)

-    co_argcount: Integer;         // #arguments, except *args

-    co_nlocals: Integer;         // #local variables

-    co_stacksize: Integer;          // #entries needed for evaluation stack

-    co_flags: Integer;         // CO_..., see below

-    co_code: PPyObject;       // instruction opcodes (it hides a PyStringObject)

-    co_consts: PPyObject;       // list (constants used)

-    co_names: PPyObject;       // list of strings (names used)

-    co_varnames: PPyObject;       // tuple of strings (local variable names)

-    co_freevars: PPyObject;	      // tuple of strings (free variable names)

-    co_cellvars: PPyObject;       // tuple of strings (cell variable names)

-    // The rest doesn't count for hash/cmp

-    co_filename: PPyObject;       // string (where it was loaded from)

-    co_name: PPyObject;       // string (name, for reference)

-    co_firstlineno: Integer;         // first source line number

-    co_lnotab: PPyObject;       // string (encoding addr<->lineno mapping)

-  end;

-

-  // from pystate.h

-  PPyInterpreterState = ^TPyInterpreterState;

-  PPyThreadState = ^TPyThreadState;

-  PPyFrameObject = ^TPyFrameObject;

-

-  // Interpreter environments

-  TPyInterpreterState = record

-    next: PPyInterpreterState;

-    tstate_head: PPyThreadState;

-

-    modules: PPyObject;

-    sysdict: PPyObject;

-    builtins: PPyObject;

-

-    checkinterval: integer;

-  end;

-

-  // Thread specific information

-  TPyThreadState = record

-    next: PPyThreadState;

-    interp: PPyInterpreterState;

-

-    frame: PPyFrameObject;

-    recursion_depth: integer;

-    ticker: integer;

-    tracing: integer;

-

-    sys_profilefunc: PPyObject;

-    sys_tracefunc: PPyObject;

-

-    curexc_type: PPyObject;

-    curexc_value: PPyObject;

-    curexc_traceback: PPyObject;

-

-    exc_type: PPyObject;

-    exc_value: PPyObject;

-    exc_traceback: PPyObject;

-

-    dict: PPyObject;

-  end;

-

-  // from frameobject.h

-

-  PPyTryBlock = ^TPyTryBlock;

-  TPyTryBlock = record

-    b_type: Integer;       // what kind of block this is

-    b_handler: Integer;       // where to jump to find handler

-    b_level: Integer;       // value stack level to pop to

-  end;

-

-  CO_MAXBLOCKS  = 0..19;

-  TPyFrameObject = object(TPyObject)

-    // start of the VAR_HEAD of an object

-    ob_size: Integer;           // Number of items in variable part

-    // End of the Head of an object

-    f_back: PPyFrameObject;    // previous frame, or NULL

-    f_code: PPyCodeObject;     // code segment

-    f_builtins: PPyObject;         // builtin symbol table (PyDictObject)

-    f_globals: PPyObject;         // global symbol table (PyDictObject)

-    f_locals: PPyObject;         // local symbol table (PyDictObject)

-    f_valuestack: PPPyObject;        // points after the last local

-    (* Next free slot in f_valuestack.  Frame creation sets to f_valuestack.

-       Frame evaluation usually NULLs it, but a frame that yields sets it

-       to the current stack top. *)

-    f_stacktop: PPPyObject;

-    f_trace: PPyObject;         // Trace function

-    f_exc_type, f_exc_value, f_exc_traceback: PPyObject;

-    f_tstate: PPyThreadState;

-    f_lasti: Integer;           // Last instruction if called

-    f_lineno: Integer;           // Current line number

-    f_restricted: Integer;           // Flag set if restricted operations

-                                      // in this scope

-    f_iblock: Integer;           // index in f_blockstack

-    f_blockstack: array[CO_MAXBLOCKS] of PyTryBlock; // for try and loop blocks

-    f_nlocals: Integer;           // number of locals

-    f_ncells: Integer;

-    f_nfreevars: Integer;

-    f_stacksize: Integer;           // size of value stack

-    f_localsplus: array[0..0] of PPyObject; // locals+stack, dynamically sized

-  end;

-

-  // From traceback.c

-  PPyTraceBackObject = ^TPyTraceBackObject;

-  TPyTraceBackObject = object(TPyObject)

-    tb_next: PPyTraceBackObject;

-    tb_frame: PPyFrameObject;

-    tb_lasti: Integer;

-    tb_lineno: Integer;

-  end;

-

-  // Parse tree node interface

-

-  PNode = ^Tnode;

-  Tnode = record

-    n_type: smallint;

-    n_str: PChar;

-    n_lineno: smallint;

-    n_nchildren: smallint;

-    n_child: PNode;

-  end;

-

-  // From weakrefobject.h

-

-  PPyWeakReference = ^TPyWeakReference;

-  TPyWeakReference = object(TPyObject)

-    wr_object: PPyObject;

-    wr_callback: PPyObject;

-    hash: longint;

-    wr_prev: PPyWeakReference;

-    wr_next: PPyWeakReference;

-  end;

-

-  // from datetime.h

-

-

-{* Fields are packed into successive bytes, each viewed as unsigned and

- * big-endian, unless otherwise noted:

- *

- * byte offset

- *  0 		year     2 bytes, 1-9999

- *  2	  	month    1 byte,  1-12

- *  3 		day      1 byte,  1-31

- *  4     hour     1 byte,  0-23

- *  5 		minute   1 byte,  0-59

- *  6 		second   1 byte,  0-59

- *  7 		usecond  3 bytes, 0-999999

- * 10

- *}

-

-const

-  { # of bytes for year, month, and day. }

-  PyDateTime_DATE_DATASIZE = 4;

-

-  { # of bytes for hour, minute, second, and usecond. }

-  PyDateTime_TIME_DATASIZE = 6;

-

-  { # of bytes for year, month, day, hour, minute, second, and usecond. }

-  PyDateTime_DATETIME_DATASIZE = 10;

-type

-  TPyDateTime_Delta = object(TPyObject)

-    hashcode: Integer;  // -1 when unknown

-    days: Integer;  // -MAX_DELTA_DAYS <= days <= MAX_DELTA_DAYS

-    seconds: Integer;  // 0 <= seconds < 24*3600 is invariant

-    microseconds: Integer;  // 0 <= microseconds < 1000000 is invariant

-  end;

-  PPyDateTime_Delta = ^TPyDateTime_Delta;

-

-  TPyDateTime_TZInfo = object(TPyObject) // a pure abstract base clase

-  end;

-  PPyDateTime_TZInfo = ^TPyDateTime_TZInfo;

-

-{

-/* The datetime and time types have hashcodes, and an optional tzinfo member,

- * present if and only if hastzinfo is true.

- */

-#define _PyTZINFO_HEAD		\

-	PyObject_HEAD		\

-	long hashcode;		\

-	char hastzinfo;		/* boolean flag */

-}

-

-{* No _PyDateTime_BaseTZInfo is allocated; it's just to have something

- * convenient to cast to, when getting at the hastzinfo member of objects

- * starting with _PyTZINFO_HEAD.

- *}

-  TPyDateTime_BaseTZInfo = object(TPyObject)

-    hashcode: Integer;

-    hastzinfo: bool;  // boolean flag

-  end;

-  PPyDateTime_BaseTZInfo = ^TPyDateTime_BaseTZInfo;

-

-{* All time objects are of PyDateTime_TimeType, but that can be allocated

- * in two ways, with or without a tzinfo member.  Without is the same as

- * tzinfo == None, but consumes less memory.  _PyDateTime_BaseTime is an

- * internal struct used to allocate the right amount of space for the

- * "without" case.

- *}

-{#define _PyDateTime_TIMEHEAD	\

-	_PyTZINFO_HEAD		\

-	unsigned char data[_PyDateTime_TIME_DATASIZE];

-}

-

-  TPyDateTime_BaseTime = object(TPyDateTime_BaseTZInfo) 

-    data: array[0..Pred(PyDateTime_TIME_DATASIZE)] of Byte;

-  end;

-  PPyDateTime_BaseTime = ^TPyDateTime_BaseTime;

-

-  TPyDateTime_Time = object(TPyDateTime_BaseTime) // hastzinfo true

-    tzinfo: PPyObject;

-  end;

-  PPyDateTime_Time = ^PyDateTime_Time;

-

-{* All datetime objects are of PyDateTime_DateTimeType, but that can be

- * allocated in two ways too, just like for time objects above.  In addition,

- * the plain date type is a base class for datetime, so it must also have

- * a hastzinfo member (although it's unused there).

- *}

-  TPyDateTime_Date = object(TPyDateTime_BaseTZInfo) 

-    data: array [0..Pred(PyDateTime_DATE_DATASIZE)] of Byte;

-  end;

-  PPyDateTime_Date = ^TPyDateTime_Date;

-

- {

-#define _PyDateTime_DATETIMEHEAD	\

-	_PyTZINFO_HEAD			\

-	unsigned char data[_PyDateTime_DATETIME_DATASIZE];

-}

-

-  TPyDateTime_BaseDateTime = object(TPyDateTime_BaseTZInfo) // hastzinfo false

-    data: array[0..Pred(PyDateTime_DATETIME_DATASIZE)] of Byte;

-  end;

-  PPyDateTime_BaseDateTime = ^TPyDateTime_BaseDateTime;

-

-  TPyDateTime_DateTime = object(TPyDateTime_BaseTZInfo) // hastzinfo true

-    data: array[0..Pred(PyDateTime_DATETIME_DATASIZE)] of Byte;

-    tzinfo: PPyObject;

-  end;

-  PPyDateTime_DateTime = ^TPyDateTime_DateTime;

-

-

-//#######################################################

-//##                                                   ##

-//##         New exception classes                     ##

-//##                                                   ##

-//#######################################################

-(*

-  // Python's exceptions

-  EPythonError   = object(Exception)

-      EName: String;

-      EValue: String;

-  end;

-  EPyExecError   = object(EPythonError)

-  end;

-

-  // Standard exception classes of Python

-

-/// jah 29-sep-2000: updated for python 2.0

-///                   base classes updated according python documentation

-

-{ Hierarchy of Python exceptions, Python 2.3, copied from <INSTALL>\Python\exceptions.c

-

-Exception\n\

- |\n\

- +-- SystemExit\n\

- +-- StopIteration\n\

- +-- StandardError\n\

- |    |\n\

- |    +-- KeyboardInterrupt\n\

- |    +-- ImportError\n\

- |    +-- EnvironmentError\n\

- |    |    |\n\

- |    |    +-- IOError\n\

- |    |    +-- OSError\n\

- |    |         |\n\

- |    |         +-- WindowsError\n\

- |    |         +-- VMSError\n\

- |    |\n\

- |    +-- EOFError\n\

- |    +-- RuntimeError\n\

- |    |    |\n\

- |    |    +-- NotImplementedError\n\

- |    |\n\

- |    +-- NameError\n\

- |    |    |\n\

- |    |    +-- UnboundLocalError\n\

- |    |\n\

- |    +-- AttributeError\n\

- |    +-- SyntaxError\n\

- |    |    |\n\

- |    |    +-- IndentationError\n\

- |    |         |\n\

- |    |         +-- TabError\n\

- |    |\n\

- |    +-- TypeError\n\

- |    +-- AssertionError\n\

- |    +-- LookupError\n\

- |    |    |\n\

- |    |    +-- IndexError\n\

- |    |    +-- KeyError\n\

- |    |\n\

- |    +-- ArithmeticError\n\

- |    |    |\n\

- |    |    +-- OverflowError\n\

- |    |    +-- ZeroDivisionError\n\

- |    |    +-- FloatingPointError\n\

- |    |\n\

- |    +-- ValueError\n\

- |    |    |\n\

- |    |    +-- UnicodeError\n\

- |    |        |\n\

- |    |        +-- UnicodeEncodeError\n\

- |    |        +-- UnicodeDecodeError\n\

- |    |        +-- UnicodeTranslateError\n\

- |    |\n\

- |    +-- ReferenceError\n\

- |    +-- SystemError\n\

- |    +-- MemoryError\n\

- |\n\

- +---Warning\n\

-      |\n\

-      +-- UserWarning\n\

-      +-- DeprecationWarning\n\

-      +-- PendingDeprecationWarning\n\

-      +-- SyntaxWarning\n\

-      +-- OverflowWarning\n\

-      +-- RuntimeWarning\n\

-      +-- FutureWarning"

-}

-   EPyException = class (EPythonError);

-   EPyStandardError = class (EPyException);

-   EPyArithmeticError = class (EPyStandardError);

-   EPyLookupError = class (EPyStandardError);

-   EPyAssertionError = class (EPyStandardError);

-   EPyAttributeError = class (EPyStandardError);

-   EPyEOFError = class (EPyStandardError);

-   EPyFloatingPointError = class (EPyArithmeticError);

-   EPyEnvironmentError = class (EPyStandardError);

-   EPyIOError = class (EPyEnvironmentError);

-   EPyOSError = class (EPyEnvironmentError);

-   EPyImportError = class (EPyStandardError);

-   EPyIndexError = class (EPyLookupError);

-   EPyKeyError = class (EPyLookupError);

-   EPyKeyboardInterrupt = class (EPyStandardError);

-   EPyMemoryError = class (EPyStandardError);

-   EPyNameError = class (EPyStandardError);

-   EPyOverflowError = class (EPyArithmeticError);

-   EPyRuntimeError = class (EPyStandardError);

-   EPyNotImplementedError = class (EPyRuntimeError);

-   EPySyntaxError = class (EPyStandardError)

-   public

-      EFileName: string;

-      ELineStr: string;

-      ELineNumber: Integer;

-      EOffset: Integer;

-   end;

-   EPyIndentationError = class (EPySyntaxError);

-   EPyTabError = class (EPyIndentationError);

-   EPySystemError = class (EPyStandardError);

-   EPySystemExit = class (EPyException);

-   EPyTypeError = class (EPyStandardError);

-   EPyUnboundLocalError = class (EPyNameError);

-   EPyValueError = class (EPyStandardError);

-   EPyUnicodeError = class (EPyValueError);

-   UnicodeEncodeError = class (EPyUnicodeError);

-   UnicodeDecodeError = class (EPyUnicodeError);

-   UnicodeTranslateError = class (EPyUnicodeError);

-   EPyZeroDivisionError = class (EPyArithmeticError);

-   EPyStopIteration = class(EPyException);

-   EPyWarning = class (EPyException);

-   EPyUserWarning = class (EPyWarning);

-   EPyDeprecationWarning = class (EPyWarning);

-   PendingDeprecationWarning = class (EPyWarning);

-   FutureWarning = class (EPyWarning);

-   EPySyntaxWarning = class (EPyWarning);

-   EPyOverflowWarning = class (EPyWarning);

-   EPyRuntimeWarning = class (EPyWarning);

-   EPyReferenceError = class (EPyStandardError);

-*)

-

-var

-    PyArg_Parse: function(args: PPyObject; format: PChar):

-                     Integer; cdecl;// varargs; 

-    PyArg_ParseTuple: function(args: PPyObject; format: PChar;

-                              x1: Pointer = nil;

-                              x2: Pointer = nil;

-                              x3: Pointer = nil):

-                     Integer; cdecl;// varargs

-    Py_BuildValue: function(format: PChar): PPyObject; cdecl; // varargs

-    PyCode_Addr2Line: function (co: PPyCodeObject; addrq: Integer): Integer; cdecl;

-    DLL_Py_GetBuildInfo: function: PChar; cdecl;

-

-    // define Python flags. See file pyDebug.h

-    Py_DebugFlag: PInt;

-    Py_VerboseFlag: PInt;

-    Py_InteractiveFlag: PInt;

-    Py_OptimizeFlag: PInt;

-    Py_NoSiteFlag: PInt;

-    Py_UseClassExceptionsFlag: PInt;

-    Py_FrozenFlag: PInt;

-    Py_TabcheckFlag: PInt;

-    Py_UnicodeFlag: PInt;

-    Py_IgnoreEnvironmentFlag: PInt;

-    Py_DivisionWarningFlag: PInt;

-    //_PySys_TraceFunc:    PPPyObject;

-    //_PySys_ProfileFunc: PPPPyObject;

-

-    PyImport_FrozenModules: PP_frozen;

-

-    Py_None:            PPyObject;

-    Py_Ellipsis:        PPyObject;

-    Py_False:           PPyIntObject;

-    Py_True:            PPyIntObject;

-    Py_NotImplemented:  PPyObject;

-

-    PyExc_AttributeError: PPPyObject;

-    PyExc_EOFError: PPPyObject;

-    PyExc_IOError: PPPyObject;

-    PyExc_ImportError: PPPyObject;

-    PyExc_IndexError: PPPyObject;

-    PyExc_KeyError: PPPyObject;

-    PyExc_KeyboardInterrupt: PPPyObject;

-    PyExc_MemoryError: PPPyObject;

-    PyExc_NameError: PPPyObject;

-    PyExc_OverflowError: PPPyObject;

-    PyExc_RuntimeError: PPPyObject;

-    PyExc_SyntaxError: PPPyObject;

-    PyExc_SystemError: PPPyObject;

-    PyExc_SystemExit: PPPyObject;

-    PyExc_TypeError: PPPyObject;

-    PyExc_ValueError: PPPyObject;

-    PyExc_ZeroDivisionError: PPPyObject;

-    PyExc_ArithmeticError: PPPyObject;

-    PyExc_Exception: PPPyObject;

-    PyExc_FloatingPointError: PPPyObject;

-    PyExc_LookupError: PPPyObject;

-    PyExc_StandardError: PPPyObject;

-    PyExc_AssertionError: PPPyObject;

-    PyExc_EnvironmentError: PPPyObject;

-    PyExc_IndentationError: PPPyObject;

-    PyExc_MemoryErrorInst: PPPyObject;

-    PyExc_NotImplementedError: PPPyObject;

-    PyExc_OSError: PPPyObject;

-    PyExc_TabError: PPPyObject;

-    PyExc_UnboundLocalError: PPPyObject;

-    PyExc_UnicodeError: PPPyObject;

-

-    PyExc_Warning: PPPyObject;

-    PyExc_DeprecationWarning: PPPyObject;

-    PyExc_RuntimeWarning: PPPyObject;

-    PyExc_SyntaxWarning: PPPyObject;

-    PyExc_UserWarning: PPPyObject;

-    PyExc_OverflowWarning: PPPyObject;

-    PyExc_ReferenceError: PPPyObject;

-    PyExc_StopIteration: PPPyObject;

-    PyExc_FutureWarning: PPPyObject;

-    PyExc_PendingDeprecationWarning: PPPyObject;

-    PyExc_UnicodeDecodeError: PPPyObject;

-    PyExc_UnicodeEncodeError: PPPyObject;

-    PyExc_UnicodeTranslateError: PPPyObject;

-

-    PyType_Type: PPyTypeObject;

-    PyCFunction_Type: PPyTypeObject;

-    PyCObject_Type: PPyTypeObject;

-    PyClass_Type: PPyTypeObject;

-    PyCode_Type: PPyTypeObject;

-    PyComplex_Type: PPyTypeObject;

-    PyDict_Type: PPyTypeObject;

-    PyFile_Type: PPyTypeObject;

-    PyFloat_Type: PPyTypeObject;

-    PyFrame_Type: PPyTypeObject;

-    PyFunction_Type: PPyTypeObject;

-    PyInstance_Type: PPyTypeObject;

-    PyInt_Type: PPyTypeObject;

-    PyList_Type: PPyTypeObject;

-    PyLong_Type: PPyTypeObject;

-    PyMethod_Type: PPyTypeObject;

-    PyModule_Type: PPyTypeObject;

-    PyObject_Type: PPyTypeObject;

-    PyRange_Type: PPyTypeObject;

-    PySlice_Type: PPyTypeObject;

-    PyString_Type: PPyTypeObject;

-    PyTuple_Type: PPyTypeObject;

-

-    PyBaseObject_Type: PPyTypeObject;

-    PyBuffer_Type: PPyTypeObject;

-    PyCallIter_Type: PPyTypeObject;

-    PyCell_Type: PPyTypeObject;

-    PyClassMethod_Type: PPyTypeObject;

-    PyProperty_Type: PPyTypeObject;

-    PySeqIter_Type: PPyTypeObject;

-    PyStaticMethod_Type: PPyTypeObject;

-    PySuper_Type: PPyTypeObject;

-    PySymtableEntry_Type: PPyTypeObject;

-    PyTraceBack_Type: PPyTypeObject;

-    PyUnicode_Type: PPyTypeObject;

-    PyWrapperDescr_Type: PPyTypeObject;

-

-    PyBaseString_Type: PPyTypeObject;

-    PyBool_Type: PPyTypeObject;

-    PyEnum_Type: PPyTypeObject;

-

-    //PyArg_GetObject: function(args: PPyObject; nargs, i: integer; p_a: PPPyObject): integer; cdecl;

-    //PyArg_GetLong:   function(args: PPyObject; nargs, i: integer; p_a: PLong): integer; cdecl;

-    //PyArg_GetShort:  function(args: PPyObject; nargs, i: integer; p_a: PShort): integer; cdecl;

-    //PyArg_GetFloat:  function(args: PPyObject; nargs, i: integer; p_a: PFloat): integer; cdecl;

-    //PyArg_GetString: function(args: PPyObject; nargs, i: integer; p_a: PString): integer; cdecl;

-    //PyArgs_VaParse:  function (args: PPyObject; format: PChar; va_list: array of const): integer; cdecl;

-    // Does not work!

-    // Py_VaBuildValue: function (format: PChar; va_list: array of const): PPyObject; cdecl;

-    //PyBuiltin_Init:     procedure; cdecl;

-

-    PyComplex_FromCComplex: function(c: TPy_complex):PPyObject; cdecl;

-    PyComplex_FromDoubles: function(realv,imag: double):PPyObject; cdecl;

-    PyComplex_RealAsDouble: function(op: PPyObject): double; cdecl;

-    PyComplex_ImagAsDouble: function(op: PPyObject): double; cdecl;

-    PyComplex_AsCComplex: function(op: PPyObject): TPy_complex; cdecl;

-    PyCFunction_GetFunction: function(ob: PPyObject): Pointer; cdecl;

-    PyCFunction_GetSelf: function(ob: PPyObject): PPyObject; cdecl;

-    PyCallable_Check: function(ob	: PPyObject): integer; cdecl;

-    PyCObject_FromVoidPtr: function(cobj, destruct: Pointer): PPyObject; cdecl;

-    PyCObject_AsVoidPtr: function(ob: PPyObject): Pointer; cdecl;

-    PyClass_New: function (ob1,ob2,ob3:  PPyObject): PPyObject; cdecl;

-    PyClass_IsSubclass: function (ob1, ob2: PPyObject): integer cdecl;

-

-    Py_InitModule4: function(name: PChar; methods: PPyMethodDef; doc: PChar;

-                              passthrough: PPyObject; Api_Version: Integer):PPyObject; cdecl;

-    PyErr_BadArgument:  function: integer; cdecl;

-    PyErr_BadInternalCall: procedure; cdecl;

-    PyErr_CheckSignals: function: integer; cdecl;

-    PyErr_Clear:        procedure; cdecl;

-    PyErr_Fetch:        procedure(errtype, errvalue, errtraceback: PPPyObject); cdecl;

-    PyErr_NoMemory: function: PPyObject; cdecl;

-    PyErr_Occurred:     function: PPyObject; cdecl;

-    PyErr_Print:        procedure; cdecl;

-    PyErr_Restore:      procedure  (errtype, errvalue, errtraceback: PPyObject); cdecl;

-    PyErr_SetFromErrno: function (ob:  PPyObject):PPyObject; cdecl;

-    PyErr_SetNone:      procedure(value: PPyObject); cdecl;

-    PyErr_SetObject:    procedure  (ob1, ob2	: PPyObject); cdecl;

-    PyErr_SetString:    procedure(ErrorObject: PPyObject; text: PChar); cdecl;

-    PyImport_GetModuleDict: function: PPyObject; cdecl;

-    PyInt_FromLong:     function(x: LongInt):PPyObject; cdecl;

-    Py_Initialize:      procedure; cdecl;

-    Py_Exit:            procedure(RetVal: Integer); cdecl;

-    PyEval_GetBuiltins: function: PPyObject; cdecl;

-    PyDict_GetItem: function(mp, key: PPyObject):PPyObject; cdecl;

-    PyDict_SetItem: function(mp, key, item:PPyObject):integer; cdecl;

-    PyDict_DelItem: function(mp, key: PPyObject):integer; cdecl;

-    PyDict_Clear: procedure(mp: PPyObject); cdecl;

-    PyDict_Next: function(mp: PPyObject; pos: PInt; key, value: PPPyObject):integer; cdecl;

-    PyDict_Keys: function(mp: PPyObject):PPyObject; cdecl;

-    PyDict_Values: function(mp: PPyObject):PPyObject; cdecl;

-    PyDict_Items: function(mp: PPyObject):PPyObject; cdecl;

-    PyDict_Size: function(mp: PPyObject):integer; cdecl;

-    PyDict_DelItemString: function(dp: PPyObject;key: PChar):integer; cdecl;

-    PyDict_New: function: PPyObject; cdecl;

-    PyDict_GetItemString: function(dp: PPyObject; key: PChar): PPyObject; cdecl;

-    PyDict_SetItemString: function(dp: PPyObject; key: PChar; item: PPyObject):

-                          Integer; cdecl;

-    PyDictProxy_New: function (obj: PPyObject): PPyObject; cdecl;

-    PyModule_GetDict:     function(module:PPyObject): PPyObject; cdecl;

-    PyObject_Str:         function(v: PPyObject): PPyObject; cdecl;

-    PyRun_String:         function(str: PChar; start: Integer; globals: PPyObject;

-                                    locals: PPyObject): PPyObject; cdecl;

-    PyRun_SimpleString:   function(str: PChar): Integer; cdecl;

-    PyString_AsString:    function(ob: PPyObject): PChar; cdecl;

-    PyString_FromString:  function(str: PChar): PPyObject; cdecl;

-    PySys_SetArgv:        procedure(argc: Integer; argv: PPChar); cdecl;

-

-{+ means, Grzegorz or me has tested his non object version of this function}

-{+} PyCFunction_New: function(md:PPyMethodDef;ob:PPyObject):PPyObject; cdecl;

-{+} PyEval_CallObject: function(ob1,ob2:PPyObject):PPyObject; cdecl;

-{-} PyEval_CallObjectWithKeywords:function (ob1,ob2,ob3:PPyObject):PPyObject; cdecl;

-{-} PyEval_GetFrame:function:PPyObject; cdecl;

-{-} PyEval_GetGlobals:function:PPyObject; cdecl;

-{-} PyEval_GetLocals:function:PPyObject; cdecl;

-{-} //PyEval_GetOwner:function:PPyObject; cdecl;

-{-} PyEval_GetRestricted:function:integer; cdecl;

-

-{-} PyEval_InitThreads:procedure; cdecl;

-{-} PyEval_RestoreThread:procedure(tstate: PPyThreadState); cdecl;

-{-} PyEval_SaveThread:function:PPyThreadState; cdecl;

-

-{-} PyFile_FromString:function (pc1,pc2:PChar):PPyObject; cdecl;

-{-} PyFile_GetLine:function (ob:PPyObject;i:integer):PPyObject; cdecl;

-{-} PyFile_Name:function (ob:PPyObject):PPyObject; cdecl;

-{-} PyFile_SetBufSize:procedure(ob:PPyObject;i:integer); cdecl;

-{-} PyFile_SoftSpace:function (ob:PPyObject;i:integer):integer; cdecl;

-{-} PyFile_WriteObject:function (ob1,ob2:PPyObject;i:integer):integer; cdecl;

-{-} PyFile_WriteString:procedure(s:PChar;ob:PPyObject); cdecl;

-{+} PyFloat_AsDouble:function (ob:PPyObject):DOUBLE; cdecl;

-{+} PyFloat_FromDouble:function (db:double):PPyObject; cdecl;

-{-} PyFunction_GetCode:function (ob:PPyObject):PPyObject; cdecl;

-{-} PyFunction_GetGlobals:function (ob:PPyObject):PPyObject; cdecl;

-{-} PyFunction_New:function (ob1,ob2:PPyObject):PPyObject; cdecl;

-{-} PyImport_AddModule:function (name:PChar):PPyObject; cdecl;

-{-} PyImport_Cleanup:procedure; cdecl;

-{-} PyImport_GetMagicNumber:function:LONGINT; cdecl;

-{+} PyImport_ImportFrozenModule:function (key:PChar):integer; cdecl;

-{+} PyImport_ImportModule:function (name:PChar):PPyObject; cdecl;

-{+} PyImport_Import:function (name:PPyObject):PPyObject; cdecl;

-{-} //PyImport_Init:procedure; cdecl;

-{-} PyImport_ReloadModule:function (ob:PPyObject):PPyObject; cdecl;

-{-} PyInstance_New:function (obClass, obArg, obKW:PPyObject):PPyObject; cdecl;

-{+} PyInt_AsLong:function (ob:PPyObject):LONGINT; cdecl;

-{-} PyList_Append:function (ob1,ob2:PPyObject):integer; cdecl;

-{-} PyList_AsTuple:function (ob:PPyObject):PPyObject; cdecl;

-{+} PyList_GetItem:function (ob:PPyObject;i:integer):PPyObject; cdecl;

-{-} PyList_GetSlice:function (ob:PPyObject;i1,i2:integer):PPyObject; cdecl;

-{-} PyList_Insert:function (dp:PPyObject;idx:Integer;item:PPyObject):integer; cdecl;

-{-} PyList_New:function (size:integer):PPyObject; cdecl;

-{-} PyList_Reverse:function (ob:PPyObject):integer; cdecl;

-{-} PyList_SetItem:function (dp:PPyObject;idx:Integer;item:PPyObject):integer; cdecl;

-{-} PyList_SetSlice:function (ob:PPyObject;i1,i2:integer;ob2:PPyObject):integer; cdecl;

-{+} PyList_Size:function (ob:PPyObject):integer; cdecl;

-{-} PyList_Sort:function (ob:PPyObject):integer; cdecl;

-{-} PyLong_AsDouble:function (ob:PPyObject):DOUBLE; cdecl;

-{+} PyLong_AsLong:function (ob:PPyObject):LONGINT; cdecl;

-{+} PyLong_FromDouble:function (db:double):PPyObject; cdecl;

-{+} PyLong_FromLong:function (l:longint):PPyObject; cdecl;

-{-} PyLong_FromString:function (pc:PChar;var ppc:PChar;i:integer):PPyObject; cdecl;

-{-} PyLong_FromUnsignedLong:function(val:cardinal): PPyObject; cdecl;

-{-} PyLong_AsUnsignedLong:function(ob:PPyObject): Cardinal; cdecl;

-{-} PyLong_FromUnicode:function(ob:PPyObject; a, b: integer): PPyObject; cdecl;

-{-} PyLong_FromLongLong:function(val:Int64): PPyObject; cdecl;

-{-} PyLong_AsLongLong:function(ob:PPyObject): Int64; cdecl;

-{-} PyMapping_Check:function (ob:PPyObject):integer; cdecl;

-{-} PyMapping_GetItemString:function (ob:PPyObject;key:PChar):PPyObject; cdecl;

-{-} PyMapping_HasKey:function (ob,key:PPyObject):integer; cdecl;

-{-} PyMapping_HasKeyString:function (ob:PPyObject;key:PChar):integer; cdecl;

-{-} PyMapping_Length:function (ob:PPyObject):integer; cdecl;

-{-} PyMapping_SetItemString:function (ob:PPyObject; key:PChar; value:PPyObject):integer; cdecl;

-{-} PyMethod_Class:function (ob:PPyObject):PPyObject; cdecl;

-{-} PyMethod_Function:function (ob:PPyObject):PPyObject; cdecl;

-{-} PyMethod_New:function (ob1,ob2,ob3:PPyObject):PPyObject; cdecl;

-{-} PyMethod_Self:function (ob:PPyObject):PPyObject; cdecl;

-{-} PyModule_GetName:function (ob:PPyObject):PChar; cdecl;

-{-} PyModule_New:function (key:PChar):PPyObject; cdecl;

-{-} PyNumber_Absolute:function (ob:PPyObject):PPyObject; cdecl;

-{-} PyNumber_Add:function (ob1,ob2:PPyObject):PPyObject; cdecl;

-{-} PyNumber_And:function (ob1,ob2:PPyObject):PPyObject; cdecl;

-{-} PyNumber_Check:function (ob:PPyObject):integer; cdecl;

-{-} PyNumber_Coerce:function (var ob1,ob2:PPyObject):integer; cdecl;

-{-} PyNumber_Divide:function (ob1,ob2:PPyObject):PPyObject; cdecl;

-{-} PyNumber_FloorDivide:function (ob1,ob2:PPyObject):PPyObject; cdecl;

-{-} PyNumber_TrueDivide:function (ob1,ob2:PPyObject):PPyObject; cdecl;

-{-} PyNumber_Divmod:function (ob1,ob2:PPyObject):PPyObject; cdecl;

-{-} PyNumber_Float:function (ob:PPyObject):PPyObject; cdecl;

-{-} PyNumber_Int:function (ob:PPyObject):PPyObject; cdecl;

-{-} PyNumber_Invert:function (ob:PPyObject):PPyObject; cdecl;

-{-} PyNumber_Long:function (ob:PPyObject):PPyObject; cdecl;

-{-} PyNumber_Lshift:function (ob1,ob2:PPyObject):PPyObject; cdecl;

-{-} PyNumber_Multiply:function (ob1,ob2:PPyObject):PPyObject; cdecl;

-{-} PyNumber_Negative:function (ob:PPyObject):PPyObject; cdecl;

-{-} PyNumber_Or:function (ob1,ob2:PPyObject):PPyObject; cdecl;

-{-} PyNumber_Positive:function (ob:PPyObject):PPyObject; cdecl;

-{-} PyNumber_Power:function (ob1,ob2,ob3:PPyObject):PPyObject; cdecl;

-{-} PyNumber_Remainder:function (ob1,ob2:PPyObject):PPyObject; cdecl;

-{-} PyNumber_Rshift:function (ob1,ob2:PPyObject):PPyObject; cdecl;

-{-} PyNumber_Subtract:function (ob1,ob2:PPyObject):PPyObject; cdecl;

-{-} PyNumber_Xor:function (ob1,ob2:PPyObject):PPyObject; cdecl;

-{-} PyOS_InitInterrupts:procedure; cdecl;

-{-} PyOS_InterruptOccurred:function:integer; cdecl;

-{-} PyObject_CallObject:function (ob,args:PPyObject):PPyObject; cdecl;

-{-} PyObject_Compare:function (ob1,ob2:PPyObject):integer; cdecl;

-{-} PyObject_GetAttr:function (ob1,ob2:PPyObject):PPyObject; cdecl;

-{+} PyObject_GetAttrString:function (ob:PPyObject;c:PChar):PPyObject; cdecl;

-{-} PyObject_GetItem:function (ob,key:PPyObject):PPyObject; cdecl;

-{-} PyObject_DelItem:function (ob,key:PPyObject):PPyObject; cdecl;

-{-} PyObject_HasAttrString:function (ob:PPyObject;key:PChar):integer; cdecl;

-{-} PyObject_Hash:function (ob:PPyObject):LONGINT; cdecl;

-{-} PyObject_IsTrue:function (ob:PPyObject):integer; cdecl;

-{-} PyObject_Length:function (ob:PPyObject):integer; cdecl;

-{-} PyObject_Repr:function (ob:PPyObject):PPyObject; cdecl;

-{-} PyObject_SetAttr:function (ob1,ob2,ob3:PPyObject):integer; cdecl;

-{-} PyObject_SetAttrString:function (ob:PPyObject;key:Pchar;value:PPyObject):integer; cdecl;

-{-} PyObject_SetItem:function (ob1,ob2,ob3:PPyObject):integer; cdecl;

-{-} PyObject_Init:function (ob:PPyObject; t:PPyTypeObject):PPyObject; cdecl;

-{-} PyObject_InitVar:function (ob:PPyObject; t:PPyTypeObject; size:integer):PPyObject; cdecl;

-{-} PyObject_New:function (t:PPyTypeObject):PPyObject; cdecl;

-{-} PyObject_NewVar:function (t:PPyTypeObject; size:integer):PPyObject; cdecl;

-    PyObject_Free:procedure (ob:PPyObject); cdecl;

-{-} PyObject_IsInstance:function (inst, cls:PPyObject):integer; cdecl;

-{-} PyObject_IsSubclass:function (derived, cls:PPyObject):integer; cdecl;

-    PyObject_GenericGetAttr:function (obj, name: PPyObject): PPyObject; cdecl;

-    PyObject_GenericSetAttr:function (obj, name, value: PPyObject): Integer; cdecl;

-{-} PyObject_GC_Malloc:function (size:integer):PPyObject; cdecl;

-{-} PyObject_GC_New:function (t:PPyTypeObject):PPyObject; cdecl;

-{-} PyObject_GC_NewVar:function (t:PPyTypeObject; size:integer):PPyObject; cdecl;

-{-} PyObject_GC_Resize:function (t:PPyObject; newsize:integer):PPyObject; cdecl;

-{-} PyObject_GC_Del:procedure (ob:PPyObject); cdecl;

-{-} PyObject_GC_Track:procedure (ob:PPyObject); cdecl;

-{-} PyObject_GC_UnTrack:procedure (ob:PPyObject); cdecl;

-{-} PyRange_New:function (l1,l2,l3:longint;i:integer):PPyObject; cdecl;

-{-} PySequence_Check:function (ob:PPyObject):integer; cdecl;

-{-} PySequence_Concat:function (ob1,ob2:PPyObject):PPyObject; cdecl;

-{-} PySequence_Count:function (ob1,ob2:PPyObject):integer; cdecl;

-{-} PySequence_GetItem:function (ob:PPyObject;i:integer):PPyObject; cdecl;

-{-} PySequence_GetSlice:function (ob:PPyObject;i1,i2:integer):PPyObject; cdecl;

-{-} PySequence_In:function (ob1,ob2:PPyObject):integer; cdecl;

-{-} PySequence_Index:function (ob1,ob2:PPyObject):integer; cdecl;

-{-} PySequence_Length:function (ob:PPyObject):integer; cdecl;

-{-} PySequence_Repeat:function (ob:PPyObject;count:integer):PPyObject; cdecl;

-{-} PySequence_SetItem:function (ob:PPyObject;i:integer;value:PPyObject):integer; cdecl;

-{-} PySequence_SetSlice:function (ob:PPyObject;i1,i2:integer;value:PPyObject):integer; cdecl;

-{-} PySequence_DelSlice:function (ob:PPyObject;i1,i2:integer):integer; cdecl;

-{-} PySequence_Tuple:function (ob:PPyObject):PPyObject; cdecl;

-{-} PySequence_Contains:function (ob, value:PPyObject):integer; cdecl;

-{-} PySlice_GetIndices:function (ob:PPySliceObject;length:integer;var start,stop,step:integer):integer; cdecl;

-{-} PySlice_GetIndicesEx:function (ob:PPySliceObject;length:integer;var start,stop,step,slicelength:integer):integer; cdecl;

-{-} PySlice_New:function (start,stop,step:PPyObject):PPyObject; cdecl;

-{-} PyString_Concat:procedure(var ob1:PPyObject;ob2:PPyObject); cdecl;

-{-} PyString_ConcatAndDel:procedure(var ob1:PPyObject;ob2:PPyObject); cdecl;

-{-} PyString_Format:function (ob1,ob2:PPyObject):PPyObject; cdecl;

-{-} PyString_FromStringAndSize:function (s:PChar;i:integer):PPyObject; cdecl;

-{-} PyString_Size:function (ob:PPyObject):integer; cdecl;

-{-} PyString_DecodeEscape:function(s:PChar; len:integer; errors:PChar; unicode:integer; recode_encoding:PChar):PPyObject; cdecl;

-{-} PyString_Repr:function(ob:PPyObject; smartquotes:integer):PPyObject; cdecl;

-{+} PySys_GetObject:function (s:PChar):PPyObject; cdecl;

-{-} //PySys_Init:procedure; cdecl;

-{-} PySys_SetObject:function (s:PChar;ob:PPyObject):integer; cdecl;

-{-} PySys_SetPath:procedure(path:PChar); cdecl;

-{-} //PyTraceBack_Fetch:function:PPyObject; cdecl;

-{-} PyTraceBack_Here:function (p:pointer):integer; cdecl;

-{-} PyTraceBack_Print:function (ob1,ob2:PPyObject):integer; cdecl;

-{-} //PyTraceBack_Store:function (ob:PPyObject):integer; cdecl;

-{+} PyTuple_GetItem:function (ob:PPyObject;i:integer):PPyObject; cdecl;

-{-} PyTuple_GetSlice:function (ob:PPyObject;i1,i2:integer):PPyObject; cdecl;

-{+} PyTuple_New:function (size:Integer):PPyObject; cdecl;

-{+} PyTuple_SetItem:function (ob:PPyObject;key:integer;value:PPyObject):integer; cdecl;

-{+} PyTuple_Size:function (ob:PPyObject):integer; cdecl;

-{+} PyType_IsSubtype:function (a, b: PPyTypeObject):integer; cdecl;

-    PyType_GenericAlloc:function(atype: PPyTypeObject; nitems:Integer): PPyObject; cdecl;

-    PyType_GenericNew:function(atype: PPyTypeObject; args, kwds: PPyObject): PPyObject; cdecl;

-    PyType_Ready:function(atype: PPyTypeObject): integer; cdecl;

-{+} PyUnicode_FromWideChar:function (const w:PWideChar; size:integer):PPyObject; cdecl;

-{+} PyUnicode_AsWideChar:function (unicode: PPyObject; w:PWideChar; size:integer):integer; cdecl;

-{-} PyUnicode_FromOrdinal:function (ordinal:integer):PPyObject; cdecl;

-    PyWeakref_GetObject: function (ref: PPyObject): PPyObject; cdecl;

-    PyWeakref_NewProxy: function (ob, callback: PPyObject): PPyObject; cdecl;

-    PyWeakref_NewRef: function (ob, callback: PPyObject): PPyObject; cdecl;

-    PyWrapper_New: function (ob1, ob2: PPyObject): PPyObject; cdecl;

-    PyBool_FromLong: function (ok: Integer): PPyObject; cdecl;

-{-} Py_AtExit:function (proc: procedure):integer; cdecl;

-{-} //Py_Cleanup:procedure; cdecl;

-{-} Py_CompileString:function (s1,s2:PChar;i:integer):PPyObject; cdecl;

-{-} Py_FatalError:procedure(s:PChar); cdecl;

-{-} Py_FindMethod:function (md:PPyMethodDef;ob:PPyObject;key:PChar):PPyObject; cdecl;

-{-} Py_FindMethodInChain:function (mc:PPyMethodChain;ob:PPyObject;key:PChar):PPyObject; cdecl;

-{-} Py_FlushLine:procedure; cdecl;

-{+} Py_Finalize: procedure; cdecl;

-{-} PyErr_ExceptionMatches: function (exc: PPyObject): Integer; cdecl;

-{-} PyErr_GivenExceptionMatches: function (raised_exc, exc: PPyObject): Integer; cdecl;

-{-} PyEval_EvalCode: function (co: PPyCodeObject; globals, locals: PPyObject): PPyObject; cdecl;

-{+} Py_GetVersion: function: PChar; cdecl;

-{+} Py_GetCopyright: function: PChar; cdecl;

-{+} Py_GetExecPrefix: function: PChar; cdecl;

-{+} Py_GetPath: function: PChar; cdecl;

-{+} Py_GetPrefix: function: PChar; cdecl;

-{+} Py_GetProgramName: function: PChar; cdecl;

-

-{-} PyParser_SimpleParseString: function (str: PChar; start: Integer): PNode; cdecl;

-{-} PyNode_Free: procedure(n: PNode); cdecl;

-{-} PyErr_NewException: function (name: PChar; base, dict: PPyObject): PPyObject; cdecl;

-{-} Py_Malloc: function (size: Integer): Pointer;

-{-} PyMem_Malloc: function (size: Integer): Pointer;

-{-} PyObject_CallMethod: function (obj: PPyObject; method, format: PChar): PPyObject; cdecl;

-

-{New exported Objects in Python 1.5}

-    Py_SetProgramName: procedure(name: PChar); cdecl;

-    Py_IsInitialized: function: integer; cdecl;

-    Py_GetProgramFullPath: function: PChar; cdecl;

-    Py_NewInterpreter: function: PPyThreadState; cdecl;

-    Py_EndInterpreter: procedure(tstate: PPyThreadState); cdecl;

-    PyEval_AcquireLock: procedure; cdecl;

-    PyEval_ReleaseLock: procedure; cdecl;

-    PyEval_AcquireThread: procedure(tstate: PPyThreadState); cdecl;

-    PyEval_ReleaseThread: procedure(tstate: PPyThreadState); cdecl;

-    PyInterpreterState_New: function: PPyInterpreterState; cdecl;

-    PyInterpreterState_Clear: procedure(interp: PPyInterpreterState); cdecl;

-    PyInterpreterState_Delete: procedure(interp: PPyInterpreterState); cdecl;

-    PyThreadState_New: function (interp: PPyInterpreterState): PPyThreadState; cdecl;

-    PyThreadState_Clear: procedure(tstate: PPyThreadState); cdecl;

-    PyThreadState_Delete: procedure(tstate: PPyThreadState); cdecl;

-    PyThreadState_Get: function: PPyThreadState; cdecl;

-    PyThreadState_Swap: function (tstate: PPyThreadState): PPyThreadState; cdecl;

-

-{Further exported Objects, may be implemented later}

-{

-    PyCode_New: Pointer;

-    PyErr_SetInterrupt: Pointer;

-    PyFile_AsFile: Pointer;

-    PyFile_FromFile: Pointer;

-    PyFloat_AsString: Pointer;

-    PyFrame_BlockPop: Pointer;

-    PyFrame_BlockSetup: Pointer;

-    PyFrame_ExtendStack: Pointer;

-    PyFrame_FastToLocals: Pointer;

-    PyFrame_LocalsToFast: Pointer;

-    PyFrame_New: Pointer;

-    PyGrammar_AddAccelerators: Pointer;

-    PyGrammar_FindDFA: Pointer;

-    PyGrammar_LabelRepr: Pointer;

-    PyInstance_DoBinOp: Pointer;

-    PyInt_GetMax: Pointer;

-    PyMarshal_Init: Pointer;

-    PyMarshal_ReadLongFromFile: Pointer;

-    PyMarshal_ReadObjectFromFile: Pointer;

-    PyMarshal_ReadObjectFromString: Pointer;

-    PyMarshal_WriteLongToFile: Pointer;

-    PyMarshal_WriteObjectToFile: Pointer;

-    PyMember_Get: Pointer;

-    PyMember_Set: Pointer;

-    PyNode_AddChild: Pointer;

-    PyNode_Compile: Pointer;

-    PyNode_New: Pointer;

-    PyOS_GetLastModificationTime: Pointer;

-    PyOS_Readline: Pointer;

-    PyOS_strtol: Pointer;

-    PyOS_strtoul: Pointer;

-    PyObject_CallFunction: Pointer;

-    PyObject_CallMethod: Pointer;

-    PyObject_Print: Pointer;

-    PyParser_AddToken: Pointer;

-    PyParser_Delete: Pointer;

-    PyParser_New: Pointer;

-    PyParser_ParseFile: Pointer;

-    PyParser_ParseString: Pointer;

-    PyParser_SimpleParseFile: Pointer;

-    PyRun_AnyFile: Pointer;

-    PyRun_File: Pointer;

-    PyRun_InteractiveLoop: Pointer;

-    PyRun_InteractiveOne: Pointer;

-    PyRun_SimpleFile: Pointer;

-    PySys_GetFile: Pointer;

-    PyToken_OneChar: Pointer;

-    PyToken_TwoChars: Pointer;

-    PyTokenizer_Free: Pointer;

-    PyTokenizer_FromFile: Pointer;

-    PyTokenizer_FromString: Pointer;

-    PyTokenizer_Get: Pointer;

-    Py_Main: Pointer;

-    _PyObject_NewVar: Pointer;

-    _PyParser_Grammar: Pointer;

-    _PyParser_TokenNames: Pointer;

-    _PyThread_Started: Pointer;

-    _Py_c_diff: Pointer;

-    _Py_c_neg: Pointer;

-    _Py_c_pow: Pointer;

-    _Py_c_prod: Pointer;

-    _Py_c_quot: Pointer;

-    _Py_c_sum: Pointer;

-}

-// functions redefined in Delphi

-procedure Py_INCREF(op: PPyObject);

-procedure Py_DECREF(op: PPyObject);

-procedure Py_XINCREF(op: PPyObject);

-procedure Py_XDECREF(op: PPyObject);

-

-// This function handles all cardinals, pointer types (with no adjustment of pointers!)

-// (Extended) floats, which are handled as Python doubles and currencies, handled

-// as (normalized) Python doubles.

-function PyImport_ExecCodeModule(const name: String; codeobject: PPyObject): PPyObject;

-function PyString_Check(obj: PPyObject): Boolean;

-function PyString_CheckExact(obj: PPyObject): Boolean;

-function PyFloat_Check(obj: PPyObject): Boolean;

-function PyFloat_CheckExact(obj: PPyObject): Boolean;

-function PyInt_Check(obj: PPyObject): Boolean;

-function PyInt_CheckExact(obj: PPyObject): Boolean;

-function PyLong_Check(obj: PPyObject): Boolean;

-function PyLong_CheckExact(obj: PPyObject): Boolean;

-function PyTuple_Check(obj: PPyObject): Boolean;

-function PyTuple_CheckExact(obj: PPyObject): Boolean;

-function PyInstance_Check(obj: PPyObject): Boolean;

-function PyClass_Check(obj: PPyObject): Boolean;

-function PyMethod_Check(obj: PPyObject): Boolean;

-function PyList_Check(obj: PPyObject): Boolean;

-function PyList_CheckExact(obj: PPyObject): Boolean;

-function PyDict_Check(obj: PPyObject): Boolean;

-function PyDict_CheckExact(obj: PPyObject): Boolean;

-function PyModule_Check(obj: PPyObject): Boolean;

-function PyModule_CheckExact(obj: PPyObject): Boolean;

-function PySlice_Check(obj: PPyObject): Boolean;

-function PyFunction_Check(obj: PPyObject): Boolean;

-function PyUnicode_Check(obj: PPyObject): Boolean;

-function PyUnicode_CheckExact(obj: PPyObject): Boolean;

-function PyType_IS_GC(t: PPyTypeObject): Boolean;

-function PyObject_IS_GC(obj: PPyObject): Boolean;

-function PyWeakref_Check(obj: PPyObject): Boolean;

-function PyWeakref_CheckRef(obj: PPyObject): Boolean;

-function PyWeakref_CheckProxy(obj: PPyObject): Boolean;

-function PyBool_Check(obj: PPyObject): Boolean;

-function PyBaseString_Check(obj: PPyObject): Boolean;

-function PyEnum_Check(obj: PPyObject): Boolean;

-function PyObject_TypeCheck(obj:PPyObject; t:PPyTypeObject): Boolean;

-function Py_InitModule(const name: PChar; md: PPyMethodDef): PPyObject;

-

-function  PyType_HasFeature(AType: PPyTypeObject; AFlag: Integer): Boolean;

-

-implementation

-

-procedure Py_INCREF(op: PPyObject);

-begin

-  Inc(op.ob_refcnt);

-end;

-

-procedure Py_DECREF(op: PPyObject);

-begin

-  Dec(op.ob_refcnt);

-  if op.ob_refcnt = 0 then begin

-    op.ob_type.tp_dealloc(op);

-  end;

-end;

-

-procedure Py_XINCREF(op: PPyObject);

-begin

-  if op <> nil then Py_INCREF(op);

-end;

-

-procedure Py_XDECREF(op: PPyObject);

-begin

-  if op <> nil then Py_DECREF(op);

-end;

-

-function PyImport_ExecCodeModule(const name: String; 

-             codeobject: PPyObject): PPyObject;

-var

-  m, d, v, modules: PPyObject;

-begin

-  m:= PyImport_AddModule(PChar(name));

-  if m = nil then

-    begin

-      Result:= nil;

-      Exit;

-    end;

-  d:= PyModule_GetDict(m);

-  if PyDict_GetItemString(d, '__builtins__') = nil then

-    begin

-      if PyDict_SetItemString(d, '__builtins__', PyEval_GetBuiltins) <> 0 then

-        begin

-          Result:= nil;

-          Exit;

-        end;

-    end;

-  // Remember the fielname as the __file__ attribute

-  if PyDict_SetItemString(d, '__file__', PPyCodeObject(codeobject).co_filename) <> 0 then

-    PyErr_Clear(); // Not important enough to report

-  v:= PyEval_EvalCode(PPyCodeObject(codeobject), d, d); // XXX owner ?

-  if v = nil then

-    begin

-      Result:= nil;

-      Exit;

-    end;

-  Py_XDECREF(v);

-  modules:= PyImport_GetModuleDict();

-  if PyDict_GetItemString(modules, PChar(name)) = nil then

-    begin

-      PyErr_SetString(PyExc_ImportError^, PChar(Format('Loaded module %.200s not found in sys.modules', [name])));

-      Result:= nil;

-      Exit;

-    end;

-  Py_XINCREF(m);

-  Result:= m;

-end;

-

-function PyString_Check(obj: PPyObject): Boolean;

-begin

-  Result:= PyObject_TypeCheck(obj, PyString_Type);

-end;

-

-function PyString_CheckExact(obj: PPyObject): Boolean;

-begin

-  Result:= (obj <> nil) and (obj.ob_type = PPyTypeObject(PyString_Type));

-end;

-

-function PyFloat_Check(obj: PPyObject): Boolean;

-begin

-  Result:= PyObject_TypeCheck(obj, PyFloat_Type);

-end;

-

-function PyFloat_CheckExact(obj: PPyObject): Boolean;

-begin

-  Result:= (obj <> nil) and (obj.ob_type = PPyTypeObject(PyFloat_Type));

-end;

-

-function PyInt_Check(obj: PPyObject): Boolean;

-begin

-  Result:= PyObject_TypeCheck(obj, PyInt_Type);

-end;

-

-function PyInt_CheckExact(obj: PPyObject): Boolean;

-begin

-  Result:= (obj <> nil) and (obj.ob_type = PPyTypeObject(PyInt_Type));

-end;

-

-function PyLong_Check(obj: PPyObject): Boolean;

-begin

-  Result:= PyObject_TypeCheck(obj, PyLong_Type);

-end;

-

-function PyLong_CheckExact(obj: PPyObject): Boolean;

-begin

-  Result:= (obj <> nil) and (obj.ob_type = PPyTypeObject(PyLong_Type));

-end;

-

-function PyTuple_Check(obj: PPyObject): Boolean;

-begin

-  Result:= PyObject_TypeCheck(obj, PyTuple_Type);

-end;

-

-function PyTuple_CheckExact(obj: PPyObject): Boolean;

-begin

-  Result:= ( obj<> nil) and (obj^.ob_type = PPyTypeObject(PyTuple_Type));

-end;

-

-function PyInstance_Check(obj: PPyObject): Boolean;

-begin

-  Result:= (obj <> nil) and (obj^.ob_type = PPyTypeObject(PyInstance_Type));

-end;

-

-function PyClass_Check(obj: PPyObject): Boolean;

-begin

-  Result:= ( obj<> nil) and (obj^.ob_type = PPyTypeObject(PyClass_Type));

-end;

-

-function PyMethod_Check(obj: PPyObject): Boolean;

-begin

-  Result:= (obj <> nil) and (obj^.ob_type = PPyTypeObject(PyMethod_Type));

-end;

-

-function PyList_Check(obj: PPyObject): Boolean;

-begin

-  Result:= PyObject_TypeCheck(obj, PyList_Type);

-end;

-

-function PyList_CheckExact(obj: PPyObject): Boolean;

-begin

-  Result:= (obj<>nil) and (obj^.ob_type = PPyTypeObject(PyList_Type));

-end;

-

-function PyDict_Check(obj: PPyObject): Boolean;

-begin

-  Result:= PyObject_TypeCheck(obj, PyDict_Type);

-end;

-

-function PyDict_CheckExact(obj: PPyObject): Boolean;

-begin

-  Result:= (obj<>nil) and (obj^.ob_type = PPyTypeObject(PyDict_Type));

-end;

-

-function PyModule_Check(obj: PPyObject): Boolean;

-begin

-  Result:= PyObject_TypeCheck(obj, PyModule_Type);

-end;

-

-function PyModule_CheckExact(obj: PPyObject): Boolean;

-begin

-  Result:= (obj<>nil) and (obj^.ob_type = PPyTypeObject(PyModule_Type));

-end;

-

-function PySlice_Check(obj: PPyObject): Boolean;

-begin

-  Result:= (obj<>nil) and (obj^.ob_type = PPyTypeObject(PySlice_Type));

-end;

-

-function PyFunction_Check(obj: PPyObject): Boolean;

-begin

-  Result:= (obj<>nil) and

-    ((obj.ob_type = PPyTypeObject(PyCFunction_Type)) or

-     (obj.ob_type = PPyTypeObject(PyFunction_Type)));

-end;

-

-function PyUnicode_Check(obj: PPyObject): Boolean;

-begin

-  Result:= PyObject_TypeCheck(obj, PyUnicode_Type);

-end;

-

-function PyUnicode_CheckExact(obj: PPyObject): Boolean;

-begin

-  Result:= (obj<>nil) and (obj^.ob_type = PPyTypeObject(PyUnicode_Type));

-end;

-

-function PyType_IS_GC(t: PPyTypeObject): Boolean;

-begin

-  Result:= PyType_HasFeature(t, Py_TPFLAGS_HAVE_GC);

-end;

-

-function PyObject_IS_GC(obj: PPyObject): Boolean;

-begin

-  Result:= PyType_IS_GC(obj.ob_type) and

-            ((obj.ob_type.tp_is_gc = nil) or (obj.ob_type.tp_is_gc(obj) = 1));

-end;

-

-function PyWeakref_Check(obj: PPyObject): Boolean;

-begin

-  Result:= (obj<>nil) and (PyWeakref_CheckRef(obj) or PyWeakref_CheckProxy(obj));

-end;

-

-function PyWeakref_CheckRef(obj: PPyObject): Boolean;

-begin

-  Result:= (obj<>nil) and (obj.ob_type = PPyTypeObject(PyWeakref_RefType));

-end;

-

-function PyWeakref_CheckProxy(obj: PPyObject): Boolean;

-begin

-  Result:= (obj<>nil) and

-            ((obj.ob_type = PPyTypeObject(PyWeakref_ProxyType)) or

-              (obj.ob_type = PPyTypeObject(PyWeakref_CallableProxyType)));

-end;

-

-function PyBool_Check(obj: PPyObject): Boolean;

-begin

-  Result:= (obj<>nil) and (obj.ob_type = PPyTypeObject(PyBool_Type));

-end;

-

-function PyBaseString_Check(obj: PPyObject): Boolean;

-begin

-  Result:= PyObject_TypeCheck(obj, PyBaseString_Type);

-end;

-

-function PyEnum_Check(obj: PPyObject): Boolean;

-begin

-  Result:= (obj<>nil) and (obj.ob_type = PPyTypeObject(PyEnum_Type));

-end;

-

-function PyObject_TypeCheck(obj: PPyObject; t: PPyTypeObject): Boolean;

-begin

-  Result:= (obj<>nil) and (obj.ob_type = t);

-  if not Result and (obj<>nil) and (t<>nil) then

-    Result:= PyType_IsSubtype(obj.ob_type, t) = 1;

-end;

-

-function Py_InitModule(const name: PChar; md: PPyMethodDef): PPyObject;

-begin

-  result:= Py_InitModule4(name, md, nil, nil, 1012);

-end;

-

-function PyType_HasFeature(AType: PPyTypeObject; AFlag: Integer): Boolean;

-begin

-  //(((t)->tp_flags & (f)) != 0)

-  Result:= (AType.tp_flags and AFlag) <> 0;

-end;

-

-procedure init(lib: TLibHandle);

-begin

-  Py_DebugFlag               := getProcAddr(lib, 'Py_DebugFlag');

-  Py_VerboseFlag             := getProcAddr(lib, 'Py_VerboseFlag');

-  Py_InteractiveFlag         := getProcAddr(lib, 'Py_InteractiveFlag');

-  Py_OptimizeFlag            := getProcAddr(lib, 'Py_OptimizeFlag');

-  Py_NoSiteFlag              := getProcAddr(lib, 'Py_NoSiteFlag');

-  Py_UseClassExceptionsFlag  := getProcAddr(lib, 'Py_UseClassExceptionsFlag');

-  Py_FrozenFlag              := getProcAddr(lib, 'Py_FrozenFlag');

-  Py_TabcheckFlag            := getProcAddr(lib, 'Py_TabcheckFlag');

-  Py_UnicodeFlag             := getProcAddr(lib, 'Py_UnicodeFlag');

-

-  Py_IgnoreEnvironmentFlag   := getProcAddr(lib, 'Py_IgnoreEnvironmentFlag');

-  Py_DivisionWarningFlag     := getProcAddr(lib, 'Py_DivisionWarningFlag');

-  Py_None                    := getProcAddr(lib, '_Py_NoneStruct');

-  Py_Ellipsis                := getProcAddr(lib, '_Py_EllipsisObject');

-  Py_False                   := getProcAddr(lib, '_Py_ZeroStruct');

-  Py_True                    := getProcAddr(lib, '_Py_TrueStruct');

-  Py_NotImplemented          := getProcAddr(lib, '_Py_NotImplementedStruct');

-

-  PyImport_FrozenModules     := getProcAddr(lib, 'PyImport_FrozenModules');

-

-  PyExc_AttributeError       := getProcAddr(lib, 'PyExc_AttributeError');

-  PyExc_EOFError             := getProcAddr(lib, 'PyExc_EOFError');

-  PyExc_IOError              := getProcAddr(lib, 'PyExc_IOError');

-  PyExc_ImportError          := getProcAddr(lib, 'PyExc_ImportError');

-  PyExc_IndexError           := getProcAddr(lib, 'PyExc_IndexError');

-  PyExc_KeyError             := getProcAddr(lib, 'PyExc_KeyError');

-  PyExc_KeyboardInterrupt    := getProcAddr(lib, 'PyExc_KeyboardInterrupt');

-  PyExc_MemoryError          := getProcAddr(lib, 'PyExc_MemoryError');

-  PyExc_NameError            := getProcAddr(lib, 'PyExc_NameError');

-  PyExc_OverflowError        := getProcAddr(lib, 'PyExc_OverflowError');

-  PyExc_RuntimeError         := getProcAddr(lib, 'PyExc_RuntimeError');

-  PyExc_SyntaxError          := getProcAddr(lib, 'PyExc_SyntaxError');

-  PyExc_SystemError          := getProcAddr(lib, 'PyExc_SystemError');

-  PyExc_SystemExit           := getProcAddr(lib, 'PyExc_SystemExit');

-  PyExc_TypeError            := getProcAddr(lib, 'PyExc_TypeError');

-  PyExc_ValueError           := getProcAddr(lib, 'PyExc_ValueError');

-  PyExc_ZeroDivisionError    := getProcAddr(lib, 'PyExc_ZeroDivisionError');

-  PyExc_ArithmeticError      := getProcAddr(lib, 'PyExc_ArithmeticError');

-  PyExc_Exception            := getProcAddr(lib, 'PyExc_Exception');

-  PyExc_FloatingPointError   := getProcAddr(lib, 'PyExc_FloatingPointError');

-  PyExc_LookupError          := getProcAddr(lib, 'PyExc_LookupError');

-  PyExc_StandardError        := getProcAddr(lib, 'PyExc_StandardError');

-

-  PyExc_AssertionError       := getProcAddr(lib, 'PyExc_AssertionError');

-  PyExc_EnvironmentError     := getProcAddr(lib, 'PyExc_EnvironmentError');

-  PyExc_IndentationError     := getProcAddr(lib, 'PyExc_IndentationError');

-  PyExc_MemoryErrorInst      := getProcAddr(lib, 'PyExc_MemoryErrorInst');

-  PyExc_NotImplementedError  := getProcAddr(lib, 'PyExc_NotImplementedError');

-  PyExc_OSError              := getProcAddr(lib, 'PyExc_OSError');

-  PyExc_TabError             := getProcAddr(lib, 'PyExc_TabError');

-  PyExc_UnboundLocalError    := getProcAddr(lib, 'PyExc_UnboundLocalError');

-  PyExc_UnicodeError         := getProcAddr(lib, 'PyExc_UnicodeError');

-

-  PyExc_Warning              := getProcAddr(lib, 'PyExc_Warning');

-  PyExc_DeprecationWarning   := getProcAddr(lib, 'PyExc_DeprecationWarning');

-  PyExc_RuntimeWarning       := getProcAddr(lib, 'PyExc_RuntimeWarning');

-  PyExc_SyntaxWarning        := getProcAddr(lib, 'PyExc_SyntaxWarning');

-  PyExc_UserWarning          := getProcAddr(lib, 'PyExc_UserWarning');

-

-  PyExc_OverflowWarning      := getProcAddr(lib, 'PyExc_OverflowWarning');

-  PyExc_ReferenceError       := getProcAddr(lib, 'PyExc_ReferenceError');

-  PyExc_StopIteration        := getProcAddr(lib, 'PyExc_StopIteration');

-

-  PyExc_FutureWarning        := getProcAddr(lib, 'PyExc_FutureWarning');

-  PyExc_PendingDeprecationWarning:= getProcAddr(lib, 'PyExc_PendingDeprecationWarning');

-  PyExc_UnicodeDecodeError   := getProcAddr(lib, 'PyExc_UnicodeDecodeError');

-  PyExc_UnicodeEncodeError   := getProcAddr(lib, 'PyExc_UnicodeEncodeError');

-  PyExc_UnicodeTranslateError:= getProcAddr(lib, 'PyExc_UnicodeTranslateError');

-

-  PyType_Type                := getProcAddr(lib, 'PyType_Type');

-  PyCFunction_Type           := getProcAddr(lib, 'PyCFunction_Type');

-  PyCObject_Type             := getProcAddr(lib, 'PyCObject_Type');

-  PyClass_Type               := getProcAddr(lib, 'PyClass_Type');

-  PyCode_Type                := getProcAddr(lib, 'PyCode_Type');

-  PyComplex_Type             := getProcAddr(lib, 'PyComplex_Type');

-  PyDict_Type                := getProcAddr(lib, 'PyDict_Type');

-  PyFile_Type                := getProcAddr(lib, 'PyFile_Type');

-  PyFloat_Type               := getProcAddr(lib, 'PyFloat_Type');

-  PyFrame_Type               := getProcAddr(lib, 'PyFrame_Type');

-  PyFunction_Type            := getProcAddr(lib, 'PyFunction_Type');

-  PyInstance_Type            := getProcAddr(lib, 'PyInstance_Type');

-  PyInt_Type                 := getProcAddr(lib, 'PyInt_Type');

-  PyList_Type                := getProcAddr(lib, 'PyList_Type');

-  PyLong_Type                := getProcAddr(lib, 'PyLong_Type');

-  PyMethod_Type              := getProcAddr(lib, 'PyMethod_Type');

-  PyModule_Type              := getProcAddr(lib, 'PyModule_Type');

-  PyObject_Type              := getProcAddr(lib, 'PyObject_Type');

-  PyRange_Type               := getProcAddr(lib, 'PyRange_Type');

-  PySlice_Type               := getProcAddr(lib, 'PySlice_Type');

-  PyString_Type              := getProcAddr(lib, 'PyString_Type');

-  PyTuple_Type               := getProcAddr(lib, 'PyTuple_Type');

-

-  PyUnicode_Type             := getProcAddr(lib, 'PyUnicode_Type');

-

-  PyBaseObject_Type          := getProcAddr(lib, 'PyBaseObject_Type');

-  PyBuffer_Type              := getProcAddr(lib, 'PyBuffer_Type');

-  PyCallIter_Type            := getProcAddr(lib, 'PyCallIter_Type');

-  PyCell_Type                := getProcAddr(lib, 'PyCell_Type');

-  PyClassMethod_Type         := getProcAddr(lib, 'PyClassMethod_Type');

-  PyProperty_Type            := getProcAddr(lib, 'PyProperty_Type');

-  PySeqIter_Type             := getProcAddr(lib, 'PySeqIter_Type');

-  PyStaticMethod_Type        := getProcAddr(lib, 'PyStaticMethod_Type');

-  PySuper_Type               := getProcAddr(lib, 'PySuper_Type');

-  PySymtableEntry_Type       := getProcAddr(lib, 'PySymtableEntry_Type');

-  PyTraceBack_Type           := getProcAddr(lib, 'PyTraceBack_Type');

-  PyWrapperDescr_Type        := getProcAddr(lib, 'PyWrapperDescr_Type');

-

-  PyBaseString_Type          := getProcAddr(lib, 'PyBaseString_Type');

-  PyBool_Type                := getProcAddr(lib, 'PyBool_Type');

-  PyEnum_Type                := getProcAddr(lib, 'PyEnum_Type');

-

-

-  //PyArg_GetObject           := getProcAddr(lib, 'PyArg_GetObject');

-  //PyArg_GetLong             := getProcAddr(lib, 'PyArg_GetLong');

-  //PyArg_GetShort            := getProcAddr(lib, 'PyArg_GetShort');

-  //PyArg_GetFloat            := getProcAddr(lib, 'PyArg_GetFloat');

-  //PyArg_GetString           := getProcAddr(lib, 'PyArg_GetString');

-  //PyArgs_VaParse            := getProcAddr(lib, 'PyArgs_VaParse');

-  //Py_VaBuildValue           := getProcAddr(lib, 'Py_VaBuildValue');

-  //PyBuiltin_Init            := getProcAddr(lib, 'PyBuiltin_Init');

-  PyComplex_FromCComplex    := getProcAddr(lib, 'PyComplex_FromCComplex');

-  PyComplex_FromDoubles     := getProcAddr(lib, 'PyComplex_FromDoubles');

-  PyComplex_RealAsDouble    := getProcAddr(lib, 'PyComplex_RealAsDouble');

-  PyComplex_ImagAsDouble    := getProcAddr(lib, 'PyComplex_ImagAsDouble');

-  PyComplex_AsCComplex      := getProcAddr(lib, 'PyComplex_AsCComplex');

-  PyCFunction_GetFunction   := getProcAddr(lib, 'PyCFunction_GetFunction');

-  PyCFunction_GetSelf       := getProcAddr(lib, 'PyCFunction_GetSelf');

-  PyCallable_Check          := getProcAddr(lib, 'PyCallable_Check');

-  PyCObject_FromVoidPtr     := getProcAddr(lib, 'PyCObject_FromVoidPtr');

-  PyCObject_AsVoidPtr       := getProcAddr(lib, 'PyCObject_AsVoidPtr');

-  PyClass_New               := getProcAddr(lib, 'PyClass_New');

-  PyClass_IsSubclass        := getProcAddr(lib, 'PyClass_IsSubclass');

-  PyDict_GetItem            := getProcAddr(lib, 'PyDict_GetItem');

-  PyDict_SetItem            := getProcAddr(lib, 'PyDict_SetItem');

-  PyDict_DelItem            := getProcAddr(lib, 'PyDict_DelItem');

-  PyDict_Clear              := getProcAddr(lib, 'PyDict_Clear');

-  PyDict_Next               := getProcAddr(lib, 'PyDict_Next');

-  PyDict_Keys               := getProcAddr(lib, 'PyDict_Keys');

-  PyDict_Values             := getProcAddr(lib, 'PyDict_Values');

-  PyDict_Items              := getProcAddr(lib, 'PyDict_Items');

-  PyDict_Size               := getProcAddr(lib, 'PyDict_Size');

-  PyDict_DelItemString      := getProcAddr(lib, 'PyDict_DelItemString');

-  PyDictProxy_New           := getProcAddr(lib, 'PyDictProxy_New');

-  Py_InitModule4            := getProcAddr(lib, 'Py_InitModule4');

-  PyErr_Print               := getProcAddr(lib, 'PyErr_Print');

-  PyErr_SetNone             := getProcAddr(lib, 'PyErr_SetNone');

-  PyErr_SetObject           := getProcAddr(lib, 'PyErr_SetObject');

-  PyErr_Restore             := getProcAddr(lib, 'PyErr_Restore');

-  PyErr_BadArgument         := getProcAddr(lib, 'PyErr_BadArgument');

-  PyErr_NoMemory            := getProcAddr(lib, 'PyErr_NoMemory');

-  PyErr_SetFromErrno        := getProcAddr(lib, 'PyErr_SetFromErrno');

-  PyErr_BadInternalCall     := getProcAddr(lib, 'PyErr_BadInternalCall');

-  PyErr_CheckSignals        := getProcAddr(lib, 'PyErr_CheckSignals');

-  PyErr_Occurred            := getProcAddr(lib, 'PyErr_Occurred');

-  PyErr_Clear               := getProcAddr(lib, 'PyErr_Clear');

-  PyErr_Fetch               := getProcAddr(lib, 'PyErr_Fetch');

-  PyErr_SetString           := getProcAddr(lib, 'PyErr_SetString');

-  PyEval_GetBuiltins        := getProcAddr(lib, 'PyEval_GetBuiltins');

-  PyImport_GetModuleDict    := getProcAddr(lib, 'PyImport_GetModuleDict');

-  PyInt_FromLong            := getProcAddr(lib, 'PyInt_FromLong');

-  PyArg_ParseTuple      := getProcAddr(lib, 'PyArg_ParseTuple');

-  PyArg_Parse           := getProcAddr(lib, 'PyArg_Parse');

-  Py_BuildValue         := getProcAddr(lib, 'Py_BuildValue');

-  Py_Initialize             := getProcAddr(lib, 'Py_Initialize');

-  PyDict_New                := getProcAddr(lib, 'PyDict_New');

-  PyDict_SetItemString      := getProcAddr(lib, 'PyDict_SetItemString');

-  PyModule_GetDict          := getProcAddr(lib, 'PyModule_GetDict');

-  PyObject_Str              := getProcAddr(lib, 'PyObject_Str');

-  PyRun_String              := getProcAddr(lib, 'PyRun_String');

-  PyRun_SimpleString        := getProcAddr(lib, 'PyRun_SimpleString');

-  PyDict_GetItemString      := getProcAddr(lib, 'PyDict_GetItemString');

-  PyString_AsString         := getProcAddr(lib, 'PyString_AsString');

-  PyString_FromString       := getProcAddr(lib, 'PyString_FromString');

-  PySys_SetArgv             := getProcAddr(lib, 'PySys_SetArgv');

-  Py_Exit                   := getProcAddr(lib, 'Py_Exit');

-

-  PyCFunction_New           :=getProcAddr(lib, 'PyCFunction_New');

-  PyEval_CallObject         :=getProcAddr(lib, 'PyEval_CallObject');

-  PyEval_CallObjectWithKeywords:=getProcAddr(lib, 'PyEval_CallObjectWithKeywords');

-  PyEval_GetFrame           :=getProcAddr(lib, 'PyEval_GetFrame');

-  PyEval_GetGlobals         :=getProcAddr(lib, 'PyEval_GetGlobals');

-  PyEval_GetLocals          :=getProcAddr(lib, 'PyEval_GetLocals');

-  //PyEval_GetOwner           :=getProcAddr(lib, 'PyEval_GetOwner');

-  PyEval_GetRestricted      :=getProcAddr(lib, 'PyEval_GetRestricted');

-  PyEval_InitThreads        :=getProcAddr(lib, 'PyEval_InitThreads');

-  PyEval_RestoreThread      :=getProcAddr(lib, 'PyEval_RestoreThread');

-  PyEval_SaveThread         :=getProcAddr(lib, 'PyEval_SaveThread');

-  PyFile_FromString         :=getProcAddr(lib, 'PyFile_FromString');

-  PyFile_GetLine            :=getProcAddr(lib, 'PyFile_GetLine');

-  PyFile_Name               :=getProcAddr(lib, 'PyFile_Name');

-  PyFile_SetBufSize         :=getProcAddr(lib, 'PyFile_SetBufSize');

-  PyFile_SoftSpace          :=getProcAddr(lib, 'PyFile_SoftSpace');

-  PyFile_WriteObject        :=getProcAddr(lib, 'PyFile_WriteObject');

-  PyFile_WriteString        :=getProcAddr(lib, 'PyFile_WriteString');

-  PyFloat_AsDouble          :=getProcAddr(lib, 'PyFloat_AsDouble');

-  PyFloat_FromDouble        :=getProcAddr(lib, 'PyFloat_FromDouble');

-  PyFunction_GetCode        :=getProcAddr(lib, 'PyFunction_GetCode');

-  PyFunction_GetGlobals     :=getProcAddr(lib, 'PyFunction_GetGlobals');

-  PyFunction_New            :=getProcAddr(lib, 'PyFunction_New');

-  PyImport_AddModule        :=getProcAddr(lib, 'PyImport_AddModule');

-  PyImport_Cleanup          :=getProcAddr(lib, 'PyImport_Cleanup');

-  PyImport_GetMagicNumber   :=getProcAddr(lib, 'PyImport_GetMagicNumber');

-  PyImport_ImportFrozenModule:=getProcAddr(lib, 'PyImport_ImportFrozenModule');

-  PyImport_ImportModule     :=getProcAddr(lib, 'PyImport_ImportModule');

-  PyImport_Import           :=getProcAddr(lib, 'PyImport_Import');

-  //@PyImport_Init             :=getProcAddr(lib, 'PyImport_Init');

-  PyImport_ReloadModule     :=getProcAddr(lib, 'PyImport_ReloadModule');

-  PyInstance_New            :=getProcAddr(lib, 'PyInstance_New');

-  PyInt_AsLong              :=getProcAddr(lib, 'PyInt_AsLong');

-  PyList_Append             :=getProcAddr(lib, 'PyList_Append');

-  PyList_AsTuple            :=getProcAddr(lib, 'PyList_AsTuple');

-  PyList_GetItem            :=getProcAddr(lib, 'PyList_GetItem');

-  PyList_GetSlice           :=getProcAddr(lib, 'PyList_GetSlice');

-  PyList_Insert             :=getProcAddr(lib, 'PyList_Insert');

-  PyList_New                :=getProcAddr(lib, 'PyList_New');

-  PyList_Reverse            :=getProcAddr(lib, 'PyList_Reverse');

-  PyList_SetItem            :=getProcAddr(lib, 'PyList_SetItem');

-  PyList_SetSlice           :=getProcAddr(lib, 'PyList_SetSlice');

-  PyList_Size               :=getProcAddr(lib, 'PyList_Size');

-  PyList_Sort               :=getProcAddr(lib, 'PyList_Sort');

-  PyLong_AsDouble           :=getProcAddr(lib, 'PyLong_AsDouble');

-  PyLong_AsLong             :=getProcAddr(lib, 'PyLong_AsLong');

-  PyLong_FromDouble         :=getProcAddr(lib, 'PyLong_FromDouble');

-  PyLong_FromLong           :=getProcAddr(lib, 'PyLong_FromLong');

-  PyLong_FromString         :=getProcAddr(lib, 'PyLong_FromString');

-  PyLong_FromString         :=getProcAddr(lib, 'PyLong_FromString');

-  PyLong_FromUnsignedLong   :=getProcAddr(lib, 'PyLong_FromUnsignedLong');

-  PyLong_AsUnsignedLong     :=getProcAddr(lib, 'PyLong_AsUnsignedLong');

-  PyLong_FromUnicode        :=getProcAddr(lib, 'PyLong_FromUnicode');

-  PyLong_FromLongLong       :=getProcAddr(lib, 'PyLong_FromLongLong');

-  PyLong_AsLongLong         :=getProcAddr(lib, 'PyLong_AsLongLong');

-

-  PyMapping_Check           :=getProcAddr(lib, 'PyMapping_Check');

-  PyMapping_GetItemString   :=getProcAddr(lib, 'PyMapping_GetItemString');

-  PyMapping_HasKey          :=getProcAddr(lib, 'PyMapping_HasKey');

-  PyMapping_HasKeyString    :=getProcAddr(lib, 'PyMapping_HasKeyString');

-  PyMapping_Length          :=getProcAddr(lib, 'PyMapping_Length');

-  PyMapping_SetItemString   :=getProcAddr(lib, 'PyMapping_SetItemString');

-  PyMethod_Class            :=getProcAddr(lib, 'PyMethod_Class');

-  PyMethod_Function         :=getProcAddr(lib, 'PyMethod_Function');

-  PyMethod_New              :=getProcAddr(lib, 'PyMethod_New');

-  PyMethod_Self             :=getProcAddr(lib, 'PyMethod_Self');

-  PyModule_GetName          :=getProcAddr(lib, 'PyModule_GetName');

-  PyModule_New              :=getProcAddr(lib, 'PyModule_New');

-  PyNumber_Absolute         :=getProcAddr(lib, 'PyNumber_Absolute');

-  PyNumber_Add              :=getProcAddr(lib, 'PyNumber_Add');

-  PyNumber_And              :=getProcAddr(lib, 'PyNumber_And');

-  PyNumber_Check            :=getProcAddr(lib, 'PyNumber_Check');

-  PyNumber_Coerce           :=getProcAddr(lib, 'PyNumber_Coerce');

-  PyNumber_Divide           :=getProcAddr(lib, 'PyNumber_Divide');

-

-  PyNumber_FloorDivide      :=getProcAddr(lib, 'PyNumber_FloorDivide');

-  PyNumber_TrueDivide       :=getProcAddr(lib, 'PyNumber_TrueDivide');

-  PyNumber_Divmod           :=getProcAddr(lib, 'PyNumber_Divmod');

-  PyNumber_Float            :=getProcAddr(lib, 'PyNumber_Float');

-  PyNumber_Int              :=getProcAddr(lib, 'PyNumber_Int');

-  PyNumber_Invert           :=getProcAddr(lib, 'PyNumber_Invert');

-  PyNumber_Long             :=getProcAddr(lib, 'PyNumber_Long');

-  PyNumber_Lshift           :=getProcAddr(lib, 'PyNumber_Lshift');

-  PyNumber_Multiply         :=getProcAddr(lib, 'PyNumber_Multiply');

-  PyNumber_Negative         :=getProcAddr(lib, 'PyNumber_Negative');

-  PyNumber_Or               :=getProcAddr(lib, 'PyNumber_Or');

-  PyNumber_Positive         :=getProcAddr(lib, 'PyNumber_Positive');

-  PyNumber_Power            :=getProcAddr(lib, 'PyNumber_Power');

-  PyNumber_Remainder        :=getProcAddr(lib, 'PyNumber_Remainder');

-  PyNumber_Rshift           :=getProcAddr(lib, 'PyNumber_Rshift');

-  PyNumber_Subtract         :=getProcAddr(lib, 'PyNumber_Subtract');

-  PyNumber_Xor              :=getProcAddr(lib, 'PyNumber_Xor');

-  PyOS_InitInterrupts       :=getProcAddr(lib, 'PyOS_InitInterrupts');

-  PyOS_InterruptOccurred    :=getProcAddr(lib, 'PyOS_InterruptOccurred');

-  PyObject_CallObject       :=getProcAddr(lib, 'PyObject_CallObject');

-  PyObject_Compare          :=getProcAddr(lib, 'PyObject_Compare');

-  PyObject_GetAttr          :=getProcAddr(lib, 'PyObject_GetAttr');

-  PyObject_GetAttrString    :=getProcAddr(lib, 'PyObject_GetAttrString');

-  PyObject_GetItem          :=getProcAddr(lib, 'PyObject_GetItem');

-  PyObject_DelItem          :=getProcAddr(lib, 'PyObject_DelItem');

-  PyObject_HasAttrString    :=getProcAddr(lib, 'PyObject_HasAttrString');

-  PyObject_Hash             :=getProcAddr(lib, 'PyObject_Hash');

-  PyObject_IsTrue           :=getProcAddr(lib, 'PyObject_IsTrue');

-  PyObject_Length           :=getProcAddr(lib, 'PyObject_Length');

-  PyObject_Repr             :=getProcAddr(lib, 'PyObject_Repr');

-  PyObject_SetAttr          :=getProcAddr(lib, 'PyObject_SetAttr');

-  PyObject_SetAttrString    :=getProcAddr(lib, 'PyObject_SetAttrString');

-  PyObject_SetItem          :=getProcAddr(lib, 'PyObject_SetItem');

-

-  PyObject_Init             :=getProcAddr(lib, 'PyObject_Init');

-  PyObject_InitVar          :=getProcAddr(lib, 'PyObject_InitVar');

-  PyObject_New              :=getProcAddr(lib, '_PyObject_New');

-  PyObject_NewVar           :=getProcAddr(lib, '_PyObject_NewVar');

-  PyObject_Free             :=getProcAddr(lib, 'PyObject_Free');

-

-  PyObject_IsInstance       :=getProcAddr(lib, 'PyObject_IsInstance');

-  PyObject_IsSubclass       :=getProcAddr(lib, 'PyObject_IsSubclass');

-

-  PyObject_GenericGetAttr   :=getProcAddr(lib, 'PyObject_GenericGetAttr');

-  PyObject_GenericSetAttr   :=getProcAddr(lib, 'PyObject_GenericSetAttr');

-

-  PyObject_GC_Malloc         :=getProcAddr(lib, '_PyObject_GC_Malloc');

-  PyObject_GC_New            :=getProcAddr(lib, '_PyObject_GC_New');

-  PyObject_GC_NewVar         :=getProcAddr(lib, '_PyObject_GC_NewVar');

-  PyObject_GC_Resize         :=getProcAddr(lib, '_PyObject_GC_Resize');

-  PyObject_GC_Del            :=getProcAddr(lib, 'PyObject_GC_Del');

-  PyObject_GC_Track          :=getProcAddr(lib, 'PyObject_GC_Track');

-  PyObject_GC_UnTrack        :=getProcAddr(lib, 'PyObject_GC_UnTrack');

-

-  PyRange_New               :=getProcAddr(lib, 'PyRange_New');

-  PySequence_Check          :=getProcAddr(lib, 'PySequence_Check');

-  PySequence_Concat         :=getProcAddr(lib, 'PySequence_Concat');

-  PySequence_Count          :=getProcAddr(lib, 'PySequence_Count');

-  PySequence_GetItem        :=getProcAddr(lib, 'PySequence_GetItem');

-  PySequence_GetSlice       :=getProcAddr(lib, 'PySequence_GetSlice');

-  PySequence_In             :=getProcAddr(lib, 'PySequence_In');

-  PySequence_Index          :=getProcAddr(lib, 'PySequence_Index');

-  PySequence_Length         :=getProcAddr(lib, 'PySequence_Length');

-  PySequence_Repeat         :=getProcAddr(lib, 'PySequence_Repeat');

-  PySequence_SetItem        :=getProcAddr(lib, 'PySequence_SetItem');

-  PySequence_SetSlice       :=getProcAddr(lib, 'PySequence_SetSlice');

-  PySequence_DelSlice       :=getProcAddr(lib, 'PySequence_DelSlice');

-  PySequence_Tuple          :=getProcAddr(lib, 'PySequence_Tuple');

-  PySequence_Contains       :=getProcAddr(lib, 'PySequence_Contains');

-  PySlice_GetIndices        :=getProcAddr(lib, 'PySlice_GetIndices');

-  PySlice_GetIndicesEx      :=getProcAddr(lib, 'PySlice_GetIndicesEx');

-  PySlice_New               :=getProcAddr(lib, 'PySlice_New');

-  PyString_Concat           :=getProcAddr(lib, 'PyString_Concat');

-  PyString_ConcatAndDel     :=getProcAddr(lib, 'PyString_ConcatAndDel');

-  PyString_Format           :=getProcAddr(lib, 'PyString_Format');

-  PyString_FromStringAndSize:=getProcAddr(lib, 'PyString_FromStringAndSize');

-  PyString_Size             :=getProcAddr(lib, 'PyString_Size');

-  PyString_DecodeEscape     :=getProcAddr(lib, 'PyString_DecodeEscape');

-  PyString_Repr             :=getProcAddr(lib, 'PyString_Repr');

-  PySys_GetObject           :=getProcAddr(lib, 'PySys_GetObject');

-  //PySys_Init                :=getProcAddr(lib, 'PySys_Init');

-  PySys_SetObject           :=getProcAddr(lib, 'PySys_SetObject');

-  PySys_SetPath             :=getProcAddr(lib, 'PySys_SetPath');

-  //PyTraceBack_Fetch         :=getProcAddr(lib, 'PyTraceBack_Fetch');

-  PyTraceBack_Here          :=getProcAddr(lib, 'PyTraceBack_Here');

-  PyTraceBack_Print         :=getProcAddr(lib, 'PyTraceBack_Print');

-  //PyTraceBack_Store         :=getProcAddr(lib, 'PyTraceBack_Store');

-  PyTuple_GetItem           :=getProcAddr(lib, 'PyTuple_GetItem');

-  PyTuple_GetSlice          :=getProcAddr(lib, 'PyTuple_GetSlice');

-  PyTuple_New               :=getProcAddr(lib, 'PyTuple_New');

-  PyTuple_SetItem           :=getProcAddr(lib, 'PyTuple_SetItem');

-  PyTuple_Size              :=getProcAddr(lib, 'PyTuple_Size');

-

-  PyType_IsSubtype          :=getProcAddr(lib, 'PyType_IsSubtype');

-  PyType_GenericAlloc       :=getProcAddr(lib, 'PyType_GenericAlloc');

-  PyType_GenericNew         :=getProcAddr(lib, 'PyType_GenericNew');

-  PyType_Ready              :=getProcAddr(lib, 'PyType_Ready');

-

-  PyUnicode_FromWideChar    :=getProcAddr(lib, 'PyUnicodeUCS2_FromWideChar');

-  PyUnicode_AsWideChar      :=getProcAddr(lib, 'PyUnicodeUCS2_AsWideChar');

-  PyUnicode_FromOrdinal     :=getProcAddr(lib, 'PyUnicodeUCS2_FromOrdinal');

-

-  PyWeakref_GetObject       :=getProcAddr(lib, 'PyWeakref_GetObject');

-  PyWeakref_NewProxy        :=getProcAddr(lib, 'PyWeakref_NewProxy');

-  PyWeakref_NewRef          :=getProcAddr(lib, 'PyWeakref_NewRef');

-  PyWrapper_New             :=getProcAddr(lib, 'PyWrapper_New');

-

-  PyBool_FromLong           :=getProcAddr(lib, 'PyBool_FromLong'); 

-

-  Py_AtExit                 :=getProcAddr(lib, 'Py_AtExit');

-  //Py_Cleanup                :=getProcAddr(lib, 'Py_Cleanup');

-  Py_CompileString          :=getProcAddr(lib, 'Py_CompileString');

-  Py_FatalError             :=getProcAddr(lib, 'Py_FatalError');

-  Py_FindMethod             :=getProcAddr(lib, 'Py_FindMethod');

-  Py_FindMethodInChain      :=getProcAddr(lib, 'Py_FindMethodInChain');

-  Py_FlushLine              :=getProcAddr(lib, 'Py_FlushLine');

-  Py_Finalize                :=getProcAddr(lib, 'Py_Finalize');

-  PyCode_Addr2Line     := getProcAddr(lib, 'PyCode_Addr2Line');

-  PyClass_IsSubclass         :=getProcAddr(lib, 'PyClass_IsSubclass');

-  PyErr_ExceptionMatches     :=getProcAddr(lib, 'PyErr_ExceptionMatches');

-  PyErr_GivenExceptionMatches:=getProcAddr(lib, 'PyErr_GivenExceptionMatches');

-  PyEval_EvalCode            :=getProcAddr(lib, 'PyEval_EvalCode');

-  Py_GetVersion              :=getProcAddr(lib, 'Py_GetVersion');

-  Py_GetCopyright            :=getProcAddr(lib, 'Py_GetCopyright');

-  Py_GetExecPrefix           :=getProcAddr(lib, 'Py_GetExecPrefix');

-  Py_GetPath                 :=getProcAddr(lib, 'Py_GetPath');

-  Py_GetPrefix               :=getProcAddr(lib, 'Py_GetPrefix');

-  Py_GetProgramName          :=getProcAddr(lib, 'Py_GetProgramName');

-  PyParser_SimpleParseString :=getProcAddr(lib, 'PyParser_SimpleParseString');

-  PyNode_Free                :=getProcAddr(lib, 'PyNode_Free');

-  PyErr_NewException         :=getProcAddr(lib, 'PyErr_NewException');

-/// jah 29-sep-2000 : updated for python 2.0

-///                   replaced Py_Malloc with PyMem_Malloc

-///---   @Py_Malloc := Import ('Py_Malloc');

-///+++   @Py_Malloc := Import ('PyMem_Malloc');

-  Py_Malloc := getProcAddr(lib, 'PyMem_Malloc');

-  PyMem_Malloc := getProcAddr(lib, 'PyMem_Malloc');

-  PyObject_CallMethod        := getProcAddr(lib, 'PyObject_CallMethod');

-  Py_SetProgramName        := getProcAddr(lib, 'Py_SetProgramName');

-  Py_IsInitialized         := getProcAddr(lib, 'Py_IsInitialized');

-  Py_GetProgramFullPath    := getProcAddr(lib, 'Py_GetProgramFullPath');

-  DLL_Py_GetBuildInfo    := getProcAddr(lib, 'Py_GetBuildInfo');

-  Py_NewInterpreter        := getProcAddr(lib, 'Py_NewInterpreter');

-  Py_EndInterpreter        := getProcAddr(lib, 'Py_EndInterpreter');

-  PyEval_AcquireLock       := getProcAddr(lib, 'PyEval_AcquireLock');

-  PyEval_ReleaseLock       := getProcAddr(lib, 'PyEval_ReleaseLock');

-  PyEval_AcquireThread     := getProcAddr(lib, 'PyEval_AcquireThread');

-  PyEval_ReleaseThread     := getProcAddr(lib, 'PyEval_ReleaseThread');

-  PyInterpreterState_New   := getProcAddr(lib, 'PyInterpreterState_New');

-  PyInterpreterState_Clear := getProcAddr(lib, 'PyInterpreterState_Clear');

-  PyInterpreterState_Delete:= getProcAddr(lib, 'PyInterpreterState_Delete');

-  PyThreadState_New        := getProcAddr(lib, 'PyThreadState_New');

-  PyThreadState_Clear      := getProcAddr(lib, 'PyThreadState_Clear');

-  PyThreadState_Delete     := getProcAddr(lib, 'PyThreadState_Delete');

-  PyThreadState_Get        := getProcAddr(lib, 'PyThreadState_Get');

-  PyThreadState_Swap       := getProcAddr(lib, 'PyThreadState_Swap');

-end;

-

-var

-  lib: TLibHandle;

-initialization

-  lib := loadLibrary(dllName);

-  if lib <> NilLibHandle then init(lib);

-end.